[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