[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