[Scummvm-git-logs] scummvm master -> 87938d0978358b4f8412fb26589bad7857732a97

dreammaster noreply at scummvm.org
Tue Jun 30 10:44:27 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:
48b705713a MADS: FOREST: Order daemon in room 101, fix Russell disappearing
87938d0978 MADS: FOREST: Fix entering bedroom triggering endgame cutscene


Commit: 48b705713ac510c0cb27ac63c77f165e74fb7f62
    https://github.com/scummvm/scummvm/commit/48b705713ac510c0cb27ac63c77f165e74fb7f62
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-30T20:13:52+10:00

Commit Message:
MADS: FOREST: Order daemon in room 101, fix Russell disappearing

Changed paths:
    engines/mads/madsv2/forest/rooms/room101.cpp


diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index 12fe5725463..0b8d8d2f874 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -110,7 +110,7 @@ static void room_101_init2() {
 	global[g141] = 0;
 
 	scratch._russell = kernel_run_animation_disp('r', 3, 0);
-	kernel_position_anim(scratch._russell, 123, 14, 69, 7);
+	kernel_position_anim(scratch._russell, 123, 134, 69, 7);
 	scratch._edgar = kernel_run_animation_disp('e', 1, 0);
 	kernel_position_anim(scratch._edgar, 194, 145, 75, 4);
 
@@ -587,7 +587,7 @@ static void room_101_anim10() {
 }
 
 static void room_101_daemon() {
-	if (flags[0] < 0 && global[player_hyperwalked]) {
+	if (flags[0] < 0 && global[player_hyperwalked] == -1) {
 		flags[0] = 0;
 		flags[1] = 0;
 		flags[2] = 0;
@@ -707,6 +707,28 @@ static void room_101_daemon() {
 		}
 		break;
 
+	case 24:
+		if (scratch._96 == 3) {
+			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
+			aainfo[1]._active = -1;
+			scratch._a0 = 1;
+			kernel_reset_animation(scratch._edgar, 0);
+			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._edgar);
+			global[g133] = 1;
+		}
+		break;
+
+	case 25:
+		if (scratch._98 == 2) {
+			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
+			aainfo[2]._active = -1;
+			scratch._9e = 2;
+			kernel_reset_animation(scratch._russell, 0);
+			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._russell);
+			global[g143] = 1;
+		}
+		break;
+
 	case 26:
 		switch (scratch._9a) {
 		case 15:
@@ -749,26 +771,54 @@ static void room_101_daemon() {
 		}
 		break;
 
-	case 24:
-		if (scratch._96 == 3) {
-			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
-			aainfo[1]._active = -1;
-			scratch._a0 = 1;
-			kernel_reset_animation(scratch._edgar, 0);
-			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._edgar);
-			global[g133] = 1;
-		}
+	case 100:
+		kernel_abort_animation(aa[0]);
+		aainfo[0]._active = 0;
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
+		player.walker_visible = true;
+		global[g133] = 0;
+		global[g143] = 0;
+		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
+		player.commands_allowed = true;
 		break;
 
-	case 25:
-		if (scratch._98 == 2) {
-			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			aainfo[2]._active = -1;
-			scratch._9e = 2;
-			kernel_reset_animation(scratch._russell, 0);
-			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._russell);
-			global[g143] = 1;
-		}
+	case 101:
+		kernel_abort_animation(aa[scratch._9e]);
+		aainfo[scratch._9e]._active = 0;
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
+		global[g143] = 0;
+		player.commands_allowed = true;
+		break;
+
+	case 102:
+		kernel_abort_animation(aa[scratch._a0]);
+		aainfo[scratch._a0]._active = 0;
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
+		global[g133] = 0;
+		player.commands_allowed = true;
+		break;
+
+	case 103:
+		kernel_abort_animation(aa[4]);
+		aainfo[4]._active = 0;
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
+		player.walker_visible = true;
+		global[g133] = 0;
+		global[g143] = 0;
+		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
+		player.commands_allowed = true;
 		break;
 
 	case 104:
@@ -861,20 +911,30 @@ static void room_101_daemon() {
 		}
 		break;
 
-	case 103:
-		kernel_abort_animation(aa[4]);
-		aainfo[4]._active = 0;
-		global[g131] = -1;
-		global[g141] = -1;
-		kernel_reset_animation(scratch._edgar, 1);
-		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
-		kernel_reset_animation(scratch._russell, 1);
-		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
-		player.walker_visible = true;
-		global[g133] = 0;
-		global[g143] = 0;
-		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
-		player.commands_allowed = true;
+	case 105:
+		if (aainfo[7]._val3 == 0) {
+			aainfo[7]._active = 0;
+			global[g141] = -1;
+			kernel_reset_animation(scratch._russell, 1);
+			kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
+			global[g143] = 0;
+			global[g009] = 0;
+			player.commands_allowed = true;
+		} else if (aainfo[7]._val3 == 8) {
+			kernel_abort_animation(aa[7]);
+			aa[7] = kernel_run_animation(kernel_name('r', 3), 105);
+			aainfo[7]._active = -1;
+			scratch._9c = 1;
+			aainfo[7]._val3 = 0;
+		}
+		break;
+
+	case 106:
+		aainfo[6]._frame = 3;
+		kernel_reset_animation(aa[6], 3);
+		aainfo[6]._val3 = 10;
+		digi_play_build(101, 'b', 2, 1);
+		scratch._aa++;
 		break;
 
 	case 107:
@@ -884,6 +944,23 @@ static void room_101_daemon() {
 		scratch._aa++;
 		break;
 
+	case 109:
+		kernel_reset_animation(scratch._edgar, 0);
+		kernel_reset_animation(scratch._russell, 0);
+		global[g133] = 1;
+		global[g143] = 1;
+		inter_move_object(twine, PLAYER);
+		kernel_seq_delete(seq[1]);
+		kernel_flip_hotspot(words_twine, false);
+		aa[4] = kernel_run_animation(kernel_name('R', 4), 103);
+		aainfo[4]._active = -1;
+		aainfo[4]._val3 = 13;
+		scratch._a2 = 4;
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_ANIM, aa[4]);
+		digi_play_build(101, 'e', 3, 1);
+		scratch._aa = 0;
+		break;
+
 	case 111:
 		switch (scratch._ae) {
 		case 1:
@@ -906,83 +983,6 @@ static void room_101_daemon() {
 		}
 		break;
 
-	case 109:
-		kernel_reset_animation(scratch._edgar, 0);
-		kernel_reset_animation(scratch._russell, 0);
-		global[g133] = 1;
-		global[g143] = 1;
-		inter_move_object(twine, PLAYER);
-		kernel_seq_delete(seq[1]);
-		kernel_flip_hotspot(words_twine, false);
-		aa[4] = kernel_run_animation(kernel_name('R', 4), 103);
-		aainfo[4]._active = -1;
-		aainfo[4]._val3 = 13;
-		scratch._a2 = 4;
-		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_ANIM, aa[4]);
-		digi_play_build(101, 'e', 3, 1);
-		scratch._aa = 0;
-		break;
-
-	case 106:
-		aainfo[6]._frame = 3;
-		kernel_reset_animation(aa[6], 3);
-		aainfo[6]._val3 = 10;
-		digi_play_build(101, 'b', 2, 1);
-		scratch._aa++;
-		break;
-
-	case 105:
-		if (aainfo[7]._val3 == 0) {
-			aainfo[7]._active = 0;
-			global[g141] = -1;
-			kernel_reset_animation(scratch._russell, 1);
-			kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
-			global[g143] = 0;
-			global[g009] = 0;
-			player.commands_allowed = true;
-		} else if (aainfo[7]._val3 == 8) {
-			kernel_abort_animation(aa[7]);
-			aa[7] = kernel_run_animation(kernel_name('r', 3), 105);
-			aainfo[7]._active = -1;
-			scratch._9c = 1;
-			aainfo[7]._val3 = 0;
-		}
-		break;
-
-	case 100:
-		kernel_abort_animation(aa[0]);
-		aainfo[0]._active = 0;
-		global[g131] = -1;
-		global[g141] = -1;
-		kernel_reset_animation(scratch._edgar, 1);
-		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
-		kernel_reset_animation(scratch._russell, 1);
-		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
-		player.walker_visible = true;
-		global[g133] = 0;
-		global[g143] = 0;
-		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
-		player.commands_allowed = true;
-		break;
-
-	case 101:
-		kernel_abort_animation(aa[scratch._9e]);
-		aainfo[scratch._9e]._active = 0;
-		kernel_reset_animation(scratch._russell, 1);
-		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
-		global[g143] = 0;
-		player.commands_allowed = true;
-		break;
-
-	case 102:
-		kernel_abort_animation(aa[scratch._a0]);
-		aainfo[scratch._a0]._active = 0;
-		kernel_reset_animation(scratch._edgar, 1);
-		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
-		global[g133] = 0;
-		player.commands_allowed = true;
-		break;
-
 	case 113:
 		digi_initial_volume(90);
 		digi_play_build(101, '_', 5, 3);


Commit: 87938d0978358b4f8412fb26589bad7857732a97
    https://github.com/scummvm/scummvm/commit/87938d0978358b4f8412fb26589bad7857732a97
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-30T20:44:05+10:00

Commit Message:
MADS: FOREST: Fix entering bedroom triggering endgame cutscene

Changed paths:
    engines/mads/madsv2/forest/rooms/room104.cpp


diff --git a/engines/mads/madsv2/forest/rooms/room104.cpp b/engines/mads/madsv2/forest/rooms/room104.cpp
index b707bba9220..e3d423671ab 100644
--- a/engines/mads/madsv2/forest/rooms/room104.cpp
+++ b/engines/mads/madsv2/forest/rooms/room104.cpp
@@ -95,51 +95,51 @@ static void room_104_init() {
 		aainfo[count]._val4 = 0;
 	}
 
-	if (previous_room != -2 && previous_room != 199) {
+	if (previous_room != KERNEL_RESTORING_GAME && previous_room != 199) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		if (flags[4] != 3)
-			flags[4]++;
+		if (flags[2] != 3)
+			flags[2]++;
 	}
 
-	switch (flags[4]) {
+	switch (flags[2]) {
 	case -3:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
 		room_104_init1();
 		return;
 	case -2:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
-		flags[4] = -3;
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
+		flags[2] = -3;
 		room_104_init1();
 		return;
 	case -1:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
-		flags[4] = -3;
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
+		flags[2] = -3;
 		room_104_init1();
 		return;
 	case 1:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
 		room_104_init3();
 		return;
 	case 2:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
 		room_104_init3();
 		return;
 	case 3:
 		if (previous_room != 107) { room_104_init3(); return; }
-		flags[4] = 5;
+		flags[2] = 5;
 		room_104_init2();
 		return;
 	case 5:
-		if (previous_room == 107) flags[4] = 5;
+		if (previous_room == 107) flags[2] = 5;
 		room_104_init2();
 		return;
 	case 6:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
 		room_104_init3();
 		return;
 	case 7:
-		if (previous_room == 107) { flags[4] = 5; room_104_init2(); return; }
+		if (previous_room == 107) { flags[2] = 5; room_104_init2(); return; }
 		room_104_init3();
 		return;
 	default:




More information about the Scummvm-git-logs mailing list