[Scummvm-git-logs] scummvm master -> 41233d562df3b8eed3c5dd26cab2d8ce422c2d30

neuromancer noreply at scummvm.org
Sun Nov 13 12:14:12 UTC 2022


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

Summary:
445dc9fd0e FREESCAPE: extended save/load game code per engine
045b5af5c7 FREESCAPE: save list of completed areas in driller
ade2cc66f9 FREESCAPE: keep track of energy and shield in tank/jet in driller
41233d562d FREESCAPE: never render faces with color 0 in driller


Commit: 445dc9fd0e110010e0695cce34b9fe8881c93025
    https://github.com/scummvm/scummvm/commit/445dc9fd0e110010e0695cce34b9fe8881c93025
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-13T13:15:06+01:00

Commit Message:
FREESCAPE: extended save/load game code per engine

Changed paths:
    engines/freescape/freescape.cpp
    engines/freescape/freescape.h
    engines/freescape/games/castle.cpp
    engines/freescape/games/dark.cpp
    engines/freescape/games/driller.cpp
    engines/freescape/games/eclipse.cpp


diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index ae45f07f2fc..9fdd5ea6eb9 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -617,7 +617,7 @@ Common::Error FreescapeEngine::loadGameStream(Common::SeekableReadStream *stream
 	_playerHeightNumber = stream->readByte();
 	if (!_currentArea || _currentArea->getAreaID() != areaID)
 		gotoArea(areaID, -1); // Do not change position nor rotation
-	return Common::kNoError;
+	return loadGameStreamExtended(stream);
 }
 
 Common::Error FreescapeEngine::saveGameStream(Common::WriteStream *stream, bool isAutosave) {
@@ -653,6 +653,14 @@ Common::Error FreescapeEngine::saveGameStream(Common::WriteStream *stream, bool
 
 	stream->writeByte(_flyMode);
 	stream->writeByte(_playerHeightNumber);
+	return saveGameStreamExtended(stream, isAutosave);
+}
+
+Common::Error FreescapeEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	return Common::kNoError;
+}
+
+Common::Error FreescapeEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
 	return Common::kNoError;
 }
 
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 7c10123a71a..79546fab3bc 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -296,6 +296,8 @@ public:
 	bool canSaveGameStateCurrently() override { return true; }
 	Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
+	virtual Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false);
+	virtual Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream);
 
 	// Timers
 	bool startCountdown(uint32 delay);
@@ -330,6 +332,8 @@ public:
 	void drawUI() override;
 
 	void pressedKey(const int keycode) override;
+	Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
+	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 
 private:
 	void loadGlobalObjects(Common::SeekableReadStream *file, int offset);
@@ -352,6 +356,8 @@ public:
 	void loadAssets() override;
 	void gotoArea(uint16 areaID, int entranceID) override;
 	void drawUI() override;
+	Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
+	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 };
 
 class EclipseEngine : public FreescapeEngine {
@@ -363,6 +369,8 @@ public:
 	void gotoArea(uint16 areaID, int entranceID) override;
 
 	void drawUI() override;
+	Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
+	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 };
 
 class CastleEngine : public FreescapeEngine {
@@ -372,7 +380,8 @@ public:
 	void loadAssets() override;
 
 	void gotoArea(uint16 areaID, int entranceID) override;
-
+	Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
+	Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
 private:
 	Common::SeekableReadStream *decryptFile(const Common::String filename);
 };
diff --git a/engines/freescape/games/castle.cpp b/engines/freescape/games/castle.cpp
index eb643b2667b..4600652b457 100644
--- a/engines/freescape/games/castle.cpp
+++ b/engines/freescape/games/castle.cpp
@@ -98,4 +98,12 @@ void CastleEngine::gotoArea(uint16 areaID, int entranceID) {
 		_gfx->_keyColor = 255;
 }
 
+Common::Error CastleEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	return Common::kNoError;
+}
+
+Common::Error CastleEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+	return Common::kNoError;
+}
+
 } // End of namespace Freescape
diff --git a/engines/freescape/games/dark.cpp b/engines/freescape/games/dark.cpp
index 7458d20aa7a..2d4ffa2b27f 100644
--- a/engines/freescape/games/dark.cpp
+++ b/engines/freescape/games/dark.cpp
@@ -144,4 +144,12 @@ void DarkEngine::drawUI() {
 	delete surface;
 }
 
+Common::Error DarkEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	return Common::kNoError;
+}
+
+Common::Error DarkEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+	return Common::kNoError;
+}
+
 } // End of namespace Freescape
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 43f23071238..11e9f1907e5 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -695,4 +695,12 @@ bool DrillerEngine::checkIfGameEnded() {
 	return false;
 }
 
+Common::Error DrillerEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	return Common::kNoError;
+}
+
+Common::Error DrillerEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+	return Common::kNoError;
+}
+
 } // End of namespace Freescape
diff --git a/engines/freescape/games/eclipse.cpp b/engines/freescape/games/eclipse.cpp
index 87e466d5766..723400bf679 100644
--- a/engines/freescape/games/eclipse.cpp
+++ b/engines/freescape/games/eclipse.cpp
@@ -197,4 +197,12 @@ void EclipseEngine::drawUI() {
 	_gfx->setViewport(_viewArea);
 }
 
+Common::Error EclipseEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	return Common::kNoError;
+}
+
+Common::Error EclipseEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+	return Common::kNoError;
+}
+
 } // End of namespace Freescape


Commit: 045b5af5c7c0e0ce6f98a78f15a32d8bd307457e
    https://github.com/scummvm/scummvm/commit/045b5af5c7c0e0ce6f98a78f15a32d8bd307457e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-13T13:15:06+01:00

Commit Message:
FREESCAPE: save list of completed areas in driller

Changed paths:
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 11e9f1907e5..6738ae04f87 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -479,7 +479,7 @@ void DrillerEngine::pressedKey(const int keycode) {
 		insertTemporaryMessage(successMessage, _countdown - 6);
 		if (success >= 50.0) {
 			_completeAreas[_currentArea->getAreaID()] = true;
-			_gameStateVars[32]++; // TODO: save a boolean to indicate if a level is safe or not
+			_gameStateVars[32]++;
 		}
 	} else if (keycode == Common::KEYCODE_c) {
 		uint32 gasPocketRadius = _currentArea->_gasPocketRadius;
@@ -696,10 +696,21 @@ bool DrillerEngine::checkIfGameEnded() {
 }
 
 Common::Error DrillerEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
+	for (auto &it : _areaMap) {
+		stream->writeUint16LE(it._key);
+		stream->writeUint32LE(_completeAreas[it._key]);
+	}
+
 	return Common::kNoError;
 }
 
 Common::Error DrillerEngine::loadGameStreamExtended(Common::SeekableReadStream *stream) {
+	for (uint i = 0; i < _areaMap.size(); i++) {
+		uint16 key = stream->readUint16LE();
+		assert(_areaMap.contains(key));
+		_completeAreas[key] = stream->readUint32LE();
+	}
+
 	return Common::kNoError;
 }
 


Commit: ade2cc66f91464adf9064f12f41c5f39d0c56256
    https://github.com/scummvm/scummvm/commit/ade2cc66f91464adf9064f12f41c5f39d0c56256
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-13T13:15:06+01:00

Commit Message:
FREESCAPE: keep track of energy and shield in tank/jet in driller

Changed paths:
    engines/freescape/freescape.h
    engines/freescape/games/driller.cpp
    engines/freescape/language/8bitDetokeniser.h
    engines/freescape/language/instruction.cpp


diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 79546fab3bc..4c7aa631735 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -318,8 +318,8 @@ public:
 	uint32 _initialJetEnergy;
 	uint32 _initialJetShield;
 
-	uint32 _initialProveEnergy;
-	uint32 _initialProveShield;
+	uint32 _initialTankEnergy;
+	uint32 _initialTankShield;
 
 	StateBits _completeAreas;
 
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index 6738ae04f87..fd317e60d0e 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -46,8 +46,8 @@ DrillerEngine::DrillerEngine(OSystem *syst, const ADGameDescription *gd) : Frees
 	_playerWidth = 12;
 	_playerDepth = 32;
 
-	_initialProveEnergy = 48;
-	_initialProveShield = 50;
+	_initialTankEnergy = 48;
+	_initialTankShield = 50;
 	_initialJetEnergy = 29;
 	_initialJetShield = 34;
 }
@@ -676,8 +676,15 @@ void DrillerEngine::initGameState() {
 		_completeAreas[it._key] = 0;
 	}
 
-	_gameStateVars[k8bitVariableEnergy] = _initialProveEnergy;
-	_gameStateVars[k8bitVariableShield] = _initialProveShield;
+	_gameStateVars[k8bitVariableEnergy] = _initialTankEnergy;
+	_gameStateVars[k8bitVariableShield] = _initialTankShield;
+
+	_gameStateVars[k8bitVariableEnergyDrillerTank] = _initialTankEnergy;
+	_gameStateVars[k8bitVariableShieldDrillerTank] = _initialTankShield;
+
+	_gameStateVars[k8bitVariableEnergyDrillerJet] = _initialJetEnergy;
+	_gameStateVars[k8bitVariableShieldDrillerJet] = _initialJetShield;
+
 	if (_countdown > 0)
 		startCountdown(_countdown);
 }
diff --git a/engines/freescape/language/8bitDetokeniser.h b/engines/freescape/language/8bitDetokeniser.h
index 873f49264cb..b0c1047bb40 100644
--- a/engines/freescape/language/8bitDetokeniser.h
+++ b/engines/freescape/language/8bitDetokeniser.h
@@ -29,7 +29,11 @@ namespace Freescape {
 enum {
 	k8bitVariableShield = 63,
 	k8bitVariableEnergy = 62,
-	k8bitVariableScore = 61
+	k8bitVariableScore = 61,
+	k8bitVariableShieldDrillerTank = 60,
+	k8bitVariableEnergyDrillerTank = 59,
+	k8bitVariableShieldDrillerJet = 58,
+	k8bitVariableEnergyDrillerJet = 57
 };
 
 extern uint8 k8bitMaxVariable;
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index 3d2d908a51d..d2d35e13545 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -395,6 +395,14 @@ void FreescapeEngine::executeSwapJet(FCLInstruction &instruction) {
 		}
 		_playerHeight = 2;
 		_playerHeightNumber = -1;
+
+		// Save tank energy and shield
+		_gameStateVars[k8bitVariableEnergyDrillerTank] = _gameStateVars[k8bitVariableEnergy];
+		_gameStateVars[k8bitVariableShieldDrillerTank] = _gameStateVars[k8bitVariableShield];
+
+		// Restore ship energy and shield
+		_gameStateVars[k8bitVariableEnergy] = _gameStateVars[k8bitVariableEnergyDrillerJet];
+		_gameStateVars[k8bitVariableShield] = _gameStateVars[k8bitVariableShieldDrillerJet];
 	} else {
 		debugC(1, kFreescapeDebugCode, "Swaping to tank mode");
 		_playerHeightNumber = 0;
@@ -402,6 +410,14 @@ void FreescapeEngine::executeSwapJet(FCLInstruction &instruction) {
 			traverseEntrance(27);
 			_lastPosition = _position;
 		}
+
+		// Save shield energy and shield
+		_gameStateVars[k8bitVariableEnergyDrillerJet] = _gameStateVars[k8bitVariableEnergy];
+		_gameStateVars[k8bitVariableShieldDrillerJet] = _gameStateVars[k8bitVariableShield];
+
+		// Restore ship energy and shield
+		_gameStateVars[k8bitVariableEnergy] = _gameStateVars[k8bitVariableEnergyDrillerTank];
+		_gameStateVars[k8bitVariableShield] = _gameStateVars[k8bitVariableShieldDrillerTank];
 	}
 	// TODO: implement the rest of the changes (e.g. border)
 }


Commit: 41233d562df3b8eed3c5dd26cab2d8ce422c2d30
    https://github.com/scummvm/scummvm/commit/41233d562df3b8eed3c5dd26cab2d8ce422c2d30
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-13T13:15:06+01:00

Commit Message:
FREESCAPE: never render faces with color 0 in driller

Changed paths:
    engines/freescape/games/driller.cpp


diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index fd317e60d0e..b728b32b7a4 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -88,10 +88,7 @@ void DrillerEngine::gotoArea(uint16 areaID, int entranceID) {
 	debugC(1, kFreescapeDebugMove, "starting player position: %f, %f, %f", _position.x(), _position.y(), _position.z());
 	playSound(5, false);
 	// Ignore sky/ground fields
-	if (_currentArea->getAreaFlags() == 1)
-		_gfx->_keyColor = 0;
-	else
-		_gfx->_keyColor = 255;
+	_gfx->_keyColor = 0;
 
 	if (isAmiga() || isAtariST())
 		swapPalette(areaID);




More information about the Scummvm-git-logs mailing list