[Scummvm-git-logs] scummvm master -> 1db23e2d9741ae3c20326d2ced9d0fb4ce88b675

dreammaster noreply at scummvm.org
Sun Jun 7 04:16:06 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:
f3af6e23b9 MADS: FOREST: Implemented missing bits of room 203, AnimationInfo fields rename
1db23e2d97 MADS: FOREST: Implemented room 204, other rooms preload functions


Commit: f3af6e23b941da28fc7529796088bf19634119e3
    https://github.com/scummvm/scummvm/commit/f3af6e23b941da28fc7529796088bf19634119e3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-07T13:32:52+10:00

Commit Message:
MADS: FOREST: Implemented missing bits of room 203, AnimationInfo fields rename

Changed paths:
    engines/mads/madsv2/forest/global.h
    engines/mads/madsv2/forest/rooms/room101.cpp
    engines/mads/madsv2/forest/rooms/room103.cpp
    engines/mads/madsv2/forest/rooms/room104.cpp
    engines/mads/madsv2/forest/rooms/room106.cpp
    engines/mads/madsv2/forest/rooms/room107.cpp
    engines/mads/madsv2/forest/rooms/room199.cpp
    engines/mads/madsv2/forest/rooms/room201.cpp
    engines/mads/madsv2/forest/rooms/room203.cpp
    engines/mads/madsv2/forest/rooms/room204.cpp


diff --git a/engines/mads/madsv2/forest/global.h b/engines/mads/madsv2/forest/global.h
index b602faf2352..75b09e04960 100644
--- a/engines/mads/madsv2/forest/global.h
+++ b/engines/mads/madsv2/forest/global.h
@@ -244,13 +244,13 @@ enum {
 };
 
 struct AnimationInfo {
-	int16 _val1;
-	int16 _val2;
+	int16 _active;
+	int16 _frame;
 	int16 _val3;
 	int16 _val4;
 
 	void synchronize(Common::Serializer &s) {
-		s.syncMultipleLE(_val1, _val2, _val3, _val4);
+		s.syncMultipleLE(_active, _frame, _val3, _val4);
 	}
 };
 
diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index e37b7788ccc..101cc01d88d 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -87,14 +87,14 @@ static void room_101_init1() {
 	mouse_hide();
 
 	for (auto &v : aainfo) {
-		v._val1 = 0;
-		v._val2 = -1;
+		v._active = 0;
+		v._frame = -1;
 	}
 
 	stop_speech_on_run_animation = false;
 	aa[8] = kernel_run_animation(kernel_name('I', 1), 0);
-	aainfo[8]._val1 = -1;
-	aainfo[8]._val2 = 8;
+	aainfo[8]._active = -1;
+	aainfo[8]._frame = 8;
 	kernel_reset_animation(aa[8], 8);
 }
 
@@ -126,7 +126,7 @@ static void room_101_init2() {
 	}
 
 	aa[6] = kernel_run_animation(kernel_name('b', 1), 104);
-	aainfo[6]._val1 = -1;
+	aainfo[6]._active = -1;
 	scratch._9c = 1;
 	scratch._ac = 1;	
 }
@@ -163,14 +163,14 @@ static void room_101_init3() {
 
 	if (previous_room == 104) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._9c = 57;
 		return;
 	}
 
 	if (previous_room == 106) {
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._9c = 77;
 		return;
 	}
@@ -198,7 +198,7 @@ static void room_101_init3() {
 		player.commands_allowed = 0;
 		player.walker_visible = 0;
 		global[g009] = 0;
-		aainfo[5]._val1 = -1;
+		aainfo[5]._active = -1;
 		aa[5] = kernel_run_animation(kernel_name('b', 8), 111);
 		scratch._ae = 4;
 		return;
@@ -225,8 +225,8 @@ static void room_101_init() {
 		}
 
 		for (auto &s : aainfo) {
-			s._val1 = 0;
-			s._val2 = 1;
+			s._active = 0;
+			s._frame = 1;
 			s._val3 = s._val4 = 0;
 		}
 
@@ -283,9 +283,9 @@ static void room_101_init() {
 
 static void room_101_anim1() {
 	int16 frame = kernel_anim[aa[6]].frame;
-	if (frame == aainfo[6]._val2)
+	if (frame == aainfo[6]._frame)
 		return;
-	aainfo[6]._val2 = frame;
+	aainfo[6]._frame = frame;
 
 	switch (scratch._ac) {
 	case 2:
@@ -297,19 +297,19 @@ static void room_101_anim1() {
 		}
 		if (frame == 6) {
 			if (aainfo[6]._val3 != 10) return;
-			aainfo[6]._val2 = 2;
+			aainfo[6]._frame = 2;
 			kernel_reset_animation(aa[6], 2);
 			return;
 		}
 		if (frame == 10) {
 			if (aainfo[6]._val3 != 9) return;
-			aainfo[6]._val2 = 6;
+			aainfo[6]._frame = 6;
 			kernel_reset_animation(aa[6], 6);
 			return;
 		}
 		if (frame == 14) {
 			if (aainfo[6]._val3 != 12) return;
-			aainfo[6]._val2 = 13;
+			aainfo[6]._frame = 13;
 			kernel_reset_animation(aa[6], 13);
 		}
 		return;
@@ -323,7 +323,7 @@ static void room_101_anim1() {
 		}
 		if (frame == 15) {
 			if (aainfo[6]._val3 != 9) return;
-			aainfo[6]._val2 = 11;
+			aainfo[6]._frame = 11;
 			kernel_reset_animation(aa[6], 11);
 		}
 		return;
@@ -337,7 +337,7 @@ static void room_101_anim1() {
 		}
 		if (frame == 12) {
 			if (aainfo[6]._val3 != 11) return;
-			aainfo[6]._val2 = 8;
+			aainfo[6]._frame = 8;
 			kernel_reset_animation(aa[6], 8);
 		}
 		return;
@@ -351,7 +351,7 @@ static void room_101_anim1() {
 		}
 		if (frame == 30) {
 			if (aainfo[6]._val3 != 10) return;
-			aainfo[6]._val2 = 29;
+			aainfo[6]._frame = 29;
 			kernel_reset_animation(aa[6], 29);
 		}
 		return;
@@ -365,7 +365,7 @@ static void room_101_anim1() {
 		}
 		if (frame == 94) {
 			if (aainfo[6]._val3 != 10) return;
-			aainfo[6]._val2 = 90;
+			aainfo[6]._frame = 90;
 			kernel_reset_animation(aa[6], 90);
 		}
 		return;
@@ -374,30 +374,30 @@ static void room_101_anim1() {
 
 static void room_101_anim2() {
 	int16 frame = kernel_anim[aa[7]].frame;
-	if (frame == aainfo[7]._val2)
+	if (frame == aainfo[7]._frame)
 		return;
-	aainfo[7]._val2 = frame;
+	aainfo[7]._frame = frame;
 	if (frame != 18) return;
 	if (aainfo[7]._val3 != 7) return;
-	aainfo[7]._val2 = 6;
+	aainfo[7]._frame = 6;
 	kernel_reset_animation(aa[7], 6);
 }
 
 static void room_101_anim3() {
 	int16 frame = kernel_anim[aa[0]].frame;
-	if (frame != aainfo[0]._val2)
-		aainfo[0]._val2 = frame;
+	if (frame != aainfo[0]._frame)
+		aainfo[0]._frame = frame;
 	if (global[player_hyperwalked] != -1) return;
 	int16 resetFrame = scratch._9c - 1;
-	aainfo[0]._val2 = resetFrame;
+	aainfo[0]._frame = resetFrame;
 	kernel_reset_animation(aa[0], resetFrame);
 }
 
 static void room_101_anim4() {
 	int16 frame = kernel_anim[aa[4]].frame;
-	if (frame == aainfo[4]._val2)
+	if (frame == aainfo[4]._frame)
 		return;
-	aainfo[4]._val2 = frame;
+	aainfo[4]._frame = frame;
 
 	switch (aainfo[4]._val3) {
 	case 13:
@@ -418,19 +418,19 @@ static void room_101_anim4() {
 		}
 		if (frame == 7) {
 			if (scratch._aa != 50) return;
-			aainfo[4]._val2 = 3;
+			aainfo[4]._frame = 3;
 			kernel_reset_animation(aa[4], 3);
 			return;
 		}
 		if (frame == 9) {
 			if (scratch._aa != 50) return;
-			aainfo[4]._val2 = 8;
+			aainfo[4]._frame = 8;
 			kernel_reset_animation(aa[4], 8);
 			return;
 		}
 		if (frame == 18) {
 			if (scratch._aa != 51) return;
-			aainfo[4]._val2 = 14;
+			aainfo[4]._frame = 14;
 			kernel_reset_animation(aa[4], 14);
 		}
 		return;
@@ -449,21 +449,21 @@ static void room_101_anim4() {
 
 static void room_101_anim5() {
 	int16 frame = kernel_anim[aa[2]].frame;
-	if (frame != aainfo[2]._val2)
-		aainfo[2]._val2 = frame;
+	if (frame != aainfo[2]._frame)
+		aainfo[2]._frame = frame;
 }
 
 static void room_101_anim6() {
 	int16 frame = kernel_anim[aa[1]].frame;
-	if (frame != aainfo[1]._val2)
-		aainfo[1]._val2 = frame;
+	if (frame != aainfo[1]._frame)
+		aainfo[1]._frame = frame;
 }
 
 static void room_101_anim7() {
 	int16 frame = kernel_anim[aa[5]].frame;
-	if (frame == aainfo[5]._val2)
+	if (frame == aainfo[5]._frame)
 		return;
-	aainfo[5]._val2 = frame;
+	aainfo[5]._frame = frame;
 	if (frame == 2) {
 		if (scratch._ae != 4) return;
 		digi_initial_volume(100);
@@ -474,7 +474,7 @@ static void room_101_anim7() {
 	if (frame == 78) {
 		if (scratch._ae != 5) return;
 		kernel_abort_animation(aa[5]);
-		aainfo[5]._val1 = 0;
+		aainfo[5]._active = 0;
 		player.x = 96;
 		player.y = 140;
 		player.facing = 3;
@@ -487,17 +487,17 @@ static void room_101_anim7() {
 
 static void room_101_anim8() {
 	int16 frame = kernel_anim[aa[8]].frame;
-	if (frame == aainfo[8]._val2)
+	if (frame == aainfo[8]._frame)
 		return;
-	aainfo[8]._val2 = frame;
+	aainfo[8]._frame = frame;
 	if (frame != 9) {
 		if (frame != 81) return;
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[8]);
-		aainfo[8]._val1 = 0;
+		aainfo[8]._active = 0;
 		stop_speech_on_run_animation = false;
 		aa[9] = kernel_run_animation(kernel_name('I', 2), 0);
-		aainfo[9]._val1 = -1;
+		aainfo[9]._active = -1;
 		kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[8]);
 	}
 	kernel_timing_trigger(1, 113);
@@ -505,8 +505,8 @@ static void room_101_anim8() {
 
 static void room_101_anim9() {
 	int16 frame = kernel_anim[aa[9]].frame;
-	if (frame != aainfo[9]._val2) {
-		aainfo[9]._val2 = frame;
+	if (frame != aainfo[9]._frame) {
+		aainfo[9]._frame = frame;
 		if (frame == 99) {
 			digi_play_build(101, 'r', 3, 1);
 			scratch._b4 = 99;
@@ -528,10 +528,10 @@ static void room_101_anim9() {
 			} else if (frame == 205) {
 				dont_frag_the_palette();
 				kernel_abort_animation(aa[9]);
-				aainfo[9]._val1 = 0;
+				aainfo[9]._active = 0;
 				stop_speech_on_run_animation = false;
 				aa[10] = kernel_run_animation(kernel_name('I', 3), 0);
-				aainfo[10]._val1 = -1;
+				aainfo[10]._active = -1;
 				kernel_synch(KERNEL_ANIM, aa[10], KERNEL_ANIM, aa[9]);
 				kernel_timing_trigger(1, 113);
 			}
@@ -546,12 +546,12 @@ static void room_101_anim9() {
 
 static void room_101_anim10() {
 	int16 frame = kernel_anim[aa[10]].frame;
-	if (frame != aainfo[10]._val2) {
-		aainfo[10]._val2 = frame;
+	if (frame != aainfo[10]._frame) {
+		aainfo[10]._frame = frame;
 		if (frame == 90) {
 			stop_speech_on_run_animation = true;
 			kernel_abort_animation(aa[10]);
-			aainfo[10]._val1 = 0;
+			aainfo[10]._active = 0;
 			new_room = 106;
 		} else if (frame < 90) {
 			if (frame == 35) {
@@ -598,39 +598,39 @@ static void room_101_daemon() {
 	case 7:
 		switch (scratch._aa) {
 		case 1:
-			aainfo[6]._val2 = 13;
+			aainfo[6]._frame = 13;
 			kernel_reset_animation(aa[6], 13);
 			aainfo[6]._val3 = 12;
 			kernel_timing_trigger(25, 7);
 			scratch._aa++;
 			break;
 		case 2:
-			aainfo[6]._val2 = 6;
+			aainfo[6]._frame = 6;
 			kernel_reset_animation(aa[6], 6);
 			aainfo[6]._val3 = 9;
 			digi_play_build(101, 'r', 1, 1);
 			scratch._aa++;
 			break;
 		case 3:
-			aainfo[6]._val2 = 13;
+			aainfo[6]._frame = 13;
 			kernel_reset_animation(aa[6], 13);
 			aainfo[6]._val3 = 12;
 			kernel_timing_trigger(30, 106);
 			break;
 		case 4:
-			aainfo[6]._val2 = 12;
+			aainfo[6]._frame = 12;
 			kernel_reset_animation(aa[6], 12);
 			aainfo[6]._val3 = 0;
 			scratch._aa++;
 			break;
 		case 10:
-			aainfo[6]._val2 = 15;
+			aainfo[6]._frame = 15;
 			kernel_reset_animation(aa[6], 15);
 			aainfo[6]._val3 = 0;
 			scratch._aa++;
 			break;
 		case 20:
-			aainfo[6]._val2 = 13;
+			aainfo[6]._frame = 13;
 			kernel_reset_animation(aa[6], 13);
 			aainfo[6]._val3 = 0;
 			scratch._aa++;
@@ -641,13 +641,13 @@ static void room_101_daemon() {
 			player.commands_allowed = true;
 			break;
 		case 30:
-			aainfo[6]._val2 = 31;
+			aainfo[6]._frame = 31;
 			kernel_reset_animation(aa[6], 31);
 			aainfo[6]._val3 = 0;
 			scratch._aa++;
 			break;
 		case 40:
-			aainfo[6]._val2 = 95;
+			aainfo[6]._frame = 95;
 			kernel_reset_animation(aa[6], 95);
 			aainfo[6]._val3 = 0;
 			scratch._aa++;
@@ -663,18 +663,18 @@ static void room_101_daemon() {
 			kernel_seq_delete(seq[2]);
 			kernel_flip_hotspot(105, 0);
 			aa[4] = kernel_run_animation(kernel_name('R', 5), 103);
-			aainfo[4]._val1 = -1;
+			aainfo[4]._active = -1;
 			aainfo[4]._val3 = 14;
 			scratch._a2 = 4;
 			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
 			break;
 		case 50:
-			aainfo[4]._val2 = 8;
+			aainfo[4]._frame = 8;
 			kernel_reset_animation(aa[4], 8);
 			kernel_timing_trigger(45, 107);
 			break;
 		case 51:
-			aainfo[4]._val2 = 19;
+			aainfo[4]._frame = 19;
 			kernel_reset_animation(aa[4], 19);
 			break;
 		case 59:
@@ -688,7 +688,7 @@ static void room_101_daemon() {
 			kernel_seq_delete(seq[0]);
 			kernel_flip_hotspot(164, 0);
 			aa[4] = kernel_run_animation(kernel_name('R', 6), 103);
-			aainfo[4]._val1 = -1;
+			aainfo[4]._active = -1;
 			aainfo[4]._val3 = 15;
 			scratch._a2 = 4;
 			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
@@ -751,7 +751,7 @@ static void room_101_daemon() {
 	case 24:
 		if (scratch._96 == 3) {
 			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
-			aainfo[1]._val1 = -1;
+			aainfo[1]._active = -1;
 			scratch._a0 = 1;
 			kernel_reset_animation(scratch._a4, 0);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._a4);
@@ -762,7 +762,7 @@ static void room_101_daemon() {
 	case 25:
 		if (scratch._98 == 2) {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			aainfo[2]._val1 = -1;
+			aainfo[2]._active = -1;
 			scratch._9e = 2;
 			kernel_reset_animation(scratch._a6, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._a6);
@@ -775,32 +775,32 @@ static void room_101_daemon() {
 		case 1:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('b', 2), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 2:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('b', 3), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 3:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('r', 1), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 4:
 			kernel_abort_animation(aa[6]);
 			aa[7] = kernel_run_animation(kernel_name('r', 2), 105);
-			aainfo[7]._val1 = -1;
+			aainfo[7]._active = -1;
 			aainfo[7]._val3 = 7;
 			scratch._9c = 1;
 			aa[6] = kernel_run_animation(kernel_name('e', 1), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
@@ -809,7 +809,7 @@ static void room_101_daemon() {
 			kernel_flip_hotspot(110, 0);
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('e', 2), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
@@ -820,28 +820,28 @@ static void room_101_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
 			global[g133] = 0;
 			aa[6] = kernel_run_animation(kernel_name('b', 4), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 7:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('b', 5), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 8:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('b', 6), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
 		case 9:
 			kernel_abort_animation(aa[6]);
 			aa[6] = kernel_run_animation(kernel_name('b', 9), 104);
-			aainfo[6]._val1 = -1;
+			aainfo[6]._active = -1;
 			scratch._9c = 1;
 			scratch._ac++;
 			break;
@@ -861,7 +861,7 @@ static void room_101_daemon() {
 
 	case 103:
 		kernel_abort_animation(aa[4]);
-		aainfo[4]._val1 = 0;
+		aainfo[4]._active = 0;
 		global[g131] = -1;
 		global[g141] = -1;
 		kernel_reset_animation(scratch._a4, 1);
@@ -876,7 +876,7 @@ static void room_101_daemon() {
 		break;
 
 	case 107:
-		aainfo[4]._val2 = 13;
+		aainfo[4]._frame = 13;
 		kernel_reset_animation(aa[4], 13);
 		digi_play_build(101, 'B', 5, 1);
 		scratch._aa++;
@@ -891,7 +891,7 @@ static void room_101_daemon() {
 			break;
 		case 2:
 			kernel_abort_animation(aa[5]);
-			aainfo[5]._val1 = 0;
+			aainfo[5]._active = 0;
 			new_room = 205;
 			break;
 		case 4:
@@ -913,7 +913,7 @@ static void room_101_daemon() {
 		kernel_seq_delete(seq[1]);
 		kernel_flip_hotspot(154, 0);
 		aa[4] = kernel_run_animation(kernel_name('R', 4), 103);
-		aainfo[4]._val1 = -1;
+		aainfo[4]._active = -1;
 		aainfo[4]._val3 = 13;
 		scratch._a2 = 4;
 		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
@@ -922,7 +922,7 @@ static void room_101_daemon() {
 		break;
 
 	case 106:
-		aainfo[6]._val2 = 3;
+		aainfo[6]._frame = 3;
 		kernel_reset_animation(aa[6], 3);
 		aainfo[6]._val3 = 10;
 		digi_play_build(101, 'b', 2, 1);
@@ -931,7 +931,7 @@ static void room_101_daemon() {
 
 	case 105:
 		if (aainfo[7]._val3 == 0) {
-			aainfo[7]._val1 = 0;
+			aainfo[7]._active = 0;
 			global[g141] = -1;
 			kernel_reset_animation(scratch._a6, 1);
 			kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
@@ -941,7 +941,7 @@ static void room_101_daemon() {
 		} else if (aainfo[7]._val3 == 8) {
 			kernel_abort_animation(aa[7]);
 			aa[7] = kernel_run_animation(kernel_name('r', 3), 105);
-			aainfo[7]._val1 = -1;
+			aainfo[7]._active = -1;
 			scratch._9c = 1;
 			aainfo[7]._val3 = 0;
 		}
@@ -949,7 +949,7 @@ static void room_101_daemon() {
 
 	case 100:
 		kernel_abort_animation(aa[0]);
-		aainfo[0]._val1 = 0;
+		aainfo[0]._active = 0;
 		global[g131] = -1;
 		global[g141] = -1;
 		kernel_reset_animation(scratch._a4, 1);
@@ -965,7 +965,7 @@ static void room_101_daemon() {
 
 	case 101:
 		kernel_abort_animation(aa[scratch._9e]);
-		aainfo[scratch._9e]._val1 = 0;
+		aainfo[scratch._9e]._active = 0;
 		kernel_reset_animation(scratch._a6, 1);
 		kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -974,7 +974,7 @@ static void room_101_daemon() {
 
 	case 102:
 		kernel_abort_animation(aa[scratch._a0]);
-		aainfo[scratch._a0]._val1 = 0;
+		aainfo[scratch._a0]._active = 0;
 		kernel_reset_animation(scratch._a4, 1);
 		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -1007,16 +1007,16 @@ static void room_101_daemon() {
 			mouse_show();
 	}
 
-	if (aainfo[6]._val1)  room_101_anim1();
-	if (aainfo[7]._val1)  room_101_anim2();
-	if (aainfo[0]._val1)  room_101_anim3();
-	if (aainfo[4]._val1)  room_101_anim4();
-	if (aainfo[2]._val1)  room_101_anim5();
-	if (aainfo[1]._val1)  room_101_anim6();
-	if (aainfo[5]._val1)  room_101_anim7();
-	if (aainfo[8]._val1)  room_101_anim8();
-	if (aainfo[9]._val1)  room_101_anim9();
-	if (aainfo[10]._val1) room_101_anim10();
+	if (aainfo[6]._active)  room_101_anim1();
+	if (aainfo[7]._active)  room_101_anim2();
+	if (aainfo[0]._active)  room_101_anim3();
+	if (aainfo[4]._active)  room_101_anim4();
+	if (aainfo[2]._active)  room_101_anim5();
+	if (aainfo[1]._active)  room_101_anim6();
+	if (aainfo[5]._active)  room_101_anim7();
+	if (aainfo[8]._active)  room_101_anim8();
+	if (aainfo[9]._active)  room_101_anim9();
+	if (aainfo[10]._active) room_101_anim10();
 
 	if (scratch._b2)
 		kernel_random_frame(scratch._a8, &global[g151], global[g154]);
@@ -1074,7 +1074,7 @@ static void room_101_parser() {
 		player.commands_allowed = 0;
 		player.walker_visible = 0;
 		kernel.trigger_setup_mode = 1;
-		aainfo[5]._val1 = -1;
+		aainfo[5]._active = -1;
 		aa[5] = kernel_run_animation(kernel_name('b', 5), 111);
 		scratch._ae = 1;
 		goto handled;
diff --git a/engines/mads/madsv2/forest/rooms/room103.cpp b/engines/mads/madsv2/forest/rooms/room103.cpp
index 7ec53fc9625..d12e5461d0f 100644
--- a/engines/mads/madsv2/forest/rooms/room103.cpp
+++ b/engines/mads/madsv2/forest/rooms/room103.cpp
@@ -67,8 +67,8 @@ static void room_103_init() {
 	scratch._92 = -1;
 
 	for (int count = 0; count < 10; count++) {
-		aainfo[count]._val1 = 0;
-		aainfo[count]._val2 = 1;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = 1;
 		aainfo[count]._val3 = 0;
 		aainfo[count]._val4 = 0;
 	}
@@ -80,18 +80,18 @@ static void room_103_init() {
 	player.commands_allowed = 0;
 
 	for (int count = 0; count < 10; count++) {
-		aainfo[count]._val1 = 0;
-		aainfo[count]._val2 = -1;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = -1;
 	}
 
 	aa[0] = kernel_run_animation(kernel_name('F', 1), 0);
-	aainfo[0]._val1 = -1;
+	aainfo[0]._active = -1;
 }
 
 static void room_103_anim1() {
-	if (kernel_anim[aa[0]].frame != aainfo[0]._val2) {
+	if (kernel_anim[aa[0]].frame != aainfo[0]._frame) {
 		int16 frame = kernel_anim[aa[0]].frame;
-		aainfo[0]._val2 = frame;
+		aainfo[0]._frame = frame;
 
 		if (frame == 1) {
 			digi_initial_volume(20);
@@ -100,10 +100,10 @@ static void room_103_anim1() {
 			digi_flag1 = true;
 		} else if (frame == 273) {
 			kernel_abort_animation(aa[0]);
-			aainfo[0]._val1 = 0;
+			aainfo[0]._active = 0;
 			stop_speech_on_run_animation = false;
 			aa[1] = kernel_run_animation(kernel_name('F', 2), 0);
-			aainfo[1]._val1 = -1;
+			aainfo[1]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, aa[0]);
 		}
 	}
@@ -119,9 +119,9 @@ static void room_103_anim1() {
 }
 
 static void room_103_anim2() {
-	if (kernel_anim[aa[1]].frame != aainfo[1]._val2) {
+	if (kernel_anim[aa[1]].frame != aainfo[1]._frame) {
 		int16 frame = kernel_anim[aa[1]].frame;
-		aainfo[1]._val2 = frame;
+		aainfo[1]._frame = frame;
 
 		if (frame == 165) {
 			digi_flag1 = false;
@@ -132,16 +132,16 @@ static void room_103_anim2() {
 				scratch._90 = 186;
 			} else if (frame == 195) {
 				if (aainfo[1]._val3 == 11) {
-					aainfo[1]._val2 = 186;
+					aainfo[1]._frame = 186;
 					kernel_reset_animation(aa[1], 186);
 				}
 			} else if (frame == 196) {
 				dont_frag_the_palette();
 				kernel_abort_animation(aa[1]);
-				aainfo[1]._val1 = 0;
+				aainfo[1]._active = 0;
 				stop_speech_on_run_animation = false;
 				aa[2] = kernel_run_animation(kernel_name('F', 3), 0);
-				aainfo[2]._val1 = -1;
+				aainfo[2]._active = -1;
 				kernel_reset_animation(aa[2], 3);
 				kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, aa[1]);
 			}
@@ -166,7 +166,7 @@ static void room_103_anim2() {
 		} else if (scratch._90 == 186) {
 			scratch._90 = -1;
 			aainfo[1]._val3 = 13;
-			aainfo[1]._val2 = 195;
+			aainfo[1]._frame = 195;
 			kernel_reset_animation(aa[1], 195);
 		}
 	}
@@ -182,9 +182,9 @@ static void room_103_anim2() {
 }
 
 static void room_103_anim3() {
-	if (kernel_anim[aa[2]].frame != aainfo[2]._val2) {
+	if (kernel_anim[aa[2]].frame != aainfo[2]._frame) {
 		int16 frame = kernel_anim[aa[2]].frame;
-		aainfo[2]._val2 = frame;
+		aainfo[2]._frame = frame;
 
 		switch (frame) {
 		case 29:
@@ -194,7 +194,7 @@ static void room_103_anim3() {
 			break;
 		case 38:
 			if (aainfo[2]._val3 == 12) {
-				aainfo[2]._val2 = 29;
+				aainfo[2]._frame = 29;
 				kernel_reset_animation(aa[2], 29);
 			}
 			break;
@@ -205,7 +205,7 @@ static void room_103_anim3() {
 			break;
 		case 50:
 			if (aainfo[2]._val3 == 10) {
-				aainfo[2]._val2 = 44;
+				aainfo[2]._frame = 44;
 				kernel_reset_animation(aa[2], 44);
 			}
 			break;
@@ -216,7 +216,7 @@ static void room_103_anim3() {
 			break;
 		case 60:
 			if (aainfo[2]._val3 == 12) {
-				aainfo[2]._val2 = 54;
+				aainfo[2]._frame = 54;
 				kernel_reset_animation(aa[2], 54);
 			}
 			break;
@@ -227,7 +227,7 @@ static void room_103_anim3() {
 			break;
 		case 81:
 			if (aainfo[2]._val3 == 14) {
-				aainfo[2]._val2 = 72;
+				aainfo[2]._frame = 72;
 				kernel_reset_animation(aa[2], 72);
 			}
 			break;
@@ -238,7 +238,7 @@ static void room_103_anim3() {
 			break;
 		case 91:
 			if (aainfo[2]._val3 == 14) {
-				aainfo[2]._val2 = 85;
+				aainfo[2]._frame = 85;
 				kernel_reset_animation(aa[2], 85);
 			}
 			break;
@@ -249,7 +249,7 @@ static void room_103_anim3() {
 			break;
 		case 113:
 			if (aainfo[2]._val3 == 14) {
-				aainfo[2]._val2 = 109;
+				aainfo[2]._frame = 109;
 				kernel_reset_animation(aa[2], 109);
 			}
 			break;
@@ -264,10 +264,10 @@ static void room_103_anim3() {
 		case 166:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[2]);
-			aainfo[2]._val1 = 0;
+			aainfo[2]._active = 0;
 			stop_speech_on_run_animation = false;
 			aa[3] = kernel_run_animation(kernel_name('F', 4), 0);
-			aainfo[3]._val1 = -1;
+			aainfo[3]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, aa[2]);
 			break;
 		}
@@ -278,25 +278,25 @@ static void room_103_anim3() {
 		case 29:
 			scratch._90 = -1;
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 40;
+			aainfo[2]._frame = 40;
 			kernel_reset_animation(aa[2], 40);
 			break;
 		case 44:
 			scratch._90 = -1;
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 50;
+			aainfo[2]._frame = 50;
 			kernel_reset_animation(aa[2], 50);
 			break;
 		case 54:
 			scratch._90 = -1;
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 60;
+			aainfo[2]._frame = 60;
 			kernel_reset_animation(aa[2], 60);
 			break;
 		case 72:
 			scratch._90 = -1;
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 81;
+			aainfo[2]._frame = 81;
 			kernel_reset_animation(aa[2], 81);
 			break;
 		case 85:
@@ -304,13 +304,13 @@ static void room_103_anim3() {
 			global[player_score] = 0;
 			midi_stop();
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 92;
+			aainfo[2]._frame = 92;
 			kernel_reset_animation(aa[2], 92);
 			break;
 		case 109:
 			scratch._90 = -1;
 			aainfo[2]._val3 = 13;
-			aainfo[2]._val2 = 113;
+			aainfo[2]._frame = 113;
 			kernel_reset_animation(aa[2], 113);
 			break;
 		}
@@ -322,14 +322,14 @@ static void room_103_anim3() {
 }
 
 static void room_103_anim4() {
-	if (kernel_anim[aa[3]].frame != aainfo[3]._val2) {
+	if (kernel_anim[aa[3]].frame != aainfo[3]._frame) {
 		int16 frame = kernel_anim[aa[3]].frame;
-		aainfo[3]._val2 = frame;
+		aainfo[3]._frame = frame;
 
 		if (frame == 50) {
 			stop_speech_on_run_animation = true;
 			kernel_abort_animation(aa[3]);
-			aainfo[3]._val1 = 0;
+			aainfo[3]._active = 0;
 			new_room = 104;
 		} else if (frame < 50) {
 			switch (frame) {
@@ -341,7 +341,7 @@ static void room_103_anim4() {
 				break;
 			case 21:
 				if (aainfo[3]._val3 == 15) {
-					aainfo[3]._val2 = 16;
+					aainfo[3]._frame = 16;
 					kernel_reset_animation(aa[3], 16);
 				}
 				break;
@@ -352,7 +352,7 @@ static void room_103_anim4() {
 				break;
 			case 40:
 				if (aainfo[3]._val3 == 15) {
-					aainfo[3]._val2 = 37;
+					aainfo[3]._frame = 37;
 					kernel_reset_animation(aa[3], 37);
 				}
 				break;
@@ -364,12 +364,12 @@ static void room_103_anim4() {
 		if (scratch._90 == 16) {
 			scratch._90 = -1;
 			aainfo[3]._val3 = 13;
-			aainfo[3]._val2 = 21;
+			aainfo[3]._frame = 21;
 			kernel_reset_animation(aa[3], 21);
 		} else if (scratch._90 == 37) {
 			scratch._90 = -1;
 			aainfo[3]._val3 = 13;
-			aainfo[3]._val2 = 40;
+			aainfo[3]._frame = 40;
 			kernel_reset_animation(aa[3], 40);
 		} else {
 			scratch._90 = -1;
@@ -390,10 +390,10 @@ static void room_103_daemon() {
 		new_room = 904;
 	}
 
-	if (aainfo[0]._val1 != 0) room_103_anim1();
-	if (aainfo[1]._val1 != 0) room_103_anim2();
-	if (aainfo[2]._val1 != 0) room_103_anim3();
-	if (aainfo[3]._val1 != 0) room_103_anim4();
+	if (aainfo[0]._active != 0) room_103_anim1();
+	if (aainfo[1]._active != 0) room_103_anim2();
+	if (aainfo[2]._active != 0) room_103_anim3();
+	if (aainfo[3]._active != 0) room_103_anim4();
 }
 
 static void room_103_pre_parser() {
diff --git a/engines/mads/madsv2/forest/rooms/room104.cpp b/engines/mads/madsv2/forest/rooms/room104.cpp
index d435bb44d8f..5c8a7d216ab 100644
--- a/engines/mads/madsv2/forest/rooms/room104.cpp
+++ b/engines/mads/madsv2/forest/rooms/room104.cpp
@@ -90,8 +90,8 @@ static void room_104_init() {
 	global[player_score] = 0;
 
 	for (int count = 0; count < 10; count++) {
-		aainfo[count]._val1 = 0;
-		aainfo[count]._val2 = 1;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = 1;
 		aainfo[count]._val3 = 0;
 		aainfo[count]._val4 = 0;
 	}
@@ -159,12 +159,12 @@ static void room_104_init1() {
 	mouse_hide();
 
 	for (int count = 0; count < 10; count++) {
-		aainfo[count]._val1 = 0;
-		aainfo[count]._val2 = -1;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = -1;
 	}
 
 	aa[6] = kernel_run_animation(kernel_name('s', 1), 0);
-	aainfo[6]._val1 = -1;
+	aainfo[6]._active = -1;
 }
 
 static void room_104_init2() {
@@ -177,12 +177,12 @@ static void room_104_init2() {
 	mouse_hide();
 
 	for (int count = 0; count < 10; count++) {
-		aainfo[count]._val1 = 0;
-		aainfo[count]._val2 = -1;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = -1;
 	}
 
 	aa[7] = kernel_run_animation(kernel_name('T', 1), 0);
-	aainfo[7]._val1 = -1;
+	aainfo[7]._active = -1;
 }
 
 static void room_104_init3() {
@@ -197,9 +197,9 @@ static void room_104_init3() {
 	kernel_position_anim(scratch._9a, 248, 137, 94, 3);
 
 	aa[4] = kernel_run_animation(kernel_name('C', 1), 0);
-	aainfo[4]._val1 = -1;
+	aainfo[4]._active = -1;
 	aa[5] = kernel_run_animation(kernel_name('M', 1), 0);
-	aainfo[5]._val1 = -1;
+	aainfo[5]._active = -1;
 
 	if (previous_room != -2) {
 		player.x = 214;
@@ -219,7 +219,7 @@ static void room_104_init3() {
 	} else if (previous_room == 101) {
 		scratch._a0 = 0;
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 31;
 		return;
 	} else if (previous_room == 199) {
@@ -246,9 +246,9 @@ static void room_104_init3() {
 }
 
 static void room_104_anim1() {
-	if (kernel_anim[aa[6]].frame != aainfo[6]._val2) {
+	if (kernel_anim[aa[6]].frame != aainfo[6]._frame) {
 		int16 frame = kernel_anim[aa[6]].frame;
-		aainfo[6]._val2 = frame;
+		aainfo[6]._frame = frame;
 		scratch._a0 = 0;
 
 		switch (frame) {
@@ -264,10 +264,10 @@ static void room_104_anim1() {
 			break;
 		case 32:
 			if (aainfo[6]._val3 == 7) {
-				aainfo[6]._val2 = 13;
+				aainfo[6]._frame = 13;
 				kernel_reset_animation(aa[6], 13);
 			} else if (aainfo[6]._val3 == 9) {
-				aainfo[6]._val2 = 31;
+				aainfo[6]._frame = 31;
 				kernel_reset_animation(aa[6], 31);
 			}
 			break;
@@ -278,7 +278,7 @@ static void room_104_anim1() {
 			break;
 		case 42:
 			if (aainfo[6]._val3 == 8) {
-				aainfo[6]._val2 = 33;
+				aainfo[6]._frame = 33;
 				kernel_reset_animation(aa[6], 33);
 			}
 			break;
@@ -289,7 +289,7 @@ static void room_104_anim1() {
 			break;
 		case 45:
 			if (aainfo[6]._val3 == 9) {
-				aainfo[6]._val2 = 44;
+				aainfo[6]._frame = 44;
 				kernel_reset_animation(aa[6], 44);
 			}
 			break;
@@ -300,13 +300,13 @@ static void room_104_anim1() {
 			break;
 		case 69:
 			if (aainfo[6]._val3 == 7) {
-				aainfo[6]._val2 = 46;
+				aainfo[6]._frame = 46;
 				kernel_reset_animation(aa[6], 46);
 			}
 			break;
 		case 71:
 			if (aainfo[6]._val3 == 9) {
-				aainfo[6]._val2 = 70;
+				aainfo[6]._frame = 70;
 				kernel_reset_animation(aa[6], 70);
 			}
 			break;
@@ -339,7 +339,7 @@ static void room_104_anim1() {
 			break;
 		case 2:
 			aainfo[6]._val3 = 10;
-			aainfo[6]._val2 = 31;
+			aainfo[6]._frame = 31;
 			kernel_reset_animation(aa[6], 31);
 			scratch._a2 = -1;
 			break;
@@ -350,7 +350,7 @@ static void room_104_anim1() {
 			break;
 		case 33:
 			aainfo[6]._val3 = 10;
-			aainfo[6]._val2 = 42;
+			aainfo[6]._frame = 42;
 			kernel_reset_animation(aa[6], 42);
 			scratch._a2 = -1;
 			break;
@@ -361,9 +361,9 @@ static void room_104_anim1() {
 			break;
 		case 47:
 			aainfo[6]._val3 = 7;
-			aainfo[6]._val2 = 13;
+			aainfo[6]._frame = 13;
 			digi_play_build(104, 'c', 3, 1);
-			kernel_reset_animation(aa[6], aainfo[6]._val2);
+			kernel_reset_animation(aa[6], aainfo[6]._frame);
 			scratch._a2 = 48;
 			break;
 		case 48:
@@ -373,7 +373,7 @@ static void room_104_anim1() {
 			break;
 		case 49:
 			aainfo[6]._val3 = 10;
-			aainfo[6]._val2 = 69;
+			aainfo[6]._frame = 69;
 			kernel_reset_animation(aa[6], 69);
 			scratch._a2 = -1;
 			break;
@@ -387,9 +387,9 @@ static void room_104_anim1() {
 }
 
 static void room_104_anim2() {
-	if (kernel_anim[aa[7]].frame != aainfo[7]._val2) {
+	if (kernel_anim[aa[7]].frame != aainfo[7]._frame) {
 		int16 frame = kernel_anim[aa[7]].frame;
-		aainfo[7]._val2 = frame;
+		aainfo[7]._frame = frame;
 		scratch._a0 = 0;
 
 		switch (frame) {
@@ -410,16 +410,16 @@ static void room_104_anim2() {
 			break;
 		case 31: case 32: case 33: case 34: case 35:
 			if (aainfo[7]._val3 == 8) {
-				aainfo[7]._val2 = imath_random(30, 34);
-				kernel_reset_animation(aa[7], aainfo[7]._val2);
+				aainfo[7]._frame = imath_random(30, 34);
+				kernel_reset_animation(aa[7], aainfo[7]._frame);
 			} else {
-				aainfo[7]._val2 = 38;
+				aainfo[7]._frame = 38;
 				kernel_reset_animation(aa[7], 38);
 			}
 			break;
 		case 39:
 			if (aainfo[7]._val3 == 9) {
-				aainfo[7]._val2 = 38;
+				aainfo[7]._frame = 38;
 				kernel_reset_animation(aa[7], 38);
 			}
 			break;
@@ -430,16 +430,16 @@ static void room_104_anim2() {
 			break;
 		case 41: case 42: case 43: case 44: case 45:
 			if (aainfo[7]._val3 == 11) {
-				aainfo[7]._val2 = imath_random(40, 44);
-				kernel_reset_animation(aa[7], aainfo[7]._val2);
+				aainfo[7]._frame = imath_random(40, 44);
+				kernel_reset_animation(aa[7], aainfo[7]._frame);
 			} else {
-				aainfo[7]._val2 = 45;
+				aainfo[7]._frame = 45;
 				kernel_reset_animation(aa[7], 45);
 			}
 			break;
 		case 49:
 			if (aainfo[7]._val3 == 9) {
-				aainfo[7]._val2 = 48;
+				aainfo[7]._frame = 48;
 				kernel_reset_animation(aa[7], 48);
 			}
 			break;
@@ -450,26 +450,26 @@ static void room_104_anim2() {
 			break;
 		case 51: case 52: case 53: case 54: case 55:
 			if (aainfo[7]._val3 == 7) {
-				aainfo[7]._val2 = imath_random(50, 54);
-				kernel_reset_animation(aa[7], aainfo[7]._val2);
+				aainfo[7]._frame = imath_random(50, 54);
+				kernel_reset_animation(aa[7], aainfo[7]._frame);
 			} else {
-				aainfo[7]._val2 = 55;
+				aainfo[7]._frame = 55;
 				kernel_reset_animation(aa[7], 55);
 			}
 			break;
 		case 59:
 			if (aainfo[7]._val3 == 9) {
-				aainfo[7]._val2 = 58;
+				aainfo[7]._frame = 58;
 				kernel_reset_animation(aa[7], 58);
 			}
 			break;
 		case 64:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[7]);
-			aainfo[7]._val1 = 0;
+			aainfo[7]._active = 0;
 			stop_speech_on_run_animation = false;
 			aa[8] = kernel_run_animation(kernel_name('T', 2), 0);
-			aainfo[8]._val1 = -1;
+			aainfo[8]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_ANIM, aa[8]);
 			break;
 		}
@@ -488,7 +488,7 @@ static void room_104_anim2() {
 			break;
 		case 31:
 			aainfo[7]._val3 = 10;
-			aainfo[7]._val2 = 38;
+			aainfo[7]._frame = 38;
 			kernel_reset_animation(aa[7], 38);
 			scratch._a2 = -1;
 			break;
@@ -499,7 +499,7 @@ static void room_104_anim2() {
 			break;
 		case 41:
 			aainfo[7]._val3 = 10;
-			aainfo[7]._val2 = 45;
+			aainfo[7]._frame = 45;
 			kernel_reset_animation(aa[7], 45);
 			scratch._a2 = -1;
 			break;
@@ -510,7 +510,7 @@ static void room_104_anim2() {
 			break;
 		case 51:
 			aainfo[7]._val3 = 10;
-			aainfo[7]._val2 = 55;
+			aainfo[7]._frame = 55;
 			kernel_reset_animation(aa[7], 55);
 			scratch._a2 = -1;
 			break;
@@ -524,9 +524,9 @@ static void room_104_anim2() {
 }
 
 static void room_104_anim3() {
-	if (kernel_anim[aa[8]].frame != aainfo[8]._val2) {
+	if (kernel_anim[aa[8]].frame != aainfo[8]._frame) {
 		int16 frame = kernel_anim[aa[8]].frame;
-		aainfo[8]._val2 = frame;
+		aainfo[8]._frame = frame;
 		scratch._a0 = 0;
 
 		switch (frame) {
@@ -542,13 +542,13 @@ static void room_104_anim3() {
 			break;
 		case 45:
 			if (aainfo[8]._val3 == 7) {
-				aainfo[8]._val2 = 41;
+				aainfo[8]._frame = 41;
 				kernel_reset_animation(aa[8], 41);
 			}
 			break;
 		case 47:
 			if (aainfo[8]._val3 == 9) {
-				aainfo[8]._val2 = 46;
+				aainfo[8]._frame = 46;
 				kernel_reset_animation(aa[8], 46);
 			}
 			break;
@@ -563,13 +563,13 @@ static void room_104_anim3() {
 			break;
 		case 69:
 			if (aainfo[8]._val3 == 12) {
-				aainfo[8]._val2 = 60;
+				aainfo[8]._frame = 60;
 				kernel_reset_animation(aa[8], 60);
 			}
 			break;
 		case 74:
 			if (aainfo[8]._val3 == 9) {
-				aainfo[8]._val2 = 73;
+				aainfo[8]._frame = 73;
 				kernel_reset_animation(aa[8], 73);
 			}
 			break;
@@ -580,13 +580,13 @@ static void room_104_anim3() {
 			break;
 		case 79:
 			if (aainfo[8]._val3 == 11) {
-				aainfo[8]._val2 = 75;
+				aainfo[8]._frame = 75;
 				kernel_reset_animation(aa[8], 75);
 			}
 			break;
 		case 83:
 			if (aainfo[8]._val3 == 9) {
-				aainfo[8]._val2 = 82;
+				aainfo[8]._frame = 82;
 				kernel_reset_animation(aa[8], 82);
 			}
 			break;
@@ -598,7 +598,7 @@ static void room_104_anim3() {
 			break;
 		case 89:
 			if (aainfo[8]._val3 == 8) {
-				aainfo[8]._val2 = 84;
+				aainfo[8]._frame = 84;
 				kernel_reset_animation(aa[8], 84);
 			}
 			break;
@@ -617,7 +617,7 @@ static void room_104_anim3() {
 			break;
 		case 42:
 			aainfo[8]._val3 = 10;
-			aainfo[8]._val2 = 45;
+			aainfo[8]._frame = 45;
 			kernel_reset_animation(aa[8], 45);
 			scratch._a2 = -1;
 			break;
@@ -628,7 +628,7 @@ static void room_104_anim3() {
 			break;
 		case 60:
 			aainfo[8]._val3 = 10;
-			aainfo[8]._val2 = 70;
+			aainfo[8]._frame = 70;
 			kernel_reset_animation(aa[8], 70);
 			scratch._a2 = -1;
 			break;
@@ -639,7 +639,7 @@ static void room_104_anim3() {
 			break;
 		case 76:
 			aainfo[8]._val3 = 10;
-			aainfo[8]._val2 = 79;
+			aainfo[8]._frame = 79;
 			kernel_reset_animation(aa[8], 79);
 			scratch._a2 = -1;
 			break;
@@ -650,7 +650,7 @@ static void room_104_anim3() {
 			break;
 		case 85:
 			aainfo[8]._val3 = 10;
-			aainfo[8]._val2 = 89;
+			aainfo[8]._frame = 89;
 			kernel_reset_animation(aa[8], 89);
 			scratch._a2 = -1;
 			break;
@@ -666,9 +666,9 @@ static void room_104_anim3() {
 static void room_104_anim4() {
 	int16 var_2 = -1;
 
-	if (kernel_anim[aa[4]].frame != aainfo[4]._val2) {
+	if (kernel_anim[aa[4]].frame != aainfo[4]._frame) {
 		int16 frame = kernel_anim[aa[4]].frame;
-		aainfo[4]._val2 = frame;
+		aainfo[4]._frame = frame;
 		aainfo[4]._val4++;
 
 		if (frame == 7) {
@@ -698,7 +698,7 @@ static void room_104_anim4() {
 	}
 
 	if (var_2 >= 0) {
-		aainfo[4]._val2 = var_2;
+		aainfo[4]._frame = var_2;
 		kernel_reset_animation(aa[4], var_2);
 	}
 }
@@ -706,9 +706,9 @@ static void room_104_anim4() {
 static void room_104_anim5() {
 	int16 var_2 = -1;
 
-	if (kernel_anim[aa[5]].frame != aainfo[5]._val2) {
+	if (kernel_anim[aa[5]].frame != aainfo[5]._frame) {
 		int16 frame = kernel_anim[aa[5]].frame;
-		aainfo[5]._val2 = frame;
+		aainfo[5]._frame = frame;
 		aainfo[5]._val4++;
 
 		if (frame == 12 || frame == 5) {
@@ -735,60 +735,60 @@ static void room_104_anim5() {
 	}
 
 	if (var_2 >= 0) {
-		aainfo[5]._val2 = var_2;
+		aainfo[5]._frame = var_2;
 		kernel_reset_animation(aa[5], var_2);
 	}
 }
 
 static void room_104_anim6() {
-	if (kernel_anim[aa[0]].frame != aainfo[0]._val2)
-		aainfo[0]._val2 = kernel_anim[aa[0]].frame;
+	if (kernel_anim[aa[0]].frame != aainfo[0]._frame)
+		aainfo[0]._frame = kernel_anim[aa[0]].frame;
 
 	if (global[player_hyperwalked] == -1) {
-		aainfo[0]._val2 = scratch._92 - 1;
-		kernel_reset_animation(aa[0], aainfo[0]._val2);
+		aainfo[0]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
 	}
 }
 
 static void room_104_anim7() {
-	if (kernel_anim[aa[2]].frame != aainfo[2]._val2)
-		aainfo[2]._val2 = kernel_anim[aa[2]].frame;
-	int16 frame = aainfo[2]._val2;
+	if (kernel_anim[aa[2]].frame != aainfo[2]._frame)
+		aainfo[2]._frame = kernel_anim[aa[2]].frame;
+	int16 frame = aainfo[2]._frame;
 
 	if (global[player_hyperwalked] == -1) {
 		if (frame <= 23) {
-			aainfo[2]._val2 = 23;
+			aainfo[2]._frame = 23;
 			kernel_reset_animation(aa[2], 23);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 		} else {
-			aainfo[2]._val2 = 44;
+			aainfo[2]._frame = 44;
 			kernel_reset_animation(aa[2], 44);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 		}
 	} else if (frame == 45) {
-		aainfo[2]._val2 = 44;
+		aainfo[2]._frame = 44;
 		kernel_reset_animation(aa[2], 44);
 		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 	}
 }
 
 static void room_104_anim8() {
-	if (kernel_anim[aa[1]].frame != aainfo[1]._val2)
-		aainfo[1]._val2 = kernel_anim[aa[1]].frame;
-	int16 frame = aainfo[1]._val2;
+	if (kernel_anim[aa[1]].frame != aainfo[1]._frame)
+		aainfo[1]._frame = kernel_anim[aa[1]].frame;
+	int16 frame = aainfo[1]._frame;
 
 	if (global[player_hyperwalked] == -1) {
 		if (frame <= 23) {
-			aainfo[1]._val2 = 23;
+			aainfo[1]._frame = 23;
 			kernel_reset_animation(aa[1], 23);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 		} else {
-			aainfo[1]._val2 = 44;
+			aainfo[1]._frame = 44;
 			kernel_reset_animation(aa[1], 44);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 		}
 	} else if (frame == 45) {
-		aainfo[1]._val2 = 44;
+		aainfo[1]._frame = 44;
 		kernel_reset_animation(aa[1], 44);
 		kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 	}
@@ -821,7 +821,7 @@ static void room_104_daemon() {
 	case 24:
 		if (scratch._8c == 3) {
 			aa[1] = kernel_run_animation(kernel_name('e', 1), 102);
-			aainfo[1]._val1 = -1;
+			aainfo[1]._active = -1;
 			scratch._96 = 1;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._9a);
@@ -834,7 +834,7 @@ static void room_104_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			aainfo[2]._val1 = -1;
+			aainfo[2]._active = -1;
 			scratch._94 = 2;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._9c);
@@ -868,7 +868,7 @@ static void room_104_daemon() {
 
 	case 101:
 		kernel_abort_animation(aa[scratch._94]);
-		aainfo[scratch._94]._val1 = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -877,7 +877,7 @@ static void room_104_daemon() {
 
 	case 102:
 		kernel_abort_animation(aa[scratch._96]);
-		aainfo[scratch._96]._val1 = 0;
+		aainfo[scratch._96]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -890,14 +890,14 @@ static void room_104_daemon() {
 		global_anim2(4, scratch._9c, global[g141], &global[g142]);
 	}
 
-	if (aainfo[0]._val1 != 0) room_104_anim6();
-	if (aainfo[2]._val1 != 0) room_104_anim7();
-	if (aainfo[1]._val1 != 0) room_104_anim8();
-	if (aainfo[4]._val1 != 0) room_104_anim4();
-	if (aainfo[5]._val1 != 0) room_104_anim5();
-	if (aainfo[6]._val1 != 0) room_104_anim1();
-	if (aainfo[7]._val1 != 0) room_104_anim2();
-	if (aainfo[8]._val1 != 0) room_104_anim3();
+	if (aainfo[0]._active != 0) room_104_anim6();
+	if (aainfo[2]._active != 0) room_104_anim7();
+	if (aainfo[1]._active != 0) room_104_anim8();
+	if (aainfo[4]._active != 0) room_104_anim4();
+	if (aainfo[5]._active != 0) room_104_anim5();
+	if (aainfo[6]._active != 0) room_104_anim1();
+	if (aainfo[7]._active != 0) room_104_anim2();
+	if (aainfo[8]._active != 0) room_104_anim3();
 }
 
 static void room_104_pre_parser() {
diff --git a/engines/mads/madsv2/forest/rooms/room106.cpp b/engines/mads/madsv2/forest/rooms/room106.cpp
index 27b9ff43c0c..19698662150 100644
--- a/engines/mads/madsv2/forest/rooms/room106.cpp
+++ b/engines/mads/madsv2/forest/rooms/room106.cpp
@@ -114,8 +114,8 @@ static void room_106_init() {
 		}
 
 		for (int16 i = 0; i < 10; i++) {
-			aainfo[i]._val1 = 0;
-			aainfo[i]._val2 = 1;
+			aainfo[i]._active = 0;
+			aainfo[i]._frame = 1;
 			aainfo[i]._val3 = 0;
 			aainfo[i]._val4 = 0;
 		}
@@ -146,12 +146,12 @@ static void room_106_init1() {
 	player.commands_allowed = 0;
 
 	for (int16 i = 0; i < 10; i++) {
-		aainfo[i]._val1 = 0;
-		aainfo[i]._val2 = -1;
+		aainfo[i]._active = 0;
+		aainfo[i]._frame = -1;
 	}
 
 	aa[9] = kernel_run_animation(kernel_name('I', 1), 0);
-	aainfo[9]._val1 = -1;
+	aainfo[9]._active = -1;
 }
 
 static void room_106_init2() {
@@ -182,7 +182,7 @@ static void room_106_init2() {
 		return;
 	case 101:
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 95;
 		return;
 	case 199:
@@ -198,12 +198,12 @@ static void room_106_init2() {
 		return;
 	case 201:
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 44;
 		return;
 	case 210:
 		aa[1] = kernel_run_animation("*RM106Y31", 0);
-		aainfo[1]._val1 = -1;
+		aainfo[1]._active = -1;
 		scratch._92 = 54;
 		return;
 	default:
@@ -221,8 +221,8 @@ static void room_106_init2() {
 
 static void room_106_anim1() {
 	int16 frame = kernel_anim[aa[9]].frame;
-	if (frame != aainfo[9]._val2) {
-		aainfo[9]._val2 = frame;
+	if (frame != aainfo[9]._frame) {
+		aainfo[9]._frame = frame;
 		if (frame == 121) {
 			new_room = 103;
 		} else if (frame < 121) {
@@ -265,9 +265,9 @@ static void room_106_anim1() {
 
 static void room_106_anim2() {
 	int16 frame = kernel_anim[aa[6]].frame;
-	if (frame == aainfo[6]._val2)
+	if (frame == aainfo[6]._frame)
 		return;
-	aainfo[6]._val2 = frame;
+	aainfo[6]._frame = frame;
 	if (scratch._a2 == 1) {
 		if (frame == 81) {
 			digi_play_build_ii('e', 5, 1);
@@ -283,27 +283,27 @@ static void room_106_anim2() {
 
 static void room_106_anim3() {
 	int16 frame = kernel_anim[aa[0]].frame;
-	if (frame != aainfo[0]._val2)
-		aainfo[0]._val2 = frame;
+	if (frame != aainfo[0]._frame)
+		aainfo[0]._frame = frame;
 	if (global[player_hyperwalked] == -1) {
-		aainfo[0]._val2 = scratch._92 - 1;
-		kernel_reset_animation(aa[0], aainfo[0]._val2);
+		aainfo[0]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
 	}
 }
 
 static void room_106_anim4() {
 	int16 frame = kernel_anim[aa[7]].frame;
-	if (frame != aainfo[7]._val2) {
-		aainfo[7]._val2 = frame;
+	if (frame != aainfo[7]._frame) {
+		aainfo[7]._frame = frame;
 		if (frame == 53) {
 			if (aainfo[7]._val3 == 10) {
-				aainfo[7]._val2 = 48;
+				aainfo[7]._frame = 48;
 				kernel_reset_animation(aa[7], 48);
 			}
 		} else if (frame < 53) {
 			if (frame == 7) {
 				if (aainfo[7]._val3 == 13) {
-					aainfo[7]._val2 = 5;
+					aainfo[7]._frame = 5;
 					kernel_reset_animation(aa[7], 5);
 				}
 			} else if (frame < 7) {
@@ -313,14 +313,14 @@ static void room_106_anim4() {
 					scratch._ae = 101;
 				} else if (frame == 4) {
 					if (aainfo[7]._val3 == 10) {
-						aainfo[7]._val2 = 2;
+						aainfo[7]._frame = 2;
 						kernel_reset_animation(aa[7], 2);
 					}
 				}
 			} else { // 8..52
 				if (frame == 12) {
 					if (aainfo[7]._val3 == 11) {
-						aainfo[7]._val2 = 8;
+						aainfo[7]._frame = 8;
 						kernel_reset_animation(aa[7], 8);
 					}
 				} else if (frame == 19) {
@@ -328,7 +328,7 @@ static void room_106_anim4() {
 					global[g154] = 2;
 					digi_play_build(106, 'b', 2, 1);
 					scratch._ae = 105;
-					aainfo[7]._val2 = 2;
+					aainfo[7]._frame = 2;
 					kernel_reset_animation(aa[7], 2);
 				}
 			}
@@ -343,14 +343,14 @@ static void room_106_anim4() {
 		global[g154] = 0;
 		kernel_timing_trigger(30, 28);
 		aainfo[7]._val3 = 13;
-		aainfo[7]._val2 = 5;
+		aainfo[7]._frame = 5;
 		kernel_reset_animation(aa[7], 5);
 		scratch._ae = 102;
 		return;
 	case 102:
 		global[g156] = 2;
 		aainfo[7]._val3 = 11;
-		aainfo[7]._val2 = 8;
+		aainfo[7]._frame = 8;
 		kernel_reset_animation(aa[7], 8);
 		digi_play_build(106, 'e', 1, 1);
 		scratch._ae = 103;
@@ -358,7 +358,7 @@ static void room_106_anim4() {
 	case 103:
 		global[g156] = 0;
 		aainfo[7]._val3 = 13;
-		aainfo[7]._val2 = 13;
+		aainfo[7]._frame = 13;
 		kernel_reset_animation(aa[7], 13);
 		return;
 	case 105:
@@ -366,7 +366,7 @@ static void room_106_anim4() {
 		global_digi_play(4);
 		global[g154] = 0;
 		aainfo[7]._val3 = 13;
-		aainfo[7]._val2 = 20;
+		aainfo[7]._frame = 20;
 		kernel_reset_animation(aa[7], 20);
 		return;
 	}
@@ -374,8 +374,8 @@ static void room_106_anim4() {
 
 static void room_106_anim5() {
 	int16 frame = kernel_anim[aa[8]].frame;
-	if (frame != aainfo[8]._val2) {
-		aainfo[8]._val2 = frame;
+	if (frame != aainfo[8]._frame) {
+		aainfo[8]._frame = frame;
 		if (scratch._ac == 2) {
 			if (frame == 44) {
 				aainfo[8]._val3 = 11;
@@ -383,7 +383,7 @@ static void room_106_anim5() {
 				scratch._ae = 501;
 			} else if (frame == 49) {
 				if (aainfo[8]._val3 == 11) {
-					aainfo[8]._val2 = 47;
+					aainfo[8]._frame = 47;
 					kernel_reset_animation(aa[8], 47);
 				}
 			}
@@ -394,70 +394,70 @@ static void room_106_anim5() {
 	if (scratch._ae == 501) {
 		global[g156] = 0;
 		aainfo[8]._val3 = 13;
-		aainfo[8]._val2 = 51;
+		aainfo[8]._frame = 51;
 		kernel_reset_animation(aa[8], 51);
 	}
 }
 
 static void room_106_anim6() {
 	int16 frame = kernel_anim[aa[1]].frame;
-	if (frame != aainfo[1]._val2)
-		aainfo[1]._val2 = frame;
+	if (frame != aainfo[1]._frame)
+		aainfo[1]._frame = frame;
 
-	if (global[player_hyperwalked] != -1 && aainfo[1]._val2 != scratch._92)
+	if (global[player_hyperwalked] != -1 && aainfo[1]._frame != scratch._92)
 		return;
 
 	kernel_abort_animation(aa[1]);
-	aainfo[1]._val1 = 0;
+	aainfo[1]._active = 0;
 	aa[2] = kernel_run_animation("*RM106Y32", 100);
-	aainfo[2]._val1 = -1;
+	aainfo[2]._active = -1;
 	scratch._92 = 134;
-	aainfo[2]._val2 = (global[player_hyperwalked] == -1) ? 133 : 54;
-	kernel_reset_animation(aa[2], aainfo[2]._val2);
+	aainfo[2]._frame = (global[player_hyperwalked] == -1) ? 133 : 54;
+	kernel_reset_animation(aa[2], aainfo[2]._frame);
 }
 
 static void room_106_anim7() {
 	int16 frame = kernel_anim[aa[2]].frame;
-	if (frame != aainfo[2]._val2)
-		aainfo[2]._val2 = frame;
+	if (frame != aainfo[2]._frame)
+		aainfo[2]._frame = frame;
 	if (global[player_hyperwalked] == -1) {
-		aainfo[2]._val2 = scratch._92 - 1;
-		kernel_reset_animation(aa[2], aainfo[2]._val2);
+		aainfo[2]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[2], aainfo[2]._frame);
 	}
 }
 
 static void room_106_anim8() {
 	int16 frame = kernel_anim[aa[3]].frame;
-	if (frame != aainfo[3]._val2)
-		aainfo[3]._val2 = frame;
+	if (frame != aainfo[3]._frame)
+		aainfo[3]._frame = frame;
 	if (global[player_hyperwalked] == -1) {
-		aainfo[3]._val2 = scratch._92 - 1;
-		kernel_reset_animation(aa[3], aainfo[3]._val2);
+		aainfo[3]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[3], aainfo[3]._frame);
 	}
 }
 
 static void room_106_anim9() {
 	int16 frame = kernel_anim[aa[5]].frame;
-	if (frame == aainfo[5]._val2)
+	if (frame == aainfo[5]._frame)
 		return;
-	aainfo[5]._val2 = frame;
+	aainfo[5]._frame = frame;
 	if (frame == 13)
 		digi_play_build(101, '_', 1, 2);
 }
 
 static void room_106_anim10() {
 	int16 frame = kernel_anim[aa[4]].frame;
-	if (frame != aainfo[4]._val2)
-		aainfo[4]._val2 = frame;
+	if (frame != aainfo[4]._frame)
+		aainfo[4]._frame = frame;
 
 	if (global[player_hyperwalked] == -1 && frame <= 23) {
-		aainfo[4]._val2 = 23;
+		aainfo[4]._frame = 23;
 		kernel_reset_animation(aa[4], 23);
 		kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 		return;
 	}
 	if (global[player_hyperwalked] == -1 || frame == 45) {
-		aainfo[4]._val2 = 44;
+		aainfo[4]._frame = 44;
 		kernel_reset_animation(aa[4], 44);
 		kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 	}
@@ -503,7 +503,7 @@ static void room_106_daemon() {
 			global[g143] = 1;
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			aa[5] = kernel_run_animation(kernel_name('R', 1), 107);
-			aainfo[5]._val1 = -1;
+			aainfo[5]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[5], KERNEL_NOW, 0);
 		}
 		break;
@@ -514,7 +514,7 @@ static void room_106_daemon() {
 			aa[6] = kernel_run_animation(kernel_name('M', 1), 102);
 		else
 			break;
-		aainfo[6]._val1 = -1;
+		aainfo[6]._active = -1;
 		kernel_reset_animation(scratch._9a, 0);
 		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_ANIM, scratch._9a);
 		global[g133] = 1;
@@ -522,7 +522,7 @@ static void room_106_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[5] = kernel_run_animation(kernel_name('R', 1), 101);
-			aainfo[5]._val1 = -1;
+			aainfo[5]._active = -1;
 			scratch._94 = 5;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[5], KERNEL_ANIM, scratch._9c);
@@ -536,7 +536,7 @@ static void room_106_daemon() {
 			global[g133] = 1;
 			global[g143] = 1;
 			aa[3] = kernel_run_animation(kernel_name('Z', 3), 103);
-			aainfo[3]._val1 = -1;
+			aainfo[3]._active = -1;
 			scratch._98 = 3;
 			scratch._92 = 101;
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_ANIM, aa[3]);
@@ -556,17 +556,17 @@ static void room_106_daemon() {
 			global[g133] = 1;
 			global[g143] = 1;
 			aa[8] = kernel_run_animation(kernel_name('x', 1), 108);
-			aainfo[8]._val1 = -1;
+			aainfo[8]._active = -1;
 			scratch._ac = 1;
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_ANIM, aa[8]);
 		}
 		break;
 	case 100:
 		kernel_abort_animation(aa[0]);
-		aainfo[0]._val1 = 0;
+		aainfo[0]._active = 0;
 		if (flags[3] == 1) {
 			aa[7] = kernel_run_animation(kernel_name('t', 1), 104);
-			aainfo[7]._val1 = -1;
+			aainfo[7]._active = -1;
 		} else {
 			global[g131] = -1;
 			global[g141] = -1;
@@ -583,7 +583,7 @@ static void room_106_daemon() {
 		break;
 	case 101:
 		kernel_abort_animation(aa[scratch._94]);
-		aainfo[scratch._94]._val1 = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -591,7 +591,7 @@ static void room_106_daemon() {
 		break;
 	case 102:
 		kernel_abort_animation(aa[6]);
-		aainfo[6]._val1 = 0;
+		aainfo[6]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -605,7 +605,7 @@ static void room_106_daemon() {
 		break;
 	case 104:
 		kernel_abort_animation(aa[7]);
-		aainfo[7]._val1 = 0;
+		aainfo[7]._active = 0;
 		global[g131] = -1;
 		global[g141] = -1;
 		kernel_reset_animation(scratch._9a, 1);
@@ -625,7 +625,7 @@ static void room_106_daemon() {
 		break;
 	case 107:
 		kernel_abort_animation(aa[5]);
-		aainfo[5]._val1 = 0;
+		aainfo[5]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -651,7 +651,7 @@ static void room_106_daemon() {
 			scratch._ac = 3;
 		} else if (scratch._ac == 3) {
 			kernel_abort_animation(aa[8]);
-			aainfo[8]._val1 = 0;
+			aainfo[8]._active = 0;
 			global[g131] = -1;
 			global[g141] = -1;
 			kernel_reset_animation(scratch._9a, 1);
@@ -676,16 +676,16 @@ static void room_106_daemon() {
 		global_anim1(2, scratch._9a, global[g131], &global[g132]);
 		global_anim2(1, scratch._9c, global[g141], &global[g142]);
 	}
-	if (aainfo[0]._val1 != 0)  room_106_anim3();
-	if (aainfo[1]._val1 != 0)  room_106_anim6();
-	if (aainfo[2]._val1 != 0)  room_106_anim7();
-	if (aainfo[3]._val1 != 0)  room_106_anim8();
-	if (aainfo[5]._val1 != 0)  room_106_anim9();
-	if (aainfo[4]._val1 != 0)  room_106_anim10();
-	if (aainfo[6]._val1 != 0)  room_106_anim2();
-	if (aainfo[9]._val1 != 0)  room_106_anim1();
-	if (aainfo[7]._val1 != 0)  room_106_anim4();
-	if (aainfo[8]._val1 != 0)  room_106_anim5();
+	if (aainfo[0]._active != 0)  room_106_anim3();
+	if (aainfo[1]._active != 0)  room_106_anim6();
+	if (aainfo[2]._active != 0)  room_106_anim7();
+	if (aainfo[3]._active != 0)  room_106_anim8();
+	if (aainfo[5]._active != 0)  room_106_anim9();
+	if (aainfo[4]._active != 0)  room_106_anim10();
+	if (aainfo[6]._active != 0)  room_106_anim2();
+	if (aainfo[9]._active != 0)  room_106_anim1();
+	if (aainfo[7]._active != 0)  room_106_anim4();
+	if (aainfo[8]._active != 0)  room_106_anim5();
 
 	if (scratch._aa != 0) {
 		kernel_random_frame(scratch._a6, &global[g151], global[g154]);
diff --git a/engines/mads/madsv2/forest/rooms/room107.cpp b/engines/mads/madsv2/forest/rooms/room107.cpp
index a8c4aa9a173..16f210f3e4a 100644
--- a/engines/mads/madsv2/forest/rooms/room107.cpp
+++ b/engines/mads/madsv2/forest/rooms/room107.cpp
@@ -82,19 +82,19 @@ static void room_107_init() {
 	mouse_hide();
 
 	for (int16 i = 0; i < 10; i++) {
-		aainfo[i]._val1 = 0;
-		aainfo[i]._val2 = -1;
+		aainfo[i]._active = 0;
+		aainfo[i]._frame = -1;
 	}
 
 	kernel_timing_trigger(5, 100);
 }
 
 static void room_107_anim1() {
-	int16 prev_frame = aainfo[0]._val2;
+	int16 prev_frame = aainfo[0]._frame;
 	int16 frame = kernel_anim[aa[0]].frame;
 
 	if (frame != prev_frame) {
-		aainfo[0]._val2 = frame;
+		aainfo[0]._frame = frame;
 
 		if (frame == 30) {
 			new_room = 104;
@@ -109,7 +109,7 @@ static void room_107_anim1() {
 				scratch._8e = 21;
 			} else if (frame == 26) {
 				if (aainfo[0]._val3 == 1) {
-					aainfo[0]._val2 = 21;
+					aainfo[0]._frame = 21;
 					kernel_reset_animation(aa[0], 21);
 				}
 			}
@@ -121,7 +121,7 @@ static void room_107_anim1() {
 			aainfo[0]._val3 = 2;
 			scratch._8e = -1;
 			global_digi_play(4);
-			aainfo[0]._val2 = 26;
+			aainfo[0]._frame = 26;
 			kernel_reset_animation(aa[0], 26);
 		}
 	}
@@ -136,11 +136,11 @@ static void room_107_daemon() {
 
 	if (kernel.trigger == 100) {
 		aa[0] = kernel_run_animation(kernel_name('T', 1), 0);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._8c = 30;
 	}
 
-	if (aainfo[0]._val1 != 0)
+	if (aainfo[0]._active != 0)
 		room_107_anim1();
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room199.cpp b/engines/mads/madsv2/forest/rooms/room199.cpp
index beffb90cfe8..35abb9125ac 100644
--- a/engines/mads/madsv2/forest/rooms/room199.cpp
+++ b/engines/mads/madsv2/forest/rooms/room199.cpp
@@ -92,10 +92,10 @@ static void room_199_init1() {
 		seq[3] = kernel_load_series("*rm199n14", 0); aa[9] = kernel_seq_stamp(seq[3], false, 1); kernel_seq_depth(aa[9], 5);
 	}
 	if (flags[32] >= 1) {
-		seq[4] = kernel_load_series("*rm199n15", 0); aainfo[0]._val1 = kernel_seq_stamp(seq[4], false, 1); kernel_seq_depth(aainfo[0]._val1, 5);
+		seq[4] = kernel_load_series("*rm199n15", 0); aainfo[0]._active = kernel_seq_stamp(seq[4], false, 1); kernel_seq_depth(aainfo[0]._active, 5);
 	}
 	if (flags[33] >= 1) {
-		seq[5] = kernel_load_series("*rm199n16", 0); aainfo[0]._val2 = kernel_seq_stamp(seq[5], false, 1); kernel_seq_depth(aainfo[0]._val2, 5);
+		seq[5] = kernel_load_series("*rm199n16", 0); aainfo[0]._frame = kernel_seq_stamp(seq[5], false, 1); kernel_seq_depth(aainfo[0]._frame, 5);
 	}
 }
 
@@ -106,50 +106,50 @@ static void room_199_init() {
 
 	aainfo[2]._val3 = -1;
 	aainfo[2]._val4 = 0;
-	aainfo[3]._val1 = 0;
-	aainfo[3]._val2 = -1;
+	aainfo[3]._active = 0;
+	aainfo[3]._frame = -1;
 
 	if (previous_room == 304 || previous_room == 402) {
 		if (global[g070] != 0) {
-			aainfo[2]._val2 = 1;
+			aainfo[2]._frame = 1;
 			ss[1] = kernel_load_series("*rm199z1", 0);
 			kernel_flip_hotspot(99, false);
 			kernel_flip_hotspot(174, false);
-			int16 slot = aainfo[2]._val2;
+			int16 slot = aainfo[2]._frame;
 			seq[6 + slot] = kernel_seq_stamp(ss[slot], false, 1);
 			kernel_seq_depth(seq[6 + slot], 1);
-			aainfo[2]._val1 = slot;
+			aainfo[2]._active = slot;
 			player.commands_allowed = 0;
 			kernel_timing_trigger(300, 111);
 			return;
 		}
 		room_199_init1();
-		aainfo[2]._val2 = 0;
+		aainfo[2]._frame = 0;
 		ss[0] = kernel_load_series("*rm199n1", 0);
 	} else if (previous_room == 503) {
-		aainfo[2]._val2 = 3;
+		aainfo[2]._frame = 3;
 		ss[3] = kernel_load_series("*rm199v1", 0);
 		kernel_flip_hotspot(99, false);
 		kernel_flip_hotspot(174, false);
-		int16 slot = aainfo[2]._val2;
+		int16 slot = aainfo[2]._frame;
 		seq[6 + slot] = kernel_seq_stamp(ss[slot], false, 1);
 		kernel_seq_depth(seq[6 + slot], 5);
-		aainfo[2]._val1 = slot;
+		aainfo[2]._active = slot;
 		player.commands_allowed = 0;
 		kernel_timing_trigger(2, 112);
 		return;
 	} else {
 		room_199_init1();
-		aainfo[2]._val2 = 0;
+		aainfo[2]._frame = 0;
 		ss[0] = kernel_load_series("*rm199n1", 0);
 	}
 
 	kernel_flip_hotspot(99, false);
 	kernel_flip_hotspot(174, false);
-	int16 slot = aainfo[2]._val2;
+	int16 slot = aainfo[2]._frame;
 	seq[6 + slot] = kernel_seq_stamp(ss[slot], false, 1);
 	kernel_seq_depth(seq[6 + slot], 1);
-	aainfo[2]._val1 = slot;
+	aainfo[2]._active = slot;
 }
 
 static int room_199_anim1() {
@@ -224,7 +224,7 @@ static void room_199_anim2() {
 	case 14:
 		aainfo[2]._val4 = 0;
 		aainfo[2]._val3 = -1;
-		aainfo[3]._val1 = 0;
+		aainfo[3]._active = 0;
 		kernel_timing_trigger(2, 113);
 		return;
 	default:
@@ -350,10 +350,10 @@ static void room_199_anim4() {
 	case 11:
 		if (player_has(7)) {
 			seq[4] = kernel_load_series("*ob007i", 0);
-			aainfo[0]._val1 = kernel_seq_stamp(seq[4], false, 1);
-			kernel_seq_depth(aainfo[0]._val1, 1);
-			kernel_seq_loc(aainfo[0]._val1, 270, 144);
-			kernel_seq_scale(aainfo[0]._val1, 85);
+			aainfo[0]._active = kernel_seq_stamp(seq[4], false, 1);
+			kernel_seq_depth(aainfo[0]._active, 1);
+			kernel_seq_loc(aainfo[0]._active, 270, 144);
+			kernel_seq_scale(aainfo[0]._active, 85);
 		}
 		kernel_timing_trigger(15, 115); return;
 	case 12:
@@ -370,8 +370,8 @@ static void room_199_daemon() {
 	int16 trig = kernel.trigger;
 
 	if (trig == 7) {
-		if (aainfo[3]._val2 == 11) {
-			aainfo[3]._val2 = -1;
+		if (aainfo[3]._frame == 11) {
+			aainfo[3]._frame = -1;
 			kernel_timing_trigger(30, 113);
 		}
 	} else if (trig == 111) {
@@ -390,10 +390,10 @@ static void room_199_daemon() {
 		global[g100] = result;
 		if (result) {
 			digi_play_build(521, 'e', 11, 1);
-			aainfo[3]._val2 = 11;
+			aainfo[3]._frame = 11;
 		} else {
 			aainfo[2]._val3 = 1;
-			aainfo[3]._val1 = -1;
+			aainfo[3]._active = -1;
 			digi_play_build(521, 'e', 12, 1);
 			room_199_anim2();
 		}
@@ -403,7 +403,7 @@ static void room_199_daemon() {
 
 	if (aainfo[2]._val4 != 0)
 		room_199_anim4();
-	if (aainfo[3]._val1 != 0)
+	if (aainfo[3]._active != 0)
 		room_199_anim2();
 }
 
@@ -413,10 +413,10 @@ static void room_199_pre_parser() {
 
 static void room_199_parser2() {
 	if (flags[33] >= 1) {
-		kernel_seq_delete(aainfo[0]._val2); matte_deallocate_series(seq[5], -1);
+		kernel_seq_delete(aainfo[0]._frame); matte_deallocate_series(seq[5], -1);
 	}
 	if (flags[32] >= 1) {
-		kernel_seq_delete(aainfo[0]._val1); matte_deallocate_series(seq[4], -1);
+		kernel_seq_delete(aainfo[0]._active); matte_deallocate_series(seq[4], -1);
 	}
 	if (flags[30] >= 1) {
 		kernel_seq_delete(aa[9]);            matte_deallocate_series(seq[3], -1);
@@ -460,19 +460,19 @@ static void room_199_parser2() {
 }
 
 static void room_199_parser1() {
-	if (aainfo[2]._val1 == 2)
+	if (aainfo[2]._active == 2)
 		kernel_flip_hotspot(99, 0);
-	if (aainfo[2]._val1 == 3)
+	if (aainfo[2]._active == 3)
 		kernel_flip_hotspot(174, 0);
 
-	int16 old_slot = aainfo[2]._val1;
+	int16 old_slot = aainfo[2]._active;
 	kernel_seq_delete(seq[6 + old_slot]);
 	matte_deallocate_series(ss[old_slot], -1);
 
-	if (aainfo[2]._val1 == 0)
+	if (aainfo[2]._active == 0)
 		room_199_parser2();
 
-	int16 new_slot = aainfo[2]._val2;
+	int16 new_slot = aainfo[2]._frame;
 	switch (new_slot) {
 	case 0:
 		room_199_init1();
@@ -493,7 +493,7 @@ static void room_199_parser1() {
 
 	seq[6 + new_slot] = kernel_seq_stamp(ss[new_slot], false, 1);
 	kernel_seq_depth(seq[6 + new_slot], 1);
-	aainfo[2]._val1 = aainfo[2]._val2;
+	aainfo[2]._active = aainfo[2]._frame;
 	digi_play_build_ii('_', 1, 2);
 }
 
@@ -528,21 +528,21 @@ static void room_199_parser() {
 	}
 
 	if (player_parse(156, 0)) {
-		if (aainfo[2]._val1 != 3) {
-			aainfo[2]._val1 = aainfo[2]._val2;
-			aainfo[2]._val2++;
+		if (aainfo[2]._active != 3) {
+			aainfo[2]._active = aainfo[2]._frame;
+			aainfo[2]._frame++;
 		}
-		if (aainfo[2]._val2 != aainfo[2]._val1)
+		if (aainfo[2]._frame != aainfo[2]._active)
 			room_199_parser1();
 		goto handled;
 	}
 
 	if (player_parse(90, 0)) {
-		if (aainfo[2]._val1 != 0) {
-			aainfo[2]._val1 = aainfo[2]._val2;
-			aainfo[2]._val2--;
+		if (aainfo[2]._active != 0) {
+			aainfo[2]._active = aainfo[2]._frame;
+			aainfo[2]._frame--;
 		}
-		if (aainfo[2]._val2 != aainfo[2]._val1)
+		if (aainfo[2]._frame != aainfo[2]._active)
 			room_199_parser1();
 		goto handled;
 	}
diff --git a/engines/mads/madsv2/forest/rooms/room201.cpp b/engines/mads/madsv2/forest/rooms/room201.cpp
index c34633d1139..d4344262ba8 100644
--- a/engines/mads/madsv2/forest/rooms/room201.cpp
+++ b/engines/mads/madsv2/forest/rooms/room201.cpp
@@ -119,12 +119,12 @@ static void room_201_init1() {
 		return;
 	case 106:
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 65;
 		return;
 	case 203:
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 75;
 		return;
 	case 199:
@@ -152,19 +152,19 @@ static void room_201_init1() {
 }
 
 static void room_201_anim1() {
-	if (kernel_anim[aa[0]].frame != aainfo[0]._val2)
-		aainfo[0]._val2 = kernel_anim[aa[0]].frame;
+	if (kernel_anim[aa[0]].frame != aainfo[0]._frame)
+		aainfo[0]._frame = kernel_anim[aa[0]].frame;
 
 	if (global[player_hyperwalked] != -1)
 		return;
 
-	aainfo[0]._val2 = scratch._92 - 1;
+	aainfo[0]._frame = scratch._92 - 1;
 	kernel_reset_animation(aa[0], scratch._92 - 1);
 }
 
 static void room_201_anim2() {
-	if (kernel_anim[aa[0]].frame != aainfo[0]._val2)
-		aainfo[0]._val2 = kernel_anim[aa[0]].frame;
+	if (kernel_anim[aa[0]].frame != aainfo[0]._frame)
+		aainfo[0]._frame = kernel_anim[aa[0]].frame;
 
 	if (scratch._a4 != 0)
 		kernel_random_frame(scratch._a2, &global[g153], global[g156]);
@@ -186,7 +186,7 @@ static void room_201_anim2() {
 		scratch._a4 = -1;
 		player.commands_allowed = -1;
 		player.walker_visible = -1;
-		aainfo[1]._val1 = 0;
+		aainfo[1]._active = 0;
 		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 		global[g131] = -1;
 		kernel_reset_animation(scratch._9a, 1);
@@ -201,32 +201,32 @@ static void room_201_anim2() {
 }
 
 static void room_201_anim3() {
-	if (kernel_anim[aa[3]].frame != aainfo[3]._val2)
-		aainfo[3]._val2 = kernel_anim[aa[3]].frame;
+	if (kernel_anim[aa[3]].frame != aainfo[3]._frame)
+		aainfo[3]._frame = kernel_anim[aa[3]].frame;
 
-	if (global[player_hyperwalked] == -1 && aainfo[3]._val2 <= 23) {
-		aainfo[3]._val2 = 23;
+	if (global[player_hyperwalked] == -1 && aainfo[3]._frame <= 23) {
+		aainfo[3]._frame = 23;
 		kernel_reset_animation(aa[3], 23);
 		kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
 		return;
 	}
 
-	if (global[player_hyperwalked] == -1 || aainfo[3]._val2 == 45) {
-		aainfo[3]._val2 = 44;
+	if (global[player_hyperwalked] == -1 || aainfo[3]._frame == 45) {
+		aainfo[3]._frame = 44;
 		kernel_reset_animation(aa[3], 44);
 		kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
 	}
 }
 
 static void room_201_anim4() {
-	if (kernel_anim[aa[4]].frame != aainfo[4]._val2) {
-		aainfo[4]._val2 = kernel_anim[aa[4]].frame;
-		int16 frame = aainfo[4]._val2;
+	if (kernel_anim[aa[4]].frame != aainfo[4]._frame) {
+		aainfo[4]._frame = kernel_anim[aa[4]].frame;
+		int16 frame = aainfo[4]._frame;
 
 		if (scratch._a8 == 1) {
 			if (frame == 10) {
 				if (aainfo[4]._val3 == 10) {
-					aainfo[4]._val2 = 9;
+					aainfo[4]._frame = 9;
 					kernel_reset_animation(aa[4], 9);
 				}
 			} else if (frame <= 10) {
@@ -236,7 +236,7 @@ static void room_201_anim4() {
 					scratch._a4 = 28;
 				} else if (frame == 8) {
 					if (aainfo[4]._val3 == 9) {
-						aainfo[4]._val2 = 4;
+						aainfo[4]._frame = 4;
 						kernel_reset_animation(aa[4], 4);
 					}
 				}
@@ -244,7 +244,7 @@ static void room_201_anim4() {
 		} else if (scratch._a8 == 2) {
 			if (frame == 13) {
 				if (aainfo[4]._val3 == 10) {
-					aainfo[4]._val2 = 11;
+					aainfo[4]._frame = 11;
 					kernel_reset_animation(aa[4], 11);
 				}
 			} else if (frame <= 13) {
@@ -254,7 +254,7 @@ static void room_201_anim4() {
 					scratch._a4 = 450;
 				} else if (frame == 10) {
 					if (aainfo[4]._val3 == 9) {
-						aainfo[4]._val2 = 5;
+						aainfo[4]._frame = 5;
 						kernel_reset_animation(aa[4], 5);
 					}
 				}
@@ -273,14 +273,14 @@ static void room_201_anim4() {
 		return;
 	case 29:
 		aainfo[4]._val3 = 9;
-		aainfo[4]._val2 = 4;
+		aainfo[4]._frame = 4;
 		kernel_reset_animation(aa[4], 4);
 		digi_play_build_ii('e', 10, 1);
 		scratch._a4 = 30;
 		return;
 	case 30:
 		aainfo[4]._val3 = 11;
-		aainfo[4]._val2 = 9;
+		aainfo[4]._frame = 9;
 		kernel_reset_animation(aa[4], 9);
 		scratch._a4 = -1;
 		return;
@@ -291,14 +291,14 @@ static void room_201_anim4() {
 		return;
 	case 451:
 		aainfo[4]._val3 = 9;
-		aainfo[4]._val2 = 5;
+		aainfo[4]._frame = 5;
 		kernel_reset_animation(aa[4], 5);
 		digi_play_build_ii('e', 10, 1);
 		scratch._a4 = 452;
 		return;
 	case 452:
 		aainfo[4]._val3 = 11;
-		aainfo[4]._val2 = 10;
+		aainfo[4]._frame = 10;
 		kernel_reset_animation(aa[4], 10);
 		scratch._a4 = -1;
 		return;
@@ -351,8 +351,8 @@ static void room_201_init() {
 	scratch._ac = 0;
 	scratch._b0 = 0;
 	for (int i = 0; i < 10; i++) {
-		aainfo[i]._val1 = 0;
-		aainfo[i]._val2 = 1;
+		aainfo[i]._active = 0;
+		aainfo[i]._frame = 1;
 		aainfo[i]._val3 = 0;
 		aainfo[i]._val4 = 0;
 	}
@@ -408,7 +408,7 @@ static void room_201_daemon() {
 	} else if (trigger > 26) {
 		if (trigger == 100) {
 			kernel_abort_animation(aa[0]);
-			aainfo[0]._val1 = 0;
+			aainfo[0]._active = 0;
 			if (flags[7] == 1) {
 				kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 				global[g141] = -1;
@@ -421,7 +421,7 @@ static void room_201_daemon() {
 				global[g156] = 2;
 				global[g131] = -1;
 				player.walker_visible = -1;
-				aainfo[1]._val1 = -1;
+				aainfo[1]._active = -1;
 				global[g133] = 1;
 				scratch._a2 = kernel_run_animation_talk('e', 1, 0);
 				kernel_position_anim(scratch._a2, 186, 115, 76, 7);
@@ -444,14 +444,14 @@ static void room_201_daemon() {
 			}
 		} else if (trigger == 101) {
 			kernel_abort_animation(aa[scratch._94]);
-			aainfo[scratch._94]._val1 = 0;
+			aainfo[scratch._94]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
 			player.commands_allowed = -1;
 		} else if (trigger == 102) {
 			kernel_abort_animation(aa[scratch._96]);
-			aainfo[scratch._96]._val1 = 0;
+			aainfo[scratch._96]._active = 0;
 			kernel_reset_animation(scratch._9a, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
@@ -525,14 +525,14 @@ static void room_201_daemon() {
 		if (scratch._8c == 5) {
 			if (scratch._a8 == 1) {
 				aa[4] = kernel_run_animation(kernel_name('F', 1), 102);
-				aainfo[4]._val1 = -1;
+				aainfo[4]._active = -1;
 				scratch._96 = 4;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_synch(KERNEL_ANIM, aa[4], KERNEL_ANIM, scratch._9a);
 				global[g133] = 1;
 			} else if (scratch._a8 == 2) {
 				aa[4] = kernel_run_animation(kernel_name('F', 2), 102);
-				aainfo[4]._val1 = -1;
+				aainfo[4]._active = -1;
 				scratch._96 = 4;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_synch(KERNEL_ANIM, aa[4], KERNEL_ANIM, scratch._9a);
@@ -542,7 +542,7 @@ static void room_201_daemon() {
 	} else if (trigger == 25) {
 		if (scratch._8e == 2) {
 			aa[3] = kernel_run_animation(kernel_name('R', 1), 101);
-			aainfo[3]._val1 = -1;
+			aainfo[3]._active = -1;
 			scratch._94 = 3;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, scratch._9c);
@@ -560,10 +560,10 @@ static void room_201_daemon() {
 	global_anim1(1, scratch._9a, global[g131], &global[g132]);
 	global_anim2(1, scratch._9c, global[g141], &global[g142]);
 
-	if (aainfo[0]._val1 != 0) room_201_anim1();
-	if (aainfo[3]._val1 != 0) room_201_anim3();
-	if (aainfo[4]._val1 != 0) room_201_anim4();
-	if (aainfo[1]._val1 != 0) room_201_anim2();
+	if (aainfo[0]._active != 0) room_201_anim1();
+	if (aainfo[3]._active != 0) room_201_anim3();
+	if (aainfo[4]._active != 0) room_201_anim4();
+	if (aainfo[1]._active != 0) room_201_anim2();
 	if (scratch._ac != 0) room_201_anim5();
 	if (scratch._b0 != 0) room_201_anim6();
 }
@@ -579,8 +579,7 @@ static void room_201_parser() {
 	if (global[walker_converse_state] != 0) {
 		player.commands_allowed = 0;
 		digi_play_build_ii('c', 1, 1);
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(93, 0)) {
@@ -593,8 +592,7 @@ static void room_201_parser() {
 		digi_play_build_ii('b', 3, 1);
 		scratch._a4 = 40;
 		scratch._a6 = -1;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(145, 0)) {
@@ -607,8 +605,7 @@ static void room_201_parser() {
 		digi_play_build_ii('b', 3, 1);
 		scratch._a4 = 41;
 		scratch._a6 = -1;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(114, 77, 0)) {
@@ -616,8 +613,7 @@ static void room_201_parser() {
 		global[g135] = -1;
 		scratch._8c = 5;
 		scratch._a8 = 1;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(114, 103, 0)) {
@@ -630,33 +626,35 @@ static void room_201_parser() {
 	}
 
 	if (global[player_selected_object] >= 0) {
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(114, 116, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(99, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 119, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
+
+	goto done;
+handled:
+	player.command_ready = false;
+done:
+	;
 }
 
 void room_201_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/madsv2/forest/rooms/room203.cpp b/engines/mads/madsv2/forest/rooms/room203.cpp
index e9a0d88dedf..ae9209a5a7e 100644
--- a/engines/mads/madsv2/forest/rooms/room203.cpp
+++ b/engines/mads/madsv2/forest/rooms/room203.cpp
@@ -21,8 +21,10 @@
 
 #include "mads/madsv2/core/digi.h"
 #include "mads/madsv2/core/game.h"
+#include "mads/madsv2/core/imath.h"
 #include "mads/madsv2/core/inter.h"
 #include "mads/madsv2/core/kernel.h"
+#include "mads/madsv2/core/midi.h"
 #include "mads/madsv2/core/object.h"
 #include "mads/madsv2/core/player.h"
 #include "mads/madsv2/forest/extra.h"
@@ -56,7 +58,7 @@ struct Scratch {
 	int16 _a4;                       /* 0xA4 */
 	int16 _a6;                       /* 0xA6 */
 	int16 _a8;                       /* 0xA8 */
-	int16 _paa;                      /* 0xAA */
+	int16 _aa;                      /* 0xAA */
 	int16 _ac;                       /* 0xAC */
 	int16 _ae;                       /* 0xAE */
 	int16 _b0;                       /* 0xB0 */
@@ -102,25 +104,25 @@ static void room_203_init1() {
 
 	if (previous_room == 201) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 101);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._9a = 11;
 		scratch._92 = 60;
 		if (flags[8] == 1) {
 			aa[4] = kernel_run_animation(kernel_name('w', 1), 105);
-			aainfo[4]._val1 = -1;
-			aainfo[4]._val2 = 0;
+			aainfo[4]._active = -1;
+			aainfo[4]._frame = 0;
 			scratch._9c = 60;
 		}
 		return;
 	} else if (previous_room == 204) {
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 101);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._9a = 11;
 		scratch._92 = 99;
 		return;
 	} else if (previous_room == 210) {
 		aa[0] = kernel_run_animation(kernel_name('y', 3), 101);
-		aainfo[0]._val1 = -1;
+		aainfo[0]._active = -1;
 		scratch._9a = 11;
 		scratch._92 = 74;
 		global_digi_play(11);
@@ -144,8 +146,8 @@ static void room_203_init1() {
 		global_digi_play(15);
 		scratch._a6 = 2;
 		aa[4] = kernel_run_animation(kernel_name('w', 4), 105);
-		aainfo[4]._val1 = -1;
-		aainfo[4]._val2 = 0;
+		aainfo[4]._active = -1;
+		aainfo[4]._frame = 0;
 		scratch._9c = 63;
 		player.walker_visible = -1;
 		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
@@ -157,8 +159,8 @@ static void room_203_init1() {
 		if (global[g049] != 0) {
 			aa[3] = kernel_run_animation(kernel_name('a', 1), 104);
 			scratch._98 = 30;
-			aainfo[3]._val1 = -1;
-			aainfo[3]._val2 = 25;
+			aainfo[3]._active = -1;
+			aainfo[3]._frame = 25;
 			kernel_reset_animation(aa[3], 25);
 			global[g049] = -1;
 			player.walker_visible = 0;
@@ -218,8 +220,8 @@ static void room_203_init() {
 		}
 
 		for (int i = 0; i < 10; i++) {
-			aainfo[i]._val1 = 0;
-			aainfo[i]._val2 = 1;
+			aainfo[i]._active = 0;
+			aainfo[i]._frame = 1;
 			aainfo[i]._val3 = 0;
 			aainfo[i]._val4 = 0;
 		}
@@ -231,81 +233,844 @@ static void room_203_init() {
 	room_203_init1();
 }
 
+static void room_203_anim5();
+
+static void room_203_anim1() {
+	int result = -1;
+	int frame;
+
+	if (global[player_hyperwalked])
+		local->_b0 = true;
+
+	if (kernel_anim[aa[0]].frame == aainfo[0]._frame)
+		return;
+	aainfo[0]._frame = kernel_anim[aa[0]].frame;
+
+	switch (local->_9a) {
+	case 11:
+		if (local->_9c == 60) {
+			frame = aainfo[0]._frame;
+			if (frame == 50) {
+				aainfo[4]._frame = 22;
+				kernel_reset_animation(aa[4], 22);
+			} else if (frame < 50) {
+				if (frame == 22) {
+					if (local->_a6 != 1) {
+						global_digi_play(10);
+						local->_a6 = 1;
+					}
+					aainfo[4]._frame = 3;
+					kernel_reset_animation(aa[4], 3);
+				} else if (frame == 33) {
+					aainfo[4]._frame = 8;
+					kernel_reset_animation(aa[4], 8);
+				}
+			}
+		}
+
+		if (aainfo[0]._frame == 1) {
+			if (global[g046] == 0 && flags[8] > 1 && local->_a6 != 1) {
+				global_digi_play(10);
+				local->_a6 = 1;
+			}
+		}
+
+		if (local->_b0) {
+			result = local->_92 - 1;
+			if (local->_9c == 60) {
+				aainfo[4]._frame = 22;
+				kernel_abort_animation(aa[4]);
+				aainfo[4]._active = 0;
+			}
+			local->_b0 = 0;
+		}
+		break;
+
+	case 12:
+		switch (aainfo[0]._frame) {
+		case 4:
+			digi_play_build(203, 'E', 1, 1);
+			local->_a4 = 11;
+			break;
+		case 8:
+			result = 4;
+			break;
+		case 11:
+			result = 9;
+			break;
+		case 12:
+			digi_play_build(203, 'R', 1, 1);
+			local->_a4 = 21;
+			break;
+		case 16:
+			result = 12;
+			break;
+		case 19:
+			result = 17;
+			break;
+		case 20:
+			digi_play_build(203, 'B', 1, 1);
+			local->_a4 = 31;
+			break;
+		case 24:
+			result = 20;
+			break;
+		case 27:
+			result = 25;
+			break;
+		case 28:
+			digi_play_build(203, 'E', 2, 1);
+			local->_a4 = 12;
+			break;
+		case 32:
+			result = 28;
+			break;
+		case 35:
+			result = 33;
+			break;
+		case 36:
+			digi_play_build(203, 'R', 2, 1);
+			local->_a4 = 22;
+			aainfo[4]._frame = 13;
+			kernel_reset_animation(aa[4], 13);
+			break;
+		case 40:
+			result = 36;
+			break;
+		case 42:
+			if (aainfo[4]._frame > 20)
+				result = 44;
+			break;
+		case 43:
+			result = 41;
+			break;
+		case 50:
+			if (aainfo[4]._frame < 27) {
+				result = 49;
+			} else {
+				dont_frag_the_palette();
+				kernel_abort_animation(aa[4]);
+				aainfo[4]._active = 0;
+				dont_frag_the_palette();
+				kernel_abort_animation(aa[0]);
+				aainfo[0]._active = 0;
+				aa[0] = kernel_run_animation(kernel_name('x', 3), 101);
+				aainfo[0]._active = -1;
+				aainfo[0]._frame = 0;
+				local->_9a = 13;
+				aa[4] = kernel_run_animation(kernel_name('w', 4), 105);
+				aainfo[4]._active = -1;
+				aainfo[4]._frame = 0;
+				local->_9c = 63;
+			}
+			break;
+		default:
+			break;
+		}
+		break;
+
+	case 13: {
+		frame = aainfo[0]._frame;
+		if (frame == 29) {
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[4]);
+			aainfo[4]._active = 0;
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[0]);
+			aainfo[0]._active = 0;
+			room_203_anim5();
+		} else if (frame < 29) {
+			if (frame == 22) {
+				result = 20;
+			} else if (frame < 22) {
+				if (frame == 1) {
+					digi_play_build(203, 'B', 2, 1);
+					local->_a4 = 32;
+				} else if (frame == 5) {
+					result = 1;
+				} else if (frame == 20) {
+					local->_a4 = 23;
+					if (flags[8] == 1) {
+						digi_play_build(203, 'R', 3, 1);
+					} else {
+						digi_play("NULL", 1);
+						result = 23;
+					}
+				}
+			} else {
+				if (frame == 24) {
+					result = 23;
+				} else if (frame == 25) {
+					local->_a4 = 13;
+					if (flags[8] == 1) {
+						digi_play_build(203, 'E', 3, 1);
+					} else {
+						digi_play("NULL", 1);
+						result = 23;
+					}
+				} else if (frame == 27) {
+					result = 25;
+				}
+			}
+		}
+		break;
+
+	case 15:
+		if (aainfo[0]._frame == 1) {
+			digi_play_build(203, '_', 500, 2);
+		}
+		break;
+
+	case 16:
+		switch (aainfo[0]._frame) {
+		case 6:
+			digi_play_build(203, 'E', 6, 1);
+			local->_a4 = 16;
+			break;
+		case 11:
+			result = 6;
+			break;
+		case 51:
+			digi_play_build(203, 'E', 7, 1);
+			local->_a4 = 17;
+			break;
+		case 56:
+			result = 51;
+			break;
+		default:
+			break;
+		}
+		break;
+	}
+
+	default:
+		break;
+	}
+
+	if (result >= 0 && aainfo[0]._active) {
+		aainfo[0]._frame = result;
+		kernel_reset_animation(aa[0], result);
+	}
+}
+
+static void room_203_anim2() {
+	int result = -1;
+
+	if (kernel_anim[aa[1]].frame != aainfo[1]._frame) {
+		aainfo[1]._frame = kernel_anim[aa[1]].frame;
+
+		switch (local->_96) {
+		case 52:
+		case 57:
+			if (aainfo[1]._frame == 4) {
+				if (local->_96 == 52) {
+					digi_play_build(203, 'e', 4, 1);
+					local->_a4 = 14;
+				} else {
+					digi_play_build(203, 'e', 5, 1);
+					local->_a4 = 15;
+				}
+			} else if (aainfo[1]._frame == 10) {
+				result = 4;
+			}
+			break;
+
+		case 53:
+			if (aainfo[1]._frame == 5)
+				digi_play_build(203, '_', 2, 2);
+			break;
+
+		case 54:
+		case 55:
+			switch (aainfo[1]._frame) {
+			case 1:
+				aainfo[1]._val4++;
+				if (aainfo[1]._val4 > 8)
+					aainfo[1]._val4 = 0;
+				else
+					result = 0;
+				break;
+			case 2:
+			case 9:
+			case 20:
+			case 29:
+				digi_play_build(203, '_', 2, 2);
+				break;
+			case 6:
+			case 24:
+				digi_play_build(203, '_', 3, 2);
+				break;
+			case 8:
+			case 26:
+				digi_play_build(203, '_', 800, 1);
+				local->_a4 = 54;
+				break;
+			case 16:
+				if (local->_ac)
+					result = 35;
+				break;
+			case 18:
+				aainfo[1]._val4++;
+				if (aainfo[1]._val4 > 4)
+					aainfo[1]._val4 = 0;
+				else
+					result = 17;
+				break;
+			case 33:
+				aainfo[1]._val4++;
+				if (aainfo[1]._val4 > 4)
+					aainfo[1]._val4 = 0;
+				else
+					result = 32;
+				break;
+			case 34:
+				local->_a8++;
+				if (local->_a8 <= 2) {
+					result = 1;
+				} else {
+					dont_frag_the_palette();
+					kernel_abort_animation(aa[1]);
+					aainfo[1]._active = 0;
+					dont_frag_the_palette();
+					kernel_abort_animation(aa[4]);
+					aainfo[4]._active = 0;
+					aa[5] = kernel_run_animation(kernel_name('h', 1), 0);
+					aainfo[5]._active = -1;
+					aainfo[5]._frame = 0;
+					aa[4] = kernel_run_animation(kernel_name('w', 5), 105);
+					aainfo[4]._active = -1;
+					aainfo[4]._frame = 0;
+					local->_9c = 64;
+				}
+				break;
+			case 39:
+				dont_frag_the_palette();
+				kernel_abort_animation(aa[1]);
+				aainfo[1]._active = 0;
+				aainfo[5]._frame = 1;
+				kernel_reset_animation(aa[5], 1);
+				kernel_synch(KERNEL_ANIM, aa[5], KERNEL_NOW, 0);
+				aainfo[4]._frame = 1;
+				kernel_reset_animation(aa[4], 1);
+				kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
+				aa[2] = kernel_run_animation(kernel_name('R', 3), 102);
+				aainfo[2]._active = -1;
+				aainfo[2]._frame = 0;
+				local->_94 = 41;
+				local->_a8 = 0;
+				kernel_reset_animation(local->_a0, 0);
+				kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, local->_a0);
+				global[g143] = 1;
+				break;
+			default:
+				break;
+			}
+			break;
+
+		case 56:
+			if (aainfo[1]._frame == 10 && local->_ac) {
+				aainfo[3]._frame = 1;
+				kernel_reset_animation(aa[3], 1);
+			}
+			break;
+
+		default:
+			break;
+		}
+
+		if (result >= 0 && aainfo[1]._active) {
+			aainfo[1]._frame = result;
+			kernel_reset_animation(aa[1], result);
+		}
+	}
+
+	if (global[player_hyperwalked] && local->_96 == 50) {
+		aainfo[1]._frame = 59;
+		kernel_reset_animation(aa[1], 59);
+		kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
+	}
+}
+
+static void room_203_anim3() {
+	int result = -1;
+	int16 frame;
+
+	if (kernel_anim[aa[2]].frame == aainfo[2]._frame)
+		return;
+	aainfo[2]._frame = kernel_anim[aa[2]].frame;
+
+	switch (local->_94) {
+	case 41:
+		frame = aainfo[2]._frame;
+		if (frame == 8) {
+			aainfo[4]._frame = 11;
+			kernel_reset_animation(aa[4], 11);
+			digi_play_build(203, '_', 1, 2);
+			local->_a8++;
+		} else if (frame == 12) {
+			if (local->_ac) {
+				dont_frag_the_palette();
+				kernel_abort_animation(aa[2]);
+				aainfo[2]._active = 0;
+				kernel_reset_animation(local->_a0, 1);
+				kernel_synch(KERNEL_ANIM, local->_a0, KERNEL_NOW, 0);
+				global[g143] = 0;
+				aainfo[3]._frame = 18;
+				kernel_reset_animation(aa[3], 18);
+			} else if (local->_a8 < 5) {
+				if (imath_random(1, 100) > 80)
+					result = 1;
+				else
+					result = 11;
+			}
+		}
+		break;
+
+	case 42:
+		frame = aainfo[2]._frame;
+		if (frame == 4) {
+			digi_play_build(203, 'R', 6, 1);
+			local->_a4 = 26;
+		} else if (frame == 9) {
+			result = 4;
+		}
+		break;
+
+	case 43:
+		frame = aainfo[2]._frame;
+		if (frame == 20) {
+			result = 13;
+		} else if (frame < 20) {
+			if (frame == 1) {
+				digi_play_build(203, 'R', 4, 1);
+				local->_a4 = 24;
+			} else if (frame == 4) {
+				result = 1;
+			} else if (frame == 10) {
+				result = 6;
+			} else if (frame == 13) {
+				digi_play_build(203, 'R', 5, 1);
+				local->_a4 = 25;
+			}
+		}
+		break;
+
+	default:
+		break;
+	}
+
+	if (result >= 0 && aainfo[2]._active) {
+		aainfo[2]._frame = result;
+		kernel_reset_animation(aa[2], result);
+	}
+}
+
+static void room_203_flip_hotspots1() {
+	kernel_flip_hotspot(65, true);
+	kernel_flip_hotspot(66, true);
+	kernel_flip_hotspot(168, false);
+	kernel_flip_hotspot(170, false);
+	kernel_flip_hotspot(169, false);
+	kernel_flip_hotspot(119, false);
+	kernel_flip_hotspot(27, false);
+	kernel_flip_hotspot(21, false);
+	kernel_flip_hotspot(24, false);
+}
+
+static void room_203_flip_hotspots2() {
+	kernel_flip_hotspot(65, 0);
+	kernel_flip_hotspot(66, 0);
+	kernel_flip_hotspot(119, global[g047] < 1 ? 1 : 0);
+	kernel_flip_hotspot(27, global[g047]);
+	kernel_flip_hotspot(21, -1);
+	kernel_flip_hotspot(24, -1);
+}
+
+static void room_203_anim4() {
+	int result = -1;
+	int frame;
+
+	if (kernel_anim[aa[3]].frame == aainfo[3]._frame)
+		return;
+	aainfo[3]._frame = kernel_anim[aa[3]].frame;
+
+	switch (local->_98) {
+	case 30:
+		frame = aainfo[3]._frame;
+		if (frame == 42) {
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[3]);
+			aainfo[3]._active = 0;
+			room_203_flip_hotspots2();
+			kernel_flip_hotspot(168, -1);
+			kernel_flip_hotspot(170, -1);
+			kernel_flip_hotspot(169, -1);
+			player.walker_visible = -1;
+			kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
+			player.commands_allowed = -1;
+			if (local->_ae) {
+				global[g145] = -1;
+				local->_8e = 41;
+				player.commands_allowed = 0;
+				local->_a8 = 0;
+				local->_ae = 0;
+			}
+		} else if (frame < 42) {
+			if (frame == 29) {
+				digi_play_build(203, 'b', 4, 1);
+				local->_a4 = 34;
+				local->_ac = 0;
+			} else if (frame < 29) {
+				if (frame == 1) {
+					digi_play_build(203, 'b', 3, 1);
+					local->_a4 = 33;
+				} else if (frame == 3) {
+					result = 1;
+				} else if (frame == 26) {
+					room_203_flip_hotspots1();
+					player.commands_allowed = -1;
+				} else if (frame == 28) {
+					result = 27;
+				}
+			} else {
+				if (frame == 33) {
+					result = 29;
+				} else if (frame == 34) {
+					digi_play_build(203, 'b', 5, 1);
+					local->_a4 = 35;
+					local->_ac = -1;
+				} else if (frame == 38) {
+					result = 34;
+				} else if (frame == 40) {
+					dont_frag_the_palette();
+					kernel_abort_animation(aa[3]);
+					aainfo[3]._active = 0;
+					if (local->_ac) {
+						aa[5] = kernel_run_animation(kernel_name('h', 1), 0);
+						aainfo[5]._active = -1;
+						aainfo[5]._frame = 4;
+						kernel_reset_animation(aa[5], 4);
+					}
+					aa[3] = kernel_run_animation(kernel_name('a', 2), 104);
+					aainfo[3]._active = -1;
+					aainfo[3]._frame = 0;
+					local->_98 = 31;
+					player.commands_allowed = 0;
+					room_203_flip_hotspots2();
+				}
+			}
+		}
+		break;
+
+	case 31:
+		frame = aainfo[3]._frame;
+		if (frame == 19) {
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[3]);
+			aainfo[3]._active = 0;
+			aa[3] = kernel_run_animation(kernel_name('a', 3), 104);
+			local->_98 = 32;
+			aainfo[3]._active = -1;
+			aainfo[3]._frame = 0;
+			local->_a8 = 0;
+		} else if (frame < 19) {
+			if (frame == 8) {
+				digi_play_build(101, '_', 1, 2);
+			} else if (frame == 16) {
+				if (local->_ac) {
+					global[g150] = -1;
+					local->_90 = 55;
+				}
+			} else if (frame == 17) {
+				if (local->_ac)
+					result = 16;
+			}
+		}
+		break;
+
+	case 32:
+		frame = aainfo[3]._frame;
+		if (frame == 40) {
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[3]);
+			aainfo[3]._active = 0;
+			if (local->_ac) {
+				dont_frag_the_palette();
+				kernel_abort_animation(aa[5]);
+				aainfo[5]._active = 0;
+			}
+			dont_frag_the_palette();
+			kernel_abort_animation(aa[4]);
+			aainfo[4]._active = 0;
+			aa[3] = kernel_run_animation(kernel_name('a', 4), 104);
+			local->_98 = 33;
+			aainfo[3]._active = -1;
+			aainfo[3]._frame = 0;
+			if (local->_ac) {
+				aa[5] = kernel_run_animation(kernel_name('h', 1), 0);
+				aainfo[5]._active = -1;
+				aainfo[5]._frame = 1;
+				kernel_reset_animation(aa[5], 1);
+			}
+			aa[4] = kernel_run_animation(kernel_name('w', 5), 105);
+			local->_9c = 64;
+			aainfo[4]._active = -1;
+			aainfo[4]._frame = 0;
+		} else if (frame < 40) {
+			if (frame == 13 || frame == 21 || frame == 29) {
+				aainfo[4]._frame = 1;
+				kernel_reset_animation(aa[4], 1);
+				kernel_synch(KERNEL_ANIM, aa[4], KERNEL_ANIM, aa[3]);
+			} else if (frame < 13) {
+				if (frame == 5) {
+					digi_play_build(203, '_', 4, 2);
+				} else if (frame == 11) {
+					aainfo[4]._frame = 17;
+					kernel_reset_animation(aa[4], 17);
+					kernel_synch(KERNEL_ANIM, aa[4], KERNEL_ANIM, aa[3]);
+					if (imath_random(0, 100) > 65)
+						local->_aa = 0;
+					else
+						local->_aa = -1;
+				} else if (frame == 12) {
+					local->_a8++;
+					digi_play_build(203, '_', 5, 2);
+				}
+			} else {
+				if (frame == 18) {
+					if (local->_a8 > 3 || local->_ac)
+						result = 34;
+				} else if (frame == 34) {
+					result = 9;
+				}
+			}
+		}
+		break;
+
+	case 33:
+		frame = aainfo[3]._frame;
+		if (frame == 63) {
+			result = 60;
+		} else if (frame < 63) {
+			if (frame == 34) {
+				digi_play_build(101, '_', 1, 2);
+				display_interface();
+			} else if (frame < 34) {
+				if (frame == 1) {
+					result = 0;
+				} else if (frame == 4) {
+					digi_play_build(203, '_', 4, 2);
+				}
+			} else {
+				if (frame == 57) {
+					if (local->_ac) {
+						digi_play_build(203, 'b', 9, 1);
+						local->_a4 = 39;
+					} else {
+						digi_play_build(203, 'b', 6, 1);
+						local->_a4 = 36;
+					}
+				} else if (frame == 59) {
+					result = 57;
+				}
+			}
+		}
+		break;
+
+	default:
+		break;
+	}
+
+	if (result >= 0 && aainfo[3]._active) {
+		aainfo[3]._frame = result;
+		kernel_reset_animation(aa[3], result);
+	}
+}
+
+static void room_203_anim5() {
+	int result = -1;
+
+	if (kernel_anim[aa[4]].frame == aainfo[4]._frame)
+		return;
+	aainfo[4]._frame = kernel_anim[aa[4]].frame;
+
+	switch (local->_9c) {
+	case 60: {
+		int16 frame = aainfo[4]._frame;
+		if (frame == 22) {
+			result = 18;
+		} else if (frame < 22) {
+			if (frame == 2)
+				result = 1;
+			else if (frame == 7)
+				result = 5;
+		}
+		break;
+	}
+	case 61:
+		if (aainfo[4]._frame == 13)
+			result = 11;
+		break;
+	case 62: {
+		int16 frame = aainfo[4]._frame;
+		if (frame == 29) {
+			result = 27;
+		} else if (frame < 29) {
+			if (frame == 1) {
+				global_digi_play(12);
+				local->_a6 = 4;
+			} else if (frame == 19) {
+				digi_play_build(103, '_', 3, 2);
+				if (local->_a6 != 2) {
+					global_digi_play(15);
+					local->_a6 = 2;
+				}
+			} else if (frame == 22) {
+				digi_play_build(203, '_', 500, 2);
+			}
+		}
+		break;
+	}
+	case 63: {
+		int16 frame = aainfo[4]._frame;
+		if (frame == 19) {
+			result = 17;
+		} else if (frame < 19) {
+			if (frame == 2) {
+				if (local->_aa) {
+					if (local->_a8 > 1)
+						digi_play_build(203, '_', 500, 2);
+					local->_aa = 0;
+				}
+			} else if (frame == 9) {
+				result = 7;
+			} else if (frame == 13) {
+				result = 1;
+			}
+		}
+		break;
+	}
+	case 64: {
+		int16 frame = aainfo[4]._frame;
+		if (frame == 25) {
+			midi_stop();
+			local->_a6 = 0;
+		} else if (frame < 25) {
+			if (frame == 1) {
+				global_digi_play(5);
+				local->_a6 = 3;
+			} else if (frame == 18) {
+				if (!local->_ac && local->_98 == 33) {
+					aainfo[3]._frame = 1;
+					kernel_reset_animation(aa[3], 1);
+				}
+			}
+		}
+		break;
+	}
+	default:
+		break;
+	}
+
+	if (result >= 0 && aainfo[4]._active) {
+		aainfo[4]._frame = result;
+		kernel_reset_animation(aa[4], result);
+	}
+}
+
+static void room_203_anim6() {
+	int result = -1;
+
+	if (kernel_anim[aa[5]].frame == aainfo[5]._frame)
+		return;
+	aainfo[5]._frame = kernel_anim[aa[5]].frame;
+
+	if (aainfo[5]._frame == 2)
+		result = 1;
+	else if (aainfo[5]._frame == 5)
+		result = 4;
+
+	if (result >= 0) {
+		aainfo[5]._frame = result;
+		kernel_reset_animation(aa[5], result);
+	}
+}
+
 static void room_203_daemon() {
 	switch (kernel.trigger) {
 	case 7:
 		switch (local->_a4) {
 		case 11:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 9;
+			aainfo[0]._frame = 9;
 			kernel_reset_animation(aa[0], 9);
 			break;
 
 		case 12:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 33;
+			aainfo[0]._frame = 33;
 			kernel_reset_animation(aa[0], 33);
 			break;
 
 		case 13:
-			aainfo[0]._val2 = 28;
+			aainfo[0]._frame = 28;
 			kernel_reset_animation(aa[0], 28);
 			break;
 
 		case 14:
 		case 15:
-			aainfo[1]._val2 = 11;
+			aainfo[1]._frame = 11;
 			kernel_reset_animation(aa[1], 11);
 			break;
 
 		case 16:
-			aainfo[0]._val2 = 12;
+			aainfo[0]._frame = 12;
 			kernel_reset_animation(aa[0], 12);
 			break;
 
 		case 17:
-			aainfo[0]._val2 = 57;
+			aainfo[0]._frame = 57;
 			kernel_reset_animation(aa[0], 57);
 			break;
 
 		case 21:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 17;
+			aainfo[0]._frame = 17;
 			kernel_reset_animation(aa[0], 17);
 			break;
 
 		case 22:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[4]);
-			aainfo[4]._val1 = 0;
+			aainfo[4]._active = 0;
 
 			aa[4] = kernel_run_animation(kernel_name('w', 3), 105);
-			aainfo[4]._val1 = -1;
-			aainfo[4]._val2 = 0;
+			aainfo[4]._active = -1;
+			aainfo[4]._frame = 0;
 			local->_9c = 62;
-			aainfo[0]._val2 = 41;
+			aainfo[0]._frame = 41;
 			kernel_reset_animation(aa[0], 41);
 			break;
 
 		case 23:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 23;
+			aainfo[0]._frame = 23;
 			kernel_reset_animation(aa[0], 23);
 			break;
 
 		case 24:
 			kernel_timing_trigger(40, 106);
-			aainfo[2]._val2 = 6;
+			aainfo[2]._frame = 6;
 			kernel_reset_animation(aa[2], 6);
 			break;
 
 		case 25:
-			aainfo[2]._val2 = 20;
+			aainfo[2]._frame = 20;
 			kernel_reset_animation(aa[2], 20);
 			break;
 
 		case 26:
-			aainfo[2]._val2 = 10;
+			aainfo[2]._frame = 10;
 			kernel_reset_animation(aa[2], 10);
 			break;
 
@@ -321,41 +1086,41 @@ static void room_203_daemon() {
 
 		case 31:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 25;
+			aainfo[0]._frame = 25;
 			kernel_reset_animation(aa[0], 25);
 			break;
 
 		case 32:
-			aainfo[0]._val2 = 5;
+			aainfo[0]._frame = 5;
 			kernel_reset_animation(aa[0], 5);
 			break;
 
 		case 33:
-			aainfo[3]._val2 = 3;
+			aainfo[3]._frame = 3;
 			kernel_reset_animation(aa[3], 3);
 			break;
 
 		case 34:
 		case 35:
-			aainfo[3]._val2 = 39;
+			aainfo[3]._frame = 39;
 			kernel_reset_animation(aa[3], 39);
 			break;
 
 		case 36:
 			kernel_timing_trigger(40, 106);
-			aainfo[3]._val2 = 60;
+			aainfo[3]._frame = 60;
 			kernel_reset_animation(aa[3], 60);
 			break;
 
 		case 38:
 		case 39:
-			aainfo[3]._val2 = 63;
+			aainfo[3]._frame = 63;
 			kernel_reset_animation(aa[3], 63);
 			break;
 
 		case 51:
 			kernel_timing_trigger(40, 106);
-			aainfo[0]._val2 = 24;
+			aainfo[0]._frame = 24;
 			kernel_reset_animation(aa[0], 24);
 			break;
 
@@ -375,8 +1140,8 @@ static void room_203_daemon() {
 		switch (local->_8c) {
 		case 50:
 			aa[1] = kernel_run_animation(kernel_name('Z', 1), 103);
-			aainfo[1]._val1 = -1;
-			aainfo[1]._val2 = 0;
+			aainfo[1]._active = -1;
+			aainfo[1]._frame = 0;
 			local->_96 = 50;
 			player.commands_allowed = false;
 			player.walker_visible = false;
@@ -390,8 +1155,8 @@ static void room_203_daemon() {
 
 		case 51:
 			aa[1] = kernel_run_animation(kernel_name('e', 4), 103);
-			aainfo[1]._val1 = -1;
-			aainfo[1]._val2 = 0;
+			aainfo[1]._active = -1;
+			aainfo[1]._frame = 0;
 			local->_96 = 52;
 			player.commands_allowed = false;
 			player.walker_visible = false;
@@ -412,8 +1177,8 @@ static void room_203_daemon() {
 		switch (local->_8e) {
 		case 41:
 			aa[2] = kernel_run_animation(kernel_name('R', 3), 102);
-			aainfo[2]._val1 = -1;
-			aainfo[2]._val2 = 0;
+			aainfo[2]._active = -1;
+			aainfo[2]._frame = 0;
 			local->_94 = 41;
 			local->_a8 = 0;
 			kernel_reset_animation(local->_a0, 0);
@@ -423,8 +1188,8 @@ static void room_203_daemon() {
 
 		case 42:
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 102);
-			aainfo[2]._val1 = -1;
-			aainfo[2]._val2 = 0;
+			aainfo[2]._active = -1;
+			aainfo[2]._frame = 0;
 			local->_94 = 42;
 			kernel_reset_animation(local->_a0, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, local->_a0);
@@ -433,8 +1198,8 @@ static void room_203_daemon() {
 
 		case 43:
 			aa[2] = kernel_run_animation(kernel_name('R', 2), 102);
-			aainfo[2]._val1 = -1;
-			aainfo[2]._val2 = 0;
+			aainfo[2]._active = -1;
+			aainfo[2]._frame = 0;
 			local->_94 = 43;
 			kernel_reset_animation(local->_a0, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, local->_a0);
@@ -466,8 +1231,8 @@ static void room_203_daemon() {
 		switch (local->_90) {
 		case 14:
 			aa[0] = kernel_run_animation(kernel_name('x', 4), 101);
-			aainfo[0]._val1 = -1;
-			aainfo[0]._val2 = 0;
+			aainfo[0]._active = -1;
+			aainfo[0]._frame = 0;
 			kernel_synch(KERNEL_ANIM, aa[0], KERNEL_NOW, 0);
 			local->_9a = 14;
 			break;
@@ -475,10 +1240,10 @@ static void room_203_daemon() {
 		case 15:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[4]);
-			aainfo[4]._val1 = 0;
+			aainfo[4]._active = 0;
 			aa[0] = kernel_run_animation(kernel_name('z', 2), 101);
-			aainfo[0]._val1 = -1;
-			aainfo[0]._val2 = 0;
+			aainfo[0]._active = -1;
+			aainfo[0]._frame = 0;
 			kernel_synch(KERNEL_ANIM, aa[0], KERNEL_NOW, 0);
 			local->_9a = 15;
 			break;
@@ -487,8 +1252,8 @@ static void room_203_daemon() {
 			player.walker_visible = true;
 			kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 			aa[0] = kernel_run_animation(kernel_name('m', 1), 101);
-			aainfo[0]._val1 = -1;
-			aainfo[0]._val2 = 0;
+			aainfo[0]._active = -1;
+			aainfo[0]._frame = 0;
 			kernel_synch(KERNEL_ANIM, aa[0], KERNEL_NOW, 0);
 			local->_9a = 16;
 			kernel_seq_delete(seq[0]);
@@ -500,8 +1265,8 @@ static void room_203_daemon() {
 			kernel_synch(KERNEL_ANIM, aa[local->_a0], KERNEL_NOW, 0);
 			aa[1] = kernel_run_animation(kernel_name('e', 1), 103);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
-			aainfo[1]._val1 = -1;
-			aainfo[1]._val2 = 0;
+			aainfo[1]._active = -1;
+			aainfo[1]._frame = 0;
 			local->_a8 = 0;
 			break;
 
@@ -513,7 +1278,7 @@ static void room_203_daemon() {
 	case 101:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[0]);
-		aainfo[0]._val1 = 0;
+		aainfo[0]._active = 0;
 
 		switch (local->_9a) {
 		case 11:
@@ -536,21 +1301,21 @@ static void room_203_daemon() {
 				}
 
 				aa[0] = kernel_run_animation(kernel_name('x', 2), 101);
-				aainfo[0]._val1 = -1;
-				aainfo[0]._val2 = 0;
+				aainfo[0]._active = -1;
+				aainfo[0]._frame = 0;
 				local->_9a = 12;
 
 				if (flags[8] == 1) {
 					aa[4] = kernel_run_animation(kernel_name('w', 2), 105);
-					aainfo[4]._val1 = -1;
-					aainfo[4]._val2 = 0;
+					aainfo[4]._active = -1;
+					aainfo[4]._frame = 0;
 					local->_9c = 61;
 				} else {
 					aa[4] = kernel_run_animation(kernel_name('w', 3), 105);
-					aainfo[4]._val1 = -1;
-					aainfo[4]._val2 = 0;
+					aainfo[4]._active = -1;
+					aainfo[4]._frame = 0;
 					local->_9c = 62;
-					aainfo[0]._val2 = 41;
+					aainfo[0]._frame = 41;
 					kernel_reset_animation(aa[0], 41);
 				}
 			}
@@ -624,17 +1389,17 @@ static void room_203_daemon() {
 	case 102:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[2]);
-		aainfo[2]._val1 = 0;
-		aainfo[2]._val2 = 0;
+		aainfo[2]._active = 0;
+		aainfo[2]._frame = 0;
 
 		switch (local->_8e) {
 		case 41:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[4]);
-			aainfo[4]._val1 = 0;
+			aainfo[4]._active = 0;
 			aa[4] = kernel_run_animation(kernel_name('w', 5), 105);
-			aainfo[4]._val1 = -1;
-			aainfo[4]._val2 = 0;
+			aainfo[4]._active = -1;
+			aainfo[4]._frame = 0;
 			local->_9c = 64;
 			kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 			kernel_reset_animation(local->_a0, 1);
@@ -668,8 +1433,8 @@ static void room_203_daemon() {
 	case 103:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[1]);
-		aainfo[1]._val1 = 0;
-		aainfo[1]._val2 = 0;
+		aainfo[1]._active = 0;
+		aainfo[1]._frame = 0;
 
 		switch (local->_96) {
 		case 50:
@@ -680,18 +1445,18 @@ static void room_203_daemon() {
 		case 52:
 			aa[1] = kernel_run_animation(kernel_name('e', 1), 103);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
-			aainfo[1]._val1 = -1;
-			aainfo[1]._val2 = 0;
+			aainfo[1]._active = -1;
+			aainfo[1]._frame = 0;
 			local->_96 = 53;
 			local->_a8 = 0;
 			break;
 
 		case 53:
 			aa[1] = kernel_run_animation(kernel_name('e', 2), 103);
-			aainfo[1]._val1 = -1;
-			aainfo[1]._val2 = 0;
+			aainfo[1]._active = -1;
+			aainfo[1]._frame = 0;
 			aainfo[1]._val4 = 0;
-			aainfo[4]._val2 = 17;
+			aainfo[4]._frame = 17;
 			kernel_reset_animation(aa[4], 0);
 			kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 			local->_96 = local->_ac ? 55 : 54;
@@ -706,8 +1471,8 @@ static void room_203_daemon() {
 			} else {
 				aa[1] = kernel_run_animation(kernel_name('e', 4), 103);
 				kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
-				aainfo[1]._val1 = -1;
-				aainfo[1]._val2 = 0;
+				aainfo[1]._active = -1;
+				aainfo[1]._frame = 0;
 				local->_96 = 57;
 			}
 			break;
@@ -730,7 +1495,7 @@ static void room_203_daemon() {
 	case 104:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[3]);
-		aainfo[3]._val1 = 0;
+		aainfo[3]._active = 0;
 
 		if (local->_98 == 33) {
 			player.walker_visible = true;
@@ -746,7 +1511,7 @@ static void room_203_daemon() {
 	case 105:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[4]);
-		aainfo[4]._val1 = 0;
+		aainfo[4]._active = 0;
 
 		if (local->_9c == 64) {
 			if (local->_94 == 41 && local->_ac == 0) {
@@ -757,10 +1522,10 @@ static void room_203_daemon() {
 			if (local->_96 == 54) {
 				dont_frag_the_palette();
 				kernel_abort_animation(aa[5]);
-				aainfo[5]._val1 = 0;
+				aainfo[5]._active = 0;
 				aa[1] = kernel_run_animation(kernel_name('e', 3), 103);
-				aainfo[1]._val1 = -1;
-				aainfo[1]._val2 = 0;
+				aainfo[1]._active = -1;
+				aainfo[1]._frame = 0;
 				local->_96 = 56;
 			}
 
@@ -770,10 +1535,10 @@ static void room_203_daemon() {
 			if (local->_ac) {
 				dont_frag_the_palette();
 				kernel_abort_animation(aa[5]);
-				aainfo[5]._val1 = 0;
+				aainfo[5]._active = 0;
 				aa[1] = kernel_run_animation(kernel_name('e', 3), 103);
-				aainfo[1]._val1 = -1;
-				aainfo[1]._val2 = 0;
+				aainfo[1]._active = -1;
+				aainfo[1]._frame = 0;
 				local->_96 = 56;
 			}
 			break;
@@ -785,39 +1550,39 @@ static void room_203_daemon() {
 		case 23:
 			digi_play_build(203, 'W', 1, 1);
 			local->_a4 = 51;
-			aainfo[4]._val2 = 1;
+			aainfo[4]._frame = 1;
 			kernel_reset_animation(aa[4], 1);
 			break;
 
 		case 24:
-			aainfo[2]._val2 = 10;
+			aainfo[2]._frame = 10;
 			kernel_reset_animation(aa[2], 10);
 			break;
 
 		case 31:
-			aainfo[0]._val2 = 27;
+			aainfo[0]._frame = 27;
 			kernel_reset_animation(aa[0], 27);
 			break;
 
 		case 36:
-			aainfo[3]._val2 = 57;
+			aainfo[3]._frame = 57;
 			kernel_reset_animation(aa[3], 57);
 			digi_play_build(203, 'b', 8, 1);
 			local->_a4 = 38;
 			break;
 
 		case 34:
-			aainfo[0]._val2 = 11;
+			aainfo[0]._frame = 11;
 			kernel_reset_animation(aa[0], 11);
 			break;
 
 		case 35:
-			aainfo[0]._val2 = 35;
+			aainfo[0]._frame = 35;
 			kernel_reset_animation(aa[0], 35);
 			break;
 
 		case 44:
-			aainfo[0]._val2 = 19;
+			aainfo[0]._frame = 19;
 			kernel_reset_animation(aa[0], 19);
 			break;
 
@@ -833,6 +1598,30 @@ static void room_203_daemon() {
 	default:
 		break;
 	}
+
+	if (global[g046]) {
+		global_anim1(3, local->_9e, global[g131], &global[g132]);
+		global_anim2(3, local->_a0, global[g141], &global[g142]);
+	} else {
+		global_anim1(9, local->_9e, global[g131], &global[g132]);
+		global_anim2(9, local->_a0, global[g141], &global[g142]);
+	}
+
+	global[g030] = local->_a2;
+	if (local->_b2)
+		kernel_random_frame(local->_a2, &global[g151], global[g154]);
+	if (aainfo[0]._active)
+		room_203_anim1();
+	if (aainfo[2]._active)
+		room_203_anim3();
+	if (aainfo[1]._active)
+		room_203_anim2();
+	if (aainfo[3]._active)
+		room_203_anim4();
+	if (aainfo[4]._active)
+		room_203_anim5();
+	if (aainfo[5]._active)
+		room_203_anim6();
 }
 
 static void room_203_pre_parser() {
@@ -856,8 +1645,7 @@ static void room_203_parser() {
 			global[g150] = -1;
 			scratch._90 = 15;
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(13, 21, 0)) {
@@ -866,8 +1654,7 @@ static void room_203_parser() {
 			global[g150] = -1;
 			scratch._90 = 15;
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(13, 24, 0) && global[g046] == 0) {
@@ -884,7 +1671,7 @@ static void room_203_parser() {
 			scratch._a8 = 0;
 			if (global[g049] != 0) {
 				inter_spin_object(8);
-				aainfo[3]._val2 = 28;
+				aainfo[3]._frame = 28;
 				kernel_reset_animation(aa[3], 28);
 				global[g049] = 0;
 			} else {
@@ -896,8 +1683,7 @@ static void room_203_parser() {
 			digi_play_build_ii('c', 1, 1);
 			scratch._a4 = 52;
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (global[player_selected_object] >= 0) {
@@ -909,7 +1695,7 @@ static void room_203_parser() {
 				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(1, 107);
 				if (global[g049] != 0) {
-					aainfo[3]._val2 = 41;
+					aainfo[3]._frame = 41;
 					kernel_reset_animation(aa[3], 41);
 					global[g049] = 0;
 					scratch._ae = -1;
@@ -928,22 +1714,21 @@ static void room_203_parser() {
 				kernel_timing_trigger(1, 107);
 				if (global[g049] != 0) {
 					scratch._ac = 0;
-					aainfo[3]._val2 = 28;
+					aainfo[3]._frame = 28;
 					kernel_reset_animation(aa[3], 28);
 					global[g049] = 0;
 				} else {
 					kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 					aa[3] = kernel_run_animation(kernel_name('a', 2), 104);
-					aainfo[3]._val1 = -1;
-					aainfo[3]._val2 = 0;
+					aainfo[3]._active = -1;
+					aainfo[3]._frame = 0;
 					scratch._98 = 31;
 					player.walker_visible = 0;
 					kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 				}
 			}
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 119, 0)) {
@@ -961,8 +1746,7 @@ static void room_203_parser() {
 			digi_play_build_ii('b', 1, 1);
 			scratch._a4 = 30;
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 168, 0)) {
@@ -970,17 +1754,17 @@ static void room_203_parser() {
 			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			aa[3] = kernel_run_animation(kernel_name('a', 1), 104);
 			scratch._98 = 30;
-			aainfo[3]._val1 = -1;
+			aainfo[3]._active = -1;
 			global[g049] = -1;
-			aainfo[3]._val2 = 0;
+			aainfo[3]._frame = 0;
 			player.walker_visible = 0;
 			player.commands_allowed = 0;
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
 		} else if (player_has(8)) {
 			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			aa[3] = kernel_run_animation(kernel_name('a', 2), 104);
-			aainfo[3]._val1 = -1;
-			aainfo[3]._val2 = 0;
+			aainfo[3]._active = -1;
+			aainfo[3]._frame = 0;
 			scratch._98 = 31;
 			player.walker_visible = 0;
 			kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
@@ -990,42 +1774,37 @@ static void room_203_parser() {
 			global[g150] = -1;
 			scratch._90 = 15;
 		}
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 169, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 51;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 170, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 43;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 65, 0)) {
 		player.commands_allowed = 0;
-		aainfo[3]._val2 = 28;
+		aainfo[3]._frame = 28;
 		kernel_reset_animation(aa[3], 28);
 		global[g049] = 0;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (player_parse(78, 66, 0)) {
 		player.commands_allowed = 0;
-		aainfo[3]._val2 = 33;
+		aainfo[3]._frame = 33;
 		kernel_reset_animation(aa[3], 33);
 		global[g049] = 0;
-		player.command_ready = false;
-		return;
+		goto handled;
 	}
 
 	if (global[g049] == 0)
@@ -1033,11 +1812,17 @@ static void room_203_parser() {
 
 	if (player_parse(13, 106, 0)) {
 		player.commands_allowed = 0;
-		aainfo[3]._val2 = 41;
+		aainfo[3]._frame = 41;
 		kernel_reset_animation(aa[3], 41);
 		global[g049] = 0;
-		player.command_ready = false;
+		goto handled;
 	}
+
+	goto done;
+handled:
+	player.command_ready = false;
+done:
+	;
 }
 
 void room_203_synchronize(Common::Serializer &s) {
@@ -1060,7 +1845,7 @@ void room_203_synchronize(Common::Serializer &s) {
 	s.syncAsSint16LE(scratch._a4);
 	s.syncAsSint16LE(scratch._a6);
 	s.syncAsSint16LE(scratch._a8);
-	s.syncAsSint16LE(scratch._paa);
+	s.syncAsSint16LE(scratch._aa);
 	s.syncAsSint16LE(scratch._ac);
 	s.syncAsSint16LE(scratch._ae);
 	s.syncAsSint16LE(scratch._b0);
diff --git a/engines/mads/madsv2/forest/rooms/room204.cpp b/engines/mads/madsv2/forest/rooms/room204.cpp
index 8ab1e7fbcd2..e7787fb2b75 100644
--- a/engines/mads/madsv2/forest/rooms/room204.cpp
+++ b/engines/mads/madsv2/forest/rooms/room204.cpp
@@ -19,18 +19,15 @@
  *
  */
 
-#include "mads/madsv2/core/conv.h"
+#include "mads/madsv2/core/digi.h"
 #include "mads/madsv2/core/game.h"
-#include "mads/madsv2/core/imath.h"
-#include "mads/madsv2/core/inter.h"
+#include "mads/madsv2/core/global.h"
 #include "mads/madsv2/core/kernel.h"
-#include "mads/madsv2/core/sound.h"
-#include "mads/madsv2/core/text.h"
-#include "mads/madsv2/forest/mads/inventory.h"
-#include "mads/madsv2/forest/mads/sounds.h"
-#include "mads/madsv2/forest/mads/words.h"
+#include "mads/madsv2/core/midi.h"
+#include "mads/madsv2/core/object.h"
+#include "mads/madsv2/core/player.h"
 #include "mads/madsv2/forest/global.h"
-#include "mads/madsv2/forest/rooms/section1.h"
+#include "mads/madsv2/forest/rooms/section2.h"
 #include "mads/madsv2/forest/rooms/room204.h"
 
 namespace MADS {
@@ -39,37 +36,209 @@ namespace Forest {
 namespace Rooms {
 
 struct Scratch {
-	int16 sprite[10];       /* Sprite series handles */
-	int16 sequence[10];     /* Sequence handles      */
-	int16 animation[10];     /* Animation handles     */
-	AnimationInfo animation_info[10];
+	int16 sprite[10];                /* Sprite series handles  0x00 */
+	int16 sequence[10];              /* Sequence handles       0x14 */
+	int16 animation[10];             /* Animation handles      0x28 */
+	AnimationInfo animation_info[10];/* Animation info         0x3C */
+	int16 _8c;
+	int16 _8e;
+	int16 _90;
+	int16 _92;                       /*                        0x92 */
+	int16 _pad94[3];                 /*                        0x94 */
+	int16 _9a;                       /*                        0x9A */
+	int16 _9c;                       /*                        0x9C */
+	int16 _9e;
+	int16 _a0;
+	int16 _a2;
+	int16 _a4;
+	int16 _a6;                       /*                        0xA6 */
+	int16 _a8;                       /*                        0xA8 */
 };
 
 static Scratch scratch;
 
-#define local (&scratch)
-#define ss    local->sprite
-#define seq   local->sequence
-#define aa    local->animation
+#define local  (&scratch)
+#define ss     local->sprite
+#define seq    local->sequence
+#define aa     local->animation
 #define aainfo scratch.animation_info
 
+static void room_204_init1();
 
 static void room_204_init() {
+	global[player_score] = -1;
+	midi_stop();
+	scratch._a8 = 0;
+	scratch._a6 = -1;
+
+	if (object_is_here(9)) {
+		ss[0] = kernel_load_series(kernel_name('p', 1), 0);
+		seq[0] = kernel_seq_stamp(ss[0], false, KERNEL_FIRST);
+		kernel_seq_depth(seq[0], 7);
+		kernel_seq_loc(seq[0], 293, 87);
+		kernel_seq_scale(seq[0], 54);
+	} else {
+		kernel_flip_hotspot(158, -1);
+	}
+
+	if (previous_room != KERNEL_RESTORING_GAME) {
+		if (previous_room != 199) {
+			player.walker_visible = 0;
+			player.commands_allowed = 0;
+		}
+
+		for (int count = 0; count < 10; count++) {
+			aainfo[count]._active = 0;
+			aainfo[count]._frame = 1;
+			aainfo[count]._val3 = 0;
+			aainfo[count]._val4 = 0;
+		}
+
+		if (previous_room != 199 && flags[18] != 3)
+			flags[18]++;
+	}
+
+	room_204_init1();
+	if (flags[18] == -3)
+		flags[18] = 1;
+}
+
+static void room_204_init1() {
+	global[g131] = 0;
+	global[g141] = 0;
+	scratch._9c = kernel_run_animation_disp('r', 2, 0);
+	kernel_position_anim(scratch._9c, 171, 116, 73, 8);
+	scratch._9a = kernel_run_animation_disp('e', 3, 0);
+	kernel_position_anim(scratch._9a, 148, 120, 76, 7);
+
+	if (previous_room != KERNEL_RESTORING_GAME) {
+		player.x = 194;
+		player.y = 121;
+		player.facing = 1;
+	}
+
+	if (previous_room == KERNEL_RESTORING_GAME) {
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._9a, 2);
+		kernel_reset_animation(scratch._9c, 2);
+		global[g133] = 0;
+		global[g143] = 0;
+		return;
+	} else if (previous_room == 203) {
+		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
+		aainfo[0]._active = -1;
+		scratch._92 = 74;
+		return;
+	} else if (previous_room == 205) {
+		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
+		aainfo[0]._active = -1;
+		scratch._92 = 78;
+		return;
+	} else if (previous_room == 220) {
+		aa[0] = kernel_run_animation(kernel_name('y', 3), 100);
+		aainfo[0]._active = -1;
+		scratch._92 = 66;
+		return;
+	} else if (previous_room == 199) {
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._9a, 2);
+		kernel_reset_animation(scratch._9c, 2);
+		global[g133] = 0;
+		global[g143] = 0;
+		restore_player();
+	} else {
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._9a, 2);
+		kernel_reset_animation(scratch._9c, 2);
+		global[g133] = 0;
+		global[g143] = 0;
+	}
+
+	player.commands_allowed = -1;
+	player.walker_visible = -1;
 }
 
 static void room_204_daemon() {
 }
 
 static void room_204_pre_parser() {
+	if (player_parse(13, 23, 0))
+		player.walk_off_edge_to_room = 203;
+
+	if (player_parse(13, 25, 0))
+		player.walk_off_edge_to_room = flags[13] ? 205 : 220;
 }
 
 static void room_204_parser() {
+	if (global[walker_converse_state]) {
+		player.commands_allowed = false;
+		digi_play_build_ii('c', 1, 1);
+		goto handled;
+	}
+
+	if (global[player_selected_object] >= 0) {
+		goto handled;
+	}
+
+	if (player_parse(114, 103, 0)) {
+		player.commands_allowed = false;
+		global[g135] = -1;
+		local->_8c = 5;
+		local->_a6 = 1;
+		goto handled;
+	}
+
+	if (player_parse(114, 82, 0)) {
+		player.commands_allowed = false;
+		global[g135] = -1;
+		local->_8c = 5;
+		local->_a6 = 2;
+		goto handled;
+	}
+
+	if (player_parse(126, 158, 0)) {
+		global[g154] = 2;
+		player.commands_allowed = false;
+		kernel_run_animation_talk('b', 9, 0);
+		kernel_position_anim(local->_9e, player.x, player.y, player.scale, player.depth);
+		goto handled;
+	}
+
+	if (player_parse(78, 119, 0)) {
+		player.commands_allowed = false;
+		global[g135] = -1;
+		local->_8c = 3;
+		goto handled;
+	}
+
+	goto done;
+handled:
+	player.command_ready = false;
+done:
+	;
 }
 
 void room_204_synchronize(Common::Serializer &s) {
 	for (int16 &v : scratch.sprite)    s.syncAsSint16LE(v);
 	for (int16 &v : scratch.sequence)  s.syncAsSint16LE(v);
 	for (int16 &v : scratch.animation) s.syncAsSint16LE(v);
+	for (AnimationInfo &ai : scratch.animation_info) ai.synchronize(s);
+	s.syncAsSint16LE(scratch._8c);
+	s.syncAsSint16LE(scratch._8e);
+	s.syncAsSint16LE(scratch._90);
+	s.syncAsSint16LE(scratch._92);
+	for (int16 &v : scratch._pad94)  s.syncAsSint16LE(v);
+	s.syncAsSint16LE(scratch._9a);
+	s.syncAsSint16LE(scratch._9c);
+	s.syncAsSint16LE(scratch._9e);
+	s.syncAsSint16LE(scratch._a0);
+	s.syncAsSint16LE(scratch._a2);
+	s.syncAsSint16LE(scratch._a4);
+	s.syncAsSint16LE(scratch._a6);
+	s.syncAsSint16LE(scratch._a8);
 }
 
 void room_204_preload() {
@@ -78,8 +247,8 @@ void room_204_preload() {
 	room_parser_code_pointer = room_204_parser;
 	room_daemon_code_pointer = room_204_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	section_2_walker();
+	section_2_interface();
 }
 
 } // namespace Rooms


Commit: 1db23e2d9741ae3c20326d2ced9d0fb4ce88b675
    https://github.com/scummvm/scummvm/commit/1db23e2d9741ae3c20326d2ced9d0fb4ce88b675
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-07T14:15:13+10:00

Commit Message:
MADS: FOREST: Implemented room 204, other rooms preload functions

Changed paths:
    engines/mads/madsv2/forest/global.cpp
    engines/mads/madsv2/forest/global.h
    engines/mads/madsv2/forest/rooms/room101.cpp
    engines/mads/madsv2/forest/rooms/room103.cpp
    engines/mads/madsv2/forest/rooms/room104.cpp
    engines/mads/madsv2/forest/rooms/room106.cpp
    engines/mads/madsv2/forest/rooms/room107.cpp
    engines/mads/madsv2/forest/rooms/room199.cpp
    engines/mads/madsv2/forest/rooms/room201.cpp
    engines/mads/madsv2/forest/rooms/room203.cpp
    engines/mads/madsv2/forest/rooms/room204.cpp
    engines/mads/madsv2/forest/rooms/room205.cpp
    engines/mads/madsv2/forest/rooms/room210.cpp
    engines/mads/madsv2/forest/rooms/room211.cpp
    engines/mads/madsv2/forest/rooms/room220.cpp
    engines/mads/madsv2/forest/rooms/room221.cpp
    engines/mads/madsv2/forest/rooms/room301.cpp
    engines/mads/madsv2/forest/rooms/room302.cpp
    engines/mads/madsv2/forest/rooms/room303.cpp
    engines/mads/madsv2/forest/rooms/room304.cpp
    engines/mads/madsv2/forest/rooms/room305.cpp
    engines/mads/madsv2/forest/rooms/room306.cpp
    engines/mads/madsv2/forest/rooms/room307.cpp
    engines/mads/madsv2/forest/rooms/room308.cpp
    engines/mads/madsv2/forest/rooms/room321.cpp
    engines/mads/madsv2/forest/rooms/room322.cpp
    engines/mads/madsv2/forest/rooms/room401.cpp
    engines/mads/madsv2/forest/rooms/room402.cpp
    engines/mads/madsv2/forest/rooms/room403.cpp
    engines/mads/madsv2/forest/rooms/room404.cpp
    engines/mads/madsv2/forest/rooms/room405.cpp
    engines/mads/madsv2/forest/rooms/room420.cpp
    engines/mads/madsv2/forest/rooms/room501.cpp
    engines/mads/madsv2/forest/rooms/room503.cpp
    engines/mads/madsv2/forest/rooms/room509.cpp
    engines/mads/madsv2/forest/rooms/room510.cpp
    engines/mads/madsv2/forest/rooms/room520.cpp
    engines/mads/madsv2/forest/rooms/section1.cpp
    engines/mads/madsv2/forest/rooms/section1.h
    engines/mads/madsv2/forest/rooms/section2.cpp
    engines/mads/madsv2/forest/rooms/section2.h
    engines/mads/madsv2/forest/rooms/section3.cpp
    engines/mads/madsv2/forest/rooms/section3.h
    engines/mads/madsv2/forest/rooms/section4.cpp
    engines/mads/madsv2/forest/rooms/section4.h
    engines/mads/madsv2/forest/rooms/section5.cpp
    engines/mads/madsv2/forest/rooms/section5.h


diff --git a/engines/mads/madsv2/forest/global.cpp b/engines/mads/madsv2/forest/global.cpp
index 22f546ca4f5..f086e6dc87c 100644
--- a/engines/mads/madsv2/forest/global.cpp
+++ b/engines/mads/madsv2/forest/global.cpp
@@ -26,6 +26,7 @@
 #include "mads/madsv2/core/imath.h"
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/midi.h"
+#include "mads/madsv2/core/pal.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/extra.h"
 
@@ -169,6 +170,30 @@ void sync_room(Common::Serializer &s) {
 	}
 }
 
+void global_section_walker() {
+	char buf[80];
+
+	Common::strcpy_s(buf, player.series_name);
+	global[g017] = -1;
+
+	if (global[g016]) {
+		*player.series_name = '\0';
+	} else if (!player.force_series) {
+		Common::strcpy_s(player.series_name, "B");
+	}
+
+	if (strcmp(player.series_name, buf))
+		player.walker_must_reload = true;
+
+	player.scaling_velocity = true;
+}
+
+void global_section_interface() {
+	Common::strcpy_s(kernel.interface, kernel_interface_name(0));
+	pal_change_color(254, 56, 47, 32);
+}
+
+
 static void global_anim1_1(int arg_0, int arg_2, int16 *arg_4) {
 	if (kernel_anim[arg_0].frame == *arg_4)
 		return;
diff --git a/engines/mads/madsv2/forest/global.h b/engines/mads/madsv2/forest/global.h
index 75b09e04960..c34c61328c3 100644
--- a/engines/mads/madsv2/forest/global.h
+++ b/engines/mads/madsv2/forest/global.h
@@ -259,6 +259,8 @@ extern bool room_203_flag;
 
 extern void global_section_constructor();
 extern void sync_room(Common::Serializer &s);
+extern void global_section_walker();
+extern void global_section_interface();
 
 extern void global_anim1(int arg_0, int arg_2, int arg_4, int16 *arg_6);
 extern void global_anim2(int arg_0, int arg_2, int arg_4, int16 *arg_6);
diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index 101cc01d88d..08ff07b5afc 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -1120,8 +1120,8 @@ void room_101_preload() {
 	if (flags[0] == -4)
 		global[g016] = -1;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room103.cpp b/engines/mads/madsv2/forest/rooms/room103.cpp
index d12e5461d0f..740ce94eb2a 100644
--- a/engines/mads/madsv2/forest/rooms/room103.cpp
+++ b/engines/mads/madsv2/forest/rooms/room103.cpp
@@ -426,8 +426,8 @@ void room_103_preload() {
 	if (flags[1] == -4)
 		global[g016] = -1;
 	if (previous_room != 199) {
-		section_1_walker();
-		section_1_interface();
+		global_section_walker();
+		global_section_interface();
 	}
 
 	player.walker_must_reload = true;
diff --git a/engines/mads/madsv2/forest/rooms/room104.cpp b/engines/mads/madsv2/forest/rooms/room104.cpp
index 5c8a7d216ab..4fec105fb1f 100644
--- a/engines/mads/madsv2/forest/rooms/room104.cpp
+++ b/engines/mads/madsv2/forest/rooms/room104.cpp
@@ -974,8 +974,8 @@ void room_104_preload() {
 	room_daemon_code_pointer     = room_104_daemon;
 
 	global[g016] = (global[g101] || room_id == 103) ? -1 : 0;
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room106.cpp b/engines/mads/madsv2/forest/rooms/room106.cpp
index 19698662150..ae2f2a7019e 100644
--- a/engines/mads/madsv2/forest/rooms/room106.cpp
+++ b/engines/mads/madsv2/forest/rooms/room106.cpp
@@ -821,8 +821,8 @@ void room_106_preload() {
 	if (flags[3] == -4)
 		global[g016] = -1;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room107.cpp b/engines/mads/madsv2/forest/rooms/room107.cpp
index 16f210f3e4a..ebf9365e9e6 100644
--- a/engines/mads/madsv2/forest/rooms/room107.cpp
+++ b/engines/mads/madsv2/forest/rooms/room107.cpp
@@ -164,8 +164,8 @@ void room_107_preload() {
 	room_parser_code_pointer = room_107_parser;
 	room_daemon_code_pointer = room_107_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room199.cpp b/engines/mads/madsv2/forest/rooms/room199.cpp
index 35abb9125ac..e84be3e44d7 100644
--- a/engines/mads/madsv2/forest/rooms/room199.cpp
+++ b/engines/mads/madsv2/forest/rooms/room199.cpp
@@ -569,8 +569,8 @@ void room_199_preload() {
 
 	global[g016] = -1;
 	player.walker_visible = false;
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room201.cpp b/engines/mads/madsv2/forest/rooms/room201.cpp
index d4344262ba8..fd9efce246f 100644
--- a/engines/mads/madsv2/forest/rooms/room201.cpp
+++ b/engines/mads/madsv2/forest/rooms/room201.cpp
@@ -688,8 +688,9 @@ void room_201_preload() {
 	room_pre_parser_code_pointer = room_201_pre_parser;
 	room_parser_code_pointer     = room_201_parser;
 	room_daemon_code_pointer     = room_201_daemon;
-	section_2_walker();
-	section_2_interface();
+
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room203.cpp b/engines/mads/madsv2/forest/rooms/room203.cpp
index ae9209a5a7e..a64b2fa3af5 100644
--- a/engines/mads/madsv2/forest/rooms/room203.cpp
+++ b/engines/mads/madsv2/forest/rooms/room203.cpp
@@ -1858,8 +1858,9 @@ void room_203_preload() {
 	room_pre_parser_code_pointer = room_203_pre_parser;
 	room_parser_code_pointer     = room_203_parser;
 	room_daemon_code_pointer     = room_203_daemon;
-	section_2_walker();
-	section_2_interface();
+
+	global_section_walker();
+	global_section_interface();
 	player.walker_must_reload = true;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room204.cpp b/engines/mads/madsv2/forest/rooms/room204.cpp
index e7787fb2b75..c1a28a8c961 100644
--- a/engines/mads/madsv2/forest/rooms/room204.cpp
+++ b/engines/mads/madsv2/forest/rooms/room204.cpp
@@ -22,11 +22,13 @@
 #include "mads/madsv2/core/digi.h"
 #include "mads/madsv2/core/game.h"
 #include "mads/madsv2/core/global.h"
+#include "mads/madsv2/core/inter.h"
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/midi.h"
 #include "mads/madsv2/core/object.h"
 #include "mads/madsv2/core/player.h"
 #include "mads/madsv2/forest/global.h"
+#include "mads/madsv2/forest/journal.h"
 #include "mads/madsv2/forest/rooms/section2.h"
 #include "mads/madsv2/forest/rooms/room204.h"
 
@@ -44,7 +46,9 @@ struct Scratch {
 	int16 _8e;
 	int16 _90;
 	int16 _92;                       /*                        0x92 */
-	int16 _pad94[3];                 /*                        0x94 */
+	int16 _94;                       /*                        0x94 */
+	int16 _96;                       /*                        0x96 */
+	int16 _98;                       /*                        0x98 */
 	int16 _9a;                       /*                        0x9A */
 	int16 _9c;                       /*                        0x9C */
 	int16 _9e;
@@ -64,6 +68,12 @@ static Scratch scratch;
 #define aainfo scratch.animation_info
 
 static void room_204_init1();
+static void room_204_anim1();
+static void room_204_anim2();
+static void room_204_anim3();
+static void room_204_anim4();
+static void room_204_anim5();
+static void room_204_anim6();
 
 static void room_204_init() {
 	global[player_score] = -1;
@@ -162,6 +172,377 @@ static void room_204_init1() {
 }
 
 static void room_204_daemon() {
+	int trigger = kernel.trigger;
+
+	if (trigger == 103) {
+		goto trigger_103;
+	} else if (trigger > 103) {
+		goto bottom;
+	} else if (trigger == 25) {
+		goto trigger_25;
+	} else if (trigger > 25) {
+		// triggers 26-102
+		if (trigger == 26) {
+			goto trigger_26;
+		} else if (trigger == 100) {
+			goto trigger_100;
+		} else if (trigger == 101) {
+			// abort _94 slot anim, re-enable
+			kernel_abort_animation(aa[scratch._94]);
+			aainfo[scratch._94]._active = 0;
+			kernel_reset_animation(scratch._9c, 1);
+			kernel_synch(3, scratch._9c, 4, 0);
+			global[g143] = 0;
+			player.commands_allowed = -1;
+			goto bottom;
+		} else if (trigger == 102) {
+			// abort _96 slot anim, re-enable
+			kernel_abort_animation(aa[scratch._96]);
+			aainfo[scratch._96]._active = 0;
+			kernel_reset_animation(scratch._9a, 1);
+			kernel_synch(3, scratch._9a, 4, 0);
+			global[g133] = 0;
+			player.commands_allowed = -1;
+			goto bottom;
+		} else {
+			goto bottom;
+		}
+	} else if (trigger == 0) {
+		goto bottom;
+	} else if (trigger == 7) {
+		goto trigger_7;
+	} else if (trigger == 24) {
+		goto trigger_24;
+	} else {
+		goto bottom;
+	}
+
+trigger_7:
+	if (global[walker_converse_state] != 0) {
+		global[walker_converse_state] = 0;
+		close_journal(3);
+		player.commands_allowed = -1;
+		goto bottom;
+	}
+	if (scratch._a4 != 400)
+		goto bottom;
+	kernel_abort_animation(scratch._9e);
+	scratch._a4 = -1;
+	scratch._a8 = 0;
+	kernel_synch(2, 0, 4, 0);
+	scratch._a6 = 3;
+	player.walker_visible = -1;
+	global[g150] = -1;
+	scratch._90 = 6;
+	goto bottom;
+
+trigger_24:
+	if (scratch._8c == 3) {
+		aa[2] = kernel_run_animation(kernel_name('E', 1), 102);
+		aainfo[2]._active = -1;
+		scratch._96 = 2;
+		kernel_reset_animation(scratch._9a, 0);
+		kernel_synch(3, aa[2], 3, scratch._9a);
+		global[g133] = 1;
+	} else if (scratch._8c == 5) {
+		if (scratch._a6 == 1) {
+			aa[4] = kernel_run_animation(kernel_name('F', 1), 102);
+		} else if (scratch._a6 == 2) {
+			aa[4] = kernel_run_animation(kernel_name('F', 2), 102);
+		} else {
+			goto bottom;
+		}
+		aainfo[4]._active = -1;
+		scratch._96 = 4;
+		kernel_reset_animation(scratch._9a, 0);
+		kernel_synch(3, aa[4], 3, scratch._9a);
+		global[g133] = 1;
+	}
+	goto bottom;
+
+trigger_25:
+	if (scratch._8e == 2) {
+		aa[3] = kernel_run_animation(kernel_name('R', 1), 101);
+		aainfo[3]._active = -1;
+		scratch._94 = 3;
+		kernel_reset_animation(scratch._9c, 0);
+		kernel_synch(3, aa[3], 3, scratch._9c);
+		global[g143] = 1;
+	}
+	goto bottom;
+
+trigger_26:
+	if (scratch._90 == 1) {
+		kernel_reset_animation(scratch._9a, 0);
+		kernel_reset_animation(scratch._9c, 0);
+		global[g133] = 1;
+		global[g143] = 1;
+	} else if (scratch._90 == 6) {
+		if (scratch._a6 != 3)
+			goto bottom;
+		aa[5] = kernel_run_animation(kernel_name('P', 1), 103);
+		aainfo[5]._active = -1;
+		scratch._98 = 5;
+		kernel_reset_animation(scratch._9a, 0);
+		kernel_reset_animation(scratch._9c, 0);
+		kernel_synch(3, aa[5], 4, 0);
+		global[g133] = 1;
+		global[g143] = 1;
+	}
+	goto bottom;
+
+trigger_100:
+	kernel_abort_animation(aa[0]);
+	aainfo[0]._active = 0;
+	if (flags[18] == 1) {
+		kernel_synch(2, 0, 4, 0);
+		global[g017] = 0;
+		global[g154] = 0;
+		kernel_synch(3, scratch._9a, 4, 0);
+		global[g131] = -1;
+		global[g133] = 1;
+		global[g156] = 0;
+		kernel_synch(3, scratch._9c, 4, 0);
+		global[g143] = 1;
+		scratch._a4 = 1;
+		global[g141] = -1;
+		player.walker_visible = -1;
+		aainfo[1]._active = -1;
+		global[g155] = 2;
+		scratch._a0 = kernel_run_animation_talk('r', 2, 0);
+		kernel_position_anim(scratch._a0, 171, 116, 73, 8);
+		scratch._a2 = kernel_run_animation_talk('e', 3, 0);
+		kernel_position_anim(scratch._a2, 148, 120, 76, 7);
+		kernel_synch(3, scratch._a2, 3, scratch._9a);
+		kernel_synch(3, scratch._a0, 3, scratch._9c);
+		kernel_synch(3, scratch._9e, 2, 0);
+		digi_play_build(204, 114, 1, 1);
+	} else {
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._9a, 1);
+		kernel_reset_animation(scratch._9c, 1);
+		global[g133] = 0;
+		global[g143] = 0;
+		kernel_synch(3, scratch._9a, 4, 0);
+		kernel_synch(3, scratch._9c, 4, 0);
+		player.walker_visible = -1;
+		kernel_synch(2, 0, 4, 0);
+		player.commands_allowed = -1;
+	}
+	goto bottom;
+
+trigger_103:
+	if (scratch._a6 != 3)
+		goto bottom;
+	kernel_abort_animation(aa[5]);
+	aainfo[5]._active = 0;
+	kernel_reset_animation(scratch._9c, 1);
+	kernel_synch(3, scratch._9c, 4, 0);
+	global[g143] = 0;
+	kernel_reset_animation(scratch._9a, 1);
+	kernel_synch(3, scratch._9a, 4, 0);
+	global[g133] = 0;
+	kernel_flip_hotspot(158, -1);
+	inter_move_object(9, 2);
+	global[player_score] = -1;
+	player.commands_allowed = -1;
+
+bottom:
+	global_anim1(3, scratch._9a, global[g131], &global[g132]);
+	global_anim2(2, scratch._9c, global[g141], &global[g142]);
+
+	if (scratch._a8 != 0)
+		kernel_random_frame(scratch._9e, &global[g151], global[g154]);
+
+	if (aainfo[0]._active != 0) room_204_anim1();
+	if (aainfo[1]._active != 0) room_204_anim2();
+	if (aainfo[3]._active != 0) room_204_anim3();
+	if (aainfo[2]._active != 0) room_204_anim4();
+	if (aainfo[4]._active != 0) room_204_anim5();
+	if (aainfo[5]._active != 0) room_204_anim6();
+}
+
+static void room_204_anim1() {
+	if (kernel_anim[aa[0]].frame != aainfo[0]._frame)
+		aainfo[0]._frame = kernel_anim[aa[0]].frame;
+
+	if (global[player_hyperwalked] == -1) {
+		aainfo[0]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
+	}
+}
+
+static void room_204_anim2() {
+	if (kernel_anim[aa[1]].frame != aainfo[1]._frame)
+		aainfo[1]._frame = kernel_anim[aa[1]].frame;
+
+	if (scratch._a4 == 0)
+		return;
+
+	kernel_random_frame(scratch._a2, &global[g153], global[g156]);
+	kernel_random_frame(scratch._a0, &global[g152], global[g155]);
+
+	if (kernel.trigger != 7 && kernel.trigger != 28)
+		return;
+
+	if (scratch._a4 == 1) {
+		global[g155] = 0;
+		kernel_timing_trigger(10, 28);
+		scratch._a4 = 2;
+	} else if (scratch._a4 == 2) {
+		global[g156] = 2;
+		scratch._a4 = 3;
+		digi_play_build(204, 'e', 1, 1);
+	} else if (scratch._a4 == 3) {
+		scratch._a4 = 4;
+		kernel_abort_animation(scratch._a2);
+		kernel_abort_animation(scratch._a0);
+		player.commands_allowed = -1;
+		player.walker_visible = -1;
+		global[g017] = -1;
+		aainfo[1]._active = 0;
+		kernel_synch(2, 0, 4, 0);
+		global[g131] = -1;
+		global[g141] = -1;
+		kernel_reset_animation(scratch._9a, 1);
+		kernel_reset_animation(scratch._9c, 1);
+		kernel_synch(3, scratch._9a, 4, 0);
+		kernel_synch(3, scratch._9c, 4, 0);
+		global[g133] = 0;
+		global[g143] = 0;
+	}
+}
+
+static void room_204_anim3() {
+	if (kernel_anim[aa[3]].frame != aainfo[3]._frame)
+		aainfo[3]._frame = kernel_anim[aa[3]].frame;
+}
+
+static void room_204_anim4() {
+	if (kernel_anim[aa[2]].frame != aainfo[2]._frame)
+		aainfo[2]._frame = kernel_anim[aa[2]].frame;
+}
+
+static void room_204_anim5() {
+	if (kernel_anim[aa[4]].frame != aainfo[4]._frame) {
+		aainfo[4]._frame = kernel_anim[aa[4]].frame;
+		int16 ax = aainfo[4]._frame;
+
+		if (scratch._a6 == 1) {
+			if (ax == 51) {
+				if (aainfo[4]._val3 == 13) {
+					aainfo[4]._frame = 49;
+					kernel_reset_animation(aa[4], 49);
+				}
+			} else if (ax < 51) {
+				if (ax == 43) {
+					aainfo[4]._val3 = 11;
+					digi_play_build_ii('e', 4, 1);
+					scratch._a4 = 43;
+				} else if (ax == 48) {
+					if (aainfo[4]._val3 == 11) {
+						aainfo[4]._frame = 43;
+						kernel_reset_animation(aa[4], 43);
+					}
+				}
+			}
+		} else if (scratch._a6 == 2) {
+			if (ax == 13) {
+				if (aainfo[4]._val3 == 13) {
+					aainfo[4]._frame = 11;
+					kernel_reset_animation(aa[4], 11);
+				}
+			} else if (ax < 13) {
+				if (ax == 5) {
+					aainfo[4]._val3 = 11;
+					digi_play_build_ii('e', 9, 1);
+					scratch._a4 = 500;
+				} else if (ax == 10) {
+					if (aainfo[4]._val3 == 11) {
+						aainfo[4]._frame = 5;
+						kernel_reset_animation(aa[4], 5);
+					}
+				}
+			}
+		}
+	}
+
+	if (kernel.trigger != 7 && kernel.trigger != 28)
+		return;
+
+	if (scratch._a4 == 43) {
+		kernel_timing_trigger(30, 28);
+		aainfo[4]._val3 = 13;
+		scratch._a4 = 44;
+	} else if (scratch._a4 == 44) {
+		aainfo[4]._val3 = 11;
+		aainfo[4]._frame = 43;
+		kernel_reset_animation(aa[4], 43);
+		digi_play_build_ii('e', 10, 1);
+		scratch._a4 = 45;
+	} else if (scratch._a4 == 45) {
+		aainfo[4]._val3 = 14;
+		aainfo[4]._frame = 50;
+		kernel_reset_animation(aa[4], 50);
+		scratch._a4 = -1;
+	} else if (scratch._a4 == 500) {
+		kernel_timing_trigger(30, 28);
+		aainfo[4]._val3 = 13;
+		scratch._a4 = 501;
+	} else if (scratch._a4 == 501) {
+		aainfo[4]._val3 = 11;
+		aainfo[4]._frame = 5;
+		kernel_reset_animation(aa[4], 5);
+		digi_play_build_ii('e', 10, 1);
+		scratch._a4 = 502;
+	} else if (scratch._a4 == 502) {
+		aainfo[4]._val3 = 14;
+		aainfo[4]._frame = 11;
+		kernel_reset_animation(aa[4], 11);
+		scratch._a4 = -1;
+	}
+}
+static void room_204_anim6() {
+	if (kernel_anim[aa[5]].frame != aainfo[5]._frame) {
+		aainfo[5]._frame = kernel_anim[aa[5]].frame;
+		int16 ax = aainfo[5]._frame;
+
+		if (scratch._a6 == 3) {
+			if (ax == 64) {
+				if (aainfo[5]._val3 == 13) {
+					digi_play_build(101, '_', 1, 2);
+					scratch._a4 = 64;
+				}
+			} else if (ax < 64) {
+				if (ax == 5) {
+					aainfo[5]._val3 = 11;
+					digi_play_build(204, 'e', 2, 1);
+					scratch._a4 = 5;
+				} else if (ax == 10) {
+					if (aainfo[5]._val3 == 11) {
+						aainfo[5]._frame = 5;
+						kernel_reset_animation(aa[5], 5);
+					}
+				}
+			}
+		}
+	}
+
+	if (kernel.trigger == 7 || kernel.trigger == 28) {
+		if (scratch._a4 == 5) {
+			aainfo[5]._val3 = 13;
+			aainfo[5]._frame = 11;
+			kernel_reset_animation(aa[5], 11);
+			scratch._a4 = -1;
+			kernel_seq_delete(seq[0]);
+		}
+	}
+
+	if (kernel.trigger == 8 || kernel.trigger == 28) {
+		if (scratch._a4 == 64)
+			scratch._a4 = -1;
+	}
 }
 
 static void room_204_pre_parser() {
@@ -230,7 +611,9 @@ void room_204_synchronize(Common::Serializer &s) {
 	s.syncAsSint16LE(scratch._8e);
 	s.syncAsSint16LE(scratch._90);
 	s.syncAsSint16LE(scratch._92);
-	for (int16 &v : scratch._pad94)  s.syncAsSint16LE(v);
+	s.syncAsSint16LE(scratch._94);
+	s.syncAsSint16LE(scratch._96);
+	s.syncAsSint16LE(scratch._98);
 	s.syncAsSint16LE(scratch._9a);
 	s.syncAsSint16LE(scratch._9c);
 	s.syncAsSint16LE(scratch._9e);
@@ -247,8 +630,9 @@ void room_204_preload() {
 	room_parser_code_pointer = room_204_parser;
 	room_daemon_code_pointer = room_204_daemon;
 
-	section_2_walker();
-	section_2_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room205.cpp b/engines/mads/madsv2/forest/rooms/room205.cpp
index 0da27750430..1b1bd136598 100644
--- a/engines/mads/madsv2/forest/rooms/room205.cpp
+++ b/engines/mads/madsv2/forest/rooms/room205.cpp
@@ -78,8 +78,9 @@ void room_205_preload() {
 	room_parser_code_pointer = room_205_parser;
 	room_daemon_code_pointer = room_205_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room210.cpp b/engines/mads/madsv2/forest/rooms/room210.cpp
index 235c69f63df..95bc2a25e6a 100644
--- a/engines/mads/madsv2/forest/rooms/room210.cpp
+++ b/engines/mads/madsv2/forest/rooms/room210.cpp
@@ -78,8 +78,9 @@ void room_210_preload() {
 	room_parser_code_pointer = room_210_parser;
 	room_daemon_code_pointer = room_210_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room211.cpp b/engines/mads/madsv2/forest/rooms/room211.cpp
index 69b91185a8d..cf22e3282b7 100644
--- a/engines/mads/madsv2/forest/rooms/room211.cpp
+++ b/engines/mads/madsv2/forest/rooms/room211.cpp
@@ -78,8 +78,9 @@ void room_211_preload() {
 	room_parser_code_pointer = room_211_parser;
 	room_daemon_code_pointer = room_211_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room220.cpp b/engines/mads/madsv2/forest/rooms/room220.cpp
index 643c4b96747..09982c1aa9a 100644
--- a/engines/mads/madsv2/forest/rooms/room220.cpp
+++ b/engines/mads/madsv2/forest/rooms/room220.cpp
@@ -78,8 +78,11 @@ void room_220_preload() {
 	room_parser_code_pointer = room_220_parser;
 	room_daemon_code_pointer = room_220_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	flags[13] = 7;
+	global[g016] = -1;
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room221.cpp b/engines/mads/madsv2/forest/rooms/room221.cpp
index 74145af6669..062d5ff6244 100644
--- a/engines/mads/madsv2/forest/rooms/room221.cpp
+++ b/engines/mads/madsv2/forest/rooms/room221.cpp
@@ -78,8 +78,9 @@ void room_221_preload() {
 	room_parser_code_pointer = room_221_parser;
 	room_daemon_code_pointer = room_221_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room301.cpp b/engines/mads/madsv2/forest/rooms/room301.cpp
index 85f0c82eade..db009299b16 100644
--- a/engines/mads/madsv2/forest/rooms/room301.cpp
+++ b/engines/mads/madsv2/forest/rooms/room301.cpp
@@ -78,8 +78,9 @@ void room_301_preload() {
 	room_parser_code_pointer = room_301_parser;
 	room_daemon_code_pointer = room_301_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room302.cpp b/engines/mads/madsv2/forest/rooms/room302.cpp
index 82a6e09a042..155a4e5dfe4 100644
--- a/engines/mads/madsv2/forest/rooms/room302.cpp
+++ b/engines/mads/madsv2/forest/rooms/room302.cpp
@@ -78,8 +78,9 @@ void room_302_preload() {
 	room_parser_code_pointer = room_302_parser;
 	room_daemon_code_pointer = room_302_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room303.cpp b/engines/mads/madsv2/forest/rooms/room303.cpp
index abb32340a3c..ded667515aa 100644
--- a/engines/mads/madsv2/forest/rooms/room303.cpp
+++ b/engines/mads/madsv2/forest/rooms/room303.cpp
@@ -78,8 +78,9 @@ void room_303_preload() {
 	room_parser_code_pointer = room_303_parser;
 	room_daemon_code_pointer = room_303_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room304.cpp b/engines/mads/madsv2/forest/rooms/room304.cpp
index 0cbdeae59d8..e41c65ca889 100644
--- a/engines/mads/madsv2/forest/rooms/room304.cpp
+++ b/engines/mads/madsv2/forest/rooms/room304.cpp
@@ -78,8 +78,9 @@ void room_304_preload() {
 	room_parser_code_pointer = room_304_parser;
 	room_daemon_code_pointer = room_304_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room305.cpp b/engines/mads/madsv2/forest/rooms/room305.cpp
index a3369107f8d..89c14ccbe20 100644
--- a/engines/mads/madsv2/forest/rooms/room305.cpp
+++ b/engines/mads/madsv2/forest/rooms/room305.cpp
@@ -78,8 +78,9 @@ void room_305_preload() {
 	room_parser_code_pointer = room_305_parser;
 	room_daemon_code_pointer = room_305_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room306.cpp b/engines/mads/madsv2/forest/rooms/room306.cpp
index 44c11f19ac9..da270f67e99 100644
--- a/engines/mads/madsv2/forest/rooms/room306.cpp
+++ b/engines/mads/madsv2/forest/rooms/room306.cpp
@@ -78,8 +78,9 @@ void room_306_preload() {
 	room_parser_code_pointer = room_306_parser;
 	room_daemon_code_pointer = room_306_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room307.cpp b/engines/mads/madsv2/forest/rooms/room307.cpp
index 04f7f2dd846..bbe1745f3b4 100644
--- a/engines/mads/madsv2/forest/rooms/room307.cpp
+++ b/engines/mads/madsv2/forest/rooms/room307.cpp
@@ -78,8 +78,9 @@ void room_307_preload() {
 	room_parser_code_pointer = room_307_parser;
 	room_daemon_code_pointer = room_307_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room308.cpp b/engines/mads/madsv2/forest/rooms/room308.cpp
index 6be0433fca1..247e246d499 100644
--- a/engines/mads/madsv2/forest/rooms/room308.cpp
+++ b/engines/mads/madsv2/forest/rooms/room308.cpp
@@ -78,8 +78,9 @@ void room_308_preload() {
 	room_parser_code_pointer = room_308_parser;
 	room_daemon_code_pointer = room_308_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room321.cpp b/engines/mads/madsv2/forest/rooms/room321.cpp
index ff3ef4df085..e4a6aeee089 100644
--- a/engines/mads/madsv2/forest/rooms/room321.cpp
+++ b/engines/mads/madsv2/forest/rooms/room321.cpp
@@ -78,8 +78,9 @@ void room_321_preload() {
 	room_parser_code_pointer = room_321_parser;
 	room_daemon_code_pointer = room_321_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room322.cpp b/engines/mads/madsv2/forest/rooms/room322.cpp
index 8f1777d3c83..a5ca31e41d6 100644
--- a/engines/mads/madsv2/forest/rooms/room322.cpp
+++ b/engines/mads/madsv2/forest/rooms/room322.cpp
@@ -78,8 +78,9 @@ void room_322_preload() {
 	room_parser_code_pointer = room_322_parser;
 	room_daemon_code_pointer = room_322_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room401.cpp b/engines/mads/madsv2/forest/rooms/room401.cpp
index 4ea88c25dec..63aa362b881 100644
--- a/engines/mads/madsv2/forest/rooms/room401.cpp
+++ b/engines/mads/madsv2/forest/rooms/room401.cpp
@@ -78,8 +78,9 @@ void room_401_preload() {
 	room_parser_code_pointer = room_401_parser;
 	room_daemon_code_pointer = room_401_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room402.cpp b/engines/mads/madsv2/forest/rooms/room402.cpp
index 99e263ca4e3..4956ac04328 100644
--- a/engines/mads/madsv2/forest/rooms/room402.cpp
+++ b/engines/mads/madsv2/forest/rooms/room402.cpp
@@ -78,8 +78,9 @@ void room_402_preload() {
 	room_parser_code_pointer = room_402_parser;
 	room_daemon_code_pointer = room_402_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room403.cpp b/engines/mads/madsv2/forest/rooms/room403.cpp
index c9e44095b24..e0ddcbd5450 100644
--- a/engines/mads/madsv2/forest/rooms/room403.cpp
+++ b/engines/mads/madsv2/forest/rooms/room403.cpp
@@ -78,8 +78,9 @@ void room_403_preload() {
 	room_parser_code_pointer = room_403_parser;
 	room_daemon_code_pointer = room_403_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room404.cpp b/engines/mads/madsv2/forest/rooms/room404.cpp
index 24d2b042ea2..39c6517e3cb 100644
--- a/engines/mads/madsv2/forest/rooms/room404.cpp
+++ b/engines/mads/madsv2/forest/rooms/room404.cpp
@@ -78,8 +78,9 @@ void room_404_preload() {
 	room_parser_code_pointer = room_404_parser;
 	room_daemon_code_pointer = room_404_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room405.cpp b/engines/mads/madsv2/forest/rooms/room405.cpp
index 282231b5cf3..8a4fb1797b3 100644
--- a/engines/mads/madsv2/forest/rooms/room405.cpp
+++ b/engines/mads/madsv2/forest/rooms/room405.cpp
@@ -78,8 +78,9 @@ void room_405_preload() {
 	room_parser_code_pointer = room_405_parser;
 	room_daemon_code_pointer = room_405_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room420.cpp b/engines/mads/madsv2/forest/rooms/room420.cpp
index 9cda90a1583..6fa3c35a826 100644
--- a/engines/mads/madsv2/forest/rooms/room420.cpp
+++ b/engines/mads/madsv2/forest/rooms/room420.cpp
@@ -78,8 +78,12 @@ void room_420_preload() {
 	room_parser_code_pointer = room_420_parser;
 	room_daemon_code_pointer = room_420_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	if (flags[31] == -4)
+		global[g016] = -1;
+
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room501.cpp b/engines/mads/madsv2/forest/rooms/room501.cpp
index 0856cadf4e6..a0f7801ec0f 100644
--- a/engines/mads/madsv2/forest/rooms/room501.cpp
+++ b/engines/mads/madsv2/forest/rooms/room501.cpp
@@ -78,8 +78,9 @@ void room_501_preload() {
 	room_parser_code_pointer = room_501_parser;
 	room_daemon_code_pointer = room_501_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room503.cpp b/engines/mads/madsv2/forest/rooms/room503.cpp
index 5ecd14289d0..89187a9c0cf 100644
--- a/engines/mads/madsv2/forest/rooms/room503.cpp
+++ b/engines/mads/madsv2/forest/rooms/room503.cpp
@@ -78,8 +78,9 @@ void room_503_preload() {
 	room_parser_code_pointer = room_503_parser;
 	room_daemon_code_pointer = room_503_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room509.cpp b/engines/mads/madsv2/forest/rooms/room509.cpp
index b91d93105db..4bef95018d3 100644
--- a/engines/mads/madsv2/forest/rooms/room509.cpp
+++ b/engines/mads/madsv2/forest/rooms/room509.cpp
@@ -78,8 +78,9 @@ void room_509_preload() {
 	room_parser_code_pointer = room_509_parser;
 	room_daemon_code_pointer = room_509_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global[g016] = -1;
+	global_section_walker();
+	global_section_interface();
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room510.cpp b/engines/mads/madsv2/forest/rooms/room510.cpp
index ec39479b552..546e036c21f 100644
--- a/engines/mads/madsv2/forest/rooms/room510.cpp
+++ b/engines/mads/madsv2/forest/rooms/room510.cpp
@@ -78,8 +78,9 @@ void room_510_preload() {
 	room_parser_code_pointer = room_510_parser;
 	room_daemon_code_pointer = room_510_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/room520.cpp b/engines/mads/madsv2/forest/rooms/room520.cpp
index 3413c1f4a33..dd529a92c73 100644
--- a/engines/mads/madsv2/forest/rooms/room520.cpp
+++ b/engines/mads/madsv2/forest/rooms/room520.cpp
@@ -78,8 +78,9 @@ void room_520_preload() {
 	room_parser_code_pointer = room_520_parser;
 	room_daemon_code_pointer = room_520_daemon;
 
-	section_1_walker();
-	section_1_interface();
+	global_section_walker();
+	global_section_interface();
+	player.walker_must_reload = true;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/section1.cpp b/engines/mads/madsv2/forest/rooms/section1.cpp
index 5f3c90d3fc8..77a32937c40 100644
--- a/engines/mads/madsv2/forest/rooms/section1.cpp
+++ b/engines/mads/madsv2/forest/rooms/section1.cpp
@@ -46,12 +46,6 @@ extern void room_199_preload();
 void section_1_init() {
 }
 
-void section_1_walker() {	
-}
-
-void section_1_interface() {
-}
-
 void section_1_music() {
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/section1.h b/engines/mads/madsv2/forest/rooms/section1.h
index a7155c7ab18..52264344270 100644
--- a/engines/mads/madsv2/forest/rooms/section1.h
+++ b/engines/mads/madsv2/forest/rooms/section1.h
@@ -30,8 +30,6 @@ namespace MADSV2 {
 namespace Forest {
 namespace Rooms {
 
-extern void section_1_walker();
-extern void section_1_interface();
 extern void section_1_music();
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/section2.cpp b/engines/mads/madsv2/forest/rooms/section2.cpp
index 6612dd7ceb6..3e443ae6d49 100644
--- a/engines/mads/madsv2/forest/rooms/section2.cpp
+++ b/engines/mads/madsv2/forest/rooms/section2.cpp
@@ -49,12 +49,6 @@ extern void room_221_preload();
 void section_2_init() {
 }
 
-void section_2_walker() {
-}
-
-void section_2_interface() {
-}
-
 void section_2_music() {
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/section2.h b/engines/mads/madsv2/forest/rooms/section2.h
index 74f6ad42cab..b40b8bc0b96 100644
--- a/engines/mads/madsv2/forest/rooms/section2.h
+++ b/engines/mads/madsv2/forest/rooms/section2.h
@@ -29,8 +29,6 @@ namespace MADSV2 {
 namespace Forest {
 namespace Rooms {
 
-extern void section_2_walker();
-extern void section_2_interface();
 extern void section_2_music();
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/section3.cpp b/engines/mads/madsv2/forest/rooms/section3.cpp
index 001137f0332..0a27ddaa3c8 100644
--- a/engines/mads/madsv2/forest/rooms/section3.cpp
+++ b/engines/mads/madsv2/forest/rooms/section3.cpp
@@ -50,12 +50,6 @@ extern void room_322_preload();
 void section_3_init() {
 }
 
-void section_3_walker() {
-}
-
-void section_3_interface() {
-}
-
 void section_3_music() {
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/section3.h b/engines/mads/madsv2/forest/rooms/section3.h
index c336dae2b96..492bd3dd024 100644
--- a/engines/mads/madsv2/forest/rooms/section3.h
+++ b/engines/mads/madsv2/forest/rooms/section3.h
@@ -29,8 +29,6 @@ namespace MADSV2 {
 namespace Forest {
 namespace Rooms {
 
-extern void section_3_walker();
-extern void section_3_interface();
 extern void section_3_music();
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/section4.cpp b/engines/mads/madsv2/forest/rooms/section4.cpp
index 7c43a725519..0bb6771dfdf 100644
--- a/engines/mads/madsv2/forest/rooms/section4.cpp
+++ b/engines/mads/madsv2/forest/rooms/section4.cpp
@@ -46,12 +46,6 @@ extern void room_420_preload();
 void section_4_init() {
 }
 
-void section_4_walker() {
-}
-
-void section_4_interface() {
-}
-
 void section_4_music() {
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/section4.h b/engines/mads/madsv2/forest/rooms/section4.h
index 0cb39c29ddf..4072cc1eebe 100644
--- a/engines/mads/madsv2/forest/rooms/section4.h
+++ b/engines/mads/madsv2/forest/rooms/section4.h
@@ -29,8 +29,6 @@ namespace MADSV2 {
 namespace Forest {
 namespace Rooms {
 
-extern void section_4_walker();
-extern void section_4_interface();
 extern void section_4_music();
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/forest/rooms/section5.cpp b/engines/mads/madsv2/forest/rooms/section5.cpp
index c9ef2163620..1e37f9c1d8e 100644
--- a/engines/mads/madsv2/forest/rooms/section5.cpp
+++ b/engines/mads/madsv2/forest/rooms/section5.cpp
@@ -46,12 +46,6 @@ void section_5_init() {
 	player.scaling_velocity = true;
 }
 
-void section_5_walker() {
-}
-
-void section_5_interface() {
-}
-
 void section_5_music() {
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/section5.h b/engines/mads/madsv2/forest/rooms/section5.h
index 01aacfde8c5..640903ebbbb 100644
--- a/engines/mads/madsv2/forest/rooms/section5.h
+++ b/engines/mads/madsv2/forest/rooms/section5.h
@@ -29,8 +29,6 @@ namespace MADSV2 {
 namespace Forest {
 namespace Rooms {
 
-extern void section_5_walker();
-extern void section_5_interface();
 extern void section_5_music();
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list