[Scummvm-git-logs] scummvm master -> d32a7b82fac4cd9bd9de9b5a6f57824fc4ecb2cd

dreammaster noreply at scummvm.org
Mon Jun 29 04:44:48 UTC 2026


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
2b0ef0e438 MADS: FOREST: Add missing aainfo macro usage
6e5e50d5e8 MADS: FOREST: Fix Scratch array sizes in room 503
d32a7b82fa MADS: FOresT: Fix Scratch structure for room 308


Commit: 2b0ef0e4382f1f2f9043fa631a395bacb34fc464
    https://github.com/scummvm/scummvm/commit/2b0ef0e4382f1f2f9043fa631a395bacb34fc464
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-29T14:44:32+10:00

Commit Message:
MADS: FOREST: Add missing aainfo macro usage

Changed paths:
    engines/mads/madsv2/forest/rooms/room302.cpp
    engines/mads/madsv2/forest/rooms/room303.cpp
    engines/mads/madsv2/forest/rooms/room404.cpp
    engines/mads/madsv2/forest/rooms/room405.cpp
    engines/mads/madsv2/forest/rooms/room420.cpp


diff --git a/engines/mads/madsv2/forest/rooms/room302.cpp b/engines/mads/madsv2/forest/rooms/room302.cpp
index b7bfd164bdf..d8ba985c7e2 100644
--- a/engines/mads/madsv2/forest/rooms/room302.cpp
+++ b/engines/mads/madsv2/forest/rooms/room302.cpp
@@ -71,7 +71,7 @@ static Scratch scratch;
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
-#define aainfo scratch.animation_info
+#define aainfo local->animation_info
 
 
 static void room_302_init1() {
@@ -92,25 +92,25 @@ static void room_302_init1() {
 
 	if (previous_room == 210) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 66;
 		return;
 	}
 	if (previous_room == 301) {
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 67;
 		return;
 	}
 	if (previous_room == 303 || previous_room == 321) {
 		aa[0] = kernel_run_animation(kernel_name('y', 3), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 90;
 		return;
 	}
 	if (previous_room == 304) {
 		aa[0] = kernel_run_animation(kernel_name('y', 4), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 53;
 		return;
 	}
@@ -214,10 +214,10 @@ static void room_302_init() {
 		}
 
 		for (int i = 0; i < 10; i++) {
-			scratch.animation_info[i]._active = 0;
-			scratch.animation_info[i]._frame = 0;
-			scratch.animation_info[i]._val3 = 0;
-			scratch.animation_info[i]._val4 = 0;
+			aainfo[i]._active = 0;
+			aainfo[i]._frame = 0;
+			aainfo[i]._val3 = 0;
+			aainfo[i]._val4 = 0;
 		}
 
 		if (previous_room != 199) {
@@ -230,11 +230,11 @@ static void room_302_init() {
 }
 
 static void room_302_anim1() {
-	if (kernel_anim[aa[0]].frame != scratch.animation_info[0]._frame)
-		scratch.animation_info[0]._frame = 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) {
-		scratch.animation_info[0]._frame = scratch._92 - 1;
-		kernel_reset_animation(aa[0], scratch.animation_info[0]._frame);
+		aainfo[0]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
 	}
 }
 
@@ -269,7 +269,7 @@ static void room_302_anim2() {
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		global[g017] = -1;
-		scratch.animation_info[1]._active = 0;
+		aainfo[1]._active = 0;
 		kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 		global[g131] = -1;
 		kernel_reset_animation(scratch._9a, 1);
@@ -280,77 +280,77 @@ static void room_302_anim2() {
 
 static void room_302_anim3() {
 	int16 frame = (int16)kernel_anim[aa[2]].frame;
-	if (frame != scratch.animation_info[2]._frame)
-		scratch.animation_info[2]._frame = frame;
+	if (frame != aainfo[2]._frame)
+		aainfo[2]._frame = frame;
 
 	if (global[player_hyperwalked] == -1 && frame <= 20) {
-		scratch.animation_info[2]._frame = 20;
+		aainfo[2]._frame = 20;
 		kernel_reset_animation(aa[2], 20);
 		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 		return;
 	}
 	if (global[player_hyperwalked] == -1 || frame == 40) {
-		scratch.animation_info[2]._frame = 39;
+		aainfo[2]._frame = 39;
 		kernel_reset_animation(aa[2], 39);
 		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 	}
 }
 
 static void room_302_anim4() {
-	if (kernel_anim[aa[3]].frame != scratch.animation_info[3]._frame)
-		scratch.animation_info[3]._frame = kernel_anim[aa[3]].frame;
+	if (kernel_anim[aa[3]].frame != aainfo[3]._frame)
+		aainfo[3]._frame = kernel_anim[aa[3]].frame;
 }
 
 static void room_302_anim5() {
 	int16 frame = (int16)kernel_anim[aa[4]].frame;
 
-	if (frame != scratch.animation_info[4]._frame) {
-		scratch.animation_info[4]._frame = frame;
+	if (frame != aainfo[4]._frame) {
+		aainfo[4]._frame = frame;
 
 		if (scratch._a8 == 1) {
 			if (frame == 13) {
-				if (scratch.animation_info[4]._val3 == 23) {
-					scratch.animation_info[4]._frame = 11;
+				if (aainfo[4]._val3 == 23) {
+					aainfo[4]._frame = 11;
 					kernel_reset_animation(aa[4], 11);
 				}
 			} else if (frame <= 13) {
 				if (frame == 5) {
-					scratch.animation_info[4]._val3 = 21;
+					aainfo[4]._val3 = 21;
 					digi_play_build_ii('e', 8, 1);
 					scratch._a4 = 5;
 				} else if (frame == 10) {
-					if (scratch.animation_info[4]._val3 == 21) {
-						scratch.animation_info[4]._frame = 5;
+					if (aainfo[4]._val3 == 21) {
+						aainfo[4]._frame = 5;
 						kernel_reset_animation(aa[4], 5);
 					}
 				}
 			}
 		} else if (scratch._a8 == 2) {
 			if (frame == 61) {
-				if (scratch.animation_info[4]._val3 == 23) {
-					scratch.animation_info[4]._frame = 58;
+				if (aainfo[4]._val3 == 23) {
+					aainfo[4]._frame = 58;
 					kernel_reset_animation(aa[4], 58);
 				}
 			} else if (frame <= 61) {
 				if (frame == 53) {
-					scratch.animation_info[4]._val3 = 21;
+					aainfo[4]._val3 = 21;
 					digi_play_build_ii('e', 9, 1);
 					scratch._a4 = 500;
 				} else if (frame == 57) {
-					if (scratch.animation_info[4]._val3 == 21) {
-						scratch.animation_info[4]._frame = 53;
+					if (aainfo[4]._val3 == 21) {
+						aainfo[4]._frame = 53;
 						kernel_reset_animation(aa[4], 53);
 					}
 				}
 			}
 		} else if (scratch._a8 == 3) {
 			if (frame == 5) {
-				scratch.animation_info[4]._val3 = 21;
+				aainfo[4]._val3 = 21;
 				digi_play_build(302, 'e', 2, 1);
 				scratch._a4 = 50;
 			} else if (frame == 12) {
-				if (scratch.animation_info[4]._val3 == 21) {
-					scratch.animation_info[4]._frame = 5;
+				if (aainfo[4]._val3 == 21) {
+					aainfo[4]._frame = 5;
 					kernel_reset_animation(aa[4], 5);
 				}
 			}
@@ -362,41 +362,41 @@ static void room_302_anim5() {
 
 	int16 a4 = scratch._a4;
 	if (a4 == 50) {
-		scratch.animation_info[4]._val3 = 19;
-		scratch.animation_info[4]._frame = 11;
+		aainfo[4]._val3 = 19;
+		aainfo[4]._frame = 11;
 		kernel_reset_animation(aa[4], 11);
 		scratch._a4 = -1;
 	} else if (a4 < 50) {
 		if (a4 == 5) {
 			kernel_timing_trigger(30, 28);
-			scratch.animation_info[4]._val3 = 23;
+			aainfo[4]._val3 = 23;
 			scratch._a4 = 6;
 		} else if (a4 == 6) {
-			scratch.animation_info[4]._val3 = 21;
-			scratch.animation_info[4]._frame = 5;
+			aainfo[4]._val3 = 21;
+			aainfo[4]._frame = 5;
 			kernel_reset_animation(aa[4], 5);
 			digi_play_build_ii('e', 10, 1);
 			scratch._a4 = 7;
 		} else if (a4 == 7) {
-			scratch.animation_info[4]._val3 = 19;
-			scratch.animation_info[4]._frame = 11;
+			aainfo[4]._val3 = 19;
+			aainfo[4]._frame = 11;
 			kernel_reset_animation(aa[4], 11);
 			scratch._a4 = -1;
 		}
 	} else {
 		if (a4 == 500) {
 			kernel_timing_trigger(30, 28);
-			scratch.animation_info[4]._val3 = 23;
+			aainfo[4]._val3 = 23;
 			scratch._a4 = 501;
 		} else if (a4 == 501) {
-			scratch.animation_info[4]._val3 = 21;
-			scratch.animation_info[4]._frame = 53;
+			aainfo[4]._val3 = 21;
+			aainfo[4]._frame = 53;
 			kernel_reset_animation(aa[4], 53);
 			digi_play_build_ii('e', 10, 1);
 			scratch._a4 = 502;
 		} else if (a4 == 502) {
-			scratch.animation_info[4]._val3 = 19;
-			scratch.animation_info[4]._frame = 58;
+			aainfo[4]._val3 = 19;
+			aainfo[4]._frame = 58;
 			kernel_reset_animation(aa[4], 58);
 			scratch._a4 = -1;
 		}
@@ -406,23 +406,23 @@ static void room_302_anim5() {
 static void room_302_anim6() {
 	int16 frame = (int16)kernel_anim[aa[5]].frame;
 
-	if (frame != scratch.animation_info[5]._frame) {
-		scratch.animation_info[5]._frame = frame;
+	if (frame != aainfo[5]._frame) {
+		aainfo[5]._frame = frame;
 
 		if (scratch._a8 == 1) {
 			if (frame == 58) {
-				if (scratch.animation_info[5]._val3 == 23) {
+				if (aainfo[5]._val3 == 23) {
 					digi_play_build(101, '_', 1, 2);
 					scratch._a4 = 58;
 				}
 			} else if (frame < 58) {
 				if (frame == 5) {
-					scratch.animation_info[5]._val3 = 21;
+					aainfo[5]._val3 = 21;
 					digi_play_build(302, 'e', 3, 1);
 					scratch._a4 = 5;
 				} else if (frame == 10) {
-					if (scratch.animation_info[5]._val3 == 21) {
-						scratch.animation_info[5]._frame = 5;
+					if (aainfo[5]._val3 == 21) {
+						aainfo[5]._frame = 5;
 						kernel_reset_animation(aa[5], 5);
 					}
 				}
@@ -432,8 +432,8 @@ static void room_302_anim6() {
 
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
 		if (scratch._a4 == 5) {
-			scratch.animation_info[5]._val3 = 23;
-			scratch.animation_info[5]._frame = 11;
+			aainfo[5]._val3 = 23;
+			aainfo[5]._frame = 11;
 			kernel_reset_animation(aa[5], 11);
 			scratch._a4 = -1;
 			kernel_seq_delete(seq[0]);
@@ -451,41 +451,41 @@ static void room_302_anim7() {
 	int16 result = -1;
 	int16 frame = (int16)kernel_anim[aa[6]].frame;
 
-	if (frame != scratch.animation_info[6]._frame) {
-		scratch.animation_info[6]._frame = frame;
+	if (frame != aainfo[6]._frame) {
+		aainfo[6]._frame = frame;
 
 		if (scratch._98 == 104 && scratch._a8 == 1) {
 			if (frame == 72) {
-				if (scratch.animation_info[6]._val3 == 23) {
-					scratch.animation_info[6]._frame = 70;
+				if (aainfo[6]._val3 == 23) {
+					aainfo[6]._frame = 70;
 					kernel_reset_animation(aa[6], 70);
 				}
 			} else if (frame < 72) {
 				if (frame == 14) {
-					if (scratch.animation_info[6]._val3 == 23) {
-						scratch.animation_info[6]._frame = 12;
+					if (aainfo[6]._val3 == 23) {
+						aainfo[6]._frame = 12;
 						kernel_reset_animation(aa[6], 12);
 					}
 				} else if (frame < 14) {
 					if (frame == 6) {
-						scratch.animation_info[6]._val3 = 22;
+						aainfo[6]._val3 = 22;
 						digi_play_build(302, 'r', 1, 1);
 						scratch._a4 = 6;
 						scratch._a8 = 1;
 					} else if (frame == 11) {
-						if (scratch.animation_info[6]._val3 == 22) {
-							scratch.animation_info[6]._frame = 6;
+						if (aainfo[6]._val3 == 22) {
+							aainfo[6]._frame = 6;
 							kernel_reset_animation(aa[6], 6);
 						}
 					}
 				} else {
 					if (frame == 66) {
-						scratch.animation_info[6]._val3 = 22;
+						aainfo[6]._val3 = 22;
 						digi_play_build(302, 'r', 2, 1);
 						scratch._a4 = 66;
 					} else if (frame == 70) {
-						if (scratch.animation_info[6]._val3 == 22) {
-							scratch.animation_info[6]._frame = 66;
+						if (aainfo[6]._val3 == 22) {
+							aainfo[6]._frame = 66;
 							kernel_reset_animation(aa[6], 66);
 						}
 					}
@@ -495,7 +495,7 @@ static void room_302_anim7() {
 	}
 
 	if (result >= 0) {
-		scratch.animation_info[6]._frame = result;
+		aainfo[6]._frame = result;
 		kernel_reset_animation(aa[6], result);
 	}
 
@@ -504,31 +504,31 @@ static void room_302_anim7() {
 
 	int16 a4 = scratch._a4;
 	if (a4 == 67) {
-		scratch.animation_info[6]._val3 = 19;
-		scratch.animation_info[6]._frame = 71;
+		aainfo[6]._val3 = 19;
+		aainfo[6]._frame = 71;
 		kernel_reset_animation(aa[6], 71);
 		scratch._a4 = -1;
 	} else if (a4 > 67) {
 		return;
 	} else if (a4 == 6) {
 		kernel_timing_trigger(45, 28);
-		scratch.animation_info[6]._val3 = 23;
+		aainfo[6]._val3 = 23;
 		scratch._a4 = 7;
 	} else if (a4 == 7) {
-		scratch.animation_info[6]._val3 = 19;
-		scratch.animation_info[6]._frame = 12;
+		aainfo[6]._val3 = 19;
+		aainfo[6]._frame = 12;
 		kernel_reset_animation(aa[6], 12);
 		scratch._a4 = -1;
 	} else if (a4 == 66) {
 		kernel_timing_trigger(45, 28);
-		scratch.animation_info[6]._val3 = 23;
+		aainfo[6]._val3 = 23;
 		scratch._a4 = 67;
 	}
 }
 
 static void room_302_anim8() {
-	if (kernel_anim[aa[7]].frame != scratch.animation_info[7]._frame)
-		scratch.animation_info[7]._frame = kernel_anim[aa[7]].frame;
+	if (kernel_anim[aa[7]].frame != aainfo[7]._frame)
+		aainfo[7]._frame = kernel_anim[aa[7]].frame;
 }
 
 static void room_302_daemon() {
@@ -564,7 +564,7 @@ static void room_302_daemon() {
 	case 24:
 		if (scratch._8c == 3) {
 			aa[2] = kernel_run_animation(kernel_name('E', 1), 102);
-			scratch.animation_info[2]._active = -1;
+			aainfo[2]._active = -1;
 			scratch._96 = 2;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._9a);
@@ -572,14 +572,14 @@ static void room_302_daemon() {
 		} else if (scratch._8c == 5) {
 			if (scratch._a8 == 1) {
 				aa[4] = kernel_run_animation(kernel_name('F', 1), 102);
-				scratch.animation_info[4]._active = -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);
-				scratch.animation_info[4]._active = -1;
+				aainfo[4]._active = -1;
 				scratch._96 = 4;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_synch(KERNEL_ANIM, aa[4], KERNEL_ANIM, scratch._9a);
@@ -588,8 +588,8 @@ static void room_302_daemon() {
 		} else if (scratch._8c == 7) {
 			global[player_score] = 0;
 			aa[7] = kernel_run_animation(kernel_name('Z', 2), 106);
-			scratch.animation_info[7]._active = -1;
-			scratch.animation_info[7]._frame = 0;
+			aainfo[7]._active = -1;
+			aainfo[7]._frame = 0;
 			scratch._96 = 7;
 			player.walker_visible = true;
 			player.commands_allowed = false;
@@ -599,7 +599,7 @@ static void room_302_daemon() {
 			global[g133] = 1;
 		} else if (scratch._8c == 8) {
 			aa[4] = kernel_run_animation(kernel_name('E', 1), 102);
-			scratch.animation_info[4]._active = -1;
+			aainfo[4]._active = -1;
 			scratch._96 = 4;
 			scratch._a8 = 3;
 			kernel_reset_animation(scratch._9a, 0);
@@ -611,7 +611,7 @@ static void room_302_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[3] = kernel_run_animation(kernel_name('R', 1), 101);
-			scratch.animation_info[3]._active = -1;
+			aainfo[3]._active = -1;
 			scratch._94 = 3;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, scratch._9c);
@@ -636,8 +636,8 @@ static void room_302_daemon() {
 				player.commands_allowed = false;
 				global[player_score] = 0;
 				aa[6] = kernel_run_animation(kernel_name('R', 1), 105);
-				scratch.animation_info[6]._active = -1;
-				scratch.animation_info[6]._frame = 0;
+				aainfo[6]._active = -1;
+				aainfo[6]._frame = 0;
 				kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
 				scratch._98 = 104;
 				kernel_seq_delete(seq[1]);
@@ -654,7 +654,7 @@ static void room_302_daemon() {
 			} else if (a90 == 6) {
 				if (scratch._a8 == 1) {
 					aa[5] = kernel_run_animation(kernel_name('P', 1), 103);
-					scratch.animation_info[5]._active = -1;
+					aainfo[5]._active = -1;
 					scratch._98 = 5;
 					kernel_reset_animation(scratch._9a, 0);
 					kernel_reset_animation(scratch._9c, 0);
@@ -682,14 +682,14 @@ static void room_302_daemon() {
 
 	case 100:
 		kernel_abort_animation(aa[0]);
-		scratch.animation_info[0]._active = 0;
+		aainfo[0]._active = 0;
 		if (flags[16] == 1) {
 			kernel_synch(KERNEL_PLAYER, 0, KERNEL_NOW, 0);
 			scratch._a4 = 1;
 			global[g017] = 0;
 			player.walker_visible = false;
 			global[g154] = 0;
-			scratch.animation_info[1]._active = -1;
+			aainfo[1]._active = -1;
 			global[g131] = -1;
 			global[g141] = -1;
 			kernel_reset_animation(scratch._9a, 1);
@@ -725,7 +725,7 @@ static void room_302_daemon() {
 
 	case 101:
 		kernel_abort_animation(aa[scratch._94]);
-		scratch.animation_info[scratch._94]._active = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -734,7 +734,7 @@ static void room_302_daemon() {
 
 	case 102:
 		kernel_abort_animation(aa[scratch._96]);
-		scratch.animation_info[scratch._96]._active = 0;
+		aainfo[scratch._96]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -745,7 +745,7 @@ static void room_302_daemon() {
 	case 103:
 		if (scratch._a8 == 1) {
 			kernel_abort_animation(aa[5]);
-			scratch.animation_info[5]._active = 0;
+			aainfo[5]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
@@ -768,7 +768,7 @@ static void room_302_daemon() {
 				kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
 			} else if (scratch._a8 == 2) {
 				kernel_abort_animation(aa[6]);
-				scratch.animation_info[6]._active = 0;
+				aainfo[6]._active = 0;
 				global[g131] = -1;
 				global[g141] = -1;
 				kernel_reset_animation(scratch._9a, 1);
@@ -795,8 +795,8 @@ static void room_302_daemon() {
 
 	case 106:
 		kernel_abort_animation(aa[7]);
-		scratch.animation_info[7]._active = 0;
-		scratch.animation_info[7]._frame = 0;
+		aainfo[7]._active = 0;
+		aainfo[7]._frame = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -814,14 +814,14 @@ static void room_302_daemon() {
 	global_anim1(1, scratch._9a, global[g131], &global[g132]);
 	global_anim2(3, scratch._9c, global[g141], &global[g142]);
 
-	if (scratch.animation_info[0]._active) room_302_anim1();
-	if (scratch.animation_info[3]._active) room_302_anim4();
-	if (scratch.animation_info[2]._active) room_302_anim3();
-	if (scratch.animation_info[4]._active) room_302_anim5();
-	if (scratch.animation_info[5]._active) room_302_anim6();
-	if (scratch.animation_info[6]._active) room_302_anim7();
-	if (scratch.animation_info[7]._active) room_302_anim8();
-	if (scratch.animation_info[1]._active) room_302_anim2();
+	if (aainfo[0]._active) room_302_anim1();
+	if (aainfo[3]._active) room_302_anim4();
+	if (aainfo[2]._active) room_302_anim3();
+	if (aainfo[4]._active) room_302_anim5();
+	if (aainfo[5]._active) room_302_anim6();
+	if (aainfo[6]._active) room_302_anim7();
+	if (aainfo[7]._active) room_302_anim8();
+	if (aainfo[1]._active) room_302_anim2();
 
 	if (global[walker_converse_now])
 		global_anim3(scratch._a6, &global[g008]);
@@ -933,7 +933,7 @@ void room_302_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 (auto &ai : scratch.animation_info) ai.synchronize(s);
+	for (auto &ai : aainfo) ai.synchronize(s);
 	s.syncAsSint16LE(scratch._8c);
 	s.syncAsSint16LE(scratch._8e);
 	s.syncAsSint16LE(scratch._90);
diff --git a/engines/mads/madsv2/forest/rooms/room303.cpp b/engines/mads/madsv2/forest/rooms/room303.cpp
index e47599c33eb..d100e787a22 100644
--- a/engines/mads/madsv2/forest/rooms/room303.cpp
+++ b/engines/mads/madsv2/forest/rooms/room303.cpp
@@ -58,41 +58,41 @@ static Scratch scratch;
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
-#define aainfo scratch.animation_info
+#define aainfo local->animation_info
 
 static void room_303_init1();
 static void room_303_init2();
 
 static void room_303_anim1() {
-	if (kernel_anim[aa[0]].frame != scratch.animation_info[0]._frame)
-		scratch.animation_info[0]._frame = 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) {
-		scratch.animation_info[0]._frame = scratch._92 - 1;
-		kernel_reset_animation(aa[0], scratch.animation_info[0]._frame);
+		aainfo[0]._frame = scratch._92 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
 	}
 }
 
 static void room_303_anim2() {
-	int16 ax = scratch.animation_info[1]._frame;
+	int16 ax = aainfo[1]._frame;
 	if (kernel_anim[aa[1]].frame != ax) {
 		ax = kernel_anim[aa[1]].frame;
-		scratch.animation_info[1]._frame = ax;
+		aainfo[1]._frame = ax;
 	}
 
 	if (global[player_hyperwalked] == -1) {
 		if (ax <= 23) {
-			scratch.animation_info[1]._frame = 23;
+			aainfo[1]._frame = 23;
 			kernel_reset_animation(aa[1], 23);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 			return;
 		}
-		scratch.animation_info[1]._frame = 44;
+		aainfo[1]._frame = 44;
 		kernel_reset_animation(aa[1], 44);
 		kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 	} else {
 		if (ax == 45) {
-			scratch.animation_info[1]._frame = 44;
+			aainfo[1]._frame = 44;
 			kernel_reset_animation(aa[1], 44);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 		}
@@ -100,25 +100,25 @@ static void room_303_anim2() {
 }
 
 static void room_303_anim3() {
-	int16 ax = scratch.animation_info[2]._frame;
+	int16 ax = aainfo[2]._frame;
 	if (kernel_anim[aa[2]].frame != ax) {
 		ax = kernel_anim[aa[2]].frame;
-		scratch.animation_info[2]._frame = ax;
+		aainfo[2]._frame = ax;
 	}
 
 	if (global[player_hyperwalked] == -1) {
 		if (ax <= 23) {
-			scratch.animation_info[2]._frame = 23;
+			aainfo[2]._frame = 23;
 			kernel_reset_animation(aa[2], 23);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 			return;
 		}
-		scratch.animation_info[2]._frame = 44;
+		aainfo[2]._frame = 44;
 		kernel_reset_animation(aa[2], 44);
 		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 	} else {
 		if (ax == 45) {
-			scratch.animation_info[2]._frame = 44;
+			aainfo[2]._frame = 44;
 			kernel_reset_animation(aa[2], 44);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 		}
@@ -132,79 +132,79 @@ static void room_303_anim4_trigger() {
 	int16 a8 = scratch._a8;
 	if (a8 == 7) {
 		kernel_timing_trigger(30, 28);
-		scratch.animation_info[3]._val3 = 13;
+		aainfo[3]._val3 = 13;
 		scratch._a8 = 8;
 	} else if (a8 == 8) {
-		scratch.animation_info[3]._val3 = 11;
-		scratch.animation_info[3]._frame = 7;
+		aainfo[3]._val3 = 11;
+		aainfo[3]._frame = 7;
 		kernel_reset_animation(aa[3], 7);
 		digi_play_build_ii('e', 10, 1);
 		scratch._a8 = 9;
 	} else if (a8 == 9) {
-		scratch.animation_info[3]._val3 = 14;
-		scratch.animation_info[3]._frame = 13;
+		aainfo[3]._val3 = 14;
+		aainfo[3]._frame = 13;
 		kernel_reset_animation(aa[3], 13);
 		scratch._a8 = -1;
 	} else if (a8 == 43) {
 		kernel_timing_trigger(30, 28);
-		scratch.animation_info[3]._val3 = 13;
+		aainfo[3]._val3 = 13;
 		scratch._a8 = 44;
 	} else if (a8 == 44) {
-		scratch.animation_info[3]._val3 = 11;
-		scratch.animation_info[3]._frame = 43;
+		aainfo[3]._val3 = 11;
+		aainfo[3]._frame = 43;
 		kernel_reset_animation(aa[3], 43);
 		digi_play_build_ii('e', 10, 1);
 		scratch._a8 = 45;
 	} else if (a8 == 45) {
-		scratch.animation_info[3]._val3 = 14;
-		scratch.animation_info[3]._frame = 49;
+		aainfo[3]._val3 = 14;
+		aainfo[3]._frame = 49;
 		kernel_reset_animation(aa[3], 49);
 		scratch._a8 = -1;
 	}
 }
 
 static void room_303_anim4() {
-	int16 ax = scratch.animation_info[3]._frame;
+	int16 ax = aainfo[3]._frame;
 	if (kernel_anim[aa[3]].frame == ax) {
 		room_303_anim4_trigger();
 		return;
 	}
 
 	ax = kernel_anim[aa[3]].frame;
-	scratch.animation_info[3]._frame = ax;
+	aainfo[3]._frame = ax;
 
 	if (scratch._a6 == 1) {
 		if (ax == 15) {
-			if (scratch.animation_info[3]._val3 == 13) {
-				scratch.animation_info[3]._frame = 13;
+			if (aainfo[3]._val3 == 13) {
+				aainfo[3]._frame = 13;
 				kernel_reset_animation(aa[3], 13);
 			}
 		} else if (ax < 15) {
 			if (ax == 7) {
-				scratch.animation_info[3]._val3 = 11;
+				aainfo[3]._val3 = 11;
 				digi_play_build_ii('e', 2, 1);
 				scratch._a8 = 7;
 			} else if (ax == 12) {
-				if (scratch.animation_info[3]._val3 == 11) {
-					scratch.animation_info[3]._frame = 7;
+				if (aainfo[3]._val3 == 11) {
+					aainfo[3]._frame = 7;
 					kernel_reset_animation(aa[3], 7);
 				}
 			}
 		}
 	} else if (scratch._a6 == 2) {
 		if (ax == 51) {
-			if (scratch.animation_info[3]._val3 == 13) {
-				scratch.animation_info[3]._frame = 49;
+			if (aainfo[3]._val3 == 13) {
+				aainfo[3]._frame = 49;
 				kernel_reset_animation(aa[3], 49);
 			}
 		} else if (ax < 51) {
 			if (ax == 43) {
-				scratch.animation_info[3]._val3 = 11;
+				aainfo[3]._val3 = 11;
 				digi_play_build_ii('e', 4, 1);
 				scratch._a8 = 43;
 			} else if (ax == 48) {
-				if (scratch.animation_info[3]._val3 == 11) {
-					scratch.animation_info[3]._frame = 43;
+				if (aainfo[3]._val3 == 11) {
+					aainfo[3]._frame = 43;
 					kernel_reset_animation(aa[3], 43);
 				}
 			}
@@ -218,13 +218,13 @@ static void room_303_anim6_trigger() {
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
 		int16 a8 = scratch._a8;
 		if (a8 == 9) {
-			scratch.animation_info[5]._val3 = 13;
-			scratch.animation_info[5]._frame = 16;
+			aainfo[5]._val3 = 13;
+			aainfo[5]._frame = 16;
 			kernel_reset_animation(aa[5], 16);
 			scratch._a8 = -1;
 		} else if (a8 == 40) {
-			scratch.animation_info[5]._val3 = 13;
-			scratch.animation_info[5]._frame = 10;
+			aainfo[5]._val3 = 13;
+			aainfo[5]._frame = 10;
 			kernel_reset_animation(aa[5], 10);
 			scratch._a8 = -1;
 		}
@@ -238,33 +238,33 @@ static void room_303_anim6_trigger() {
 }
 
 static void room_303_anim6() {
-	int16 ax = scratch.animation_info[5]._frame;
+	int16 ax = aainfo[5]._frame;
 	if (kernel_anim[aa[5]].frame == ax) {
 		room_303_anim6_trigger();
 		return;
 	}
 
 	ax = kernel_anim[aa[5]].frame;
-	scratch.animation_info[5]._frame = ax;
+	aainfo[5]._frame = ax;
 
 	if (scratch._a6 == 1) {
 		if (ax == 48) {
-			if (scratch.animation_info[5]._val3 == 13) {
+			if (aainfo[5]._val3 == 13) {
 				digi_play_build(101, '_', 1, 2);
 				scratch._a8 = 48;
 			}
 		} else if (ax < 48) {
 			if (ax == 9) {
-				scratch.animation_info[5]._val3 = 11;
+				aainfo[5]._val3 = 11;
 				digi_play_build(303, 'e', 2, 1);
 				scratch._a8 = 9;
 			} else if (ax == 15) {
-				if (scratch.animation_info[5]._val3 == 11) {
-					scratch.animation_info[5]._frame = 9;
+				if (aainfo[5]._val3 == 11) {
+					aainfo[5]._frame = 9;
 					kernel_reset_animation(aa[5], 9);
 				}
 			} else if (ax == 35) {
-				if (scratch.animation_info[5]._val3 == 13) {
+				if (aainfo[5]._val3 == 13) {
 					digi_play_build(303, '_', 1, 2);
 					scratch._a8 = 35;
 				}
@@ -278,12 +278,12 @@ static void room_303_anim6() {
 			if (ax == 2) {
 				kernel_seq_delete(seq[0]);
 			} else if (ax == 4) {
-				scratch.animation_info[5]._val3 = 11;
+				aainfo[5]._val3 = 11;
 				digi_play_build(303, 'e', 700, 1);
 				scratch._a8 = 40;
 			} else if (ax == 9) {
-				if (scratch.animation_info[5]._val3 == 11) {
-					scratch.animation_info[5]._frame = 4;
+				if (aainfo[5]._val3 == 11) {
+					aainfo[5]._frame = 4;
 					kernel_reset_animation(aa[5], 4);
 				}
 			}
@@ -296,16 +296,16 @@ static void room_303_anim6() {
 static void room_303_anim7() {
 	int16 result = -1;
 
-	if (kernel_anim[aa[6]].frame != scratch.animation_info[6]._frame) {
+	if (kernel_anim[aa[6]].frame != aainfo[6]._frame) {
 		int16 frame = kernel_anim[aa[6]].frame;
-		scratch.animation_info[6]._frame = frame;
+		aainfo[6]._frame = frame;
 
 		bool check_val3 = (frame == 1) ||
 		                  (frame >= 5 && frame <= 10) ||
 		                  (frame >= 12 && frame <= 16);
 
 		if (check_val3) {
-			int16 v = scratch.animation_info[6]._val3;
+			int16 v = aainfo[6]._val3;
 			if (v == 0)
 				result = 0;
 			else if (v == 1)
@@ -316,7 +316,7 @@ static void room_303_anim7() {
 
 		if (result >= 0) {
 			kernel_reset_animation(aa[6], result);
-			scratch.animation_info[6]._frame = result;
+			aainfo[6]._frame = result;
 		}
 	}
 
@@ -329,54 +329,54 @@ static void room_303_anim7() {
 
 	switch (idx) {
 	case 0:
-		scratch.animation_info[7]._val3 = 0;
+		aainfo[7]._val3 = 0;
 		kernel_timing_trigger(30, 28);
 		scratch._a8++;
 		break;
 	case 1:
-		scratch.animation_info[6]._val3 = 1;
+		aainfo[6]._val3 = 1;
 		digi_play_build(303, 'r', 1, 1);
 		scratch._a8++;
 		break;
 	case 2:
-		scratch.animation_info[6]._val3 = 0;
+		aainfo[6]._val3 = 0;
 		kernel_timing_trigger(30, 28);
 		scratch._a8++;
 		break;
 	case 3:
-		scratch.animation_info[7]._val3 = 3;
+		aainfo[7]._val3 = 3;
 		digi_play_build(303, 'f', 2, 1);
 		scratch._a8++;
 		break;
 	case 4:
-		scratch.animation_info[7]._val3 = 0;
+		aainfo[7]._val3 = 0;
 		kernel_timing_trigger(30, 28);
 		scratch._a8++;
 		break;
 	case 5:
-		scratch.animation_info[6]._val3 = 2;
+		aainfo[6]._val3 = 2;
 		digi_play_build(303, 'e', 1, 1);
 		scratch._a8++;
 		break;
 	case 6:
-		scratch.animation_info[6]._val3 = 0;
+		aainfo[6]._val3 = 0;
 		kernel_timing_trigger(30, 28);
 		scratch._a8++;
 		break;
 	case 7:
-		scratch.animation_info[7]._val3 = 3;
+		aainfo[7]._val3 = 3;
 		digi_play_build(303, 'f', 3, 1);
 		scratch._a8++;
 		break;
 	case 8:
-		scratch.animation_info[7]._val3 = 0;
+		aainfo[7]._val3 = 0;
 		kernel_timing_trigger(30, 28);
 		scratch._a8++;
 		break;
 	case 9:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[7]);
-		scratch.animation_info[7]._active = 0;
+		aainfo[7]._active = 0;
 		aa[7] = kernel_run_animation(kernel_name('t', 6), 105);
 		break;
 	}
@@ -385,16 +385,16 @@ static void room_303_anim7() {
 static void room_303_anim8() {
 	int16 var_2 = -1;
 
-	if (kernel_anim[aa[7]].frame == scratch.animation_info[7]._frame)
+	if (kernel_anim[aa[7]].frame == aainfo[7]._frame)
 		return;
 
 	int16 frame = kernel_anim[aa[7]].frame;
-	scratch.animation_info[7]._frame = frame;
+	aainfo[7]._frame = frame;
 
 	bool check_val3 = (frame == 1) || (frame >= 4 && frame <= 10);
 
 	if (check_val3) {
-		int16 v = scratch.animation_info[7]._val3;
+		int16 v = aainfo[7]._val3;
 		if (v == 0)
 			var_2 = 0;
 		else if (v == 3)
@@ -403,7 +403,7 @@ static void room_303_anim8() {
 
 	if (var_2 >= 0) {
 		kernel_reset_animation(aa[7], var_2);
-		scratch.animation_info[7]._frame = var_2;
+		aainfo[7]._frame = var_2;
 	}
 }
 
@@ -440,10 +440,10 @@ static void room_303_init() {
 		}
 
 		for (int i = 0; i < 10; i++) {
-			scratch.animation_info[i]._active = 0;
-			scratch.animation_info[i]._frame = 1;
-			scratch.animation_info[i]._val3 = 0;
-			scratch.animation_info[i]._val4 = 0;
+			aainfo[i]._active = 0;
+			aainfo[i]._frame = 1;
+			aainfo[i]._val3 = 0;
+			aainfo[i]._val4 = 0;
 		}
 
 		if (previous_room != 199 && flags[34] != 3)
@@ -488,7 +488,7 @@ static void room_303_init1() {
 
 	if (previous_room == 302) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 51;
 		return;
 	}
@@ -544,7 +544,7 @@ static void room_303_init2() {
 
 	if (previous_room == 302) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 51;
 		return;
 	}
@@ -577,7 +577,7 @@ static void room_303_daemon() {
 	case 100:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[0]);
-		scratch.animation_info[0]._active = 0;
+		aainfo[0]._active = 0;
 		if (global[g065]) {
 			global[g131] = -1;
 			global[g141] = -1;
@@ -593,8 +593,8 @@ static void room_303_daemon() {
 		} else {
 			global[g065] = -1;
 			aa[6] = kernel_run_animation(kernel_name('t', 5), 0);
-			scratch.animation_info[6]._active = -1;
-			scratch.animation_info[6]._val3 = 0;
+			aainfo[6]._active = -1;
+			aainfo[6]._val3 = 0;
 			aa[7] = kernel_run_animation(kernel_name('t', 1), 104);
 		}
 		break;
@@ -602,7 +602,7 @@ static void room_303_daemon() {
 	case 101:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[scratch._94]);
-		scratch.animation_info[scratch._94]._active = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -612,7 +612,7 @@ static void room_303_daemon() {
 	case 102:
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[scratch._96]);
-		scratch.animation_info[scratch._96]._active = 0;
+		aainfo[scratch._96]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -623,7 +623,7 @@ static void room_303_daemon() {
 		if (scratch._a6 == 1) {
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[5]);
-			scratch.animation_info[5]._active = 0;
+			aainfo[5]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
@@ -636,7 +636,7 @@ static void room_303_daemon() {
 		} else if (scratch._a6 == 2) {
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[5]);
-			scratch.animation_info[5]._active = 0;
+			aainfo[5]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
@@ -662,7 +662,7 @@ static void room_303_daemon() {
 		kernel_abort_animation(aa[7]);
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[6]);
-		scratch.animation_info[6]._active = 0;
+		aainfo[6]._active = 0;
 		global[g141] = -1;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
@@ -681,8 +681,8 @@ static void room_303_daemon() {
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[7]);
 		aa[7] = kernel_run_animation(kernel_name('t', 2), 0);
-		scratch.animation_info[7]._active = -1;
-		scratch.animation_info[7]._val3 = 0;
+		aainfo[7]._active = -1;
+		aainfo[7]._val3 = 0;
 		kernel_timing_trigger(10, 107);
 		break;
 
@@ -725,7 +725,7 @@ static void room_303_daemon() {
 	case 24:
 		if (scratch._8c == 3) {
 			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
-			scratch.animation_info[1]._active = -1;
+			aainfo[1]._active = -1;
 			scratch._96 = 1;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._9a);
@@ -738,7 +738,7 @@ static void room_303_daemon() {
 			} else {
 				break;
 			}
-			scratch.animation_info[3]._active = -1;
+			aainfo[3]._active = -1;
 			scratch._96 = 3;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, scratch._9a);
@@ -749,7 +749,7 @@ static void room_303_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			scratch.animation_info[2]._active = -1;
+			aainfo[2]._active = -1;
 			scratch._94 = 2;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._9c);
@@ -766,7 +766,7 @@ static void room_303_daemon() {
 		} else if (scratch._90 == 6) {
 			if (scratch._a6 == 1) {
 				aa[5] = kernel_run_animation(kernel_name('P', 1), 103);
-				scratch.animation_info[5]._active = -1;
+				aainfo[5]._active = -1;
 				scratch._98 = 5;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_reset_animation(scratch._9c, 0);
@@ -775,7 +775,7 @@ static void room_303_daemon() {
 				global[g143] = 1;
 			} else if (scratch._a6 == 2) {
 				aa[5] = kernel_run_animation(kernel_name('P', 2), 103);
-				scratch.animation_info[5]._active = -1;
+				aainfo[5]._active = -1;
 				scratch._98 = 5;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_reset_animation(scratch._9c, 0);
@@ -800,7 +800,7 @@ static void room_303_daemon() {
 	case 107:
 		digi_play_build(303, 'f', 1, 1);
 		scratch._a8 = 100;
-		scratch.animation_info[7]._val3 = 3;
+		aainfo[7]._val3 = 3;
 		break;
 
 	default:
@@ -816,13 +816,13 @@ static void room_303_daemon() {
 	if (scratch._aa >= 0)
 		global_anim3(scratch._aa, &global[g008]);
 
-	if (scratch.animation_info[0]._active) room_303_anim1();
-	if (scratch.animation_info[2]._active) room_303_anim3();
-	if (scratch.animation_info[1]._active) room_303_anim2();
-	if (scratch.animation_info[3]._active) room_303_anim4();
-	if (scratch.animation_info[5]._active) room_303_anim6();
-	if (scratch.animation_info[6]._active) room_303_anim7();
-	if (scratch.animation_info[7]._active) room_303_anim8();
+	if (aainfo[0]._active) room_303_anim1();
+	if (aainfo[2]._active) room_303_anim3();
+	if (aainfo[1]._active) room_303_anim2();
+	if (aainfo[3]._active) room_303_anim4();
+	if (aainfo[5]._active) room_303_anim6();
+	if (aainfo[6]._active) room_303_anim7();
+	if (aainfo[7]._active) room_303_anim8();
 }
 
 static void room_303_pre_parser() {
@@ -921,7 +921,7 @@ void room_303_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 (auto &ai : scratch.animation_info) ai.synchronize(s);
+	for (auto &ai : aainfo) ai.synchronize(s);
 	s.syncAsSint16LE(scratch._8c);
 	s.syncAsSint16LE(scratch._8e);
 	s.syncAsSint16LE(scratch._90);
diff --git a/engines/mads/madsv2/forest/rooms/room404.cpp b/engines/mads/madsv2/forest/rooms/room404.cpp
index 1282dea6a17..ad4f418b476 100644
--- a/engines/mads/madsv2/forest/rooms/room404.cpp
+++ b/engines/mads/madsv2/forest/rooms/room404.cpp
@@ -70,6 +70,7 @@ static Scratch scratch;
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
+#define aainfo local->animation_info
 
 
 static void room_404_init1() {
@@ -120,12 +121,12 @@ static void room_404_init1() {
 		player.walker_visible = true;
 	} else if (previous_room == 401) {
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 74;
 		global[g082] = 0;
 	} else if (previous_room == 405) {
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 97;
 		global[g081] = -1;
 		global[g082] = 0;
@@ -147,10 +148,10 @@ static void room_404_init1() {
 
 static void room_404_init() {
 	for (int16 count = 0; count < 10; count++) {
-		scratch.animation_info[count]._active = 0;
-		scratch.animation_info[count]._frame = 0;
-		scratch.animation_info[count]._val3 = 0;
-		scratch.animation_info[count]._val4 = 0;
+		aainfo[count]._active = 0;
+		aainfo[count]._frame = 0;
+		aainfo[count]._val3 = 0;
+		aainfo[count]._val4 = 0;
 	}
 	scratch._aa = 0;
 
@@ -158,12 +159,12 @@ static void room_404_init() {
 	ss[1] = kernel_load_series(kernel_name('p', 3), 0);
 
 	aa[7] = kernel_run_animation(kernel_name('N', 1), 105);
-	scratch.animation_info[7]._active = -1;
+	aainfo[7]._active = -1;
 
 	aa[8] = kernel_run_animation(kernel_name('N', 2), 105);
-	scratch.animation_info[8]._active = -1;
+	aainfo[8]._active = -1;
 
-	if (scratch.animation_info[7]._active == -1) {
+	if (aainfo[7]._active == -1) {
 		kernel.trigger_setup_mode = 1;
 		kernel_timing_trigger(1, 110);
 	}
@@ -195,10 +196,10 @@ static void room_404_init() {
 		}
 
 		for (int16 count = 0; count < 10; count++) {
-			scratch.animation_info[count]._active = 0;
-			scratch.animation_info[count]._frame = 1;
-			scratch.animation_info[count]._val3 = 0;
-			scratch.animation_info[count]._val4 = 0;
+			aainfo[count]._active = 0;
+			aainfo[count]._frame = 1;
+			aainfo[count]._val3 = 0;
+			aainfo[count]._val4 = 0;
 		}
 
 		if (previous_room != 199 && flags[29] != 3) {
@@ -211,52 +212,52 @@ static void room_404_init() {
 
 static void room_404_anim1() {
 	int16 cur = kernel_anim[scratch.animation[0]].frame;
-	if (cur != scratch.animation_info[0]._frame)
-		scratch.animation_info[0]._frame = cur;
+	if (cur != aainfo[0]._frame)
+		aainfo[0]._frame = cur;
 	if (global[player_hyperwalked] != -1)
 		return;
 	int16 f = scratch._92 - 1;
-	scratch.animation_info[0]._frame = f;
+	aainfo[0]._frame = f;
 	kernel_reset_animation(scratch.animation[0], f);
 }
 
 static void room_404_anim2() {
 	int16 cur = kernel_anim[scratch.animation[9]].frame;
-	if (cur != scratch.animation_info[9]._frame) {
-		scratch.animation_info[9]._frame = cur;
+	if (cur != aainfo[9]._frame) {
+		aainfo[9]._frame = cur;
 		if (flags[29] == 1) {
 			if (cur == 4) {
-				scratch.animation_info[9]._val3 = 11;
+				aainfo[9]._val3 = 11;
 				digi_play_build(404, 'e', 1, 1);
 				scratch._a6 = 1;
 			} else if (cur == 7) {
-				if (scratch.animation_info[9]._val3 == 11) {
-					scratch.animation_info[9]._frame = 5;
+				if (aainfo[9]._val3 == 11) {
+					aainfo[9]._frame = 5;
 					kernel_reset_animation(scratch.animation[9], 5);
 				}
 			}
 		} else {
 			if (cur == 18) {
-				if (scratch.animation_info[9]._val3 == 10) {
-					scratch.animation_info[9]._frame = 15;
+				if (aainfo[9]._val3 == 10) {
+					aainfo[9]._frame = 15;
 					kernel_reset_animation(scratch.animation[9], 15);
 				}
 			} else if (cur < 18) {
 				if (cur == 2) {
-					scratch.animation_info[9]._frame = 13;
+					aainfo[9]._frame = 13;
 					kernel_reset_animation(scratch.animation[9], 13);
 				} else if (cur == 4) {
-					if (scratch.animation_info[9]._val3 == 13) {
-						scratch.animation_info[9]._frame = 3;
+					if (aainfo[9]._val3 == 13) {
+						aainfo[9]._frame = 3;
 						kernel_reset_animation(scratch.animation[9], 3);
 					}
 				} else if (cur == 7) {
-					if (scratch.animation_info[9]._val3 == 11) {
-						scratch.animation_info[9]._frame = 5;
+					if (aainfo[9]._val3 == 11) {
+						aainfo[9]._frame = 5;
 						kernel_reset_animation(scratch.animation[9], 5);
 					}
 				} else if (cur == 14) {
-					scratch.animation_info[9]._val3 = 10;
+					aainfo[9]._val3 = 10;
 					digi_play_build(404, 'b', 5, 1);
 					scratch._a6 = 1;
 				}
@@ -268,8 +269,8 @@ static void room_404_anim2() {
 		return;
 
 	if (flags[29] == 1) {
-		scratch.animation_info[9]._val3 = 13;
-		scratch.animation_info[9]._frame = 18;
+		aainfo[9]._val3 = 13;
+		aainfo[9]._frame = 18;
 		kernel_reset_animation(scratch.animation[9], 18);
 		scratch._a6 = -1;
 		return;
@@ -278,19 +279,19 @@ static void room_404_anim2() {
 	if (scratch._a6 == 1) {
 		global[g154] = 0;
 		kernel_timing_trigger(30, 28);
-		scratch.animation_info[9]._val3 = 13;
-		scratch.animation_info[9]._frame = 3;
+		aainfo[9]._val3 = 13;
+		aainfo[9]._frame = 3;
 		kernel_reset_animation(scratch.animation[9], 3);
 		scratch._a6 = 2;
 	} else if (scratch._a6 == 2) {
-		scratch.animation_info[9]._val3 = 11;
-		scratch.animation_info[9]._frame = 5;
+		aainfo[9]._val3 = 11;
+		aainfo[9]._frame = 5;
 		kernel_reset_animation(scratch.animation[9], 5);
 		scratch._a6 = 3;
 		digi_play_build(404, 'e', 5, 1);
 	} else if (scratch._a6 == 3) {
-		scratch.animation_info[9]._val3 = 13;
-		scratch.animation_info[9]._frame = 18;
+		aainfo[9]._val3 = 13;
+		aainfo[9]._frame = 18;
 		kernel_reset_animation(scratch.animation[9], 18);
 		scratch._a6 = -1;
 	}
@@ -298,27 +299,27 @@ static void room_404_anim2() {
 
 static void room_404_anim3() {
 	int16 cur = kernel_anim[scratch.animation[2]].frame;
-	if (cur != scratch.animation_info[2]._frame)
-		scratch.animation_info[2]._frame = cur;
+	if (cur != aainfo[2]._frame)
+		aainfo[2]._frame = cur;
 }
 
 static void room_404_anim4() {
 	int16 cur = kernel_anim[scratch.animation[1]].frame;
-	if (cur != scratch.animation_info[1]._frame)
-		scratch.animation_info[1]._frame = cur;
+	if (cur != aainfo[1]._frame)
+		aainfo[1]._frame = cur;
 }
 
 static void room_404_anim5() {
 	int16 cur = kernel_anim[scratch.animation[3]].frame;
-	if (cur != scratch.animation_info[3]._frame) {
-		scratch.animation_info[3]._frame = cur;
+	if (cur != aainfo[3]._frame) {
+		aainfo[3]._frame = cur;
 		if (cur == 5) {
-			scratch.animation_info[3]._val3 = 11;
+			aainfo[3]._val3 = 11;
 			digi_play_build(404, 'e', 3, 1);
 			scratch._a6 = 5;
 		} else if (cur == 9) {
-			if (scratch.animation_info[3]._val3 == 11) {
-				scratch.animation_info[3]._frame = 5;
+			if (aainfo[3]._val3 == 11) {
+				aainfo[3]._frame = 5;
 				kernel_reset_animation(scratch.animation[3], 5);
 			}
 		}
@@ -328,8 +329,8 @@ static void room_404_anim5() {
 		return;
 
 	if (scratch._a6 == 5) {
-		scratch.animation_info[3]._val3 = 14;
-		scratch.animation_info[3]._frame = 9;
+		aainfo[3]._val3 = 14;
+		aainfo[3]._frame = 9;
 		kernel_reset_animation(scratch.animation[3], 9);
 		scratch._a6 = -1;
 	}
@@ -337,25 +338,25 @@ static void room_404_anim5() {
 
 static void room_404_anim6() {
 	int16 cur = kernel_anim[scratch.animation[5]].frame;
-	if (cur != scratch.animation_info[5]._frame) {
-		scratch.animation_info[5]._frame = cur;
+	if (cur != aainfo[5]._frame) {
+		aainfo[5]._frame = cur;
 		if (cur == 72) {
-			if (scratch.animation_info[5]._val3 == 11) {
-				scratch.animation_info[5]._frame = 67;
+			if (aainfo[5]._val3 == 11) {
+				aainfo[5]._frame = 67;
 				kernel_reset_animation(scratch.animation[5], 67);
 			}
 		} else if (cur < 72) {
 			if (cur == 5) {
-				scratch.animation_info[5]._val3 = 10;
+				aainfo[5]._val3 = 10;
 				digi_play_build(404, 'b', 2, 1);
 				scratch._a6 = 5;
 			} else if (cur == 10) {
-				if (scratch.animation_info[5]._val3 == 10) {
-					scratch.animation_info[5]._frame = 5;
+				if (aainfo[5]._val3 == 10) {
+					aainfo[5]._frame = 5;
 					kernel_reset_animation(scratch.animation[5], 5);
 				}
 			} else if (cur == 67) {
-				scratch.animation_info[5]._val3 = 11;
+				aainfo[5]._val3 = 11;
 				digi_play_build(404, 'e', 2, 1);
 				scratch._a6 = 67;
 			}
@@ -366,13 +367,13 @@ static void room_404_anim6() {
 		return;
 
 	if (scratch._a6 == 5) {
-		scratch.animation_info[5]._val3 = 13;
-		scratch.animation_info[5]._frame = 11;
+		aainfo[5]._val3 = 13;
+		aainfo[5]._frame = 11;
 		kernel_reset_animation(scratch.animation[5], 11);
 		scratch._a6 = -1;
 	} else if (scratch._a6 == 67) {
-		scratch.animation_info[5]._val3 = 13;
-		scratch.animation_info[5]._frame = 73;
+		aainfo[5]._val3 = 13;
+		aainfo[5]._frame = 73;
 		kernel_reset_animation(scratch.animation[5], 73);
 		scratch._a6 = -1;
 	}
@@ -380,24 +381,24 @@ static void room_404_anim6() {
 
 static void room_404_anim7() {
 	int16 cur = kernel_anim[scratch.animation[6]].frame;
-	if (cur != scratch.animation_info[6]._frame) {
-		scratch.animation_info[6]._frame = cur;
+	if (cur != aainfo[6]._frame) {
+		aainfo[6]._frame = cur;
 		if (cur == 57) {
-			if (scratch.animation_info[6]._val3 == 10) {
-				scratch.animation_info[6]._frame = 52;
+			if (aainfo[6]._val3 == 10) {
+				aainfo[6]._frame = 52;
 				kernel_reset_animation(scratch.animation[6], 52);
 			}
 		} else if (cur > 57) {
 			// no action
 		} else if (cur < 40) {
 			if (cur == 6) {
-				scratch.animation_info[6]._val3 = 11;
+				aainfo[6]._val3 = 11;
 				digi_play_build(404, 'e', 4, 1);
 				scratch._a6 = 6;
 				kernel_seq_delete(scratch.sequence[0]);
 			} else if (cur == 11) {
-				if (scratch.animation_info[6]._val3 == 11) {
-					scratch.animation_info[6]._frame = 6;
+				if (aainfo[6]._val3 == 11) {
+					aainfo[6]._frame = 6;
 					kernel_reset_animation(scratch.animation[6], 6);
 				}
 			} else if (cur == 39) {
@@ -412,7 +413,7 @@ static void room_404_anim7() {
 						digi_play_build(404, '_', 2, 2);
 						scratch._a6 = 39;
 					}
-					scratch.animation_info[6]._frame = 39;
+					aainfo[6]._frame = 39;
 					kernel_reset_animation(scratch.animation[6], 39);
 					scratch._aa++;
 				}
@@ -421,7 +422,7 @@ static void room_404_anim7() {
 				digi_play_build(404, '_', 3, 2);
 				scratch._a6 = -1;
 			} else if (cur == 52) {
-				scratch.animation_info[6]._val3 = 10;
+				aainfo[6]._val3 = 10;
 				digi_play_build(404, 'b', 3, 1);
 				scratch._a6 = 52;
 				scratch.sequence[1] = kernel_seq_stamp(scratch.sprite[1], 0, -1);
@@ -434,13 +435,13 @@ static void room_404_anim7() {
 
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
 		if (scratch._a6 == 6) {
-			scratch.animation_info[6]._val3 = 13;
-			scratch.animation_info[6]._frame = 11;
+			aainfo[6]._val3 = 13;
+			aainfo[6]._frame = 11;
 			kernel_reset_animation(scratch.animation[6], 11);
 			scratch._a6 = -1;
 		} else if (scratch._a6 == 52) {
-			scratch.animation_info[6]._val3 = 13;
-			scratch.animation_info[6]._frame = 57;
+			aainfo[6]._val3 = 13;
+			aainfo[6]._frame = 57;
 			kernel_reset_animation(scratch.animation[6], 57);
 			scratch._a6 = -1;
 		}
@@ -452,10 +453,10 @@ static void room_404_anim7() {
 
 static void room_404_anim8() {
 	int16 cur = kernel_anim[scratch.animation[7]].frame;
-	if (cur != scratch.animation_info[7]._frame) {
-		scratch.animation_info[7]._frame = cur;
+	if (cur != aainfo[7]._frame) {
+		aainfo[7]._frame = cur;
 		if (cur == 99) {
-			scratch.animation_info[7]._frame = 1;
+			aainfo[7]._frame = 1;
 			kernel_reset_animation(scratch.animation[7], 1);
 		} else if (cur < 99) {
 			int threshold = -1;
@@ -466,8 +467,8 @@ static void room_404_anim8() {
 			else if (cur == 1 || cur == 28 || cur == 31 || cur == 94)
 				threshold = 80;
 			if (threshold >= 0 && imath_random(0, 100) > threshold) {
-				scratch.animation_info[7]._frame--;
-				kernel_reset_animation(scratch.animation[7], scratch.animation_info[7]._frame);
+				aainfo[7]._frame--;
+				kernel_reset_animation(scratch.animation[7], aainfo[7]._frame);
 			}
 		}
 	}
@@ -478,33 +479,33 @@ static void room_404_anim8() {
 
 static void room_404_anim9() {
 	int16 cur = kernel_anim[scratch.animation[8]].frame;
-	if (cur == scratch.animation_info[8]._frame)
+	if (cur == aainfo[8]._frame)
 		return;
-	scratch.animation_info[8]._frame = cur;
+	aainfo[8]._frame = cur;
 
 	if (cur == 49) {
 		if (imath_random(0, 100) > 50) {
-			scratch.animation_info[8]._frame--;
-			kernel_reset_animation(scratch.animation[8], scratch.animation_info[8]._frame);
+			aainfo[8]._frame--;
+			kernel_reset_animation(scratch.animation[8], aainfo[8]._frame);
 		} else {
-			scratch.animation_info[8]._frame = 21;
+			aainfo[8]._frame = 21;
 			kernel_reset_animation(scratch.animation[8], 21);
 		}
 	} else if (cur < 49) {
 		if (cur == 19 || cur == 30 || cur == 40) {
 			if (imath_random(0, 100) > 20) {
-				scratch.animation_info[8]._frame--;
-				kernel_reset_animation(scratch.animation[8], scratch.animation_info[8]._frame);
+				aainfo[8]._frame--;
+				kernel_reset_animation(scratch.animation[8], aainfo[8]._frame);
 			}
 		} else if (cur == 34 || cur == 46) {
 			if (imath_random(0, 100) > 40) {
-				scratch.animation_info[8]._frame--;
-				kernel_reset_animation(scratch.animation[8], scratch.animation_info[8]._frame);
+				aainfo[8]._frame--;
+				kernel_reset_animation(scratch.animation[8], aainfo[8]._frame);
 			}
 		} else if (cur == 20 || cur == 48) {
 			if (imath_random(0, 100) > 60) {
-				scratch.animation_info[8]._frame -= 2;
-				kernel_reset_animation(scratch.animation[8], scratch.animation_info[8]._frame);
+				aainfo[8]._frame -= 2;
+				kernel_reset_animation(scratch.animation[8], aainfo[8]._frame);
 			}
 		}
 	}
@@ -534,7 +535,7 @@ static void room_404_daemon() {
 	case 24:
 		if (scratch._8c == 3) {
 			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
-			scratch.animation_info[1]._active = -1;
+			aainfo[1]._active = -1;
 			scratch._96 = 1;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._9a);
@@ -542,7 +543,7 @@ static void room_404_daemon() {
 			kernel_timing_trigger(1, 110);
 		} else if (scratch._8c == 7) {
 			aa[3] = kernel_run_animation(kernel_name('L', 2), 102);
-			scratch.animation_info[3]._active = -1;
+			aainfo[3]._active = -1;
 			scratch._96 = 3;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, scratch._9a);
@@ -554,7 +555,7 @@ static void room_404_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			scratch.animation_info[2]._active = -1;
+			aainfo[2]._active = -1;
 			scratch._94 = 2;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._9c);
@@ -571,7 +572,7 @@ static void room_404_daemon() {
 				// TODO: loc_6B318
 			} else if (scratch._90 == 6) {
 				aa[5] = kernel_run_animation(kernel_name('L', 1), 103);
-				scratch.animation_info[5]._active = -1;
+				aainfo[5]._active = -1;
 				scratch._98 = 5;
 				kernel_reset_animation(scratch._9a, 0);
 				kernel_reset_animation(scratch._9c, 0);
@@ -600,13 +601,13 @@ static void room_404_daemon() {
 
 	case 100:
 		kernel_abort_animation(aa[0]);
-		scratch.animation_info[0]._active = 0;
+		aainfo[0]._active = 0;
 		if (previous_room == 401) {
 			global[g084] = 15;
 			if (flags[29] == 1 || global[g081]) {
 				aa[9] = kernel_run_animation(kernel_name('t', 1), 107);
 				kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[0]);
-				scratch.animation_info[9]._active = -1;
+				aainfo[9]._active = -1;
 				player.commands_allowed = false;
 				kernel_timing_trigger(1, 110);
 			} else {
@@ -643,7 +644,7 @@ static void room_404_daemon() {
 
 	case 101:
 		kernel_abort_animation(aa[scratch._94]);
-		scratch.animation_info[scratch._94]._active = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -654,7 +655,7 @@ static void room_404_daemon() {
 
 	case 102:
 		kernel_abort_animation(aa[scratch._96]);
-		scratch.animation_info[scratch._96]._active = 0;
+		aainfo[scratch._96]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -666,7 +667,7 @@ static void room_404_daemon() {
 	case 103:
 		if (scratch._a4 == 1) {
 			kernel_abort_animation(aa[5]);
-			scratch.animation_info[5]._active = 0;
+			aainfo[5]._active = 0;
 			kernel_abort_animation(scratch._9a);
 			kernel_abort_animation(scratch._9c);
 			global[g084] = 16;
@@ -692,13 +693,13 @@ static void room_404_daemon() {
 			kernel_timing_trigger(1, 110);
 		} else if (scratch._a4 == 2) {
 			kernel_abort_animation(aa[6]);
-			scratch.animation_info[6]._active = 0;
+			aainfo[6]._active = 0;
 			aa[6] = kernel_run_animation(kernel_name('L', 4), 103);
 			scratch._a4 = 3;
 			kernel_timing_trigger(1, 110);
 		} else if (scratch._a4 == 3) {
 			kernel_abort_animation(aa[6]);
-			scratch.animation_info[6]._active = 0;
+			aainfo[6]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
@@ -732,7 +733,7 @@ static void room_404_daemon() {
 
 	case 107:
 		kernel_abort_animation(aa[9]);
-		scratch.animation_info[9]._active = 0;
+		aainfo[9]._active = 0;
 		if (flags[29] == 1) {
 			global[g141] = -1;
 			kernel_reset_animation(scratch._9c, 1);
@@ -792,13 +793,13 @@ static void room_404_daemon() {
 	if (scratch._a2)
 		kernel_random_frame(scratch._9e, &global[g151], global[g154]);
 
-	if (scratch.animation_info[0]._active)  room_404_anim1();
-	if (scratch.animation_info[9]._active)  room_404_anim2();
-	if (scratch.animation_info[2]._active)  room_404_anim3();
-	if (scratch.animation_info[1]._active)  room_404_anim4();
-	if (scratch.animation_info[3]._active)  room_404_anim5();
-	if (scratch.animation_info[5]._active)  room_404_anim6();
-	if (scratch.animation_info[6]._active)  room_404_anim7();
+	if (aainfo[0]._active)  room_404_anim1();
+	if (aainfo[9]._active)  room_404_anim2();
+	if (aainfo[2]._active)  room_404_anim3();
+	if (aainfo[1]._active)  room_404_anim4();
+	if (aainfo[3]._active)  room_404_anim5();
+	if (aainfo[5]._active)  room_404_anim6();
+	if (aainfo[6]._active)  room_404_anim7();
 
 	if (global[walker_converse_now])
 		global_anim3(scratch._a0, &global[g008]);
@@ -927,7 +928,7 @@ void room_404_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);
+	for (AnimationInfo &ai : aainfo) ai.synchronize(s);
 	s.syncAsSint16LE(scratch._8c);
 	s.syncAsSint16LE(scratch._8e);
 	s.syncAsSint16LE(scratch._90);
diff --git a/engines/mads/madsv2/forest/rooms/room405.cpp b/engines/mads/madsv2/forest/rooms/room405.cpp
index 877132af830..eb752b0a11a 100644
--- a/engines/mads/madsv2/forest/rooms/room405.cpp
+++ b/engines/mads/madsv2/forest/rooms/room405.cpp
@@ -65,7 +65,7 @@ static Scratch scratch;
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
-#define aainfo scratch.animation_info
+#define aainfo local->animation_info
 
 
 static void room_405_init1() {
@@ -103,12 +103,12 @@ static void room_405_init1() {
 	} else if (previous_room == 404) {
 		global[g009] = -1;
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 106;
 	} else if (previous_room == 501) {
 		global[g009] = -1;
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		scratch.animation_info[0]._active = -1;
+		aainfo[0]._active = -1;
 		scratch._92 = 44;
 	} else {
 		global[g131] = -1;
@@ -127,7 +127,7 @@ static void room_405_init() {
 	global[g009] = -1;
 
 	aa[7] = kernel_run_animation(kernel_name('N', 1), 105);
-	scratch.animation_info[7]._active = -1;
+	aainfo[7]._active = -1;
 	kernel.trigger_setup_mode = 1;
 	kernel_timing_trigger(1, 106);
 
@@ -140,10 +140,10 @@ static void room_405_init() {
 		}
 
 		for (int16 count = 0; count < 10; count++) {
-			scratch.animation_info[count]._active = 0;
-			scratch.animation_info[count]._frame = 1;
-			scratch.animation_info[count]._val3 = 0;
-			scratch.animation_info[count]._val4 = 0;
+			aainfo[count]._active = 0;
+			aainfo[count]._frame = 1;
+			aainfo[count]._val3 = 0;
+			aainfo[count]._val4 = 0;
 		}
 
 		if (previous_room != 199 && flags[30] != 3) {
@@ -156,26 +156,26 @@ static void room_405_init() {
 
 static void room_405_anim1() {
 	int16 cur = kernel_anim[aa[0]].frame;
-	if (cur != scratch.animation_info[0]._frame)
-		scratch.animation_info[0]._frame = cur;
+	if (cur != aainfo[0]._frame)
+		aainfo[0]._frame = cur;
 	if (global[player_hyperwalked] != -1)
 		return;
 	int16 f = scratch._92 - 1;
-	scratch.animation_info[0]._frame = f;
+	aainfo[0]._frame = f;
 	kernel_reset_animation(aa[0], f);
 }
 
 static void room_405_anim2() {
 	int16 cur = kernel_anim[aa[6]].frame;
-	if (cur != scratch.animation_info[6]._frame) {
-		scratch.animation_info[6]._frame = cur;
+	if (cur != aainfo[6]._frame) {
+		aainfo[6]._frame = cur;
 		if (cur == 5) {
-			scratch.animation_info[6]._val3 = 12;
+			aainfo[6]._val3 = 12;
 			digi_play_build(404, 'r', 1, 1);
 			scratch._a2 = 5;
 		} else if (cur == 10) {
-			if (scratch.animation_info[6]._val3 == 12) {
-				scratch.animation_info[6]._frame = 5;
+			if (aainfo[6]._val3 == 12) {
+				aainfo[6]._frame = 5;
 				kernel_reset_animation(aa[6], 5);
 			}
 		}
@@ -185,8 +185,8 @@ static void room_405_anim2() {
 		return;
 
 	if (scratch._a2 == 5) {
-		scratch.animation_info[6]._val3 = 13;
-		scratch.animation_info[6]._frame = 10;
+		aainfo[6]._val3 = 13;
+		aainfo[6]._frame = 10;
 		kernel_reset_animation(aa[6], 10);
 		scratch._a2 = -1;
 	}
@@ -194,37 +194,37 @@ static void room_405_anim2() {
 
 static void room_405_anim3() {
 	int16 cur = kernel_anim[aa[2]].frame;
-	if (cur != scratch.animation_info[2]._frame)
-		scratch.animation_info[2]._frame = cur;
+	if (cur != aainfo[2]._frame)
+		aainfo[2]._frame = cur;
 }
 
 static void room_405_anim4() {
 	int16 cur = kernel_anim[aa[1]].frame;
-	if (cur != scratch.animation_info[1]._frame)
-		scratch.animation_info[1]._frame = cur;
+	if (cur != aainfo[1]._frame)
+		aainfo[1]._frame = cur;
 }
 
 static void room_405_anim5() {
 	int16 cur = kernel_anim[aa[5]].frame;
-	if (cur != scratch.animation_info[5]._frame) {
-		scratch.animation_info[5]._frame = cur;
+	if (cur != aainfo[5]._frame) {
+		aainfo[5]._frame = cur;
 		if (cur == 21) {
-			if (scratch.animation_info[5]._val3 == 11) {
-				scratch.animation_info[5]._frame = 16;
+			if (aainfo[5]._val3 == 11) {
+				aainfo[5]._frame = 16;
 				kernel_reset_animation(aa[5], 16);
 			}
 		} else if (cur < 21) {
 			if (cur == 6) {
-				scratch.animation_info[5]._val3 = 10;
+				aainfo[5]._val3 = 10;
 				digi_play_build(404, 'b', 4, 1);
 				scratch._a2 = 6;
 			} else if (cur == 11) {
-				if (scratch.animation_info[5]._val3 == 10) {
-					scratch.animation_info[5]._frame = 6;
+				if (aainfo[5]._val3 == 10) {
+					aainfo[5]._frame = 6;
 					kernel_reset_animation(aa[5], 6);
 				}
 			} else if (cur == 16) {
-				scratch.animation_info[5]._val3 = 11;
+				aainfo[5]._val3 = 11;
 				digi_play_build(404, 'e', 5, 1);
 				scratch._a2 = 16;
 			}
@@ -235,13 +235,13 @@ static void room_405_anim5() {
 		return;
 
 	if (scratch._a2 == 6) {
-		scratch.animation_info[5]._val3 = 13;
-		scratch.animation_info[5]._frame = 11;
+		aainfo[5]._val3 = 13;
+		aainfo[5]._frame = 11;
 		kernel_reset_animation(aa[5], 11);
 		scratch._a2 = -1;
 	} else if (scratch._a2 == 16) {
-		scratch.animation_info[5]._val3 = 13;
-		scratch.animation_info[5]._frame = 21;
+		aainfo[5]._val3 = 13;
+		aainfo[5]._frame = 21;
 		kernel_reset_animation(aa[5], 21);
 		scratch._a2 = -1;
 	}
@@ -249,10 +249,10 @@ static void room_405_anim5() {
 
 static void room_405_anim6() {
 	int16 cur = kernel_anim[aa[7]].frame;
-	if (cur != scratch.animation_info[7]._frame) {
-		scratch.animation_info[7]._frame = cur;
+	if (cur != aainfo[7]._frame) {
+		aainfo[7]._frame = cur;
 		if (cur == 99) {
-			scratch.animation_info[7]._frame = 1;
+			aainfo[7]._frame = 1;
 			kernel_reset_animation(aa[7], 1);
 		} else if (cur < 99) {
 			int threshold = -1;
@@ -263,8 +263,8 @@ static void room_405_anim6() {
 			else if (cur == 1 || cur == 28 || cur == 31 || cur == 94)
 				threshold = 80;
 			if (threshold >= 0 && imath_random(0, 100) > threshold) {
-				scratch.animation_info[7]._frame--;
-				kernel_reset_animation(aa[7], scratch.animation_info[7]._frame);
+				aainfo[7]._frame--;
+				kernel_reset_animation(aa[7], aainfo[7]._frame);
 			}
 		}
 	}
@@ -288,7 +288,7 @@ static void room_405_daemon() {
 	case 24:
 		if (scratch._8c == 3) {
 			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
-			scratch.animation_info[1]._active = -1;
+			aainfo[1]._active = -1;
 			scratch._96 = 1;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._9a);
@@ -300,7 +300,7 @@ static void room_405_daemon() {
 	case 25:
 		if (scratch._8e == 2) {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
-			scratch.animation_info[2]._active = -1;
+			aainfo[2]._active = -1;
 			scratch._94 = 2;
 			kernel_reset_animation(scratch._9c, 0);
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._9c);
@@ -317,7 +317,7 @@ static void room_405_daemon() {
 			global[g143] = 1;
 		} else if (scratch._90 == 6) {
 			aa[5] = kernel_run_animation(kernel_name('L', 1), 103);
-			scratch.animation_info[5]._active = -1;
+			aainfo[5]._active = -1;
 			scratch._98 = 5;
 			kernel_reset_animation(scratch._9a, 0);
 			kernel_reset_animation(scratch._9c, 0);
@@ -346,11 +346,11 @@ static void room_405_daemon() {
 
 	case 100:
 		kernel_abort_animation(aa[0]);
-		scratch.animation_info[0]._active = 0;
+		aainfo[0]._active = 0;
 		if (flags[30] == 1) {
 			aa[6] = kernel_run_animation(kernel_name('t', 1), 104);
 			kernel_synch(KERNEL_ANIM, aa[6], KERNEL_ANIM, aa[0]);
-			scratch.animation_info[6]._active = -1;
+			aainfo[6]._active = -1;
 			player.commands_allowed = false;
 			kernel_timing_trigger(1, 106);
 		} else {
@@ -372,7 +372,7 @@ static void room_405_daemon() {
 
 	case 101:
 		kernel_abort_animation(aa[scratch._94]);
-		scratch.animation_info[scratch._94]._active = 0;
+		aainfo[scratch._94]._active = 0;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 		global[g143] = 0;
@@ -383,7 +383,7 @@ static void room_405_daemon() {
 
 	case 102:
 		kernel_abort_animation(aa[scratch._96]);
-		scratch.animation_info[scratch._96]._active = 0;
+		aainfo[scratch._96]._active = 0;
 		kernel_reset_animation(scratch._9a, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
@@ -395,7 +395,7 @@ static void room_405_daemon() {
 	case 103:
 		if (scratch._a0 == 1) {
 			kernel_abort_animation(aa[5]);
-			scratch.animation_info[5]._active = 0;
+			aainfo[5]._active = 0;
 			kernel_reset_animation(scratch._9c, 1);
 			kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
 			global[g143] = 0;
@@ -413,7 +413,7 @@ static void room_405_daemon() {
 
 	case 104:
 		kernel_abort_animation(aa[6]);
-		scratch.animation_info[6]._active = 0;
+		aainfo[6]._active = 0;
 		global[g141] = -1;
 		kernel_reset_animation(scratch._9c, 1);
 		kernel_synch(KERNEL_ANIM, scratch._9c, KERNEL_NOW, 0);
@@ -440,11 +440,11 @@ static void room_405_daemon() {
 	global_anim1(7, scratch._9a, global[g131], &global[g132]);
 	global_anim2(7, scratch._9c, global[g141], &global[g142]);
 
-	if (scratch.animation_info[0]._active) room_405_anim1();
-	if (scratch.animation_info[6]._active) room_405_anim2();
-	if (scratch.animation_info[2]._active) room_405_anim3();
-	if (scratch.animation_info[1]._active) room_405_anim4();
-	if (scratch.animation_info[5]._active) room_405_anim5();
+	if (aainfo[0]._active) room_405_anim1();
+	if (aainfo[6]._active) room_405_anim2();
+	if (aainfo[2]._active) room_405_anim3();
+	if (aainfo[1]._active) room_405_anim4();
+	if (aainfo[5]._active) room_405_anim5();
 
 	if (global[walker_converse_now])
 		global_anim3(scratch._9e, &global[g008]);
@@ -505,7 +505,7 @@ void room_405_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);
+	for (AnimationInfo &ai : aainfo) ai.synchronize(s);
 	s.syncAsSint16LE(scratch._8c);
 	s.syncAsSint16LE(scratch._8e);
 	s.syncAsSint16LE(scratch._90);
diff --git a/engines/mads/madsv2/forest/rooms/room420.cpp b/engines/mads/madsv2/forest/rooms/room420.cpp
index 546d73524eb..d095de2b409 100644
--- a/engines/mads/madsv2/forest/rooms/room420.cpp
+++ b/engines/mads/madsv2/forest/rooms/room420.cpp
@@ -46,37 +46,37 @@ static Scratch scratch;
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
-#define aainfo scratch.animation_info
+#define aainfo local->animation_info
 
 
 static void room_420_anim1() {
 	int16 cur = kernel_anim[aa[0]].frame;
-	if (cur == scratch.animation_info[0]._frame)
+	if (cur == aainfo[0]._frame)
 		return;
-	scratch.animation_info[0]._frame = cur;
+	aainfo[0]._frame = cur;
 	if (cur != 100)
 		return;
 	kernel_abort_animation(aa[0]);
-	scratch.animation_info[0]._active = 0;
+	aainfo[0]._active = 0;
 	aa[1] = kernel_run_animation(kernel_name('T', 2), 0);
-	scratch.animation_info[1]._active = -1;
+	aainfo[1]._active = -1;
 	kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, aa[0]);
 }
 
 static void room_420_anim2() {
 	int16 cur = kernel_anim[aa[1]].frame;
-	if (cur != scratch.animation_info[1]._frame) {
-		scratch.animation_info[1]._frame = cur;
+	if (cur != aainfo[1]._frame) {
+		aainfo[1]._frame = cur;
 		if (cur == 50) {
 			kernel_abort_animation(aa[1]);
-			scratch.animation_info[1]._active = 0;
+			aainfo[1]._active = 0;
 			aa[2] = kernel_run_animation(kernel_name('N', 1), 0);
-			scratch.animation_info[2]._active = -1;
+			aainfo[2]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, aa[1]);
 		} else if (cur < 50) {
 			if (cur == 24) {
 				scratch._8e = 24;
-				scratch.animation_info[1]._val3 = 11;
+				aainfo[1]._val3 = 11;
 				if (global[g066] == 2 || global[g066] == 3)
 					digi_play_build(420, 'e', 1, 1);
 				else
@@ -84,38 +84,38 @@ static void room_420_anim2() {
 			} else if (cur < 24) {
 				if (cur == 5) {
 					scratch._8e = 5;
-					scratch.animation_info[1]._val3 = 9;
+					aainfo[1]._val3 = 9;
 					digi_play_build(420, 'r', 1, 1);
 				} else if (cur == 19) {
-					if (scratch.animation_info[1]._val3 == 9) {
-						scratch.animation_info[1]._frame = 5;
+					if (aainfo[1]._val3 == 9) {
+						aainfo[1]._frame = 5;
 						kernel_reset_animation(aa[1], 5);
 					}
 				} else if (cur == 23) {
-					if (scratch.animation_info[1]._val3 == 12) {
-						scratch.animation_info[1]._frame = 22;
+					if (aainfo[1]._val3 == 12) {
+						aainfo[1]._frame = 22;
 						kernel_reset_animation(aa[1], 22);
 					}
 				}
 			} else {
 				if (cur == 29) {
-					if (scratch.animation_info[1]._val3 == 11) {
-						scratch.animation_info[1]._frame = 24;
+					if (aainfo[1]._val3 == 11) {
+						aainfo[1]._frame = 24;
 						kernel_reset_animation(aa[1], 24);
 					}
 				} else if (cur == 33) {
-					if (scratch.animation_info[1]._val3 == 12) {
-						scratch.animation_info[1]._frame = 32;
+					if (aainfo[1]._val3 == 12) {
+						aainfo[1]._frame = 32;
 						kernel_reset_animation(aa[1], 32);
 					}
 				} else if (cur == 34) {
 					scratch._8e = 34;
-					scratch.animation_info[1]._val3 = 10;
+					aainfo[1]._val3 = 10;
 					digi_play_build(420, 'b', 1, 1);
 					global_midi_play(3);
 				} else if (cur == 39) {
-					if (scratch.animation_info[1]._val3 == 10) {
-						scratch.animation_info[1]._frame = 34;
+					if (aainfo[1]._val3 == 10) {
+						aainfo[1]._frame = 34;
 						kernel_reset_animation(aa[1], 34);
 					}
 				}
@@ -128,28 +128,28 @@ static void room_420_anim2() {
 
 	int16 val = scratch._8e;
 	if (val == 34) {
-		scratch.animation_info[1]._val3 = 13;
-		scratch.animation_info[1]._frame = 39;
+		aainfo[1]._val3 = 13;
+		aainfo[1]._frame = 39;
 		kernel_reset_animation(aa[1], 39);
 		scratch._8e = -1;
 	} else if ((uint16)val > 34) {
 		return;
 	} else if (val == 5) {
-		scratch.animation_info[1]._val3 = 12;
+		aainfo[1]._val3 = 12;
 		kernel_timing_trigger(30, 28);
 		scratch._8e = 6;
 	} else if (val == 6) {
-		scratch.animation_info[1]._val3 = 13;
-		scratch.animation_info[1]._frame = 19;
+		aainfo[1]._val3 = 13;
+		aainfo[1]._frame = 19;
 		kernel_reset_animation(aa[1], 19);
 		scratch._8e = -1;
 	} else if (val == 24) {
-		scratch.animation_info[1]._val3 = 12;
+		aainfo[1]._val3 = 12;
 		kernel_timing_trigger(30, 28);
 		scratch._8e = 25;
 	} else if (val == 25) {
-		scratch.animation_info[1]._val3 = 13;
-		scratch.animation_info[1]._frame = 29;
+		aainfo[1]._val3 = 13;
+		aainfo[1]._frame = 29;
 		kernel_reset_animation(aa[1], 29);
 		scratch._8e = -1;
 	}
@@ -157,35 +157,35 @@ static void room_420_anim2() {
 
 static void room_420_anim3() {
 	int16 cur = kernel_anim[aa[2]].frame;
-	if (cur == scratch.animation_info[2]._frame)
+	if (cur == aainfo[2]._frame)
 		return;
-	scratch.animation_info[2]._frame = cur;
+	aainfo[2]._frame = cur;
 	if (cur != 82)
 		return;
 	kernel_abort_animation(aa[2]);
-	scratch.animation_info[2]._active = 0;
+	aainfo[2]._active = 0;
 	aa[3] = kernel_run_animation(kernel_name('N', 2), 0);
-	scratch.animation_info[3]._active = -1;
+	aainfo[3]._active = -1;
 	kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, aa[2]);
 }
 
 static void room_420_anim4() {
 	int16 cur = kernel_anim[aa[3]].frame;
-	if (cur == scratch.animation_info[3]._frame)
+	if (cur == aainfo[3]._frame)
 		return;
-	scratch.animation_info[3]._frame = cur;
+	aainfo[3]._frame = cur;
 	if (cur == 10) {
-		scratch.animation_info[3]._active = 0;
+		aainfo[3]._active = 0;
 		new_room = 401;
 	} else if ((uint16)cur > 10) {
 		return;
 	} else if (cur == 2) {
-		scratch.animation_info[3]._val4 = 0;
+		aainfo[3]._val4 = 0;
 	} else if (cur == 8) {
-		if (scratch.animation_info[3]._val4 < 20) {
-			scratch.animation_info[3]._frame = 7;
+		if (aainfo[3]._val4 < 20) {
+			aainfo[3]._frame = 7;
 			kernel_reset_animation(aa[3], 7);
-			scratch.animation_info[3]._val4++;
+			aainfo[3]._val4++;
 		}
 	}
 }
@@ -199,26 +199,26 @@ static void room_420_init() {
     player.commands_allowed = false;
 
     for (int16 count = 0; count < 10; count++) {
-        scratch.animation_info[count]._active = 0;
-        scratch.animation_info[count]._frame = -1;
+        aainfo[count]._active = 0;
+        aainfo[count]._frame = -1;
     }
 
     aa[0] = kernel_run_animation(kernel_name('T', 1), 0);
-    scratch.animation_info[0]._active = -1;
+    aainfo[0]._active = -1;
 }
 
 static void room_420_daemon() {
-    if (scratch.animation_info[0]._active) room_420_anim1();
-    if (scratch.animation_info[1]._active) room_420_anim2();
-    if (scratch.animation_info[2]._active) room_420_anim3();
-    if (scratch.animation_info[3]._active) room_420_anim4();
+    if (aainfo[0]._active) room_420_anim1();
+    if (aainfo[1]._active) room_420_anim2();
+    if (aainfo[2]._active) room_420_anim3();
+    if (aainfo[3]._active) room_420_anim4();
 }
 
 void room_420_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);
+	for (AnimationInfo &ai : aainfo) ai.synchronize(s);
 	s.syncAsSint16LE(scratch._8e);
 }
 


Commit: 6e5e50d5e8f542831de9a0d7a4692d2ab8ee2871
    https://github.com/scummvm/scummvm/commit/6e5e50d5e8f542831de9a0d7a4692d2ab8ee2871
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-29T14:44:32+10:00

Commit Message:
MADS: FOREST: Fix Scratch array sizes in room 503

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


diff --git a/engines/mads/madsv2/forest/rooms/room503.cpp b/engines/mads/madsv2/forest/rooms/room503.cpp
index 97676ea7115..8d9ce9de656 100644
--- a/engines/mads/madsv2/forest/rooms/room503.cpp
+++ b/engines/mads/madsv2/forest/rooms/room503.cpp
@@ -44,24 +44,22 @@ 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[13];  /* 13 entries: _val3/_val4 initialised for [0..11],
-	                                      _active/_frame for [1..12]; [10]._val3 = _90 flag,
-	                                      [11]._val3 = _98 flag */
+	int16 sprite[10];                  /* 0x00 — sprite series handles  */
+	int16 sequence[10];                /* 0x14 — sequence handles       */
+	int16 animation[12];               /* 0x28 — animation handles; [10]=N2 anim, [11]=Z1 anim */
+	AnimationInfo animation_info[12];  /* 0x40 — 12 entries, one per animation slot */
+	int16 _pad_a0;                     /* 0xA0 unused */
+	int16 _a2;                         /* 0xA2 visit-count / playback-stage select */
 	int16 _pad_a4;                     /* 0xA4 unused */
-	int16 _a6;                         /* visit-count / playback-stage select */
+	int16 _pad_a6;                     /* 0xA6 unused */
 	int16 _pad_a8;                     /* 0xA8 unused */
-	int16 _pad_aa;                     /* 0xAA unused */
+	int16 _aa;                         /* 0xAA converse-anim handle (kernel_reset_animation / kernel_synch) */
 	int16 _pad_ac;                     /* 0xAC unused */
-	int16 _ae;                         /* converse-anim handle (kernel_reset_animation / kernel_synch) */
-	int16 _pad_b0;                     /* 0xB0 unused */
-	int16 _b2;                         /* converse-anim handle (kernel_abort_animation / global_anim3) */
-	int16 _b4;                         /* ambient audio num arg / uninitialised flag */
-	int16 _b6;                         /* ambient audio playing flag */
-	int16 _b8;                         /* ambient loop active flag */
-	int16 _ba;                         /* playback variant (1 / 2 / -1) */
+	int16 _ae;                         /* 0xAE converse-anim handle (kernel_abort_animation / global_anim3) */
+	int16 _b0;                         /* 0xB0 ambient audio num arg / uninitialised flag */
+	int16 _b2;                         /* 0xB2 ambient audio playing flag */
+	int16 _b4;                         /* 0xB4 ambient loop active flag */
+	int16 _b6;                         /* 0xB6 playback variant (1 / 2 / -1) */
 };
 
 static Scratch scratch;
@@ -90,9 +88,9 @@ static void room_503_anim10();
 static void room_503_anim11();
 
 static void room_503_init() {
-	scratch._b8 = -1;
 	scratch._b4 = -1;
-	scratch._ba = 1;
+	scratch._b0 = -1;
+	scratch._b6 = 1;
 	global[g009] = -1;
 
 	if (previous_room != KERNEL_RESTORING_GAME) {
@@ -100,10 +98,10 @@ static void room_503_init() {
 		player.commands_allowed = false;
 
 		for (int count = 0; count < 12; count++) {
-			aainfo[count]._val3 = 0;
-			aainfo[count]._val4 = -1;
-			aainfo[count + 1]._active = 0;
-			aainfo[count + 1]._frame = 0;
+			aainfo[count]._active = 0;
+			aainfo[count]._frame  = -1;
+			aainfo[count]._val3   = 0;
+			aainfo[count]._val4   = 0;
 		}
 
 		if (previous_room != 199) {
@@ -146,46 +144,46 @@ static void room_503_init1() {
 		if (global[g100] != 0) {
 			global_midi_play(14);
 			viewing_at_y = 22;
-			scratch._ba = 2;
-			aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-			aainfo[10]._val3 = -1;
+			scratch._b6 = 2;
+			aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+			aainfo[10]._active = -1;
 			aa[8] = kernel_run_animation(kernel_name('F', 1), 0);
-			aainfo[8]._val3 = -1;
-			scratch._a6 = 104;
+			aainfo[8]._active = -1;
+			scratch._a2 = 104;
 			flags[33] = 4;
 		} else {
 			aa[9] = kernel_run_animation(kernel_name('N', 1), 106);
-			aainfo[9]._val3 = -1;
-			aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-			aainfo[10]._val3 = -1;
+			aainfo[9]._active = -1;
+			aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+			aainfo[10]._active = -1;
 
-			if (aainfo[9]._val3 == -1) {
+			if (aainfo[9]._active == -1) {
 				kernel.trigger_setup_mode = 1;
 				digi_initial_volume(30);
 				digi_play_build(503, '_', 1, 2);
-				scratch._b8 = 1;
+				scratch._b4 = 1;
 			}
 
-			aainfo[0]._frame = kernel_run_animation(kernel_name('Z', 1), 0);
-			aainfo[11]._val3 = -1;
+			aa[11] = kernel_run_animation(kernel_name('Z', 1), 0);
+			aainfo[11]._active = -1;
 		}
 	} else {
 		aa[9] = kernel_run_animation(kernel_name('N', 1), 106);
-		aainfo[9]._val3 = -1;
-		aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-		aainfo[10]._val3 = -1;
+		aainfo[9]._active = -1;
+		aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+		aainfo[10]._active = -1;
 
-		if (aainfo[9]._val3 == -1) {
+		if (aainfo[9]._active == -1) {
 			kernel.trigger_setup_mode = 1;
 			digi_initial_volume(30);
 			digi_play_build(503, '_', 1, 2);
-			scratch._b8 = 1;
+			scratch._b4 = 1;
 		}
 
 		global_midi_play(6);
 		aa[0] = kernel_run_animation(kernel_name('y', 2), 100);
-		aainfo[0]._val3 = -1;
-		scratch._a6 = 52;
+		aainfo[0]._active = -1;
+		scratch._a2 = 52;
 	}
 }
 
@@ -195,9 +193,9 @@ static void room_503_init2() {
 	player.walker_visible = false;
 	player.commands_allowed = false;
 	mouse_hide();
-	scratch._ba = -1;
+	scratch._b6 = -1;
 	aa[6] = kernel_run_animation(kernel_name('F', 2), 0);
-	aainfo[6]._val3 = -1;
+	aainfo[6]._active = -1;
 }
 
 static void room_503_init3() {
@@ -209,80 +207,80 @@ static void room_503_init3() {
 		if (global[g100] != 0) {
 			global_midi_play(14);
 			viewing_at_y = 22;
-			scratch._ba = 2;
-			aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-			aainfo[10]._val3 = -1;
+			scratch._b6 = 2;
+			aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+			aainfo[10]._active = -1;
 			aa[8] = kernel_run_animation(kernel_name('F', 1), 0);
-			aainfo[8]._val3 = -1;
-			scratch._a6 = 104;
+			aainfo[8]._active = -1;
+			scratch._a2 = 104;
 			flags[33] = 4;
 		} else {
 			aa[9] = kernel_run_animation(kernel_name('N', 1), 106);
-			aainfo[9]._val3 = -1;
-			aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-			aainfo[10]._val3 = -1;
+			aainfo[9]._active = -1;
+			aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+			aainfo[10]._active = -1;
 
-			if (aainfo[9]._val3 == -1) {
+			if (aainfo[9]._active == -1) {
 				kernel.trigger_setup_mode = 1;
 				digi_initial_volume(30);
 				digi_play_build(503, '_', 1, 2);
-				scratch._b8 = 1;
+				scratch._b4 = 1;
 			}
 
-			aainfo[0]._frame = kernel_run_animation(kernel_name('Z', 1), 0);
-			aainfo[11]._val3 = -1;
+			aa[11] = kernel_run_animation(kernel_name('Z', 1), 0);
+			aainfo[11]._active = -1;
 		}
 	} else {
 		aa[9] = kernel_run_animation(kernel_name('N', 1), 106);
-		aainfo[9]._val3 = -1;
-		aainfo[0]._active = kernel_run_animation(kernel_name('N', 2), 106);
-		aainfo[10]._val3 = -1;
+		aainfo[9]._active = -1;
+		aa[10] = kernel_run_animation(kernel_name('N', 2), 106);
+		aainfo[10]._active = -1;
 
-		if (aainfo[9]._val3 == -1) {
+		if (aainfo[9]._active == -1) {
 			kernel.trigger_setup_mode = 1;
 			digi_initial_volume(30);
 			digi_play_build(503, '_', 1, 2);
-			scratch._b8 = 1;
+			scratch._b4 = 1;
 		}
 
 		aa[0] = kernel_run_animation(kernel_name('y', 1), 107);
-		aainfo[0]._val3 = -1;
-		scratch._a6 = 50;
+		aainfo[0]._active = -1;
+		scratch._a2 = 50;
 	}
 }
 
 static void room_503_anim1() {
-	if (kernel_anim[aa[0]].frame != aainfo[0]._val4)
-		aainfo[0]._val4 = 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]._val4 = scratch._a6 - 1;
-		kernel_reset_animation(aa[0], aainfo[0]._val4);
+		aainfo[0]._frame = scratch._a2 - 1;
+		kernel_reset_animation(aa[0], aainfo[0]._frame);
 	}
 }
 
 static void room_503_anim2() {
-	if (kernel_anim[aainfo[0]._frame].frame == aainfo[11]._val4)
+	if (kernel_anim[aa[11]].frame == aainfo[11]._frame)
 		return;
-	aainfo[11]._val4 = kernel_anim[aainfo[0]._frame].frame;
-	if (aainfo[11]._val4 == 69)
+	aainfo[11]._frame = kernel_anim[aa[11]].frame;
+	if (aainfo[11]._frame == 69)
 		new_room = 501;
 }
 
 static void room_503_anim3() {
-	if (kernel_anim[aa[6]].frame != aainfo[6]._val4) {
-		aainfo[6]._val4 = kernel_anim[aa[6]].frame;
-		int frame = aainfo[6]._val4;
+	if (kernel_anim[aa[6]].frame != aainfo[6]._frame) {
+		aainfo[6]._frame = kernel_anim[aa[6]].frame;
+		int frame = aainfo[6]._frame;
 		if (frame == 50) {
 			kernel_abort_animation(aa[6]);
-			aainfo[6]._val3 = 0;
+			aainfo[6]._active = 0;
 			aa[7] = kernel_run_animation(kernel_name('F', 3), 0);
-			aainfo[7]._val3 = -1;
+			aainfo[7]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_ANIM, aa[6]);
 			digi_initial_volume(50);
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
-			scratch._b6 = 1;
+			scratch._b2 = 1;
 		} else if (frame < 50) {
 			if (frame == 1) {
 				kernel_seq_delete(seq[0]);
@@ -293,26 +291,26 @@ static void room_503_anim3() {
 				digi_initial_volume(50);
 				digi_play_build(503, '_', 2, 3);
 				digi_val2 = -1;
-				scratch._b6 = 1;
+				scratch._b2 = 1;
 			} else if (frame == 10) {
 				digi_play_build(503, 'r', 7, 1);
-				scratch._b4 = 10;
+				scratch._b0 = 10;
 			}
 		}
 	}
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		if (scratch._b4 == 10)
-			scratch._b4 = -1;
+		if (scratch._b0 == 10)
+			scratch._b0 = -1;
 	}
 	if (kernel.trigger == 8) {
-		if (scratch._b6 == 1) {
+		if (scratch._b2 == 1) {
 			digi_initial_volume(80);
-			scratch._b6++;
+			scratch._b2++;
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
-		} else if (scratch._b6 == 2) {
+		} else if (scratch._b2 == 2) {
 			digi_initial_volume(100);
-			scratch._b6 = 2;
+			scratch._b2 = 2;
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
 		}
@@ -320,31 +318,31 @@ static void room_503_anim3() {
 }
 
 static void room_503_anim4() {
-	if (kernel_anim[aa[7]].frame != aainfo[7]._val4) {
-		aainfo[7]._val4 = kernel_anim[aa[7]].frame;
-		int frame = aainfo[7]._val4;
+	if (kernel_anim[aa[7]].frame != aainfo[7]._frame) {
+		aainfo[7]._frame = kernel_anim[aa[7]].frame;
+		int frame = aainfo[7]._frame;
 		if (frame == 59) {
 			new_room = 510;
 		} else if (frame < 59) {
 			if (frame == 1) {
 				digi_initial_volume(30);
 				digi_play_build(503, '_', 3, 3);
-				scratch._b6 = 1;
+				scratch._b2 = 1;
 				digi_val2 = -1;
 			} else if (frame == 30) {
 				digi_play_build(503, 'e', 5, 1);
-				scratch._b4 = 30;
+				scratch._b0 = 30;
 			}
 		}
 	}
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		if (scratch._b4 == 30)
-			scratch._b4 = -1;
+		if (scratch._b0 == 30)
+			scratch._b0 = -1;
 	}
 	if (kernel.trigger == 8) {
-		if (scratch._b6 == 1) {
+		if (scratch._b2 == 1) {
 			digi_initial_volume(30);
-			scratch._b6 = 1;
+			scratch._b2 = 1;
 			digi_play_build(503, '_', 3, 3);
 			digi_val2 = -1;
 		}
@@ -352,9 +350,9 @@ static void room_503_anim4() {
 }
 
 static void room_503_anim5() {
-	if (kernel_anim[aa[8]].frame != aainfo[8]._val4) {
-		aainfo[8]._val4 = kernel_anim[aa[8]].frame;
-		int frame = aainfo[8]._val4;
+	if (kernel_anim[aa[8]].frame != aainfo[8]._frame) {
+		aainfo[8]._frame = kernel_anim[aa[8]].frame;
+		int frame = aainfo[8]._frame;
 		if (frame == 104) {
 			new_room = 509;
 		} else if (frame < 104) {
@@ -362,192 +360,193 @@ static void room_503_anim5() {
 				digi_initial_volume(50);
 				digi_play_build(503, '_', 2, 3);
 				digi_val2 = -1;
-				scratch._b6 = 1;
+				scratch._b2 = 1;
 			} else if (frame == 3) {
 				digi_play_build(503, 'r', 6, 1);
-				scratch._b4 = 3;
+				scratch._b0 = 3;
 			}
 		}
 	}
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		if (scratch._b4 == 3)
-			scratch._b4 = -1;
+		if (scratch._b0 == 3)
+			scratch._b0 = -1;
 	}
 	if (kernel.trigger == 8) {
-		if (scratch._b6 == 1) {
+		if (scratch._b2 == 1) {
 			digi_initial_volume(30);
-			scratch._b6 = 1;
+			scratch._b2 = 1;
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
 		}
 	}
 }
+
 static void room_503_anim6() {
-	if (kernel_anim[aa[1]].frame != aainfo[1]._val4) {
-		aainfo[1]._val4 = kernel_anim[aa[1]].frame;
-		switch (aainfo[1]._val4) {
+	if (kernel_anim[aa[1]].frame != aainfo[1]._frame) {
+		aainfo[1]._frame = kernel_anim[aa[1]].frame;
+		switch (aainfo[1]._frame) {
 		case 5:
-			aainfo[2]._active = 11;
+			aainfo[1]._val3 = 11;
 			digi_play_build(503, 'e', 1, 1);
-			scratch._b4 = 5;
+			scratch._b0 = 5;
 			break;
 		case 10:
-			if (aainfo[2]._active == 11) {
-				aainfo[1]._val4 = 5;
+			if (aainfo[1]._val3 == 11) {
+				aainfo[1]._frame = 5;
 				kernel_reset_animation(aa[1], 5);
 			}
 			break;
 		case 14:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 13;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 13;
 				kernel_reset_animation(aa[1], 13);
 			}
 			break;
 		case 15:
-			aainfo[2]._active = 15;
+			aainfo[1]._val3 = 15;
 			digi_play_build(503, 'g', 1, 1);
-			scratch._b4 = 15;
+			scratch._b0 = 15;
 			break;
 		case 20:
-			if (aainfo[2]._active == 15) {
-				aainfo[1]._val4 = 15;
+			if (aainfo[1]._val3 == 15) {
+				aainfo[1]._frame = 15;
 				kernel_reset_animation(aa[1], 15);
 			}
 			break;
 		case 24:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 23;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 23;
 				kernel_reset_animation(aa[1], 23);
 			}
 			break;
 		case 25:
-			aainfo[2]._active = 12;
+			aainfo[1]._val3 = 12;
 			digi_play_build(503, 'r', 1, 1);
-			scratch._b4 = 25;
+			scratch._b0 = 25;
 			break;
 		case 30:
-			if (aainfo[2]._active == 12) {
-				aainfo[1]._val4 = 25;
+			if (aainfo[1]._val3 == 12) {
+				aainfo[1]._frame = 25;
 				kernel_reset_animation(aa[1], 25);
 			}
 			break;
 		case 34:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 33;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 33;
 				kernel_reset_animation(aa[1], 33);
 			}
 			break;
 		case 35:
-			aainfo[2]._active = 15;
+			aainfo[1]._val3 = 15;
 			digi_play_build(503, 'g', 2, 1);
-			scratch._b4 = 35;
+			scratch._b0 = 35;
 			break;
 		case 40:
-			if (aainfo[2]._active == 15) {
-				aainfo[1]._val4 = 35;
+			if (aainfo[1]._val3 == 15) {
+				aainfo[1]._frame = 35;
 				kernel_reset_animation(aa[1], 35);
 			}
 			break;
 		case 44:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 43;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 43;
 				kernel_reset_animation(aa[1], 43);
 			}
 			break;
 		case 45:
-			aainfo[2]._active = 12;
+			aainfo[1]._val3 = 12;
 			digi_play_build(503, 'r', 2, 1);
-			scratch._b4 = 45;
+			scratch._b0 = 45;
 			break;
 		case 50:
-			if (aainfo[2]._active == 12) {
-				aainfo[1]._val4 = 45;
+			if (aainfo[1]._val3 == 12) {
+				aainfo[1]._frame = 45;
 				kernel_reset_animation(aa[1], 45);
 			}
 			break;
 		case 54:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 53;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 53;
 				kernel_reset_animation(aa[1], 53);
 			}
 			break;
 		case 55:
-			aainfo[2]._active = 15;
+			aainfo[1]._val3 = 15;
 			digi_play_build(503, 'g', 3, 1);
-			scratch._b4 = 55;
+			scratch._b0 = 55;
 			break;
 		case 60:
-			if (aainfo[2]._active == 15) {
-				aainfo[1]._val4 = 55;
+			if (aainfo[1]._val3 == 15) {
+				aainfo[1]._frame = 55;
 				kernel_reset_animation(aa[1], 55);
 			}
 			break;
 		case 64:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 63;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 63;
 				kernel_reset_animation(aa[1], 63);
 			}
 			break;
 		case 65:
-			aainfo[2]._active = 12;
+			aainfo[1]._val3 = 12;
 			digi_play_build(503, 'r', 3, 1);
-			scratch._b4 = 65;
+			scratch._b0 = 65;
 			break;
 		case 70:
-			if (aainfo[2]._active == 12) {
-				aainfo[1]._val4 = 65;
+			if (aainfo[1]._val3 == 12) {
+				aainfo[1]._frame = 65;
 				kernel_reset_animation(aa[1], 65);
 			}
 			break;
 		case 74:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 73;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 73;
 				kernel_reset_animation(aa[1], 73);
 			}
 			break;
 		case 75:
-			aainfo[2]._active = 11;
+			aainfo[1]._val3 = 11;
 			digi_play_build(503, 'e', 2, 1);
-			scratch._b4 = 75;
+			scratch._b0 = 75;
 			break;
 		case 80:
-			if (aainfo[2]._active == 11) {
-				aainfo[1]._val4 = 75;
+			if (aainfo[1]._val3 == 11) {
+				aainfo[1]._frame = 75;
 				kernel_reset_animation(aa[1], 75);
 			}
 			break;
 		case 84:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 83;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 83;
 				kernel_reset_animation(aa[1], 83);
 			}
 			break;
 		case 85:
-			aainfo[2]._active = 12;
+			aainfo[1]._val3 = 12;
 			digi_play_build(503, 'r', 4, 1);
-			scratch._b4 = 85;
+			scratch._b0 = 85;
 			break;
 		case 90:
-			if (aainfo[2]._active == 12) {
-				aainfo[1]._val4 = 85;
+			if (aainfo[1]._val3 == 12) {
+				aainfo[1]._frame = 85;
 				kernel_reset_animation(aa[1], 85);
 			}
 			break;
 		case 94:
-			if (aainfo[2]._active == 13) {
-				aainfo[1]._val4 = 93;
+			if (aainfo[1]._val3 == 13) {
+				aainfo[1]._frame = 93;
 				kernel_reset_animation(aa[1], 93);
 			}
 			break;
 		case 95:
 			dont_frag_the_palette();
 			kernel_abort_animation(aa[1]);
-			aainfo[1]._val3 = 0;
+			aainfo[1]._active = 0;
 			aa[2] = kernel_run_animation("*RM503T21", 0);
-			aainfo[2]._val3 = -1;
+			aainfo[2]._active = -1;
 			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, aa[1]);
 			digi_initial_volume(20);
-			scratch._b4 = 1;
+			scratch._b0 = 1;
 			digi_play_build(503, '_', 1, 3);
 			digi_val2 = -1;
 			break;
@@ -555,311 +554,313 @@ static void room_503_anim6() {
 	}
 
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		switch (scratch._b4) {
+		switch (scratch._b0) {
 		case 5:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 6;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 6;
 			break;
 		case 6:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 10;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 10;
 			kernel_reset_animation(aa[1], 10);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 15:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 16;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 16;
 			break;
 		case 16:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 20;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 20;
 			kernel_reset_animation(aa[1], 20);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 25:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 26;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 26;
 			break;
 		case 26:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 30;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 30;
 			kernel_reset_animation(aa[1], 30);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 35:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 36;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 36;
 			break;
 		case 36:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 41;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 41;
 			kernel_reset_animation(aa[1], 41);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 45:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 46;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 46;
 			break;
 		case 46:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 50;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 50;
 			kernel_reset_animation(aa[1], 50);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 55:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 56;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 56;
 			break;
 		case 56:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 60;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 60;
 			kernel_reset_animation(aa[1], 60);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 65:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 66;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 66;
 			break;
 		case 66:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 70;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 70;
 			kernel_reset_animation(aa[1], 70);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 75:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 76;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 76;
 			break;
 		case 76:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 80;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 80;
 			kernel_reset_animation(aa[1], 80);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 85:
 			kernel_timing_trigger(30, 28);
-			aainfo[2]._active = 13;
-			scratch._b4 = 86;
+			aainfo[1]._val3 = 13;
+			scratch._b0 = 86;
 			break;
 		case 86:
-			aainfo[2]._active = 14;
-			aainfo[1]._val4 = 91;
+			aainfo[1]._val3 = 14;
+			aainfo[1]._frame = 91;
 			kernel_reset_animation(aa[1], 91);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		}
 	}
 	if (kernel.trigger == 8) {
-		if (scratch._b4 == 1) {
+		if (scratch._b0 == 1) {
 			digi_initial_volume(20);
-			scratch._b4 = 1;
+			scratch._b0 = 1;
 			digi_play_build(503, '_', 1, 3);
 			digi_val2 = -1;
 		}
 	}
 }
+
 static void room_503_anim7() {
-	if (kernel_anim[aa[2]].frame == aainfo[2]._val4)
+	if (kernel_anim[aa[2]].frame == aainfo[2]._frame)
 		return;
-	aainfo[2]._val4 = kernel_anim[aa[2]].frame;
-	if (aainfo[2]._val4 == 31) {
+	aainfo[2]._frame = kernel_anim[aa[2]].frame;
+	if (aainfo[2]._frame == 31) {
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[2]);
-		aainfo[2]._val3 = 0;
+		aainfo[2]._active = 0;
 		aa[3] = kernel_run_animation("*RM503T22", 0);
-		aainfo[3]._val3 = -1;
+		aainfo[3]._active = -1;
 		kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, aa[2]);
 		digi_initial_volume(20);
-		scratch._b4 = 1;
+		scratch._b0 = 1;
 		digi_play_build(503, '_', 1, 3);
 		digi_val2 = -1;
 	}
 }
 
 static void room_503_anim8() {
-	if (kernel_anim[aa[3]].frame == aainfo[3]._val4)
+	if (kernel_anim[aa[3]].frame == aainfo[3]._frame)
 		goto check_trigger;
-	aainfo[3]._val4 = kernel_anim[aa[3]].frame;
+	aainfo[3]._frame = kernel_anim[aa[3]].frame;
 
-	if (aainfo[3]._val4 == 5) {
-		aainfo[4]._active = 15;
+	if (aainfo[3]._frame == 5) {
+		aainfo[3]._val3 = 15;
 		digi_play_build(503, 'g', 4, 1);
-		scratch._b4 = 5;
-	} else if (aainfo[3]._val4 == 10) {
-		if (aainfo[4]._active == 15) {
-			aainfo[3]._val4 = 5;
+		scratch._b0 = 5;
+	} else if (aainfo[3]._frame == 10) {
+		if (aainfo[3]._val3 == 15) {
+			aainfo[3]._frame = 5;
 			kernel_reset_animation(aa[3], 5);
 		}
-	} else if (aainfo[3]._val4 == 14) {
-		if (aainfo[4]._active == 13) {
-			aainfo[3]._val4 = 13;
+	} else if (aainfo[3]._frame == 14) {
+		if (aainfo[3]._val3 == 13) {
+			aainfo[3]._frame = 13;
 			kernel_reset_animation(aa[3], 13);
 		}
-	} else if (aainfo[3]._val4 == 42) {
+	} else if (aainfo[3]._frame == 42) {
 		dont_frag_the_palette();
 		kernel_abort_animation(aa[3]);
-		aainfo[3]._val3 = 0;
+		aainfo[3]._active = 0;
 		aa[4] = kernel_run_animation(kernel_name('T', 3), 0);
-		aainfo[4]._val3 = -1;
+		aainfo[4]._active = -1;
 		kernel_synch(KERNEL_ANIM, aa[3], KERNEL_ANIM, aa[4]);
 		digi_initial_volume(20);
-		scratch._b4 = 1;
+		scratch._b0 = 1;
 		digi_play_build(503, '_', 1, 3);
 		digi_val2 = -1;
 	}
 
 check_trigger:
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		if (scratch._b4 == 5) {
+		if (scratch._b0 == 5) {
 			kernel_timing_trigger(30, 28);
-			aainfo[4]._active = 13;
-			scratch._b4 = 6;
-		} else if (scratch._b4 == 6) {
-			aainfo[4]._active = 14;
-			aainfo[3]._val4 = 10;
+			aainfo[3]._val3 = 13;
+			scratch._b0 = 6;
+		} else if (scratch._b0 == 6) {
+			aainfo[3]._val3 = 14;
+			aainfo[3]._frame = 10;
 			kernel_reset_animation(aa[3], 10);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 		}
 	}
 }
+
 static void room_503_anim9() {
-	if (kernel_anim[aa[4]].frame != aainfo[4]._val4) {
-		aainfo[4]._val4 = kernel_anim[aa[4]].frame;
-		switch (aainfo[4]._val4) {
+	if (kernel_anim[aa[4]].frame != aainfo[4]._frame) {
+		aainfo[4]._frame = kernel_anim[aa[4]].frame;
+		switch (aainfo[4]._frame) {
 		case 5:
-			aainfo[5]._active = 11;
+			aainfo[4]._val3 = 11;
 			digi_play_build(503, 'e', 3, 1);
-			scratch._b4 = 5;
+			scratch._b0 = 5;
 			break;
 		case 9:
-			if (aainfo[5]._active == 11) {
-				aainfo[4]._val4 = 5;
+			if (aainfo[4]._val3 == 11) {
+				aainfo[4]._frame = 5;
 				kernel_reset_animation(aa[4], 5);
 			}
 			break;
 		case 18:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 17;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 17;
 				kernel_reset_animation(aa[4], 17);
 			}
 			break;
 		case 19:
-			aainfo[5]._active = 15;
+			aainfo[4]._val3 = 15;
 			digi_play_build(503, 'g', 5, 1);
-			scratch._b4 = 19;
+			scratch._b0 = 19;
 			break;
 		case 22:
-			if (aainfo[5]._active == 15) {
-				aainfo[4]._val4 = 19;
+			if (aainfo[4]._val3 == 15) {
+				aainfo[4]._frame = 19;
 				kernel_reset_animation(aa[4], 19);
 			}
 			break;
 		case 25:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 24;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 24;
 				kernel_reset_animation(aa[4], 24);
 			}
 			break;
 		case 26:
-			aainfo[5]._active = 11;
+			aainfo[4]._val3 = 11;
 			digi_play_build(503, 'e', 4, 1);
-			scratch._b4 = 26;
+			scratch._b0 = 26;
 			break;
 		case 30:
-			if (aainfo[5]._active == 11) {
-				aainfo[4]._val4 = 26;
+			if (aainfo[4]._val3 == 11) {
+				aainfo[4]._frame = 26;
 				kernel_reset_animation(aa[4], 26);
 			}
 			break;
 		case 36:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 35;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 35;
 				kernel_reset_animation(aa[4], 35);
 			}
 			break;
 		case 37:
-			aainfo[5]._active = 16;
+			aainfo[4]._val3 = 16;
 			digi_play_build(503, 'b', 1, 1);
-			scratch._b4 = 37;
+			scratch._b0 = 37;
 			break;
 		case 45:
-			if (aainfo[5]._active == 16) {
-				aainfo[4]._val4 = 37;
+			if (aainfo[4]._val3 == 16) {
+				aainfo[4]._frame = 37;
 				kernel_reset_animation(aa[4], 37);
 			}
 			break;
 		case 50:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 49;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 49;
 				kernel_reset_animation(aa[4], 49);
 			}
 			break;
 		case 51:
-			aainfo[5]._active = 12;
+			aainfo[4]._val3 = 12;
 			digi_play_build(503, 'r', 5, 1);
-			scratch._b4 = 51;
+			scratch._b0 = 51;
 			break;
 		case 55:
-			if (aainfo[5]._active == 12) {
-				aainfo[4]._val4 = 51;
+			if (aainfo[4]._val3 == 12) {
+				aainfo[4]._frame = 51;
 				kernel_reset_animation(aa[4], 51);
 			}
 			break;
 		case 60:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 59;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 59;
 				kernel_reset_animation(aa[4], 59);
 			}
 			break;
 		case 61:
-			aainfo[5]._active = 15;
+			aainfo[4]._val3 = 15;
 			digi_play_build(503, 'g', 6, 1);
-			scratch._b4 = 61;
+			scratch._b0 = 61;
 			break;
 		case 66:
-			if (aainfo[5]._active == 15) {
-				aainfo[4]._val4 = 61;
+			if (aainfo[4]._val3 == 15) {
+				aainfo[4]._frame = 61;
 				kernel_reset_animation(aa[4], 61);
 			}
 			break;
 		case 69:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 68;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 68;
 				kernel_reset_animation(aa[4], 68);
 			}
 			break;
 		case 70:
-			aainfo[5]._active = 10;
+			aainfo[4]._val3 = 10;
 			digi_play_build(503, 'b', 2, 1);
-			scratch._b4 = 70;
+			scratch._b0 = 70;
 			break;
 		case 73:
-			if (aainfo[5]._active == 10) {
-				aainfo[4]._val4 = 70;
+			if (aainfo[4]._val3 == 10) {
+				aainfo[4]._frame = 70;
 				kernel_reset_animation(aa[4], 70);
 			}
 			break;
 		case 74:
-			if (aainfo[5]._active == 13) {
-				aainfo[4]._val4 = 73;
+			if (aainfo[4]._val3 == 13) {
+				aainfo[4]._frame = 73;
 				kernel_reset_animation(aa[4], 73);
 			} else {
 				dont_frag_the_palette();
 				kernel_abort_animation(aa[4]);
-				aainfo[4]._val3 = 0;
+				aainfo[4]._active = 0;
 				aa[5] = kernel_run_animation(kernel_name('T', 4), 0);
-				aainfo[5]._val3 = -1;
+				aainfo[5]._active = -1;
 				kernel_synch(KERNEL_ANIM, aa[5], KERNEL_ANIM, aa[4]);
 				digi_initial_volume(20);
-				scratch._b4 = 1;
+				scratch._b0 = 1;
 				digi_play_build(503, '_', 1, 3);
 				digi_val2 = -1;
 			}
@@ -868,160 +869,160 @@ static void room_503_anim9() {
 	}
 
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		switch (scratch._b4) {
+		switch (scratch._b0) {
 		case 5:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 6;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 6;
 			break;
 		case 6:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 9;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 9;
 			kernel_reset_animation(aa[4], 9);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 19:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 20;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 20;
 			break;
 		case 20:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 22;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 22;
 			kernel_reset_animation(aa[4], 22);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 26:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 27;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 27;
 			break;
 		case 27:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 30;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 30;
 			kernel_reset_animation(aa[4], 30);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 37:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 38;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 38;
 			break;
 		case 38:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 45;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 45;
 			kernel_reset_animation(aa[4], 45);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 51:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 52;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 52;
 			break;
 		case 52:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 55;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 55;
 			kernel_reset_animation(aa[4], 55);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 61:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 62;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 62;
 			break;
 		case 62:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 65;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 65;
 			kernel_reset_animation(aa[4], 65);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		case 70:
 			kernel_timing_trigger(30, 28);
-			aainfo[5]._active = 13;
-			scratch._b4 = 71;
+			aainfo[4]._val3 = 13;
+			scratch._b0 = 71;
 			break;
 		case 71:
-			aainfo[5]._active = 14;
-			aainfo[4]._val4 = 70;
+			aainfo[4]._val3 = 14;
+			aainfo[4]._frame = 70;
 			kernel_reset_animation(aa[4], 70);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 			break;
 		}
 	}
 }
 
 static void room_503_anim10() {
-	if (kernel_anim[aa[5]].frame != aainfo[5]._val4) {
-		aainfo[5]._val4 = kernel_anim[aa[5]].frame;
-		int frame = aainfo[5]._val4;
+	if (kernel_anim[aa[5]].frame != aainfo[5]._frame) {
+		aainfo[5]._frame = kernel_anim[aa[5]].frame;
+		int frame = aainfo[5]._frame;
 		if (frame == 40) {
 			midi_stop();
 			global[g100] = -1;
 			display_journal();
 		} else if (frame < 40) {
 			if (frame == 5) {
-				aainfo[6]._active = 16;
+				aainfo[5]._val3 = 16;
 				digi_play_build(503, 'i', 1, 1);
-				scratch._b4 = 5;
+				scratch._b0 = 5;
 			} else if (frame == 10) {
-				if (aainfo[6]._active == 16) {
-					aainfo[5]._val4 = 5;
+				if (aainfo[5]._val3 == 16) {
+					aainfo[5]._frame = 5;
 					kernel_reset_animation(aa[5], 5);
 				}
 			} else if (frame == 14) {
-				if (aainfo[6]._active == 13) {
-					aainfo[5]._val4 = 13;
+				if (aainfo[5]._val3 == 13) {
+					aainfo[5]._frame = 13;
 					kernel_reset_animation(aa[5], 13);
 				}
 			} else if (frame == 31) {
-				aainfo[6]._active = 16;
+				aainfo[5]._val3 = 16;
 				digi_play_build(503, 'b', 3, 1);
-				scratch._b4 = 31;
+				scratch._b0 = 31;
 			} else if (frame == 36) {
-				if (aainfo[6]._active == 16) {
-					aainfo[5]._val4 = 31;
+				if (aainfo[5]._val3 == 16) {
+					aainfo[5]._frame = 31;
 					kernel_reset_animation(aa[5], 31);
 				}
 			} else if (frame == 39) {
-				if (aainfo[6]._active == 13) {
-					aainfo[5]._val4 = 38;
+				if (aainfo[5]._val3 == 13) {
+					aainfo[5]._frame = 38;
 					kernel_reset_animation(aa[5], 38);
 				}
 			}
 		}
 	}
 	if (kernel.trigger == 7 || kernel.trigger == 28) {
-		if (scratch._b4 == 5) {
+		if (scratch._b0 == 5) {
 			kernel_timing_trigger(30, 28);
-			aainfo[6]._active = 13;
-			scratch._b4 = 6;
-		} else if (scratch._b4 == 6) {
-			aainfo[6]._active = 14;
-			aainfo[5]._val4 = 9;
+			aainfo[5]._val3 = 13;
+			scratch._b0 = 6;
+		} else if (scratch._b0 == 6) {
+			aainfo[5]._val3 = 14;
+			aainfo[5]._frame = 9;
 			kernel_reset_animation(aa[5], 9);
-			scratch._b4 = -1;
-		} else if (scratch._b4 == 31) {
+			scratch._b0 = -1;
+		} else if (scratch._b0 == 31) {
 			kernel_timing_trigger(30, 28);
-			aainfo[6]._active = 13;
-			scratch._b4 = 32;
-		} else if (scratch._b4 == 32) {
-			aainfo[6]._active = 14;
-			aainfo[5]._val4 = 36;
+			aainfo[5]._val3 = 13;
+			scratch._b0 = 32;
+		} else if (scratch._b0 == 32) {
+			aainfo[5]._val3 = 14;
+			aainfo[5]._frame = 36;
 			kernel_reset_animation(aa[5], 36);
-			scratch._b4 = -1;
+			scratch._b0 = -1;
 		}
 	}
 }
 
 static void room_503_anim11() {
-	if (kernel_anim[aainfo[0]._active].frame == aainfo[10]._val4)
+	if (kernel_anim[aa[10]].frame == aainfo[10]._frame)
 		return;
-	aainfo[10]._val4 = kernel_anim[aainfo[0]._active].frame;
+	aainfo[10]._frame = kernel_anim[aa[10]].frame;
 
-	int frame = aainfo[10]._val4;
+	int frame = aainfo[10]._frame;
 	if (frame == 49) {
-		aainfo[10]._val4 = 1;
-		kernel_reset_animation(aainfo[0]._active, 1);
+		aainfo[10]._frame = 1;
+		kernel_reset_animation(aa[10], 1);
 		return;
 	}
 	if (frame > 49)
@@ -1029,28 +1030,28 @@ static void room_503_anim11() {
 
 	if (frame == 19 || frame == 30 || frame == 40) {
 		if (imath_random(0, 100) > 20) {
-			aainfo[10]._val4--;
-			kernel_reset_animation(aainfo[0]._active, aainfo[10]._val4);
+			aainfo[10]._frame--;
+			kernel_reset_animation(aa[10], aainfo[10]._frame);
 		}
 	} else if (frame == 34 || frame == 46) {
 		if (imath_random(0, 100) > 40) {
-			aainfo[10]._val4--;
-			kernel_reset_animation(aainfo[0]._active, aainfo[10]._val4);
+			aainfo[10]._frame--;
+			kernel_reset_animation(aa[10], aainfo[10]._frame);
 		}
 	} else if (frame == 20) {
 		if (imath_random(0, 100) > 60) {
-			aainfo[10]._val4 -= 2;
-			kernel_reset_animation(aainfo[0]._active, aainfo[10]._val4);
+			aainfo[10]._frame -= 2;
+			kernel_reset_animation(aa[10], aainfo[10]._frame);
 		}
 	}
 }
 
 static void room_503_anim12() {
-	if (kernel_anim[aa[9]].frame == aainfo[9]._val4)
+	if (kernel_anim[aa[9]].frame == aainfo[9]._frame)
 		return;
-	aainfo[9]._val4 = kernel_anim[aa[9]].frame;
-	if (aainfo[9]._val4 == 49) {
-		aainfo[9]._val4 = 1;
+	aainfo[9]._frame = kernel_anim[aa[9]].frame;
+	if (aainfo[9]._frame == 49) {
+		aainfo[9]._frame = 1;
 		kernel_reset_animation(aa[9], 1);
 	}
 }
@@ -1063,32 +1064,32 @@ static void room_503_daemon() {
 
 	switch (kernel.trigger) {
 	case 8:
-		if (scratch._b8 == 1) {
+		if (scratch._b4 == 1) {
 			digi_initial_volume(30);
 			digi_play_build(503, '_', 1, 3);
 			digi_val2 = -1;
-			scratch._b8 = 1;
+			scratch._b4 = 1;
 		}
 		break;
 
 	case 27:
 		global[walker_converse_now] = 0;
-		kernel_abort_animation(scratch._b2);
-		kernel_reset_animation(scratch._ae, 1);
-		kernel_synch(KERNEL_ANIM, scratch._ae, KERNEL_NOW, 0);
+		kernel_abort_animation(scratch._ae);
+		kernel_reset_animation(scratch._aa, 1);
+		kernel_synch(KERNEL_ANIM, scratch._aa, KERNEL_NOW, 0);
 		global[g133] = 0;
 		player.commands_allowed = true;
 		break;
 
 	case 100:
 		kernel_abort_animation(aa[0]);
-		aainfo[0]._val3 = 0;
+		aainfo[0]._active = 0;
 		aa[1] = kernel_run_animation(kernel_name('t', 1), 1);
 		kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
-		aainfo[1]._val3 = -1;
+		aainfo[1]._active = -1;
 		player.commands_allowed = false;
 		digi_initial_volume(20);
-		scratch._b4 = 1;
+		scratch._b0 = 1;
 		digi_play_build(503, '_', 1, 3);
 		digi_val2 = -1;
 		break;
@@ -1096,29 +1097,29 @@ static void room_503_daemon() {
 	case 104:
 		if (flags[33] == 6) {
 			aa[8] = kernel_run_animation(kernel_name('F', 1), 0);
-			aainfo[8]._val3 = -1;
-			scratch._a6 = 104;
+			aainfo[8]._active = -1;
+			scratch._a2 = 104;
 			digi_initial_volume(50);
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
-			scratch._b6 = 1;
+			scratch._b2 = 1;
 		}
 		break;
 
 	case 105:
 		if (flags[33] == 7) {
 			aa[6] = kernel_run_animation(kernel_name('F', 2), 0);
-			aainfo[6]._val3 = -1;
+			aainfo[6]._active = -1;
 			digi_initial_volume(50);
 			digi_play_build(503, '_', 2, 3);
 			digi_val2 = -1;
-			scratch._b6 = 1;
+			scratch._b2 = 1;
 		}
 		break;
 
 	case 107:
 		kernel_abort_animation(aa[0]);
-		aainfo[0]._val3 = 0;
+		aainfo[0]._active = 0;
 		midi_stop();
 		global[g100] = -1;
 		display_journal();
@@ -1128,26 +1129,26 @@ static void room_503_daemon() {
 		break;
 	}
 
-	if (aainfo[0]._val3 != 0)  room_503_anim1();
-	if (aainfo[11]._val3 != 0) room_503_anim2();
-	if (aainfo[6]._val3 != 0)  room_503_anim3();
-	if (aainfo[7]._val3 != 0)  room_503_anim4();
-	if (aainfo[8]._val3 != 0)  room_503_anim5();
-	if (aainfo[1]._val3 != 0)  room_503_anim6();
-	if (aainfo[2]._val3 != 0)  room_503_anim7();
-	if (aainfo[3]._val3 != 0)  room_503_anim8();
-	if (aainfo[4]._val3 != 0)  room_503_anim9();
-	if (aainfo[5]._val3 != 0)  room_503_anim10();
+	if (aainfo[0]._active  != 0) room_503_anim1();
+	if (aainfo[11]._active != 0) room_503_anim2();
+	if (aainfo[6]._active  != 0) room_503_anim3();
+	if (aainfo[7]._active  != 0) room_503_anim4();
+	if (aainfo[8]._active  != 0) room_503_anim5();
+	if (aainfo[1]._active  != 0) room_503_anim6();
+	if (aainfo[2]._active  != 0) room_503_anim7();
+	if (aainfo[3]._active  != 0) room_503_anim8();
+	if (aainfo[4]._active  != 0) room_503_anim9();
+	if (aainfo[5]._active  != 0) room_503_anim10();
 
-	if (scratch._ba == 1) {
+	if (scratch._b6 == 1) {
 		room_503_anim12();
 		room_503_anim11();
-	} else if (scratch._ba == 2) {
+	} else if (scratch._b6 == 2) {
 		room_503_anim11();
 	}
 
 	if (global[walker_converse_now] != 0)
-		global_anim3(scratch._b2, &global[g008]);
+		global_anim3(scratch._ae, &global[g008]);
 }
 
 void room_503_synchronize(Common::Serializer &s) {
@@ -1155,18 +1156,18 @@ void room_503_synchronize(Common::Serializer &s) {
 	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._pad_a0);
+	s.syncAsSint16LE(scratch._a2);
 	s.syncAsSint16LE(scratch._pad_a4);
-	s.syncAsSint16LE(scratch._a6);
+	s.syncAsSint16LE(scratch._pad_a6);
 	s.syncAsSint16LE(scratch._pad_a8);
-	s.syncAsSint16LE(scratch._pad_aa);
+	s.syncAsSint16LE(scratch._aa);
 	s.syncAsSint16LE(scratch._pad_ac);
 	s.syncAsSint16LE(scratch._ae);
-	s.syncAsSint16LE(scratch._pad_b0);
+	s.syncAsSint16LE(scratch._b0);
 	s.syncAsSint16LE(scratch._b2);
 	s.syncAsSint16LE(scratch._b4);
 	s.syncAsSint16LE(scratch._b6);
-	s.syncAsSint16LE(scratch._b8);
-	s.syncAsSint16LE(scratch._ba);
 }
 
 void room_503_preload() {


Commit: d32a7b82fac4cd9bd9de9b5a6f57824fc4ecb2cd
    https://github.com/scummvm/scummvm/commit/d32a7b82fac4cd9bd9de9b5a6f57824fc4ecb2cd
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-29T14:44:32+10:00

Commit Message:
MADS: FOresT: Fix Scratch structure for room 308

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


diff --git a/engines/mads/madsv2/forest/rooms/room308.cpp b/engines/mads/madsv2/forest/rooms/room308.cpp
index aaba2d2b23b..a0d26669191 100644
--- a/engines/mads/madsv2/forest/rooms/room308.cpp
+++ b/engines/mads/madsv2/forest/rooms/room308.cpp
@@ -41,42 +41,22 @@ namespace Forest {
 namespace Rooms {
 
 struct Scratch {
-	int16 sprite[10];                 // 0x00–0x13
-	int16 sequence[10];               // 0x14–0x27
-	int16 animation[10];              // 0x28–0x3B
-	AnimationInfo animation_info[10]; // 0x3C–0x8B
-	int16 _8c;                        // 0x8C
-	int16 _8e;                        // 0x8E
-	int16 _90;                        // 0x90
-	int16 _92;                        // 0x92
-	int16 _94;                        // 0x94
-	int16 _96;                        // 0x96
-	int16 _98;                        // 0x98
-	int16 _9a;                        // 0x9A
-	int16 _9c;                        // 0x9C
-	int16 _9e;                        // 0x9E
-	int16 _a0;                        // 0xA0
-	int16 _a2;                        // 0xA2
-	int16 _a4;                        // 0xA4
-	int16 _a6;                        // 0xA6
-	int16 _a8;                        // 0xA8
-	int16 _aa;                        // 0xAA
-	int16 _ac;                        // 0xAC
-	int16 _ae;                        // 0xAE
-	int16 _b0;                        // 0xB0
-	int16 _b2;                        // 0xB2
-	int16 _b4;                        // 0xB4
-	int16 _b6;                        // 0xB6
-	int16 _b8;                        // 0xB8
-	int16 _ba;                        // 0xBA
-	int16 _bc;                        // 0xBC
-	int16 _be;                        // 0xBE
-	int16 _c0;                        // 0xC0
-	byte  _c2;                        // 0xC2
-	byte  _c2hi;                      // 0xC3
-	byte  _c4;                        // 0xC4
-	byte  _c5;                        // 0xC5
-	byte  _c6;                        // 0xC6
+	int16 sprite[10];
+	int16 sequence[10];
+	int16 animation[24];
+	int16 _unused;
+	AnimationInfo animation_info[24];
+	int16 _b2;
+	int16 _b4;
+	int16 _b6;
+	int16 _b8;
+	int16 _ba;
+	int16 _bc;
+	int16 _be;
+	int16 _c0;
+	byte _c2;
+	byte _c3;
+	byte _c4;
 };
 
 static Scratch scratch;
@@ -89,10 +69,10 @@ static Scratch scratch;
 
 
 static void room_308_anim1() {
-	int16 cur = kernel_anim[ss[4]].frame;
-	if (cur == aainfo[0]._active)
+	int16 cur = kernel_anim[aa[0]].frame;
+	if (cur == aainfo[0]._frame)
 		return;
-	aainfo[0]._active = cur;
+	aainfo[0]._frame = cur;
 
 	switch (cur) {
 	case 40:
@@ -135,10 +115,10 @@ static void room_308_anim1() {
 }
 
 static void room_308_anim2() {
-	int16 cur = kernel_anim[ss[5]].frame;
-	if (cur == aainfo[0]._val3)
+	int16 cur = kernel_anim[aa[1]].frame;
+	if (cur == aainfo[1]._frame)
 		return;
-	aainfo[0]._val3 = cur;
+	aainfo[1]._frame = cur;
 	if (cur == 6) {
 		digi_play_build(308, 't', 1, 1);
 		scratch._b4 = -1;
@@ -146,10 +126,10 @@ static void room_308_anim2() {
 }
 
 static void room_308_anim3() {
-	int16 cur = kernel_anim[ss[6]].frame;
-	if (cur == aainfo[1]._active)
+	int16 cur = kernel_anim[aa[2]].frame;
+	if (cur == aainfo[2]._frame)
 		return;
-	aainfo[1]._active = cur;
+	aainfo[2]._frame = cur;
 	switch (cur) {
 	case 2:
 		digi_play_build(308, 'r', 1, 1);
@@ -167,10 +147,10 @@ static void room_308_anim3() {
 }
 
 static void room_308_anim4() {
-	int16 cur = kernel_anim[ss[7]].frame;
-	if (cur == aainfo[1]._val3)
+	int16 cur = kernel_anim[aa[3]].frame;
+	if (cur == aainfo[3]._frame)
 		return;
-	aainfo[1]._val3 = cur;
+	aainfo[3]._frame = cur;
 
 	if (cur == 13) {
 		digi_play_build(308, 't', 2, 1);
@@ -187,10 +167,10 @@ static void room_308_anim4() {
 }
 
 static void room_308_anim5() {
-	int16 cur = kernel_anim[ss[8]].frame;
-	if (cur == aainfo[2]._active)
+	int16 cur = kernel_anim[aa[4]].frame;
+	if (cur == aainfo[4]._frame)
 		return;
-	aainfo[2]._active = cur;
+	aainfo[4]._frame = cur;
 
 	if (cur == 30 || cur == 104) {
 		digi_initial_volume(60);
@@ -209,10 +189,10 @@ static void room_308_anim5() {
 }
 
 static void room_308_anim7() {
-	int16 cur = kernel_anim[ss[9]].frame;
-	if (cur == aainfo[2]._val3)
+	int16 cur = kernel_anim[aa[5]].frame;
+	if (cur == aainfo[5]._frame)
 		return;
-	aainfo[2]._val3 = cur;
+	aainfo[5]._frame = cur;
 	if (cur == 1 || cur == 5) {
 		digi_initial_volume(60);
 		digi_play_build(308, '_', 1, 2);
@@ -220,36 +200,36 @@ static void room_308_anim7() {
 }
 
 static void room_308_anim8() {
-	int16 cur = kernel_anim[seq[5]].frame;
-	if (cur == aainfo[6]._val4)
+	int16 cur = kernel_anim[aa[11]].frame;
+	if (cur == aainfo[11]._frame)
 		return;
-	aainfo[6]._val4 = cur;
+	aainfo[11]._frame = cur;
 
 	if (cur == 57) {
 		player.commands_allowed = true;
 		dont_frag_the_palette();
-		kernel_abort_animation(seq[5]);
-		aainfo[2]._frame = 0;
+		kernel_abort_animation(aa[11]);
+		aainfo[5]._active = 0;
 
-		seq[0] = kernel_run_animation(kernel_name('t', 11), 0);
-		aainfo[2]._val4 = -1;
-		aainfo[3]._frame = 0;
-		kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
+		aa[6] = kernel_run_animation(kernel_name('t', 11), 0);
+		aainfo[6]._active = -1;
+		aainfo[6]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
 
-		seq[1] = kernel_run_animation(kernel_name('t', 19), 0);
-		aainfo[3]._val3 = -1;
-		aainfo[4]._active = 0;
-		kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
+		aa[7] = kernel_run_animation(kernel_name('t', 19), 0);
+		aainfo[7]._active = -1;
+		aainfo[7]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
 
-		seq[2] = kernel_run_animation(kernel_name('t', 13), 0);
-		aainfo[4]._frame = -1;
-		aainfo[4]._val4 = 0;
-		kernel_synch(KERNEL_ANIM, seq[2], KERNEL_NOW, 0);
+		aa[8] = kernel_run_animation(kernel_name('t', 13), 0);
+		aainfo[8]._active = -1;
+		aainfo[8]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[8], KERNEL_NOW, 0);
 
-		seq[3] = kernel_run_animation(kernel_name('t', 18), 0);
-		aainfo[5]._active = -1;
-		aainfo[5]._val3 = 0;
-		kernel_synch(KERNEL_ANIM, seq[3], KERNEL_NOW, 0);
+		aa[9] = kernel_run_animation(kernel_name('t', 18), 0);
+		aainfo[9]._active = -1;
+		aainfo[9]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
 
 		global[player_score] = -1;
 		return;
@@ -268,19 +248,19 @@ static void room_308_anim8() {
 }
 
 static void room_308_anim9() {
-	int16 cur = kernel_anim[seq[0]].frame;
-	if (cur == aainfo[3]._active)
+	int16 cur = kernel_anim[aa[6]].frame;
+	if (cur == aainfo[6]._frame)
 		return;
-	aainfo[3]._active = cur;
+	aainfo[6]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 11) {
 		result = 10;
 	} else if (cur < 11) {
 		if (cur == 1) {
-			if (aainfo[5]._val3 == 1) {
+			if (aainfo[9]._val3 == 1) {
 				result = 1;
-				aainfo[5]._val3 = 0;
+				aainfo[9]._val3 = 0;
 			} else {
 				result = 0;
 			}
@@ -290,23 +270,23 @@ static void room_308_anim9() {
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[0], result);
-		aainfo[3]._active = result;
+		kernel_reset_animation(aa[6], result);
+		aainfo[6]._frame = result;
 	}
 }
 
 static void room_308_anim10() {
-	int16 cur = kernel_anim[seq[1]].frame;
-	if (cur == aainfo[3]._val4)
+	int16 cur = kernel_anim[aa[7]].frame;
+	if (cur == aainfo[7]._frame)
 		return;
-	aainfo[3]._val4 = cur;
+	aainfo[7]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 17) {
 		scratch._be++;
 		if (scratch._be == 4) {
 			kernel_timing_trigger(20, 108);
-			aainfo[4]._active = 0;
+			aainfo[7]._val3 = 0;
 			scratch._c2 = 4;
 			scratch._be++;
 			result = 0;
@@ -320,7 +300,7 @@ static void room_308_anim10() {
 		if (cur == 1) {
 			if (scratch._c2 == 8)
 				scratch._c2 = 0;
-			int16 active = aainfo[4]._active;
+			int16 active = aainfo[7]._val3;
 			if (active == 0) {
 				if (scratch._be == 0) {
 					result = 0;
@@ -336,42 +316,42 @@ static void room_308_anim10() {
 		} else if (cur == 6) {
 			result = 5;
 		} else if (cur == 9) {
-			aainfo[5]._val3 = 4;
+			aainfo[9]._val3 = 4;
 		}
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[1], result);
-		aainfo[3]._val4 = result;
+		kernel_reset_animation(aa[7], result);
+		aainfo[7]._frame = result;
 	}
 }
 
 static void room_308_anim11() {
-	int16 cur = kernel_anim[seq[2]].frame;
-	if (cur == aainfo[4]._val3)
+	int16 cur = kernel_anim[aa[8]].frame;
+	if (cur == aainfo[8]._frame)
 		return;
-	aainfo[4]._val3 = cur;
+	aainfo[8]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 6) {
 		result = 5;
 	} else if (cur == 1 || (cur >= 8 && cur <= 10)) {
-		int16 v = aainfo[4]._val4;
+		int16 v = aainfo[8]._val3;
 		if (v == 0) {
 			result = 0;
 		} else if (v == 3) {
 			result = imath_random(7, 9);
 		} else if (v == 6) {
 			if (scratch._c2 == 0 || scratch._c2 == 7) {
-				aainfo[4]._val4 = 0;
-				kernel_reset_animation(seq[0], 10);
-				kernel_synch(KERNEL_ANIM, seq[0], KERNEL_ANIM, seq[2]);
-				kernel_reset_animation(seq[3], 14);
-				kernel_synch(KERNEL_ANIM, seq[3], KERNEL_ANIM, seq[2]);
+				aainfo[8]._val3 = 0;
+				kernel_reset_animation(aa[6], 10);
+				kernel_synch(KERNEL_ANIM, aa[6], KERNEL_ANIM, aa[8]);
+				kernel_reset_animation(aa[9], 14);
+				kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[8]);
 				result = 5;
-				seq[6] = kernel_run_animation(kernel_name('t', 10), 0);
-				aainfo[7]._active = -1;
-				kernel_synch(KERNEL_ANIM, seq[6], KERNEL_ANIM, seq[2]);
+				aa[12] = kernel_run_animation(kernel_name('t', 10), 0);
+				aainfo[12]._active = -1;
+				kernel_synch(KERNEL_ANIM, aa[12], KERNEL_ANIM, aa[8]);
 			} else {
 				result = cur - 1;
 			}
@@ -379,22 +359,22 @@ static void room_308_anim11() {
 			if (scratch._c2 == 0) {
 				result = cur - 1;
 			} else {
-				aainfo[4]._val4 = 0;
+				aainfo[8]._val3 = 0;
 				if (scratch._b8 == 0) {
-					kernel_reset_animation(seq[0], 10);
-					kernel_synch(KERNEL_ANIM, seq[0], KERNEL_ANIM, seq[2]);
-					kernel_reset_animation(seq[3], 14);
-					kernel_synch(KERNEL_ANIM, seq[3], KERNEL_ANIM, seq[2]);
+					kernel_reset_animation(aa[6], 10);
+					kernel_synch(KERNEL_ANIM, aa[6], KERNEL_ANIM, aa[8]);
+					kernel_reset_animation(aa[9], 14);
+					kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[8]);
 					result = 5;
-					seq[6] = kernel_run_animation(kernel_name('t', 10), 0);
-					aainfo[7]._active = -1;
-					kernel_synch(KERNEL_ANIM, seq[6], KERNEL_ANIM, seq[2]);
+					aa[12] = kernel_run_animation(kernel_name('t', 10), 0);
+					aainfo[12]._active = -1;
+					kernel_synch(KERNEL_ANIM, aa[12], KERNEL_ANIM, aa[8]);
 				} else {
 					result = 5;
-					seq[7] = kernel_run_animation(kernel_name('t', 14), 0);
-					aainfo[7]._val4 = -1;
-					aainfo[8]._frame = 13;
-					kernel_synch(KERNEL_ANIM, seq[7], KERNEL_ANIM, seq[2]);
+					aa[13] = kernel_run_animation(kernel_name('t', 14), 0);
+					aainfo[13]._active = -1;
+					aainfo[13]._val3 = 13;
+					kernel_synch(KERNEL_ANIM, aa[13], KERNEL_ANIM, aa[8]);
 					digi_play_build(101, '_', 1, 2);
 				}
 			}
@@ -402,22 +382,22 @@ static void room_308_anim11() {
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[2], result);
-		aainfo[4]._val3 = result;
+		kernel_reset_animation(aa[8], result);
+		aainfo[8]._frame = result;
 	}
 }
 
 static void room_308_anim12() {
-	int16 cur = kernel_anim[seq[3]].frame;
-	if (cur == aainfo[5]._frame)
+	int16 cur = kernel_anim[aa[9]].frame;
+	if (cur == aainfo[9]._frame)
 		return;
-	aainfo[5]._frame = cur;
+	aainfo[9]._frame = cur;
 
 	int16 result = -1;
 	bool do_e0 = false;
 
 	if (cur == 2) {
-		aainfo[5]._val3 = 1;
+		aainfo[9]._val3 = 1;
 	} else if (cur == 7 || cur == 13) {
 		result = 0;
 	} else if (cur == 14) {
@@ -430,32 +410,32 @@ static void room_308_anim12() {
 		} else {
 			scratch._ba = 0;
 			if (global[walker_converse_state] == 0) {
-				aainfo[5]._val3 = (scratch._c0 != 0) ? 11 : 10;
+				aainfo[9]._val3 = (scratch._c0 != 0) ? 11 : 10;
 				do_e0 = true;
 			} else if (scratch._b8 == 0) {
-				aainfo[4]._val4 = 0;
+				aainfo[8]._val3 = 0;
 				scratch._b6 = 1;
-				aainfo[4]._val4 = 7;
-				kernel_reset_animation(seq[0], 10);
-				kernel_synch(KERNEL_ANIM, seq[0], KERNEL_ANIM, seq[2]);
-				kernel_reset_animation(seq[3], 13);
-				kernel_synch(KERNEL_ANIM, seq[3], KERNEL_ANIM, seq[2]);
-				aainfo[5]._frame = 13;
-				kernel_reset_animation(seq[2], 5);
-				seq[6] = kernel_run_animation(kernel_name('t', 10), 0);
-				aainfo[7]._active = -1;
-				kernel_synch(KERNEL_ANIM, seq[6], KERNEL_ANIM, seq[2]);
+				aainfo[8]._val3 = 7;
+				kernel_reset_animation(aa[6], 10);
+				kernel_synch(KERNEL_ANIM, aa[6], KERNEL_ANIM, aa[8]);
+				kernel_reset_animation(aa[9], 13);
+				kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[8]);
+				aainfo[9]._frame = 13;
+				kernel_reset_animation(aa[8], 5);
+				aa[12] = kernel_run_animation(kernel_name('t', 10), 0);
+				aainfo[12]._active = -1;
+				kernel_synch(KERNEL_ANIM, aa[12], KERNEL_ANIM, aa[8]);
 				return;
 			} else if (scratch._c0 == 0) {
-				kernel_reset_animation(seq[2], 5);
-				seq[7] = kernel_run_animation(kernel_name('t', 14), 0);
-				aainfo[7]._val4 = -1;
-				aainfo[8]._frame = 13;
-				kernel_synch(KERNEL_ANIM, seq[7], KERNEL_ANIM, seq[2]);
-				aainfo[5]._val3 = 8;
+				kernel_reset_animation(aa[8], 5);
+				aa[13] = kernel_run_animation(kernel_name('t', 14), 0);
+				aainfo[13]._active = -1;
+				aainfo[13]._val3 = 13;
+				kernel_synch(KERNEL_ANIM, aa[13], KERNEL_ANIM, aa[8]);
+				aainfo[9]._val3 = 8;
 				do_e0 = true;
 			} else {
-				aainfo[5]._val3 = 11;
+				aainfo[9]._val3 = 11;
 				do_e0 = true;
 			}
 		}
@@ -463,10 +443,10 @@ static void room_308_anim12() {
 
 	if (do_e0) {
 		if (scratch._bc != 0) {
-			aainfo[5]._val3 = 12;
+			aainfo[9]._val3 = 12;
 			scratch._bc = 0;
 		}
-		switch (aainfo[5]._val3) {
+		switch (aainfo[9]._val3) {
 		case 0:
 			if (scratch._c2 == 0) {
 				if (imath_random(1, 15) == 1) {
@@ -477,7 +457,7 @@ static void room_308_anim12() {
 					scratch._c2 = 0;
 				}
 			} else {
-				result = aainfo[5]._frame - 1;
+				result = aainfo[9]._frame - 1;
 			}
 			break;
 		case 3:
@@ -486,7 +466,7 @@ static void room_308_anim12() {
 			break;
 		case 4:
 			result = 7;
-			aainfo[5]._val3 = 0;
+			aainfo[9]._val3 = 0;
 			scratch._c2 = 5;
 			break;
 		case 8:
@@ -494,39 +474,39 @@ static void room_308_anim12() {
 			scratch._c2 = 3;
 			break;
 		case 10:
-			seq[8] = kernel_run_animation(kernel_name('t', 21), 0);
-			aainfo[8]._val3 = -1;
-			kernel_synch(KERNEL_ANIM, seq[8], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[1], 5);
-			kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[3], 13);
-			kernel_synch(KERNEL_ANIM, seq[3], KERNEL_NOW, 0);
+			aa[14] = kernel_run_animation(kernel_name('t', 21), 0);
+			aainfo[14]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[14], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[7], 5);
+			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[9], 13);
+			kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
 			scratch._c2 = 2;
 			break;
 		case 11:
 			if (scratch._c0 != 0) {
 				dont_frag_the_palette();
-				kernel_abort_animation(seq[7]);
-				aainfo[7]._val4 = 0;
+				kernel_abort_animation(aa[13]);
+				aainfo[13]._active = 0;
 			}
 			dont_frag_the_palette();
-			kernel_abort_animation(seq[3]);
-			aainfo[5]._active = 0;
-			seq[9] = kernel_run_animation(kernel_name('t', 20), 0);
-			aainfo[9]._active = -1;
-			kernel_synch(KERNEL_ANIM, seq[9], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[1], 5);
-			kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
+			kernel_abort_animation(aa[9]);
+			aainfo[9]._active = 0;
+			aa[15] = kernel_run_animation(kernel_name('t', 20), 0);
+			aainfo[15]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[15], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[7], 5);
+			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
 			scratch._c2 = 9;
 			break;
 		case 12:
-			aa[0] = kernel_run_animation(kernel_name('t', 15), 0);
-			kernel_reset_animation(aa[0], 6);
-			aainfo[9]._val3 = -1;
-			kernel_synch(KERNEL_ANIM, aa[0], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[0], 10);
-			kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
-			aainfo[5]._val3 = 0;
+			aa[16] = kernel_run_animation(kernel_name('t', 15), 0);
+			kernel_reset_animation(aa[16], 6);
+			aainfo[16]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[16], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[6], 10);
+			kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+			aainfo[9]._val3 = 0;
 			scratch._c2 = 1;
 			break;
 		default:
@@ -535,16 +515,16 @@ static void room_308_anim12() {
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[3], result);
-		aainfo[5]._frame = result;
+		kernel_reset_animation(aa[9], result);
+		aainfo[9]._frame = result;
 	}
 }
 
 static void room_308_anim13() {
-	int16 cur = kernel_anim[seq[4]].frame;
-	if (cur == aainfo[6]._active)
+	int16 cur = kernel_anim[aa[10]].frame;
+	if (cur == aainfo[10]._frame)
 		return;
-	aainfo[6]._active = cur;
+	aainfo[10]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 8) {
@@ -554,88 +534,88 @@ static void room_308_anim13() {
 		digi_stop(2);
 		digi_play_build(203, '_', 1, 2);
 	} else if (cur == 11) {
-		scratch._c2hi++;
-		if (scratch._c2hi == 3) {
+		scratch._c3++;
+		if (scratch._c3 == 3) {
 			dont_frag_the_palette();
-			kernel_abort_animation(seq[4]);
-			aainfo[5]._val4 = 0;
-			aa[1] = kernel_run_animation(kernel_name('t', 23), 0);
-			kernel_reset_animation(aa[1], 2);
-			scratch._8c = -1;
-			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
+			kernel_abort_animation(aa[10]);
+			aainfo[10]._active = 0;
+			aa[17] = kernel_run_animation(kernel_name('t', 23), 0);
+			kernel_reset_animation(aa[17], 2);
+			aainfo[17]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[17], KERNEL_NOW, 0);
 		} else {
 			result = 7;
 		}
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[4], result);
-		aainfo[6]._active = result;
+		kernel_reset_animation(aa[10], result);
+		aainfo[10]._frame = result;
 	}
 }
 
 static void room_308_anim14() {
-	int16 cur = kernel_anim[seq[6]].frame;
-	if (cur == aainfo[7]._frame)
+	int16 cur = kernel_anim[aa[12]].frame;
+	if (cur == aainfo[12]._frame)
 		return;
-	aainfo[7]._frame = cur;
+	aainfo[12]._frame = cur;
 
 	if (cur == 6) {
 		digi_play_build(101, '_', 1, 2);
 	} else if (cur == 9) {
-		ss[2] = kernel_seq_stamp(ss[0], 0, -1);
-		kernel_seq_depth(ss[2], 4);
-		kernel_seq_loc(ss[2], 99, 125);
-		kernel_synch(KERNEL_SERIES, ss[2], KERNEL_ANIM, seq[6]);
+		seq[0] = kernel_seq_stamp(ss[0], 0, -1);
+		kernel_seq_depth(seq[0], 4);
+		kernel_seq_loc(seq[0], 99, 125);
+		kernel_synch(KERNEL_SERIES, seq[0], KERNEL_ANIM, aa[12]);
 		scratch._b8 = -1;
 		global[g072] = -1;
 	} else if (cur == 10) {
 		dont_frag_the_palette();
-		kernel_abort_animation(seq[6]);
-		aainfo[7]._active = 0;
+		kernel_abort_animation(aa[12]);
+		aainfo[12]._active = 0;
 		if (scratch._b6 == 0) {
-			kernel_reset_animation(seq[1], 7);
-			kernel_synch(KERNEL_ANIM, seq[1], KERNEL_ANIM, seq[2]);
-			kernel_reset_animation(seq[2], 0);
-			kernel_synch(KERNEL_ANIM, seq[2], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[0], 0);
-			kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[3], 0);
-			kernel_synch(KERNEL_ANIM, seq[3], KERNEL_ANIM, seq[7]);
+			kernel_reset_animation(aa[7], 7);
+			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_ANIM, aa[8]);
+			kernel_reset_animation(aa[8], 0);
+			kernel_synch(KERNEL_ANIM, aa[8], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[6], 0);
+			kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[9], 0);
+			kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[13]);
 		} else if (scratch._b6 == 1) {
-			seq[7] = kernel_run_animation(kernel_name('t', 14), 0);
-			aainfo[7]._val4 = -1;
-			aainfo[8]._frame = 13;
-			kernel_synch(KERNEL_ANIM, seq[7], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[0], 0);
-			kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[3], 0);
-			kernel_synch(KERNEL_ANIM, seq[3], KERNEL_ANIM, seq[7]);
+			aa[13] = kernel_run_animation(kernel_name('t', 14), 0);
+			aainfo[13]._active = -1;
+			aainfo[13]._val3 = 13;
+			kernel_synch(KERNEL_ANIM, aa[13], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[6], 0);
+			kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[9], 0);
+			kernel_synch(KERNEL_ANIM, aa[9], KERNEL_ANIM, aa[13]);
 		}
 	}
 }
 
 static void room_308_anim15() {
-	int16 cur = kernel_anim[seq[7]].frame;
-	if (cur == aainfo[8]._active)
+	int16 cur = kernel_anim[aa[13]].frame;
+	if (cur == aainfo[13]._frame)
 		return;
-	aainfo[8]._active = cur;
+	aainfo[13]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 7) {
 		if (global[walker_converse_state] != 0) {
 			dont_frag_the_palette();
-			kernel_abort_animation(seq[7]);
-			aainfo[7]._val4 = 0;
+			kernel_abort_animation(aa[13]);
+			aainfo[13]._active = 0;
 			scratch._c0 = 100;
 			dont_frag_the_palette();
-			kernel_abort_animation(seq[3]);
-			aainfo[5]._active = 0;
-			seq[9] = kernel_run_animation(kernel_name('t', 20), 0);
-			aainfo[9]._active = -1;
-			kernel_synch(KERNEL_ANIM, seq[9], KERNEL_NOW, 0);
-			kernel_reset_animation(seq[1], 5);
-			kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
+			kernel_abort_animation(aa[9]);
+			aainfo[9]._active = 0;
+			aa[15] = kernel_run_animation(kernel_name('t', 20), 0);
+			aainfo[15]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[15], KERNEL_NOW, 0);
+			kernel_reset_animation(aa[7], 5);
+			kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
 			return;
 		}
 		if (scratch._c2 == 6)
@@ -643,7 +623,7 @@ static void room_308_anim15() {
 		if (scratch._c0 <= 3) {
 			scratch._c2 = 6;
 		} else {
-			if (aainfo[8]._frame != 0 || scratch._c0 == 0 || scratch._c2 != 0 || imath_random(1, 15) != 1) {
+			if (aainfo[13]._val3 != 0 || scratch._c0 == 0 || scratch._c2 != 0 || imath_random(1, 15) != 1) {
 				result = 6;
 			} else {
 				result = 7;
@@ -651,7 +631,7 @@ static void room_308_anim15() {
 			}
 		}
 	} else if (cur == 10) {
-		aainfo[5]._val3 = 4;
+		aainfo[9]._val3 = 4;
 	} else if (cur == 12) {
 		digi_play_build(308, '_', 4, 2);
 	} else if (cur == 13) {
@@ -659,7 +639,7 @@ static void room_308_anim15() {
 		scratch._c0++;
 		if (scratch._c0 == 3) {
 			kernel_timing_trigger(20, 109);
-			aainfo[8]._frame = 0;
+			aainfo[13]._val3 = 0;
 			scratch._c2 = 4;
 			scratch._c0++;
 		}
@@ -667,72 +647,73 @@ static void room_308_anim15() {
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[7], result);
-		aainfo[8]._active = result;
+		kernel_reset_animation(aa[13], result);
+		aainfo[13]._frame = result;
 	}
 }
 
 static void room_308_anim16() {
-	int16 cur = kernel_anim[seq[8]].frame;
-	if (cur == aainfo[8]._val4)
+	int16 cur = kernel_anim[aa[14]].frame;
+	if (cur == aainfo[14]._frame)
 		return;
-	aainfo[8]._val4 = cur;
+	aainfo[14]._frame = cur;
 
 	if (cur == 1) {
 		digi_initial_volume(60);
 		digi_play_build(308, '_', 3, 2);
 	} else if (cur == 8) {
 		dont_frag_the_palette();
-		kernel_abort_animation(seq[8]);
-		aainfo[8]._val3 = 0;
-		kernel_reset_animation(seq[1], 0);
-		aainfo[4]._active = 0;
-		kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
-		kernel_reset_animation(seq[3], 0);
-		aainfo[5]._val3 = 0;
-		kernel_synch(KERNEL_ANIM, seq[3], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[14]);
+		aainfo[14]._active = 0;
+		kernel_reset_animation(aa[7], 0);
+		aainfo[7]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
+		kernel_reset_animation(aa[9], 0);
+		aainfo[9]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
 		player.commands_allowed = true;
 	}
 }
 
 static void room_308_anim17() {
-	int16 cur = kernel_anim[seq[9]].frame;
-	if (cur == aainfo[9]._frame)
+	int16 cur = kernel_anim[aa[15]].frame;
+	if (cur == aainfo[15]._frame)
 		return;
-	aainfo[9]._frame = cur;
+	aainfo[15]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 1) {
+		digi_initial_volume(60);
 		digi_play_build(308, '_', 3, 2);
 	} else if (cur == 13) {
-		kernel_reset_animation(seq[0], 10);
-		kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
-		seq[4] = kernel_run_animation(kernel_name('t', 22), 0);
-		aainfo[5]._val4 = -1;
-		kernel_synch(KERNEL_ANIM, seq[4], KERNEL_ANIM, seq[9]);
+		kernel_reset_animation(aa[6], 10);
+		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+		aa[10] = kernel_run_animation(kernel_name('t', 22), 0);
+		aainfo[10]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[10], KERNEL_ANIM, aa[15]);
 	} else if (cur == 14) {
 		result = 13;
 	} else if (cur == 23) {
 		dont_frag_the_palette();
-		kernel_abort_animation(seq[9]);
-		aainfo[9]._active = 0;
-		aa[2] = kernel_run_animation(kernel_name('t', 24), 0);
-		kernel_reset_animation(aa[2], 4);
-		scratch._90 = -1;
-		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[15]);
+		aainfo[15]._active = 0;
+		aa[18] = kernel_run_animation(kernel_name('t', 24), 0);
+		kernel_reset_animation(aa[18], 4);
+		aainfo[18]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[18], KERNEL_NOW, 0);
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(seq[9], result);
-		aainfo[9]._frame = result;
+		kernel_reset_animation(aa[15], result);
+		aainfo[15]._frame = result;
 	}
 }
 
 static void room_308_anim18() {
-	int16 cur = kernel_anim[aa[0]].frame;
-	if (cur == aainfo[9]._val4)
+	int16 cur = kernel_anim[aa[16]].frame;
+	if (cur == aainfo[16]._frame)
 		return;
-	aainfo[9]._val4 = cur;
+	aainfo[16]._frame = cur;
 
 	if (cur == 6) {
 		digi_play_build(203, '_', 4, 2);
@@ -741,20 +722,20 @@ static void room_308_anim18() {
 		digi_play_build(308, '_', 4, 2);
 	} else if (cur == 15) {
 		dont_frag_the_palette();
-		kernel_abort_animation(aa[0]);
-		aainfo[9]._val3 = 0;
-		kernel_reset_animation(seq[0], 0);
-		aainfo[3]._frame = 0;
-		kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[16]);
+		aainfo[16]._active = 0;
+		kernel_reset_animation(aa[6], 0);
+		aainfo[6]._val3 = 0;
+		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
 		player.commands_allowed = true;
 	}
 }
 
 static void room_308_anim19() {
-	int16 cur = kernel_anim[aa[1]].frame;
-	if (cur == scratch._8e)
+	int16 cur = kernel_anim[aa[17]].frame;
+	if (cur == aainfo[17]._frame)
 		return;
-	scratch._8e = cur;
+	aainfo[17]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 2) {
@@ -767,43 +748,43 @@ static void room_308_anim19() {
 		scratch._c4++;
 		if (scratch._c4 == 2) {
 			dont_frag_the_palette();
-			kernel_abort_animation(aa[1]);
-			scratch._8c = 0;
+			kernel_abort_animation(aa[17]);
+			aainfo[17]._active = 0;
 			dont_frag_the_palette();
-			kernel_abort_animation(seq[9]);
-			aainfo[9]._active = 0;
-			aa[2] = kernel_run_animation(kernel_name('t', 24), 0);
-			scratch._90 = -1;
-			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
+			kernel_abort_animation(aa[15]);
+			aainfo[15]._active = 0;
+			aa[18] = kernel_run_animation(kernel_name('t', 24), 0);
+			aainfo[18]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[18], KERNEL_NOW, 0);
 		} else {
 			result = 8;
 		}
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(aa[1], result);
-		scratch._8e = result;
+		kernel_reset_animation(aa[17], result);
+		aainfo[17]._frame = result;
 	}
 }
 
 static void room_308_anim20() {
-	int16 cur = kernel_anim[aa[2]].frame;
-	if (cur == scratch._92)
+	int16 cur = kernel_anim[aa[18]].frame;
+	if (cur == aainfo[18]._frame)
 		return;
-	scratch._92 = cur;
+	aainfo[18]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 6) {
 		global[g009] = 0;
 		global_midi_play(5);
 		digi_play_build(308, 't', 5, 1);
-		scratch._94 = 3;
+		aainfo[18]._val3 = 3;
 		scratch._b4 = 3;
 	} else if (cur == 7 || cur == 8 || cur == 9) {
-		if (scratch._94 == 3)
+		if (aainfo[18]._val3 == 3)
 			result = imath_random(6, 8);
 	} else if (cur == 11) {
-		kernel_seq_delete(ss[2]);
+		kernel_seq_delete(seq[0]);
 	} else if (cur == 17) {
 		digi_play_build(203, '_', 1, 2);
 	} else if (cur == 20) {
@@ -811,54 +792,54 @@ static void room_308_anim20() {
 		digi_play_build(322, '_', 1, 2);
 	} else if (cur == 27) {
 		dont_frag_the_palette();
-		kernel_abort_animation(aa[2]);
-		scratch._90 = 0;
-		aa[3] = kernel_run_animation(kernel_name('t', 30), 0);
-		scratch._96 = -1;
-		kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[18]);
+		aainfo[18]._active = 0;
+		aa[19] = kernel_run_animation(kernel_name('t', 30), 0);
+		aainfo[19]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[19], KERNEL_NOW, 0);
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(aa[2], result);
-		scratch._92 = result;
+		kernel_reset_animation(aa[18], result);
+		aainfo[18]._frame = result;
 	}
 }
 
 static void room_308_anim21() {
-	int16 cur = kernel_anim[aa[3]].frame;
-	if (cur == scratch._98)
+	int16 cur = kernel_anim[aa[19]].frame;
+	if (cur == aainfo[19]._frame)
 		return;
-	scratch._98 = cur;
+	aainfo[19]._frame = cur;
 
 	int16 result = -1;
 	if (cur == 3) {
 		digi_play_build(308, 'r', 4, 1);
 		scratch._b4 = 4;
-		scratch._9a = 3;
+		aainfo[19]._val3 = 3;
 	} else if (cur >= 4 && cur <= 9) {
-		if (scratch._9a == 3)
+		if (aainfo[19]._val3 == 3)
 			result = imath_random(7, 9);
 	} else if (cur == 15) {
-		kernel_abort_animation(aa[3]);
-		scratch._96 = 0;
-		aa[4] = kernel_run_animation(kernel_name('t', 26), 0);
-		scratch._9c = -1;
-		kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[19]);
+		aainfo[19]._active = 0;
+		aa[20] = kernel_run_animation(kernel_name('t', 26), 0);
+		aainfo[20]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[20], KERNEL_NOW, 0);
 		digi_play_build(308, 'b', 4, 1);
 		scratch._b4 = -1;
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(aa[3], result);
-		scratch._98 = result;
+		kernel_reset_animation(aa[19], result);
+		aainfo[19]._frame = result;
 	}
 }
 
 static void room_308_anim22() {
-	int16 cur = kernel_anim[aa[4]].frame;
-	if (cur == scratch._9e)
+	int16 cur = kernel_anim[aa[20]].frame;
+	if (cur == aainfo[20]._frame)
 		return;
-	scratch._9e = cur;
+	aainfo[20]._frame = cur;
 
 	if (cur == 70) {
 		if (global[walker_converse_state] != 0) {
@@ -878,16 +859,16 @@ static void room_308_anim22() {
 }
 
 static void room_308_anim23() {
-	int16 cur = kernel_anim[aa[5]].frame;
-	if (cur == scratch._a4)
+	int16 cur = kernel_anim[aa[21]].frame;
+	if (cur == aainfo[21]._frame)
 		return;
-	scratch._a4 = cur;
+	aainfo[21]._frame = cur;
 
 	if (cur == 47) {
-		aa[6] = kernel_run_animation(kernel_name('t', 25), 110);
-		scratch._a8 = -1;
-		scratch._ac = 3;
-		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+		aa[22] = kernel_run_animation(kernel_name('t', 25), 110);
+		aainfo[22]._active = -1;
+		aainfo[22]._val3 = 3;
+		kernel_synch(KERNEL_ANIM, aa[22], KERNEL_NOW, 0);
 	} else if (cur == 48 || cur == 64 || cur == 88 || cur == 108 || cur == 140) {
 		digi_initial_volume(60);
 		digi_play_build(308, '_', 1, 2);
@@ -906,44 +887,44 @@ static void room_308_anim23() {
 }
 
 static void room_308_anim24() {
-	int16 cur = kernel_anim[aa[6]].frame;
-	if (cur == scratch._aa)
+	int16 cur = kernel_anim[aa[22]].frame;
+	if (cur == aainfo[22]._frame)
 		return;
-	scratch._aa = cur;
+	aainfo[22]._frame = cur;
 
 	int16 result = -1;
-	if (cur == 1 || cur == 28) {
+	if (cur == 1 || cur == 27) {
 		digi_initial_volume(60);
 		digi_play_build(308, '_', 3, 1);
 		scratch._b4 = -1;
-	} else if (cur == 20) {
+	} else if (cur == 19) {
 		digi_play_build(308, 't', 7, 1);
 		scratch._b4 = 5;
-	} else if (cur >= 21 && cur <= 26) {
-		if (scratch._ac == 3)
+	} else if (cur >= 20 && cur <= 25) {
+		if (aainfo[22]._val3 == 3)
 			result = imath_random(20, 25);
-	} else if (cur == 29) {
+	} else if (cur == 28) {
 		global[g009] = 0;
 		global_midi_play(5);
 	}
 
 	if (result >= 0) {
-		kernel_reset_animation(aa[6], result);
-		scratch._aa = result;
+		kernel_reset_animation(aa[22], result);
+		aainfo[22]._frame = result;
 	}
 }
 
 static void room_308_anim25() {
-	int16 cur = kernel_anim[aa[7]].frame;
-	if (cur == scratch._b0)
+	int16 cur = kernel_anim[aa[23]].frame;
+	if (cur == aainfo[23]._frame)
 		return;
-	scratch._b0 = cur;
+	aainfo[23]._frame = cur;
 
 	if (cur == 64) {
-		aa[6] = kernel_run_animation(kernel_name('t', 25), 110);
-		scratch._a8 = -1;
-		scratch._ac = 3;
-		kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
+		aa[22] = kernel_run_animation(kernel_name('t', 25), 110);
+		aainfo[22]._active = -1;
+		aainfo[22]._val3 = 3;
+		kernel_synch(KERNEL_ANIM, aa[22], KERNEL_NOW, 0);
 	} else if (cur == 67 || cur == 92 || cur == 116) {
 		digi_initial_volume(60);
 		digi_play_build(308, '_', 1, 2);
@@ -982,43 +963,21 @@ static void room_308_init() {
 	player.walker_visible = false;
 
 	if (previous_room != KERNEL_RESTORING_GAME) {
-		aa[9] = 0;
-		aainfo[0]._frame  = 0;
-		aainfo[0]._val4   = 0;
-		aainfo[1]._frame  = 0;
-		aainfo[1]._val4   = 0;
-		aainfo[2]._frame  = 0;
-		aainfo[6]._val3   = 0;
-		aainfo[2]._val4   = 0;
-		aainfo[3]._val3   = 0;
-		aainfo[4]._frame  = 0;
-		aainfo[5]._active = 0;
-		aainfo[5]._val4   = 0;
-		aainfo[7]._active = 0;
-		aainfo[7]._val4   = 0;
-		aainfo[8]._val3   = 0;
-		aainfo[9]._active = 0;
-		aainfo[9]._val3   = 0;
-		scratch._8c = 0;
-		scratch._90 = 0;
-		scratch._96 = 0;
-		scratch._9c = 0;
-		scratch._a2 = 0;
-		scratch._a8 = 0;
-		scratch._ae = 0;
-		scratch._ba = 0;
-		scratch._c2 = 0;
+		for (int i = 0; i < 24; i++)
+			aainfo[i]._active = 0;
+		scratch._b8 = 0;
 		scratch._c0 = 0;
+		scratch._be = 0;
 	}
 
-	scratch._c6 = 0;
+	scratch._c4 = 0;
 	scratch._b4 = -1;
-	scratch._b8 = -1;
+	scratch._b6 = -1;
 	scratch._b2 = 0;
+	scratch._ba = 0;
 	scratch._bc = 0;
-	scratch._be = 0;
-	scratch._c4 = 0;
-	scratch._c5 = 0;
+	scratch._c2 = 0;
+	scratch._c3 = 0;
 	stop_speech_on_run_animation = true;
 
 	kernel_flip_hotspot(words_room_307, false);
@@ -1027,62 +986,62 @@ static void room_308_init() {
 	if (!player_has_been_in_room(401)) {
 		ss[0] = kernel_load_series(kernel_name('p', 3), 0);
 		if (global[g072] != 0) {
-			ss[2] = kernel_seq_stamp(ss[0], false, -1);
-			kernel_seq_depth(ss[2], 4);
-			kernel_seq_loc(ss[2], 99, 125);
-			kernel_synch(KERNEL_SERIES, ss[2], KERNEL_ANIM, seq[6]);
-			scratch._c0 = 100;
-			scratch._ba = -1;
+			seq[0] = kernel_seq_stamp(ss[0], false, -1);
+			kernel_seq_depth(seq[0], 4);
+			kernel_seq_loc(seq[0], 99, 125);
+			kernel_synch(KERNEL_SERIES, seq[0], KERNEL_ANIM, aa[12]);
+			scratch._be = 100;
+			scratch._b8 = -1;
 		}
 	}
 
 	if (previous_room == 401) {
 		player.commands_allowed = false;
-		aa[5] = kernel_run_animation(kernel_name('t', 27), 0);
-		scratch._a2 = -1;
+		aa[21] = kernel_run_animation(kernel_name('t', 27), 0);
+		aainfo[21]._active = -1;
 		return;
 	}
 
 	if (previous_room == 307 || previous_room == 322) {
 		player.commands_allowed = false;
 		if (player_has_been_in_room(401)) {
-			aa[7] = kernel_run_animation(kernel_name('t', 40), 0);
-			kernel_reset_animation(aa[7], 13);
-			scratch._ae = -1;
+			aa[23] = kernel_run_animation(kernel_name('t', 40), 0);
+			kernel_reset_animation(aa[23], 13);
+			aainfo[23]._active = -1;
 			return;
 		}
 		if (player.been_here_before && player_has(5) && player_has(1) && player_has(15)) {
-			ss[7] = kernel_run_animation(kernel_name('t', 8), 103);
-			aainfo[1]._frame = -1;
-			kernel_synch(KERNEL_ANIM, ss[7], KERNEL_NOW, 0);
+			aa[3] = kernel_run_animation(kernel_name('t', 8), 103);
+			aainfo[3]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
 			global[g009] = -1;
 			global_midi_play(15);
 			player.commands_allowed = false;
 			return;
 		}
 		if (!player.been_here_before) {
-			ss[4] = kernel_run_animation(kernel_name('t', 1), 100);
-			kernel_reset_animation(ss[4], 13);
-			aa[9] = -1;
+			aa[0] = kernel_run_animation(kernel_name('t', 1), 100);
+			kernel_reset_animation(aa[0], 13);
+			aainfo[0]._active = -1;
 			return;
 		}
 		if (!player_has(5) || !player_has(1)) {
-			ss[8] = kernel_run_animation(kernel_name('t', 6), 104);
-			aainfo[1]._val4 = -1;
-			kernel_synch(KERNEL_ANIM, ss[8], KERNEL_NOW, 0);
+			aa[4] = kernel_run_animation(kernel_name('t', 6), 104);
+			aainfo[4]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 			global[g009] = -1;
 			global_midi_play(15);
 			return;
 		}
 		if (player_has(15)) {
-			ss[4] = kernel_run_animation(kernel_name('t', 1), 100);
-			kernel_reset_animation(ss[4], 13);
-			aa[9] = -1;
+			aa[0] = kernel_run_animation(kernel_name('t', 1), 100);
+			kernel_reset_animation(aa[0], 13);
+			aainfo[0]._active = -1;
 			return;
 		}
-		ss[8] = kernel_run_animation(kernel_name('t', 6), 104);
-		aainfo[1]._val4 = -1;
-		kernel_synch(KERNEL_ANIM, ss[8], KERNEL_NOW, 0);
+		aa[4] = kernel_run_animation(kernel_name('t', 6), 104);
+		aainfo[4]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 		global[g009] = -1;
 		global_midi_play(15);
 		return;
@@ -1093,25 +1052,25 @@ static void room_308_init() {
 	    previous_room != 199)
 		return;
 
-	seq[0] = kernel_run_animation(kernel_name('t', 11), 0);
-	aainfo[2]._val4   = -1;
-	aainfo[3]._frame  = 0;
-	kernel_synch(KERNEL_ANIM, seq[0], KERNEL_NOW, 0);
+	aa[6] = kernel_run_animation(kernel_name('t', 11), 0);
+	aainfo[6]._active = -1;
+	aainfo[6]._val3   = 0;
+	kernel_synch(KERNEL_ANIM, aa[6], KERNEL_NOW, 0);
 
-	seq[1] = kernel_run_animation(kernel_name('t', 19), 0);
-	aainfo[3]._val3   = -1;
-	aainfo[4]._active = 0;
-	kernel_synch(KERNEL_ANIM, seq[1], KERNEL_NOW, 0);
+	aa[7] = kernel_run_animation(kernel_name('t', 19), 0);
+	aainfo[7]._active = -1;
+	aainfo[7]._val3   = 0;
+	kernel_synch(KERNEL_ANIM, aa[7], KERNEL_NOW, 0);
 
-	seq[2] = kernel_run_animation(kernel_name('t', 13), 0);
-	aainfo[4]._frame  = -1;
-	aainfo[4]._val4   = 0;
-	kernel_synch(KERNEL_ANIM, seq[2], KERNEL_NOW, 0);
+	aa[8] = kernel_run_animation(kernel_name('t', 13), 0);
+	aainfo[8]._active = -1;
+	aainfo[8]._val3   = 0;
+	kernel_synch(KERNEL_ANIM, aa[8], KERNEL_NOW, 0);
 
-	seq[3] = kernel_run_animation(kernel_name('t', 18), 0);
-	aainfo[5]._active = -1;
-	aainfo[5]._val3   = 0;
-	kernel_synch(KERNEL_ANIM, seq[3], KERNEL_NOW, 0);
+	aa[9] = kernel_run_animation(kernel_name('t', 18), 0);
+	aainfo[9]._active = -1;
+	aainfo[9]._val3   = 0;
+	kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
 
 	if (global[g073] == 0) {
 		global[g009] = -1;
@@ -1119,12 +1078,12 @@ static void room_308_init() {
 		return;
 	}
 
-	kernel_reset_animation(seq[2], 6);
-	seq[7] = kernel_run_animation(kernel_name('t', 14), 0);
-	kernel_reset_animation(seq[7], 7);
-	aainfo[7]._val4  = -1;
-	aainfo[8]._frame = 0;
-	scratch._c2 = 100;
+	kernel_reset_animation(aa[8], 6);
+	aa[13] = kernel_run_animation(kernel_name('t', 14), 0);
+	kernel_reset_animation(aa[13], 7);
+	aainfo[13]._active = -1;
+	aainfo[13]._val3   = 0;
+	scratch._c0 = 100;
 	global[g009] = -1;
 	global_midi_play(15);
 }
@@ -1135,75 +1094,75 @@ static void room_308_daemon() {
 		switch (scratch._b4) {
 		case 1:
 			clear_selected_item();
-			aainfo[5]._val3 = 0;
+			aainfo[9]._val3 = 0;
 			scratch._b4 = -1;
 			player.commands_allowed = true;
 			scratch._c2 = 0;
 			break;
 		case 2:
 			clear_selected_item();
-			aainfo[5]._val3 = 0;
-			aainfo[8]._frame = 0;
+			aainfo[9]._val3 = 0;
+			aainfo[13]._val3 = 0;
 			scratch._b4 = -1;
 			player.commands_allowed = true;
 			scratch._c2 = 0;
 			break;
 		case 3:
-			scratch._94 = 0;
+			aainfo[18]._val3 = 0;
 			break;
 		case 4:
-			scratch._9a = 0;
+			aainfo[19]._val3 = 0;
 			break;
 		case 5:
-			scratch._ac = 0;
+			aainfo[22]._val3 = 0;
 			break;
 		}
 		break;
 
 	case 100:
 		dont_frag_the_palette();
-		kernel_abort_animation(ss[4]);
-		aa[9] = 0;
-		ss[5] = kernel_run_animation(kernel_name('t', 3), 101);
-		aainfo[0]._frame = -1;
-		kernel_synch(KERNEL_ANIM, ss[5], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[0]);
+		aainfo[0]._active = 0;
+		aa[1] = kernel_run_animation(kernel_name('t', 3), 101);
+		aainfo[1]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[1], KERNEL_NOW, 0);
 		break;
 
 	case 101:
 		dont_frag_the_palette();
-		kernel_abort_animation(ss[5]);
-		aainfo[0]._frame = 0;
-		ss[6] = kernel_run_animation(kernel_name('t', 5), 102);
-		aainfo[0]._val4 = -1;
-		kernel_synch(KERNEL_ANIM, ss[6], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[1]);
+		aainfo[1]._active = 0;
+		aa[2] = kernel_run_animation(kernel_name('t', 5), 102);
+		aainfo[2]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[2], KERNEL_NOW, 0);
 		global[g009] = -1;
 		global_midi_play(15);
 		break;
 
 	case 102:
 		dont_frag_the_palette();
-		kernel_abort_animation(ss[6]);
-		aainfo[0]._val4 = 0;
+		kernel_abort_animation(aa[2]);
+		aainfo[2]._active = 0;
 		if (player_has(5) && player_has(1) && player_has(15)) {
-			ss[7] = kernel_run_animation(kernel_name('t', 8), 103);
-			aainfo[1]._frame = -1;
-			kernel_synch(KERNEL_ANIM, ss[7], KERNEL_NOW, 0);
+			aa[3] = kernel_run_animation(kernel_name('t', 8), 103);
+			aainfo[3]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[3], KERNEL_NOW, 0);
 		} else {
 			global[player_score] = -1;
-			ss[8] = kernel_run_animation(kernel_name('t', 6), 104);
-			aainfo[1]._val4 = -1;
-			kernel_synch(KERNEL_ANIM, ss[8], KERNEL_NOW, 0);
+			aa[4] = kernel_run_animation(kernel_name('t', 6), 104);
+			aainfo[4]._active = -1;
+			kernel_synch(KERNEL_ANIM, aa[4], KERNEL_NOW, 0);
 		}
 		break;
 
 	case 103:
 		dont_frag_the_palette();
-		kernel_abort_animation(ss[7]);
-		aainfo[1]._frame = 0;
-		ss[9] = kernel_run_animation(kernel_name('t', 7), 105);
-		kernel_reset_animation(ss[9], 6);
-		aainfo[2]._frame = -1;
-		kernel_synch(KERNEL_ANIM, ss[9], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[3]);
+		aainfo[3]._active = 0;
+		aa[5] = kernel_run_animation(kernel_name('t', 7), 105);
+		kernel_reset_animation(aa[5], 6);
+		aainfo[5]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[5], KERNEL_NOW, 0);
 		break;
 
 	case 104:
@@ -1221,29 +1180,29 @@ static void room_308_daemon() {
 
 	case 105:
 		dont_frag_the_palette();
-		kernel_abort_animation(ss[9]);
-		aainfo[2]._frame = 0;
-		seq[5] = kernel_run_animation(kernel_name('t', 9), 0);
-		kernel_reset_animation(seq[5], 6);
-		aainfo[6]._val3 = -1;
-		kernel_synch(KERNEL_ANIM, seq[5], KERNEL_NOW, 0);
+		kernel_abort_animation(aa[5]);
+		aainfo[5]._active = 0;
+		aa[11] = kernel_run_animation(kernel_name('t', 9), 0);
+		kernel_reset_animation(aa[11], 6);
+		aainfo[11]._active = -1;
+		kernel_synch(KERNEL_ANIM, aa[11], KERNEL_NOW, 0);
 		break;
 
 	case 108:
 		digi_play_build(308, 't', 3, 1);
-		aainfo[5]._val3 = 3;
+		aainfo[9]._val3 = 3;
 		scratch._b4 = 1;
 		break;
 
 	case 109:
 		digi_play_build(308, 't', 4, 1);
-		aainfo[5]._val3 = 3;
+		aainfo[9]._val3 = 3;
 		scratch._b4 = 2;
 		break;
 
 	case 110:
-		kernel_abort_animation(aa[6]);
-		scratch._a8 = 0;
+		kernel_abort_animation(aa[22]);
+		aainfo[22]._active = 0;
 		break;
 
 	case 111:
@@ -1261,30 +1220,30 @@ static void room_308_daemon() {
 		break;
 	}
 
-	if (aa[9] != 0)              room_308_anim1();
-	if (aainfo[0]._frame != 0)   room_308_anim2();
-	if (aainfo[0]._val4 != 0)    room_308_anim3();
-	if (aainfo[1]._frame != 0)   room_308_anim4();
-	if (aainfo[1]._val4 != 0)    room_308_anim5();
-	if (aainfo[2]._frame != 0)   room_308_anim7();
-	if (aainfo[6]._val3 != 0)    room_308_anim8();
-	if (aainfo[2]._val4 != 0)    room_308_anim9();
-	if (aainfo[3]._val3 != 0)    room_308_anim10();
-	if (aainfo[4]._frame != 0)   room_308_anim11();
-	if (aainfo[5]._active != 0)  room_308_anim12();
-	if (aainfo[5]._val4 != 0)    room_308_anim13();
-	if (aainfo[7]._active != 0)  room_308_anim14();
-	if (aainfo[7]._val4 != 0)    room_308_anim15();
-	if (aainfo[8]._val3 != 0)    room_308_anim16();
-	if (aainfo[9]._active != 0)  room_308_anim17();
-	if (aainfo[9]._val3 != 0)    room_308_anim18();
-	if (scratch._8c != 0)        room_308_anim19();
-	if (scratch._90 != 0)        room_308_anim20();
-	if (scratch._96 != 0)        room_308_anim21();
-	if (scratch._9c != 0)        room_308_anim22();
-	if (scratch._a2 != 0)        room_308_anim23();
-	if (scratch._a8 != 0)        room_308_anim24();
-	if (scratch._ae != 0)        room_308_anim25();
+	if (aainfo[0]._active != 0)  room_308_anim1();
+	if (aainfo[1]._active != 0)  room_308_anim2();
+	if (aainfo[2]._active != 0)  room_308_anim3();
+	if (aainfo[3]._active != 0)  room_308_anim4();
+	if (aainfo[4]._active != 0)  room_308_anim5();
+	if (aainfo[5]._active != 0)  room_308_anim7();
+	if (aainfo[11]._active != 0) room_308_anim8();
+	if (aainfo[6]._active != 0)  room_308_anim9();
+	if (aainfo[7]._active != 0)  room_308_anim10();
+	if (aainfo[8]._active != 0)  room_308_anim11();
+	if (aainfo[9]._active != 0)  room_308_anim12();
+	if (aainfo[10]._active != 0) room_308_anim13();
+	if (aainfo[12]._active != 0) room_308_anim14();
+	if (aainfo[13]._active != 0) room_308_anim15();
+	if (aainfo[14]._active != 0) room_308_anim16();
+	if (aainfo[15]._active != 0) room_308_anim17();
+	if (aainfo[16]._active != 0) room_308_anim18();
+	if (aainfo[17]._active != 0) room_308_anim19();
+	if (aainfo[18]._active != 0) room_308_anim20();
+	if (aainfo[19]._active != 0) room_308_anim21();
+	if (aainfo[20]._active != 0) room_308_anim22();
+	if (aainfo[21]._active != 0) room_308_anim23();
+	if (aainfo[22]._active != 0) room_308_anim24();
+	if (aainfo[23]._active != 0) room_308_anim25();
 }
 
 static void room_308_pre_parser() {
@@ -1303,20 +1262,20 @@ static void room_308_parser() {
 	int sel;
 
 	if (global[walker_converse_state] != 0) {
-		scratch._bc = -1;
+		scratch._ba = -1;
 		player.commands_allowed = false;
-		aainfo[5]._val3 = 8;
+		aainfo[9]._val3 = 8;
 		goto handled;
 	}
 
 	if (player_parse(words_tail, 0)) {
-		scratch._bc = -1;
+		scratch._ba = -1;
 		player.commands_allowed = false;
 		goto handled;
 	}
 
 	if (player_parse(words_russel, 0)) {
-		scratch._be = -1;
+		scratch._bc = -1;
 		player.commands_allowed = false;
 		goto handled;
 	}
@@ -1327,25 +1286,25 @@ static void room_308_parser() {
 
 	if (sel == 15 || sel == 1) {
 		inv_enable_command = false;
-		object_set_quality(rubber_band, 0, -1);
-		object_set_quality(forked_stick, 0, -1);
-		object_set_quality(pebbles, 0, -1);
-		scratch._b8 = 1;
-		aainfo[4]._val4 = 7;
-		aainfo[5]._val3 = 8;
+		object_set_quality(rubber_band, -1, -1);
+		object_set_quality(forked_stick, -1, -1);
+		object_set_quality(pebbles, -1, -1);
+		scratch._b6 = 1;
+		aainfo[8]._val3 = 7;
+		aainfo[9]._val3 = 8;
 		goto handled;
 	}
 
 	if (sel == 5) {
 		inv_enable_command = false;
-		object_set_quality(pebbles, 0, -1);
-		scratch._b8 = 0;
-		aainfo[4]._val4 = 6;
-		aainfo[5]._val3 = 8;
+		object_set_quality(pebbles, -1, -1);
+		scratch._b6 = 0;
+		aainfo[8]._val3 = 6;
+		aainfo[9]._val3 = 8;
 		goto handled;
 	}
 
-	goto done;
+	goto handled;
 handled:
 	player.command_ready = false;
 done:
@@ -1356,26 +1315,45 @@ void room_308_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 (auto &ai : scratch.animation_info) ai.synchronize(s);
-	s.syncAsSint16LE(scratch._8c);
-	s.syncAsSint16LE(scratch._90);
-	s.syncAsSint16LE(scratch._96);
-	s.syncAsSint16LE(scratch._9c);
-	s.syncAsSint16LE(scratch._a2);
-	s.syncAsSint16LE(scratch._a8);
-	s.syncAsSint16LE(scratch._ae);
+
+	s.syncAsSint16LE(scratch._unused);
+
+	// Sync aainfo entries individually, with val3 only where present
+	// Indices with val3: 6,7,8,9,10,12,13,18,19,20,21,22
+	for (int i = 0; i < 24; i++) {
+		s.syncAsSint16LE(aainfo[i]._active);
+		s.syncAsSint16LE(aainfo[i]._frame);
+		switch (i) {
+		case 6:
+		case 7:
+		case 8:
+		case 9:
+		case 10:
+		case 12:
+		case 13:
+		case 18:
+		case 19:
+		case 20:
+		case 21:
+		case 22:
+			s.syncAsSint16LE(aainfo[i]._val3);
+			break;
+		default:
+			break;
+		}
+	}
+
 	s.syncAsSint16LE(scratch._b2);
 	s.syncAsSint16LE(scratch._b4);
+	s.syncAsSint16LE(scratch._b6);
 	s.syncAsSint16LE(scratch._b8);
 	s.syncAsSint16LE(scratch._ba);
 	s.syncAsSint16LE(scratch._bc);
 	s.syncAsSint16LE(scratch._be);
 	s.syncAsSint16LE(scratch._c0);
 	s.syncAsByte(scratch._c2);
-	s.syncAsByte(scratch._c2hi);
+	s.syncAsByte(scratch._c3);
 	s.syncAsByte(scratch._c4);
-	s.syncAsByte(scratch._c5);
-	s.syncAsByte(scratch._c6);
 }
 
 void room_308_preload() {




More information about the Scummvm-git-logs mailing list