[Scummvm-git-logs] scummvm master -> 5607de83a0c6a648f6f139b76a527d6883e6d5df

mduggan noreply at scummvm.org
Sat Mar 15 06:51:37 UTC 2025


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:
5607de83a0 DGDS: Fix implementation of a few HoC globals


Commit: 5607de83a0c6a648f6f139b76a527d6883e6d5df
    https://github.com/scummvm/scummvm/commit/5607de83a0c6a648f6f139b76a527d6883e6d5df
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2025-03-15T17:45:17+11:00

Commit Message:
DGDS: Fix implementation of a few HoC globals

Implement difficulty level and pal fade globals.

Changed paths:
    engines/dgds/globals.cpp
    engines/dgds/globals.h


diff --git a/engines/dgds/globals.cpp b/engines/dgds/globals.cpp
index 22c564bece3..bb650cfacfe 100644
--- a/engines/dgds/globals.cpp
+++ b/engines/dgds/globals.cpp
@@ -237,16 +237,65 @@ public:
 	}
 };
 
+class HocDifficultyGlobal : public Global {
+public:
+	HocDifficultyGlobal(uint16 num) : Global(num) {}
+	int16 get() override { return DgdsEngine::getInstance()->getDifficulty(); }
+	int16 set(int16 val) override {
+		DgdsEngine::getInstance()->setDifficulty(val);
+		return DgdsEngine::getInstance()->getDetailLevel();
+	}
+	void setRaw(int16 val) override {
+		DgdsEngine::getInstance()->setDifficulty(val);
+	}
+};
 
-HocGlobals::HocGlobals(Clock &clock) : Globals(clock), _difficultyLevel(1), _unk55(0),
-	_unkDlgFileNum(0), _unkDlgDlgNum(0),  _currentCharacter2(0), _currentCharacter(0),
-	_tankFinished(0), _nativeGameState(0), _tankState(0), _unk47(0), _unk46(0), _unk45(0x3f), _sheckels(0),
+
+class HocPalFadeGlobal : public RWI16Global {
+public:
+	HocPalFadeGlobal(uint16 num, int16 *val) : RWI16Global(num, val), _lastWas0x41(false) {}
+	int16 set(int16 val) override {
+		const int16 oldVal = RWI16Global::get();
+		if (val < 0x40) {
+			if (oldVal == val)
+				return val;
+
+			const int step = (oldVal < val) ? 1 : -1;
+			for (int16 fade = oldVal; val + step != fade; fade = fade + step) {
+				int16 ncols;
+				int16 colno;
+				if (!_lastWas0x41) {
+					ncols = 0xc0;
+					colno = 0x40;
+				} else {
+					ncols = 0xe0;
+					colno = 0x20;
+				}
+				DgdsEngine::getInstance()->getGamePals()->setFade(colno, ncols, 0, fade * 4);
+				g_system->updateScreen();
+				g_system->delayMillis(5);
+			}
+		} else {
+			_lastWas0x41 = (val == 0x41);
+			val = 0x3f;
+		}
+		return RWI16Global::set(val);
+	}
+
+private:
+	bool _lastWas0x41;
+};
+
+
+HocGlobals::HocGlobals(Clock &clock) : Globals(clock), _unk55(0),
+	_partnerDlgFileNum(0), _partnerDlgDlgNum(0),  _currentCharacter2(0), _currentCharacter(0),
+	_tankFinished(0), _nativeGameState(0), _tankState(0), _unk47(0), _unk46(0), _palFade(0x3f), _sheckels(0),
 	_shellBet(0), _shellPea(0), _trainState(0), _startScene(3), _introState(0) {
 	_globals.push_back(new DetailLevelROGlobal(0x53));
-	_globals.push_back(new RWI16Global(0x52, &_difficultyLevel)); // TODO: Sync with difficulty in menu
+	_globals.push_back(new HocDifficultyGlobal(0x52));
 	_globals.push_back(new RWI16Global(0x37, &_unk55)); // TODO: Special update function FUN_1407_080d, sound init related.. sound bank?
-	_globals.push_back(new RWI16Global(0x36, &_unkDlgFileNum));
-	_globals.push_back(new RWI16Global(0x35, &_unkDlgDlgNum));
+	_globals.push_back(new RWI16Global(0x36, &_partnerDlgFileNum));
+	_globals.push_back(new RWI16Global(0x35, &_partnerDlgDlgNum));
 	_globals.push_back(new HocCharacterGlobal(0x34, &_currentCharacter));
 	_globals.push_back(new HocCharacterGlobal(0x33, &_currentCharacter2));
 	_globals.push_back(new RWI16Global(0x32, &_tankFinished));
@@ -254,7 +303,7 @@ HocGlobals::HocGlobals(Clock &clock) : Globals(clock), _difficultyLevel(1), _unk
 	_globals.push_back(new RWI16Global(0x30, &_tankState));
 	_globals.push_back(new RWI16Global(0x2F, &_unk47)); // tank related.. cows?
 	_globals.push_back(new RWI16Global(0x2E, &_unk46)); // tank related.. start point?
-	_globals.push_back(new RWI16Global(0x2D, &_unk45)); // TODO: Special update function FUN_1407_0784, palette related?
+	_globals.push_back(new HocPalFadeGlobal(0x2D, &_palFade));
 	_globals.push_back(new RWI16Global(0x2C, &_sheckels));	// used as currency in Istanbul
 	_globals.push_back(new RWI16Global(0x2B, &_shellBet));
 	_globals.push_back(new RWI16Global(0x2A, &_shellPea));
@@ -272,7 +321,7 @@ Common::Error HocGlobals::syncState(Common::Serializer &s) {
 	s.syncAsSint16LE(_shellPea);
 	s.syncAsSint16LE(_shellBet);
 	s.syncAsSint16LE(_sheckels);
-	s.syncAsSint16LE(_unk45);
+	s.syncAsSint16LE(_palFade);
 	s.syncAsSint16LE(_unk46);
 	s.syncAsSint16LE(_unk47);
 	s.syncAsSint16LE(_tankState);
@@ -280,10 +329,13 @@ Common::Error HocGlobals::syncState(Common::Serializer &s) {
 	s.syncAsSint16LE(_tankFinished);
 	s.syncAsSint16LE(_currentCharacter);
 	s.syncAsSint16LE(_currentCharacter2);
-	s.syncAsSint16LE(_unkDlgDlgNum);
-	s.syncAsSint16LE(_unkDlgFileNum);
+	s.syncAsSint16LE(_partnerDlgDlgNum);
+	s.syncAsSint16LE(_partnerDlgFileNum);
 	s.syncAsSint16LE(_unk55);
-	s.syncAsSint16LE(_difficultyLevel);
+
+	// This was a duplicate of difficulty level (replaced by HocDifficultyGlobal).
+	// Sync a 16-bit int for backward compatibility.
+	s.skip(2);
 
 	return Common::kNoError;
 }
diff --git a/engines/dgds/globals.h b/engines/dgds/globals.h
index d8bcd23d4b9..8c896493c11 100644
--- a/engines/dgds/globals.h
+++ b/engines/dgds/globals.h
@@ -178,7 +178,7 @@ private:
 	int16 _shellPea;
 	int16 _shellBet;
 	int16 _sheckels;
-	int16 _unk45;
+	int16 _palFade;
 	int16 _unk46;
 	int16 _unk47;
 	int16 _tankState;
@@ -186,10 +186,9 @@ private:
 	int16 _tankFinished;
 	int16 _currentCharacter;
 	int16 _currentCharacter2;
-	int16 _unkDlgDlgNum;
-	int16 _unkDlgFileNum;
+	int16 _partnerDlgDlgNum;	// Dialog shown when right-clicking
+	int16 _partnerDlgFileNum;	//  on character swap button
 	int16 _unk55;
-	int16 _difficultyLevel;
 
 	Common::Error syncState(Common::Serializer &s) override;
 };




More information about the Scummvm-git-logs mailing list