[Scummvm-git-logs] scummvm master -> 67f0e03c4619982f23ec4f19916f69842cca22b0
dreammaster
noreply at scummvm.org
Wed Oct 7 05:35:42 UTC 2026
This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
04ed851670 MADS: FOREST: Drive the room 203 path-reveal talk animation
9d87a8a741 MADS: FOREST: Update room 203 path-reveal state
e582738608 MADS: FOREST: Disable the vine weed hotspot after pickup
79b78d1523 MADS: FOREST: Avoid invalid room 307 animation synchronization
bd82c2f09e MADS: FOREST: Restore room 402 hotspot cursors
8247e83255 MADS: FOREST: Restore room 308 walker preload state
39456eae2c MADS: FOREST: Restore room 321 pickup animation setup
98d3d28aff MADS: FOREST: Preserve room 501 trigger state
40ebeba2a5 MADS: FOREST: Document native quirks preserved from the original
67f0e03c46 MADS: FOREST: Fix kernel_synch params in room 302 daemon
Commit: 04ed8516708dc85bdcc42afc31e3ea103643496c
https://github.com/scummvm/scummvm/commit/04ed8516708dc85bdcc42afc31e3ea103643496c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Drive the room 203 path-reveal talk animation
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room203.cpp
diff --git a/engines/mads/forest/rooms/room203.cpp b/engines/mads/forest/rooms/room203.cpp
index 4929dc012fc..c3cbb252776 100644
--- a/engines/mads/forest/rooms/room203.cpp
+++ b/engines/mads/forest/rooms/room203.cpp
@@ -1772,7 +1772,7 @@ static void room_203_parser() {
player.walker_visible = false;
scratch._a2 = kernel_run_animation_talk('b', 7, 0);
extra_change_animation(scratch._a2, player.x, player.y, player.scale, player.depth);
- scratch._b4 = -1;
+ scratch._b2 = -1;
kernel_synch(KERNEL_ANIM, scratch._a2, KERNEL_PLAYER, 0);
digi_play_build_ii('b', 1, 1);
scratch._a4 = 30;
Commit: 9d87a8a74144eb689b75334b799e62e1df7b70ad
https://github.com/scummvm/scummvm/commit/9d87a8a74144eb689b75334b799e62e1df7b70ad
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Update room 203 path-reveal state
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room203.cpp
diff --git a/engines/mads/forest/rooms/room203.cpp b/engines/mads/forest/rooms/room203.cpp
index c3cbb252776..f9be7336a8e 100644
--- a/engines/mads/forest/rooms/room203.cpp
+++ b/engines/mads/forest/rooms/room203.cpp
@@ -1399,6 +1399,7 @@ static void room_203_daemon() {
global[g133] = 0;
global[g143] = 0;
+ kernel_flip_hotspot(words_moss, false);
kernel_flip_hotspot(words_room_210, true);
seq[1] = kernel_seq_stamp(ss[1], false, -1);
kernel_seq_depth(seq[1], 15);
Commit: e582738608905b93c68f62510775c8c591d76639
https://github.com/scummvm/scummvm/commit/e582738608905b93c68f62510775c8c591d76639
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Disable the vine weed hotspot after pickup
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room204.cpp
diff --git a/engines/mads/forest/rooms/room204.cpp b/engines/mads/forest/rooms/room204.cpp
index c43f717d66f..c51b9157dec 100644
--- a/engines/mads/forest/rooms/room204.cpp
+++ b/engines/mads/forest/rooms/room204.cpp
@@ -139,7 +139,7 @@ static void room_204_init() {
kernel_seq_loc(seq[0], 293, 87);
kernel_seq_scale(seq[0], 54);
} else {
- kernel_flip_hotspot(words_vine_weed, true);
+ kernel_flip_hotspot(words_vine_weed, false);
}
if (previous_room != KERNEL_RESTORING_GAME) {
@@ -519,7 +519,7 @@ trigger_103:
kernel_reset_animation(local->_9a, 1);
kernel_synch(3, local->_9a, 4, 0);
global[g133] = 0;
- kernel_flip_hotspot(words_vine_weed, true);
+ kernel_flip_hotspot(words_vine_weed, false);
inter_move_object(vine_weed, PLAYER);
global[play_background_sounds] = -1;
player.commands_allowed = true;
Commit: 79b78d15233bdcf85385efa87efda380d6f71619
https://github.com/scummvm/scummvm/commit/79b78d15233bdcf85385efa87efda380d6f71619
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Avoid invalid room 307 animation synchronization
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room307.cpp
diff --git a/engines/mads/forest/rooms/room307.cpp b/engines/mads/forest/rooms/room307.cpp
index 15eb1269360..322190993bf 100644
--- a/engines/mads/forest/rooms/room307.cpp
+++ b/engines/mads/forest/rooms/room307.cpp
@@ -636,15 +636,17 @@ static void room_307_daemon() {
kernel_abort_animation(scratch._9c);
scratch._9a = -1;
scratch._9c = -1;
+ // Retail uses scratch._9c as the synchronization master below even
+ // after setting it to -1. Use NOW to avoid indexing kernel_anim[-1].
if (player_has(lily_pad)) {
aa[8] = kernel_run_animation(kernel_name('R', 4), 111);
aainfo[8]._active = -1;
scratch._92 = 32;
- kernel_synch(KERNEL_ANIM, aa[8], KERNEL_ANIM, scratch._9c);
+ kernel_synch(KERNEL_ANIM, aa[8], KERNEL_NOW, 0);
} else {
aa[9] = kernel_run_animation(kernel_name('R', 3), 111);
aainfo[9]._active = -1;
- kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, scratch._9c);
+ kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
}
} else if (scratch._a2 == 3) {
aa[2] = kernel_run_animation(kernel_name('R', 2), 0);
Commit: bd82c2f09ebd72313b014015ca89efbfc68eefe4
https://github.com/scummvm/scummvm/commit/bd82c2f09ebd72313b014015ca89efbfc68eefe4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Restore room 402 hotspot cursors
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room402.cpp
diff --git a/engines/mads/forest/rooms/room402.cpp b/engines/mads/forest/rooms/room402.cpp
index facfc0ad752..169fd7c6fcf 100644
--- a/engines/mads/forest/rooms/room402.cpp
+++ b/engines/mads/forest/rooms/room402.cpp
@@ -202,6 +202,14 @@ static void room_402_init() {
}
static void room_402_anim5() {
+ scratch._9e = 0;
+ room_spots[3].cursor_number = 1;
+ room_spots[4].cursor_number = 1;
+ room_spots[7].cursor_number = 1;
+ room_spots[8].cursor_number = 1;
+ room_spots[9].cursor_number = 1;
+ room_spots[10].cursor_number = 1;
+ room_spots[11].cursor_number = 1;
}
static void room_402_anim_case7() {
Commit: 8247e832550018616581a44beaea696f915e6abc
https://github.com/scummvm/scummvm/commit/8247e832550018616581a44beaea696f915e6abc
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Restore room 308 walker preload state
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room308.cpp
diff --git a/engines/mads/forest/rooms/room308.cpp b/engines/mads/forest/rooms/room308.cpp
index 81686cdf51f..eed8fbfeb38 100644
--- a/engines/mads/forest/rooms/room308.cpp
+++ b/engines/mads/forest/rooms/room308.cpp
@@ -1360,9 +1360,9 @@ void room_308_preload() {
room_parser_code_pointer = room_308_parser;
room_daemon_code_pointer = room_308_daemon;
+ global[g016] = -1;
global_section_walker();
global_section_interface();
- player.walker_must_reload = true;
}
} // namespace Rooms
Commit: 39456eae2c940816617bf32b279966f14310dccd
https://github.com/scummvm/scummvm/commit/39456eae2c940816617bf32b279966f14310dccd
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:09+11:00
Commit Message:
MADS: FOREST: Restore room 321 pickup animation setup
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room321.cpp
diff --git a/engines/mads/forest/rooms/room321.cpp b/engines/mads/forest/rooms/room321.cpp
index 6de9b9bf6e3..6addda35437 100644
--- a/engines/mads/forest/rooms/room321.cpp
+++ b/engines/mads/forest/rooms/room321.cpp
@@ -182,6 +182,57 @@ static void room_321_init() {
room_321_init1();
}
+static void room_321_prepare_pickup_animation() {
+ kernel_abort_animation(aa[8]);
+ aainfo[8]._active = 0;
+ kernel_abort_animation(aa[7]);
+ aainfo[7]._active = 0;
+
+ if (global[g071] != 0) {
+ kernel_abort_animation(aa[5]);
+ aainfo[5]._active = 0;
+
+ ss[1] = kernel_load_series(kernel_name('p', 5), 0);
+ ss[2] = kernel_load_series(kernel_name('h', 9), 0);
+
+ seq[1] = kernel_seq_stamp(ss[1], false, -1);
+ kernel_seq_depth(seq[1], 15);
+ kernel_seq_loc(seq[1], 230, 105);
+ kernel_seq_scale(seq[1], 83);
+
+ seq[2] = kernel_seq_stamp(ss[2], false, -1);
+ kernel_seq_depth(seq[2], 14);
+ kernel_seq_loc(seq[2], 230, 105);
+ kernel_seq_scale(seq[2], 100);
+ }
+
+ ss[3] = kernel_load_series(kernel_name('z', 9), 0);
+ seq[3] = kernel_seq_stamp(ss[3], false, -1);
+ kernel_seq_depth(seq[3], 7);
+ kernel_seq_loc(seq[3], 292, 32);
+ kernel_seq_scale(seq[3], 45);
+}
+
+static void room_321_finish_pickup_animation() {
+ kernel_seq_delete(seq[3]);
+ matte_deallocate_series(ss[3], -1);
+
+ if (global[g071] != 0) {
+ kernel_seq_delete(seq[2]);
+ kernel_seq_delete(seq[1]);
+ matte_deallocate_series(ss[2], -1);
+ matte_deallocate_series(ss[1], -1);
+
+ aa[5] = kernel_run_animation(kernel_name('H', 1), 104);
+ aainfo[5]._active = -1;
+ }
+
+ aa[7] = kernel_run_animation(kernel_name('L', 3), 104);
+ aainfo[7]._active = -1;
+ aa[8] = kernel_run_animation(kernel_name('L', 2), 104);
+ aainfo[8]._active = -1;
+}
+
static void room_321_anim1() {
int16 cur = kernel_anim[aa[0]].frame;
if (cur != aainfo[0]._frame)
@@ -633,10 +684,10 @@ static void room_321_daemon() {
global[g143] = 1;
} else if (t == 5) {
if (scratch._a6 == 1) {
- room_321_anim1();
+ room_321_prepare_pickup_animation();
aa[3] = kernel_run_animation(kernel_name('P', 1), 103);
} else if (scratch._a6 == 2) {
- room_321_anim1();
+ room_321_prepare_pickup_animation();
aa[3] = kernel_run_animation(kernel_name('P', 2), 103);
} else {
break;
@@ -707,7 +758,7 @@ static void room_321_daemon() {
kernel_reset_animation(scratch._9a, 1);
kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
global[g133] = 0;
- room_321_anim2();
+ room_321_finish_pickup_animation();
kernel_flip_hotspot(words_reeds, false);
inter_move_object(6, PLAYER);
global[play_background_sounds] = -1;
@@ -722,7 +773,7 @@ static void room_321_daemon() {
kernel_reset_animation(scratch._9a, 1);
kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
global[g133] = 0;
- room_321_anim2();
+ room_321_finish_pickup_animation();
kernel_flip_hotspot(words_pebbles, false);
if (!player_has(pebbles))
inter_move_object(pebbles, PLAYER);
Commit: 98d3d28affa93d98ecdecee81fc06d7ac31b6259
https://github.com/scummvm/scummvm/commit/98d3d28affa93d98ecdecee81fc06d7ac31b6259
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:10+11:00
Commit Message:
MADS: FOREST: Preserve room 501 trigger state
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room501.cpp
diff --git a/engines/mads/forest/rooms/room501.cpp b/engines/mads/forest/rooms/room501.cpp
index 6f4bda7466b..4626969561a 100644
--- a/engines/mads/forest/rooms/room501.cpp
+++ b/engines/mads/forest/rooms/room501.cpp
@@ -446,7 +446,8 @@ static void room_501_daemon() {
kernel_reset_animation(scratch._9c, 0);
global[g133] = 1;
global[g143] = 1;
- scratch._90--;
+ // The retail executable decrements a temporary copy of scratch._90 here,
+ // but never stores it back. Preserve that no-op behavior.
break;
case 27:
Commit: 40ebeba2a562e6bb64dfba8ccacfaf6f3b007463
https://github.com/scummvm/scummvm/commit/40ebeba2a562e6bb64dfba8ccacfaf6f3b007463
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:10+11:00
Commit Message:
MADS: FOREST: Document native quirks preserved from the original
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room101.cpp
engines/mads/forest/rooms/room104.cpp
engines/mads/forest/rooms/room106.cpp
engines/mads/forest/rooms/room203.cpp
engines/mads/forest/rooms/room205.cpp
engines/mads/forest/rooms/room220.cpp
engines/mads/forest/rooms/room304.cpp
engines/mads/forest/rooms/room306.cpp
engines/mads/forest/rooms/room510.cpp
diff --git a/engines/mads/forest/rooms/room101.cpp b/engines/mads/forest/rooms/room101.cpp
index f7b0e59284d..d7e5d03594e 100644
--- a/engines/mads/forest/rooms/room101.cpp
+++ b/engines/mads/forest/rooms/room101.cpp
@@ -500,6 +500,8 @@ static void room_101_anim8() {
stop_speech_on_run_animation = false;
aa[9] = kernel_run_animation(kernel_name('I', 2), 0);
aainfo[9]._active = -1;
+ // Retail also synchronizes I2 to the just-aborted I1 animation. Keep
+ // the old master handle here rather than replacing it with KERNEL_NOW.
kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[8]);
}
kernel_timing_trigger(1, 113);
diff --git a/engines/mads/forest/rooms/room104.cpp b/engines/mads/forest/rooms/room104.cpp
index 22f7fbd7450..68ea25fe7fc 100644
--- a/engines/mads/forest/rooms/room104.cpp
+++ b/engines/mads/forest/rooms/room104.cpp
@@ -463,6 +463,8 @@ static void room_104_anim2() {
stop_speech_on_run_animation = false;
aa[8] = kernel_run_animation(kernel_name('T', 2), 0);
aainfo[8]._active = -1;
+ // Retail also synchronizes the just-aborted T1 slot to T2. Although
+ // this looks redundant after aborting T1, preserve the native call.
kernel_synch(KERNEL_ANIM, aa[7], KERNEL_ANIM, aa[8]);
break;
}
diff --git a/engines/mads/forest/rooms/room106.cpp b/engines/mads/forest/rooms/room106.cpp
index 01baea3980c..7639f1cdd01 100644
--- a/engines/mads/forest/rooms/room106.cpp
+++ b/engines/mads/forest/rooms/room106.cpp
@@ -779,6 +779,8 @@ static void room_106_parser() {
if (player_parse(words_pick_up, words_flowers, 0) || player_parse(words_click_on, words_moss, 0)) {
player.commands_allowed = false;
global[g135] = -1;
+ // Retail stores 3 here too, even though trigger 24 dispatches on
+ // scratch._a2. Preserve the apparently unused state write for parity.
scratch._8c = 3;
player.command_ready = 0;
return;
diff --git a/engines/mads/forest/rooms/room203.cpp b/engines/mads/forest/rooms/room203.cpp
index f9be7336a8e..4298eb6e9e5 100644
--- a/engines/mads/forest/rooms/room203.cpp
+++ b/engines/mads/forest/rooms/room203.cpp
@@ -1235,6 +1235,9 @@ static void room_203_daemon() {
break;
case 26:
+ // The retail executable also indexes aa[] with these display-animation
+ // handles here (and in case 55 below). It looks like a handle-space
+ // mix-up, but preserve the native behavior rather than guessing at a fix.
kernel_reset_animation(local->_9e, 0);
kernel_synch(KERNEL_ANIM, aa[local->_9e], KERNEL_NOW, 0);
global[g133] = 1;
diff --git a/engines/mads/forest/rooms/room205.cpp b/engines/mads/forest/rooms/room205.cpp
index 1e2142e43a0..6cff06ba6c4 100644
--- a/engines/mads/forest/rooms/room205.cpp
+++ b/engines/mads/forest/rooms/room205.cpp
@@ -314,6 +314,9 @@ static void room_205_daemon() {
kernel_reset_animation(local->_9c, 0);
global[g133] = 1;
global[g143] = 1;
+ // Retail decrements only a temporary copy of scratch._90 here and never
+ // stores the result back. There is intentionally no scratch._90-- in the
+ // port.
break;
case 28:
diff --git a/engines/mads/forest/rooms/room220.cpp b/engines/mads/forest/rooms/room220.cpp
index dd225c76195..f07d72b5cdc 100644
--- a/engines/mads/forest/rooms/room220.cpp
+++ b/engines/mads/forest/rooms/room220.cpp
@@ -93,6 +93,9 @@ static void room_220_anim1() {
aa[1] = kernel_run_animation("*RM220Y12", 0);
aainfo[1]._active = -1;
scratch._92 = 55;
+ // Retail also synchronizes the just-aborted Y11 slot to Y12 here. The
+ // old slot no longer has an active animation, so this looks redundant,
+ // but keep the native clock update for parity.
kernel_synch(KERNEL_ANIM, aa[0], KERNEL_ANIM, aa[1]);
} else if (f < 121) {
if (f == 52) {
diff --git a/engines/mads/forest/rooms/room304.cpp b/engines/mads/forest/rooms/room304.cpp
index 1665fd105f3..6a4d08a8465 100644
--- a/engines/mads/forest/rooms/room304.cpp
+++ b/engines/mads/forest/rooms/room304.cpp
@@ -458,6 +458,9 @@ static void room_304_daemon() {
break;
case 101:
+ // Retail also uses scratch._94 as an aa[] index here, although this
+ // room never assigns it locally. Preserve the original behavior rather
+ // than guessing at the intended animation slot.
kernel_abort_animation(aa[scratch._94]);
aainfo[scratch._94]._active = 0;
kernel_reset_animation(scratch._9c, 1);
diff --git a/engines/mads/forest/rooms/room306.cpp b/engines/mads/forest/rooms/room306.cpp
index 665faf9135f..355e330952b 100644
--- a/engines/mads/forest/rooms/room306.cpp
+++ b/engines/mads/forest/rooms/room306.cpp
@@ -809,6 +809,9 @@ static void room_306_daemon() {
break;
case 101:
+ // Retail also uses scratch.x94 as an aa[] index here, although this
+ // room never assigns it locally. Preserve the original behavior rather
+ // than guessing at the intended animation slot.
kernel_abort_animation(aa[scratch.x94]);
aainfo[scratch.x94]._active = 0;
kernel_reset_animation(scratch.x9c, 1);
diff --git a/engines/mads/forest/rooms/room510.cpp b/engines/mads/forest/rooms/room510.cpp
index 73bde33c5b9..af6eb8bdc44 100644
--- a/engines/mads/forest/rooms/room510.cpp
+++ b/engines/mads/forest/rooms/room510.cpp
@@ -201,6 +201,8 @@ static void room_510_anim2() {
} else if (scratch._8e == 91) {
scratch._8e = 132;
digi_play_build(510, 'r', 1, 1);
+ // The retail executable checks for 133 here even though the preceding
+ // transition stores 132. Preserve the apparently unreachable branch.
} else if (scratch._8e == 133) {
scratch._8e = -1;
}
Commit: 67f0e03c4619982f23ec4f19916f69842cca22b0
https://github.com/scummvm/scummvm/commit/67f0e03c4619982f23ec4f19916f69842cca22b0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-10-07T16:34:10+11:00
Commit Message:
MADS: FOREST: Fix kernel_synch params in room 302 daemon
Thanks to Tropp
Changed paths:
engines/mads/forest/rooms/room302.cpp
diff --git a/engines/mads/forest/rooms/room302.cpp b/engines/mads/forest/rooms/room302.cpp
index fde5630e7ab..4f73fb492b8 100644
--- a/engines/mads/forest/rooms/room302.cpp
+++ b/engines/mads/forest/rooms/room302.cpp
@@ -618,8 +618,8 @@ static void room_302_daemon() {
if (scratch._a8 == 1) {
kernel_reset_animation(scratch._9a, 0);
kernel_reset_animation(scratch._9c, 0);
- kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
- kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
+ kernel_synch(KERNEL_ANIM, aa[scratch._9a], KERNEL_NOW, 0);
+ kernel_synch(KERNEL_ANIM, aa[scratch._9c], KERNEL_NOW, 0);
global[g133] = 1;
global[g143] = 1;
global[g131] = 0;
More information about the Scummvm-git-logs
mailing list