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

dreammaster noreply at scummvm.org
Mon Oct 7 05:41:35 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:
6228ff031d M4: RIDDLE: In progress global_parser_code
e07fa89391 M4: RIDDLE: More global parser


Commit: 6228ff031db5d9949115ab63d47b23107fdba801
    https://github.com/scummvm/scummvm/commit/6228ff031db5d9949115ab63d47b23107fdba801
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-06T21:05:15-07:00

Commit Message:
M4: RIDDLE: In progress global_parser_code

Changed paths:
    engines/m4/core/rooms.h
    engines/m4/riddle/riddle.cpp
    engines/m4/riddle/riddle.h
    engines/m4/riddle/rooms/room.h


diff --git a/engines/m4/core/rooms.h b/engines/m4/core/rooms.h
index c4bfe7e166c..2f073f297c0 100644
--- a/engines/m4/core/rooms.h
+++ b/engines/m4/core/rooms.h
@@ -165,7 +165,7 @@ public:
 	}
 
 	virtual void global_daemon() = 0;
-	virtual void global_pre_parser() = 0;
+	virtual void global_pre_parser() {}
 	virtual void global_parser() = 0;
 
 	void global_error_code() {
diff --git a/engines/m4/riddle/riddle.cpp b/engines/m4/riddle/riddle.cpp
index 5e7d0672e3f..517fb8058bd 100644
--- a/engines/m4/riddle/riddle.cpp
+++ b/engines/m4/riddle/riddle.cpp
@@ -69,13 +69,137 @@ void RiddleEngine::global_daemon() {
 		_G(game).setRoom(494);
 }
 
-void RiddleEngine::global_pre_parser() {
-	// TODO
+void RiddleEngine::global_parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool talkFlag = player_said_any("talk", "talk to");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+	bool npcFlag = player_said("MEI CHEN") ||
+		player_said("FENG LI") ||
+		player_said("TWELVETREES") ||
+		player_said("WOLF") ||
+		player_said("PERSON IN PIT") ||
+		player_said("TWELVETREES ") ||
+		player_said("OLD WOMAN") ||
+		player_said("OLD LADY") ||
+		player_said("AGENT") ||
+		player_said("BUTLER") ||
+		player_said("ACOLYTE") ||
+		player_said("OFFICIAL") ||
+		player_said("GATEKEEPER") ||
+		player_said("PEASANT") ||
+		player_said("ACOLYTE") ||
+		player_said("MENENDEZ") ||
+		player_said("GUARD") ||
+		player_said("FARMER");
+	bool combineFlag = inv_player_has(_G(player).verb) &&
+		inv_player_has(_G(player).noun);
+	bool splitFlag = useFlag && inv_player_has(_G(player).noun);
+
+	if (npcFlag && inv_player_has(_G(player).verb)) {
+		digi_play("com017", 1);
+	} else if (npcFlag && player_said("TURTLE")) {
+		digi_play("305r19b", 1);
+
+	} else if (combineFlag && player_said("WHALE BONE HORN", "PULL CORD")) {
+		combineItems("HORN/PULL CORD");
+	} else if (combineFlag && player_said("CIGAR WITHOUT BAND", "CIGAR BAND")) {
+		combineItems("CIGAR");
+	} else if (combineFlag && player_said("WOODEN LADDER", "ROPE")) {
+		combineItems("LADDER/ROPE");
+	} else if (combineFlag && player_said("GREEN VINE", "WOODEN LADDER")) {
+		combineItems("LADDER/GREEN VINE");
+	} else if (combineFlag && player_said("GREEN VINE", "WOODEN LADDER")) {
+		combineItems("LADDER/GREEN VINE");
+	} else if (combineFlag && player_said("BROWN VINE", "WOODEN LADDER")) {
+		combineItems("LADDER/BROWN VINE");
+	} else if (combineFlag && player_said("VINES", "WOODEN LADDER")) {
+		combineItems("LADDER/VINES");
+	} else if (combineFlag && player_said("BROWN VINE", "GREEN VINE")) {
+		combineItems("VINES");
+
+	} else if (takeFlag && player_said_any("statue", "statue ")) {
+		digi_play("608r22", 1);
+	} else if (splitFlag && player_said("HORN/PULL CORD")) {
+		splitItems("WHALE BONE HORN", "PULL CORD");
+	} else if (splitFlag && player_said("LADDER/ROPE")) {
+		splitItems("WOODEN LADDER", "ROPE");
+	} else if (splitFlag && player_said("CIGAR")) {
+		splitItems("CIGAR BAND", "CIGAR WITHOUT BAND");
+	} else if (splitFlag && player_said("LADDER/GREEN VINE")) {
+		splitItems("WOODEN LADDER", "GREEN VINE");
+	} else if (splitFlag && player_said("LADDER/BROWN VINE")) {
+		splitItems("WOODEN LADDER", "BROWN VINE");
+	} else if (splitFlag && player_said("ENVELOPE")) {
+		splitItems("VON SELTSAM'S NOTE", "POSTAGE STAMP");
+		kernel_examine_inventory_object("PING VON SELTSAM'S NOTE",
+			5, 1, 270, 150, 10000, "406R18C");
+	} else if (splitFlag && player_said("LADDER/VINES")) {
+		splitItems("WOODEN LADDER", "VINES");
+	} else if (splitFlag && player_said("VINES")) {
+		splitItems("GREEN VINE", "BROWN VINE");
+	} else if (splitFlag && player_said("POST MARKED ENVELOPE")) {
+		inv_move_object("POST MARKED ENVELOPE", NOWHERE);
+		inv_give_to_player("VON SELTSAM'S LETTER");
+		Common::strcpy_s(_G(player).noun, "VON SELTSAM'S LETTER");
+
+	} else if (player_said_any("LIGHTER", "LIT LIGHTER") && player_said("TURTLE")) {
+		digi_play("com090a", 1);
+	} else if (useFlag && HAS("LIGHTER")) {
+		inv_move_object("LIGHTER", NOWHERE);
+		inv_give_to_player("LIT LIGHTER");
+		digi_play("604_s01", 2);
+	} else if (useFlag && HAS("LIT LIGHTER")) {
+		inv_move_object("LIT LIGHTER", NOWHERE);
+		inv_give_to_player("LIGHTER");
+	} else if (useFlag && player_said_any("URN", "URN ") &&
+			_G(game).room_id != 802 && _G(game).room_id != 403) {
+		digi_play("COM072", 1, 255, -1, 997);
+	} else if (useFlag && player_said("UNLIT URN")) {
+		digi_play("COM073", 1, 255, -1, 997);
+
+	} else if (!player_said("journal", " ") &&
+			!player_said("journal", "tower") &&
+			!player_said("journal", "tower ") &&
+			!player_said("journal", "dome") &&
+			!player_said("journal", "observatory dome") &&
+			!player_said("journal", "terrace") &&
+			!takeFlag && !lookFlag && inv_player_has(_G(player).noun) &&
+			_G(game).room_id >= 504 && _G(game).room_id <= 510 &&
+			_G(game).room_id != 507) {
+		if (_G(flags)[kMocaMocheCartoon]) {
+			digi_play("COM029", 1, 255, -1, 997);
+		} else {
+			if (_G(kernel).trigger == 6) {
+				_G(flags)[V089] = 1;
+				_G(flags)[kMocaMocheCartoon] = 1;
+			}
+			
+			sendWSMessage_multi("COM028");
+		}
+	}
+
+	// TODO: More stuff
+	else if (talkFlag) {
+
+	}
 }
 
-void RiddleEngine::global_parser() {
-	_G(kernel).trigger_mode = KT_DAEMON;
-	// TODO
+void RiddleEngine::combineItems(const char *newItem) {
+	inv_move_object(_G(player).verb, NOWHERE);
+	inv_move_object(_G(player).noun, NOWHERE);
+	inv_give_to_player(newItem);
+}
+
+void RiddleEngine::splitItems(const char *item1, const char *item2) {
+	inv_move_object(_G(player).noun, NOWHERE);
+	inv_give_to_player(item1);
+	inv_give_to_player(item2);
+}
+
+void RiddleEngine::sendWSMessage_multi(const char *name) {
+	Rooms::Room *room = static_cast<Rooms::Room *>(_activeRoom);
+	room->sendWSMessage_multi(name);
 }
 
 } // namespace Riddle
diff --git a/engines/m4/riddle/riddle.h b/engines/m4/riddle/riddle.h
index 57f0bd9cfd0..fc3ebc412ea 100644
--- a/engines/m4/riddle/riddle.h
+++ b/engines/m4/riddle/riddle.h
@@ -47,6 +47,21 @@ private:
 	Rooms::Section8 _section8;
 	Rooms::Section9 _section9;
 
+	/**
+	 * Combines the items in the player _verb and _noun,
+	 * removing them from the player's inventory and replacing
+	 * them with the new combined item.
+	 * @param newItem	New item to give to player
+	 */
+	void combineItems(const char *newItem);
+
+	/**
+	 * Splits apart a combined item
+	*/
+	void splitItems(const char *item1, const char *item2);
+
+	void sendWSMessage_multi(const char *name);
+
 protected:
 	/**
 	 * Creates the structure that holds all the global variables
@@ -70,7 +85,6 @@ public:
 	void syncFlags(Common::Serializer &s) override;
 
 	void global_daemon() override;
-	void global_pre_parser() override;
 	void global_parser() override;
 };
 
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 27d6a0adab2..81fd89918e8 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -114,7 +114,6 @@ protected:
 
 	void sendWSMessage_29a0000(machine *recv, int val1);
 	void sendWSMessage_29a0000(int val1);
-	void sendWSMessage_multi(const char *name);
 
 	/**
 	 * Get the number of key items placed in room 305 (display room)
@@ -141,6 +140,8 @@ public:
 	~Room() override {}
 
 	void preload() override;
+
+	void sendWSMessage_multi(const char *name);
 };
 
 } // namespace Rooms


Commit: e07fa893918c2905021dafe3ad5541c91865a8ec
    https://github.com/scummvm/scummvm/commit/e07fa893918c2905021dafe3ad5541c91865a8ec
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-06T22:41:22-07:00

Commit Message:
M4: RIDDLE: More global parser

Changed paths:
  A engines/m4/riddle/triggers.cpp
  A engines/m4/riddle/triggers.h
    engines/m4/module.mk
    engines/m4/riddle/riddle.cpp
    engines/m4/riddle/riddle.h
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/vars.h
    engines/m4/riddle/walker.h


diff --git a/engines/m4/module.mk b/engines/m4/module.mk
index 0368ff8efd1..e72c853dcb8 100644
--- a/engines/m4/module.mk
+++ b/engines/m4/module.mk
@@ -314,6 +314,7 @@ MODULE_OBJS = \
 	riddle/flags.o \
 	riddle/hotkeys.o \
 	riddle/inventory.o \
+	riddle/triggers.o \
 	riddle/vars.o \
 	riddle/walker.o
 
diff --git a/engines/m4/riddle/riddle.cpp b/engines/m4/riddle/riddle.cpp
index 517fb8058bd..0a1914588dc 100644
--- a/engines/m4/riddle/riddle.cpp
+++ b/engines/m4/riddle/riddle.cpp
@@ -21,8 +21,10 @@
 
 #include "common/debug.h"
 #include "m4/riddle/riddle.h"
+#include "m4/riddle/triggers.h"
 #include "m4/riddle/console.h"
 #include "m4/riddle/vars.h"
+#include "m4/adv_r/other.h"
 #include "m4/core/errors.h"
 #include "m4/console.h"
 
@@ -177,12 +179,132 @@ void RiddleEngine::global_parser() {
 			
 			sendWSMessage_multi("COM028");
 		}
-	}
+	} else if ((player_said("journal", " ") || player_said("journal", "temple")) &&
+			!takeFlag && !lookFlag && !inv_player_has(_G(player).noun) &&
+			_G(game).room_id >= 702 && _G(game).room_id <= 799) {
+		if (_G(flags)[kTempleCartoon]) {
+			digi_play("com033", 1);
+		} else {
+			if (_G(kernel).trigger == 6) {
+				_G(flags)[kTempleCartoon] = 1;
+				_G(flags)[V089] = 1;
+			}
 
-	// TODO: More stuff
-	else if (talkFlag) {
+			sendWSMessage_multi("com032");
+		}
+	} else if (player_said("journal") && player_said_any(" ", "lava") &&
+			!takeFlag && !lookFlag && !inv_player_has(_G(player).noun) &&
+			_G(game).room_id >= 601 && _G(game).room_id <= 699) {
+		if (_G(flags)[kEasterIslandCartoon]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6) {
+				_G(flags)[kEasterIslandCartoon] = 1;
+				_G(flags)[V089] = 1;
+			}
+
+			sendWSMessage_multi("605r13");
+		}
+	} else if ((player_said("journal", "romanov emerald") ||
+			player_said("journal", "emerald/cork")) &&
+			!takeFlag && !lookFlag) {
+		if (_G(flags)[kEmeraldCartoon]) {
+			digi_play("407r33", 1);
+		} else {
+			if (_G(kernel).trigger == 6) {
+				_G(flags)[kEmeraldCartoon] = 1;
+				_G(flags)[V089] = 1;
+			}
 
+			sendWSMessage_multi(nullptr);
+		}
+	} else if (player_said("journal", "rongorongo tablet") &&
+			!takeFlag && !lookFlag) {
+		if (_G(flags)[V288]) {
+			digi_play("com086", 1, 255, -1, 997);
+		} else {
+			if (_G(kernel).trigger == 6) {
+				_G(flags)[V288] = 1;
+			}
+
+			sendWSMessage_multi(nullptr);
+		}
+
+	} else if (lookFlag && player_said("JOURNAL")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			disable_player_commands_and_fade_init(1111);
+			break;
+		case 1111:
+			other_save_game_for_resurrection();
+			_G(game).setRoom(996);
+			break;
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said("MEI CHEN")) {
+		digi_play("com043", 1);
+	} else if (lookFlag && player_said("feng li")) {
+		digi_play("com139", 1, 255, -1, 997);
+	} else if ((player_said("SHRUNKEN HEAD") ||
+			player_said("INCENSE BURNER") ||
+			player_said("CRYSTAL SKULL") ||
+			player_said("WHALE BONE HORN") ||
+			player_said("WHEELED TOY") ||
+			player_said("SILVER BUTTERFLY") ||
+			player_said("REBUS AMULET") ||
+			player_said("CHISEL") ||
+			player_said("GERMAN BANKNOTE") ||
+			player_said("POSTAGE STAMP") ||
+			player_said("STICK AND SHELL MAP") ||
+			player_said("ROMANOV EMERALD")) &&
+			player_said("agent")) {
+		digi_play("com021", 1, 255, -1, 997);
+	} else if (!lookFlag && !takeFlag && !useFlag && !talkFlag &&
+			player_said("AGENT")) {
+		if (player_said_any("US DOLLARS", "CHINESE YUAN", "POMERANIAN MARKS",
+			"PERUVIAN INTI", "GERMAN BANKNOTE", "SIKKIMESE RUPEE")) {
+			digi_play("COM012", 1, 255, -1, 997);
+		} else {
+			digi_play("COM017", 1, 255, -1, 997);
+		}
+	} else if ((lookFlag || useFlag) && player_said("MESSAGE LOG")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			showMessageLog(7777);
+			break;
+		case 1:
+			player_update_info();
+			_ripReadTelegram = series_load("RIP TREK READS TELEGRAM POS5");
+			setGlobals1(_ripReadTelegram, 1, 20, 20, 31, 2);
+			sendWSMessage_110000(2);
+			break;
+		case 2:
+			if (_G(player).walker_in_this_scene && _G(flags)[V292])
+				sendWSMessage_190000(12);
+
+			if (_G(flags)[V349] < 14) {
+				static const char *DIGI[14] = {
+					"201r26", "301r18", "301r19", "301r20", "301r21",
+					"201r61c","401R31", "401R37", "401r38", "401r39",
+					"501R02", "501R03", "701R39", "401R36"
+				};
+				digi_play(DIGI[_G(flags)[V349]], 1, 255, 3);
+			}
+			break;
+		case 3:
+			if (_G(player).walker_in_this_scene) {
+				// TODO
+			}
+			break;
+		default:
+			break;
+		}
 	}
+
+
+	// TODO: More stuff
 }
 
 void RiddleEngine::combineItems(const char *newItem) {
@@ -197,9 +319,9 @@ void RiddleEngine::splitItems(const char *item1, const char *item2) {
 	inv_give_to_player(item2);
 }
 
-void RiddleEngine::sendWSMessage_multi(const char *name) {
-	Rooms::Room *room = static_cast<Rooms::Room *>(_activeRoom);
-	room->sendWSMessage_multi(name);
+void RiddleEngine::showMessageLog(int trigger) {
+	// TODO
+	warning("TODO: showMessageLog");
 }
 
 } // namespace Riddle
diff --git a/engines/m4/riddle/riddle.h b/engines/m4/riddle/riddle.h
index fc3ebc412ea..7f7fa7dd0f2 100644
--- a/engines/m4/riddle/riddle.h
+++ b/engines/m4/riddle/riddle.h
@@ -46,6 +46,7 @@ private:
 	Rooms::Section7 _section7;
 	Rooms::Section8 _section8;
 	Rooms::Section9 _section9;
+	int _ripReadTelegram = 0;
 
 	/**
 	 * Combines the items in the player _verb and _noun,
@@ -60,7 +61,7 @@ private:
 	*/
 	void splitItems(const char *item1, const char *item2);
 
-	void sendWSMessage_multi(const char *name);
+	void showMessageLog(int trigger);
 
 protected:
 	/**
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index dcfe8459364..723e19f212c 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -167,398 +167,6 @@ void Room::setFlag45() {
 	_G(flags)[V045] = 1;
 }
 
-void Room::setGlobals1(int val1, int val2, int val3, int val4, int val5,
-		int val6, int val7, int val8, int val9, int val10,
-		int val11, int val12, int val13, int val14, int val15,
-		int val16, int val17, int val18, int val19, int val20,
-		int val21) {
-	_G(globals)[GLB_TEMP_1] = val1 << 24;
-	_G(globals)[GLB_TEMP_2] = val2 << 16;
-	_G(globals)[GLB_TEMP_3] = val3 << 16;
-	_G(globals)[GLB_TEMP_4] = val4 << 16;
-	_G(globals)[GLB_TEMP_5] = val5 << 16;
-	_G(globals)[GLB_TEMP_6] = val6 << 16;
-	_G(globals)[GLB_TEMP_7] = val7 << 16;
-	_G(globals)[GLB_TEMP_8] = val8 << 16;
-	_G(globals)[GLB_TEMP_9] = val9 << 16;
-	_G(globals)[GLB_TEMP_10] = val10 << 16;
-	_G(globals)[GLB_TEMP_11] = val11 << 16;
-	_G(globals)[GLB_TEMP_12] = val12 << 16;
-	_G(globals)[GLB_TEMP_13] = val13 << 16;
-	_G(globals)[GLB_TEMP_14] = val14 << 16;
-	_G(globals)[V021] = val15 << 16;
-	_G(globals)[V022] = val16 << 16;
-	_G(globals)[V024] = val17 << 16;
-	_G(globals)[V025] = val18 << 16;
-	_G(globals)[V026] = val19 << 16;
-	_G(globals)[V027] = val20 << 16;
-	_G(globals)[V028] = val21 << 16;
-}
-
-void Room::setGlobals3(int series, int val1, int val2) {
-	_G(globals)[GLB_TEMP_1] = series << 24;
-	_G(globals)[GLB_TEMP_2] = val1 << 16;
-	_G(globals)[GLB_TEMP_3] = val2 << 16;
-}
-
-void Room::setGlobals4(int val1, int val2, int val3, int val4) {
-	_G(globals)[GLB_TEMP_1] = val1;
-	_G(globals)[GLB_TEMP_2] = val2;
-	_G(globals)[GLB_TEMP_3] = val3;
-	_G(globals)[GLB_TEMP_4] = val4;
-}
-
-void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
-		int val4, int trigger, int val9, int val6, int val7, int val8) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[GLB_TEMP_1] = val1 << 16;
-	_G(globals)[GLB_TEMP_2] = val2 << 16;
-	_G(globals)[GLB_TEMP_3] = val3 << 16;
-	_G(globals)[GLB_TEMP_4] = val4 << 16;
-	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
-	_G(globals)[GLB_TEMP_6] = val6 << 16;
-	_G(globals)[GLB_TEMP_7] = val7 << 16;
-	_G(globals)[GLB_TEMP_8] = val8 << 16;
-	_G(globals)[GLB_TEMP_9] = val9 << 24;
-
-	sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
-		int trigger, int val4) {
-	int val = ((val2 << 16) - _G(globals)[V002]) *_G(globals)[V006] +
-		_G(globals)[V004];
-
-	_G(globals)[GLB_TEMP_1] = val1 << 16;
-	_G(globals)[GLB_TEMP_2] = val2 << 16;
-	_G(globals)[GLB_TEMP_3] = val;
-	_G(globals)[GLB_TEMP_4] = (val3 > 0) ? val3 : 0xffff0000;
-	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
-	_G(globals)[GLB_TEMP_6] = val4 << 16;
-
-	sendWSMessage(0x10000, 0, recv, 0, nullptr, 1);
-}
-
-machine *Room::triggerMachineByHash_3000(int val1, int val2, const int16 * normalDirs,
-		const int16 * shadowDirs, int val3, int val4, int val5,
-		MessageCB intrMsg, const char *machName) {
-#if 0
-	static const byte NUMS[14] = { 0, 0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 0 };
-	byte  nums[14];
-	Common::copy(NUMS, NUMS + 14, nums);
-
-	_G(globals)[GLB_TEMP_1] = val2 << 16;
-	_G(globals)[GLB_TEMP_2] = val1 << 24;
-	_G(globals)[GLB_TEMP_3] = val3
-#else
-	error("sendWSMessage_3000");
-#endif
-}
-
-void Room::sendWSMessage_60000(machine *mach) {
-	sendWSMessage(0x60000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_80000(machine *mach) {
-	sendWSMessage(0x80000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_B0000(machine *mach, int trigger) {
-
-}
-
-void Room::sendWSMessage_B0000(int trigger) {
-	sendWSMessage_B0000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_C0000(machine *mach, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
-	sendWSMessage(0xC0000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_C0000(int trigger) {
-	sendWSMessage_C0000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_D0000(machine *mach) {
-	sendWSMessage(0xd0000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_D0000() {
-	sendWSMessage_D0000(_G(my_walker));
-}
-
-void Room::sendWSMessage_E0000(machine *mach) {
-	sendWSMessage(0xe0000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_E0000() {
-	sendWSMessage_E0000(_G(my_walker));
-}
-
-void Room::sendWSMessage_F0000(machine *mach, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[GLB_TEMP_4] = kernel_trigger_create(trigger);
-	sendWSMessage(0xf0000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_F0000(int trigger) {
-	sendWSMessage_F0000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_110000(machine *mach, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-	sendWSMessage(0x110000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_110000(int trigger) {
-	sendWSMessage_110000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_120000(machine *mach, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-	sendWSMessage(0x120000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_120000(int trigger) {
-	sendWSMessage_120000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_130000(machine *recv, int val1) {
-	if (val1 == 0)
-		val1 = -1;
-
-	_G(globals)[V023] = kernel_trigger_create(val1);
-	sendWSMessage(0x130000, 0, recv, 0, 0, 1);
-}
-
-void Room::sendWSMessage_130000(int val1) {
-	sendWSMessage_130000(_G(my_walker), val1);
-}
-
-void Room::sendWSMessage_140000(machine *mach, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-	sendWSMessage(0x140000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_140000(int trigger) {
-	sendWSMessage_140000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_150000(machine *mach, int trigger) {
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-	sendWSMessage(0x150000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_150000(int trigger) {
-	sendWSMessage_150000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_160000(machine *mach, int val1, int trigger) {
-	if (!trigger)
-		trigger = -1;
-
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-	_G(globals)[V024] = val1 << 16;
-	sendWSMessage(0x160000, 0, mach, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_160000(int val1, int trigger) {
-	sendWSMessage_160000(_G(my_walker), val1, trigger);
-}
-
-void Room::sendWSMessage_180000(machine *recv, int trigger) {
-	if (!trigger)
-		trigger = -1;
-	_G(globals)[V023] = kernel_trigger_create(trigger);
-
-	sendWSMessage(0x180000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_180000(int trigger) {
-	sendWSMessage_180000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_190000(machine *recv, int trigger) {
-	_G(globals)[V023] = trigger << 16;
-	sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_190000(int trigger) {
-	sendWSMessage_190000(_G(my_walker), trigger);
-}
-
-void Room::sendWSMessage_1a0000(machine *recv, int trigger) {
-	_G(globals)[V024] = trigger << 16;
-	sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_1e0000(machine *recv, int val1, int val2) {
-	_G(globals)[V023] = val1 << 16;
-	_G(globals)[V024] = val2 << 16;
-	sendWSMessage(0x1e0000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_1e0000(int val1, int val2) {
-	sendWSMessage_1e0000(_G(my_walker), val1, val2);
-}
-
-void Room::sendWSMessage_1f0000(machine *recv, int val1, int val2) {
-	_G(globals)[V023] = val1 << 16;
-	_G(globals)[V024] = val2 << 16;
-	sendWSMessage(0x1f0000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_1f0000(int val1, int val2) {
-	sendWSMessage_1f0000(_G(my_walker), val1, val2);
-}
-
-void Room::sendWSMessage_200000(machine *recv, int trigger) {
-	_G(globals)[V023] = (trigger << 16) / 100;
-	sendWSMessage(0x200000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_210000(machine *recv, int trigger) {
-	_G(globals)[V023] = (trigger << 16) / 100;
-	sendWSMessage(0x210000, 0, recv, 0, nullptr, 1);
-}
-
-void Room::sendWSMessage_29a0000(machine *recv, int val1) {
-	_G(globals)[GLB_TEMP_1] = val1 << 24;
-	sendWSMessage(0x29a0000, 0, recv, 0, 0, 1);
-}
-
-void Room::sendWSMessage_29a0000(int val1) {
-	sendWSMessage_29a0000(_G(my_walker), val1);
-}
-
-void Room::sendWSMessage_multi(const char *name) {
-	int vSI = 0, vCX = 0;
-
-	switch (_G(kernel).trigger) {
-	case -1:
-	case 8:
-		player_update_info();
-
-		switch (_G(player_info).facing) {
-		case 1:
-		case 2:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 2);
-			break;
-
-		case 3:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 3);
-			break;
-
-		case 4:
-		case 5:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 4);
-			break;
-
-		case 7:
-		case 8:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 8);
-			break;
-
-		case 9:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 9);
-			break;
-
-		case 10:
-		case 11:
-			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 10);
-			break;
-
-		default:
-			break;
-		}
-
-		player_set_commands_allowed(false);
-		break;
-
-	case 1:
-		player_update_info();
-		digi_preload("950_s34");
-
-		switch (_G(player_info).facing) {
-		case 2:
-		case 10:
-			vCX = 39;
-			vSI = 17;
-			_ripSketching = series_load("RIP SKETCHING IN NOTEBOOK POS 2");
-			break;
-
-		case 3:
-		case 9:
-			vCX = 36;
-			vSI = 22;
-			_ripSketching = series_load("RIP SKETCHING IN NOTEBOOK POS 3");
-			break;
-
-		case 4:
-		case 8:
-			vCX = 45;
-			vSI = 19;
-			_ripSketching = series_load("RIP SKETCHING IN NOTEBOOK POS 4");
-			break;
-
-		default:
-			break;
-		}
-
-		setGlobals1(_ripSketching, 1, vSI, vSI, vSI, 0, vCX + 1, vCX, vCX, vCX);
-		sendWSMessage_110000(3);
-		digi_play(name, 1);
-		break;
-
-	case 3:
-		if (_G(player_info).facing == 0 || _G(player_info).facing == 9)
-			sendWSMessage_190000(9);
-
-		sendWSMessage_120000(4);
-		digi_play("950_s34", 2, 200, 7);
-		break;
-
-	case 4:
-		sendWSMessage_110000(5);
-		break;
-
-	case 5:
-		sendWSMessage_140000(6);
-		break;
-
-	case 6:
-		series_unload(_ripSketching);
-		digi_unload("950_s34");
-		player_set_commands_allowed(true);
-		return;
-
-	case 7:
-		if (_G(player_info).facing == 3 || _G(player_info).facing == 9)
-			sendWSMessage_190000(5);
-		break;
-
-	default:
-		break;
-	}
-}
-
 int Room::getNumKeyItemsPlaced() const {
 	static const char *const ITEMS[11] = {
 		"SHRUNKEN HEAD", "INCENSE BURNER", "CRYSTAL SKULL",
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 81fd89918e8..118568b57ec 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -27,6 +27,7 @@
 #include "m4/core/imath.h"
 #include "m4/graphics/gr_series.h"
 #include "m4/adv_r/adv_hotspot.h"
+#include "m4/riddle/triggers.h"
 
 namespace M4 {
 namespace Riddle {
@@ -57,64 +58,6 @@ protected:
 
 	void setFlag45();
 
-	/**
-	 * Sets a bunch of globals. Sooooo many globals.
-	 */
-	void setGlobals1(int val1, int val2, int val3, int val4, int val5,
-		int val6 = 0, int val7 = 0, int val8 = 0, int val9 = 0, int val10 = 0,
-		int val11 = 0, int val12 = 0, int val13 = 0, int val14 = 0, int val15 = 0,
-		int val16 = 0, int val17 = 0, int val18 = 0, int val19 = 0, int val20 = 0,
-		int val21 = 0);
-	void setGlobals3(int series, int val1, int val2);
-	void setGlobals4(int val1, int val2, int val3, int val4);
-
-	void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
-		int val4, int trigger, int val9, int val6, int val7, int val8);
-	void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
-		int trigger, int val4);
-
-	machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
-		const int16 *shadowDirs, int val3, int val4, int val5,
-		MessageCB intrMsg, const char *machName);
-	void sendWSMessage_60000(machine *mach);
-	void sendWSMessage_80000(machine *mach);
-	void sendWSMessage_B0000(machine *mach, int trigger);
-	void sendWSMessage_B0000(int trigger);
-	void sendWSMessage_C0000(machine *mach, int trigger);
-	void sendWSMessage_C0000(int trigger);
-	void sendWSMessage_D0000(machine *mach);
-	void sendWSMessage_D0000();
-	void sendWSMessage_E0000(machine *mach);
-	void sendWSMessage_E0000();
-	void sendWSMessage_F0000(machine *mach, int trigger);
-	void sendWSMessage_F0000(int trigger);
-	void sendWSMessage_110000(machine *mach, int trigger);
-	void sendWSMessage_110000(int trigger);
-	void sendWSMessage_120000(int trigger);
-	void sendWSMessage_120000(machine *mach, int trigger);
-	void sendWSMessage_130000(machine *recv, int val1);
-	void sendWSMessage_130000(int val1);
-	void sendWSMessage_140000(machine *mach, int trigger);
-	void sendWSMessage_140000(int trigger);
-	void sendWSMessage_150000(machine *mach, int trigger);
-	void sendWSMessage_150000(int trigger);
-	void sendWSMessage_160000(machine *mach, int val1, int trigger);
-	void sendWSMessage_160000(int val1, int trigger);
-	void sendWSMessage_180000(machine *recv, int trigger);
-	void sendWSMessage_180000(int trigger);
-	void sendWSMessage_190000(machine *recv, int trigger);
-	void sendWSMessage_190000(int trigger);
-	void sendWSMessage_1a0000(machine *recv, int trigger);
-	void sendWSMessage_1e0000(machine *recv, int val1, int val2);
-	void sendWSMessage_1e0000(int val1, int val2);
-	void sendWSMessage_1f0000(machine *recv, int val1, int val2);
-	void sendWSMessage_1f0000(int val1, int val2);
-	void sendWSMessage_200000(machine *recv, int trigger);
-	void sendWSMessage_210000(machine *recv, int trigger);
-
-	void sendWSMessage_29a0000(machine *recv, int val1);
-	void sendWSMessage_29a0000(int val1);
-
 	/**
 	 * Get the number of key items placed in room 305 (display room)
 	 */
@@ -140,8 +83,6 @@ public:
 	~Room() override {}
 
 	void preload() override;
-
-	void sendWSMessage_multi(const char *name);
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/triggers.cpp b/engines/m4/riddle/triggers.cpp
new file mode 100644
index 00000000000..f5366d3f158
--- /dev/null
+++ b/engines/m4/riddle/triggers.cpp
@@ -0,0 +1,424 @@
+/* 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/triggers.h"
+#include "m4/riddle/vars.h"
+#include "m4/adv_r/adv_control.h"
+#include "m4/graphics/gr_series.h"
+
+namespace M4 {
+namespace Riddle {
+
+void setGlobals1(int val1, int val2, int val3, int val4, int val5,
+	int val6, int val7, int val8, int val9, int val10,
+	int val11, int val12, int val13, int val14, int val15,
+	int val16, int val17, int val18, int val19, int val20,
+	int val21) {
+	_G(globals)[GLB_TEMP_1] = val1 << 24;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val3 << 16;
+	_G(globals)[GLB_TEMP_4] = val4 << 16;
+	_G(globals)[GLB_TEMP_5] = val5 << 16;
+	_G(globals)[GLB_TEMP_6] = val6 << 16;
+	_G(globals)[GLB_TEMP_7] = val7 << 16;
+	_G(globals)[GLB_TEMP_8] = val8 << 16;
+	_G(globals)[GLB_TEMP_9] = val9 << 16;
+	_G(globals)[GLB_TEMP_10] = val10 << 16;
+	_G(globals)[GLB_TEMP_11] = val11 << 16;
+	_G(globals)[GLB_TEMP_12] = val12 << 16;
+	_G(globals)[GLB_TEMP_13] = val13 << 16;
+	_G(globals)[GLB_TEMP_14] = val14 << 16;
+	_G(globals)[V021] = val15 << 16;
+	_G(globals)[V022] = val16 << 16;
+	_G(globals)[V024] = val17 << 16;
+	_G(globals)[V025] = val18 << 16;
+	_G(globals)[V026] = val19 << 16;
+	_G(globals)[V027] = val20 << 16;
+	_G(globals)[V028] = val21 << 16;
+}
+
+void setGlobals3(int series, int val1, int val2) {
+	_G(globals)[GLB_TEMP_1] = series << 24;
+	_G(globals)[GLB_TEMP_2] = val1 << 16;
+	_G(globals)[GLB_TEMP_3] = val2 << 16;
+}
+
+void setGlobals4(int val1, int val2, int val3, int val4) {
+	_G(globals)[GLB_TEMP_1] = val1;
+	_G(globals)[GLB_TEMP_2] = val2;
+	_G(globals)[GLB_TEMP_3] = val3;
+	_G(globals)[GLB_TEMP_4] = val4;
+}
+
+void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
+	int val4, int trigger, int val9, int val6, int val7, int val8) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[GLB_TEMP_1] = val1 << 16;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val3 << 16;
+	_G(globals)[GLB_TEMP_4] = val4 << 16;
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	_G(globals)[GLB_TEMP_6] = val6 << 16;
+	_G(globals)[GLB_TEMP_7] = val7 << 16;
+	_G(globals)[GLB_TEMP_8] = val8 << 16;
+	_G(globals)[GLB_TEMP_9] = val9 << 24;
+
+	sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
+}
+
+void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+	int trigger, int val4) {
+	int val = ((val2 << 16) - _G(globals)[V002]) * _G(globals)[V006] +
+		_G(globals)[V004];
+
+	_G(globals)[GLB_TEMP_1] = val1 << 16;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val;
+	_G(globals)[GLB_TEMP_4] = (val3 > 0) ? val3 : 0xffff0000;
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	_G(globals)[GLB_TEMP_6] = val4 << 16;
+
+	sendWSMessage(0x10000, 0, recv, 0, nullptr, 1);
+}
+
+machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
+	const int16 *shadowDirs, int val3, int val4, int val5,
+	MessageCB intrMsg, const char *machName) {
+#if 0
+	static const byte NUMS[14] = { 0, 0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 0 };
+	byte  nums[14];
+	Common::copy(NUMS, NUMS + 14, nums);
+
+	_G(globals)[GLB_TEMP_1] = val2 << 16;
+	_G(globals)[GLB_TEMP_2] = val1 << 24;
+	_G(globals)[GLB_TEMP_3] = val3
+#else
+	error("sendWSMessage_3000");
+#endif
+}
+
+void sendWSMessage_60000(machine *mach) {
+	sendWSMessage(0x60000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_80000(machine *mach) {
+	sendWSMessage(0x80000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_B0000(machine *mach, int trigger) {
+
+}
+
+void sendWSMessage_B0000(int trigger) {
+	sendWSMessage_B0000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_C0000(machine *mach, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	sendWSMessage(0xC0000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_C0000(int trigger) {
+	sendWSMessage_C0000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_D0000(machine *mach) {
+	sendWSMessage(0xd0000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_D0000() {
+	sendWSMessage_D0000(_G(my_walker));
+}
+
+void sendWSMessage_E0000(machine *mach) {
+	sendWSMessage(0xe0000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_E0000() {
+	sendWSMessage_E0000(_G(my_walker));
+}
+
+void sendWSMessage_F0000(machine *mach, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[GLB_TEMP_4] = kernel_trigger_create(trigger);
+	sendWSMessage(0xf0000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_F0000(int trigger) {
+	sendWSMessage_F0000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_110000(machine *mach, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x110000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_110000(int trigger) {
+	sendWSMessage_110000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_120000(machine *mach, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x120000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_120000(int trigger) {
+	sendWSMessage_120000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_130000(machine *recv, int val1) {
+	if (val1 == 0)
+		val1 = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(val1);
+	sendWSMessage(0x130000, 0, recv, 0, 0, 1);
+}
+
+void sendWSMessage_130000(int val1) {
+	sendWSMessage_130000(_G(my_walker), val1);
+}
+
+void sendWSMessage_140000(machine *mach, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x140000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_140000(int trigger) {
+	sendWSMessage_140000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_150000(machine *mach, int trigger) {
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x150000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_150000(int trigger) {
+	sendWSMessage_150000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_160000(machine *mach, int val1, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	_G(globals)[V024] = val1 << 16;
+	sendWSMessage(0x160000, 0, mach, 0, nullptr, 1);
+}
+
+void sendWSMessage_160000(int val1, int trigger) {
+	sendWSMessage_160000(_G(my_walker), val1, trigger);
+}
+
+void sendWSMessage_180000(machine *recv, int trigger) {
+	if (!trigger)
+		trigger = -1;
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+
+	sendWSMessage(0x180000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_180000(int trigger) {
+	sendWSMessage_180000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_190000(machine *recv, int trigger) {
+	_G(globals)[V023] = trigger << 16;
+	sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_190000(int trigger) {
+	sendWSMessage_190000(_G(my_walker), trigger);
+}
+
+void sendWSMessage_1a0000(machine *recv, int trigger) {
+	_G(globals)[V024] = trigger << 16;
+	sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_1e0000(machine *recv, int val1, int val2) {
+	_G(globals)[V023] = val1 << 16;
+	_G(globals)[V024] = val2 << 16;
+	sendWSMessage(0x1e0000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_1e0000(int val1, int val2) {
+	sendWSMessage_1e0000(_G(my_walker), val1, val2);
+}
+
+void sendWSMessage_1f0000(machine *recv, int val1, int val2) {
+	_G(globals)[V023] = val1 << 16;
+	_G(globals)[V024] = val2 << 16;
+	sendWSMessage(0x1f0000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_1f0000(int val1, int val2) {
+	sendWSMessage_1f0000(_G(my_walker), val1, val2);
+}
+
+void sendWSMessage_200000(machine *recv, int trigger) {
+	_G(globals)[V023] = (trigger << 16) / 100;
+	sendWSMessage(0x200000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_210000(machine *recv, int trigger) {
+	_G(globals)[V023] = (trigger << 16) / 100;
+	sendWSMessage(0x210000, 0, recv, 0, nullptr, 1);
+}
+
+void sendWSMessage_29a0000(machine *recv, int val1) {
+	_G(globals)[GLB_TEMP_1] = val1 << 24;
+	sendWSMessage(0x29a0000, 0, recv, 0, 0, 1);
+}
+
+void sendWSMessage_29a0000(int val1) {
+	sendWSMessage_29a0000(_G(my_walker), val1);
+}
+
+void sendWSMessage_multi(const char *name) {
+	int vSI = 0, vCX = 0;
+
+	switch (_G(kernel).trigger) {
+	case -1:
+	case 8:
+		player_update_info();
+
+		switch (_G(player_info).facing) {
+		case 1:
+		case 2:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 2);
+			break;
+
+		case 3:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 3);
+			break;
+
+		case 4:
+		case 5:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 4);
+			break;
+
+		case 7:
+		case 8:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 8);
+			break;
+
+		case 9:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 9);
+			break;
+
+		case 10:
+		case 11:
+			ws_walk(_G(player_info).x, _G(player_info).y, nullptr, 1, 10);
+			break;
+
+		default:
+			break;
+		}
+
+		player_set_commands_allowed(false);
+		break;
+
+	case 1:
+		player_update_info();
+		digi_preload("950_s34");
+
+		switch (_G(player_info).facing) {
+		case 2:
+		case 10:
+			vCX = 39;
+			vSI = 17;
+			_G(ripSketching) = series_load("RIP SKETCHING IN NOTEBOOK POS 2");
+			break;
+
+		case 3:
+		case 9:
+			vCX = 36;
+			vSI = 22;
+			_G(ripSketching) = series_load("RIP SKETCHING IN NOTEBOOK POS 3");
+			break;
+
+		case 4:
+		case 8:
+			vCX = 45;
+			vSI = 19;
+			_G(ripSketching) = series_load("RIP SKETCHING IN NOTEBOOK POS 4");
+			break;
+
+		default:
+			break;
+		}
+
+		setGlobals1(_G(ripSketching), 1, vSI, vSI, vSI, 0, vCX + 1, vCX, vCX, vCX);
+		sendWSMessage_110000(3);
+		digi_play(name, 1);
+		break;
+
+	case 3:
+		if (_G(player_info).facing == 0 || _G(player_info).facing == 9)
+			sendWSMessage_190000(9);
+
+		sendWSMessage_120000(4);
+		digi_play("950_s34", 2, 200, 7);
+		break;
+
+	case 4:
+		sendWSMessage_110000(5);
+		break;
+
+	case 5:
+		sendWSMessage_140000(6);
+		break;
+
+	case 6:
+		series_unload(_G(ripSketching));
+		digi_unload("950_s34");
+		player_set_commands_allowed(true);
+		return;
+
+	case 7:
+		if (_G(player_info).facing == 3 || _G(player_info).facing == 9)
+			sendWSMessage_190000(5);
+		break;
+
+	default:
+		break;
+	}
+}
+
+} // namespace Riddle
+} // namespace M4
+
diff --git a/engines/m4/riddle/triggers.h b/engines/m4/riddle/triggers.h
new file mode 100644
index 00000000000..19decf91136
--- /dev/null
+++ b/engines/m4/riddle/triggers.h
@@ -0,0 +1,94 @@
+/* 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_TRIGGERS_H
+#define M4_RIDDLE_TRIGGERS_H
+
+#include "m4/wscript/ws_machine.h"
+
+namespace M4 {
+namespace Riddle {
+
+extern void sendWSMessage_multi(const char *name);
+
+/**
+ * Sets a bunch of globals. Sooooo many globals.
+ */
+extern void setGlobals1(int val1, int val2, int val3, int val4, int val5,
+	int val6 = 0, int val7 = 0, int val8 = 0, int val9 = 0, int val10 = 0,
+	int val11 = 0, int val12 = 0, int val13 = 0, int val14 = 0, int val15 = 0,
+	int val16 = 0, int val17 = 0, int val18 = 0, int val19 = 0, int val20 = 0,
+	int val21 = 0);
+extern void setGlobals3(int series, int val1, int val2);
+extern void setGlobals4(int val1, int val2, int val3, int val4);
+
+extern void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
+	int val4, int trigger, int val9, int val6, int val7, int val8);
+extern void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
+	int trigger, int val4);
+
+machine *triggerMachineByHash_3000(int val1, int val2, const int16 *normalDirs,
+	const int16 *shadowDirs, int val3, int val4, int val5,
+	MessageCB intrMsg, const char *machName);
+extern void sendWSMessage_60000(machine *mach);
+extern void sendWSMessage_80000(machine *mach);
+extern void sendWSMessage_B0000(machine *mach, int trigger);
+extern void sendWSMessage_B0000(int trigger);
+extern void sendWSMessage_C0000(machine *mach, int trigger);
+extern void sendWSMessage_C0000(int trigger);
+extern void sendWSMessage_D0000(machine *mach);
+extern void sendWSMessage_D0000();
+extern void sendWSMessage_E0000(machine *mach);
+extern void sendWSMessage_E0000();
+extern void sendWSMessage_F0000(machine *mach, int trigger);
+extern void sendWSMessage_F0000(int trigger);
+extern void sendWSMessage_110000(machine *mach, int trigger);
+extern void sendWSMessage_110000(int trigger);
+extern void sendWSMessage_120000(int trigger);
+extern void sendWSMessage_120000(machine *mach, int trigger);
+extern void sendWSMessage_130000(machine *recv, int val1);
+extern void sendWSMessage_130000(int val1);
+extern void sendWSMessage_140000(machine *mach, int trigger);
+extern void sendWSMessage_140000(int trigger);
+extern void sendWSMessage_150000(machine *mach, int trigger);
+extern void sendWSMessage_150000(int trigger);
+extern void sendWSMessage_160000(machine *mach, int val1, int trigger);
+extern void sendWSMessage_160000(int val1, int trigger);
+extern void sendWSMessage_180000(machine *recv, int trigger);
+extern void sendWSMessage_180000(int trigger);
+extern void sendWSMessage_190000(machine *recv, int trigger);
+extern void sendWSMessage_190000(int trigger);
+extern void sendWSMessage_1a0000(machine *recv, int trigger);
+extern void sendWSMessage_1e0000(machine *recv, int val1, int val2);
+extern void sendWSMessage_1e0000(int val1, int val2);
+extern void sendWSMessage_1f0000(machine *recv, int val1, int val2);
+extern void sendWSMessage_1f0000(int val1, int val2);
+extern void sendWSMessage_200000(machine *recv, int trigger);
+extern void sendWSMessage_210000(machine *recv, int trigger);
+
+extern void sendWSMessage_29a0000(machine *recv, int val1);
+extern void sendWSMessage_29a0000(int val1);
+
+
+} // namespace Riddle
+} // namespace M4
+
+#endif
diff --git a/engines/m4/riddle/vars.h b/engines/m4/riddle/vars.h
index 632a4ecab60..971afce2a66 100644
--- a/engines/m4/riddle/vars.h
+++ b/engines/m4/riddle/vars.h
@@ -56,6 +56,7 @@ public:
 	Common::String _string1;
 	Common::String _string2;
 	Common::String _string3;
+	int _ripSketching = 0;
 
 public:
 	Vars();
diff --git a/engines/m4/riddle/walker.h b/engines/m4/riddle/walker.h
index b8761d45f55..a9f33da2831 100644
--- a/engines/m4/riddle/walker.h
+++ b/engines/m4/riddle/walker.h
@@ -1,4 +1,3 @@
-
 /* ScummVM - Graphic Adventure Engine
  *
  * ScummVM is the legal property of its developers, whose names




More information about the Scummvm-git-logs mailing list