[Scummvm-git-logs] scummvm master -> 176ac65d6155b4237cf14293d3a1189d0fc4dc5c

dreammaster noreply at scummvm.org
Sun May 10 08:48:19 UTC 2026


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

Summary:
e09d07fc4a MADS: PHANTOM: Fix potential write to invalid memory in quote_load
6f1ef5c3a2 MADS: DRAGONSPHERE: Added room 110
7b4550fe08 MADS: DRAGONSPHERE: Add commonly needed includes to remaining room files
176ac65d61 MADS: DRAGONSPHERE: Added room 111


Commit: e09d07fc4ac2a13887de9ca46f479e479f1bc962
    https://github.com/scummvm/scummvm/commit/e09d07fc4ac2a13887de9ca46f479e479f1bc962
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-05-10T17:06:34+10:00

Commit Message:
MADS: PHANTOM: Fix potential write to invalid memory in quote_load

Changed paths:
    engines/mads/madsv2/core/quote.cpp


diff --git a/engines/mads/madsv2/core/quote.cpp b/engines/mads/madsv2/core/quote.cpp
index 492af3799a8..f56614c2f7f 100644
--- a/engines/mads/madsv2/core/quote.cpp
+++ b/engines/mads/madsv2/core/quote.cpp
@@ -101,12 +101,13 @@ char *quote_load(int quote_id, ...) {
 		now_reading++;
 	}
 
+	*pointer = 0;
+
 	if (mem_adjust(buffer, total_mem_needed)) {
 		quote_error = 6;
 		goto done;
 	}
 
-	*pointer = 0;
 	result = buffer;
 
 done:


Commit: 6f1ef5c3a245eb91b8aecf71ab28019d9ade241b
    https://github.com/scummvm/scummvm/commit/6f1ef5c3a245eb91b8aecf71ab28019d9ade241b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-05-10T18:33:36+10:00

Commit Message:
MADS: DRAGONSPHERE: Added room 110

Changed paths:
    engines/mads/madsv2/core/speech.cpp
    engines/mads/madsv2/core/speech.h
    engines/mads/madsv2/dragonsphere/mads/conv.h
    engines/mads/madsv2/dragonsphere/mads/inventory.h
    engines/mads/madsv2/dragonsphere/mads/sounds.h
    engines/mads/madsv2/dragonsphere/mads/words.h
    engines/mads/madsv2/dragonsphere/rooms/room102.cpp
    engines/mads/madsv2/dragonsphere/rooms/room104.cpp
    engines/mads/madsv2/dragonsphere/rooms/room106.cpp
    engines/mads/madsv2/dragonsphere/rooms/room107.cpp
    engines/mads/madsv2/dragonsphere/rooms/room110.cpp
    engines/mads/madsv2/engine.cpp
    engines/mads/madsv2/engine.h


diff --git a/engines/mads/madsv2/core/speech.cpp b/engines/mads/madsv2/core/speech.cpp
index 09f2de593c2..cde0cfb631a 100644
--- a/engines/mads/madsv2/core/speech.cpp
+++ b/engines/mads/madsv2/core/speech.cpp
@@ -186,5 +186,9 @@ void init_speech() {
 	speech_stream = nullptr;
 }
 
+int speech_status() {
+	return g_engine->isSpeechPlaying() ? 1 : 0;
+}
+
 } // namespace MADSV2
 } // namespace MADS
diff --git a/engines/mads/madsv2/core/speech.h b/engines/mads/madsv2/core/speech.h
index 60ba1a970fe..f9fd283c326 100644
--- a/engines/mads/madsv2/core/speech.h
+++ b/engines/mads/madsv2/core/speech.h
@@ -43,6 +43,7 @@ extern void speech_go();
 extern void global_speech_load(int id);
 extern void global_speech_go(int id);
 extern void global_speech(int id);
+extern int speech_status();
 
 extern void init_speech();
 
diff --git a/engines/mads/madsv2/dragonsphere/mads/conv.h b/engines/mads/madsv2/dragonsphere/mads/conv.h
index dd07d1948e1..04110e01ec9 100644
--- a/engines/mads/madsv2/dragonsphere/mads/conv.h
+++ b/engines/mads/madsv2/dragonsphere/mads/conv.h
@@ -60,6 +60,56 @@ enum {
 	conv005_exit_b_b = 16
 };
 
+enum {
+	conv006_wares_greeting   = 0,
+	conv006_choices_chat     = 2,
+	conv006_choices_sorry    = 3,
+	conv006_exit_b_b         = 5,
+	conv006_how_only         = 6,
+	conv006_thanks_only      = 7,
+	conv006_wise_only        = 8,
+};
+
+enum {
+	conv008_query_wish       =  3,
+	conv008_query_respect    =  4,
+	conv008_query_norespect  =  5,
+	conv008_query_humans     =  6,
+	conv008_query_why_annoy  =  7,
+	conv008_query_king       =  8,
+	conv008_query_where      =  9,
+	conv008_banter_only      = 11
+};
+
+enum {
+	conv009_hello1a_only     = 1,
+	conv009_hello2a_only     = 3,
+	conv009_choices_trip     = 4,
+	conv009_choices_never    = 5,
+	conv009_choices_someday  = 6,
+	conv009_exiter_leave     = 8
+};
+
+enum {
+	conv010_hold_only  =  3,
+	conv010_leave_b_b  =  6,
+	conv010_fix_b_b    = 22,
+	conv010_die_b_b    = 31
+};
+
+enum {
+	conv012_gash_b_b   = 14
+};
+
+enum {
+	conv014_heehee_only      = 0,
+	conv014_query_wish       = 3,
+	conv014_query_respect    = 4,
+	conv014_query_humans     = 6,
+	conv014_query_why_annoy  = 7,
+	conv014_banter_only      = 8
+};
+
 enum {
 	conv034_five_b_b = 4,
 	conv034_seven_only = 7,
diff --git a/engines/mads/madsv2/dragonsphere/mads/inventory.h b/engines/mads/madsv2/dragonsphere/mads/inventory.h
index b683c6c157a..66a26ad2733 100644
--- a/engines/mads/madsv2/dragonsphere/mads/inventory.h
+++ b/engines/mads/madsv2/dragonsphere/mads/inventory.h
@@ -29,17 +29,21 @@ namespace MADSV2 {
 namespace Dragonsphere {
 
 enum {
-	dummy  = 0,
-	shieldstone = 3,
-	sword = 4,
-	goblet = 5,
-	bone   = 6,
-	rare_coin = 38,
-	crystal_flower = 39,
-	ruby_ring = 41,
-	gold_nugget = 42,
+	bird_figurine   =  1,
+	shieldstone     =  3,
+	sword           =  4,
+	goblet          =  5,
+	bone            =  6,
+	fruit           =  7,
+	pid_doll        =  8,
+	magic_belt      = 18,
+	shifter_ring    = 32,
+	rare_coin       = 38,
+	crystal_flower  = 39,
+	ruby_ring       = 41,
+	gold_nugget     = 42,
 	magic_music_box = 43,
-	emerald = 44
+	emerald         = 44
 };
 
 } // namespace Dragonsphere
diff --git a/engines/mads/madsv2/dragonsphere/mads/sounds.h b/engines/mads/madsv2/dragonsphere/mads/sounds.h
index b13de98b12f..a458a22b3bd 100644
--- a/engines/mads/madsv2/dragonsphere/mads/sounds.h
+++ b/engines/mads/madsv2/dragonsphere/mads/sounds.h
@@ -29,13 +29,15 @@ namespace MADSV2 {
 namespace Dragonsphere {
 
 enum {
-	N_DoorOpens      = 24,
-	N_DoorCloses     = 25,
-	N_TakeObjectSnd  = 26,
-	N_QueenMother = 45,
-	N_TurnDiaryPage = 65,
-	N_WallGrinds = 67,
-	N_BooksRumble = 94,
+	N_DoorOpens       =  24,
+	N_DoorCloses      =  25,
+	N_TakeObjectSnd   =  26,
+	N_WayStationMus   =  37,
+	N_QueenMother     =  45,
+	N_TurnDiaryPage   =  65,
+	N_WallGrinds      =  67,
+	N_JumpDownWell    =  93,
+	N_BooksRumble     =  94,
 	N_McMornTipsTable = 100
 };
 
diff --git a/engines/mads/madsv2/dragonsphere/mads/words.h b/engines/mads/madsv2/dragonsphere/mads/words.h
index 26c66365870..82fe843b7f3 100644
--- a/engines/mads/madsv2/dragonsphere/mads/words.h
+++ b/engines/mads/madsv2/dragonsphere/mads/words.h
@@ -48,10 +48,22 @@ enum {
 	words_walk_through         =  37,
 	words_wall_plaque          =  40,
 	words_decoration           =  41,
+	words_signet_ring          =  46,
+	words_invoke               =  47,
 	words_shieldstone          =  55,
 	words_sword                =  56,
 	words_goblet               =  59,
 	words_bone                 =  62,
+	words_doll                 =  66,
+	words_heal                 =  68,
+	words_rope                 = 101,
+	words_tie                  = 102,
+	words_crystal_ball         = 109,
+	words_gaze_into            = 110,
+	words_tentacle_parts       = 125,
+	words_rare_coin            = 129,
+	words_castle               = 156,
+	words_walk_down            = 169,
 	words_brazier              = 175,
 	words_door_to_throne_room  = 176,
 	words_dining_table         = 178,
@@ -73,7 +85,18 @@ enum {
 	words_guard_stool          = 206,
 	words_rocks                = 207,
 	words_dividing_wall        = 208,
+	words_hedge                = 211,
+	words_sky                  = 212,
+	words_fields               = 214,
+	words_gate_to_courtyard    = 215,
+	words_road_to_east         = 216,
+	words_trees                = 217,
+	words_clouds               = 218,
+	words_merchant_s_stall     = 219,
+	words_well                 = 220,
+	words_crank                = 224,
 	words_bucket               = 225,
+	words_jump_down            = 226,
 	words_painting             = 231,
 	words_document             = 232,
 	words_ink_bottle           = 233,
@@ -89,9 +112,18 @@ enum {
 	words_step                 = 256,
 	words_king_s_throne        = 258,
 	words_queen_s_throne       = 260,
+	words_diaries              = 264,
 	words_scullery_maid        = 266,
+	words_doorway              = 277,
+	words_faerie               = 278,
+	words_guard_captain        = 280,
+	words_merchant             = 281,
+	words_shapechanger         = 282,
+	words_king                 = 291,
 	words_sconce               = 329,
+	words_Queen_Mother         = 347,
 	words_sit_on               = 363,
+	words_Soptus_Ecliptus      = 448,
 	words_Dragonsphere         = 571
 };
 
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room102.cpp b/engines/mads/madsv2/dragonsphere/rooms/room102.cpp
index 34a185516a3..698b34e6211 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room102.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room102.cpp
@@ -27,6 +27,10 @@
 #include "mads/madsv2/dragonsphere/mads/sounds.h"
 #include "mads/madsv2/core/text.h"
 #include "mads/madsv2/core/vocab.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room102.h"
@@ -512,8 +516,8 @@ void room_102_preload() {
 	section_1_walker();
 	section_1_interface();
 
-	vocab_make_active(264);  // diaries
-	vocab_make_active(13);   // walk_to
+	vocab_make_active(words_diaries);
+	vocab_make_active(words_walk_to);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room104.cpp b/engines/mads/madsv2/dragonsphere/rooms/room104.cpp
index c99fccd68b8..7216fe1ff65 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room104.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room104.cpp
@@ -32,6 +32,10 @@
 #include "mads/madsv2/core/speech.h"
 #include "mads/madsv2/core/text.h"
 #include "mads/madsv2/core/vocab.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/mads/sounds.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
@@ -42,49 +46,6 @@ namespace MADSV2 {
 namespace Dragonsphere {
 namespace Rooms {
 
-// ---------------------------------------------------------------------------
-// Scratch layout (matches ROOM104.MAC)
-//
-//   game.scratch offsets:
-//     sprite[0..15]       = 0x00..0x1F
-//     sequence[0..15]     = 0x20..0x3F
-//     animation[0..5]     = 0x40..0x4B
-//     doorway_id          = 0x4C
-//     wall_panel_id       = 0x4E
-//     secret_door_id      = 0x50
-//     tapestry_frame      = 0x52
-//     animation_running   = 0x54
-//     king_frame          = 0x56
-//     king_action         = 0x58
-//     king_talk_count     = 0x5A
-//     anim_0_running      = 0x5C
-//     mac_frame           = 0x5E
-//     mac_action          = 0x60
-//     mac_talk_count      = 0x62
-//     anim_1_running      = 0x64
-//     queen_frame         = 0x66
-//     queen_action        = 0x68
-//     queen_talk_count    = 0x6A
-//     anim_2_running      = 0x6C
-//     twinkles_frame      = 0x6E
-//     twinkles_action     = 0x70
-//     twinkles_talk_count = 0x72
-//     anim_3_running      = 0x74
-//     pid_frame           = 0x76
-//     pid_action          = 0x78
-//     pid_talk_count      = 0x7A
-//     anim_4_running      = 0x7C
-//     clock               = 0x7E  (int32 — long in original)
-//     death_timer         = 0x82  (int32 — long in original)
-//     activate_timer      = 0x86
-//     has_been_bear       = 0x88
-//     mac_2_frame         = 0x8A
-//     anim_5_running      = 0x8C
-//     amulet_works        = 0x8E
-//     pid_drawn_sword     = 0x90
-//     death_frame         = 0x92
-//     anim_6_running      = 0x94
-// ---------------------------------------------------------------------------
 struct Scratch {
 	int16 sprite[16];            // ss[]  — series handles
 	int16 sequence[16];          // seq[] — sequence handles
@@ -2370,9 +2331,9 @@ void room_104_preload() {
 	section_1_walker();
 	section_1_interface();
 
-	vocab_make_active(277);  // words_doorway
-	vocab_make_active(347);  // words_Queen_Mother
-	vocab_make_active(291);  // words_king
+	vocab_make_active(words_doorway);
+	vocab_make_active(words_Queen_Mother);
+	vocab_make_active(words_king);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room106.cpp b/engines/mads/madsv2/dragonsphere/rooms/room106.cpp
index 6a91c854a50..8f15cef229d 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room106.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room106.cpp
@@ -1497,6 +1497,10 @@ void room_106_preload() {
 	room_parser_code_pointer = room_106_parser;
 	room_daemon_code_pointer = room_106_daemon;
 
+	if (global[end_of_game]) {
+		global[no_load_walker] = true;
+	}
+
 	section_1_walker();
 	section_1_interface();
 }
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room107.cpp b/engines/mads/madsv2/dragonsphere/rooms/room107.cpp
index 4629b3c7840..1a217f09fe2 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room107.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room107.cpp
@@ -743,6 +743,8 @@ void room_107_preload() {
 
 	section_1_walker();
 	section_1_interface();
+
+	vocab_make_active(words_walk_to);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room110.cpp b/engines/mads/madsv2/dragonsphere/rooms/room110.cpp
index 9d02097be0a..dcb4162b70c 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room110.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room110.cpp
@@ -23,8 +23,14 @@
 #include "mads/madsv2/core/game.h"
 #include "mads/madsv2/core/imath.h"
 #include "mads/madsv2/core/kernel.h"
+#include "mads/madsv2/core/object.h"
 #include "mads/madsv2/core/sound.h"
+#include "mads/madsv2/core/speech.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room110.h"
@@ -35,6 +41,58 @@ namespace Dragonsphere {
 namespace Rooms {
 
 struct Scratch {
+	int16 sprite[15];				/* Sprite series handles */
+	int16 sequence[15];				/* Sequence handles      */
+	int16 animation[6];				/* Animation handles     */
+
+	int16 character_frame[6];		/* hold frame of character to whom the king speaks */
+	int16 faerie_id[2];				/* hotspot handles for faerie */
+	int16 slathan_id[2];			/* hotspot handles for slathan shapechanger */
+	int16 soptus_id;				/* hotspot handle for soptus */
+	int16 merchant_id;				/* hotspot handle for merchant */
+	int16 guard_id;					/* hotspot for guard */
+
+	int16 new_action[6];			/* Type of action to run for character animation */
+	int16 last_action[6];			/* Last action in character animation to stave */
+									/* running it again. */
+	int16 good_number[6];			/* so as not to repeat two looks */
+	int16 change_action[6];			/* change action to a different state during conversation */
+	int16 talking_to;				/* who talking to in conversations */
+	int16 how_long_to_talk;			/* how long to talk in a talk sequence */
+	int16 slathan_talk_count;		/* counter to help determine when to stop talking */
+	int16 soptus_talk_count;		/* same as above */
+
+	int16 anim_0_running;
+	int16 anim_1_running;
+	int16 anim_2_running;
+	int16 anim_3_running;
+	int16 anim_4_running;
+	int16 anim_5_running;
+
+	int16 guard_king_frame;			/* animation frame being held for guard while king stuff */
+	int16 guard_king_action;		/* Type of action to run for guard while king animation */
+	int16 guard_king_talk_count;	/* counter for guard while king talking */
+
+	int16 guard_pid_frame;			/* animation frame being held for guard while pid stuff */
+	int16 guard_pid_action;			/* Type of action to run for guard while pid animation */
+	int16 guard_pid_talk_count;		/* counter for guard while pid talking */
+
+	int32 slathan_timer;			/* Counters for slathan turning head*/
+	int32 diff[5];
+	int32 last_clock[6];
+	int16  switch_direction[6];		/* Time to move in other directions*/
+	int32 soptus_timer;				/* Counters for soptus */
+	int16  merchant_talking;		/* true, if merchant talking, used in soptus animation */
+	int16  soptus_talking;			/* true, if soptus talking, used in merchant animation */
+	int16 time;
+
+	int16 random_grunt_only;		/* saves random number choice for guard's actions */
+
+	int32 clock;
+	int32 death_timer;				/* when this counter reaches 15 sec, kill pid */
+	int16 activate_timer;			/* If T, will start counting death_timer */
+	byte cut_scene;
+	int16 speech_playing;
 };
 
 #define local (&scratch)
@@ -42,26 +100,2787 @@ struct Scratch {
 #define seq   local->sequence
 #define aa    local->animation
 
-//static Scratch scratch;
+static Scratch scratch;
+
+
+/* ========================= Sprites ========================= */
+
+#define fx_king_in_well                  1    /* rm110a  */
+#define fx_pid_in_well                   2    /* rm110b0 */
+#define fx_reach_fruit                   3    /* kgrh_9  */ 
+
+
+/* ======================== Triggers ========================= */
+
+#define ROOM_110_GOT_FRUIT               70
+#define ROOM_110_SHOW_WALKER             80
+#define ROOM_110_PID_SHISHKABOB          90
+#define ROOM_110_YOU_TALK                100
+#define ROOM_110_GO_TO_120               104
+#define ROOM_110_START_WALKING           106
+#define MUSIC                            120
+
+
+/* walk points */
+#define START_X_ROOM_118                 21
+#define START_Y_ROOM_118                 134
+#define START_X_ROOM_113                 177
+#define START_Y_ROOM_113                 146
+#define START_X_ROOM_120                 307
+#define START_Y_ROOM_120                 141
+
+#define WALK_TO_FAERIE_X                 285
+#define WALK_TO_FAERIE_Y                 130
+
+#define WALK_TO_SLATHAN_X                131
+#define WALK_TO_SLATHAN_Y                122
+
+#define WALK_TO_SOPTUS_X                 284
+#define WALK_TO_SOPTUS_Y                 121
+
+#define WALK_TO_MERCHANT_X               284
+#define WALK_TO_MERCHANT_Y               121
+
+#define WALK_TO_GUARD_X                  51
+#define WALK_TO_GUARD_Y                  126
+
+#define WALK_TO_GUARD_2_X                260
+#define WALK_TO_GUARD_2_Y                137
+
+/* cursor points */
+#define RIGHT_STALL_X                    240
+
+/* animations */
+/* rm110a.aa - king - faerie */
+/* FRAMES are as follows:    */
+/* sit:      0 - 1           */
+/*                           */
+/* look:     2 - 7           */
+/*                           */
+/* point:    8 - 17          */
+/*                           */
+/* shrug:   18 - 30          */
+/*                           */
+/* scratch: 31 - 50          */
+/*                           */
+/* rm110b.aa - king - slathan*/
+/* FRAMES are as follows:       */
+/* rock toss    0 - 9 if ending */
+/*  goto 10 else                */
+/*                              */
+/* toss_again   1 - 9           */
+/*                              */
+/* talk:       11 - 13          */
+/*                              */
+/* point:      14 - 27          */
+/*                              */
+/* nod:        28 - 32          */
+/*                              */
+/* look_around 33 - 42          */
+/*                              */
+/* sit         43 - 44          */
+/*                              */
+/* rm110c.aa - king - soptus    */
+/* FRAMES are as follows:       */
+/* stand face in       0 - 1    */
+/*                              */
+/* reach:              2 - 13   */
+/*                              */
+/* stand show face:   14 - 15   */
+/*                              */
+/* just say no:       16 - 32   */
+/*                              */
+/* peer:              33 - 36   */
+/*                              */
+/* turn to king:      37 - 41   */
+/*                              */
+/* bow:               42 - 52   */
+/*                              */
+/* talk:              53 - 58   */
+/*                              */
+/* point:             59 - 67   */
+/*                              */
+/* turn to merchant:  68 - 73   */
+/* rm110d.aa - king - merchant  */
+/* FRAMES are as follows:       */
+/* stand:              0 - 2    */
+/*                              */
+/* bend over:          3 - 13   */
+/*                              */
+/* clean counter 1:   14 - 19   */
+/*                              */
+/* reach:             20 - 28   */
+/*                              */
+/* clean counter 2:   29 - 31   */
+/*                              */
+/* shrug:             32 - 46   */
+/*                              */
+/* just say no:       47 - 59   */
+/*                              */
+/* fold arms:         60 - 68   */
+/*                              */
+/* turn away:         69 - 73   */
+/*                              */
+/* hand on chin:      74 - 90   */
+/*                              */
+
+/* conversations */
+/* conv008.con   */
+/* conv014.con   */
+/* conv009.con   */
+/* conv006.con   */
+/* conv007.con   */
+/* conv010.con   */
+
+#define CONV_FAERIE         8
+#define CONV_SLATHAN        14
+#define CONV_SOPTUS         9
+#define CONV_MERCHANT       6
+#define CONV_GUARD          7
+#define CONV_GUARD_PID      10
+#define CONV_GUARD_HEAL     12
+#define CONV_GUARD_CASTLE   11
+
+/* faerie conversation states */
+#define CONV8_SIT                        1
+#define CONV8_LOOK                       2
+#define CONV8_POINT                      3
+#define CONV8_SHRUG                      4 
+#define CONV8_SCRATCH                    5 
+
+/* slathan conversation states */
+#define CONV14_SIT                       1
+#define CONV14_ROCK_TOSS                 2
+#define CONV14_TOSS_AGAIN                3
+#define CONV14_TALK                      4
+#define CONV14_POINT                     5
+#define CONV14_NOD                       6 
+#define CONV14_NOD_TALK                  7
+#define CONV14_LOOK_AROUND               8
+
+/* soptus conversation states    */
+#define CONV9_STAND_FACE_IN              1
+#define CONV9_REACH                      2
+#define CONV9_STAND_SHOW_FACE            3
+#define CONV9_JUST_SAY_NO                4
+#define CONV9_PEER                       5
+#define CONV9_BOW_TURN_TO_MERCHANT       6
+#define CONV9_TALK                       7
+#define CONV9_TURN_TO_MERCHANT           8
+#define CONV9_TURN_BOW                   9
+#define CONV9_POINT_TALK                 10
+#define CONV9_TALK_TURN_TO_MERCHANT      11
+#define CONV9_TURN_BOW_TALK              12
+#define CONV9_LOOK_AT_KING               13
+
+/* merchant conversation states    */
+#define CONV6_STAND                      1
+#define CONV6_BEND_OVER                  2
+#define CONV6_CLEAN_COUNTER_1            3
+#define CONV6_REACH                      4
+#define CONV6_CLEAN_COUNTER_2            5
+#define CONV6_SHRUG                      6
+#define CONV6_JUST_SAY_NO                7
+#define CONV6_FOLD_ARMS                  8
+#define CONV6_TURN_AWAY                  9
+#define CONV6_HAND_ON_CHIN               10
+
+/* guard conversation states */
+#define CONV7_TALK                       0
+#define CONV7_SHUT_UP                    1
+
+/* guard conversation states */
+#define CONV10_TALK                       0
+#define CONV10_SHUT_UP                    1
+#define CONV10_KILL                       2
+#define CONV10_POINT                      3
+
+
+/* dynamic hotspots */
+#define FAERIE_0_X                       299
+#define FAERIE_0_Y                       90
+#define FAERIE_0_X_SIZE                  17
+#define FAERIE_0_Y_SIZE                  21
+
+#define FAERIE_1_X                       295
+#define FAERIE_1_Y                       111
+#define FAERIE_1_X_SIZE                  8
+#define FAERIE_1_Y_SIZE                  13
+
+#define SLATHAN_0_X                      96
+#define SLATHAN_0_Y                      92
+#define SLATHAN_0_X_SIZE                 16
+#define SLATHAN_0_Y_SIZE                 17
+
+#define SLATHAN_1_X                      102
+#define SLATHAN_1_Y                      109
+#define SLATHAN_1_X_SIZE                 18
+#define SLATHAN_1_Y_SIZE                 15
+
+#define GUARD_X                          16
+#define GUARD_Y                          86
+#define GUARD_X_SIZE                     14
+#define GUARD_Y_SIZE                     38
+
+/* random numbers for faerie */
+/* for faerie */
+#define RANDOM_LOW_NUMBER                1
+#define RANDOM_HIGH_NUMBER               25
+#define RANDOM_SIT_ALLOWED               25
+
+/* random numbers for slathan */
+#define RANDOM_SLATHAN_LOW_NUMBER        1
+#define RANDOM_SLATHAN_HIGH_NUMBER       30
+#define RANDOM_SLATHAN_SIT_ALLOWED       17
+#define RANDOM_SLATHAN_TOSS_ALLOWED      27
+
+#define RANDOM_END_NUMBER                3
+#define RANDOM_CHOICE                    2
+
+/* random numbers for soptus */
+#define RANDOM_SOPTUS_LOW                1
+#define RANDOM_SOPTUS_HIGH               50
+#define RANDOM_SOPTUS_STAND_FACE_IN      44
+#define RANDOM_SOPTUS_SHOW_FACE_HIGH     47
+#define RANDOM_SOPTUS_REACH_HIGH         48
+#define RANDOM_SOPTUS_PEER_HIGH          49
+
+/* random numbers for merchant */
+#define RANDOM_MERCHANT_LOW              1
+#define RANDOM_MERCHANT_HIGH             40
+#define RANDOM_MERCHANT_STAND            26
+#define RANDOM_MERCHANT_BEND_OVER        27
+#define RANDOM_MERCHANT_CLEAN_COUNTER_1  31   
+#define RANDOM_MERCHANT_REACH            32
+#define RANDOM_MERCHANT_CLEAN_COUNTER_2  35   
+#define RANDOM_MERCHANT_SHRUG            36
+#define RANDOM_MERCHANT_JUST_SAY_NO      37
+#define RANDOM_MERCHANT_FOLD_ARMS        38
+#define RANDOM_MERCHANT_TURN_AWAY        39
+
+#define RANDOM_MERCHANT_HIGH_NUMBER      3
+
+/* random numbers for guard */
+#define RANDOM_GUARD_CHOICE_LOW          1
+#define RANDOM_GUARD_CHOICE_HIGH         3
+
+/* for who talking to in conversations */
+#define NOONE                            0
+#define FAERIE                           1
+#define SOPTUS                           2
+#define SLATHAN                          3
+#define MERCHANT                         4
+
+/* random numbers for everyone */
+#define RANDOM_LOWEST_NUMBER             1 
+#define RANDOM_HIGHEST_NUMBER            6
+
+/* timer macros */
+#define TIME_TO_MOVE_1                   200
+#define TIME_TO_MOVE_2                   300
+#define TIME_TO_MOVE_3                   400
+#define TIME_TO_MOVE_4                   500
+#define TIME_TO_MOVE_5                   600
+#define TIME_TO_MOVE_6                   700
+#define TIME_TO_MOVE_7                   300
+
+/* how long for talking */
+#define TALK_SLATHAN_MEDIUM              20
+#define TALK_SLATHAN_LONG                40
+#define TALK_SOPTUS_SHORT                10
+#define TALK_SOPTUS_MEDIUM               25
+#define TALK_GUARD_SHORT                 10
+#define TALK_GUARD_MEDIUM                25
+
+#define LENGTH_OF_LIFE                   900
+
+
+static void room_110_init() {
+	if (global[llanie_status] == IS_SAVED) {
+		global[make_504_empty] = true;
+	}
+
+	if (previous_room != KERNEL_RESTORING_GAME) {
+		local->anim_0_running = false;
+		local->anim_1_running = false;
+		local->anim_2_running = false;
+		local->anim_3_running = false;
+		local->anim_4_running = false;
+		local->anim_5_running = false;
+		local->activate_timer = false;
+	}
+
+	local->death_timer = 0;
+	local->clock = 0;
+	local->cut_scene = false;
+	local->speech_playing = false;
+
+	/* If player is king, run conversations and animations with people */
+
+	if (global[player_persona] == PLAYER_IS_KING) {
+		if (!player_has(fruit)) {
+			ss[fx_reach_fruit] = kernel_load_series("*KGRH_9", false);
+		}
+		ss[fx_king_in_well] = kernel_load_series(kernel_name('a', -1), false);
+
+		if (object[bird_figurine].location == 303) {
+			local->faerie_id[0] = kernel_add_dynamic(words_faerie, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+				KERNEL_NONE, FAERIE_0_X,
+				FAERIE_0_Y, FAERIE_0_X_SIZE,
+				FAERIE_0_Y_SIZE);
+			kernel_dynamic_walk(local->faerie_id[0], WALK_TO_FAERIE_X, WALK_TO_FAERIE_Y, FACING_NORTHEAST);
+			kernel_dynamic_hot[local->faerie_id[0]].prep = PREP_ON;
+
+			local->faerie_id[1] = kernel_add_dynamic(words_faerie, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+				KERNEL_NONE, FAERIE_1_X,
+				FAERIE_1_Y, FAERIE_1_X_SIZE,
+				FAERIE_1_Y_SIZE);
+			kernel_dynamic_walk(local->faerie_id[1], WALK_TO_FAERIE_X, WALK_TO_FAERIE_Y, FACING_NORTHEAST);
+			kernel_dynamic_hot[local->faerie_id[1]].prep = PREP_ON;
+		}
+
+		if (object[pid_doll].location == 204) {
+			local->slathan_id[0] = kernel_add_dynamic(words_shapechanger, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+				KERNEL_NONE, SLATHAN_0_X,
+				SLATHAN_0_Y, SLATHAN_0_X_SIZE,
+				SLATHAN_0_Y_SIZE);
+			kernel_dynamic_walk(local->slathan_id[0], WALK_TO_SLATHAN_X, WALK_TO_SLATHAN_Y, FACING_NORTHWEST);
+			kernel_dynamic_hot[local->slathan_id[0]].prep = PREP_ON;
+
+			local->slathan_id[1] = kernel_add_dynamic(words_shapechanger, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+				KERNEL_NONE, SLATHAN_1_X,
+				SLATHAN_1_Y, SLATHAN_1_X_SIZE,
+				SLATHAN_1_Y_SIZE);
+			kernel_dynamic_walk(local->slathan_id[1], WALK_TO_SLATHAN_X, WALK_TO_SLATHAN_Y, FACING_NORTHWEST);
+			kernel_dynamic_hot[local->slathan_id[1]].prep = PREP_ON;
+		}
+
+		local->soptus_id = kernel_add_dynamic(words_Soptus_Ecliptus, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+			KERNEL_NONE, 0, 0, 0, 0);
+		kernel_dynamic_walk(local->soptus_id, WALK_TO_SOPTUS_X, WALK_TO_SOPTUS_Y, FACING_NORTHWEST);
+		kernel_dynamic_hot[local->soptus_id].prep = PREP_ON;
+
+		local->merchant_id = kernel_add_dynamic(words_merchant, words_walk_to, SYNTAX_MASC_NOT_PROPER,
+			KERNEL_NONE, 0, 0, 0, 0);
+		kernel_dynamic_walk(local->merchant_id, WALK_TO_MERCHANT_X, WALK_TO_MERCHANT_Y, FACING_NORTHWEST);
+		kernel_dynamic_hot[local->merchant_id].prep = PREP_ON;
+
+		local->guard_id = kernel_add_dynamic(words_guard_captain, words_walk_to, SYNTAX_FEM_NOT_PROPER,
+			KERNEL_NONE, GUARD_X,
+			GUARD_Y, GUARD_X_SIZE,
+			GUARD_Y_SIZE);
+		kernel_dynamic_walk(local->guard_id, WALK_TO_GUARD_X, WALK_TO_GUARD_Y, FACING_NORTHWEST);
+		kernel_dynamic_hot[local->guard_id].prep = PREP_ON;
+
+		if (object[bird_figurine].location == 303) {
+			/* Run faerie animation */
+			aa[0] = kernel_run_animation(kernel_name('A', -1), 0);
+			local->new_action[0] = CONV8_SIT;
+			local->last_action[0] = CONV8_SIT;
+			local->good_number[0] = false;
+			local->change_action[0] = 0;
+			local->anim_0_running = true;
+		}
+
+		if (object[pid_doll].location == 204) {
+			/* Run slathan animation */
+			aa[1] = kernel_run_animation(kernel_name('B', -1), 0);
+			kernel_reset_animation(aa[1], 43);
+			local->new_action[1] = CONV14_SIT;
+			local->last_action[1] = CONV14_SIT;
+			local->good_number[1] = false;
+			local->change_action[1] = 0;
+			local->slathan_talk_count = 0;
+			local->slathan_timer = 0;
+			local->anim_1_running = true;
+		}
+
+		/* Run soptus animation */
+		aa[2] = kernel_run_animation(kernel_name('C', -1), 0);
+		kernel_dynamic_anim(local->soptus_id, aa[2], 0);
+		local->new_action[2] = CONV9_STAND_FACE_IN;
+		local->last_action[2] = CONV9_STAND_FACE_IN;
+		local->good_number[2] = false;
+		local->change_action[2] = 0;
+		local->soptus_talk_count = 0;
+		local->soptus_timer = 0;
+		local->anim_2_running = true;
+
+		/* Run merchant animation */
+		aa[3] = kernel_run_animation(kernel_name('D', -1), 0);
+		kernel_dynamic_anim(local->merchant_id, aa[3], 0);
+		local->new_action[3] = CONV6_STAND;
+		local->last_action[3] = CONV6_STAND;
+		local->good_number[3] = false;
+		local->change_action[3] = 0;
+		local->anim_3_running = true;
+
+		/* Run guard animation */
+		aa[4] = kernel_run_animation(kernel_name('E', -1), 0);
+		local->guard_king_action = CONV7_SHUT_UP;
+		local->anim_4_running = true;
+
+		/* load conversations */
+		local->talking_to = NOONE;
+		conv_get(CONV_FAERIE);
+		conv_get(CONV_SLATHAN);
+		conv_get(CONV_SOPTUS);
+		conv_get(CONV_MERCHANT);
+		conv_get(CONV_GUARD);
+
+	} else {
+		kernel_flip_hotspot(words_guard_captain, false);
+		ss[fx_pid_in_well] = kernel_load_series(kernel_name('b', 0), false);
+		local->guard_id = kernel_add_dynamic(words_guard_captain, words_walk_to, SYNTAX_FEM_NOT_PROPER,
+			KERNEL_NONE, 0, 0, 0, 0);
+		kernel_dynamic_walk(local->guard_id, WALK_TO_GUARD_2_X, WALK_TO_GUARD_2_Y, FACING_WEST);
+		kernel_dynamic_hot[local->guard_id].prep = PREP_ON;
+
+		aa[5] = kernel_run_animation(kernel_name('f', -1), 0);
+		local->guard_pid_action = CONV10_SHUT_UP;
+		local->anim_5_running = true;
+
+		kernel_dynamic_anim(local->guard_id, aa[5], 0);
+
+		if (global[reset_conv] >= 0) {
+			conv_reset(global[reset_conv]);
+			global[reset_conv] = -1;
+		}
+
+		if (global[reset_conv_2] >= 0) {
+			conv_reset(global[reset_conv_2]);
+			global[reset_conv_2] = -1;
+		}
+
+		conv_get(CONV_GUARD_HEAL);   /* 12 */
+		conv_get(CONV_GUARD_PID);    /* 10 */
+		conv_get(CONV_GUARD_CASTLE); /* 11 */
+	}
+
+	/* for testing only - king walks off screen becomes Pid */
+	if (previous_room == 120 || (previous_room == 111 && !global[invoked_from_111]) ||
+		previous_room == 112 || previous_room == 110) {
+
+		if (previous_room == 112) {
+			player.x = WALK_TO_GUARD_2_X;
+			player.y = WALK_TO_GUARD_2_Y;
+			player.facing = FACING_WEST;
+
+		} else {
+			if (global[guard_pid_status] == GUARD_IS_UNHEALED || global[player_persona] == PLAYER_IS_KING) {
+				player_first_walk(START_X_ROOM_120 + 30, START_Y_ROOM_120, FACING_WEST,
+					START_X_ROOM_120, START_Y_ROOM_120, FACING_WEST, true);
+			} else {
+				player_first_walk(START_X_ROOM_120 + 30, START_Y_ROOM_120, FACING_WEST,
+					START_X_ROOM_120, START_Y_ROOM_120, FACING_WEST, false);
+			}
+		}
+
+		/* Player comes from strategic map or dragonsphere or guard captain cut scenes */
+		if (global[player_persona] == PLAYER_IS_PID) {
+
+			if (global[guard_pid_status] == GUARD_NEVER_HEALED) {
+				/* global[no_talk_to_guard] = true; */
+				player.commands_allowed = false;
+				conv_run(CONV_GUARD_PID);
+				conv_export_value(player_has(shifter_ring));
+				if (global[llanie_status] == IS_SAVED) {
+					conv_export_value(1);
+				} else {
+					conv_export_value(0);
+				}
+
+			} else if (global[guard_pid_status] == GUARD_IS_HEALED) {
+				/* global[no_talk_to_guard] = true; */
+				player.commands_allowed = false;
+				conv_run(CONV_GUARD_HEAL);
+			}
+		}
+
+	} else if (previous_room == KERNEL_RESTORING_GAME) {
+
+		if (conv_restore_running == CONV_FAERIE) {
+			conv_run(CONV_FAERIE);
+
+		} else if (conv_restore_running == CONV_SOPTUS) {
+			conv_run(CONV_SOPTUS);
+			local->new_action[2] = CONV9_LOOK_AT_KING;
+			local->last_action[2] = CONV9_LOOK_AT_KING;
+			kernel_reset_animation(aa[2], 52);
+
+		} else if (conv_restore_running == CONV_SLATHAN) {
+			conv_run(CONV_SLATHAN);
+
+		} else if (conv_restore_running == CONV_MERCHANT) {
+			conv_run(CONV_MERCHANT);
+
+		} else if (conv_restore_running == CONV_GUARD) {
+			conv_run(CONV_GUARD);
+			if (object[bird_figurine].location == 303) conv_export_value(true);
+			else conv_export_value(false);
+			if (object[pid_doll].location == 204) conv_export_value(true);
+			else conv_export_value(false);
+			local->random_grunt_only = imath_random(RANDOM_GUARD_CHOICE_LOW, RANDOM_GUARD_CHOICE_HIGH);
+			conv_export_value(local->random_grunt_only);
+
+		} else if (conv_restore_running == CONV_GUARD_PID) {
+			player.commands_allowed = false;
+			conv_run(CONV_GUARD_PID);
+			conv_export_value(player_has(shifter_ring));
+			if (global[llanie_status] == IS_SAVED) {
+				conv_export_value(1);
+			} else {
+				conv_export_value(0);
+			}
+
+		} else if (conv_restore_running == CONV_GUARD_HEAL) {
+			player.commands_allowed = false;
+			conv_run(CONV_GUARD_HEAL);
+		}
+
+
+	} else if (previous_room == 113) {          /* Player comes from Well */
+		player.x = START_X_ROOM_113;
+		player.y = START_Y_ROOM_113;
+		player.facing = FACING_SOUTH;
+
+	} else if (previous_room == 118) {          /* Player comes from castle */
+		player_first_walk(START_X_ROOM_118 - 30, START_Y_ROOM_118, FACING_EAST,
+			START_X_ROOM_118, START_Y_ROOM_118, FACING_EAST, true);
+
+	} else if (previous_room != KERNEL_RESTORING_GAME) {   /* Player could have used signet ring */
+
+		if (global[player_persona] == PLAYER_IS_PID) {
+
+			if (global[guard_pid_status] == GUARD_IS_UNHEALED) {
+				player.x = START_X_ROOM_118;
+				player.y = START_Y_ROOM_118;
+				player.facing = FACING_EAST;
+
+			} else {
+
+				player.x = START_X_ROOM_120;
+				player.y = START_Y_ROOM_120;
+				player.facing = FACING_WEST;
+
+				if (global[guard_pid_status] == GUARD_NEVER_HEALED) {
+					player.commands_allowed = false;
+					conv_run(CONV_GUARD_PID);
+					conv_export_value(player_has(shifter_ring));
+					if (global[llanie_status] == IS_SAVED) {
+						conv_export_value(1);
+					} else {
+						conv_export_value(0);
+					}
+
+				} else if (global[guard_pid_status] == GUARD_IS_HEALED) {
+					player.commands_allowed = false;
+					conv_run(CONV_GUARD_HEAL);
+				}
+			}
+
+		} else {
+			player.x = START_X_ROOM_118;
+			player.y = START_Y_ROOM_118;
+			player.facing = FACING_EAST;
+		}
+	}
+
+	global[invoked_from_111] = false;
+
+	/* kernel_timing_trigger (10, MUSIC); */
+
+	section_1_music();
+}
+
+static void handle_animation_guard_king() {
+	int guard_king_reset_frame;
+
+	if (kernel_anim[aa[4]].frame != local->guard_king_frame) {
+		local->guard_king_frame = kernel_anim[aa[4]].frame;
+		guard_king_reset_frame = -1;
+
+		switch (local->guard_king_frame) {
+
+		case 1:   /* end of freeze */
+		case 11:  /* end of talk   */
+		case 17:  /* end of talk   */
+
+			switch (local->guard_king_action) {
+
+			case CONV7_SHUT_UP:
+				guard_king_reset_frame = 0;
+				break;
+
+			case CONV7_TALK:
+				guard_king_reset_frame = 11;   /* talk (new node) */
+				break;
+
+			}
+			break;
+
+		case 12: /* end of coming to talk */
+		case 13: /* end of talk frame 1   */
+		case 14: /* end of talk frame 2   */
+		case 15: /* end of talk frame 3   */
+
+			guard_king_reset_frame = imath_random(12, 14);
+			++local->guard_king_talk_count;
+			if (local->guard_king_talk_count > 13) {
+				local->guard_king_action = CONV7_SHUT_UP;
+				local->guard_king_talk_count = 0;
+				guard_king_reset_frame = 15;
+			}
+			break;
+		}
+
+		if (guard_king_reset_frame >= 0) {
+			kernel_reset_animation(aa[4], guard_king_reset_frame);
+			local->guard_king_frame = guard_king_reset_frame;
+		}
+	}
+}
+
+static void handle_animation_guard_pid() {
+	int guard_pid_reset_frame;
+
+	if (kernel_anim[aa[5]].frame != local->guard_pid_frame) {
+		local->guard_pid_frame = kernel_anim[aa[5]].frame;
+		guard_pid_reset_frame = -1;
+
+		switch (local->guard_pid_frame) {
+
+		case 29:
+			global_speech_go(7); /* hurl */
+			break;
+
+		case 36:
+			global_speech_go(6); /* stab */
+			break;
+
+		case 1:   /* end of freeze              */
+		case 15:  /* end of point               */
+		case 53:  /* end of talk (move hand up) */
+			switch (local->guard_pid_action) {
+			case CONV10_SHUT_UP:
+				guard_pid_reset_frame = 0;  /* shut up */
+				break;
+
+			case CONV10_KILL:
+				player.commands_allowed = false;
+				guard_pid_reset_frame = 18; /* run Pid through */
+				break;
+
+			case CONV10_TALK:
+				if (imath_random(1, 2) == 1) {
+					guard_pid_reset_frame = 45;   /* talk (move hand up) */
+				} else {
+					guard_pid_reset_frame = 0;   /* shut up */
+				}
+
+				if (local->guard_pid_action != CONV10_KILL) {
+					local->guard_pid_action = CONV10_SHUT_UP;
+				}
+				break;
+
+			case CONV10_POINT:
+				guard_pid_reset_frame = 3;   /* talk (actually point) */
+				if (local->guard_pid_action != CONV10_KILL) {
+					local->guard_pid_action = CONV10_SHUT_UP;
+				}
+				break;
+			}
+			break;
+
+		case 47:  /* end of coming to talk */
+		case 48:  /* end of talk 1         */
+		case 49:  /* end of talk 2         */
+			guard_pid_reset_frame = imath_random(47, 48);
+			++local->guard_pid_talk_count;
+			if (local->guard_pid_talk_count > 8) {
+				if (local->guard_pid_action != CONV10_KILL) {
+					local->guard_pid_action = CONV10_SHUT_UP;
+				}
+				local->guard_pid_talk_count = 0;
+				guard_pid_reset_frame = 50;
+			}
+			break;
+
+		case 28: /* thing getting shoved thru body */
+			player.walker_visible = false;
+			kernel_synch(KERNEL_PLAYER, 0, KERNEL_ANIM, aa[5]);
+			break;
+
+		case 45:  /* end of running Pid through */
+			global[reset_conv] = 10;
+			/* conv_reset (CONV_GUARD_PID); */
+			if (game.difficulty == EASY_MODE) {
+				text_show(11045);
+			} else {
+				text_show(45);
+			}
+			global[no_talk_to_guard] = false;
+			kernel.force_restart = true;
+			break;
+		}
+
+		if (guard_pid_reset_frame >= 0) {
+			kernel_reset_animation(aa[5], guard_pid_reset_frame);
+			local->guard_pid_frame = guard_pid_reset_frame;
+		}
+	}
+}
+
+static void room_110_get_random_faerie() {
+	int random;
+
+	local->last_action[0] = local->new_action[0];
+	random = imath_random(RANDOM_LOW_NUMBER, RANDOM_HIGH_NUMBER);
+	if (random < RANDOM_SIT_ALLOWED) {
+		local->new_action[0] = CONV8_SIT;
+		local->good_number[0] = true;
+	} else {
+		if (local->last_action[0] != CONV8_LOOK) {
+			local->new_action[0] = CONV8_LOOK;
+			local->good_number[0] = true;
+		}
+	}
+}
+
+static void room_110_get_random_slathan() {
+	int random;
+
+	local->last_action[1] = local->new_action[1];
+	random = imath_random(RANDOM_SLATHAN_LOW_NUMBER, RANDOM_SLATHAN_HIGH_NUMBER);
+	if (random <= RANDOM_SLATHAN_SIT_ALLOWED) {
+		local->new_action[1] = CONV14_SIT;
+		local->good_number[1] = true;
+	} else {
+		if (random > RANDOM_SLATHAN_SIT_ALLOWED && random <= RANDOM_SLATHAN_TOSS_ALLOWED) {
+			if (local->last_action[1] != CONV14_ROCK_TOSS && local->last_action[1] != CONV14_TOSS_AGAIN) {
+				local->new_action[1] = CONV14_ROCK_TOSS;
+			} else {
+				local->new_action[1] = CONV14_TOSS_AGAIN;
+			}
+			local->good_number[1] = true;
+		} else {
+			if (local->last_action[1] != CONV14_LOOK_AROUND) {
+				local->new_action[1] = CONV14_LOOK_AROUND;
+				local->good_number[1] = true;
+			}
+		}
+	}
+}
+
+/**
+ * Get random times for anyone and everyone who needs to time a move
+ */
+static void room_110_random_times(int index) {
+	int random = 0;
+
+	random = imath_random(RANDOM_LOWEST_NUMBER, RANDOM_HIGHEST_NUMBER);
+	switch (random) {
+
+	case RANDOM_LOWEST_NUMBER:
+		local->switch_direction[index] = TIME_TO_MOVE_1;
+		break;
+
+	case 2:
+		local->switch_direction[index] = TIME_TO_MOVE_2;
+		break;
+
+	case 3:
+		local->switch_direction[index] = TIME_TO_MOVE_3;
+		break;
+
+	case 4:
+		local->switch_direction[index] = TIME_TO_MOVE_4;
+		break;
+
+	case 5:
+		local->switch_direction[index] = TIME_TO_MOVE_5;
+		break;
+
+	case RANDOM_HIGHEST_NUMBER:
+		local->switch_direction[index] = TIME_TO_MOVE_6;
+		break;
+	}
+}
+
+/**
+ * Hold head turn for slathan
+ */
+static void room_110_hold_head_turn(int16 reset_frame[6]) {
+	local->diff[1] = kernel.clock - local->last_clock[1];
+	if ((local->diff[1] >= 0) && (local->diff[1] <= local->switch_direction[1])) {
+		local->slathan_timer += local->diff[1];
+	} else {
+		local->slathan_timer++;
+	}
+	local->last_clock[1] = kernel.clock;
+	if (local->slathan_timer >= local->switch_direction[1]) {
+		local->slathan_timer = 0;
+		local->switch_direction[1] = 0;
+		if (local->character_frame[1] == 37) {
+			reset_frame[1] = 37;
+		} else {
+			reset_frame[1] = 40;
+		}
+	} else {
+		if (local->character_frame[1] == 37) {
+			reset_frame[1] = 36;
+		} else {
+			reset_frame[1] = 39;
+		}
+	}
+}
+
+/**
+ * Make soptus switch directions standing while merchant talks to king
+ */
+static void room_110_soptus_stand(int16 reset_frame[6]) {
+	local->diff[2] = kernel.clock - local->last_clock[2];
+	if ((local->diff[2] >= 0) && (local->diff[2] <= local->switch_direction[2])) {
+		local->soptus_timer += local->diff[2];
+	} else {
+		local->soptus_timer++;
+	}
+	local->last_clock[2] = kernel.clock;
+	if (local->soptus_timer >= local->switch_direction[2]) {
+		local->switch_direction[2] = 0;
+		local->soptus_timer = 0;
+		if (local->character_frame[2] == 2) {
+			reset_frame[2] = 14;
+		} else {
+			reset_frame[2] = 0;
+		}
+	} else {
+		if (local->character_frame[2] == 2) {
+			reset_frame[2] = 0;
+		} else {
+			reset_frame[2] = 14;
+		}
+	}
+}
+
+static void room_110_soptus_noone_talking() {
+	int random;
+
+	local->last_action[2] = local->new_action[2];
+	random = imath_random(RANDOM_SOPTUS_LOW, RANDOM_SOPTUS_HIGH);
+	if (random <= RANDOM_SOPTUS_STAND_FACE_IN) {
+		local->new_action[2] = CONV9_STAND_FACE_IN;
+		local->good_number[2] = true;
+	} else {
+		if (random > RANDOM_SOPTUS_STAND_FACE_IN && random <= RANDOM_SOPTUS_SHOW_FACE_HIGH) {
+			local->new_action[2] = CONV9_STAND_SHOW_FACE;
+			local->good_number[2] = true;
+		} else {
+			if (random > RANDOM_SOPTUS_SHOW_FACE_HIGH && random <= RANDOM_SOPTUS_REACH_HIGH) {
+				if (local->last_action[2] != CONV9_REACH) {
+					local->new_action[2] = CONV9_REACH;
+					local->good_number[2] = true;
+				}
+			} else {
+				if (random > RANDOM_SOPTUS_REACH_HIGH && random <= RANDOM_SOPTUS_PEER_HIGH) {
+					if (local->last_action[2] != CONV9_PEER) {
+						local->new_action[2] = CONV9_PEER;
+						local->good_number[2] = true;
+					}
+				} else {
+					if (local->last_action[2] != CONV9_JUST_SAY_NO) {
+						local->new_action[2] = CONV9_JUST_SAY_NO;
+						local->good_number[2] = true;
+					}
+				}
+			}
+		}
+	}
+}
+
+static void room_110_soptus_anyone_talking(int16 reset_frame[6]) {
+	if (local->merchant_talking) {
+		room_110_random_times(2);
+		room_110_soptus_stand(reset_frame);
+	} else {
+		if (local->soptus_talking) {
+			if ((local->new_action[2] == CONV9_TURN_BOW_TALK) ||
+				(local->new_action[2] == CONV9_TURN_BOW)) {
+				reset_frame[2] = 37;
+			} else {
+				local->good_number[2] = false;
+				while (!local->good_number[2]) {
+					room_110_soptus_noone_talking();
+				}
+				if (local->new_action[2] == CONV9_STAND_FACE_IN) {
+					reset_frame[2] = 0;
+				}
+				if (local->new_action[2] == CONV9_STAND_SHOW_FACE) {
+					reset_frame[2] = 14;
+				}
+				if (local->new_action[2] == CONV9_REACH) {
+					reset_frame[2] = 2;
+				}
+				if (local->new_action[2] == CONV9_PEER) {
+					reset_frame[2] = 33;
+				}
+				if (local->new_action[2] == CONV9_JUST_SAY_NO) {
+					reset_frame[2] = 16;
+				}
+			}
+		}
+	}
+}
+
+/**
+ * Random moves for merchant while soptus talking to king
+ */
+static void room_110_merchant_random_moves() {
+	int random;
+
+	random = imath_random(RANDOM_MERCHANT_LOW, RANDOM_MERCHANT_HIGH);
+	if (random <= RANDOM_MERCHANT_STAND) {
+		local->new_action[3] = CONV6_STAND;
+	} else {
+		if (random > RANDOM_MERCHANT_STAND && random <= RANDOM_MERCHANT_BEND_OVER) {
+			if (local->last_action[3] != CONV6_BEND_OVER) {
+				local->new_action[3] = CONV6_BEND_OVER;
+			}
+		} else {
+			if (random > RANDOM_MERCHANT_BEND_OVER && random <= RANDOM_MERCHANT_CLEAN_COUNTER_1) {
+				local->new_action[3] = CONV6_CLEAN_COUNTER_1;
+			} else {
+				if (random > RANDOM_MERCHANT_REACH && random <= RANDOM_MERCHANT_CLEAN_COUNTER_2) {
+					local->new_action[3] = CONV6_CLEAN_COUNTER_2;
+				} else {
+					if (random > RANDOM_MERCHANT_FOLD_ARMS && random <= RANDOM_MERCHANT_TURN_AWAY) {
+						if (local->last_action[3] != CONV6_TURN_AWAY) {
+							local->new_action[3] = CONV6_TURN_AWAY;
+						}
+					} else {
+						if (random > RANDOM_MERCHANT_TURN_AWAY && random <= RANDOM_MERCHANT_HIGH) {
+							if (local->last_action[3] != CONV6_HAND_ON_CHIN) {
+								local->new_action[3] = CONV6_HAND_ON_CHIN;
+							}
+						} else {
+							local->new_action[3] = CONV6_STAND;
+						}
+					}
+				}
+			}
+		}
+	}                    /* gotta love them braces! */
+}
+
+static void room_110_merchant_noone_talking() {
+	int random;
+
+	random = imath_random(RANDOM_MERCHANT_LOW, RANDOM_MERCHANT_HIGH);
+	if (random <= RANDOM_MERCHANT_STAND) {
+		local->new_action[3] = CONV6_STAND;
+		local->good_number[3] = true;
+	}
+	if (random > RANDOM_MERCHANT_STAND && random <= RANDOM_MERCHANT_BEND_OVER) {
+		if (local->last_action[3] != CONV6_BEND_OVER) {
+			local->new_action[3] = CONV6_BEND_OVER;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_BEND_OVER && random <= RANDOM_MERCHANT_CLEAN_COUNTER_1) {
+		local->new_action[3] = CONV6_CLEAN_COUNTER_1;
+		local->good_number[3] = true;
+	}
+	if (random > RANDOM_MERCHANT_CLEAN_COUNTER_1 && random <= RANDOM_MERCHANT_REACH) {
+		if (local->last_action[3] != CONV6_REACH) {
+			local->new_action[3] = CONV6_REACH;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_REACH && random <= RANDOM_MERCHANT_CLEAN_COUNTER_2) {
+		local->new_action[3] = CONV6_CLEAN_COUNTER_2;
+		local->good_number[3] = true;
+	}
+	if (random > RANDOM_MERCHANT_CLEAN_COUNTER_2 && random <= RANDOM_MERCHANT_SHRUG) {
+		if (local->last_action[3] != CONV6_SHRUG) {
+			local->new_action[3] = CONV6_SHRUG;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_SHRUG && random <= RANDOM_MERCHANT_JUST_SAY_NO) {
+		if (local->last_action[3] != CONV6_JUST_SAY_NO) {
+			local->new_action[3] = CONV6_JUST_SAY_NO;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_JUST_SAY_NO && random <= RANDOM_MERCHANT_FOLD_ARMS) {
+		if (local->last_action[3] != CONV6_FOLD_ARMS) {
+			local->new_action[3] = CONV6_FOLD_ARMS;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_FOLD_ARMS && random <= RANDOM_MERCHANT_TURN_AWAY) {
+		if (local->last_action[3] != CONV6_TURN_AWAY) {
+			local->new_action[3] = CONV6_TURN_AWAY;
+			local->good_number[3] = true;
+		}
+	}
+	if (random > RANDOM_MERCHANT_TURN_AWAY && random <= RANDOM_MERCHANT_HIGH) {
+		if (local->last_action[3] != CONV6_HAND_ON_CHIN) {
+			local->new_action[3] = CONV6_HAND_ON_CHIN;
+			local->good_number[3] = true;
+		}
+	}
+}
+
+static void room_110_daemon() {
+	int16 reset_frame[6];
+	int random;
+	long dif;
+
+	if (local->anim_4_running) {
+		handle_animation_guard_king();
+	}
+
+	if (local->anim_5_running) {
+		handle_animation_guard_pid();
+	}
+
+	local->merchant_talking = (conv_control.running == CONV_MERCHANT);
+	local->soptus_talking = (conv_control.running == CONV_SOPTUS);
+
+	/* Control faerie conversation and animation */
+
+	if (local->anim_0_running) {
+		if (kernel_anim[aa[0]].frame != local->character_frame[0]) {
+			local->character_frame[0] = kernel_anim[aa[0]].frame;
+			reset_frame[0] = -1;
+
+			if (local->change_action[0] > 0) {
+				local->new_action[0] = local->change_action[0];
+			}
+
+			switch (local->character_frame[0]) {
+			case 2:
+				/* Has finished sitting */
+				if (local->new_action[0] == CONV8_SIT) {
+					local->good_number[0] = false;
+					while (!local->good_number[0]) {
+						room_110_get_random_faerie();
+					}
+				}
+				if (local->new_action[0] == CONV8_SIT) {
+					reset_frame[0] = 0;
+				}
+				if (local->new_action[0] == CONV8_POINT) {
+					reset_frame[0] = 8;
+				}
+				if (local->new_action[0] == CONV8_SHRUG) {
+					reset_frame[0] = 18;
+				}
+				if (local->new_action[0] == CONV8_SCRATCH) {
+					reset_frame[0] = 31;
+				}
+				break;
+
+			case 8:
+				/* Has finished looking */
+				if (local->new_action[0] == CONV8_LOOK) {
+					local->good_number[0] = false;
+					while (!local->good_number[0]) {
+						room_110_get_random_faerie();
+					}
+				}
+				if (local->new_action[0] == CONV8_SIT) {
+					reset_frame[0] = 0;
+				}
+				if (local->new_action[0] == CONV8_LOOK) {
+					reset_frame[0] = 2;
+				}
+				if (local->new_action[0] == CONV8_SHRUG) {
+					reset_frame[0] = 18;
+				}
+				if (local->new_action[0] == CONV8_SCRATCH) {
+					reset_frame[0] = 31;
+				}
+				break;
+
+			case 18:	/* Has finished pointing */
+			case 31:	/* Has finished shrugging */
+			case 50:	/* Has finished scratching */
+				local->change_action[0] = 0;
+				local->good_number[0] = false;
+				while (!local->good_number[0]) {
+					room_110_get_random_faerie();
+				}
+				if (local->new_action[0] == CONV8_SIT) {
+					reset_frame[0] = 0;
+				}
+				if (local->new_action[0] == CONV8_LOOK) {
+					reset_frame[0] = 2;
+				}
+				break;
+			}
+			if (reset_frame[0] >= 0) {
+				if (reset_frame[0] != kernel_anim[aa[0]].frame) {
+					kernel_reset_animation(aa[0], reset_frame[0]);
+					local->character_frame[0] = reset_frame[0];
+				}
+			}
+		}
+	}
+
+	/* Control slathan (shapechanger) conversation and animation */
+
+	if (local->anim_1_running) {
+		if (kernel_anim[aa[1]].frame != local->character_frame[1]) {
+			local->character_frame[1] = kernel_anim[aa[1]].frame;
+			reset_frame[1] = -1;
+
+			if (local->change_action[1] > 0) {
+				local->new_action[1] = local->change_action[1];
+				local->change_action[1] = 0;
+			}
+
+			switch (local->character_frame[1]) {
+			case 10:
+				/* Has almost finished tossing determine whether to toss again */
+				/* or finish tossing.                                          */
+				if ((local->new_action[1] == CONV14_ROCK_TOSS) ||
+					(local->new_action[1] == CONV14_TOSS_AGAIN)) {
+					random = imath_random(RANDOM_LOW_NUMBER, RANDOM_END_NUMBER);
+					if (random == RANDOM_CHOICE) {
+						local->good_number[1] = false;
+						while (!local->good_number[1]) {
+							room_110_get_random_slathan();
+						}
+						if (local->new_action[1] == CONV14_TOSS_AGAIN) {
+							reset_frame[1] = 1;
+						}
+					} else {
+						local->new_action[1] = CONV14_TOSS_AGAIN;
+						reset_frame[1] = 1;
+					}
+				}
+				break;
+
+			case 11:
+				/* Has finished tossing */
+				if (local->new_action[1] == CONV14_SIT) {
+					reset_frame[1] = 43;
+				}
+				if (local->new_action[1] == CONV14_LOOK_AROUND) {
+					reset_frame[1] = 33;
+				}
+				if (local->new_action[1] == CONV14_TALK) {
+					reset_frame[1] = 11;
+				}
+				if (local->new_action[1] == CONV14_POINT) {
+					reset_frame[1] = 14;
+				}
+				if ((local->new_action[1] == CONV14_NOD) ||
+					(local->new_action[1] == CONV14_NOD_TALK)) {
+					reset_frame[1] = 28;
+				}
+				break;
+
+			case 12:
+			case 13:
+			case 14:
+				/* End of three talking frames */
+				reset_frame[1] = imath_random(11, 13);  /* between 3 talking frames */
+				++local->slathan_talk_count;                    /* run through so many talk cycles */
+
+				if (local->slathan_talk_count > local->how_long_to_talk) {
+					local->slathan_talk_count = 0;
+					local->good_number[1] = false;
+					while (!local->good_number[1]) {
+						room_110_get_random_slathan();
+					}
+					if (local->new_action[1] == CONV14_SIT) {
+						reset_frame[1] = 43;
+					}
+					if (local->new_action[1] == CONV14_LOOK_AROUND) {
+						reset_frame[1] = 33;
+					}
+					if (local->new_action[1] == CONV14_ROCK_TOSS) {
+						reset_frame[1] = 0;
+					}
+				}
+				break;
+
+			case 28:
+				/* Has finished pointing */
+				local->new_action[1] = CONV14_SIT;
+				reset_frame[1] = 43;
+				break;
+
+			case 33:
+				/* Has finished nodding */
+				if (local->new_action[1] == CONV14_NOD) {
+					local->good_number[1] = false;
+					while (!local->good_number[1]) {
+						room_110_get_random_slathan();
+					}
+				}
+				if (local->new_action[1] == CONV14_ROCK_TOSS) {
+					reset_frame[1] = 0;
+				}
+				if (local->new_action[1] == CONV14_LOOK_AROUND) {
+					reset_frame[1] = 33;
+				}
+				if (local->new_action[1] == CONV14_SIT) {
+					reset_frame[1] = 43;
+				}
+				if (local->new_action[1] == CONV14_NOD_TALK) {
+					reset_frame[1] = 11;
+				}
+				if (local->new_action[1] == CONV14_TALK) {
+					reset_frame[1] = 11;
+				}
+				break;
+
+			case 37:
+			case 40:
+				/* Hold head turns for a random amount of time */
+				if (local->new_action[1] == CONV14_POINT) {
+					reset_frame[1] = 14;
+				}
+				if (local->new_action[1] == CONV14_SIT) {
+					reset_frame[1] = 43;
+				}
+				if ((local->new_action[1] == CONV14_NOD) ||
+					(local->new_action[1] == CONV14_NOD_TALK)) {
+					reset_frame[1] = 28;
+				}
+				if (local->new_action[1] == CONV14_TALK) {
+					reset_frame[1] = 11;
+				}
+				if (local->new_action[1] == CONV14_LOOK_AROUND) {
+					room_110_random_times(1);
+					room_110_hold_head_turn(reset_frame);
+				}
+				break;
+
+			case 43:
+				/* Has finished look around */
+				if (local->new_action[1] != CONV14_SIT) {
+					if (local->new_action[1] == CONV14_LOOK_AROUND) {
+						local->good_number[1] = false;
+						while (!local->good_number[1]) {
+							room_110_get_random_slathan();
+						}
+					}
+					if (local->new_action[1] == CONV14_ROCK_TOSS) {
+						reset_frame[1] = 0;
+					}
+					if (local->new_action[1] == CONV14_POINT) {
+						reset_frame[1] = 14;
+					}
+					if (local->new_action[1] == CONV14_SIT) {
+						reset_frame[1] = 43;
+					}
+					if ((local->new_action[1] == CONV14_NOD) ||
+						(local->new_action[1] == CONV14_NOD_TALK)) {
+						reset_frame[1] = 28;
+					}
+					if (local->new_action[1] == CONV14_TALK) {
+						reset_frame[1] = 11;
+					}
+				}
+				break;
+
+			case 45:
+				/* Has finished sit */
+				if (local->new_action[1] == CONV14_SIT) {
+					local->good_number[1] = false;
+					while (!local->good_number[1]) {
+						room_110_get_random_slathan();
+					}
+				}
+
+				if (local->new_action[1] == CONV14_ROCK_TOSS) {
+					reset_frame[1] = 0;
+				}
+				if (local->new_action[1] == CONV14_POINT) {
+					reset_frame[1] = 14;
+				}
+				if (local->new_action[1] == CONV14_SIT) {
+					reset_frame[1] = 43;
+				}
+				if (local->new_action[1] == CONV14_TALK) {
+					reset_frame[1] = 11;
+				}
+				if ((local->new_action[1] == CONV14_NOD) ||
+					(local->new_action[1] == CONV14_NOD_TALK)) {
+					reset_frame[1] = 28;
+				}
+				if (local->new_action[1] == CONV14_LOOK_AROUND) {
+					reset_frame[1] = 33;
+				}
+				break;
+			}
+			if (reset_frame[1] >= 0) {
+				if (reset_frame[1] != kernel_anim[aa[1]].frame) {
+					kernel_reset_animation(aa[1], reset_frame[1]);
+					local->character_frame[1] = reset_frame[1];
+				}
+			}
+		}
+	}
+
+	/* Control soptus conversation and animation */
 
-void room_110_init() {
+	if (local->anim_2_running) {
+		if (kernel_anim[aa[2]].frame != local->character_frame[2]) {
+			local->character_frame[2] = kernel_anim[aa[2]].frame;
+			reset_frame[2] = -1;
 
+			if (local->change_action[2] > 0) {
+				local->new_action[2] = local->change_action[2];
+				local->change_action[2] = 0;
+			}
+
+			switch (local->character_frame[2]) {
+			case 2:
+			case 16:
+				/* end standing facing in */
+				if (local->merchant_talking || local->soptus_talking) {
+					room_110_soptus_anyone_talking(reset_frame);
+				} else {
+					local->good_number[2] = false;
+					while (!local->good_number[2]) {
+						room_110_soptus_noone_talking();
+					}
+					if ((local->new_action[2] == CONV9_STAND_FACE_IN) ||
+						(local->new_action[2] == CONV9_STAND_SHOW_FACE)) {
+						room_110_random_times(2);
+						room_110_soptus_stand(reset_frame);
+					}
+					if (local->new_action[2] == CONV9_REACH) {
+						reset_frame[2] = 2;
+					}
+					if (local->new_action[2] == CONV9_JUST_SAY_NO) {
+						reset_frame[2] = 16;
+					}
+					if (local->new_action[2] == CONV9_PEER) {
+						reset_frame[2] = 33;
+					}
+				}
+				break;
+
+			case 14:
+				/* end of reaching in */
+				if (local->merchant_talking || local->soptus_talking) {
+					room_110_soptus_anyone_talking(reset_frame);
+				} else {
+					local->good_number[2] = false;
+					while (!local->good_number[2]) {
+						room_110_soptus_noone_talking();
+					}
+					if (local->new_action[2] == CONV9_STAND_FACE_IN) {
+						reset_frame[2] = 0;
+					}
+					if (local->new_action[2] == CONV9_STAND_SHOW_FACE) {
+						reset_frame[2] = 14;
+					}
+					if (local->new_action[2] == CONV9_JUST_SAY_NO) {
+						reset_frame[2] = 16;
+					}
+					if (local->new_action[2] == CONV9_PEER) {
+						reset_frame[2] = 33;
+					}
+				}
+				break;
+
+			case 33:
+				/* end of just say no */
+				if (local->merchant_talking || local->soptus_talking) {
+					room_110_soptus_anyone_talking(reset_frame);
+				} else {
+					local->good_number[2] = false;
+					while (!local->good_number[2]) {
+						room_110_soptus_noone_talking();
+					}
+					if (local->new_action[2] == CONV9_STAND_FACE_IN) {
+						reset_frame[2] = 0;
+					}
+					if (local->new_action[2] == CONV9_STAND_SHOW_FACE) {
+						reset_frame[2] = 14;
+					}
+					if (local->new_action[2] == CONV9_REACH) {
+						reset_frame[2] = 2;
+					}
+					if (local->new_action[2] == CONV9_PEER) {
+						reset_frame[2] = 33;
+					}
+				}
+				break;
+
+			case 37:
+				/* end of peering */
+				if (local->merchant_talking || local->soptus_talking) {
+					room_110_soptus_anyone_talking(reset_frame);
+				} else {
+					local->good_number[2] = false;
+					while (!local->good_number[2]) {
+						room_110_soptus_noone_talking();
+					}
+					if (local->new_action[2] == CONV9_STAND_FACE_IN) {
+						reset_frame[2] = 0;
+					}
+					if (local->new_action[2] == CONV9_STAND_SHOW_FACE) {
+						reset_frame[2] = 14;
+					}
+					if (local->new_action[2] == CONV9_JUST_SAY_NO) {
+						reset_frame[2] = 16;
+					}
+					if (local->new_action[2] == CONV9_REACH) {
+						reset_frame[2] = 2;
+					}
+				}
+				break;
+
+			case 52:
+				/* after bowing make him stay in stand position by switching */
+				/* to the turn_bow mode.                                     */
+				if (local->new_action[2] == CONV9_BOW_TURN_TO_MERCHANT) {
+					reset_frame[2] = 68;
+				}
+				break;
+
+			case 53:
+				/* turning to king to talk, keep 52 as main stand position */
+				/* to go into other actions */
+				if (local->new_action[2] == CONV9_LOOK_AT_KING) {
+					reset_frame[2] = 52;
+				}
+				if (local->new_action[2] == CONV9_TURN_BOW) {
+					local->new_action[2] = CONV9_LOOK_AT_KING;
+					reset_frame[2] = 52;
+				}
+				if (local->new_action[2] == CONV9_POINT_TALK) {
+					reset_frame[2] = 59;
+				}
+				if (local->new_action[2] == CONV9_TALK) {
+					reset_frame[2] = 53;
+				}
+				if (local->new_action[2] == CONV9_TALK_TURN_TO_MERCHANT) {
+					reset_frame[2] = 53;
+				}
+				if (local->new_action[2] == CONV9_BOW_TURN_TO_MERCHANT) {
+					reset_frame[2] = 42;
+				}
+				if (local->new_action[2] == CONV9_TURN_BOW_TALK) {
+					reset_frame[2] = 52;
+					local->new_action[2] = CONV9_LOOK_AT_KING;
+					conv_release();
+				}
+
+				break;
+
+			case 54:
+			case 55:
+			case 56:
+			case 57:
+			case 58:
+			case 59:
+				/* randomly pick talking sequences for specified amounts of time.*/
+				reset_frame[2] = imath_random(53, 58);   /* between talking frames */
+				++local->soptus_talk_count;               /* run through so many talk cycles */
+
+				if (local->soptus_talk_count > local->how_long_to_talk) {
+					local->soptus_talk_count = 0;
+					if (local->new_action[2] == CONV9_TALK_TURN_TO_MERCHANT) {
+						reset_frame[2] = 68;
+					} else {
+						if (local->new_action[2] == CONV9_BOW_TURN_TO_MERCHANT) {
+							reset_frame[2] = 42;
+						} else {
+							local->new_action[2] = CONV9_LOOK_AT_KING;
+							reset_frame[2] = 52;
+						}
+					}
+				} else {
+					if (local->new_action[2] == CONV9_TALK_TURN_TO_MERCHANT) {
+						reset_frame[2] = 68;
+					} else {
+						if (local->new_action[2] == CONV9_BOW_TURN_TO_MERCHANT) {
+							reset_frame[2] = 42;
+						}
+					}
+				}
+				break;
+
+			case 68:
+				/* end of pointing, must talk */
+				if (local->new_action[2] == CONV9_POINT_TALK) {
+					local->new_action[2] = CONV9_TALK;
+					reset_frame[2] = 53;
+				}
+				break;
+
+			case 74:
+				/* end of turn to face merchant, must stand facing in */
+
+				/* if ((local->new_action[2] == CONV9_BOW_TURN_TO_MERCHANT) || */
+					/* (local->new_action[2] == CONV9_TALK_TURN_TO_MERCHANT)) { */
+				local->new_action[2] = CONV9_STAND_FACE_IN;
+				reset_frame[2] = 0;
+				/* } */
+				break;
+
+			}
+
+			if (reset_frame[2] >= 0) {
+				if (reset_frame[2] != kernel_anim[aa[2]].frame) {
+					kernel_reset_animation(aa[2], reset_frame[2]);
+					local->character_frame[2] = reset_frame[2];
+				}
+			}
+		}
+	}
+
+	/* Control merchant conversation and animation */
+
+	if (local->anim_3_running) {
+		if (kernel_anim[aa[3]].frame != local->character_frame[3]) {
+			local->character_frame[3] = kernel_anim[aa[3]].frame;
+			reset_frame[3] = -1;
+
+			if (local->change_action[3] > 0) {
+				local->new_action[3] = local->change_action[3];
+				local->change_action[3] = 0;
+			}
+
+			switch (local->character_frame[3]) {
+			case  3:
+			case 20:
+			case 32:
+				if (local->soptus_talking) {
+					if (local->new_action[3] != CONV6_REACH) {
+						room_110_merchant_random_moves();
+					}
+				} else {
+					if (!local->merchant_talking) {
+						local->good_number[3] = false;
+						while (!local->good_number[3]) {
+							room_110_merchant_noone_talking();
+						}
+					}
+				}
+				if (local->new_action[3] == CONV6_STAND) {
+					reset_frame[3] = 0;
+				}
+
+				if (local->new_action[3] == CONV6_CLEAN_COUNTER_1) {
+					random = imath_random(RANDOM_MERCHANT_LOW, RANDOM_MERCHANT_HIGH_NUMBER);
+					local->time += 1;
+					if (local->time <= RANDOM_MERCHANT_HIGH_NUMBER) {
+						reset_frame[3] = 14;
+					} else {
+						reset_frame[3] = 0;
+						local->new_action[3] = CONV6_STAND;
+						local->time = 0;
+					}
+				}
+
+				if (local->new_action[3] == CONV6_CLEAN_COUNTER_2) {
+					random = imath_random(RANDOM_MERCHANT_LOW, RANDOM_MERCHANT_HIGH_NUMBER);
+					local->time += 1;
+					if (local->time <= RANDOM_MERCHANT_HIGH_NUMBER) {
+						reset_frame[3] = 29;
+					} else {
+						reset_frame[3] = 0;
+						local->time = 0;
+						local->new_action[3] = CONV6_STAND;
+					}
+				}
+				if (local->new_action[3] == CONV6_REACH) {
+					reset_frame[3] = 20;
+				}
+				if (local->new_action[3] == CONV6_SHRUG) {
+					reset_frame[3] = 32;
+				}
+				if (local->new_action[3] == CONV6_JUST_SAY_NO) {
+					reset_frame[3] = 47;
+				}
+				if (local->new_action[3] == CONV6_FOLD_ARMS) {
+					reset_frame[3] = 60;
+				}
+				if (local->new_action[3] == CONV6_TURN_AWAY) {
+					reset_frame[3] = 69;
+				}
+				if (local->new_action[3] == CONV6_HAND_ON_CHIN) {
+					reset_frame[3] = 74;
+				}
+				break;
+
+			case 26:
+				if (local->merchant_talking && local->new_action[3] == CONV6_REACH) {
+					if (!player_has(fruit)) {
+						local->new_action[3] = CONV6_STAND;
+						player.walker_visible = false;
+						seq[fx_reach_fruit] = kernel_seq_pingpong(ss[fx_reach_fruit],
+							true, 8, 0, 0, 2);
+						kernel_seq_range(seq[fx_reach_fruit], 1, 4);
+						kernel_seq_player(seq[fx_reach_fruit], true);
+						kernel_seq_trigger(seq[fx_reach_fruit],
+							KERNEL_TRIGGER_SPRITE, 4, ROOM_110_GOT_FRUIT);
+						kernel_seq_trigger(seq[fx_reach_fruit],
+							KERNEL_TRIGGER_EXPIRE, 0, ROOM_110_SHOW_WALKER);
+					}
+				}
+				break;
+
+			case 14:
+			case 29:
+			case 47:
+			case 60:
+			case 69:
+			case 74:
+			case 91:
+				local->last_action[3] = local->new_action[3];
+				local->new_action[3] = CONV6_STAND;
+				reset_frame[3] = 2;
+				break;
+
+			}
+
+
+			if (reset_frame[3] >= 0) {
+				if (reset_frame[3] != kernel_anim[aa[3]].frame) {
+					kernel_reset_animation(aa[3], reset_frame[3]);
+					local->character_frame[3] = reset_frame[3];
+				}
+			}
+		}
+	}
+
+	/* obtaining fruit from the merchant */
+	if (kernel.trigger == ROOM_110_GOT_FRUIT) {
+		/* sound_queue (N_PickUpObject006);*/
+		sound_play(N_TakeObjectSnd);
+		inter_give_to_player(fruit);
+		object_examine(fruit, 807, 0);
+	}
+
+	if (kernel.trigger == ROOM_110_SHOW_WALKER) {
+		kernel_synch(KERNEL_PLAYER, 0, KERNEL_SERIES, seq[fx_reach_fruit]);
+		player.walker_visible = true;
+		conv_release();
+	}
+
+	if (local->activate_timer) {
+		player.commands_allowed = true;
+
+		dif = kernel.clock - local->clock;
+		if ((dif >= 0) && (dif <= 4)) {
+			local->death_timer += dif;
+		} else {
+			local->death_timer += 1;
+		}
+		local->clock = kernel.clock;
+
+		if (local->death_timer >= LENGTH_OF_LIFE) {
+			global[reset_conv_2] = 12;
+			local->guard_pid_action = CONV10_KILL;
+			local->activate_timer = false;
+			player.commands_allowed = false;
+		}
+	}
+
+	if (kernel.trigger == MUSIC) {
+		sound_play(N_WayStationMus);
+	}
+
+	if (local->cut_scene && !player.walking) {
+		local->cut_scene = false;
+		global[dragon_my_scene]--;
+	}
+}
+
+static void handle_conv_guard_king() {
+	int you_trig_flag = false;
+
+	if (kernel.trigger == ROOM_110_YOU_TALK) {
+		local->guard_king_action = CONV7_TALK;
+	}
+
+	if (!you_trig_flag) {
+		conv_you_trigger(ROOM_110_YOU_TALK);
+	} /* if you_trig_flag == true, then a you trigger is called from above, not here. */
+
+	local->guard_king_talk_count = 0;
+}
+
+static void handle_conv_guard_pid() {
+	int you_trig_flag = false;
+
+	if (player_verb == conv010_die_b_b) {
+		local->guard_pid_action = CONV10_KILL;
+		you_trig_flag = true;
+	}
+
+	if (player_verb == conv010_leave_b_b) {
+		conv_me_trigger(ROOM_110_START_WALKING);
+		you_trig_flag = true;
+	}
+
+	if (player_verb == conv010_hold_only) {
+		local->guard_pid_action = CONV10_POINT;
+		you_trig_flag = true;
+	}
+
+	if (player_verb == conv010_fix_b_b) {
+		local->activate_timer = true;
+	}
+
+	if (kernel.trigger == ROOM_110_START_WALKING) {  /* to 120 */
+		player.commands_allowed = false;
+		player_walk(START_X_ROOM_120 + 30, START_Y_ROOM_120, FACING_EAST);
+		player_walk_trigger(ROOM_110_GO_TO_120);
+	}
+
+	if (kernel.trigger == ROOM_110_YOU_TALK) {
+		if (local->guard_pid_action != CONV10_KILL) {
+			local->guard_pid_action = CONV10_TALK;
+		}
+	}
+
+	if (!you_trig_flag) {
+		conv_you_trigger(ROOM_110_YOU_TALK);
+	} /* if you_trig_flag == true, then a you trigger is called from above, not here. */
+
+	local->guard_pid_talk_count = 0;
 }
 
-void room_110_daemon() {
 
+void handle_conv_guard_heal() {
+	if (player_verb == conv012_gash_b_b) {
+		player.x = 100;
+		new_room = 112;
+	}
 }
 
+
+void room_110_check_score() {
+	switch (global[talked_to_status]) {
+
+	case TALKED_TO_NONE:
+		if (local->talking_to == FAERIE) {
+			global[talked_to_status] = TALKED_FAERIE;
+		}
+		if (local->talking_to == SOPTUS) {
+			global[talked_to_status] = TALKED_SOPTUS;
+		}
+		if (local->talking_to == SLATHAN) {
+			global[talked_to_status] = TALKED_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[talked_to_status] = TALKED_MERCHANT;
+		}
+		global[player_score] += 1;
+		break;
+
+	case TALKED_FAERIE:
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS;
+		}
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_MERCHANT;
+		}
+		break;
+
+	case TALKED_SOPTUS:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS;
+		}
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_MERCHANT;
+		}
+		break;
+
+	case TALKED_SLATHAN:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SLATHAN;
+		}
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_MERCHANT:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_MERCHANT;
+		}
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_MERCHANT;
+		}
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_FAERIE_SOPTUS:
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS_MERCHANT;
+		}
+		break;
+
+	case TALKED_FAERIE_SLATHAN:
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_FAERIE_MERCHANT:
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS_MERCHANT;
+		}
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_SOPTUS_SLATHAN:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SOPTUS_SLATHAN;
+		}
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_SLATHAN_MERCHANT:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_FAERIE_SLATHAN_MERCHANT;
+		}
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_SOPTUS_SLATHAN_MERCHANT;
+		}
+		break;
+
+	case TALKED_FAERIE_SOPTUS_SLATHAN:
+		if (local->talking_to == MERCHANT) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_TO_ALL;
+		}
+		break;
+
+	case TALKED_FAERIE_SOPTUS_MERCHANT:
+		if (local->talking_to == SLATHAN) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_TO_ALL;
+		}
+		break;
+
+	case TALKED_FAERIE_SLATHAN_MERCHANT:
+		if (local->talking_to == SOPTUS) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_TO_ALL;
+		}
+		break;
+
+	case TALKED_SOPTUS_SLATHAN_MERCHANT:
+		if (local->talking_to == FAERIE) {
+			global[player_score] += 1;
+			global[talked_to_status] = TALKED_TO_ALL;
+		}
+		break;
+	}
+}
+
+void handle_conv_faerie() {
+	if ((player_verb == conv008_query_wish) ||
+		(player_verb == conv008_query_humans) ||
+		(player_verb == conv008_query_where) ||
+		(player_verb == conv008_banter_only)) {
+
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[0] = CONV8_POINT;
+			break;
+		}
+	}
+	if ((player_verb == conv008_query_respect) ||
+		(player_verb == conv008_query_norespect)) {
+
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[0] = CONV8_SHRUG;
+			break;
+		}
+	}
+	if ((player_verb == conv008_query_why_annoy) ||
+		(player_verb == conv008_query_king)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[0] = CONV8_SCRATCH;
+			break;
+		}
+	}
+}
+
+void handle_conv_slathan() {
+	if (player_verb == conv014_heehee_only) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[1] = CONV14_POINT;
+			break;
+		}
+	}
+
+	if (player_verb == conv014_query_respect) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->how_long_to_talk = TALK_SLATHAN_LONG;
+			local->change_action[1] = CONV14_NOD_TALK;
+			break;
+		}
+	}
+
+	if ((player_verb == conv014_query_wish) ||
+		(player_verb == conv014_query_humans) ||
+		(player_verb == conv014_query_why_annoy)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			if ((player_verb == conv014_query_wish) ||
+				(player_verb == conv014_query_why_annoy)) {
+				local->how_long_to_talk = TALK_SLATHAN_MEDIUM;
+			} else {
+				local->how_long_to_talk = TALK_SLATHAN_LONG;
+			}
+			local->change_action[1] = CONV14_TALK;
+			break;
+		}
+	}
+
+	if (player_verb == conv014_banter_only) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[1] = CONV14_NOD;
+			break;
+		}
+	}
+}
+
+
+void handle_conv_soptus() {
+	/* trigger 1 will not go into effect until conv is released in daemon */
+	if (player_verb == conv009_hello1a_only) {
+		switch (kernel.trigger) {
+		case 0:
+			local->change_action[2] = CONV9_TURN_BOW_TALK;
+			conv_hold();
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->how_long_to_talk = TALK_SOPTUS_MEDIUM;
+			local->change_action[2] = CONV9_TALK;
+			break;
+		}
+	}
+
+	if (player_verb == conv009_hello2a_only) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[2] = CONV9_TURN_BOW;
+			break;
+		}
+	}
+
+	if ((player_verb == conv009_choices_trip) ||
+		(player_verb == conv009_choices_never)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->how_long_to_talk = TALK_SOPTUS_MEDIUM;
+			local->change_action[2] = CONV9_TALK;
+			break;
+		}
+	}
+
+	if (player_verb == conv009_choices_someday) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->how_long_to_talk = TALK_SOPTUS_MEDIUM;
+			local->change_action[2] = CONV9_POINT_TALK;
+			break;
+		}
+	}
+
+	if (player_verb == conv009_exiter_leave) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->how_long_to_talk = TALK_SOPTUS_SHORT;
+			local->change_action[2] = CONV9_TALK_TURN_TO_MERCHANT;
+			break;
+		}
+	}
+}
+
+void handle_conv_merchant() {
+	if (player_verb == conv006_wares_greeting) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[3] = CONV6_CLEAN_COUNTER_1;
+			break;
+		}
+	}
+
+	if (player_verb == conv006_how_only) {
+		global[talked_to_merchant] = true;
+	}
+
+	if (player_verb == conv006_exit_b_b) {
+		conv_hold();
+		local->change_action[3] = CONV6_REACH;
+	}
+
+	if ((player_verb == conv006_choices_chat) ||
+		(player_verb == conv006_how_only)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[3] = CONV6_SHRUG;
+			break;
+		}
+	}
+
+	if ((player_verb == conv006_choices_sorry) ||
+		(player_verb == conv006_wise_only)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[3] = CONV6_FOLD_ARMS;
+			break;
+		}
+	}
+
+	if ((player_verb == conv006_thanks_only)) {
+		switch (kernel.trigger) {
+		case 0:
+			conv_you_trigger(1);
+			break;
+
+		case 1:
+			local->change_action[3] = CONV6_JUST_SAY_NO;
+			break;
+		}
+	}
+}
+
+
 void room_110_pre_parser() {
+	if (kernel.trigger == ROOM_110_GO_TO_120) {
+		player_cancel_command();
+		local->activate_timer = false;
+		global[pre_room] = 110;
+		if (global[dragon_my_scene] < global[dragon_high_scene]) {
+			global[dragon_my_scene]++;
+			new_room = 111;
+			local->cut_scene = true;
+		} else {
+			new_room = 120;
+		}
+	}
+
+	if (!local->activate_timer) {
+		if (player_said_2(walk_through, gate_to_courtyard)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				player.need_to_walk = false;
+				conv_run(CONV_GUARD_CASTLE);
+				player_cancel_command();
+			} else {
+				player.walk_off_edge_to_room = 118;
+			}
+		}
+
+		if (!player_said_2(walk_down, road_to_east) && local->cut_scene) {
+			local->cut_scene = false;
+			global[dragon_my_scene]--;
+		}
+
+		if (player_said_2(walk_down, road_to_east)) {
+			global[pre_room] = 110;
+			if (global[dragon_my_scene] < global[dragon_high_scene]) {
+				if (!local->cut_scene) {
+					global[dragon_my_scene]++;
+				}
+				player.walk_off_edge_to_room = 111;
+				local->cut_scene = true;
 
+			} else if (local->cut_scene) {
+				player.walk_off_edge_to_room = 111;
+
+			} else {
+				player.walk_off_edge_to_room = 120;
+			}
+		}
+	}
+
+	if (player_said_3(heal, doll, guard_captain)) {
+		if (global[player_persona] == PLAYER_IS_PID &&
+			global[guard_pid_status] != GUARD_IS_UNHEALED) {
+			player.commands_allowed = false;
+		}
+	}
+
+	if (local->activate_timer) {
+		if (player_said_2(give, guard_captain)) {
+			text_show(11043);
+			player_cancel_command();
+
+		} else if (player_said_1(take) ||
+			player_said_1(push) ||
+			player_said_1(open) ||
+			player_said_1(put) ||
+			player_said_1(give) ||
+			player_said_1(pull) ||
+			player_said_1(close) ||
+			player_said_1(talk_to) ||
+			player_said_2(invoke, signet_ring) ||
+			player_said_1(throw)) {
+			text_show(11042);
+			player_cancel_command();
+
+		} else if (player.need_to_walk) {
+
+			if (player_said_1(walk_down)) {
+				conv_reset(CONV_GUARD_PID);
+				player.commands_allowed = false;
+				player_walk(START_X_ROOM_120 + 30, START_Y_ROOM_120, FACING_EAST);
+				player_walk_trigger(ROOM_110_GO_TO_120);
+
+			} else if (player_said_3(heal, doll, guard_captain)) {
+				local->activate_timer = false;
+				player.commands_allowed = false;
+
+			} else {
+				local->guard_pid_action = CONV10_KILL;
+				local->activate_timer = false;
+				player.commands_allowed = false;
+				player.need_to_walk = false;
+				player_cancel_command();
+			}
+
+		} else if (player_said_2(look, guard_captain)) {
+			text_show(11038);
+			player_cancel_command();
+		}
+	}
 }
 
-void room_110_parser() {
+static void room_110_parser() {
+	if (kernel.trigger == ROOM_110_GO_TO_120) {
+		global[pre_room] = 110;
+		if (global[dragon_my_scene] < global[dragon_high_scene]) {
+			global[dragon_my_scene]++;
+			new_room = 111;
+			local->cut_scene = true;
+		} else {
+			new_room = 120;
+		}
+		goto handled;
+	}
+
+	if (player.look_around) {
+		if (global[player_persona] == PLAYER_IS_PID) {
+			text_show(11019);
+		} else {
+			text_show(11001);
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_FAERIE) {
+		handle_conv_faerie();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_SLATHAN) {
+		handle_conv_slathan();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_SOPTUS) {
+		handle_conv_soptus();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_MERCHANT) {
+		handle_conv_merchant();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_GUARD) {
+		handle_conv_guard_king();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_GUARD_PID) {
+		handle_conv_guard_pid();
+		goto handled;
+	}
+
+	if (conv_control.running == CONV_GUARD_HEAL) {
+		handle_conv_guard_heal();
+		goto handled;
+	}
+
+	if (player_said_2(jump_down, well)) {
+		if (global[player_persona] == PLAYER_IS_KING) {
+			switch (kernel.trigger) {
+			case 0:
+				player.commands_allowed = false;
+				player.walker_visible = false;
+				seq[fx_king_in_well] = kernel_seq_forward(ss[fx_king_in_well],
+					false, 7, 0, 0, 1);
+				kernel_seq_depth(seq[fx_king_in_well], 3);
+				kernel_synch(KERNEL_SERIES, seq[fx_king_in_well], KERNEL_PLAYER, 0);
+
+				if (speech_system_active && speech_on) {
+					kernel_seq_trigger(seq[fx_king_in_well], KERNEL_TRIGGER_SPRITE, 16, 3);
+				} else {
+					kernel_seq_trigger(seq[fx_king_in_well], KERNEL_TRIGGER_SPRITE, 19, 1);
+				}
+				break;
+
+			case 1:
+				sound_play(N_JumpDownWell);
+				kernel_timing_trigger(FOUR_SECONDS, 2);
+				break;
+
+			case 2:
+				new_room = 113;
+				break;
+
+			case 3:
+				global_speech_go(5);  /* falling */
+				local->speech_playing = 5;
+				kernel_timing_trigger(2, 4);
+				break;
+
+			case 4:
+				if (local->speech_playing == 5) {
+					if (speech_system_active && speech_on) {
+						if (speech_status()) {
+							kernel_timing_trigger(2, 4);
+
+						} else {
+							global_speech_go(2); /* bones */
+							local->speech_playing = 2;
+							kernel_timing_trigger(2, 4);
+						}
+					}
+
+				} else if (local->speech_playing == 2) {
+					if (speech_system_active && speech_on) {
+						if (speech_status()) {
+							kernel_timing_trigger(2, 4);
+
+						} else {
+							new_room = 113;
+						}
+					}
+
+				} else {
+					new_room = 113;
+				}
+				break;
+			}
+
+		} else {
+			switch (kernel.trigger) {
+			case 0:
+				if (!(global[player_score_flags] & SCORE_JUMP_INTO_WELL)) {
+					global[player_score_flags] = global[player_score_flags] | SCORE_JUMP_INTO_WELL;
+					global[player_score] += 5;
+				}
+				player.commands_allowed = false;
+				player.walker_visible = false;
+				seq[fx_pid_in_well] = kernel_seq_forward(ss[fx_pid_in_well],
+					false, 8, 0, 0, 1);
+				kernel_seq_depth(seq[fx_pid_in_well], 3);
+				kernel_synch(KERNEL_SERIES, seq[fx_pid_in_well], KERNEL_PLAYER, 0);
+
+				if (speech_system_active && speech_on && !player_has(magic_belt)) {
+					kernel_seq_trigger(seq[fx_pid_in_well], KERNEL_TRIGGER_SPRITE, 13, 3);
+				} else {
+					kernel_seq_trigger(seq[fx_pid_in_well], KERNEL_TRIGGER_SPRITE, 17, 1);
+				}
+				break;
+
+			case 1:
+				sound_play(N_JumpDownWell);
+				kernel_timing_trigger(FOUR_SECONDS, 2);
+				break;
+
+			case 2:
+				new_room = 113;
+				break;
+
+			case 3:
+				global_speech_go(5);  /* falling */
+				local->speech_playing = 5;
+				kernel_timing_trigger(2, 4);
+				break;
+
+			case 4:
+				if (local->speech_playing == 5) {
+					if (speech_system_active && speech_on) {
+						if (speech_status()) {
+							kernel_timing_trigger(2, 4);
+
+						} else {
+							global_speech_go(2); /* bones */
+							local->speech_playing = 2;
+							kernel_timing_trigger(2, 4);
+						}
+					}
+
+				} else if (local->speech_playing == 2) {
+					if (speech_system_active && speech_on) {
+						if (speech_status()) {
+							kernel_timing_trigger(2, 4);
 
+						} else {
+							new_room = 113;
+						}
+					}
+
+				} else {
+					new_room = 113;
+				}
+				break;
+			}
+		}
+		goto handled;
+	}
+
+	if (player_said_2(talk_to, faerie)) {
+		local->talking_to = FAERIE;
+		room_110_check_score();
+		conv_run(CONV_FAERIE);
+		goto handled;
+	}
+
+	if (player_said_2(talk_to, shapechanger)) {
+		local->talking_to = SLATHAN;
+		global[talked_to_shifter] = true;
+		room_110_check_score();
+		conv_run(CONV_SLATHAN);
+		goto handled;
+	}
+
+	if (player_said_2(talk_to, Soptus_Ecliptus)) {
+		local->talking_to = SOPTUS;
+		global[talked_to_soptus] = true;
+		room_110_check_score();
+		conv_run(CONV_SOPTUS);
+		goto handled;
+	}
+
+	if (player_said_2(talk_to, merchant)) {
+		local->talking_to = MERCHANT;
+		room_110_check_score();
+		conv_run(CONV_MERCHANT);
+		goto handled;
+	}
+
+
+	/* Pick random number betweeen 1 and 3 to maneuver the guard's actions */
+	/* all within one entry for conversation with king.                    */
+	/* In part 2, pid talks and can get shishkabobbed by the guard captain.*/
+
+	if (player_said_2(talk_to, guard_captain)) {
+		if (global[player_persona] == PLAYER_IS_KING) {
+			local->talking_to = NOONE;
+			conv_run(CONV_GUARD);
+			if (object[bird_figurine].location == 303) conv_export_value(true);
+			else conv_export_value(false);
+			if (object[pid_doll].location == 204) conv_export_value(true);
+			else conv_export_value(false);
+			local->random_grunt_only = imath_random(RANDOM_GUARD_CHOICE_LOW, RANDOM_GUARD_CHOICE_HIGH);
+			conv_export_value(local->random_grunt_only);
+			goto handled;
+		} else {
+			conv_run(CONV_GUARD_PID);
+			conv_export_value(player_has(shifter_ring));
+			if (global[llanie_status] == IS_SAVED) {
+				conv_export_value(1);
+			} else {
+				conv_export_value(0);
+			}
+			goto handled;
+		}
+	}
+
+	if (player_said_1(look) || player_said_1(look_at)) {
+		if (player_said_1(crank)) {
+			text_show(11002);
+			goto handled;
+		}
+
+		if (player_said_1(fields)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11020);
+			} else {
+				text_show(11004);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(merchant_s_stall)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11021);
+			} else if (inter_point_x >= RIGHT_STALL_X) {
+				text_show(11007);
+			} else {
+				text_show(11006);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(trees)) {
+			text_show(11008);
+			goto handled;
+		}
+
+		if (player_said_1(bucket)) {
+			text_show(11009);
+			goto handled;
+		}
+
+		if (player_said_1(well)) {
+			text_show(11011);
+			goto handled;
+		}
+
+		if (player_said_1(clouds)) {
+			text_show(11013);
+			goto handled;
+		}
+
+		if (player_said_1(hedge)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11022);
+			} else {
+				text_show(11014);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(gate_to_courtyard)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11023);
+			} else {
+				text_show(11015);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(road_to_east)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11024);
+			} else {
+				text_show(11016);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(castle)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11025);
+			} else {
+				text_show(11017);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(sky)) {
+			if (global[player_persona] == PLAYER_IS_PID) {
+				text_show(11026);
+			} else {
+				text_show(11018);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(guard_captain)) {
+			if (global[player_persona] == PLAYER_IS_KING) {
+				text_show(11028);
+			} else if (local->activate_timer) {
+				if (game.difficulty == HARD_MODE) {
+					text_show(11038);
+				} else {
+					text_show(11046);
+				}
+			} else if (global[guard_pid_status] == GUARD_IS_UNHEALED) {
+				text_show(11039);
+			}
+			goto handled;
+		}
+
+		if (player_said_1(merchant)) {
+			text_show(11029);
+			goto handled;
+		}
+
+		if (player_said_1(shapechanger)) {
+			text_show(11030);
+			goto handled;
+		}
+
+		if (player_said_1(rope)) {
+			text_show(11040);
+			goto handled;
+		}
+
+		if (player_said_1(Soptus_Ecliptus)) {
+			text_show(11031);
+			goto handled;
+		}
+
+		if (player_said_1(faerie)) {
+			text_show(11032);
+			goto handled;
+		}
+	}
+
+	if (player_said_2(gaze_into, crystal_ball)) {
+		if (local->activate_timer) {
+			text_show(11047);
+		} else {
+			text_show(11033);
+		}
+		goto handled;
+	}
+
+	if (player_said_3(tie, rope, well)) {
+		text_show(11036);
+		goto handled;
+	}
+
+	if (player_said_3(put, tentacle_parts, well) ||
+		player_said_3(put, tentacle_parts, castle)) {
+		text_show(11037);
+		goto handled;
+	}
+
+	if ((player_said_1(push) || player_said_1(pull)) &&
+		player_said_1(crank)) {
+		text_show(11003);
+		goto handled;
+	}
+
+	if (player_said_3(throw, rare_coin, well) ||
+		player_said_3(put, rare_coin, well) ||
+		player_said_3(give, rare_coin, well)) {
+		text_show(11041);
+		goto handled;
+	}
+
+	if ((player_said_1(throw) || player_said_1(put) || player_said_1(give)) &&
+		player_said_1(well) &&
+		player_has(object_named(player_main_noun))) {
+		text_show(11012);
+		goto handled;
+	}
+
+	if (player_said_2(walk_to, fields)) {
+		text_show(11005);
+		goto handled;
+	}
+
+	if (player_said_2(take, guard_captain)) {
+		text_show(30);
+		goto handled;
+	}
+
+	if (player_said_2(take, merchant)) {
+		text_show(30);
+		goto handled;
+	}
+
+	if (player_said_2(take, shapechanger)) {
+		text_show(30);
+		goto handled;
+	}
+
+	if (player_said_2(take, Soptus_Ecliptus)) {
+		text_show(30);
+		goto handled;
+	}
+
+	if (player_said_3(throw, rare_coin, well)) {
+		text_show(11041);
+		goto handled;
+	}
+
+	if (player_said_2(take, faerie)) {
+		text_show(30);
+		goto handled;
+	}
+
+	if (player_said_3(heal, doll, guard_captain)) {
+		if (global[player_persona] == PLAYER_IS_PID) {
+
+			if (global[guard_pid_status] == GUARD_IS_UNHEALED) {
+				text_show(11044);
+
+			} else {
+				player.x = 0;
+				new_room = 112;
+			}
+			goto handled;
+		}
+	}
+
+	goto done;
+
+handled:
+	player.command_ready = false;
+
+done:
+	;
 }
 
 void room_110_synchronize(Common::Serializer &s) {
-	
+	for (int16 &v : scratch.sprite)           s.syncAsSint16LE(v);
+	for (int16 &v : scratch.sequence)         s.syncAsSint16LE(v);
+	for (int16 &v : scratch.animation)        s.syncAsSint16LE(v);
+	for (int16 &v : scratch.character_frame)  s.syncAsSint16LE(v);
+	for (int16 &v : scratch.faerie_id)        s.syncAsSint16LE(v);
+	for (int16 &v : scratch.slathan_id)       s.syncAsSint16LE(v);
+	s.syncAsSint16LE(scratch.soptus_id);
+	s.syncAsSint16LE(scratch.merchant_id);
+	s.syncAsSint16LE(scratch.guard_id);
+	for (int16 &v : scratch.new_action)       s.syncAsSint16LE(v);
+	for (int16 &v : scratch.last_action)      s.syncAsSint16LE(v);
+	for (int16 &v : scratch.good_number)      s.syncAsSint16LE(v);
+	for (int16 &v : scratch.change_action)    s.syncAsSint16LE(v);
+	s.syncAsSint16LE(scratch.talking_to);
+	s.syncAsSint16LE(scratch.how_long_to_talk);
+	s.syncAsSint16LE(scratch.slathan_talk_count);
+	s.syncAsSint16LE(scratch.soptus_talk_count);
+	s.syncAsSint16LE(scratch.anim_0_running);
+	s.syncAsSint16LE(scratch.anim_1_running);
+	s.syncAsSint16LE(scratch.anim_2_running);
+	s.syncAsSint16LE(scratch.anim_3_running);
+	s.syncAsSint16LE(scratch.anim_4_running);
+	s.syncAsSint16LE(scratch.anim_5_running);
+	s.syncAsSint16LE(scratch.guard_king_frame);
+	s.syncAsSint16LE(scratch.guard_king_action);
+	s.syncAsSint16LE(scratch.guard_king_talk_count);
+	s.syncAsSint16LE(scratch.guard_pid_frame);
+	s.syncAsSint16LE(scratch.guard_pid_action);
+	s.syncAsSint16LE(scratch.guard_pid_talk_count);
+	s.syncAsSint32LE(scratch.slathan_timer);
+	for (int32 &v : scratch.diff)             s.syncAsSint32LE(v);
+	for (int32 &v : scratch.last_clock)       s.syncAsSint32LE(v);
+	for (int16 &v : scratch.switch_direction) s.syncAsSint16LE(v);
+	s.syncAsSint32LE(scratch.soptus_timer);
+	s.syncAsSint16LE(scratch.merchant_talking);
+	s.syncAsSint16LE(scratch.soptus_talking);
+	s.syncAsSint16LE(scratch.time);
+	s.syncAsSint16LE(scratch.random_grunt_only);
+	s.syncAsSint32LE(scratch.clock);
+	s.syncAsSint32LE(scratch.death_timer);
+	s.syncAsSint16LE(scratch.activate_timer);
+	s.syncAsByte(scratch.cut_scene);
+	s.syncAsSint16LE(scratch.speech_playing);
 }
 
 void room_110_preload() {
@@ -72,6 +2891,17 @@ void room_110_preload() {
 
 	section_1_walker();
 	section_1_interface();
+
+	if (global[player_persona] == PLAYER_IS_KING) {
+		kernel_initial_variant = 1;
+	}
+
+	vocab_make_active(words_faerie);
+	vocab_make_active(words_shapechanger);
+	vocab_make_active(words_Soptus_Ecliptus);
+	vocab_make_active(words_merchant);
+	vocab_make_active(words_guard_captain);
+	vocab_make_active(words_walk_to);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/madsv2/engine.cpp b/engines/mads/madsv2/engine.cpp
index 1d28b7e067b..500745a33ff 100644
--- a/engines/mads/madsv2/engine.cpp
+++ b/engines/mads/madsv2/engine.cpp
@@ -323,6 +323,10 @@ void MADSV2Engine::stopSpeech() {
 	_mixer->stopHandle(_speechHandle);
 }
 
+bool MADSV2Engine::isSpeechPlaying() const {
+	return _mixer->isSoundHandleActive(_speechHandle);
+}
+
 SaveStateList MADSV2Engine::listSaves() const {
 	return getMetaEngine()->listSaves(_targetName.c_str());
 }
diff --git a/engines/mads/madsv2/engine.h b/engines/mads/madsv2/engine.h
index ba6c4017f62..2f4ad4fa913 100644
--- a/engines/mads/madsv2/engine.h
+++ b/engines/mads/madsv2/engine.h
@@ -109,6 +109,7 @@ public:
 
 	void playSpeech(Audio::AudioStream *stream);
 	void stopSpeech();
+	bool isSpeechPlaying() const;
 };
 
 extern MADSV2Engine *g_engine;


Commit: 7b4550fe08604b083d0bbc7ee62e3999761fd06c
    https://github.com/scummvm/scummvm/commit/7b4550fe08604b083d0bbc7ee62e3999761fd06c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-05-10T18:37:37+10:00

Commit Message:
MADS: DRAGONSPHERE: Add commonly needed includes to remaining room files

Changed paths:
    engines/mads/madsv2/dragonsphere/rooms/room111.cpp
    engines/mads/madsv2/dragonsphere/rooms/room112.cpp
    engines/mads/madsv2/dragonsphere/rooms/room113.cpp
    engines/mads/madsv2/dragonsphere/rooms/room114.cpp
    engines/mads/madsv2/dragonsphere/rooms/room115.cpp
    engines/mads/madsv2/dragonsphere/rooms/room116.cpp
    engines/mads/madsv2/dragonsphere/rooms/room117.cpp
    engines/mads/madsv2/dragonsphere/rooms/room118.cpp
    engines/mads/madsv2/dragonsphere/rooms/room119.cpp
    engines/mads/madsv2/dragonsphere/rooms/room201.cpp
    engines/mads/madsv2/dragonsphere/rooms/room203.cpp
    engines/mads/madsv2/dragonsphere/rooms/room204.cpp
    engines/mads/madsv2/dragonsphere/rooms/room205.cpp
    engines/mads/madsv2/dragonsphere/rooms/room206.cpp
    engines/mads/madsv2/dragonsphere/rooms/room301.cpp
    engines/mads/madsv2/dragonsphere/rooms/room302.cpp
    engines/mads/madsv2/dragonsphere/rooms/room303.cpp
    engines/mads/madsv2/dragonsphere/rooms/room401.cpp
    engines/mads/madsv2/dragonsphere/rooms/room402.cpp
    engines/mads/madsv2/dragonsphere/rooms/room403.cpp
    engines/mads/madsv2/dragonsphere/rooms/room404.cpp
    engines/mads/madsv2/dragonsphere/rooms/room405.cpp
    engines/mads/madsv2/dragonsphere/rooms/room406.cpp
    engines/mads/madsv2/dragonsphere/rooms/room407.cpp
    engines/mads/madsv2/dragonsphere/rooms/room408.cpp
    engines/mads/madsv2/dragonsphere/rooms/room409.cpp
    engines/mads/madsv2/dragonsphere/rooms/room410.cpp
    engines/mads/madsv2/dragonsphere/rooms/room411.cpp
    engines/mads/madsv2/dragonsphere/rooms/room412.cpp
    engines/mads/madsv2/dragonsphere/rooms/room454.cpp
    engines/mads/madsv2/dragonsphere/rooms/room501.cpp
    engines/mads/madsv2/dragonsphere/rooms/room502.cpp
    engines/mads/madsv2/dragonsphere/rooms/room503.cpp
    engines/mads/madsv2/dragonsphere/rooms/room504.cpp
    engines/mads/madsv2/dragonsphere/rooms/room505.cpp
    engines/mads/madsv2/dragonsphere/rooms/room506.cpp
    engines/mads/madsv2/dragonsphere/rooms/room507.cpp
    engines/mads/madsv2/dragonsphere/rooms/room508.cpp
    engines/mads/madsv2/dragonsphere/rooms/room509.cpp
    engines/mads/madsv2/dragonsphere/rooms/room510.cpp
    engines/mads/madsv2/dragonsphere/rooms/room511.cpp
    engines/mads/madsv2/dragonsphere/rooms/room512.cpp
    engines/mads/madsv2/dragonsphere/rooms/room557.cpp
    engines/mads/madsv2/dragonsphere/rooms/room601.cpp
    engines/mads/madsv2/dragonsphere/rooms/room603.cpp
    engines/mads/madsv2/dragonsphere/rooms/room604.cpp
    engines/mads/madsv2/dragonsphere/rooms/room605.cpp
    engines/mads/madsv2/dragonsphere/rooms/room606.cpp
    engines/mads/madsv2/dragonsphere/rooms/room607.cpp
    engines/mads/madsv2/dragonsphere/rooms/room609.cpp
    engines/mads/madsv2/dragonsphere/rooms/room612.cpp
    engines/mads/madsv2/dragonsphere/rooms/room613.cpp
    engines/mads/madsv2/dragonsphere/rooms/room614.cpp


diff --git a/engines/mads/madsv2/dragonsphere/rooms/room111.cpp b/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
index a0f1f584d80..a235b83739f 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room111.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room112.cpp b/engines/mads/madsv2/dragonsphere/rooms/room112.cpp
index de9b027f0ee..6307350c986 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room112.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room112.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room112.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room113.cpp b/engines/mads/madsv2/dragonsphere/rooms/room113.cpp
index e264acebaee..d2e51a2810e 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room113.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room113.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room113.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room114.cpp b/engines/mads/madsv2/dragonsphere/rooms/room114.cpp
index 0c9a6c6d35c..f366ed00312 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room114.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room114.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room114.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room115.cpp b/engines/mads/madsv2/dragonsphere/rooms/room115.cpp
index ef58c680f6d..8ba88d302a0 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room115.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room115.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room115.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room116.cpp b/engines/mads/madsv2/dragonsphere/rooms/room116.cpp
index 0189c5ea853..42e1dac31fa 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room116.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room116.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room116.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room117.cpp b/engines/mads/madsv2/dragonsphere/rooms/room117.cpp
index c54e37f5a80..dc4075112a2 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room117.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room117.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room117.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room118.cpp b/engines/mads/madsv2/dragonsphere/rooms/room118.cpp
index f64d72604d3..8147a4720ab 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room118.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room118.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room118.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room119.cpp b/engines/mads/madsv2/dragonsphere/rooms/room119.cpp
index a8ec2a556e3..7a173f21521 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room119.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room119.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section1.h"
 #include "mads/madsv2/dragonsphere/rooms/room119.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room201.cpp b/engines/mads/madsv2/dragonsphere/rooms/room201.cpp
index 978d531fb65..8f43502f81e 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room201.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room201.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section2.h"
 #include "mads/madsv2/dragonsphere/rooms/room201.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room203.cpp b/engines/mads/madsv2/dragonsphere/rooms/room203.cpp
index 642836b7ef5..f54546c6a5a 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room203.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room203.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section2.h"
 #include "mads/madsv2/dragonsphere/rooms/room203.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room204.cpp b/engines/mads/madsv2/dragonsphere/rooms/room204.cpp
index a442b7ed601..358895883eb 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room204.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room204.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section2.h"
 #include "mads/madsv2/dragonsphere/rooms/room204.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room205.cpp b/engines/mads/madsv2/dragonsphere/rooms/room205.cpp
index 16effdfc459..079aaf86438 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room205.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room205.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section2.h"
 #include "mads/madsv2/dragonsphere/rooms/room205.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room206.cpp b/engines/mads/madsv2/dragonsphere/rooms/room206.cpp
index 2c0effb9f2b..68a975d82a7 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room206.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room206.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section2.h"
 #include "mads/madsv2/dragonsphere/rooms/room206.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room301.cpp b/engines/mads/madsv2/dragonsphere/rooms/room301.cpp
index ed0c0ed4729..60fe2d788df 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room301.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room301.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section3.h"
 #include "mads/madsv2/dragonsphere/rooms/room301.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room302.cpp b/engines/mads/madsv2/dragonsphere/rooms/room302.cpp
index a3254e5f2a8..ee315299aac 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room302.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room302.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section3.h"
 #include "mads/madsv2/dragonsphere/rooms/room302.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room303.cpp b/engines/mads/madsv2/dragonsphere/rooms/room303.cpp
index 559a254b871..e8069aca7ec 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room303.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room303.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section3.h"
 #include "mads/madsv2/dragonsphere/rooms/room303.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room401.cpp b/engines/mads/madsv2/dragonsphere/rooms/room401.cpp
index ff8a60fe18d..ecc76bc5260 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room401.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room401.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room401.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room402.cpp b/engines/mads/madsv2/dragonsphere/rooms/room402.cpp
index ddc440afe54..5dd66d1e9ce 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room402.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room402.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room402.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room403.cpp b/engines/mads/madsv2/dragonsphere/rooms/room403.cpp
index d372671850f..025f109c337 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room403.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room403.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room403.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room404.cpp b/engines/mads/madsv2/dragonsphere/rooms/room404.cpp
index bd803a28188..a755aaf786b 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room404.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room404.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room404.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room405.cpp b/engines/mads/madsv2/dragonsphere/rooms/room405.cpp
index 67af5654263..8cfaf433578 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room405.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room405.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room405.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room406.cpp b/engines/mads/madsv2/dragonsphere/rooms/room406.cpp
index 016b04c1532..a869ea7db90 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room406.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room406.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room406.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room407.cpp b/engines/mads/madsv2/dragonsphere/rooms/room407.cpp
index ebf7b3fcd13..0301552736d 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room407.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room407.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room407.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room408.cpp b/engines/mads/madsv2/dragonsphere/rooms/room408.cpp
index 5aea2fc0133..4a1c17f72e0 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room408.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room408.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room408.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room409.cpp b/engines/mads/madsv2/dragonsphere/rooms/room409.cpp
index 916be44ca3f..dca0fbd6439 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room409.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room409.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room409.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room410.cpp b/engines/mads/madsv2/dragonsphere/rooms/room410.cpp
index 4b8c399750a..fcbbffab933 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room410.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room410.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room410.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room411.cpp b/engines/mads/madsv2/dragonsphere/rooms/room411.cpp
index cf0113b0094..6546a0f6d8e 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room411.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room411.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room411.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room412.cpp b/engines/mads/madsv2/dragonsphere/rooms/room412.cpp
index 11231833c6c..b2a4b6f2ba2 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room412.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room412.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room412.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room454.cpp b/engines/mads/madsv2/dragonsphere/rooms/room454.cpp
index 179d7f76aef..ff9b9024563 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room454.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room454.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section4.h"
 #include "mads/madsv2/dragonsphere/rooms/room454.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room501.cpp b/engines/mads/madsv2/dragonsphere/rooms/room501.cpp
index ed03e759a4a..677b333538f 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room501.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room501.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room501.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room502.cpp b/engines/mads/madsv2/dragonsphere/rooms/room502.cpp
index db3c035a286..1a4245547fe 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room502.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room502.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room502.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room503.cpp b/engines/mads/madsv2/dragonsphere/rooms/room503.cpp
index c8fee4447be..215f9f0fc93 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room503.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room503.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room503.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room504.cpp b/engines/mads/madsv2/dragonsphere/rooms/room504.cpp
index b9e99a984d3..196be4a0466 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room504.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room504.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room504.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room505.cpp b/engines/mads/madsv2/dragonsphere/rooms/room505.cpp
index 3080ea78eca..e18b55604e3 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room505.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room505.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room505.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room506.cpp b/engines/mads/madsv2/dragonsphere/rooms/room506.cpp
index 2db86b8920d..0ae0401388e 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room506.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room506.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room506.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room507.cpp b/engines/mads/madsv2/dragonsphere/rooms/room507.cpp
index 87219618c09..f5757069a46 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room507.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room507.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room507.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room508.cpp b/engines/mads/madsv2/dragonsphere/rooms/room508.cpp
index 0bbdf01f9da..30cb34a8e2f 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room508.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room508.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room508.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room509.cpp b/engines/mads/madsv2/dragonsphere/rooms/room509.cpp
index 1b5ed997d67..e5d0bd93e54 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room509.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room509.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room509.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room510.cpp b/engines/mads/madsv2/dragonsphere/rooms/room510.cpp
index fa54d99d272..ab452777a86 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room510.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room510.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room510.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room511.cpp b/engines/mads/madsv2/dragonsphere/rooms/room511.cpp
index 0c6c3d0d9da..4df9a0dbf39 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room511.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room511.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room511.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room512.cpp b/engines/mads/madsv2/dragonsphere/rooms/room512.cpp
index ec52404298c..5adf5e3a583 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room512.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room512.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room512.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room557.cpp b/engines/mads/madsv2/dragonsphere/rooms/room557.cpp
index bf1f9b56777..46c2fd29ba9 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room557.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room557.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section5.h"
 #include "mads/madsv2/dragonsphere/rooms/room557.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room601.cpp b/engines/mads/madsv2/dragonsphere/rooms/room601.cpp
index 8ecf78d5c60..816617aea16 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room601.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room601.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room601.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room603.cpp b/engines/mads/madsv2/dragonsphere/rooms/room603.cpp
index 51967fb683b..c20ed7f99c1 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room603.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room603.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room603.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room604.cpp b/engines/mads/madsv2/dragonsphere/rooms/room604.cpp
index a0d557c8af4..3c97e7657e6 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room604.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room604.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room604.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room605.cpp b/engines/mads/madsv2/dragonsphere/rooms/room605.cpp
index 7a95acd01b2..379765a6f3e 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room605.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room605.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room605.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room606.cpp b/engines/mads/madsv2/dragonsphere/rooms/room606.cpp
index c40fd07689e..6ba562e1b3d 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room606.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room606.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room606.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room607.cpp b/engines/mads/madsv2/dragonsphere/rooms/room607.cpp
index 90d06394fa0..1a5b808661f 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room607.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room607.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room607.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room609.cpp b/engines/mads/madsv2/dragonsphere/rooms/room609.cpp
index 36d541eb7dc..0eda14525be 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room609.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room609.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room609.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room612.cpp b/engines/mads/madsv2/dragonsphere/rooms/room612.cpp
index b8f6b85872a..335a9cb9f59 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room612.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room612.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room612.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room613.cpp b/engines/mads/madsv2/dragonsphere/rooms/room613.cpp
index f114d3ca618..3e109ecdec4 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room613.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room613.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room613.h"
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room614.cpp b/engines/mads/madsv2/dragonsphere/rooms/room614.cpp
index 5918a7fc320..4c1ce3f1f94 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room614.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room614.cpp
@@ -25,6 +25,10 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
+#include "mads/madsv2/dragonsphere/mads/conv.h"
+#include "mads/madsv2/dragonsphere/mads/inventory.h"
+#include "mads/madsv2/dragonsphere/mads/sounds.h"
+#include "mads/madsv2/dragonsphere/mads/words.h"
 #include "mads/madsv2/dragonsphere/global.h"
 #include "mads/madsv2/dragonsphere/rooms/section6.h"
 #include "mads/madsv2/dragonsphere/rooms/room614.h"


Commit: 176ac65d6155b4237cf14293d3a1189d0fc4dc5c
    https://github.com/scummvm/scummvm/commit/176ac65d6155b4237cf14293d3a1189d0fc4dc5c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-05-10T18:48:10+10:00

Commit Message:
MADS: DRAGONSPHERE: Added room 111

Changed paths:
    engines/mads/madsv2/dragonsphere/mads/conv.h
    engines/mads/madsv2/dragonsphere/mads/sounds.h
    engines/mads/madsv2/dragonsphere/mads/words.h
    engines/mads/madsv2/dragonsphere/rooms/room111.cpp


diff --git a/engines/mads/madsv2/dragonsphere/mads/conv.h b/engines/mads/madsv2/dragonsphere/mads/conv.h
index 04110e01ec9..3034744ec27 100644
--- a/engines/mads/madsv2/dragonsphere/mads/conv.h
+++ b/engines/mads/madsv2/dragonsphere/mads/conv.h
@@ -110,6 +110,35 @@ enum {
 	conv014_banter_only      = 8
 };
 
+enum {
+	conv017_exit_b_b    = 4,
+	conv016_exit_b_b    = 5,
+};
+
+enum {
+	conv018_exit_b_b    = 4
+};
+
+enum {
+	conv019_exit_b_b    = 4
+};
+
+enum {
+	conv020_exit_b_b    = 4
+};
+
+enum {
+	conv021_exit_b_b    = 4
+};
+
+enum {
+	conv022_exit_b_b    = 4
+};
+
+enum {
+	conv023_exit_b_b    = 6
+};
+
 enum {
 	conv034_five_b_b = 4,
 	conv034_seven_only = 7,
diff --git a/engines/mads/madsv2/dragonsphere/mads/sounds.h b/engines/mads/madsv2/dragonsphere/mads/sounds.h
index a458a22b3bd..0719d4aa3d4 100644
--- a/engines/mads/madsv2/dragonsphere/mads/sounds.h
+++ b/engines/mads/madsv2/dragonsphere/mads/sounds.h
@@ -36,6 +36,7 @@ enum {
 	N_QueenMother     =  45,
 	N_TurnDiaryPage   =  65,
 	N_WallGrinds      =  67,
+	N_DragonInWater   =  72,
 	N_JumpDownWell    =  93,
 	N_BooksRumble     =  94,
 	N_McMornTipsTable = 100
diff --git a/engines/mads/madsv2/dragonsphere/mads/words.h b/engines/mads/madsv2/dragonsphere/mads/words.h
index 82fe843b7f3..80a096e4029 100644
--- a/engines/mads/madsv2/dragonsphere/mads/words.h
+++ b/engines/mads/madsv2/dragonsphere/mads/words.h
@@ -62,6 +62,8 @@ enum {
 	words_gaze_into            = 110,
 	words_tentacle_parts       = 125,
 	words_rare_coin            = 129,
+	words_touch                = 146,
+	words_throne_room          = 147,
 	words_castle               = 156,
 	words_walk_down            = 169,
 	words_brazier              = 175,
diff --git a/engines/mads/madsv2/dragonsphere/rooms/room111.cpp b/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
index a235b83739f..d9300fe9f36 100644
--- a/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
+++ b/engines/mads/madsv2/dragonsphere/rooms/room111.cpp
@@ -22,6 +22,7 @@
 #include "mads/madsv2/core/conv.h"
 #include "mads/madsv2/core/game.h"
 #include "mads/madsv2/core/imath.h"
+#include "mads/madsv2/core/inter.h"
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/core/sound.h"
 #include "mads/madsv2/core/text.h"
@@ -39,6 +40,14 @@ namespace Dragonsphere {
 namespace Rooms {
 
 struct Scratch {
+	int16 sprite[15];       /* Sprite series handles */
+	int16 sequence[15];     /* Sequence handles      */
+	int16 animation[4];     /* Animation handles     */
+
+	int16 dragon_frame;     /* frame animation is on */
+
+	int16 done_with_conv;   /* T if done with conv   */
+	int16 prev_room;
 };
 
 #define local (&scratch)
@@ -46,22 +55,194 @@ struct Scratch {
 #define seq   local->sequence
 #define aa    local->animation
 
-//static Scratch scratch;
+static Scratch scratch;
 
-void room_111_init() {
 
-}
+static void room_111_init() {
+	local->done_with_conv = false;
+	player.walker_visible = false;
+
+	if (previous_room != KERNEL_RESTORING_GAME) {
+		local->prev_room = 0;
+	}
 
-void room_111_daemon() {
+	if ((previous_room == 106) || (local->prev_room == 106)) {   /* Player comes from throne room */
+		local->prev_room = 106;
+		sound_play(N_DragonInWater);
+		aa[0] = kernel_run_animation(kernel_name('A', global[dragon_my_scene]), 0);
+		kernel_reset_animation(aa[0], 29);
 
+	} else if (previous_room != KERNEL_RESTORING_GAME) { /* Player comes from strategic map */
+		local->prev_room = 0;
+		kernel_init_dialog();
+		kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
+
+		conv_get(global[dragon_my_scene] + 15);
+		aa[0] = kernel_run_animation(kernel_name('A', global[dragon_my_scene]), 0);
+		player.commands_allowed = false;
+	}
+
+	section_1_music();
 }
 
-void room_111_pre_parser() {
+static void room_111_daemon() {
+	int reset_frame;
+
+	if (kernel_anim[aa[0]].anim != NULL) {
+		if (kernel_anim[aa[0]].frame != local->dragon_frame) {
+			local->dragon_frame = kernel_anim[aa[0]].frame;
+			reset_frame = -1;
 
+			switch (local->dragon_frame) {
+			case 38:
+				if ((global[dragon_my_scene] > 0) && (local->prev_room != 106)) {
+					conv_run(global[dragon_my_scene] + 15);
+				}
+				break;
+
+			case 150:
+				if (local->prev_room == 106) {
+					reset_frame = 29;
+				} else {
+					if (local->done_with_conv) {
+						/* reset_frame = 29; */
+						/* global[pre_room] = 110; */
+						new_room = 120;
+					} else {
+						switch (global[dragon_my_scene]) {
+						case 1: reset_frame = 69; break;
+						case 2: reset_frame = 83; break;
+						case 3: reset_frame = 39; break;
+						case 4: reset_frame = 74; break;
+						case 5: reset_frame = 79; break;
+						case 6: reset_frame = 89; break;
+						case 7: reset_frame = 52; break;
+						case 8: reset_frame = 92; break;
+						}
+					}
+				}
+				break;
+			}
+
+			if (reset_frame >= 0) {
+				if (reset_frame != kernel_anim[aa[0]].frame) {
+					kernel_reset_animation(aa[0], reset_frame);
+					local->dragon_frame = reset_frame;
+				}
+			}
+		}
+	}
+}
+
+static void room_111_pre_parser() {
 }
 
-void room_111_parser() {
+static void room_111_parser() {
+	if (conv_control.running == 16) {
+		if (player_verb == conv016_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 17) {
+		if (player_verb == conv017_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 18) {
+		if (player_verb == conv018_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 19) {
+		if (player_verb == conv019_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 20) {
+		if (player_verb == conv020_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 21) {
+		if (player_verb == conv021_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 22) {
+		if (player_verb == conv022_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (conv_control.running == 23) {
+		if (player_verb == conv023_exit_b_b) {
+			local->done_with_conv = true;
+		}
+		goto handled;
+	}
+
+	if (player_said_2(look_at, throne_room) ||
+		player_said_2(look, throne_room)) {
+		new_room = 106;
+		goto handled;
+	}
+
+	if (player.look_around) {
+		text_show(11106);
+		goto handled;
+	}
+
+	if (player_said_1(look) || player_said_1(look_at)) {
+		if (player_said_1(Dragonsphere)) {
+			text_show(11101);
+			goto handled;
+		}
+
+		if (player_said_1(throne_room)) {
+			new_room = 106;
+			goto handled;
+		}
+	}
+
+	if (player_said_2(touch, Dragonsphere)) {
+		text_show(11102);
+		goto handled;
+	}
+
+	if (player_said_2(take, Dragonsphere)) {
+		text_show(11103);
+		goto handled;
+	}
+
+	if (player_said_2(invoke, signet_ring)) {
+		global[invoked_from_111] = true;
+	}
+
+	if (player_said_3(put, tentacle_parts, Dragonsphere)) {
+		text_show(11107);
+		goto handled;
+	}
+
+	goto done;
+
+handled:
+	player.command_ready = false;
 
+done:
+	;
 }
 
 void room_111_synchronize(Common::Serializer &s) {




More information about the Scummvm-git-logs mailing list