[Scummvm-git-logs] scummvm master -> 461396bfa3594eca64e1a4a8a943f0c1ef9ad02e

dreammaster noreply at scummvm.org
Wed Oct 2 04:23:04 UTC 2024


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

Summary:
4d7933eaac M4: RIDDLE: Finished room 615
461396bfa3 M4: RIDDLE: Setting up maze room skeletons


Commit: 4d7933eaac7b42e8feb575179b27f3f1b8e49e6f
    https://github.com/scummvm/scummvm/commit/4d7933eaac7b42e8feb575179b27f3f1b8e49e6f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-01T21:22:03-07:00

Commit Message:
M4: RIDDLE: Finished room 615

Changed paths:
    engines/m4/riddle/rooms/section6/room615.cpp


diff --git a/engines/m4/riddle/rooms/section6/room615.cpp b/engines/m4/riddle/rooms/section6/room615.cpp
index a8cc4c54b8d..533b5e08a57 100644
--- a/engines/m4/riddle/rooms/section6/room615.cpp
+++ b/engines/m4/riddle/rooms/section6/room615.cpp
@@ -470,7 +470,40 @@ void Room615::daemon() {
 		}
 		break;
 
-	// TODO
+	case 133:
+		if (_ctr1 >= 1) {
+			_ctr1 = 0;
+			series_stream_break_on_frame(_untie, 94, 135);
+			digi_play("615r15", 1);
+		} else {
+			++_ctr1;
+		}
+		break;
+
+	case 135:
+		series_stream_check_series(_untie, 400);
+		kernel_timing_trigger(60, 140);
+		break;
+
+	case 140:
+		disable_player_commands_and_fade_init(141);
+		break;
+
+	case 141:
+		inv_move_object("SPARK PLUG TOOL", NOWHERE);
+		_G(flags)[V203] = 9;
+		_G(flags)[V191] = 0;
+		_G(flags)[V129] = 4;
+		_G(game).setRoom(495);
+		break;
+
+	case 150:
+		if (!_val2) {
+			series_stream_check_series(_untie, 30000);
+			kernel_timing_trigger(10, 151);
+		}
+		break;
+
 	case 151:
 		if (_val2) {
 			series_stream_check_series(_untie, 6);
@@ -480,7 +513,6 @@ void Room615::daemon() {
 		}
 		break;
 
-	// TODO
 	default:
 		break;
 	}


Commit: 461396bfa3594eca64e1a4a8a943f0c1ef9ad02e
    https://github.com/scummvm/scummvm/commit/461396bfa3594eca64e1a4a8a943f0c1ef9ad02e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-01T21:22:04-07:00

Commit Message:
M4: RIDDLE: Setting up maze room skeletons

Changed paths:
  A engines/m4/riddle/rooms/section6/section6_maze.cpp
  A engines/m4/riddle/rooms/section6/section6_maze.h
    engines/m4/module.mk
    engines/m4/riddle/rooms/section6/room620.cpp
    engines/m4/riddle/rooms/section6/room620.h
    engines/m4/riddle/rooms/section6/room621.cpp
    engines/m4/riddle/rooms/section6/room621.h
    engines/m4/riddle/rooms/section6/room622.cpp
    engines/m4/riddle/rooms/section6/room622.h
    engines/m4/riddle/rooms/section6/room623.cpp
    engines/m4/riddle/rooms/section6/room623.h
    engines/m4/riddle/rooms/section6/room624.cpp
    engines/m4/riddle/rooms/section6/room624.h
    engines/m4/riddle/rooms/section6/room625.cpp
    engines/m4/riddle/rooms/section6/room625.h
    engines/m4/riddle/rooms/section6/room626.cpp
    engines/m4/riddle/rooms/section6/room626.h
    engines/m4/riddle/rooms/section6/room627.cpp
    engines/m4/riddle/rooms/section6/room627.h
    engines/m4/riddle/rooms/section6/room628.cpp
    engines/m4/riddle/rooms/section6/room628.h
    engines/m4/riddle/rooms/section6/room629.cpp
    engines/m4/riddle/rooms/section6/room629.h
    engines/m4/riddle/rooms/section6/room630.cpp
    engines/m4/riddle/rooms/section6/room630.h
    engines/m4/riddle/rooms/section6/room631.cpp
    engines/m4/riddle/rooms/section6/room631.h
    engines/m4/riddle/rooms/section6/room632.cpp
    engines/m4/riddle/rooms/section6/room632.h
    engines/m4/riddle/rooms/section6/room633.cpp
    engines/m4/riddle/rooms/section6/room633.h
    engines/m4/riddle/rooms/section6/room634.cpp
    engines/m4/riddle/rooms/section6/room634.h
    engines/m4/riddle/rooms/section6/room635.cpp
    engines/m4/riddle/rooms/section6/room635.h
    engines/m4/riddle/rooms/section6/room636.cpp
    engines/m4/riddle/rooms/section6/room636.h
    engines/m4/riddle/rooms/section6/room637.cpp
    engines/m4/riddle/rooms/section6/room637.h
    engines/m4/riddle/rooms/section6/room638.cpp
    engines/m4/riddle/rooms/section6/room638.h
    engines/m4/riddle/rooms/section6/room640.cpp
    engines/m4/riddle/rooms/section6/room640.h
    engines/m4/riddle/rooms/section6/room641.cpp
    engines/m4/riddle/rooms/section6/room641.h
    engines/m4/riddle/rooms/section6/room642.cpp
    engines/m4/riddle/rooms/section6/room642.h
    engines/m4/riddle/rooms/section6/room643.cpp
    engines/m4/riddle/rooms/section6/room643.h
    engines/m4/riddle/rooms/section6/room644.cpp
    engines/m4/riddle/rooms/section6/room644.h
    engines/m4/riddle/rooms/section6/room645.cpp
    engines/m4/riddle/rooms/section6/room645.h
    engines/m4/riddle/rooms/section6/room646.cpp
    engines/m4/riddle/rooms/section6/room646.h
    engines/m4/riddle/rooms/section6/room647.cpp
    engines/m4/riddle/rooms/section6/room647.h
    engines/m4/riddle/rooms/section6/room648.cpp
    engines/m4/riddle/rooms/section6/room648.h
    engines/m4/riddle/rooms/section6/room649.cpp
    engines/m4/riddle/rooms/section6/room649.h
    engines/m4/riddle/rooms/section6/room650.cpp
    engines/m4/riddle/rooms/section6/room650.h
    engines/m4/riddle/rooms/section6/room651.cpp
    engines/m4/riddle/rooms/section6/room651.h


diff --git a/engines/m4/module.mk b/engines/m4/module.mk
index 555de2f2b37..679096fbd89 100644
--- a/engines/m4/module.mk
+++ b/engines/m4/module.mk
@@ -224,6 +224,7 @@ MODULE_OBJS = \
 	riddle/rooms/section5/room509.o \
 	riddle/rooms/section5/room510.o \
 	riddle/rooms/section6/section6.o \
+	riddle/rooms/section6/section6_maze.o \
 	riddle/rooms/section6/room603.o \
 	riddle/rooms/section6/room604.o \
 	riddle/rooms/section6/room605.o \
diff --git a/engines/m4/riddle/rooms/section6/room620.cpp b/engines/m4/riddle/rooms/section6/room620.cpp
index 508d471d6bb..cd5c11fa6f4 100644
--- a/engines/m4/riddle/rooms/section6/room620.cpp
+++ b/engines/m4/riddle/rooms/section6/room620.cpp
@@ -30,7 +30,10 @@ namespace Rooms {
 void Room620::init() {
 }
 
-void Room620::daemon() {
+void Room620::parser() {
+	Maze::parser();
+	checkExitRight(621);
+	checkExitUp(626);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room620.h b/engines/m4/riddle/rooms/section6/room620.h
index 547ee2ef975..3707432e764 100644
--- a/engines/m4/riddle/rooms/section6/room620.h
+++ b/engines/m4/riddle/rooms/section6/room620.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM620_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM620_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room620 : public Room {
+class Room620 : public Maze {
 public:
-	Room620() : Room() {}
+	Room620() : Maze() {}
 	~Room620() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room621.cpp b/engines/m4/riddle/rooms/section6/room621.cpp
index 8d6d469c362..a7f20db1a5c 100644
--- a/engines/m4/riddle/rooms/section6/room621.cpp
+++ b/engines/m4/riddle/rooms/section6/room621.cpp
@@ -30,7 +30,11 @@ namespace Rooms {
 void Room621::init() {
 }
 
-void Room621::daemon() {
+void Room621::parser() {
+	Maze::parser();
+	checkExitLeft(620);
+	checkExitRight(622);
+	checkExitUp(627);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room621.h b/engines/m4/riddle/rooms/section6/room621.h
index c3d70e97292..4aed93591f2 100644
--- a/engines/m4/riddle/rooms/section6/room621.h
+++ b/engines/m4/riddle/rooms/section6/room621.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM621_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM621_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room621 : public Room {
+class Room621 : public Maze {
 public:
-	Room621() : Room() {}
+	Room621() : Maze() {}
 	~Room621() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room622.cpp b/engines/m4/riddle/rooms/section6/room622.cpp
index 474826a982f..8460b39fdda 100644
--- a/engines/m4/riddle/rooms/section6/room622.cpp
+++ b/engines/m4/riddle/rooms/section6/room622.cpp
@@ -30,7 +30,11 @@ namespace Rooms {
 void Room622::init() {
 }
 
-void Room622::daemon() {
+void Room622::parser() {
+	Maze::parser();
+	checkExitLeft(621);
+	checkExitRight(623);
+	checkExitUp(628);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room622.h b/engines/m4/riddle/rooms/section6/room622.h
index e6f89d89cbc..d3aef94652a 100644
--- a/engines/m4/riddle/rooms/section6/room622.h
+++ b/engines/m4/riddle/rooms/section6/room622.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM622_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM622_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room622 : public Room {
+class Room622 : public Maze {
 public:
-	Room622() : Room() {}
+	Room622() : Maze() {}
 	~Room622() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room623.cpp b/engines/m4/riddle/rooms/section6/room623.cpp
index 0eb345d3573..2cd86c66b46 100644
--- a/engines/m4/riddle/rooms/section6/room623.cpp
+++ b/engines/m4/riddle/rooms/section6/room623.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room623::init() {
 }
 
-void Room623::daemon() {
+void Room623::parser() {
+	Maze::parser();
+	checkExitLeft(622);
+	checkExitRight(624);
+	checkExitUp(629);
+	checkExitDown(605);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room623.h b/engines/m4/riddle/rooms/section6/room623.h
index bf99b81c591..29af4d65236 100644
--- a/engines/m4/riddle/rooms/section6/room623.h
+++ b/engines/m4/riddle/rooms/section6/room623.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM623_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM623_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room623 : public Room {
+class Room623 : public Maze {
 public:
-	Room623() : Room() {}
+	Room623() : Maze() {}
 	~Room623() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room624.cpp b/engines/m4/riddle/rooms/section6/room624.cpp
index c2aad3e4038..6755f3deb4d 100644
--- a/engines/m4/riddle/rooms/section6/room624.cpp
+++ b/engines/m4/riddle/rooms/section6/room624.cpp
@@ -30,7 +30,11 @@ namespace Rooms {
 void Room624::init() {
 }
 
-void Room624::daemon() {
+void Room624::parser() {
+	Maze::parser();
+	checkExitLeft(623);
+	checkExitRight(625);
+	checkExitUp(630);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room624.h b/engines/m4/riddle/rooms/section6/room624.h
index f394ed3a2d9..62ad2279559 100644
--- a/engines/m4/riddle/rooms/section6/room624.h
+++ b/engines/m4/riddle/rooms/section6/room624.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM624_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM624_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room624 : public Room {
+class Room624 : public Maze {
 public:
-	Room624() : Room() {}
+	Room624() : Maze() {}
 	~Room624() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room625.cpp b/engines/m4/riddle/rooms/section6/room625.cpp
index 8949b25670d..b92f072c587 100644
--- a/engines/m4/riddle/rooms/section6/room625.cpp
+++ b/engines/m4/riddle/rooms/section6/room625.cpp
@@ -30,7 +30,22 @@ namespace Rooms {
 void Room625::init() {
 }
 
-void Room625::daemon() {
+void Room625::parser() {
+	Maze::parser();
+
+	if (player_said("journal", "STARFISH")) {
+		if (_G(flags)[V208]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6)
+				_G(flags)[V208] = 1;
+			sendWSMessage_multi(0);
+		}
+
+		_G(player).command_ready = false;
+	} else {
+		checkExitLeft(624);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room625.h b/engines/m4/riddle/rooms/section6/room625.h
index 9183ae3c0ef..537aec35c54 100644
--- a/engines/m4/riddle/rooms/section6/room625.h
+++ b/engines/m4/riddle/rooms/section6/room625.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM625_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM625_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room625 : public Room {
+class Room625 : public Maze {
 public:
-	Room625() : Room() {}
+	Room625() : Maze() {}
 	~Room625() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room626.cpp b/engines/m4/riddle/rooms/section6/room626.cpp
index 772e352e7cc..1f0757e8fb1 100644
--- a/engines/m4/riddle/rooms/section6/room626.cpp
+++ b/engines/m4/riddle/rooms/section6/room626.cpp
@@ -30,7 +30,24 @@ namespace Rooms {
 void Room626::init() {
 }
 
-void Room626::daemon() {
+void Room626::parser() {
+	Maze::parser();
+
+	if (player_said("journal", "SEAHORSE")) {
+		if (_G(flags)[V209]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6)
+				_G(flags)[V209] = 1;
+			sendWSMessage_multi(0);
+		}
+
+		_G(player).command_ready = false;
+	} else {
+		checkExitRight(627);
+		checkExitUp(631);
+		checkExitDown(620);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room626.h b/engines/m4/riddle/rooms/section6/room626.h
index 7cc399ac7b4..2d463f57af0 100644
--- a/engines/m4/riddle/rooms/section6/room626.h
+++ b/engines/m4/riddle/rooms/section6/room626.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM626_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM626_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room626 : public Room {
+class Room626 : public Maze {
 public:
-	Room626() : Room() {}
+	Room626() : Maze() {}
 	~Room626() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room627.cpp b/engines/m4/riddle/rooms/section6/room627.cpp
index d6f2a4bf4d2..013bb1fdcd8 100644
--- a/engines/m4/riddle/rooms/section6/room627.cpp
+++ b/engines/m4/riddle/rooms/section6/room627.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room627::init() {
 }
 
-void Room627::daemon() {
+void Room627::parser() {
+	Maze::parser();
+
+	checkExitLeft(626);
+	checkExitRight(628);
+	checkExitUp(632);
+	checkExitDown(621);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room627.h b/engines/m4/riddle/rooms/section6/room627.h
index f37547ffcfa..dd7a6ef5078 100644
--- a/engines/m4/riddle/rooms/section6/room627.h
+++ b/engines/m4/riddle/rooms/section6/room627.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM627_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM627_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room627 : public Room {
+class Room627 : public Maze {
 public:
-	Room627() : Room() {}
+	Room627() : Maze() {}
 	~Room627() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room628.cpp b/engines/m4/riddle/rooms/section6/room628.cpp
index 366e98780ab..c3edc10a315 100644
--- a/engines/m4/riddle/rooms/section6/room628.cpp
+++ b/engines/m4/riddle/rooms/section6/room628.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room628::init() {
 }
 
-void Room628::daemon() {
+void Room628::parser() {
+	Maze::parser();
+
+	checkExitLeft(627);
+	checkExitRight(629);
+	checkExitUp(633);
+	checkExitDown(622);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room628.h b/engines/m4/riddle/rooms/section6/room628.h
index ea2ee845315..37d054fb1b0 100644
--- a/engines/m4/riddle/rooms/section6/room628.h
+++ b/engines/m4/riddle/rooms/section6/room628.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM628_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM628_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room628 : public Room {
+class Room628 : public Maze {
 public:
-	Room628() : Room() {}
+	Room628() : Maze() {}
 	~Room628() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room629.cpp b/engines/m4/riddle/rooms/section6/room629.cpp
index 17ae37cbd03..f3536dabb22 100644
--- a/engines/m4/riddle/rooms/section6/room629.cpp
+++ b/engines/m4/riddle/rooms/section6/room629.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room629::init() {
 }
 
-void Room629::daemon() {
+void Room629::parser() {
+	Maze::parser();
+
+	checkExitLeft(628);
+	checkExitRight(630);
+	checkExitUp(634);
+	checkExitDown(623);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room629.h b/engines/m4/riddle/rooms/section6/room629.h
index 6c2524ab7ea..811bcb94f18 100644
--- a/engines/m4/riddle/rooms/section6/room629.h
+++ b/engines/m4/riddle/rooms/section6/room629.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM629_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM629_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room629 : public Room {
+class Room629 : public Maze {
 public:
-	Room629() : Room() {}
+	Room629() : Maze() {}
 	~Room629() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room630.cpp b/engines/m4/riddle/rooms/section6/room630.cpp
index 1f6a8521e43..8bfca3a44a0 100644
--- a/engines/m4/riddle/rooms/section6/room630.cpp
+++ b/engines/m4/riddle/rooms/section6/room630.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room630::init() {
 }
 
-void Room630::daemon() {
+void Room630::parser() {
+	Maze::parser();
+
+	checkExitLeft(629);
+	checkExitUp(635);
+	checkExitDown(624);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room630.h b/engines/m4/riddle/rooms/section6/room630.h
index 152e8de3b9c..e790090f24c 100644
--- a/engines/m4/riddle/rooms/section6/room630.h
+++ b/engines/m4/riddle/rooms/section6/room630.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM630_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM630_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room630 : public Room {
+class Room630 : public Maze {
 public:
-	Room630() : Room() {}
+	Room630() : Maze() {}
 	~Room630() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room631.cpp b/engines/m4/riddle/rooms/section6/room631.cpp
index f70580401bc..26bbc867ed9 100644
--- a/engines/m4/riddle/rooms/section6/room631.cpp
+++ b/engines/m4/riddle/rooms/section6/room631.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room631::init() {
 }
 
-void Room631::daemon() {
+void Room631::parser() {
+	Maze::parser();
+
+	checkExitRight(632);
+	checkExitUp(637);
+	checkExitDown(626);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room631.h b/engines/m4/riddle/rooms/section6/room631.h
index 4a4186c3988..8b945389196 100644
--- a/engines/m4/riddle/rooms/section6/room631.h
+++ b/engines/m4/riddle/rooms/section6/room631.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM631_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM631_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room631 : public Room {
+class Room631 : public Maze {
 public:
-	Room631() : Room() {}
+	Room631() : Maze() {}
 	~Room631() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room632.cpp b/engines/m4/riddle/rooms/section6/room632.cpp
index 6f823d82461..fa4d0f98f80 100644
--- a/engines/m4/riddle/rooms/section6/room632.cpp
+++ b/engines/m4/riddle/rooms/section6/room632.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room632::init() {
 }
 
-void Room632::daemon() {
+void Room632::parser() {
+	Maze::parser();
+
+	checkExitLeft(631);
+	checkExitRight(633);
+	checkExitUp(638);
+	checkExitDown(627);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room632.h b/engines/m4/riddle/rooms/section6/room632.h
index 129290cd8f9..5fe18dcc6c3 100644
--- a/engines/m4/riddle/rooms/section6/room632.h
+++ b/engines/m4/riddle/rooms/section6/room632.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM632_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM632_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room632 : public Room {
+class Room632 : public Maze {
 public:
-	Room632() : Room() {}
+	Room632() : Maze() {}
 	~Room632() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room633.cpp b/engines/m4/riddle/rooms/section6/room633.cpp
index ee31e8c3376..8875a548430 100644
--- a/engines/m4/riddle/rooms/section6/room633.cpp
+++ b/engines/m4/riddle/rooms/section6/room633.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room633::init() {
 }
 
-void Room633::daemon() {
+void Room633::parser() {
+	Maze::parser();
+
+	checkExitLeft(632);
+	checkExitRight(634);
+	checkExitUp(607);
+	checkExitDown(628);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room633.h b/engines/m4/riddle/rooms/section6/room633.h
index 5130f28c25c..40b787c4933 100644
--- a/engines/m4/riddle/rooms/section6/room633.h
+++ b/engines/m4/riddle/rooms/section6/room633.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM633_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM633_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room633 : public Room {
+class Room633 : public Maze {
 public:
-	Room633() : Room() {}
+	Room633() : Maze() {}
 	~Room633() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room634.cpp b/engines/m4/riddle/rooms/section6/room634.cpp
index 333bf946491..5a4748a5fbd 100644
--- a/engines/m4/riddle/rooms/section6/room634.cpp
+++ b/engines/m4/riddle/rooms/section6/room634.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room634::init() {
 }
 
-void Room634::daemon() {
+void Room634::parser() {
+	Maze::parser();
+
+	checkExitLeft(633);
+	checkExitRight(635);
+	checkExitUp(640);
+	checkExitDown(629);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room634.h b/engines/m4/riddle/rooms/section6/room634.h
index 2fe9e6d58ee..57224692c62 100644
--- a/engines/m4/riddle/rooms/section6/room634.h
+++ b/engines/m4/riddle/rooms/section6/room634.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM634_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM634_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room634 : public Room {
+class Room634 : public Maze {
 public:
-	Room634() : Room() {}
+	Room634() : Maze() {}
 	~Room634() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room635.cpp b/engines/m4/riddle/rooms/section6/room635.cpp
index 1022a5ea13b..aeccb5871f6 100644
--- a/engines/m4/riddle/rooms/section6/room635.cpp
+++ b/engines/m4/riddle/rooms/section6/room635.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room635::init() {
 }
 
-void Room635::daemon() {
+void Room635::parser() {
+	Maze::parser();
+
+	checkExitLeft(634);
+	checkExitRight(636);
+	checkExitUp(641);
+	checkExitDown(630);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room635.h b/engines/m4/riddle/rooms/section6/room635.h
index 8a3cdc399cb..4d0eaaaebd4 100644
--- a/engines/m4/riddle/rooms/section6/room635.h
+++ b/engines/m4/riddle/rooms/section6/room635.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM635_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM635_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room635 : public Room {
+class Room635 : public Maze {
 public:
-	Room635() : Room() {}
+	Room635() : Maze() {}
 	~Room635() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room636.cpp b/engines/m4/riddle/rooms/section6/room636.cpp
index dc77b8b8abe..e215271245e 100644
--- a/engines/m4/riddle/rooms/section6/room636.cpp
+++ b/engines/m4/riddle/rooms/section6/room636.cpp
@@ -30,7 +30,11 @@ namespace Rooms {
 void Room636::init() {
 }
 
-void Room636::daemon() {
+void Room636::parser() {
+	Maze::parser();
+
+	checkExitLeft(635);
+	checkExitUp(642);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room636.h b/engines/m4/riddle/rooms/section6/room636.h
index 4a86f7c3225..6168411a28e 100644
--- a/engines/m4/riddle/rooms/section6/room636.h
+++ b/engines/m4/riddle/rooms/section6/room636.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM636_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM636_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room636 : public Room {
+class Room636 : public Maze {
 public:
-	Room636() : Room() {}
+	Room636() : Maze() {}
 	~Room636() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room637.cpp b/engines/m4/riddle/rooms/section6/room637.cpp
index af20d1a120f..f557b19f785 100644
--- a/engines/m4/riddle/rooms/section6/room637.cpp
+++ b/engines/m4/riddle/rooms/section6/room637.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room637::init() {
 }
 
-void Room637::daemon() {
+void Room637::parser() {
+	Maze::parser();
+
+	checkExitRight(638);
+	checkExitUp(643);
+	checkExitDown(631);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room637.h b/engines/m4/riddle/rooms/section6/room637.h
index 9d4f160548c..23cddf5c0bf 100644
--- a/engines/m4/riddle/rooms/section6/room637.h
+++ b/engines/m4/riddle/rooms/section6/room637.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM637_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM637_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room637 : public Room {
+class Room637 : public Maze {
 public:
-	Room637() : Room() {}
+	Room637() : Maze() {}
 	~Room637() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room638.cpp b/engines/m4/riddle/rooms/section6/room638.cpp
index 0275e71e560..2a7436a6d93 100644
--- a/engines/m4/riddle/rooms/section6/room638.cpp
+++ b/engines/m4/riddle/rooms/section6/room638.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room638::init() {
 }
 
-void Room638::daemon() {
+void Room638::parser() {
+	Maze::parser();
+
+	checkExitLeft(637);
+	checkExitRight(607);
+	checkExitUp(644);
+	checkExitDown(632);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room638.h b/engines/m4/riddle/rooms/section6/room638.h
index ce09b387a7c..3e3e2118ad0 100644
--- a/engines/m4/riddle/rooms/section6/room638.h
+++ b/engines/m4/riddle/rooms/section6/room638.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM638_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM638_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room638 : public Room {
+class Room638 : public Maze {
 public:
-	Room638() : Room() {}
+	Room638() : Maze() {}
 	~Room638() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room640.cpp b/engines/m4/riddle/rooms/section6/room640.cpp
index aa8674b6e64..0f7b95545bf 100644
--- a/engines/m4/riddle/rooms/section6/room640.cpp
+++ b/engines/m4/riddle/rooms/section6/room640.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room640::init() {
 }
 
-void Room640::daemon() {
+void Room640::parser() {
+	Maze::parser();
+
+	checkExitLeft(607);
+	checkExitRight(641);
+	checkExitUp(646);
+	checkExitDown(634);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room640.h b/engines/m4/riddle/rooms/section6/room640.h
index 13e9e674e2c..1b038cdd41f 100644
--- a/engines/m4/riddle/rooms/section6/room640.h
+++ b/engines/m4/riddle/rooms/section6/room640.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM640_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM640_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room640 : public Room {
+class Room640 : public Maze {
 public:
-	Room640() : Room() {}
+	Room640() : Maze() {}
 	~Room640() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room641.cpp b/engines/m4/riddle/rooms/section6/room641.cpp
index fac67eabe8a..18ef54cbffa 100644
--- a/engines/m4/riddle/rooms/section6/room641.cpp
+++ b/engines/m4/riddle/rooms/section6/room641.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room641::init() {
 }
 
-void Room641::daemon() {
+void Room641::parser() {
+	Maze::parser();
+
+	checkExitLeft(640);
+	checkExitRight(642);
+	checkExitUp(647);
+	checkExitDown(635);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room641.h b/engines/m4/riddle/rooms/section6/room641.h
index ec1627fdb25..e5b7bc3c325 100644
--- a/engines/m4/riddle/rooms/section6/room641.h
+++ b/engines/m4/riddle/rooms/section6/room641.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM641_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM641_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room641 : public Room {
+class Room641 : public Maze {
 public:
-	Room641() : Room() {}
+	Room641() : Maze() {}
 	~Room641() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room642.cpp b/engines/m4/riddle/rooms/section6/room642.cpp
index 7bf3ce59099..5eec57f98b9 100644
--- a/engines/m4/riddle/rooms/section6/room642.cpp
+++ b/engines/m4/riddle/rooms/section6/room642.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room642::init() {
 }
 
-void Room642::daemon() {
+void Room642::parser() {
+	Maze::parser();
+
+	checkExitLeft(641);
+	checkExitUp(648);
+	checkExitDown(636);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room642.h b/engines/m4/riddle/rooms/section6/room642.h
index 1c121172bd9..6ee5152b2ef 100644
--- a/engines/m4/riddle/rooms/section6/room642.h
+++ b/engines/m4/riddle/rooms/section6/room642.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM642_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM642_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room642 : public Room {
+class Room642 : public Maze {
 public:
-	Room642() : Room() {}
+	Room642() : Maze() {}
 	~Room642() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room643.cpp b/engines/m4/riddle/rooms/section6/room643.cpp
index 5a8483d9bec..574467b3f59 100644
--- a/engines/m4/riddle/rooms/section6/room643.cpp
+++ b/engines/m4/riddle/rooms/section6/room643.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room643::init() {
 }
 
-void Room643::daemon() {
+void Room643::parser() {
+	Maze::parser();
+
+	checkExitRight(644);
+	checkExitUp(649);
+	checkExitDown(637);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room643.h b/engines/m4/riddle/rooms/section6/room643.h
index 17f50d8af5b..39722981af2 100644
--- a/engines/m4/riddle/rooms/section6/room643.h
+++ b/engines/m4/riddle/rooms/section6/room643.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM643_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM643_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room643 : public Room {
+class Room643 : public Maze {
 public:
-	Room643() : Room() {}
+	Room643() : Maze() {}
 	~Room643() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room644.cpp b/engines/m4/riddle/rooms/section6/room644.cpp
index 21b64dd415f..8fbf0ce47df 100644
--- a/engines/m4/riddle/rooms/section6/room644.cpp
+++ b/engines/m4/riddle/rooms/section6/room644.cpp
@@ -30,7 +30,24 @@ namespace Rooms {
 void Room644::init() {
 }
 
-void Room644::daemon() {
+void Room644::parser() {
+	Maze::parser();
+
+	if (player_said("journal", "SCALLOP")) {
+		if (_G(flags)[V207]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6)
+				_G(flags)[V207] = 1;
+			sendWSMessage_multi(0);
+		}
+
+		_G(player).command_ready = false;
+	} else {
+		checkExitLeft(643);
+		checkExitRight(645);
+		checkExitDown(638);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room644.h b/engines/m4/riddle/rooms/section6/room644.h
index 43f8cb6b608..4f3ddc85342 100644
--- a/engines/m4/riddle/rooms/section6/room644.h
+++ b/engines/m4/riddle/rooms/section6/room644.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM644_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM644_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room644 : public Room {
+class Room644 : public Maze {
 public:
-	Room644() : Room() {}
+	Room644() : Maze() {}
 	~Room644() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room645.cpp b/engines/m4/riddle/rooms/section6/room645.cpp
index d859e106c5e..35eda47dc0f 100644
--- a/engines/m4/riddle/rooms/section6/room645.cpp
+++ b/engines/m4/riddle/rooms/section6/room645.cpp
@@ -30,7 +30,12 @@ namespace Rooms {
 void Room645::init() {
 }
 
-void Room645::daemon() {
+void Room645::parser() {
+	Maze::parser();
+
+	checkExitLeft(644);
+	checkExitRight(646);
+	checkExitDown(607);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room645.h b/engines/m4/riddle/rooms/section6/room645.h
index edb12f64631..19ce3ca7fa0 100644
--- a/engines/m4/riddle/rooms/section6/room645.h
+++ b/engines/m4/riddle/rooms/section6/room645.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM645_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM645_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room645 : public Room {
+class Room645 : public Maze {
 public:
-	Room645() : Room() {}
+	Room645() : Maze() {}
 	~Room645() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room646.cpp b/engines/m4/riddle/rooms/section6/room646.cpp
index 87a2c9378fe..e4fd0e267ad 100644
--- a/engines/m4/riddle/rooms/section6/room646.cpp
+++ b/engines/m4/riddle/rooms/section6/room646.cpp
@@ -30,7 +30,13 @@ namespace Rooms {
 void Room646::init() {
 }
 
-void Room646::daemon() {
+void Room646::parser() {
+	Maze::parser();
+
+	checkExitLeft(645);
+	checkExitRight(647);
+	checkExitUp(650);
+	checkExitDown(640);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room646.h b/engines/m4/riddle/rooms/section6/room646.h
index 194aade8bdd..ed5d7e6adbe 100644
--- a/engines/m4/riddle/rooms/section6/room646.h
+++ b/engines/m4/riddle/rooms/section6/room646.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM646_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM646_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room646 : public Room {
+class Room646 : public Maze {
 public:
-	Room646() : Room() {}
+	Room646() : Maze() {}
 	~Room646() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room647.cpp b/engines/m4/riddle/rooms/section6/room647.cpp
index ab29d1ff9aa..81ab765fc5e 100644
--- a/engines/m4/riddle/rooms/section6/room647.cpp
+++ b/engines/m4/riddle/rooms/section6/room647.cpp
@@ -30,7 +30,38 @@ namespace Rooms {
 void Room647::init() {
 }
 
-void Room647::daemon() {
+void Room647::parser() {
+	Maze::parser();
+	checkExitLeft(646);
+	checkExitRight(648);
+	checkExitUp(651);
+
+	if (player_said("up2")) {
+		_G(flags)[V206] = 1;
+
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(1);
+			_G(player).command_ready = false;
+			break;
+
+		case 1:
+			digi_stop(1);
+			digi_stop(2);
+			adv_kill_digi_between_rooms(false);
+			digi_play_loop("950_s28", 3);
+			_G(game).setRoom(651);
+			_G(player).command_ready = false;
+			break;
+
+		default:
+			checkExitDown(641);
+			break;
+		}
+	} else {
+		checkExitDown(641);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room647.h b/engines/m4/riddle/rooms/section6/room647.h
index bee302ce500..7f4ab84363f 100644
--- a/engines/m4/riddle/rooms/section6/room647.h
+++ b/engines/m4/riddle/rooms/section6/room647.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM647_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM647_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room647 : public Room {
+class Room647 : public Maze {
 public:
-	Room647() : Room() {}
+	Room647() : Maze() {}
 	~Room647() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room648.cpp b/engines/m4/riddle/rooms/section6/room648.cpp
index 2e3a753c5a5..423e6786c3a 100644
--- a/engines/m4/riddle/rooms/section6/room648.cpp
+++ b/engines/m4/riddle/rooms/section6/room648.cpp
@@ -30,7 +30,10 @@ namespace Rooms {
 void Room648::init() {
 }
 
-void Room648::daemon() {
+void Room648::parser() {
+	Maze::parser();
+	checkExitLeft(647);
+	checkExitDown(642);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room648.h b/engines/m4/riddle/rooms/section6/room648.h
index 3dce08e9754..7c37e1bb310 100644
--- a/engines/m4/riddle/rooms/section6/room648.h
+++ b/engines/m4/riddle/rooms/section6/room648.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM648_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM648_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room648 : public Room {
+class Room648 : public Maze {
 public:
-	Room648() : Room() {}
+	Room648() : Maze() {}
 	~Room648() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room649.cpp b/engines/m4/riddle/rooms/section6/room649.cpp
index 03ec13003ff..df08416d129 100644
--- a/engines/m4/riddle/rooms/section6/room649.cpp
+++ b/engines/m4/riddle/rooms/section6/room649.cpp
@@ -30,7 +30,9 @@ namespace Rooms {
 void Room649::init() {
 }
 
-void Room649::daemon() {
+void Room649::parser() {
+	Maze::parser();
+	checkExitDown(643);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room649.h b/engines/m4/riddle/rooms/section6/room649.h
index f0d6a07a957..9c7b553eafe 100644
--- a/engines/m4/riddle/rooms/section6/room649.h
+++ b/engines/m4/riddle/rooms/section6/room649.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM649_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM649_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room649 : public Room {
+class Room649 : public Maze {
 public:
-	Room649() : Room() {}
+	Room649() : Maze() {}
 	~Room649() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room650.cpp b/engines/m4/riddle/rooms/section6/room650.cpp
index ca830a3c829..fe56c183d89 100644
--- a/engines/m4/riddle/rooms/section6/room650.cpp
+++ b/engines/m4/riddle/rooms/section6/room650.cpp
@@ -30,7 +30,10 @@ namespace Rooms {
 void Room650::init() {
 }
 
-void Room650::daemon() {
+void Room650::parser() {
+	Maze::parser();
+	checkExitRight(651);
+	checkExitDown(646);
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room650.h b/engines/m4/riddle/rooms/section6/room650.h
index 56ce737b038..aa2106942ad 100644
--- a/engines/m4/riddle/rooms/section6/room650.h
+++ b/engines/m4/riddle/rooms/section6/room650.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM650_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM650_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room650 : public Room {
+class Room650 : public Maze {
 public:
-	Room650() : Room() {}
+	Room650() : Maze() {}
 	~Room650() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room651.cpp b/engines/m4/riddle/rooms/section6/room651.cpp
index e5b4efca628..7f760414516 100644
--- a/engines/m4/riddle/rooms/section6/room651.cpp
+++ b/engines/m4/riddle/rooms/section6/room651.cpp
@@ -30,7 +30,23 @@ namespace Rooms {
 void Room651::init() {
 }
 
-void Room651::daemon() {
+void Room651::parser() {
+	Maze::parser();
+
+	if (player_said("journal", "SHARK'S TOOTH")) {
+		if (_G(flags)[V201]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6)
+				_G(flags)[V201] = 1;
+			sendWSMessage_multi(0);
+		}
+
+		_G(player).command_ready = false;
+	} else {
+		checkExitLeft(650);
+		checkExitDown(647);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room651.h b/engines/m4/riddle/rooms/section6/room651.h
index 2909143cd4b..d3d0c13a480 100644
--- a/engines/m4/riddle/rooms/section6/room651.h
+++ b/engines/m4/riddle/rooms/section6/room651.h
@@ -22,19 +22,19 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION6_ROOM651_H
 #define M4_RIDDLE_ROOMS_SECTION6_ROOM651_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section6/section6_maze.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room651 : public Room {
+class Room651 : public Maze {
 public:
-	Room651() : Room() {}
+	Room651() : Maze() {}
 	~Room651() override {}
 
 	void init() override;
-	void daemon() override;
+	void parser() override;
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/section6_maze.cpp b/engines/m4/riddle/rooms/section6/section6_maze.cpp
new file mode 100644
index 00000000000..91b1a91a534
--- /dev/null
+++ b/engines/m4/riddle/rooms/section6/section6_maze.cpp
@@ -0,0 +1,100 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/ },.
+ *
+ */
+
+#include "m4/riddle/rooms/section6/section6_maze.h"
+#include "m4/graphics/gr_series.h"
+#include "m4/riddle/vars.h"
+
+namespace M4 {
+namespace Riddle {
+namespace Rooms {
+
+void Maze::preload() {
+	_G(player).walker_type = 1;
+	_G(player).shadow_type = 1;
+}
+
+void Maze::daemon() {
+	if (_G(kernel).trigger == 1) {
+		player_set_commands_allowed(true);
+	}
+}
+
+void Maze::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool takeFlag = player_said("take");
+
+	if (player_said("gear") && player_said("STATUE")) {
+		digi_play("623R02", 1, 255, -1, 623);
+	} else if (lookFlag && player_said("RED BOULDER")) {
+		digi_play("623R01", 1, 255, -1, 623);
+	} else if (lookFlag && player_said_any("GREY ROCK", "STONE")) {
+		digi_play("623R03", 1);
+	} else if (lookFlag && player_said("CLAY")) {
+		digi_play("623R04", 1);
+	} else if (lookFlag && player_said(" ")) {
+		digi_play("623R05", 1);
+	} else if (lookFlag && player_said("STARFISH")) {
+		digi_play("625R01", 1);
+	} else if (lookFlag && player_said("SEAHORSE")) {
+		digi_play("626R01", 1);
+	} else if (lookFlag && player_said("SCALLOP")) {
+		digi_play("644R01", 1);
+	} else if (lookFlag && player_said("SHARK'S TOOTH")) {
+		digi_play("651R01", 1);
+	} else if (takeFlag && player_said("clay")) {
+		digi_play("607r08", 1);
+	} else if (player_said("HORN/PULL CORD/WATER", "CLAY")) {
+		digi_play("com136", 1, 255, -1, 997);
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Maze::checkExit(const char *action, int newRoom) {
+	if (player_said(action)) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(1);
+			_G(player).command_ready = false;
+			break;
+
+		case 1:
+			digi_stop(1);
+			digi_stop(2);
+			adv_kill_digi_between_rooms(false);
+			digi_play_loop("950_s28C", 3, 90);
+			_G(game).setRoom(newRoom);
+			_G(player).command_ready = false;
+			break;
+
+		default:
+			break;
+		}
+	}
+}
+
+} // namespace Rooms
+} // namespace Riddle
+} // namespace M4
diff --git a/engines/m4/riddle/rooms/section6/section6_maze.h b/engines/m4/riddle/rooms/section6/section6_maze.h
new file mode 100644
index 00000000000..5b427b5f96d
--- /dev/null
+++ b/engines/m4/riddle/rooms/section6/section6_maze.h
@@ -0,0 +1,62 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef M4_RIDDLE_ROOMS_SECTION6_MAZE_H
+#define M4_RIDDLE_ROOMS_SECTION6_MAZE_H
+
+#include "m4/riddle/rooms/room.h"
+
+namespace M4 {
+namespace Riddle {
+namespace Rooms {
+
+class Maze : public Room {
+private:
+	void checkExit(const char *action, int newRoom);
+
+protected:
+	void checkExitLeft(int newRoom) {
+		checkExit("exit left", newRoom);
+	}
+	void checkExitRight(int newRoom) {
+		checkExit("exit right", newRoom);
+	}
+	void checkExitUp(int newRoom) {
+		checkExit("exit up", newRoom);
+	}
+	void checkExitDown(int newRoom) {
+		checkExit("exit down", newRoom);
+	}
+
+public:
+	Maze() : Room() {}
+	~Maze() override {}
+
+	void preload() override;
+	void daemon() override;
+	void parser() override;
+};
+
+} // namespace Rooms
+} // namespace Riddle
+} // namespace M4
+
+#endif




More information about the Scummvm-git-logs mailing list