[Scummvm-git-logs] scummvm master -> eb3c810c4d1fecb21e1320ca7e3a550e9adf2850
neuromancer
noreply at scummvm.org
Tue Nov 8 20:22:06 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d6ab3af274 FREESCAPE: parse and implement countdown timer
eb3c810c4d FREESCAPE: display real time clock in driller
Commit: d6ab3af274867a55d81d91f411c95920e30413ec
https://github.com/scummvm/scummvm/commit/d6ab3af274867a55d81d91f411c95920e30413ec
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-08T21:23:05+01:00
Commit Message:
FREESCAPE: parse and implement countdown timer
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/driller.cpp
engines/freescape/loaders/8bitBinaryLoader.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 9f8224c9d45..08eb466ab5f 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -24,6 +24,7 @@
#include "common/math.h"
#include "common/unzip.h"
#include "common/random.h"
+#include "common/timer.h"
#include "graphics/cursorman.h"
#include "freescape/freescape.h"
@@ -102,6 +103,9 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
_viewArea = _fullscreenViewArea;
_rnd = new Common::RandomSource("freescape");
_gfx = nullptr;
+
+ _timerStarted = false;
+ _countdown = 0;
}
FreescapeEngine::~FreescapeEngine() {
@@ -643,4 +647,22 @@ Graphics::Surface *FreescapeEngine::loadAndConvertNeoImage(Common::SeekableReadS
return surface;
}
+static void countdownCallback(void *refCon) {
+ FreescapeEngine* self = (FreescapeEngine *)refCon;
+ self->_countdown--;
+}
+
+bool FreescapeEngine::startCountdown(uint32 delay) {
+ _countdown = delay;
+ _timerStarted = true;
+ uint32 oneSecond = 1000000;
+ return g_system->getTimerManager()->installTimerProc(&countdownCallback, oneSecond, (void *)this, "countdown");
+}
+
+void FreescapeEngine::removeTimers() {
+ _timerStarted = false;
+ g_system->getTimerManager()->removeTimerProc(&countdownCallback);
+}
+
+
} // namespace Freescape
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 608bb111d0c..95d5df325c6 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -282,6 +282,12 @@ public:
bool canSaveGameStateCurrently() override { return true; }
Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
+
+ // Timers
+ bool startCountdown(uint32 delay);
+ void removeTimers();
+ bool _timerStarted;
+ int _countdown;
};
enum DrillerReleaseFlags {
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index c82c8b3c623..f52afde0ed8 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -631,6 +631,8 @@ void DrillerEngine::initGameState() {
_gameStateVars[k8bitVariableEnergy] = _initialProveEnergy;
_gameStateVars[k8bitVariableShield] = _initialProveShield;
+ if (_countdown > 0)
+ startCountdown(_countdown);
}
bool DrillerEngine::checkIfGameEnded() {
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index ecdffbe8b51..7ff33fb47b4 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -472,6 +472,31 @@ void FreescapeEngine::load8bitBinary(Common::SeekableReadStream *file, int offse
debugC(1, kFreescapeDebugParser, "%s", conditionSource.c_str());
}
+ if (isDriller()) {
+ if (isAmiga() || isAtariST())
+ file->seek(offset + 0x168);
+ else
+ file->seek(offset + 0xb4);
+ Common::String n;
+ n += char(readField(file, 8));
+ n += char(readField(file, 8));
+ _countdown = _countdown + 3600 * atoi(n.c_str());
+ n.clear();
+ n += char(readField(file, 8));
+ assert(n == ":");
+ n.clear();
+ n += char(readField(file, 8));
+ n += char(readField(file, 8));
+ _countdown = _countdown + 60 * atoi(n.c_str());
+ n.clear();
+ n += char(readField(file, 8));
+ assert(n == ":");
+ n.clear();
+ n += char(readField(file, 8));
+ n += char(readField(file, 8));
+ _countdown = _countdown + atoi(n.c_str());
+ }
+
if (isAmiga() || isAtariST())
file->seek(offset + 0x190);
else
Commit: eb3c810c4d1fecb21e1320ca7e3a550e9adf2850
https://github.com/scummvm/scummvm/commit/eb3c810c4d1fecb21e1320ca7e3a550e9adf2850
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-11-08T21:23:06+01:00
Commit Message:
FREESCAPE: display real time clock in driller
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/games/driller.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index 08eb466ab5f..a3593ffe6d7 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -109,6 +109,7 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
}
FreescapeEngine::~FreescapeEngine() {
+ removeTimers();
delete _rnd;
if (_title && _title != _border) {
diff --git a/engines/freescape/games/driller.cpp b/engines/freescape/games/driller.cpp
index f52afde0ed8..3fc26b35d74 100644
--- a/engines/freescape/games/driller.cpp
+++ b/engines/freescape/games/driller.cpp
@@ -356,6 +356,13 @@ void DrillerEngine::drawUI() {
drawStringInSurface(Common::String::format("%04d", 2 * int(_position.y())), 150, 161, yellow, black, surface);
drawStringInSurface(Common::String::format("%d", _playerHeightNumber), 57, 161, yellow, black, surface);
drawStringInSurface(Common::String::format("%07d", score), 240, 129, yellow, black, surface);
+
+ int hours = _countdown / 3600;
+ drawStringInSurface(Common::String::format("%02d", hours), 208, 8, yellow, black, surface);
+ int minutes = (_countdown - hours * 3600) / 60;
+ drawStringInSurface(Common::String::format("%02d", minutes), 230, 8, yellow, black, surface);
+ int seconds = _countdown - hours * 3600 - minutes * 60;
+ drawStringInSurface(Common::String::format("%02d", seconds), 254, 8, yellow, black, surface);
}
int energy = _gameStateVars[k8bitVariableEnergy];
More information about the Scummvm-git-logs
mailing list