[Scummvm-git-logs] scummvm master -> ef870572746dcdc0e719be9dd5effa13c808f5b0

neuromancer noreply at scummvm.org
Tue Mar 31 11:07:14 UTC 2026


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

Summary:
7a04f971c3 FREESCAPE: improved support for eclipse 2 in cpc
ef87057274 FREESCAPE: correctly show score in eclipse cpc


Commit: 7a04f971c3bb9f45fec96c3956c09afd4aac71d0
    https://github.com/scummvm/scummvm/commit/7a04f971c3bb9f45fec96c3956c09afd4aac71d0
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-03-31T12:45:31+02:00

Commit Message:
FREESCAPE: improved support for eclipse 2 in cpc

Changed paths:
    engines/freescape/detection.cpp
    engines/freescape/games/eclipse/cpc.cpp
    engines/freescape/games/eclipse/eclipse.cpp
    engines/freescape/games/eclipse/eclipse.h


diff --git a/engines/freescape/detection.cpp b/engines/freescape/detection.cpp
index 63778cce8fc..32a016db10e 100644
--- a/engines/freescape/detection.cpp
+++ b/engines/freescape/detection.cpp
@@ -630,7 +630,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformAmstradCPC,
 		ADGF_NO_FLAGS,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERCPC)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERCPC, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse2",
@@ -644,7 +644,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformAmstradCPC,
 		ADGF_NO_FLAGS,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERCPC)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERCPC, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse2",
@@ -658,7 +658,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformAmstradCPC,
 		ADGF_NO_FLAGS,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERCPC)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERCPC, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse2", // Tape release
@@ -667,7 +667,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformC64,
 		ADGF_UNSTABLE | GF_C64_TAPE,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERC64)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERC64, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse2", // Disk release
@@ -676,7 +676,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformC64,
 		ADGF_UNSTABLE | GF_C64_DISC,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERC64)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERC64, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse2", // Commodore Format #18
@@ -685,7 +685,7 @@ static const ADGameDescription gameDescriptions[] = {
 		Common::EN_ANY,
 		Common::kPlatformC64,
 		ADGF_UNSUPPORTED | GF_C64_DISC,
-		GUIO2(GUIO_NOMIDI, GUIO_RENDERC64)
+		GUIO4(GUIO_NOMIDI, GUIO_RENDERC64, GAMEOPTION_MODERN_MOVEMENT, GAMEOPTION_WASD_CONTROLS)
 	},
 	{
 		"totaleclipse",
diff --git a/engines/freescape/games/eclipse/cpc.cpp b/engines/freescape/games/eclipse/cpc.cpp
index f7809096510..b6e8129413e 100644
--- a/engines/freescape/games/eclipse/cpc.cpp
+++ b/engines/freescape/games/eclipse/cpc.cpp
@@ -118,9 +118,9 @@ void EclipseEngine::loadAssetsCPCFullGame() {
 
 	if (isEclipse2()) {
 		loadFonts(&file, 0x60bc);
-		loadMessagesFixedSize(&file, 0x326, 16, 30);
+		loadMessagesFixedSize(&file, 0x326, 16, 34);
 		load8bitBinary(&file, 0x62b4, 16);
-		// TODO: loadSoundsCPC for Eclipse 2 - need to determine table offsets from TE2.BI2
+		loadSoundsCPC(&file, 0x0879, 104, 0x08E1, 165, 0x07E6, 147);
 	} else {
 		loadFonts(&file, 0x6076);
 		loadMessagesFixedSize(&file, 0x326, 16, 30);
@@ -131,10 +131,12 @@ void EclipseEngine::loadAssetsCPCFullGame() {
 	loadColorPalette();
 	swapPalette(1);
 
-	if (!isEclipse2()) {
+	if (isEclipse2()) {
+		loadHeartFramesCPC(&file, 0x0D8B, 0x0DBD);
+	} else {
 		loadHeartFramesCPC(&file, 0x0CDB, 0x0D0D);
-		updateHeartFramesCPC();
 	}
+	updateHeartFramesCPC();
 
 	_indicators.push_back(loadBundledImage("eclipse_ankh_indicator"));
 
diff --git a/engines/freescape/games/eclipse/eclipse.cpp b/engines/freescape/games/eclipse/eclipse.cpp
index 97b417cb188..5e6e3dd4193 100644
--- a/engines/freescape/games/eclipse/eclipse.cpp
+++ b/engines/freescape/games/eclipse/eclipse.cpp
@@ -342,6 +342,22 @@ void EclipseEngine::gotoArea(uint16 areaID, int entranceID) {
 	_currentAreaMessages.clear();
 	_currentAreaMessages.push_back(_currentArea->_name);
 
+	if (isEclipse2() && areaID != _startArea && _messagesList.size() > 15) {
+		// Eclipse 2 displays the sphinx parts count when entering indoor areas
+		Common::String partsMsg = _messagesList[15];
+		Common::String::size_type pos = partsMsg.find("XX");
+		if (pos != Common::String::npos) {
+			int parts = _gameStateVars[kVariableEclipse2SphinxParts];
+			Common::String replacement;
+			if (parts < 10)
+				replacement = Common::String::format("%d ", parts);
+			else
+				replacement = Common::String::format("%d", parts);
+			partsMsg.replace(pos, 2, replacement);
+		}
+		insertTemporaryMessage(partsMsg, _countdown - 2);
+	}
+
 	if (entranceID > 0)
 		traverseEntrance(entranceID);
 	else if (entranceID == -1)
@@ -559,12 +575,10 @@ void EclipseEngine::pressedKey(const int keycode) {
 	} else if (keycode == kActionRest) {
 		if (_currentArea->getAreaID() == 1 || _currentArea->getAreaID() == 51) {
 			playSoundFx(3, false);
-			if (_temporaryMessages.empty())
-				insertTemporaryMessage(_messagesList[6], _countdown - 2);
+			insertTemporaryMessage(_messagesList[6], _countdown - 2);
 		} else {
 			_resting = true;
-			if (_temporaryMessages.empty())
-				insertTemporaryMessage(_messagesList[7], _countdown - 2);
+			insertTemporaryMessage(_messagesList[7], _countdown - 2);
 			_countdown = _countdown - 5;
 		}
 	} else if (keycode == kActionFaceForward) {
@@ -1019,7 +1033,22 @@ void EclipseEngine::executePrint(FCLInstruction &instruction) {
 		drawFullscreenMessageAndWait(_messagesList[index]);
 		return;
 	}
-	insertTemporaryMessage(_messagesList[index], _countdown - 2);
+	Common::String message = _messagesList[index];
+	if (isEclipse2()) {
+		// Message 16 (1-based, index 15) contains "XX" placeholder for sphinx parts count.
+		// The original Z80 code at $22FC patches these bytes with the count from variable 0.
+		Common::String::size_type pos = message.find("XX");
+		if (pos != Common::String::npos) {
+			int parts = _gameStateVars[kVariableEclipse2SphinxParts];
+			Common::String replacement;
+			if (parts < 10)
+				replacement = Common::String::format("%d ", parts);
+			else
+				replacement = Common::String::format("%d", parts);
+			message.replace(pos, 2, replacement);
+		}
+	}
+	insertTemporaryMessage(message, _countdown - 2);
 }
 
 Common::Error EclipseEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
diff --git a/engines/freescape/games/eclipse/eclipse.h b/engines/freescape/games/eclipse/eclipse.h
index 508bd07d7db..5a4296bf8ee 100644
--- a/engines/freescape/games/eclipse/eclipse.h
+++ b/engines/freescape/games/eclipse/eclipse.h
@@ -33,6 +33,7 @@ enum EclipseReleaseFlags {
 };
 
 enum {
+	kVariableEclipse2SphinxParts = 1,
 	kVariableEclipseAnkhs = 32,
 };
 


Commit: ef870572746dcdc0e719be9dd5effa13c808f5b0
    https://github.com/scummvm/scummvm/commit/ef870572746dcdc0e719be9dd5effa13c808f5b0
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-03-31T13:06:59+02:00

Commit Message:
FREESCAPE: correctly show score in eclipse cpc

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


diff --git a/engines/freescape/games/eclipse/eclipse.cpp b/engines/freescape/games/eclipse/eclipse.cpp
index 5e6e3dd4193..a5bdef6b4fa 100644
--- a/engines/freescape/games/eclipse/eclipse.cpp
+++ b/engines/freescape/games/eclipse/eclipse.cpp
@@ -976,7 +976,8 @@ void EclipseEngine::drawScoreString(int score, int x, int y, uint32 front, uint3
 
 	for (int i = 0; i < int(scoreStr.size()); i++) {
 		Common::String digit(scoreStr[i]);
-		digit.toUppercase();
+		if (!isCPC())
+			digit.toUppercase();
 		scoreFont->drawString(surface, digit, x, y, _screenW, front);
 		x += charStep;
 		if ((i - scoreStr.size() + 1) % 3 == 1)




More information about the Scummvm-git-logs mailing list