[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