[Scummvm-git-logs] scummvm master -> 0c92adc5f65d51b5604fad915284f5197813ed1e

neuromancer noreply at scummvm.org
Tue Mar 28 18:46:32 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0c92adc5f6 FREESCAPE: re-use loadGlobalObjects for different games


Commit: 0c92adc5f65d51b5604fad915284f5197813ed1e
    https://github.com/scummvm/scummvm/commit/0c92adc5f65d51b5604fad915284f5197813ed1e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-03-28T20:48:11+02:00

Commit Message:
FREESCAPE: re-use loadGlobalObjects for different games

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/games/dark/dark.cpp
    engines/freescape/games/dark/dos.cpp
    engines/freescape/games/driller/amiga.cpp
    engines/freescape/games/driller/atari.cpp
    engines/freescape/games/driller/c64.cpp
    engines/freescape/games/driller/cpc.cpp
    engines/freescape/games/driller/dos.cpp
    engines/freescape/games/driller/driller.cpp
    engines/freescape/games/driller/zx.cpp
    engines/freescape/loaders/8bitBinaryLoader.cpp


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index f8c7c95a376..ccb3af3942a 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -193,6 +193,7 @@ public:
 	void load8bitBinary(Common::SeekableReadStream *file, int offset, int ncolors);
 	Area *load8bitArea(Common::SeekableReadStream *file, uint16 ncolors);
 	Object *load8bitObject(Common::SeekableReadStream *file);
+	void loadGlobalObjects(Common::SeekableReadStream *file, int offset, int size);
 	void renderPixels8bitBinImage(Graphics::ManagedSurface *surface, int &i, int &j, uint8 pixels, int color);
 
 	void renderPixels8bitBinCGAImage(Graphics::ManagedSurface *surface, int &i, int &j, uint8 pixels, int color);
@@ -454,7 +455,6 @@ public:
 	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 
 private:
-	void loadGlobalObjects(Common::SeekableReadStream *file, int offset);
 	bool drillDeployed(Area *area);
 	GeometricObject *_drillBase;
 	Math::Vector3d drillPosition();
@@ -537,7 +537,6 @@ public:
 	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 
 private:
-	void loadGlobalObjects(Common::SeekableReadStream *file, int offset);
 	void addECDs(Area *area);
 	void addECD(Area *area, const Math::Vector3d position, int index);
 	void addWalls(Area *area);
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index b0d5a396340..1e17560ba1d 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -62,21 +62,6 @@ void DarkEngine::titleScreen() {
 	}
 }
 
-void DarkEngine::loadGlobalObjects(Common::SeekableReadStream *file, int offset) {
-	assert(!_areaMap.contains(255));
-	ObjectMap *globalObjectsByID = new ObjectMap;
-	file->seek(offset);
-	for (int i = 0; i < 23; i++) {
-		Object *gobj = load8bitObject(file);
-		assert(gobj);
-		assert(!globalObjectsByID->contains(gobj->getObjectID()));
-		debugC(1, kFreescapeDebugParser, "Adding global object: %d", gobj->getObjectID());
-		(*globalObjectsByID)[gobj->getObjectID()] = gobj;
-	}
-
-	_areaMap[255] = new Area(255, 0, globalObjectsByID, nullptr);
-}
-
 void DarkEngine::addECDs(Area *area) {
 	if (!area->entranceWithID(255))
 		return;
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index b7b22563665..12881e46e46 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -44,7 +44,7 @@ void DarkEngine::loadAssetsDOSDemo() {
 		loadMessagesFixedSize(&file, 0x4525, 16, 27);
 		loadMessagesFixedSize(&file, 0x9959, 307, 5);
 		loadFonts(&file, 0xa598);
-		loadGlobalObjects(&file, 0x3d04);
+		loadGlobalObjects(&file, 0x3d04, 23);
 		load8bitBinary(&file, 0xa700, 16);
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte *)&kEGADefaultPaletteData, 0, 16);
@@ -81,7 +81,7 @@ void DarkEngine::loadAssetsDOSFullGame() {
 
 		loadFonts(&file, 0xa113);
 		loadMessagesFixedSize(&file, 0x4525, 16, 27);
-		loadGlobalObjects(&file, 0x3d04);
+		loadGlobalObjects(&file, 0x3d04, 23);
 		load8bitBinary(&file, 0xa280, 16);
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte *)&kEGADefaultPaletteData, 0, 16);
diff --git a/engines/freescape/games/driller/amiga.cpp b/engines/freescape/games/driller/amiga.cpp
index 28c1037ecc2..7402459aa18 100644
--- a/engines/freescape/games/driller/amiga.cpp
+++ b/engines/freescape/games/driller/amiga.cpp
@@ -44,7 +44,7 @@ void DrillerEngine::loadAssetsAmigaFullGame() {
 
 		loadFonts(&file, 0x8940);
 		loadMessagesFixedSize(&file, 0xc66e, 14, 20);
-		loadGlobalObjects(&file, 0xbd62);
+		loadGlobalObjects(&file, 0xbd62, 8);
 		load8bitBinary(&file, 0x29c16, 16);
 		loadPalettes(&file, 0x297d4);
 		loadSoundsFx(&file, 0x30e80, 25);
@@ -69,7 +69,7 @@ void DrillerEngine::loadAssetsAmigaFullGame() {
 
 		loadFonts(&file, 0xa62);
 		loadMessagesFixedSize(&file, 0x499a, 14, 20);
-		loadGlobalObjects(&file, 0x4098);
+		loadGlobalObjects(&file, 0x4098, 8);
 		load8bitBinary(&file, 0x21a3e, 16);
 		loadPalettes(&file, 0x215fc);
 
@@ -120,7 +120,7 @@ void DrillerEngine::loadAssetsAmigaDemo() {
 
 	loadFonts(&file, 0xa30);
 	loadMessagesFixedSize(&file, 0x3960, 14, 20);
-	loadGlobalObjects(&file, 0x3716);
+	loadGlobalObjects(&file, 0x3716, 8);
 
 	file.close();
 	file.open("soundfx");
diff --git a/engines/freescape/games/driller/atari.cpp b/engines/freescape/games/driller/atari.cpp
index 6c2fe74a4ff..143920cb119 100644
--- a/engines/freescape/games/driller/atari.cpp
+++ b/engines/freescape/games/driller/atari.cpp
@@ -43,7 +43,7 @@ void DrillerEngine::loadAssetsAtariFullGame() {
 
 	loadFonts(&file, 0x8a32);
 	loadMessagesFixedSize(&file, 0xc5d8, 14, 20);
-	loadGlobalObjects(&file, 0xbccc);
+	loadGlobalObjects(&file, 0xbccc, 8);
 	load8bitBinary(&file, 0x29b3c, 16);
 	loadPalettes(&file, 0x296fa);
 	loadSoundsFx(&file, 0x30da6, 25);
@@ -87,7 +87,7 @@ void DrillerEngine::loadAssetsAtariDemo() {
 
 	loadFonts(&file, 0x7bc);
 	loadMessagesFixedSize(&file, 0x3b90, 14, 20);
-	loadGlobalObjects(&file, 0x3946);
+	loadGlobalObjects(&file, 0x3946, 8);
 
 	file.close();
 	file.open("soundfx");
diff --git a/engines/freescape/games/driller/c64.cpp b/engines/freescape/games/driller/c64.cpp
index 45c32204c1c..e52decdc5a7 100644
--- a/engines/freescape/games/driller/c64.cpp
+++ b/engines/freescape/games/driller/c64.cpp
@@ -38,13 +38,13 @@ void DrillerEngine::loadAssetsC64FullGame() {
 		loadMessagesFixedSize(&file, 0x167a, 14, 20);
 		//loadFonts(&file, 0xae54);
 		load8bitBinary(&file, 0x8e02, 4);
-		loadGlobalObjects(&file, 0x1855);
+		loadGlobalObjects(&file, 0x1855, 8);
 	} else if (_targetName.hasPrefix("driller")) {
 		file.open("driller.c64.data");
 		loadMessagesFixedSize(&file, 0x167a - 0x400, 14, 20);
 		//loadFonts(&file, 0xae54);
 		load8bitBinary(&file, 0x8e02 - 0x400, 4);
-		loadGlobalObjects(&file, 0x1855 - 0x400);
+		loadGlobalObjects(&file, 0x1855 - 0x400, 8);
 	} else
 		error("Unknown C64 release");
 }
diff --git a/engines/freescape/games/driller/cpc.cpp b/engines/freescape/games/driller/cpc.cpp
index f441d8bc449..f9d95eef943 100644
--- a/engines/freescape/games/driller/cpc.cpp
+++ b/engines/freescape/games/driller/cpc.cpp
@@ -127,7 +127,7 @@ void DrillerEngine::loadAssetsCPCFullGame() {
 
 	loadMessagesFixedSize(&file, 0x214c, 14, 20);
 	loadFonts(&file, 0x5b69);
-	loadGlobalObjects(&file, 0x1d07);
+	loadGlobalObjects(&file, 0x1d07, 8);
 	load8bitBinary(&file, 0x5ccb, 16);
 }
 
diff --git a/engines/freescape/games/driller/dos.cpp b/engines/freescape/games/driller/dos.cpp
index cdd28d974c9..c96235196cf 100644
--- a/engines/freescape/games/driller/dos.cpp
+++ b/engines/freescape/games/driller/dos.cpp
@@ -286,7 +286,7 @@ void DrillerEngine::loadAssetsDOSFullGame() {
 
 		loadMessagesFixedSize(&file, 0x4135, 14, 20);
 		loadFonts(&file, 0x99dd);
-		loadGlobalObjects(&file, 0x3b42);
+		loadGlobalObjects(&file, 0x3b42, 8);
 		load8bitBinary(&file, 0x9b40, 16);
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte*)&kEGADefaultPaletteData, 0, 16);
@@ -311,7 +311,7 @@ void DrillerEngine::loadAssetsDOSFullGame() {
 		loadFonts(&file, 0x07a4a);
 		loadMessagesFixedSize(&file, 0x2585, 14, 20);
 		load8bitBinary(&file, 0x7bb0, 4);
-		loadGlobalObjects(&file, 0x1fa2);
+		loadGlobalObjects(&file, 0x1fa2, 8);
 		_border = load8bitBinImage(&file, 0x210);
 		_border->setPalette((byte*)&kCGAPalettePinkBlueWhiteData, 0, 4);
 	} else
@@ -338,7 +338,7 @@ void DrillerEngine::loadAssetsDOSDemo() {
 	loadFonts(&file, 0x4eb0);
 	loadMessagesFixedSize(&file, 0x636, 14, 20);
 	load8bitBinary(&file, 0x55b0, 4);
-	loadGlobalObjects(&file, 0x8c);
+	loadGlobalObjects(&file, 0x8c, 5);
 	_border = load8bitDemoImage(&file, 0x6220);
 	_border->setPalette((byte*)&kCGAPalettePinkBlueWhiteData, 0, 4);
 
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 490912727d5..5144aa8ba11 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -186,25 +186,6 @@ void DrillerEngine::gotoArea(uint16 areaID, int entranceID) {
 	resetInput();
 }
 
-void DrillerEngine::loadGlobalObjects(Common::SeekableReadStream *file, int offset) {
-	assert(!_areaMap.contains(255));
-	ObjectMap *globalObjectsByID = new ObjectMap;
-	file->seek(offset);
-	for (int i = 0; i < 8; i++) {
-		if (isDOS() && isDemo()) // The DOS demo has a few missing objects
-			if (i == 5)
-				break;
-
-		Object *gobj = load8bitObject(file);
-		assert(gobj);
-		assert(!globalObjectsByID->contains(gobj->getObjectID()));
-		debugC(1, kFreescapeDebugParser, "Adding global object: %d", gobj->getObjectID());
-		(*globalObjectsByID)[gobj->getObjectID()] = gobj;
-	}
-
-	_areaMap[255] = new Area(255, 0, globalObjectsByID, nullptr);
-}
-
 void DrillerEngine::loadAssetsFullGame() {
 	FreescapeEngine::loadAssetsFullGame();
 	/*
diff --git a/engines/freescape/games/driller/zx.cpp b/engines/freescape/games/driller/zx.cpp
index 65e933b81dc..519832b5957 100644
--- a/engines/freescape/games/driller/zx.cpp
+++ b/engines/freescape/games/driller/zx.cpp
@@ -64,9 +64,9 @@ void DrillerEngine::loadAssetsZXFullGame() {
 		loadFonts(&file, 0x63f0);
 
 	if (_variant & GF_ZX_DISC)
-		loadGlobalObjects(&file, 0x1d13);
+		loadGlobalObjects(&file, 0x1d13, 8);
 	else
-		loadGlobalObjects(&file, 0x1c93);
+		loadGlobalObjects(&file, 0x1c93, 8);
 
 	if (_variant & GF_ZX_RETAIL)
 		load8bitBinary(&file, 0x642c, 4);
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index d9e1157be65..64fe016df02 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -801,4 +801,20 @@ void FreescapeEngine::loadMessagesVariableSize(Common::SeekableReadStream *file,
 	}
 }
 
+void FreescapeEngine::loadGlobalObjects(Common::SeekableReadStream *file, int offset, int size) {
+	assert(!_areaMap.contains(255));
+	ObjectMap *globalObjectsByID = new ObjectMap;
+	file->seek(offset);
+	for (int i = 0; i < size; i++) {
+		Object *gobj = load8bitObject(file);
+		assert(gobj);
+		assert(!globalObjectsByID->contains(gobj->getObjectID()));
+		debugC(1, kFreescapeDebugParser, "Adding global object: %d", gobj->getObjectID());
+		(*globalObjectsByID)[gobj->getObjectID()] = gobj;
+	}
+
+	_areaMap[255] = new Area(255, 0, globalObjectsByID, nullptr);
+}
+
+
 } // namespace Freescape




More information about the Scummvm-git-logs mailing list