[Scummvm-git-logs] scummvm master -> 4e01210b8433b7d6b035a1275ab6b27c7f9647d5
dreammaster
noreply at scummvm.org
Sat Aug 15 07:58:17 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:
2fe64ed11e M4: RIDDLE: Fix Mei Chen hotspots in section 8
4e01210b84 NEWS: Add notes for MT32/MIDI added to TsAGE engine
Commit: 2fe64ed11e59037ee1043429feade6b66a7b30ae
https://github.com/scummvm/scummvm/commit/2fe64ed11e59037ee1043429feade6b66a7b30ae
Author: sloanext (46776957+sloanext at users.noreply.github.com)
Date: 2026-08-15T17:58:10+10:00
Commit Message:
M4: RIDDLE: Fix Mei Chen hotspots in section 8
Changed paths:
engines/m4/riddle/rooms/section8/room809.cpp
engines/m4/riddle/rooms/section8/room809.h
engines/m4/riddle/rooms/section8/section8_room.cpp
engines/m4/riddle/rooms/section8/section8_room.h
diff --git a/engines/m4/riddle/rooms/section8/room809.cpp b/engines/m4/riddle/rooms/section8/room809.cpp
index d64ac3aeb69..2195f61e76e 100644
--- a/engines/m4/riddle/rooms/section8/room809.cpp
+++ b/engines/m4/riddle/rooms/section8/room809.cpp
@@ -29,6 +29,15 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+// The scene defines one "MEI CHEN" hotspot for each position Mei Chen can stop at.
+// They are told apart by their amount of trailing spaces, which matches the index
+// of the position in X_DESTS.
+static const char *const MEI_CHEN_HOTSPOTS[4] = {
+ "MEI CHEN", "MEI CHEN ", "MEI CHEN ", "MEI CHEN "
+};
+
+static const int32 X_DESTS[4] = { 160, 540, 960, 1282 };
+
void Room809::preload() {
_G(player).walker_type = WALKER_ALT;
_G(player).shadow_type = SHADOW_ALT;
@@ -73,16 +82,22 @@ void Room809::init() {
series_unload(S8_SHADOW_DIRS1[3]);
series_unload(S8_SHADOW_DIRS1[4]);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
+ for (int i = 0; i < 4; ++i)
+ hotspot_set_active(_G(currentSceneDef).hotspots, MEI_CHEN_HOTSPOTS[i], false);
_mcTrekMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1,
_mcPosX, 317, _mcFacing, Walker::player_walker_callback, "mc_trek");
setGlobals3(_mcHandsBehindBackSeries, 1, 17);
sendWSMessage_3840000(_mcTrekMach, 38);
- _enableHotspotName = "MEI CHEN ";
+
+ // The index isn't part of the savegame, recover it from Mei Chen's position
+ _field24_index = 0;
+ for (int i = 0; i < 4; ++i) {
+ if (X_DESTS[i] == _mcPosX)
+ _field24_index = i;
+ }
+
+ _enableHotspotName = MEI_CHEN_HOTSPOTS[_field24_index];
_byte1A1990[_field24_index] = 0;
kernel_timing_trigger(60, 36, "verify mc's position");
@@ -918,7 +933,6 @@ void Room809::syncGame(Common::Serializer &s) {
int32 Room809::getMcDestX(int32 xPos, bool facing) {
static const uint16 X_THRESHOLDS1[3] = { 540, 960, 1282 };
static const uint16 X_THRESHOLDS2[4] = { 0x7fff, 160, 540, 960 };
- static const uint16 X_DESTS[5] = { 160, 540, 960, 1282 };
int32 index;
if (facing) {
@@ -935,12 +949,11 @@ int32 Room809::getMcDestX(int32 xPos, bool facing) {
}
}
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
+ for (int i = 0; i < 4; ++i)
+ hotspot_set_active(_G(currentSceneDef).hotspots, MEI_CHEN_HOTSPOTS[i], false);
- _enableHotspotName = "MEI CHEN ";
+ // The hotspot of the position Mei Chen is heading to is activated by daemon() case 38
+ _enableHotspotName = MEI_CHEN_HOTSPOTS[index];
_byte1A1990[index] = 0;
_field24_index = index;
_mcPosX = X_DESTS[index];
diff --git a/engines/m4/riddle/rooms/section8/room809.h b/engines/m4/riddle/rooms/section8/room809.h
index 3ff1520d9ac..87fd3373937 100644
--- a/engines/m4/riddle/rooms/section8/room809.h
+++ b/engines/m4/riddle/rooms/section8/room809.h
@@ -46,7 +46,9 @@ private:
bool _field20Fl = false;
- // CHECKME: The array and its index don't seem to be used
+ // _field24_index is the index of the position Mei Chen is standing at (or heading to).
+ // It selects the hotspot matching that position, see MEI_CHEN_HOTSPOTS in room809.cpp.
+ // CHECKME: The array itself doesn't seem to be used
byte _byte1A1990[4] = {0, 0, 0, 0};
int32 _field24_index = 0;
diff --git a/engines/m4/riddle/rooms/section8/section8_room.cpp b/engines/m4/riddle/rooms/section8/section8_room.cpp
index 601e754d063..3d8baed9f78 100644
--- a/engines/m4/riddle/rooms/section8/section8_room.cpp
+++ b/engines/m4/riddle/rooms/section8/section8_room.cpp
@@ -32,6 +32,13 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+// The scenes of the rooms handled by this class define one "MEI CHEN" hotspot for each
+// position Mei Chen can stop at. They are told apart by their amount of trailing spaces,
+// which matches the index of the position (see the coordinates in daemonSub1).
+static const char *const MEI_CHEN_HOTSPOTS[5] = {
+ "MEI CHEN", "MEI CHEN ", "MEI CHEN ", "MEI CHEN ", "MEI CHEN "
+};
+
int32 Section8Room::getStatueIndex(int32 val1) {
if (val1 == _var2)
return 0;
@@ -97,12 +104,11 @@ int32 Section8Room::daemonSub1(int32 dx, bool ascendingFl) {
}
}
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false);
- _guessHotspotName = Common::String("MEI CHEN ");
+ for (int j = 0; j < 5; ++j)
+ hotspot_set_active(_G(currentSceneDef).hotspots, MEI_CHEN_HOTSPOTS[j], false);
+
+ // The hotspot of the position Mei Chen is heading to is activated by daemon() case 4
+ _guessHotspotName = MEI_CHEN_HOTSPOTS[i];
_unkArrayIndex = i;
_unkArray[_unkArrayIndex] = 0;
_guessX = fullArr[i];
@@ -681,7 +687,7 @@ void Section8Room::daemon() {
_meiHandsBehindBack = series_load("MEI CHIEN HANDS BEHIND BACK", -1, nullptr);
setGlobals3(_meiHandsBehindBack, 1, 17);
sendWSMessage_3840000(_mcTrekMach, 4);
- _guessHotspotName = Common::String("MEI CHEN ");
+ _guessHotspotName = MEI_CHEN_HOTSPOTS[_unkArrayIndex];
_unkArray[_unkArrayIndex] = 0;
kernel_timing_trigger(imath_ranged_rand(1200, 1800), 5, nullptr);
// CHECKME: CouldMakeMem();
diff --git a/engines/m4/riddle/rooms/section8/section8_room.h b/engines/m4/riddle/rooms/section8/section8_room.h
index 3f51189094e..e1882741acd 100644
--- a/engines/m4/riddle/rooms/section8/section8_room.h
+++ b/engines/m4/riddle/rooms/section8/section8_room.h
@@ -43,7 +43,9 @@ protected:
int32 _byte1A19BC = 0;
int32 _field68 = 0;
- // The array seems to be set and never read. Idem for the index
+ // _unkArrayIndex is the index of the position Mei Chen is standing at (or heading to).
+ // It selects the hotspot matching that position, see MEI_CHEN_HOTSPOTS in section8_room.cpp.
+ // The array itself seems to be set and never read.
int32 _unkArrayIndex = 0;
int32 _unkArray[8];
Commit: 4e01210b8433b7d6b035a1275ab6b27c7f9647d5
https://github.com/scummvm/scummvm/commit/4e01210b8433b7d6b035a1275ab6b27c7f9647d5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-08-15T17:58:10+10:00
Commit Message:
NEWS: Add notes for MT32/MIDI added to TsAGE engine
Changed paths:
NEWS.md
diff --git a/NEWS.md b/NEWS.md
index b219259edcd..b0a00e7bb2d 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -85,6 +85,11 @@ For a more comprehensive changelog of the latest experimental code, see:
SLUDGE:
- Added detection for Shape-Shift Escape.
+ TsAGE:
+ - Added General MIDI and MT-32 support to the games
+ - Improved Sound Blaster sample playback
+ - Sound is properly paused when the engine is paused
+
Atari port:
- Added integration with nFM library.
More information about the Scummvm-git-logs
mailing list