[Scummvm-git-logs] scummvm master -> ff9e5da5c40c7d6a6648ac02270829b30feb4995
neuromancer
noreply at scummvm.org
Tue May 26 11:39:52 UTC 2026
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
eb1d4144f7 FREESCAPE: music for castle atari
3942c6cf1b FREESCAPE: cleaned up freescape.dat
f11b221996 FREESCAPE: removed hard assertion when drilling in driller
ff9e5da5c4 FREESCAPE: reset color remapps when calling SPFX(2,0)
Commit: eb1d4144f7e9431fd1673a331663e0847e5b76a2
https://github.com/scummvm/scummvm/commit/eb1d4144f7e9431fd1673a331663e0847e5b76a2
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-26T13:39:00+02:00
Commit Message:
FREESCAPE: music for castle atari
Changed paths:
engines/freescape/games/castle/amiga.cpp
engines/freescape/games/castle/atari.cpp
engines/freescape/games/castle/castle.cpp
diff --git a/engines/freescape/games/castle/amiga.cpp b/engines/freescape/games/castle/amiga.cpp
index 2f91fe9956d..820a9ff2579 100644
--- a/engines/freescape/games/castle/amiga.cpp
+++ b/engines/freescape/games/castle/amiga.cpp
@@ -1842,9 +1842,13 @@ bool CastleEngine::playAtariIntro() {
stream->read(introText.data(), textSize);
delete stream;
- // TODO(castle-atari): locate and play the intro music (the Amiga build uses
- // a separate "musicdat" ProTracker module; the Atari equivalent still needs
- // to be found). The intro currently plays silently.
+ Audio::SoundHandle introMusicHandle;
+ if (!_modData.empty()) {
+ Common::MemoryReadStream modStream(_modData.data(), _modData.size());
+ Audio::AudioStream *musicStream = Audio::makeProtrackerStream(&modStream);
+ if (musicStream)
+ _mixer->playStream(Audio::Mixer::kMusicSoundType, &introMusicHandle, musicStream);
+ }
bool selectedPrincess = false;
CastleAmigaIntroPlayer player(this, introText, kAtariIntroLayout);
@@ -1852,6 +1856,9 @@ bool CastleEngine::playAtariIntro() {
if (played)
_selectedPrincess = selectedPrincess;
+ if (_mixer->isSoundHandleActive(introMusicHandle))
+ _mixer->stopHandle(introMusicHandle);
+
_gfx->clear(0, 0, 0, true);
return played;
}
diff --git a/engines/freescape/games/castle/atari.cpp b/engines/freescape/games/castle/atari.cpp
index 8b04b6a186e..b7c38e031a6 100644
--- a/engines/freescape/games/castle/atari.cpp
+++ b/engines/freescape/games/castle/atari.cpp
@@ -124,6 +124,42 @@ Common::SeekableReadStream *CastleEngine::decompressAtari(const Common::Path &fi
return new Common::MemoryReadStream(out.getData(), out.size(), DisposeAfterUse::YES);
}
+static uint32 getProTrackerModuleSize(Common::SeekableReadStream *file, uint32 offset) {
+ int64 oldPos = file->pos();
+ uint32 result = 0;
+
+ if (offset + 1084 <= (uint32)file->size()) {
+ file->seek(offset + 1080);
+ if (file->readUint32BE() == 0x4d2e4b2e) {
+ file->seek(offset + 950);
+ byte songLength = file->readByte();
+ file->readByte();
+
+ if (songLength > 0 && songLength <= 128) {
+ byte highestPattern = 0;
+ for (int i = 0; i < 128; i++) {
+ byte pattern = file->readByte();
+ if (i < songLength)
+ highestPattern = MAX(highestPattern, pattern);
+ }
+
+ uint32 sampleBytes = 0;
+ for (int i = 0; i < 31; i++) {
+ file->seek(offset + 20 + i * 30 + 22);
+ sampleBytes += file->readUint16BE() * 2;
+ }
+
+ uint32 moduleSize = 1084 + (highestPattern + 1) * 1024 + sampleBytes;
+ if (offset + moduleSize <= (uint32)file->size())
+ result = moduleSize;
+ }
+ }
+ }
+
+ file->seek(oldPos);
+ return result;
+}
+
extern byte kAmigaCastlePalette[16][3];
extern byte kAmigaCastleRiddlePalette[16][3];
@@ -352,6 +388,16 @@ void CastleEngine::loadAssetsAtariFullGame() {
// menu is guarded against the missing surfaces. The mouse cursor / crosshair
// sprites also still need to be located.
+ // The full Atari ST binary embeds the same ProTracker module used by the
+ // Amiga full game. It starts at TEXT $10F9A / stream offset $10FB6.
+ static const uint32 kAtariMusicDataOffset = 0x10fb6;
+ uint32 modSize = getProTrackerModuleSize(file, kAtariMusicDataOffset);
+ if (modSize > 0) {
+ _modData.resize(modSize);
+ file->seek(kAtariMusicDataOffset);
+ file->read(_modData.data(), modSize);
+ }
+
delete file;
}
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index d5b3c1a9ef1..c410ad12703 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -586,8 +586,8 @@ void CastleEngine::gotoArea(uint16 areaID, int entranceID) {
else
playSound(_soundIndexStart, false, _soundFxHandle);
- // Start ProTracker background music for Amiga demo
- if (isAmiga() && !_modData.empty() && !_mixer->isSoundHandleActive(_musicHandle)) {
+ // Start ProTracker background music for Amiga and Atari ST builds.
+ if ((isAmiga() || isAtariST()) && !_modData.empty() && !_mixer->isSoundHandleActive(_musicHandle)) {
Common::MemoryReadStream modStream(_modData.data(), _modData.size());
Audio::AudioStream *musicStream = Audio::makeProtrackerStream(&modStream);
if (musicStream)
Commit: 3942c6cf1baabab3446874ca18a9cd4893d5bcb6
https://github.com/scummvm/scummvm/commit/3942c6cf1baabab3446874ca18a9cd4893d5bcb6
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-26T13:39:00+02:00
Commit Message:
FREESCAPE: cleaned up freescape.dat
Changed paths:
A devtools/create_freescape/castle_border_Commodore 64.bmp
R devtools/create_freescape/dark_crouch_indicator_Amstrad CPC.bmp
R devtools/create_freescape/dark_fallen_indicator_Amstrad CPC.bmp
R devtools/create_freescape/dark_jet_indicator_Amstrad CPC.bmp
R devtools/create_freescape/dark_walk_indicator_Amstrad CPC.bmp
R devtools/create_freescape/darkside-cpc-1.wav
R devtools/create_freescape/darkside-cpc-10.wav
R devtools/create_freescape/darkside-cpc-11.wav
R devtools/create_freescape/darkside-cpc-12.wav
R devtools/create_freescape/darkside-cpc-13.wav
R devtools/create_freescape/darkside-cpc-14.wav
R devtools/create_freescape/darkside-cpc-15.wav
R devtools/create_freescape/darkside-cpc-16.wav
R devtools/create_freescape/darkside-cpc-17.wav
R devtools/create_freescape/darkside-cpc-18.wav
R devtools/create_freescape/darkside-cpc-19.wav
R devtools/create_freescape/darkside-cpc-20.wav
R devtools/create_freescape/darkside-cpc-21.wav
R devtools/create_freescape/darkside-cpc-22.wav
R devtools/create_freescape/darkside-cpc-23.wav
R devtools/create_freescape/darkside-cpc-3.wav
R devtools/create_freescape/darkside-cpc-4.wav
R devtools/create_freescape/darkside-cpc-5.wav
R devtools/create_freescape/darkside-cpc-6.wav
R devtools/create_freescape/darkside-cpc-7.wav
R devtools/create_freescape/darkside-cpc-8.wav
R devtools/create_freescape/darkside-cpc-9.wav
R devtools/create_freescape/spacestationoblivion_c64.bmp
devtools/create_freescape/create_freescape.sh
dists/engine-data/freescape.dat
diff --git a/devtools/create_freescape/castle_border_Commodore 64.bmp b/devtools/create_freescape/castle_border_Commodore 64.bmp
new file mode 100644
index 00000000000..9731f29d90b
Binary files /dev/null and b/devtools/create_freescape/castle_border_Commodore 64.bmp differ
diff --git a/devtools/create_freescape/create_freescape.sh b/devtools/create_freescape/create_freescape.sh
index 555690b765f..e3a5e016220 100755
--- a/devtools/create_freescape/create_freescape.sh
+++ b/devtools/create_freescape/create_freescape.sh
@@ -2,7 +2,7 @@
printf "Creating border/sounds file...\n"
-zip -r freescape.zip version *.bmp *.wav
+zip -r freescape.zip version *.bmp
mv freescape.zip freescape.dat
echo done
diff --git a/devtools/create_freescape/dark_crouch_indicator_Amstrad CPC.bmp b/devtools/create_freescape/dark_crouch_indicator_Amstrad CPC.bmp
deleted file mode 100644
index ac7cce50fd0..00000000000
Binary files a/devtools/create_freescape/dark_crouch_indicator_Amstrad CPC.bmp and /dev/null differ
diff --git a/devtools/create_freescape/dark_fallen_indicator_Amstrad CPC.bmp b/devtools/create_freescape/dark_fallen_indicator_Amstrad CPC.bmp
deleted file mode 100644
index bfa6dee5b6d..00000000000
Binary files a/devtools/create_freescape/dark_fallen_indicator_Amstrad CPC.bmp and /dev/null differ
diff --git a/devtools/create_freescape/dark_jet_indicator_Amstrad CPC.bmp b/devtools/create_freescape/dark_jet_indicator_Amstrad CPC.bmp
deleted file mode 100644
index f6068c8563a..00000000000
Binary files a/devtools/create_freescape/dark_jet_indicator_Amstrad CPC.bmp and /dev/null differ
diff --git a/devtools/create_freescape/dark_walk_indicator_Amstrad CPC.bmp b/devtools/create_freescape/dark_walk_indicator_Amstrad CPC.bmp
deleted file mode 100644
index 1325c82823a..00000000000
Binary files a/devtools/create_freescape/dark_walk_indicator_Amstrad CPC.bmp and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-1.wav b/devtools/create_freescape/darkside-cpc-1.wav
deleted file mode 100644
index 51bc0cb3fdc..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-1.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-10.wav b/devtools/create_freescape/darkside-cpc-10.wav
deleted file mode 100644
index 21752d30127..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-10.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-11.wav b/devtools/create_freescape/darkside-cpc-11.wav
deleted file mode 100644
index 423f9f8d075..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-11.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-12.wav b/devtools/create_freescape/darkside-cpc-12.wav
deleted file mode 100644
index 6d5030aa2e4..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-12.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-13.wav b/devtools/create_freescape/darkside-cpc-13.wav
deleted file mode 100644
index 2f607bcd28f..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-13.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-14.wav b/devtools/create_freescape/darkside-cpc-14.wav
deleted file mode 100644
index db584bef184..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-14.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-15.wav b/devtools/create_freescape/darkside-cpc-15.wav
deleted file mode 100644
index 99e0991736c..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-15.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-16.wav b/devtools/create_freescape/darkside-cpc-16.wav
deleted file mode 100644
index 6cf8327712a..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-16.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-17.wav b/devtools/create_freescape/darkside-cpc-17.wav
deleted file mode 100644
index 6a1d9af485f..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-17.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-18.wav b/devtools/create_freescape/darkside-cpc-18.wav
deleted file mode 100644
index 952bea25b12..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-18.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-19.wav b/devtools/create_freescape/darkside-cpc-19.wav
deleted file mode 100644
index b4bec4e7819..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-19.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-20.wav b/devtools/create_freescape/darkside-cpc-20.wav
deleted file mode 100644
index 3b4b1e94d7f..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-20.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-21.wav b/devtools/create_freescape/darkside-cpc-21.wav
deleted file mode 100644
index 93c0800f72b..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-21.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-22.wav b/devtools/create_freescape/darkside-cpc-22.wav
deleted file mode 100644
index f4b0ab6b44c..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-22.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-23.wav b/devtools/create_freescape/darkside-cpc-23.wav
deleted file mode 100644
index 546f495bbfd..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-23.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-3.wav b/devtools/create_freescape/darkside-cpc-3.wav
deleted file mode 100644
index 90f703c45a1..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-3.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-4.wav b/devtools/create_freescape/darkside-cpc-4.wav
deleted file mode 100644
index 1f5ccb34adf..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-4.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-5.wav b/devtools/create_freescape/darkside-cpc-5.wav
deleted file mode 100644
index 1cb1fac02bc..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-5.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-6.wav b/devtools/create_freescape/darkside-cpc-6.wav
deleted file mode 100644
index b133404e080..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-6.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-7.wav b/devtools/create_freescape/darkside-cpc-7.wav
deleted file mode 100644
index 7a5e47955be..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-7.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-8.wav b/devtools/create_freescape/darkside-cpc-8.wav
deleted file mode 100644
index d23fe92f843..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-8.wav and /dev/null differ
diff --git a/devtools/create_freescape/darkside-cpc-9.wav b/devtools/create_freescape/darkside-cpc-9.wav
deleted file mode 100644
index b9b01ff5a04..00000000000
Binary files a/devtools/create_freescape/darkside-cpc-9.wav and /dev/null differ
diff --git a/devtools/create_freescape/spacestationoblivion_c64.bmp b/devtools/create_freescape/spacestationoblivion_c64.bmp
deleted file mode 100644
index 1ba8f235161..00000000000
Binary files a/devtools/create_freescape/spacestationoblivion_c64.bmp and /dev/null differ
diff --git a/dists/engine-data/freescape.dat b/dists/engine-data/freescape.dat
index 9ead4c51247..f3633fe13d7 100644
Binary files a/dists/engine-data/freescape.dat and b/dists/engine-data/freescape.dat differ
Commit: f11b2219969848f5dbfdc2abcecbd14c13e14438
https://github.com/scummvm/scummvm/commit/f11b2219969848f5dbfdc2abcecbd14c13e14438
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-26T13:39:00+02:00
Commit Message:
FREESCAPE: removed hard assertion when drilling in driller
Changed paths:
engines/freescape/games/driller/driller.cpp
diff --git a/engines/freescape/games/driller/driller.cpp b/engines/freescape/games/driller/driller.cpp
index 62721ef68d6..b67c28b4b59 100644
--- a/engines/freescape/games/driller/driller.cpp
+++ b/engines/freescape/games/driller/driller.cpp
@@ -605,7 +605,9 @@ void DrillerEngine::pressedKey(const int keycode) {
if (success <= 0) {
debugC(1, kFreescapeDebugMove, "DRILL result: no gas found");
insertTemporaryMessage(_messagesList[9], _countdown - 4);
- _drillStatusByArea[_currentArea->getAreaID()] = kDrillerRigNoGas;
+ uint16 areaID = _currentArea->getAreaID();
+ _drillStatusByArea[areaID] = kDrillerRigNoGas;
+ _drillSuccessByArea[areaID] = 0;
return;
}
Common::String maxScoreMessage = _messagesList[5];
@@ -655,18 +657,23 @@ void DrillerEngine::pressedKey(const int keycode) {
_gameStateVars[k8bitVariableEnergy] = _gameStateVars[k8bitVariableEnergy] - 5;
uint16 areaID = _currentArea->getAreaID();
- if (_drillStatusByArea[areaID] > 0) {
- if (_drillStatusByArea[areaID] == kDrillerRigInPlace)
+ uint32 drillStatus = _drillStatusByArea[areaID];
+ if (drillStatus > 0) {
+ if (drillStatus == kDrillerRigInPlace)
_gameStateVars[32]--;
_drillStatusByArea[areaID] = kDrillerNoRig;
}
removeDrill(_currentArea);
insertTemporaryMessage(_messagesList[10], _countdown - 2);
- int maxScore = _drillMaxScoreByArea[_currentArea->getAreaID()];
- uint32 success = _drillSuccessByArea[_currentArea->getAreaID()];
+ int maxScore = _drillMaxScoreByArea[areaID];
+ uint32 success = (drillStatus == kDrillerRigInPlace || drillStatus == kDrillerRigOutOfPlace) ? _drillSuccessByArea[areaID] : 0;
uint32 scoreToRemove = uint32(maxScore * success) / 100;
- assert(scoreToRemove <= uint32(_gameStateVars[k8bitVariableScore]));
+ if (scoreToRemove > uint32(_gameStateVars[k8bitVariableScore])) {
+ warning("Driller: rig score mismatch in area %d, clamping score removal", areaID);
+ scoreToRemove = uint32(_gameStateVars[k8bitVariableScore]);
+ }
_gameStateVars[k8bitVariableScore] -= scoreToRemove;
+ _drillSuccessByArea[areaID] = 0;
executeMovementConditions();
if (isDOS() || isAmiga() || isAtariST())
playSound(_soundIndexAreaChange, false, _soundFxHandle);
Commit: ff9e5da5c40c7d6a6648ac02270829b30feb4995
https://github.com/scummvm/scummvm/commit/ff9e5da5c40c7d6a6648ac02270829b30feb4995
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-05-26T13:39:00+02:00
Commit Message:
FREESCAPE: reset color remapps when calling SPFX(2,0)
Changed paths:
engines/freescape/language/instruction.cpp
diff --git a/engines/freescape/language/instruction.cpp b/engines/freescape/language/instruction.cpp
index 3309ad2a57a..5d93deced55 100644
--- a/engines/freescape/language/instruction.cpp
+++ b/engines/freescape/language/instruction.cpp
@@ -419,7 +419,10 @@ void FreescapeEngine::executeSPFX(FCLInstruction &instruction) {
uint8 b = 0;
uint32 color = 0;
- if (src & (1 << 7)) {
+ if (src == 2 && dst == 0) {
+ // The Amiga interpreter handles SPFX $0200 by restoring the current area palette.
+ _currentArea->_colorRemaps.clear();
+ } else if (src & (1 << 7)) {
uint16 v = 0;
color = 0;
// Extract the color to replace from the src/dst values
More information about the Scummvm-git-logs
mailing list