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

dreammaster noreply at scummvm.org
Sat Apr 25 22:31:26 UTC 2026


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

Summary:
0c70a2b401 MADS: PHANTOM: Start of room specific locals sync
aa46304814 MADS: PHANTOM: Add room synchronize methods to all rooms


Commit: 0c70a2b4019c7211899e5740270cc35de65c279a
    https://github.com/scummvm/scummvm/commit/0c70a2b4019c7211899e5740270cc35de65c279a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-04-26T08:30:59+10:00

Commit Message:
MADS: PHANTOM: Start of room specific locals sync

Changed paths:
    engines/mads/madsv2/core/game.h
    engines/mads/madsv2/core/kernel.cpp
    engines/mads/madsv2/core/kernel.h
    engines/mads/madsv2/engine.cpp
    engines/mads/madsv2/engine.h
    engines/mads/madsv2/phantom/global.cpp
    engines/mads/madsv2/phantom/global.h
    engines/mads/madsv2/phantom/phantom.cpp
    engines/mads/madsv2/phantom/phantom.h
    engines/mads/madsv2/phantom/rooms/room101.cpp
    engines/mads/madsv2/phantom/rooms/room101.h


diff --git a/engines/mads/madsv2/core/game.h b/engines/mads/madsv2/core/game.h
index 7e1928ea449..3eb70f643e0 100644
--- a/engines/mads/madsv2/core/game.h
+++ b/engines/mads/madsv2/core/game.h
@@ -22,6 +22,7 @@
 #ifndef MADS_CORE_GAME_H
 #define MADS_CORE_GAME_H
 
+#include "common/serializer.h"
 #include "mads/madsv2/core/general.h"
 #include "mads/madsv2/core/global.h"
 #include "mads/madsv2/core/player.h"
diff --git a/engines/mads/madsv2/core/kernel.cpp b/engines/mads/madsv2/core/kernel.cpp
index 4282135268c..0d9a4b72095 100644
--- a/engines/mads/madsv2/core/kernel.cpp
+++ b/engines/mads/madsv2/core/kernel.cpp
@@ -161,7 +161,7 @@ static void kernel_animation_get_sprite(int handle, int id);
 void KernelGame::synchronize(Common::Serializer &s) {
 	s.syncAsByte(going);
 	s.skip(1);
-	s.syncMultipleLE(scratch);
+	s.syncBytes(scratch, KERNEL_SCRATCH_SIZE);
 	s.syncAsByte(difficulty);
 	s.skip(1);
 	s.syncAsSint16LE(last_save);
diff --git a/engines/mads/madsv2/core/kernel.h b/engines/mads/madsv2/core/kernel.h
index 11f0c8dbedf..3a63a240335 100644
--- a/engines/mads/madsv2/core/kernel.h
+++ b/engines/mads/madsv2/core/kernel.h
@@ -128,7 +128,7 @@ namespace MADSV2 {
 
 #define KERNEL_MAX_ANIMATIONS         10       /* Max number of animations    */
 
-#define KERNEL_SCRATCH_SIZE           256     /* Size of game scratch area   */
+#define KERNEL_SCRATCH_SIZE           512     /* Size of game scratch area   */
 
 #define KERNEL_HOME                   -32000  /* Sprite home location        */
 
@@ -307,7 +307,7 @@ typedef struct {
 
 struct KernelGame {
 	byte going;							/* Game is running OK          */
-	int16 scratch[KERNEL_SCRATCH_SIZE];	/* Scratch variables for room  */
+	byte scratch[KERNEL_SCRATCH_SIZE * 2];	/* Scratch variables for room  */
 	int8 difficulty;					/* Difficulty level            */
 	int16  last_save;					/* Most recent save slot #     */
 
diff --git a/engines/mads/madsv2/engine.cpp b/engines/mads/madsv2/engine.cpp
index 12bb4732854..fe044deff62 100644
--- a/engines/mads/madsv2/engine.cpp
+++ b/engines/mads/madsv2/engine.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "common/system.h"
+#include "common/memstream.h"
 #include "engines/util.h"
 #include "mads/mads.h"
 #include "mads/madsv2/engine.h"
@@ -130,8 +131,24 @@ done:
 }
 	
 void MADSV2Engine::syncGame(Common::Serializer &s) {
+	if (s.isSaving()) {
+		// Write the room specific locals to the game scratchpad
+		Common::fill(game.scratch, game.scratch + KERNEL_SCRATCH_SIZE, 0);
+		Common::MemoryWriteStream scratchStream(game.scratch, KERNEL_SCRATCH_SIZE);
+		Common::Serializer s2(nullptr, &scratchStream);
+		syncRoom(s2);
+	}
+
 	game.synchronize(s);
 	s.syncAsSint16LE(new_room);
+
+	if (s.isLoading()) {
+		// Unpack the loaded scratch data for the room
+		Common::MemoryReadStream scratchStream(game.scratch, KERNEL_SCRATCH_SIZE);
+		Common::Serializer s2(&scratchStream, nullptr);
+		syncRoom(s2);
+	}
+
 	player2.synchronize(s);
 
 	s.syncAsSint16LE(inven_num_objects);
diff --git a/engines/mads/madsv2/engine.h b/engines/mads/madsv2/engine.h
index 6a76fffae3c..b44311d5e4a 100644
--- a/engines/mads/madsv2/engine.h
+++ b/engines/mads/madsv2/engine.h
@@ -93,6 +93,7 @@ public:
 	}
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave) override;
 	Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
+	virtual void syncRoom(Common::Serializer &s) = 0;
 	SaveStateList listSaves() const;
 
 	virtual void global_init_code() = 0;
diff --git a/engines/mads/madsv2/phantom/global.cpp b/engines/mads/madsv2/phantom/global.cpp
index c151551facd..7fabf610003 100644
--- a/engines/mads/madsv2/phantom/global.cpp
+++ b/engines/mads/madsv2/phantom/global.cpp
@@ -29,6 +29,7 @@ namespace MADSV2 {
 namespace Phantom {
 
 namespace Rooms {
+// Section preloads
 extern void section_1_preload();
 extern void section_2_preload();
 extern void section_3_preload();
@@ -37,6 +38,10 @@ extern void section_5_preload();
 extern void section_6_preload();
 extern void section_7_preload();
 extern void section_8_preload();
+
+// Room syncs
+extern void room_101_synchronize(Common::Serializer &s);
+
 } // namespace Rooms
 
 void global_section_constructor() {
@@ -73,6 +78,17 @@ void global_section_constructor() {
 	}
 }
 
+void sync_room(Common::Serializer &s) {
+	switch (new_room) {
+	case 101:
+		Rooms::room_101_synchronize(s);
+		break;
+
+	default:
+		break;
+	}
+}
+
 } // namespace Phantom
 } // namespace MADSV2
 } // namespace MADS
diff --git a/engines/mads/madsv2/phantom/global.h b/engines/mads/madsv2/phantom/global.h
index 91b37478dea..3616c336973 100644
--- a/engines/mads/madsv2/phantom/global.h
+++ b/engines/mads/madsv2/phantom/global.h
@@ -22,6 +22,7 @@
 #ifndef MADS_PHANTOM_GLOBAL_H
 #define MADS_PHANTOM_GLOBAL_H
 
+#include "common/serializer.h"
 #include "mads/madsv2/core/vocabh.h"
 
 namespace MADS {
@@ -276,6 +277,7 @@ enum {
 
 
 extern void global_section_constructor();
+extern void sync_room(Common::Serializer &s);
 
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/phantom.cpp b/engines/mads/madsv2/phantom/phantom.cpp
index c383d285b16..0c4fb13efe0 100644
--- a/engines/mads/madsv2/phantom/phantom.cpp
+++ b/engines/mads/madsv2/phantom/phantom.cpp
@@ -382,6 +382,10 @@ void PhantomEngine::global_section_constructor() {
 	Phantom::global_section_constructor();
 }
 
+void PhantomEngine::syncRoom(Common::Serializer &s) {
+	Phantom::sync_room(s);
+}
+
 void PhantomEngine::global_daemon_code() {
 	if (player.walker_visible && !global[stop_walker_disabled] && (player.commands_allowed || (conv_control.running >= 0)) && !player.walking &&
 		(player.facing == player.turn_to_facing)) {
diff --git a/engines/mads/madsv2/phantom/phantom.h b/engines/mads/madsv2/phantom/phantom.h
index ac9bd2a2b34..58442f1b0d4 100644
--- a/engines/mads/madsv2/phantom/phantom.h
+++ b/engines/mads/madsv2/phantom/phantom.h
@@ -40,6 +40,7 @@ public:
 	~PhantomEngine() override {}
 
 	Common::Error run() override;
+	void syncRoom(Common::Serializer &s) override;
 
 	void global_init_code() override;
 	void section_music(int section_num) override;
diff --git a/engines/mads/madsv2/phantom/rooms/room101.cpp b/engines/mads/madsv2/phantom/rooms/room101.cpp
index 3717eec79fd..8d5051d0a87 100644
--- a/engines/mads/madsv2/phantom/rooms/room101.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room101.cpp
@@ -37,6 +37,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+Scratch scratch;
+
 void room_101_init(void) {
 	kernel.disable_fastwalk = true;
 
@@ -627,6 +629,28 @@ done:
 	;
 }
 
+void room_101_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->brie_calling_position,
+		local->brie_chandelier_position,
+		local->brie_calling_frame,
+		local->brie_chandelier_frame,
+		local->talk_count,
+		local->start_sitting_down,
+		local->dynamic_brie,
+		local->dynamic_brie_2,
+		local->execute_chan,
+		local->execute_wipe,
+		local->start_walking,
+		local->start_walking_0,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->converse_counter);
+}
+
 void room_101_preload(void) {
 	room_init_code_pointer = room_101_init;
 	room_pre_parser_code_pointer = room_101_pre_parser;
diff --git a/engines/mads/madsv2/phantom/rooms/room101.h b/engines/mads/madsv2/phantom/rooms/room101.h
index d7b59999bf2..c7eaed9d67a 100644
--- a/engines/mads/madsv2/phantom/rooms/room101.h
+++ b/engines/mads/madsv2/phantom/rooms/room101.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
@@ -55,8 +55,7 @@ typedef struct {        /* Room local variables */
 	int16 anim_1_running;           /* T if aa[1] is running */
 
 	int16 converse_counter; /* counter for talking displacements */
-
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */


Commit: aa46304814c0590cf68e46d55ac0746764fab6b1
    https://github.com/scummvm/scummvm/commit/aa46304814c0590cf68e46d55ac0746764fab6b1
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-04-26T08:31:01+10:00

Commit Message:
MADS: PHANTOM: Add room synchronize methods to all rooms

Changed paths:
    engines/mads/madsv2/core/color.cpp
    engines/mads/madsv2/core/color.h
    engines/mads/madsv2/phantom/global.cpp
    engines/mads/madsv2/phantom/rooms/room101.cpp
    engines/mads/madsv2/phantom/rooms/room102.cpp
    engines/mads/madsv2/phantom/rooms/room102.h
    engines/mads/madsv2/phantom/rooms/room103.cpp
    engines/mads/madsv2/phantom/rooms/room103.h
    engines/mads/madsv2/phantom/rooms/room104.cpp
    engines/mads/madsv2/phantom/rooms/room104.h
    engines/mads/madsv2/phantom/rooms/room105.cpp
    engines/mads/madsv2/phantom/rooms/room105.h
    engines/mads/madsv2/phantom/rooms/room106.cpp
    engines/mads/madsv2/phantom/rooms/room106.h
    engines/mads/madsv2/phantom/rooms/room107.cpp
    engines/mads/madsv2/phantom/rooms/room107.h
    engines/mads/madsv2/phantom/rooms/room108.cpp
    engines/mads/madsv2/phantom/rooms/room108.h
    engines/mads/madsv2/phantom/rooms/room109.cpp
    engines/mads/madsv2/phantom/rooms/room109.h
    engines/mads/madsv2/phantom/rooms/room110.cpp
    engines/mads/madsv2/phantom/rooms/room110.h
    engines/mads/madsv2/phantom/rooms/room111.cpp
    engines/mads/madsv2/phantom/rooms/room111.h
    engines/mads/madsv2/phantom/rooms/room112.cpp
    engines/mads/madsv2/phantom/rooms/room112.h
    engines/mads/madsv2/phantom/rooms/room113.cpp
    engines/mads/madsv2/phantom/rooms/room113.h
    engines/mads/madsv2/phantom/rooms/room114.cpp
    engines/mads/madsv2/phantom/rooms/room114.h
    engines/mads/madsv2/phantom/rooms/room150.cpp
    engines/mads/madsv2/phantom/rooms/room150.h
    engines/mads/madsv2/phantom/rooms/room201.cpp
    engines/mads/madsv2/phantom/rooms/room201.h
    engines/mads/madsv2/phantom/rooms/room202.cpp
    engines/mads/madsv2/phantom/rooms/room202.h
    engines/mads/madsv2/phantom/rooms/room203.cpp
    engines/mads/madsv2/phantom/rooms/room203.h
    engines/mads/madsv2/phantom/rooms/room204.cpp
    engines/mads/madsv2/phantom/rooms/room204.h
    engines/mads/madsv2/phantom/rooms/room205.cpp
    engines/mads/madsv2/phantom/rooms/room205.h
    engines/mads/madsv2/phantom/rooms/room206.cpp
    engines/mads/madsv2/phantom/rooms/room206.h
    engines/mads/madsv2/phantom/rooms/room207.cpp
    engines/mads/madsv2/phantom/rooms/room207.h
    engines/mads/madsv2/phantom/rooms/room208.cpp
    engines/mads/madsv2/phantom/rooms/room208.h
    engines/mads/madsv2/phantom/rooms/room250.cpp
    engines/mads/madsv2/phantom/rooms/room250.h
    engines/mads/madsv2/phantom/rooms/room301.cpp
    engines/mads/madsv2/phantom/rooms/room301.h
    engines/mads/madsv2/phantom/rooms/room302.cpp
    engines/mads/madsv2/phantom/rooms/room302.h
    engines/mads/madsv2/phantom/rooms/room303.cpp
    engines/mads/madsv2/phantom/rooms/room303.h
    engines/mads/madsv2/phantom/rooms/room304.cpp
    engines/mads/madsv2/phantom/rooms/room304.h
    engines/mads/madsv2/phantom/rooms/room305.cpp
    engines/mads/madsv2/phantom/rooms/room305.h
    engines/mads/madsv2/phantom/rooms/room306.cpp
    engines/mads/madsv2/phantom/rooms/room306.h
    engines/mads/madsv2/phantom/rooms/room307.cpp
    engines/mads/madsv2/phantom/rooms/room307.h
    engines/mads/madsv2/phantom/rooms/room308.cpp
    engines/mads/madsv2/phantom/rooms/room308.h
    engines/mads/madsv2/phantom/rooms/room309.cpp
    engines/mads/madsv2/phantom/rooms/room309.h
    engines/mads/madsv2/phantom/rooms/room310.cpp
    engines/mads/madsv2/phantom/rooms/room310.h
    engines/mads/madsv2/phantom/rooms/room401.cpp
    engines/mads/madsv2/phantom/rooms/room401.h
    engines/mads/madsv2/phantom/rooms/room403.cpp
    engines/mads/madsv2/phantom/rooms/room403.h
    engines/mads/madsv2/phantom/rooms/room404.cpp
    engines/mads/madsv2/phantom/rooms/room404.h
    engines/mads/madsv2/phantom/rooms/room406.cpp
    engines/mads/madsv2/phantom/rooms/room406.h
    engines/mads/madsv2/phantom/rooms/room407.cpp
    engines/mads/madsv2/phantom/rooms/room407.h
    engines/mads/madsv2/phantom/rooms/room408.cpp
    engines/mads/madsv2/phantom/rooms/room408.h
    engines/mads/madsv2/phantom/rooms/room409.cpp
    engines/mads/madsv2/phantom/rooms/room409.h
    engines/mads/madsv2/phantom/rooms/room410.cpp
    engines/mads/madsv2/phantom/rooms/room410.h
    engines/mads/madsv2/phantom/rooms/room453.cpp
    engines/mads/madsv2/phantom/rooms/room453.h
    engines/mads/madsv2/phantom/rooms/room456.cpp
    engines/mads/madsv2/phantom/rooms/room456.h
    engines/mads/madsv2/phantom/rooms/room501.cpp
    engines/mads/madsv2/phantom/rooms/room501.h
    engines/mads/madsv2/phantom/rooms/room502.cpp
    engines/mads/madsv2/phantom/rooms/room502.h
    engines/mads/madsv2/phantom/rooms/room504.cpp
    engines/mads/madsv2/phantom/rooms/room504.h
    engines/mads/madsv2/phantom/rooms/room505.cpp
    engines/mads/madsv2/phantom/rooms/room505.h
    engines/mads/madsv2/phantom/rooms/room506.cpp
    engines/mads/madsv2/phantom/rooms/room506.h


diff --git a/engines/mads/madsv2/core/color.cpp b/engines/mads/madsv2/core/color.cpp
index 0f9c35e85c8..2c4201012b2 100644
--- a/engines/mads/madsv2/core/color.cpp
+++ b/engines/mads/madsv2/core/color.cpp
@@ -32,6 +32,8 @@ void Color::load(Common::SeekableReadStream *src) {
 	src->readMultipleLE(r, g, b, x16, cycle, group);
 }
 
+//====================================================================
+
 bool ColorList::load(Load &load_handle, int size) {
 	// Load in the needed data
 	byte *buffer = (byte *)malloc(size);
@@ -56,17 +58,23 @@ void ColorList::load(Common::SeekableReadStream *src) {
 		table[i].load(src);
 }
 
-void Cycle::load(Common::SeekableReadStream *src) {
-	src->readMultipleLE(num_colors, first_list_color, first_palette_color, ticks);
+//====================================================================
+
+void Cycle::synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(num_colors, first_list_color, first_palette_color, ticks);
 }
 
-void CycleList::load(Common::SeekableReadStream *src) {
-	num_cycles = src->readUint16LE();
+//====================================================================
+
+void CycleList::synchronize(Common::Serializer &s) {
+	s.syncAsUint16LE(num_cycles);
 
 	for (int i = 0; i < COLOR_MAX_CYCLES; ++i)
-		table[i].load(src);
+		table[i].synchronize(s);
 }
 
+//====================================================================
+
 void ShadowList::load(Common::SeekableReadStream *src) {
 	src->readMultipleLE(num_shadow_colors);
 	for (int i = 0; i < COLOR_MAX_SHADOW_COLORS; ++i)
diff --git a/engines/mads/madsv2/core/color.h b/engines/mads/madsv2/core/color.h
index 49d851ea3d1..e1d0cfc3f38 100644
--- a/engines/mads/madsv2/core/color.h
+++ b/engines/mads/madsv2/core/color.h
@@ -22,6 +22,7 @@
 #ifndef MADS_CORE_COLOR_H
 #define MADS_CORE_COLOR_H
 
+#include "common/serializer.h"
 #include "common/stream.h"
 #include "mads/madsv2/core/loader.h"
 
@@ -96,7 +97,7 @@ struct Cycle {
 	byte ticks;                         /* 60/s ticks between cycles     */
 
 	static constexpr int SIZE = 1 + 1 + 1 + 1;
-	void load(Common::SeekableReadStream *src);
+	void synchronize(Common::Serializer &s);
 };
 
 typedef Cycle *CyclePtr;
@@ -109,7 +110,15 @@ struct CycleList {
 	Cycle table[COLOR_MAX_CYCLES];
 
 	static constexpr int SIZE = 2 + (Cycle::SIZE * COLOR_MAX_CYCLES);
-	void load(Common::SeekableReadStream *src);
+	void synchronize(Common::Serializer &s);
+	void load(Common::SeekableReadStream *src) {
+		Common::Serializer s(src, nullptr);
+		synchronize(s);
+	}
+	void save(Common::WriteStream *dest) {
+		Common::Serializer s(nullptr, dest);
+		synchronize(s);
+	}
 };
 
 typedef CycleList *CycleListPtr;
diff --git a/engines/mads/madsv2/phantom/global.cpp b/engines/mads/madsv2/phantom/global.cpp
index 7fabf610003..3fb29bd1039 100644
--- a/engines/mads/madsv2/phantom/global.cpp
+++ b/engines/mads/madsv2/phantom/global.cpp
@@ -41,6 +41,54 @@ extern void section_8_preload();
 
 // Room syncs
 extern void room_101_synchronize(Common::Serializer &s);
+extern void room_102_synchronize(Common::Serializer &s);
+extern void room_103_synchronize(Common::Serializer &s);
+extern void room_104_synchronize(Common::Serializer &s);
+extern void room_105_synchronize(Common::Serializer &s);
+extern void room_106_synchronize(Common::Serializer &s);
+extern void room_107_synchronize(Common::Serializer &s);
+extern void room_108_synchronize(Common::Serializer &s);
+extern void room_109_synchronize(Common::Serializer &s);
+extern void room_110_synchronize(Common::Serializer &s);
+extern void room_111_synchronize(Common::Serializer &s);
+extern void room_112_synchronize(Common::Serializer &s);
+extern void room_113_synchronize(Common::Serializer &s);
+extern void room_114_synchronize(Common::Serializer &s);
+extern void room_150_synchronize(Common::Serializer &s);
+extern void room_201_synchronize(Common::Serializer &s);
+extern void room_202_synchronize(Common::Serializer &s);
+extern void room_203_synchronize(Common::Serializer &s);
+extern void room_204_synchronize(Common::Serializer &s);
+extern void room_205_synchronize(Common::Serializer &s);
+extern void room_206_synchronize(Common::Serializer &s);
+extern void room_207_synchronize(Common::Serializer &s);
+extern void room_208_synchronize(Common::Serializer &s);
+extern void room_250_synchronize(Common::Serializer &s);
+extern void room_301_synchronize(Common::Serializer &s);
+extern void room_302_synchronize(Common::Serializer &s);
+extern void room_303_synchronize(Common::Serializer &s);
+extern void room_304_synchronize(Common::Serializer &s);
+extern void room_305_synchronize(Common::Serializer &s);
+extern void room_306_synchronize(Common::Serializer &s);
+extern void room_307_synchronize(Common::Serializer &s);
+extern void room_308_synchronize(Common::Serializer &s);
+extern void room_309_synchronize(Common::Serializer &s);
+extern void room_310_synchronize(Common::Serializer &s);
+extern void room_401_synchronize(Common::Serializer &s);
+extern void room_403_synchronize(Common::Serializer &s);
+extern void room_404_synchronize(Common::Serializer &s);
+extern void room_406_synchronize(Common::Serializer &s);
+extern void room_407_synchronize(Common::Serializer &s);
+extern void room_408_synchronize(Common::Serializer &s);
+extern void room_409_synchronize(Common::Serializer &s);
+extern void room_410_synchronize(Common::Serializer &s);
+extern void room_453_synchronize(Common::Serializer &s);
+extern void room_456_synchronize(Common::Serializer &s);
+extern void room_501_synchronize(Common::Serializer &s);
+extern void room_502_synchronize(Common::Serializer &s);
+extern void room_504_synchronize(Common::Serializer &s);
+extern void room_505_synchronize(Common::Serializer &s);
+extern void room_506_synchronize(Common::Serializer &s);
 
 } // namespace Rooms
 
@@ -83,6 +131,150 @@ void sync_room(Common::Serializer &s) {
 	case 101:
 		Rooms::room_101_synchronize(s);
 		break;
+	case 102:
+		Rooms::room_102_synchronize(s);
+		break;
+	case 103:
+		Rooms::room_103_synchronize(s);
+		break;
+	case 104:
+		Rooms::room_104_synchronize(s);
+		break;
+	case 105:
+		Rooms::room_105_synchronize(s);
+		break;
+	case 106:
+		Rooms::room_106_synchronize(s);
+		break;
+	case 107:
+		Rooms::room_107_synchronize(s);
+		break;
+	case 108:
+		Rooms::room_108_synchronize(s);
+		break;
+	case 109:
+		Rooms::room_109_synchronize(s);
+		break;
+	case 110:
+		Rooms::room_110_synchronize(s);
+		break;
+	case 111:
+		Rooms::room_111_synchronize(s);
+		break;
+	case 112:
+		Rooms::room_112_synchronize(s);
+		break;
+	case 113:
+		Rooms::room_113_synchronize(s);
+		break;
+	case 114:
+		Rooms::room_114_synchronize(s);
+		break;
+	case 150:
+		Rooms::room_150_synchronize(s);
+		break;
+	case 201:
+		Rooms::room_201_synchronize(s);
+		break;
+	case 202:
+		Rooms::room_202_synchronize(s);
+		break;
+	case 203:
+		Rooms::room_203_synchronize(s);
+		break;
+	case 204:
+		Rooms::room_204_synchronize(s);
+		break;
+	case 205:
+		Rooms::room_205_synchronize(s);
+		break;
+	case 206:
+		Rooms::room_206_synchronize(s);
+		break;
+	case 207:
+		Rooms::room_207_synchronize(s);
+		break;
+	case 208:
+		Rooms::room_208_synchronize(s);
+		break;
+	case 250:
+		Rooms::room_250_synchronize(s);
+		break;
+	case 301:
+		Rooms::room_301_synchronize(s);
+		break;
+	case 302:
+		Rooms::room_302_synchronize(s);
+		break;
+	case 303:
+		Rooms::room_303_synchronize(s);
+		break;
+	case 304:
+		Rooms::room_304_synchronize(s);
+		break;
+	case 305:
+		Rooms::room_305_synchronize(s);
+		break;
+	case 306:
+		Rooms::room_306_synchronize(s);
+		break;
+	case 307:
+		Rooms::room_307_synchronize(s);
+		break;
+	case 308:
+		Rooms::room_308_synchronize(s);
+		break;
+	case 309:
+		Rooms::room_309_synchronize(s);
+		break;
+	case 310:
+		Rooms::room_310_synchronize(s);
+		break;
+	case 401:
+		Rooms::room_401_synchronize(s);
+		break;
+	case 403:
+		Rooms::room_403_synchronize(s);
+		break;
+	case 404:
+		Rooms::room_404_synchronize(s);
+		break;
+	case 406:
+		Rooms::room_406_synchronize(s);
+		break;
+	case 407:
+		Rooms::room_407_synchronize(s);
+		break;
+	case 408:
+		Rooms::room_408_synchronize(s);
+		break;
+	case 409:
+		Rooms::room_409_synchronize(s);
+		break;
+	case 410:
+		Rooms::room_410_synchronize(s);
+		break;
+	case 453:
+		Rooms::room_453_synchronize(s);
+		break;
+	case 456:
+		Rooms::room_456_synchronize(s);
+		break;
+	case 501:
+		Rooms::room_501_synchronize(s);
+		break;
+	case 502:
+		Rooms::room_502_synchronize(s);
+		break;
+	case 504:
+		Rooms::room_504_synchronize(s);
+		break;
+	case 505:
+		Rooms::room_505_synchronize(s);
+		break;
+	case 506:
+		Rooms::room_506_synchronize(s);
+		break;
 
 	default:
 		break;
diff --git a/engines/mads/madsv2/phantom/rooms/room101.cpp b/engines/mads/madsv2/phantom/rooms/room101.cpp
index 8d5051d0a87..45ad61fac07 100644
--- a/engines/mads/madsv2/phantom/rooms/room101.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room101.cpp
@@ -37,7 +37,7 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-Scratch scratch;
+static Scratch scratch;
 
 void room_101_init(void) {
 	kernel.disable_fastwalk = true;
@@ -629,6 +629,18 @@ done:
 	;
 }
 
+void room_101_preload(void) {
+	room_init_code_pointer = room_101_init;
+	room_pre_parser_code_pointer = room_101_pre_parser;
+	room_parser_code_pointer = room_101_parser;
+	room_daemon_code_pointer = room_101_daemon;
+
+	section_1_walker();
+	section_1_interface();
+
+	vocab_make_active(words_Monsieur_Brie);
+}
+
 void room_101_synchronize(Common::Serializer &s) {
 	s.syncMultipleLE(local->sprite);
 	s.syncMultipleLE(local->sequence);
@@ -651,18 +663,6 @@ void room_101_synchronize(Common::Serializer &s) {
 		local->converse_counter);
 }
 
-void room_101_preload(void) {
-	room_init_code_pointer = room_101_init;
-	room_pre_parser_code_pointer = room_101_pre_parser;
-	room_parser_code_pointer = room_101_parser;
-	room_daemon_code_pointer = room_101_daemon;
-
-	section_1_walker();
-	section_1_interface();
-
-	vocab_make_active(words_Monsieur_Brie);
-}
-
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room102.cpp b/engines/mads/madsv2/phantom/rooms/room102.cpp
index afb462c1d6c..e51068a7bdf 100644
--- a/engines/mads/madsv2/phantom/rooms/room102.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room102.cpp
@@ -35,6 +35,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_102_init(void) {
 	int death_x = 0;
 	int death_y = 0;
@@ -303,6 +305,14 @@ void room_102_preload(void) {
 	section_1_interface();
 }
 
+
+void room_102_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(local->anim_0_running);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room102.h b/engines/mads/madsv2/phantom/rooms/room102.h
index fe263bf4689..741ae799fc0 100644
--- a/engines/mads/madsv2/phantom/rooms/room102.h
+++ b/engines/mads/madsv2/phantom/rooms/room102.h
@@ -29,17 +29,17 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 	int16 anim_0_running;
-} Scratch;
+};
 
 
 /* ========================= Load Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room103.cpp b/engines/mads/madsv2/phantom/rooms/room103.cpp
index e6c41da4344..60f24d3a43a 100644
--- a/engines/mads/madsv2/phantom/rooms/room103.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room103.cpp
@@ -41,6 +41,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_103_adjust_rails(int variant) {
 	switch (variant) {
 	case 0:
@@ -1759,6 +1761,41 @@ void room_103_preload(void) {
 	vocab_make_active(words_climb);
 }
 
+
+void room_103_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->prompt_1,
+		local->prompt_2,
+		local->prompt_3,
+		local->prompt_4,
+		local->prompt_5,
+		local->floor_r_1,
+		local->floor_r_2,
+		local->floor_l_1,
+		local->floor_l_2,
+		local->man,
+		local->jacques_frame,
+		local->jacques_action,
+		local->jacques_talk_count,
+		local->just_did_option,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->anim_4_running,
+		local->anim_5_running,
+		local->anim_6_running,
+		local->top_of_stand,
+		local->converse_counter,
+		local->frame_guard,
+		local->stairs_frame,
+		local->climb_thru,
+		local->sit_on_it);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room103.h b/engines/mads/madsv2/phantom/rooms/room103.h
index 255d277c2a9..c7855a0203e 100644
--- a/engines/mads/madsv2/phantom/rooms/room103.h
+++ b/engines/mads/madsv2/phantom/rooms/room103.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {			/* Room local variables */
+struct Scratch {			/* Room local variables */
 	int16 sprite[20];       /* Sprite series handles  */
 	int16 sequence[20];     /* Sequence handles       */
 	int16 animation[7];     /* Animation handles      */
@@ -70,7 +70,7 @@ typedef struct {			/* Room local variables */
 	int16 stairs_frame;
 	int16 climb_thru;
 	int16 sit_on_it;
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room104.cpp b/engines/mads/madsv2/phantom/rooms/room104.cpp
index 431f34cc11c..7f90a29148e 100644
--- a/engines/mads/madsv2/phantom/rooms/room104.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room104.cpp
@@ -42,6 +42,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void get_rid_of_inventory() {
 	if (player_has(large_note)) {
 		inter_move_object(large_note, NOWHERE);
@@ -1135,6 +1137,36 @@ void room_104_preload() {
 	vocab_make_active(words_Monsieur_Richard);
 }
 
+
+void room_104_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->get_ready_she_leave,
+		local->get_ready_he_leave,
+		local->wants_to_talk,
+		local->wants_to_get_up,
+		local->sitting_up,
+		local->rich_action,
+		local->rich_frame,
+		local->raoul_action,
+		local->raoul_frame,
+		local->daae_walk_action,
+		local->daae_walk_frame,
+		local->couple_action,
+		local->couple_frame,
+		local->rich_talk_count,
+		local->couple_he_talk_count,
+		local->couple_she_talk_count,
+		local->couple_look_rich_count,
+		local->wants_to_stand_up,
+		local->last_player_step);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room104.h b/engines/mads/madsv2/phantom/rooms/room104.h
index 0729c3e27c5..40b2e7e8a20 100644
--- a/engines/mads/madsv2/phantom/rooms/room104.h
+++ b/engines/mads/madsv2/phantom/rooms/room104.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -73,7 +73,7 @@ typedef struct {        /* Room local variables */
 
 	int16 last_player_step;       /* Frame marker for player walk */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room105.cpp b/engines/mads/madsv2/phantom/rooms/room105.cpp
index 08e5117cc48..f68e59f54f1 100644
--- a/engines/mads/madsv2/phantom/rooms/room105.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room105.cpp
@@ -42,6 +42,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_105_init() {
 	global_speech_load(speech_christine_scales);
 
@@ -618,6 +620,14 @@ void room_105_preload() {
 	vocab_make_active(words_light_fixture);
 }
 
+
+void room_105_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(local->column_prop);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room105.h b/engines/mads/madsv2/phantom/rooms/room105.h
index ea4f961ba94..991a6be4e75 100644
--- a/engines/mads/madsv2/phantom/rooms/room105.h
+++ b/engines/mads/madsv2/phantom/rooms/room105.h
@@ -30,19 +30,19 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 	int16 column_prop;      /* Dynamic HS for column_prop */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room106.cpp b/engines/mads/madsv2/phantom/rooms/room106.cpp
index 2ebaed6da53..8316eeb7880 100644
--- a/engines/mads/madsv2/phantom/rooms/room106.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room106.cpp
@@ -50,6 +50,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_106_init() {
 	int dyn_floor;
 
@@ -628,6 +630,14 @@ void room_106_preload() {
 	section_1_interface();
 }
 
+
+void room_106_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(local->dynamic_sandbag);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room106.h b/engines/mads/madsv2/phantom/rooms/room106.h
index fe40e2ebbe9..aecad12217e 100644
--- a/engines/mads/madsv2/phantom/rooms/room106.h
+++ b/engines/mads/madsv2/phantom/rooms/room106.h
@@ -30,19 +30,19 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 	int16 dynamic_sandbag;  /* Dynamic HS for fallen sandbag */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room107.cpp b/engines/mads/madsv2/phantom/rooms/room107.cpp
index a92d47c7449..8a4a0c2061e 100644
--- a/engines/mads/madsv2/phantom/rooms/room107.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room107.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_107_init() {
 	/* ==================== Load Sprite Series ====================== */
 
@@ -297,6 +299,13 @@ void room_107_preload() {
 	section_1_interface();
 }
 
+
+void room_107_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room107.h b/engines/mads/madsv2/phantom/rooms/room107.h
index 3e9c1a58361..002c3a50b58 100644
--- a/engines/mads/madsv2/phantom/rooms/room107.h
+++ b/engines/mads/madsv2/phantom/rooms/room107.h
@@ -30,18 +30,18 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room108.cpp b/engines/mads/madsv2/phantom/rooms/room108.cpp
index 4728223eef4..2fb23dd584e 100644
--- a/engines/mads/madsv2/phantom/rooms/room108.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room108.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_char() {
 	int random = 0;
 	int char_reset_frame;
@@ -575,6 +577,24 @@ void room_108_preload() {
 	vocab_make_active(words_Charles);
 }
 
+
+void room_108_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->char_action,
+		local->char_frame,
+		local->char_talk_count,
+		local->char_shut_up_count,
+		local->dynamic_char,
+		local->prev_shut_up_frame,
+		local->max_talk_count,
+		local->did_raise_hand,
+		local->converse_counter);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room108.h b/engines/mads/madsv2/phantom/rooms/room108.h
index 679247aff64..1f6c2598ae2 100644
--- a/engines/mads/madsv2/phantom/rooms/room108.h
+++ b/engines/mads/madsv2/phantom/rooms/room108.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -52,7 +52,7 @@ typedef struct {        /* Room local variables */
 	int16 did_raise_hand;     /* true, when if talking, did raise hand */
 	int16 converse_counter;   /* counter for talking displacements */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room109.cpp b/engines/mads/madsv2/phantom/rooms/room109.cpp
index 98ada88a7f7..961b37f96df 100644
--- a/engines/mads/madsv2/phantom/rooms/room109.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room109.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_109_init() {
 	local->anim_0_running = false;
 	local->anim_1_running = false;
@@ -551,6 +553,19 @@ void room_109_preload() {
 	section_1_interface();
 }
 
+
+void room_109_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->on_floor,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room109.h b/engines/mads/madsv2/phantom/rooms/room109.h
index 46e446ab43f..7f715b76a06 100644
--- a/engines/mads/madsv2/phantom/rooms/room109.h
+++ b/engines/mads/madsv2/phantom/rooms/room109.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -46,7 +46,7 @@ typedef struct {        /* Room local variables */
 	int16 anim_2_running;
 	int16 anim_3_running;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room110.cpp b/engines/mads/madsv2/phantom/rooms/room110.cpp
index 71e18ba5b97..658b6698ee3 100644
--- a/engines/mads/madsv2/phantom/rooms/room110.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room110.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_110_init() {
 	/* ==================== Load Sprite Series ====================== */
 
@@ -393,6 +395,13 @@ void room_110_preload() {
 	section_1_interface();
 }
 
+
+void room_110_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room110.h b/engines/mads/madsv2/phantom/rooms/room110.h
index d449c30209f..4ee149c7a2a 100644
--- a/engines/mads/madsv2/phantom/rooms/room110.h
+++ b/engines/mads/madsv2/phantom/rooms/room110.h
@@ -30,18 +30,18 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
 	int16 animation[4];       /* Animation handles     */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room111.cpp b/engines/mads/madsv2/phantom/rooms/room111.cpp
index 09b44082526..27f492d92ad 100644
--- a/engines/mads/madsv2/phantom/rooms/room111.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room111.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_listen() {
 	int listen_reset_frame;
 
@@ -636,6 +638,20 @@ void room_111_preload() {
 	section_1_interface();
 }
 
+
+void room_111_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->delete_axe,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->listen_frame,
+		local->listen_action,
+		local->it_is_closed);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room111.h b/engines/mads/madsv2/phantom/rooms/room111.h
index 46ec7cc6040..fab4a4b431c 100644
--- a/engines/mads/madsv2/phantom/rooms/room111.h
+++ b/engines/mads/madsv2/phantom/rooms/room111.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 listen_action;
 	int16 it_is_closed;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room112.cpp b/engines/mads/madsv2/phantom/rooms/room112.cpp
index a20edf372fe..acad87ca1a3 100644
--- a/engines/mads/madsv2/phantom/rooms/room112.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room112.cpp
@@ -41,6 +41,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_julie_practice() {
 	int random = 0;
 	int julie_reset_frame;
@@ -692,6 +694,25 @@ void room_112_preload() {
 	vocab_make_active(words_Julie);
 }
 
+
+void room_112_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->dynamic_julie,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->just_did_option,
+		local->julie_frame,
+		local->julie_action,
+		local->julie_talk_count,
+		local->raoul_frame,
+		local->raoul_action,
+		local->raoul_talk_count,
+		local->display_wait);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room112.h b/engines/mads/madsv2/phantom/rooms/room112.h
index 762f3fa1aac..a0b03bc6476 100644
--- a/engines/mads/madsv2/phantom/rooms/room112.h
+++ b/engines/mads/madsv2/phantom/rooms/room112.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles                   */
 	int16 sequence[15];       /* Sequence handles                        */
@@ -52,7 +52,7 @@ typedef struct {        /* Room local variables */
 	int16 raoul_talk_count;
 	int16 display_wait;       /* for getting up out of the chair */
 
-} Scratch;
+};
 
 
 /* ========================= Conversation ========================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room113.cpp b/engines/mads/madsv2/phantom/rooms/room113.cpp
index c169228a726..cd2952495d3 100644
--- a/engines/mads/madsv2/phantom/rooms/room113.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room113.cpp
@@ -42,6 +42,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_florent() {
 	int random;
 	int florent_reset_frame;
@@ -1606,6 +1608,43 @@ void room_113_preload() {
 	vocab_make_active(words_Julie);
 }
 
+
+void room_113_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->chris_daae_dynamic,
+		local->chris_flor_dynamic,
+		local->standing_talking,
+		local->day_wants_to_talk,
+		local->music_is_playing,
+		local->right_after_kiss,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->anim_4_running,
+		local->prevent_1,
+		local->prevent_2,
+		local->raoul_is_up,
+		local->arms_are_out,
+		local->day_frame,
+		local->day_action,
+		local->day_talk_count,
+		local->stand_talk_count,
+		local->florent_frame,
+		local->florent_action,
+		local->florent_talk_count,
+		local->raoul_frame,
+		local->raoul_action,
+		local->raoul_talk_count,
+		local->julie_frame,
+		local->julie_action,
+		local->julie_talk_count,
+		local->just_did_option);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room113.h b/engines/mads/madsv2/phantom/rooms/room113.h
index 3e9e9a92dd7..255b0cf0dbe 100644
--- a/engines/mads/madsv2/phantom/rooms/room113.h
+++ b/engines/mads/madsv2/phantom/rooms/room113.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles                          */
 	int16 sequence[15];       /* Sequence handles                               */
@@ -74,7 +74,7 @@ typedef struct {        /* Room local variables */
 	int16 julie_talk_count;
 	int16 just_did_option;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room114.cpp b/engines/mads/madsv2/phantom/rooms/room114.cpp
index a97cb9535f4..2a8e972223d 100644
--- a/engines/mads/madsv2/phantom/rooms/room114.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room114.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_114_init() {
 	/* =================== Load Sprite Series ======================= */
 
@@ -375,6 +377,13 @@ void room_114_preload() {
 	section_1_interface();
 }
 
+
+void room_114_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room114.h b/engines/mads/madsv2/phantom/rooms/room114.h
index 2289bd8f23a..074d9f0a52a 100644
--- a/engines/mads/madsv2/phantom/rooms/room114.h
+++ b/engines/mads/madsv2/phantom/rooms/room114.h
@@ -30,17 +30,17 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 	int16 sprite[15];     /* Sprite series handles */
 	int16 sequence[15];   /* Sequence handles      */
 	int16 animation[4];   /* Animation handles     */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room150.cpp b/engines/mads/madsv2/phantom/rooms/room150.cpp
index 22a3ff92216..17ad8b1982a 100644
--- a/engines/mads/madsv2/phantom/rooms/room150.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room150.cpp
@@ -33,6 +33,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_150_init() {
 	viewing_at_y = ((video_y - display_y) >> 1);
 
@@ -96,6 +98,13 @@ void room_150_preload() {
 	section_1_interface();
 }
 
+
+void room_150_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room150.h b/engines/mads/madsv2/phantom/rooms/room150.h
index ebb5862613c..d0fceb72f25 100644
--- a/engines/mads/madsv2/phantom/rooms/room150.h
+++ b/engines/mads/madsv2/phantom/rooms/room150.h
@@ -30,17 +30,17 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 	int16 sprite[15];     /* Sprite series handles */
 	int16 sequence[15];   /* Sequence handles      */
 	int16 animation[4];   /* Animation handles     */
 
-} Scratch;
+};
 
 
 extern void room_150_init();
diff --git a/engines/mads/madsv2/phantom/rooms/room201.cpp b/engines/mads/madsv2/phantom/rooms/room201.cpp
index f36ffa4e1fe..e0018eef96d 100644
--- a/engines/mads/madsv2/phantom/rooms/room201.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room201.cpp
@@ -41,6 +41,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_raoul() {
 	int random;
 	int raoul_reset_frame;
@@ -521,6 +523,22 @@ void room_201_preload() {
 	section_2_interface();
 }
 
+
+void room_201_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->raoul_frame,
+		local->raoul_action,
+		local->anim_0_running,
+		local->seller_frame,
+		local->seller_action,
+		local->seller_talk_count,
+		local->anim_1_running,
+		local->want_to_hold);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room201.h b/engines/mads/madsv2/phantom/rooms/room201.h
index 0d026721b7b..0d4815a4d09 100644
--- a/engines/mads/madsv2/phantom/rooms/room201.h
+++ b/engines/mads/madsv2/phantom/rooms/room201.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -51,7 +51,7 @@ typedef struct {        /* Room local variables */
 	int16 anim_1_running;
 	int16 want_to_hold;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room202.cpp b/engines/mads/madsv2/phantom/rooms/room202.cpp
index 3ce15c8a4bd..214a1231943 100644
--- a/engines/mads/madsv2/phantom/rooms/room202.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room202.cpp
@@ -43,6 +43,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void set_chandelier_positions() {
 	int chandelier;
 	int center;
@@ -992,6 +994,29 @@ void room_202_preload() {
 	vocab_make_active(words_Edgar_Degas);
 }
 
+
+void room_202_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->usher_action,
+		local->usher_frame,
+		local->usher_talk_count,
+		local->degas_action,
+		local->degas_frame,
+		local->rich_frame,
+		local->rich_action,
+		local->rich_talk_count,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->converse_counter,
+		local->prevent);
+	s.syncMultipleLE(local->chandelier_base);
+	s.syncMultipleLE(local->dyn_chandeliers);
+	s.syncMultipleLE(local->gave);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room202.h b/engines/mads/madsv2/phantom/rooms/room202.h
index 79aa2a7de14..141fbb8b893 100644
--- a/engines/mads/madsv2/phantom/rooms/room202.h
+++ b/engines/mads/madsv2/phantom/rooms/room202.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -62,7 +62,7 @@ typedef struct {        /* Room local variables */
 
 	int16 gave;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room203.cpp b/engines/mads/madsv2/phantom/rooms/room203.cpp
index cbd99a16bc6..78d874d9046 100644
--- a/engines/mads/madsv2/phantom/rooms/room203.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room203.cpp
@@ -42,6 +42,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_brie() {
 	int random = 0;
 	int brie_reset_frame;
@@ -1857,6 +1859,32 @@ void room_203_preload() {
 	section_2_interface();
 }
 
+
+void room_203_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->brie_action,
+		local->brie_frame,
+		local->brie_talk_count,
+		local->raoul_action,
+		local->raoul_frame,
+		local->raoul_talk_count,
+		local->rich_action,
+		local->rich_frame,
+		local->rich_talk_count,
+		local->daae_action,
+		local->daae_frame,
+		local->daae_talk_count,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->show_note,
+		local->converse_counter);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room203.h b/engines/mads/madsv2/phantom/rooms/room203.h
index dde62d99b4a..0e93b02c05d 100644
--- a/engines/mads/madsv2/phantom/rooms/room203.h
+++ b/engines/mads/madsv2/phantom/rooms/room203.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];         /* Sprite series handles */
 	int16 sequence[15];       /* Sequence handles      */
@@ -64,7 +64,7 @@ typedef struct {        /* Room local variables */
 	int16 show_note;
 	int16 converse_counter;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room204.cpp b/engines/mads/madsv2/phantom/rooms/room204.cpp
index 2da6c7a6102..6c4bf9595f3 100644
--- a/engines/mads/madsv2/phantom/rooms/room204.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room204.cpp
@@ -46,6 +46,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_brie() {
 	int random = 0;
 	int brie_reset_frame;
@@ -1022,6 +1024,31 @@ void room_204_preload() {
 	section_2_interface();
 }
 
+
+void room_204_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->keep_raoul_down,
+		local->florent_is_gone,
+		local->prevent,
+		local->prevent_2,
+		local->prevent_3,
+		local->end_of_game,
+		local->brie_action,
+		local->brie_frame,
+		local->flor_action,
+		local->flor_frame,
+		local->raoul_action,
+		local->raoul_frame,
+		local->raoul_talk_count);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room204.h b/engines/mads/madsv2/phantom/rooms/room204.h
index e0bf3613880..bfda8f9b02e 100644
--- a/engines/mads/madsv2/phantom/rooms/room204.h
+++ b/engines/mads/madsv2/phantom/rooms/room204.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];        /* Sprite series handles */
 	int16 sequence[15];      /* Sequence handles      */
@@ -61,7 +61,7 @@ typedef struct {        /* Room local variables */
 
 	int16 raoul_talk_count;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room205.cpp b/engines/mads/madsv2/phantom/rooms/room205.cpp
index 9a19316afec..fce1bdf5dca 100644
--- a/engines/mads/madsv2/phantom/rooms/room205.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room205.cpp
@@ -47,6 +47,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void handle_animation_rich() {
 	int random;
 	int rich_reset_frame;
@@ -1793,6 +1795,26 @@ void room_205_preload() {
 	}
 }
 
+
+void room_205_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->rich_frame,
+		local->rich_action,
+		local->rich_talk_count,
+		local->giry_frame,
+		local->giry_action,
+		local->giry_talk_count,
+		local->just_did_option,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->converse_counter,
+		local->no_hold,
+		local->give_ticket);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room205.h b/engines/mads/madsv2/phantom/rooms/room205.h
index 4ca89edf2d3..0e0b4a54177 100644
--- a/engines/mads/madsv2/phantom/rooms/room205.h
+++ b/engines/mads/madsv2/phantom/rooms/room205.h
@@ -30,12 +30,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];        /* Sprite series handles */
 	int16 sequence[15];      /* Sequence handles      */
@@ -56,7 +56,7 @@ typedef struct {        /* Room local variables */
 	int16 no_hold;       /* if true, will not conv_hold in Parser */
 	int16 give_ticket;   /* if true, will give ticket */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series ========================= */
diff --git a/engines/mads/madsv2/phantom/rooms/room206.cpp b/engines/mads/madsv2/phantom/rooms/room206.cpp
index 316ae5fc19c..25872edc34b 100644
--- a/engines/mads/madsv2/phantom/rooms/room206.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room206.cpp
@@ -47,6 +47,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_206_daemon() {
 	switch (kernel.trigger) {
 	case ROOM_206_FROM_308:
@@ -554,6 +556,17 @@ void room_206_preload() {
 	section_2_interface();
 }
 
+
+void room_206_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->prevent,
+		local->prevent_2);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room206.h b/engines/mads/madsv2/phantom/rooms/room206.h
index 3e9ba65d3f4..1744482eff2 100644
--- a/engines/mads/madsv2/phantom/rooms/room206.h
+++ b/engines/mads/madsv2/phantom/rooms/room206.h
@@ -31,7 +31,7 @@ namespace Rooms {
 
 /* ---- Scratch (room-local variables) ---- */
 
-struct Room206Scratch {
+struct Scratch {
 	int16 sprite[15];       // Sprite series handles
 	int16 sequence[15];     // Sequence handles
 	int16 animation[4];     // Animation handles
@@ -40,7 +40,7 @@ struct Room206Scratch {
 	int16 prevent_2;
 };
 
-#define local ((Room206Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
diff --git a/engines/mads/madsv2/phantom/rooms/room207.cpp b/engines/mads/madsv2/phantom/rooms/room207.cpp
index 980d39fbca3..48556750520 100644
--- a/engines/mads/madsv2/phantom/rooms/room207.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room207.cpp
@@ -47,6 +47,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_207_daemon() {
 	if (local->anim_0_running && !local->prevent) {
 		if (kernel_anim[aa[0]].frame == 6) {
@@ -228,6 +230,16 @@ void room_207_preload() {
 	section_2_interface();
 }
 
+
+void room_207_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->prevent,
+		local->anim_0_running);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room207.h b/engines/mads/madsv2/phantom/rooms/room207.h
index 37fac901a87..7548f4148bd 100644
--- a/engines/mads/madsv2/phantom/rooms/room207.h
+++ b/engines/mads/madsv2/phantom/rooms/room207.h
@@ -31,7 +31,7 @@ namespace Rooms {
 
 /* ---- Scratch (room-local variables) ---- */
 
-struct Room207Scratch {
+struct Scratch {
 	int16 sprite[15];       // Sprite series handles
 	int16 sequence[15];     // Sequence handles
 	int16 animation[4];     // Animation handles
@@ -39,7 +39,7 @@ struct Room207Scratch {
 	int16 anim_0_running;
 };
 
-#define local ((Room207Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
diff --git a/engines/mads/madsv2/phantom/rooms/room208.cpp b/engines/mads/madsv2/phantom/rooms/room208.cpp
index a3915bf7667..8d003f7837d 100644
--- a/engines/mads/madsv2/phantom/rooms/room208.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room208.cpp
@@ -47,6 +47,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void animate_top_left() {
 	int delay;
 	int random;
@@ -463,6 +465,25 @@ void room_208_preload() {
 	section_2_interface();
 }
 
+
+void room_208_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->middle_direction,
+		local->top_left_frame,
+		local->top_right_frame,
+		local->middle_left_frame,
+		local->middle_middle_frame,
+		local->middle_right_frame,
+		local->bottom_left_frame,
+		local->bottom_middle_frame,
+		local->bottom_right_frame,
+		local->prevent,
+		local->prevent_2);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room208.h b/engines/mads/madsv2/phantom/rooms/room208.h
index d48ead00f80..a24f5153a7f 100644
--- a/engines/mads/madsv2/phantom/rooms/room208.h
+++ b/engines/mads/madsv2/phantom/rooms/room208.h
@@ -31,7 +31,7 @@ namespace Rooms {
 
 /* ---- Scratch (room-local variables) ---- */
 
-struct Room208Scratch {
+struct Scratch {
 	int16 sprite[15];           // Sprite series handles
 	int16 sequence[15];         // Sequence handles
 	int16 animation[4];         // Animation handles
@@ -48,7 +48,7 @@ struct Room208Scratch {
 	int16 prevent_2;
 };
 
-#define local ((Room208Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
diff --git a/engines/mads/madsv2/phantom/rooms/room250.cpp b/engines/mads/madsv2/phantom/rooms/room250.cpp
index 091c08dae0f..4671816e6ef 100644
--- a/engines/mads/madsv2/phantom/rooms/room250.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room250.cpp
@@ -33,6 +33,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_250_init(void) {
 	viewing_at_y = ((video_y - display_y) >> 1);
 
@@ -137,6 +139,13 @@ void room_250_preload(void) {
 	section_2_interface();
 }
 
+
+void room_250_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room250.h b/engines/mads/madsv2/phantom/rooms/room250.h
index 7196bc6bf89..e8649194dc3 100644
--- a/engines/mads/madsv2/phantom/rooms/room250.h
+++ b/engines/mads/madsv2/phantom/rooms/room250.h
@@ -29,18 +29,18 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 
-} Scratch;
+};
 
 } // namespace Rooms
 } // namespace Phantom
diff --git a/engines/mads/madsv2/phantom/rooms/room301.cpp b/engines/mads/madsv2/phantom/rooms/room301.cpp
index ec81afed595..939a5773568 100644
--- a/engines/mads/madsv2/phantom/rooms/room301.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room301.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_301_init() {
 	kernel.disable_fastwalk = true;
 
@@ -396,6 +398,19 @@ void room_301_preload(void) {
 	section_3_interface();
 }
 
+
+void room_301_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->dynamic_light,
+		local->dynamic_sand,
+		local->anim_0_running,
+		local->guard,
+		local->prevent);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room301.h b/engines/mads/madsv2/phantom/rooms/room301.h
index 2a52c7110ce..3ee3fba47ab 100644
--- a/engines/mads/madsv2/phantom/rooms/room301.h
+++ b/engines/mads/madsv2/phantom/rooms/room301.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -45,7 +45,7 @@ typedef struct {        /* Room local variables */
 	int16 guard;
 	int16 prevent;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room302.cpp b/engines/mads/madsv2/phantom/rooms/room302.cpp
index 782ab3e7ec6..691241ebf89 100644
--- a/engines/mads/madsv2/phantom/rooms/room302.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room302.cpp
@@ -42,6 +42,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_302_init(void) {
 	/* =================== Load sprite series ==================== */
 
@@ -240,6 +242,13 @@ void room_302_preload(void) {
 	section_3_interface();
 }
 
+
+void room_302_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room302.h b/engines/mads/madsv2/phantom/rooms/room302.h
index e80532d1295..f378b15d337 100644
--- a/engines/mads/madsv2/phantom/rooms/room302.h
+++ b/engines/mads/madsv2/phantom/rooms/room302.h
@@ -29,18 +29,18 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room303.cpp b/engines/mads/madsv2/phantom/rooms/room303.cpp
index a4edad448ce..db131ea4679 100644
--- a/engines/mads/madsv2/phantom/rooms/room303.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room303.cpp
@@ -44,6 +44,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_303_init(void) {
 	local->anim_0_running = false;
 	local->frame_guard = false;
@@ -347,6 +349,17 @@ void room_303_preload(void) {
 	vocab_make_active(words_climb_down);
 }
 
+
+void room_303_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->dynamic_hemp,
+		local->anim_0_running,
+		local->frame_guard);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room303.h b/engines/mads/madsv2/phantom/rooms/room303.h
index 4162c04d7df..a61413d6750 100644
--- a/engines/mads/madsv2/phantom/rooms/room303.h
+++ b/engines/mads/madsv2/phantom/rooms/room303.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -43,7 +43,7 @@ typedef struct {        /* Room local variables */
 	int16 anim_0_running;
 	int16 frame_guard;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room304.cpp b/engines/mads/madsv2/phantom/rooms/room304.cpp
index ddfc84ec84d..71bc835de29 100644
--- a/engines/mads/madsv2/phantom/rooms/room304.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room304.cpp
@@ -45,6 +45,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_304_init() {
 	local->raoul_look_count = 0;
 	player.x = 0;
@@ -482,6 +484,25 @@ void room_304_preload() {
 	section_3_interface();
 }
 
+
+void room_304_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->raoul_frame,
+		local->raoul_action,
+		local->raoul_look_count,
+		local->raoul_fight_frame,
+		local->raoul_fight_action,
+		local->raoul_fight_talk_count,
+		local->phantom_frame,
+		local->phantom_action);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room304.h b/engines/mads/madsv2/phantom/rooms/room304.h
index 8987e14a218..227d1c76a25 100644
--- a/engines/mads/madsv2/phantom/rooms/room304.h
+++ b/engines/mads/madsv2/phantom/rooms/room304.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -55,7 +55,7 @@ typedef struct {        /* Room local variables */
 	int16 phantom_frame;
 	int16 phantom_action;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room305.cpp b/engines/mads/madsv2/phantom/rooms/room305.cpp
index d8cc92f057e..34c9b3f0b3c 100644
--- a/engines/mads/madsv2/phantom/rooms/room305.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room305.cpp
@@ -44,6 +44,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_305_init() {
 	local->unmask = false;
 	local->prevent = false;
@@ -165,6 +167,20 @@ void room_305_preload() {
 	section_3_interface();
 }
 
+
+void room_305_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->anim_1_running,
+		local->unmask_frame,
+		local->unmask_action,
+		local->unmask,
+		local->prevent);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room305.h b/engines/mads/madsv2/phantom/rooms/room305.h
index d33d2e1699e..9761a144ac0 100644
--- a/engines/mads/madsv2/phantom/rooms/room305.h
+++ b/engines/mads/madsv2/phantom/rooms/room305.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -48,7 +48,7 @@ typedef struct {        /* Room local variables */
 
 	int16 prevent;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room306.cpp b/engines/mads/madsv2/phantom/rooms/room306.cpp
index 3a43e21bf4f..6f1d2e995cd 100644
--- a/engines/mads/madsv2/phantom/rooms/room306.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room306.cpp
@@ -34,6 +34,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_306_init() {
 	/* ===================== Load Sprite Series ================== */
 
@@ -88,6 +90,14 @@ void room_306_preload() {
 	section_3_interface();
 }
 
+
+void room_306_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(local->prevent);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room306.h b/engines/mads/madsv2/phantom/rooms/room306.h
index 0449f646f9c..62f6e21b495 100644
--- a/engines/mads/madsv2/phantom/rooms/room306.h
+++ b/engines/mads/madsv2/phantom/rooms/room306.h
@@ -29,19 +29,19 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 	int16 prevent;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room307.cpp b/engines/mads/madsv2/phantom/rooms/room307.cpp
index f9a4efcb835..ee66d9f1026 100644
--- a/engines/mads/madsv2/phantom/rooms/room307.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room307.cpp
@@ -37,6 +37,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_307_init() {
 	ss[fx_green_frame] = kernel_load_series(kernel_name('p', 0), false);
 	ss[fx_door] = kernel_load_series(kernel_name('x', 0), false);
@@ -314,6 +316,13 @@ void room_307_preload() {
 	section_3_interface();
 }
 
+
+void room_307_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room307.h b/engines/mads/madsv2/phantom/rooms/room307.h
index 448eaf79f5d..f610f297293 100644
--- a/engines/mads/madsv2/phantom/rooms/room307.h
+++ b/engines/mads/madsv2/phantom/rooms/room307.h
@@ -29,18 +29,18 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room308.cpp b/engines/mads/madsv2/phantom/rooms/room308.cpp
index 2e4779c9d65..c2cc760b60b 100644
--- a/engines/mads/madsv2/phantom/rooms/room308.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room308.cpp
@@ -38,6 +38,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_308_init() {
 	global_speech_load(speech_christine_scream);
 
@@ -384,6 +386,21 @@ void room_308_preload() {
 	section_3_interface();
 }
 
+
+void room_308_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->on_floor,
+		local->prevent,
+		local->prevent_2);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room308.h b/engines/mads/madsv2/phantom/rooms/room308.h
index e963886eacd..b8e792b747b 100644
--- a/engines/mads/madsv2/phantom/rooms/room308.h
+++ b/engines/mads/madsv2/phantom/rooms/room308.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 prevent;
 	int16 prevent_2;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room309.cpp b/engines/mads/madsv2/phantom/rooms/room309.cpp
index 349516b6b8a..361c82d2bd9 100644
--- a/engines/mads/madsv2/phantom/rooms/room309.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room309.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_309_init() {
 	int id;
 
@@ -403,6 +405,18 @@ void room_309_preload() {
 	}
 }
 
+
+void room_309_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->boat_action,
+		local->boat_frame,
+		local->anim_0_running,
+		local->chris_talk_count);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room309.h b/engines/mads/madsv2/phantom/rooms/room309.h
index ddca5351849..a6c287889ea 100644
--- a/engines/mads/madsv2/phantom/rooms/room309.h
+++ b/engines/mads/madsv2/phantom/rooms/room309.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -46,7 +46,7 @@ typedef struct {        /* Room local variables */
 
 	int16 chris_talk_count;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room310.cpp b/engines/mads/madsv2/phantom/rooms/room310.cpp
index 93d49288470..a85bf3cc1dc 100644
--- a/engines/mads/madsv2/phantom/rooms/room310.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room310.cpp
@@ -34,6 +34,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_310_init() {
 	viewing_at_y = ((video_y - display_y) >> 1);
 
@@ -268,6 +270,18 @@ void room_310_preload() {
 	section_3_interface();
 }
 
+
+void room_310_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->message_1,
+		local->message_2);
+	s.syncMultipleLE(local->multiplane_base);
+	s.syncMultipleLE(local->lake_frame);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room310.h b/engines/mads/madsv2/phantom/rooms/room310.h
index d52db4947f0..c6113831144 100644
--- a/engines/mads/madsv2/phantom/rooms/room310.h
+++ b/engines/mads/madsv2/phantom/rooms/room310.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 
 	int16 lake_frame;
 
-} Scratch;
+};
 
 
 #define fx_multiplane_0         0
diff --git a/engines/mads/madsv2/phantom/rooms/room401.cpp b/engines/mads/madsv2/phantom/rooms/room401.cpp
index f9beef2f81d..335c58a8262 100644
--- a/engines/mads/madsv2/phantom/rooms/room401.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room401.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_401_init() {
 	global_catacombs_init();
 
@@ -544,6 +546,21 @@ void room_401_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_401_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room401.h b/engines/mads/madsv2/phantom/rooms/room401.h
index 233f8cd9232..2a9b4ce3c95 100644
--- a/engines/mads/madsv2/phantom/rooms/room401.h
+++ b/engines/mads/madsv2/phantom/rooms/room401.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 dyn_yellow;
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room403.cpp b/engines/mads/madsv2/phantom/rooms/room403.cpp
index ee6ed0af08f..cb5af3a5c2e 100644
--- a/engines/mads/madsv2/phantom/rooms/room403.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room403.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_403_init() {
 	global_catacombs_init();
 
@@ -546,6 +548,20 @@ void room_403_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_403_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room403.h b/engines/mads/madsv2/phantom/rooms/room403.h
index b7d0926ff4a..f012f43460a 100644
--- a/engines/mads/madsv2/phantom/rooms/room403.h
+++ b/engines/mads/madsv2/phantom/rooms/room403.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room404.cpp b/engines/mads/madsv2/phantom/rooms/room404.cpp
index 770f686dbcd..8f09d91ef95 100644
--- a/engines/mads/madsv2/phantom/rooms/room404.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room404.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_404_init() {
 	global_catacombs_init();
 
@@ -548,6 +550,21 @@ void room_404_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_404_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking,
+		local->anim_0_running);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room404.h b/engines/mads/madsv2/phantom/rooms/room404.h
index ccff9300902..c5c65dd9154 100644
--- a/engines/mads/madsv2/phantom/rooms/room404.h
+++ b/engines/mads/madsv2/phantom/rooms/room404.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 	int16 anim_0_running;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room406.cpp b/engines/mads/madsv2/phantom/rooms/room406.cpp
index 508240c88d7..0c034dad369 100644
--- a/engines/mads/madsv2/phantom/rooms/room406.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room406.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_406_init() {
 	global_catacombs_init();
 
@@ -456,6 +458,20 @@ void room_406_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_406_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room406.h b/engines/mads/madsv2/phantom/rooms/room406.h
index 1a7af8744cc..4c0f01374e8 100644
--- a/engines/mads/madsv2/phantom/rooms/room406.h
+++ b/engines/mads/madsv2/phantom/rooms/room406.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 /* ========================= Sprite Series =================== */
 
diff --git a/engines/mads/madsv2/phantom/rooms/room407.cpp b/engines/mads/madsv2/phantom/rooms/room407.cpp
index 972a59bf98c..e3c3507580d 100644
--- a/engines/mads/madsv2/phantom/rooms/room407.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room407.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_407_init() {
 	global_catacombs_init();
 
@@ -538,6 +540,20 @@ void room_407_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_407_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room407.h b/engines/mads/madsv2/phantom/rooms/room407.h
index b9f8a93e8fb..4ecb1d52ab2 100644
--- a/engines/mads/madsv2/phantom/rooms/room407.h
+++ b/engines/mads/madsv2/phantom/rooms/room407.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -46,7 +46,7 @@ typedef struct {        /* Room local variables */
 	int16 dyn_yellow;
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
-} Scratch;
+};
 
 
 /* ===================== Sprite seriers ====================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room408.cpp b/engines/mads/madsv2/phantom/rooms/room408.cpp
index 95d618306e2..a97c5e7dc96 100644
--- a/engines/mads/madsv2/phantom/rooms/room408.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room408.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_408_init(void) {
 	int web;
 
@@ -541,6 +543,20 @@ void room_408_preload(void) {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_408_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room408.h b/engines/mads/madsv2/phantom/rooms/room408.h
index ede4a75efcb..447fb279028 100644
--- a/engines/mads/madsv2/phantom/rooms/room408.h
+++ b/engines/mads/madsv2/phantom/rooms/room408.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 /* ========================= Sprite Series =================== */
 
diff --git a/engines/mads/madsv2/phantom/rooms/room409.cpp b/engines/mads/madsv2/phantom/rooms/room409.cpp
index 4dbbbf345d1..a011de24517 100644
--- a/engines/mads/madsv2/phantom/rooms/room409.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room409.cpp
@@ -41,6 +41,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_409_init() {
 	global_catacombs_init();
 
@@ -685,6 +687,20 @@ void room_409_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_409_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room409.h b/engines/mads/madsv2/phantom/rooms/room409.h
index 86ec8b286f9..26757344891 100644
--- a/engines/mads/madsv2/phantom/rooms/room409.h
+++ b/engines/mads/madsv2/phantom/rooms/room409.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room410.cpp b/engines/mads/madsv2/phantom/rooms/room410.cpp
index 2714d084cf1..c61e025c28c 100644
--- a/engines/mads/madsv2/phantom/rooms/room410.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room410.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 static void get_lever_coordinate_and_type(int *x, int *y, int *type, int lever_number, int *noun) {
 	/* x will return the x location for the stamping of skull */
 	/* y will return the y location for the stamping of skull */
@@ -433,6 +435,13 @@ void room_410_preload() {
 	section_4_interface();
 }
 
+
+void room_410_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room410.h b/engines/mads/madsv2/phantom/rooms/room410.h
index e748875fd6a..2d0fbd8754c 100644
--- a/engines/mads/madsv2/phantom/rooms/room410.h
+++ b/engines/mads/madsv2/phantom/rooms/room410.h
@@ -29,7 +29,7 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
@@ -43,13 +43,13 @@ struct {
    (when the lever is flipped) */
 
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
 	int16 animation[4];     /* Animation handles     */
 
-} Scratch;
+};
 
 /* ========================= Sprite Series =================== */
 
diff --git a/engines/mads/madsv2/phantom/rooms/room453.cpp b/engines/mads/madsv2/phantom/rooms/room453.cpp
index 7733f3cdf37..b2b92966a73 100644
--- a/engines/mads/madsv2/phantom/rooms/room453.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room453.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_453_init() {
 	global_catacombs_init();
 
@@ -527,6 +529,20 @@ void room_453_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_453_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room453.h b/engines/mads/madsv2/phantom/rooms/room453.h
index 15fe3262dc7..4b06a640ac8 100644
--- a/engines/mads/madsv2/phantom/rooms/room453.h
+++ b/engines/mads/madsv2/phantom/rooms/room453.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room456.cpp b/engines/mads/madsv2/phantom/rooms/room456.cpp
index 94273ee52ac..f1c5478f799 100644
--- a/engines/mads/madsv2/phantom/rooms/room456.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room456.cpp
@@ -39,6 +39,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_456_init() {
 	global_catacombs_init();
 
@@ -400,6 +402,20 @@ void room_456_preload() {
 	vocab_make_active(words_green_frame);
 }
 
+
+void room_456_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->frame_is_here,
+		local->dyn_red,
+		local->dyn_green,
+		local->dyn_blue,
+		local->dyn_yellow,
+		local->frame_here_for_taking);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room456.h b/engines/mads/madsv2/phantom/rooms/room456.h
index 1f117b0074e..3318238d2f3 100644
--- a/engines/mads/madsv2/phantom/rooms/room456.h
+++ b/engines/mads/madsv2/phantom/rooms/room456.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -47,7 +47,7 @@ typedef struct {        /* Room local variables */
 	int16 frame_here_for_taking; /* T if a specific frame is here */
 
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room501.cpp b/engines/mads/madsv2/phantom/rooms/room501.cpp
index 276aac21313..ada2be5378f 100644
--- a/engines/mads/madsv2/phantom/rooms/room501.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room501.cpp
@@ -38,6 +38,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_501_init() {
 	kernel_flip_hotspot(words_Christine, false);
 	kernel_flip_hotspot(words_boat, false);
@@ -651,6 +653,16 @@ void room_501_preload() {
 	vocab_make_active(words_walk_to);
 }
 
+
+void room_501_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->prevent_2);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room501.h b/engines/mads/madsv2/phantom/rooms/room501.h
index f82250c7a2e..40799bc615c 100644
--- a/engines/mads/madsv2/phantom/rooms/room501.h
+++ b/engines/mads/madsv2/phantom/rooms/room501.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -42,7 +42,7 @@ typedef struct {        /* Room local variables */
 	int16 anim_0_running;
 	int16 prevent_2;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room502.cpp b/engines/mads/madsv2/phantom/rooms/room502.cpp
index 0733ca2dffc..23ecef20592 100644
--- a/engines/mads/madsv2/phantom/rooms/room502.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room502.cpp
@@ -44,6 +44,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 #define EXPECTED_TOTAL_COLORS 378
 
 static void room_502_initialize_panels() {
@@ -1273,6 +1275,40 @@ void room_502_preload() {
 	section_5_interface();
 }
 
+
+void room_502_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->puzzle_picture);
+	s.syncMultipleLE(local->puzzle_sprite);
+	s.syncMultipleLE(
+		local->fire_1_on,
+		local->fire_2_on,
+		local->fire_3_on,
+		local->fire_4_on,
+		local->panel_pushed,
+		local->turning_panel,
+		local->yippie,
+		local->message_stage,
+		local->room_getting_hotter,
+		local->interim_y,
+		local->interim_x);
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(local->puzzle_sequence);
+	for (int i = 0; i < num_cycle_stages; ++i)
+		local->cycle_list[i].synchronize(s);
+
+	s.skip(4 * num_cycle_stages);	// cycle_color[9] (pointer array)
+	s.skip(4);						// cycle_pointer (pointer)
+
+	s.syncMultipleLE(
+		local->cycle_bookkeep,
+		local->cycle_stage,
+		local->hot_clock,
+		local->hot_timer,
+		local->death_timer);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room502.h b/engines/mads/madsv2/phantom/rooms/room502.h
index 99ebc651073..6e3cccecb16 100644
--- a/engines/mads/madsv2/phantom/rooms/room502.h
+++ b/engines/mads/madsv2/phantom/rooms/room502.h
@@ -30,14 +30,14 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
 #define num_cycle_stages        9       /* 9 stages of color cycling */
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	byte puzzle_picture[16];  /* one of 4                   */
 	byte puzzle_sprite[16];  /* which sprite in ss         */
@@ -72,7 +72,7 @@ typedef struct {        /* Room local variables */
 	uint32 hot_timer;    /* Timer count             */
 	uint32 death_timer;  /* when this reaches LENGTH_OF_LIFE, die */
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room504.cpp b/engines/mads/madsv2/phantom/rooms/room504.cpp
index 7eb90f33467..fa2b5394c30 100644
--- a/engines/mads/madsv2/phantom/rooms/room504.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room504.cpp
@@ -40,6 +40,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 int conv027_second = 0;
 
 void room_504_init() {
@@ -1517,6 +1519,36 @@ void room_504_preload() {
 	vocab_make_active(words_Christine);
 }
 
+
+void room_504_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->music_choice,
+		local->input_count,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->anim_3_running,
+		local->anim_4_running,
+		local->anim_5_running,
+		local->music_is_playing,
+		local->play_count,
+		local->fire_breath,
+		local->listen_action,
+		local->listen_frame,
+		local->chair_action,
+		local->chair_frame,
+		local->play_action,
+		local->play_frame,
+		local->prevent,
+		local->phan_action,
+		local->phan_frame,
+		local->chris_talk_count,
+		local->death_count);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room504.h b/engines/mads/madsv2/phantom/rooms/room504.h
index 22bb49b5b1a..ea5dd47fa64 100644
--- a/engines/mads/madsv2/phantom/rooms/room504.h
+++ b/engines/mads/madsv2/phantom/rooms/room504.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[17];       /* Sprite series handles */
 	int16 sequence[17];     /* Sequence handles      */
@@ -70,7 +70,7 @@ typedef struct {        /* Room local variables */
 
 	int16 death_count;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room505.cpp b/engines/mads/madsv2/phantom/rooms/room505.cpp
index 187ccfd3e2a..a956ce99d05 100644
--- a/engines/mads/madsv2/phantom/rooms/room505.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room505.cpp
@@ -37,6 +37,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_505_init() {
 	int id;
 
@@ -854,6 +856,29 @@ void room_505_preload() {
 	vocab_make_active(words_Christine);
 }
 
+
+void room_505_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->raoul_action,
+		local->raoul_frame,
+		local->raoul_talk_count,
+		local->both_action,
+		local->both_frame,
+		local->both_talk_count,
+		local->part_action,
+		local->part_frame,
+		local->part_talk_count,
+		local->anim_0_running,
+		local->anim_1_running,
+		local->anim_2_running,
+		local->made_it_past_106,
+		local->leave_room,
+		local->they_parted);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room505.h b/engines/mads/madsv2/phantom/rooms/room505.h
index 33e2bdc66e8..b61b40036bc 100644
--- a/engines/mads/madsv2/phantom/rooms/room505.h
+++ b/engines/mads/madsv2/phantom/rooms/room505.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -60,7 +60,7 @@ typedef struct {        /* Room local variables */
 	int16 leave_room;         /* if T, She will follow him out door */
 	int16 they_parted;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */
diff --git a/engines/mads/madsv2/phantom/rooms/room506.cpp b/engines/mads/madsv2/phantom/rooms/room506.cpp
index 0ea0650bbbd..f9f0a03c4d1 100644
--- a/engines/mads/madsv2/phantom/rooms/room506.cpp
+++ b/engines/mads/madsv2/phantom/rooms/room506.cpp
@@ -37,6 +37,8 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
+static Scratch scratch;
+
 void room_506_init() {
 	int id;
 
@@ -465,6 +467,17 @@ void room_506_preload() {
 	}
 }
 
+
+void room_506_synchronize(Common::Serializer &s) {
+	s.syncMultipleLE(local->sprite);
+	s.syncMultipleLE(local->sequence);
+	s.syncMultipleLE(local->animation);
+	s.syncMultipleLE(
+		local->anim_0_running,
+		local->prevent,
+		local->ascending);
+}
+
 } // namespace Rooms
 } // namespace Phantom
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/phantom/rooms/room506.h b/engines/mads/madsv2/phantom/rooms/room506.h
index d5e96b22418..56e35c2b37f 100644
--- a/engines/mads/madsv2/phantom/rooms/room506.h
+++ b/engines/mads/madsv2/phantom/rooms/room506.h
@@ -29,12 +29,12 @@ namespace MADSV2 {
 namespace Phantom {
 namespace Rooms {
 
-#define local ((Scratch *)(&game.scratch[0]))
+#define local (&scratch)
 #define ss    local->sprite
 #define seq   local->sequence
 #define aa    local->animation
 
-typedef struct {        /* Room local variables */
+struct Scratch {        /* Room local variables */
 
 	int16 sprite[15];       /* Sprite series handles */
 	int16 sequence[15];     /* Sequence handles      */
@@ -43,7 +43,7 @@ typedef struct {        /* Room local variables */
 	int16 prevent;
 	int16 ascending;
 
-} Scratch;
+};
 
 
 /* ========================= Sprite Series =================== */




More information about the Scummvm-git-logs mailing list