[Scummvm-git-logs] scummvm master -> 96227666df4d6019523b16ec978c6255a7987319
dreammaster
noreply at scummvm.org
Thu Jul 25 04:59:49 UTC 2024
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
ebbb8b79f9 M4: RIDDLE: Room 301 init code
67e81ce4b5 M4: RIDDLE: In progress room 301 parser
96227666df M4: RIDDLE: Finished room 301 parser
Commit: ebbb8b79f97a1e8b79ae8d004c2cef6f687373d5
https://github.com/scummvm/scummvm/commit/ebbb8b79f97a1e8b79ae8d004c2cef6f687373d5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00
Commit Message:
M4: RIDDLE: Room 301 init code
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room301.cpp
engines/m4/riddle/rooms/section3/room301.h
engines/m4/wscript/ws_load.cpp
engines/m4/wscript/ws_load.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 379e83701cb..4682d2386c8 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -39,13 +39,94 @@ void Room::restoreAutosave() {
}
}
-void Room::triggerMachineByHashCallback(frac16 myMessage, machine *sender) {
+void Room::triggerMachineByHashCallback(frac16 myMessage, machine *) {
int32 hi = myMessage >> 16;
if (hi >= 0)
kernel_trigger_dispatch_now(hi);
}
+void Room::triggerMachineByHashCallbackNegative(frac16 myMessage, machine *) {
+ int32 hi = myMessage >> 16;
+
+ if (hi < 0)
+ kernel_trigger_dispatchx(hi);
+}
+
+int Room::checkFlags(bool flag) {
+ int count = 0;
+
+ if (_G(flags)[V364] == 1) {
+ ++count;
+ switch (_G(flags)[V005]) {
+ case 1:
+ _G(flags)[V351] = 1;
+ break;
+ case 2:
+ _G(flags)[V352] = 1;
+ break;
+ case 3:
+ _G(flags)[V353] = 1;
+ break;
+ case 4:
+ _G(flags)[V354] = 1;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (_G(flags)[V365] == 1) {
+ _G(flags)[V355] = 1;
+ ++count;
+ }
+ if (_G(flags)[V366] == 1) {
+ _G(flags)[V356] = 1;
+ ++count;
+ }
+
+ if (flag) {
+ if (_G(flags)[V367] == 1) {
+ _G(flags)[V357] = 1;
+ ++count;
+ }
+ if (_G(flags)[V368] == 1) {
+ _G(flags)[V358] = 1;
+ ++count;
+ }
+ if (_G(flags)[V369] == 1) {
+ _G(flags)[V359] = 1;
+ ++count;
+ }
+ }
+
+ if (_G(game).room_id == 501 && _G(flags)[V370] == 1) {
+ _G(flags)[V360] = 1;
+ ++count;
+ }
+
+ if (_G(game).room_id != 401 && _G(flags)[V373] == 1) {
+ _G(flags)[V363] = 1;
+ ++count;
+ }
+
+ if (_G(game).room_id != 501 && _G(flags)[V371] == 1) {
+ _G(flags)[V361] = 1;
+ ++count;
+ }
+
+ if (_G(flags)[V372] == 1) {
+ _G(flags)[V362] = 1;
+ ++count;
+ }
+
+ return count;
+}
+
+void Room::setFlag45() {
+ _G(flags)[V045] = 1;
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 0eb694d658f..03e4b930747 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -35,10 +35,21 @@ namespace Rooms {
class Room : public M4::Room {
protected:
static void intrMsgNull(frac16 myMessage, machine *sender) {}
- static void triggerMachineByHashCallback(frac16 myMessage, machine *sender);
+ static void triggerMachineByHashCallback(frac16 myMessage, machine *sender = nullptr);
+ static void triggerMachineByHashCallbackNegative(frac16 myMessage, machine *sender = nullptr);
void restoreAutosave();
- int _roomVal1 = 0;
+
+ /**
+ * Checks various game flags for updates
+ * @param flag If set, does extra checks
+ * @return A count of the flag changes done
+ */
+ int checkFlags(bool flag);
+
+ void setFlag45();
+
+ int _roomVal1 = 0; // TODO: deprecate
public:
Room() : M4::Room() {}
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index 2949b4ec16d..bf9e0293804 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -27,7 +27,72 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+void Room301::preload() {
+ _G(player).walker_type = 1;
+ _G(player).shadow_type = 1;
+ _G(player).walker_in_this_scene = true;
+ LoadWSAssets("OTHER SCRIPT");
+}
+
void Room301::init() {
+ _G(flags)[V000] = 1;
+ digi_preload("950_s01");
+
+ if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+ _val1 = 0;
+ _val2 = 0;
+ _val3 = 0;
+ _val4 = 0;
+ _val5 = -1;
+ _val6 = 2;
+ _val7 = 2;
+ _val8 = 0;
+ _val9 = 0;
+ _val10 = 0;
+ _val11 = 0;
+ _val12 = 0;
+ }
+
+ _val13 = 0;
+ _val14 = 0;
+
+ _ripTrekHandTalk3 = series_load("rip trek hand talk pos3");
+ _ripTrekTalker3 = series_load("RIP TREK TALKER POS3");
+ _ripTrekTravel = series_load("rip trek travel disp");
+ _agentStander = series_load("agent stander / talk disp");
+ _agentCheckingList = series_load("agent checking list on desk");
+ _agentSlidesPaper = series_load("AGENT SLIDES PAPER TO RIP");
+ _agentTakesMoney = series_load("agent takes money from rip");
+ _agentTakesTelegram = series_load("agent takes telegram from slot");
+ _agentTalk = series_load("agent animated talk disp");
+ _agentSalutes = series_load("agent salutes rip");
+ _machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ triggerMachineByHashCallbackNegative, "guy behind desk");
+
+ sendWSMessage(1, _machine1, _agentStander, 1, 1, 10, _agentStander, 1, 1, 0);
+
+ if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+ if (inv_object_in_scene("ROMANOV EMERALD", 305)) {
+ setFlag45();
+ inv_move_object("ROMANOV EMERALD", NOWHERE);
+ }
+
+ _val12 = checkFlags(false);
+ player_set_commands_allowed(false);
+ ws_demand_location(55, 270, 3);
+
+ if (_val12 || (!player_been_here(401) && _G(flags)[V092] && !_G(flags)[V093])) {
+ ws_walk(352, 269, nullptr, 60, 3);
+ } else if (!player_been_here(301)) {
+ digi_preload("301r37");
+ digi_play("301r37", 1, 255, 51);
+ ws_walk(165, 270, nullptr, -1, 3);
+ } else {
+ ws_walk(165, 270, nullptr, 51, 3);
+ }
+ }
+
+ digi_play_loop("950_s01", 3, 140);
}
void Room301::daemon() {
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index ce94b792230..88ea2ef2f69 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -29,10 +29,38 @@ namespace Riddle {
namespace Rooms {
class Room301 : public Room {
+private:
+ int _val1 = 0;
+ int _val2 = 0;
+ int _val3 = 0;
+ int _val4 = 0;
+ int _val5 = -1;
+ int _val6 = 2;
+ int _val7 = 2;
+ int _val8 = 0;
+ int _val9 = 0;
+ int _val10 = 0;
+ int _val11 = 0;
+ int _val12 = 0;
+ int _val13 = 0;
+ int _val14 = 0;
+ int _ripTrekHandTalk3 = 0;
+ int _ripTrekTalker3 = 0;
+ int _ripTrekTravel = 0;
+ int _agentStander = 0;
+ int _agentCheckingList = 0;
+ int _agentSlidesPaper = 0;
+ int _agentTakesMoney = 0;
+ int _agentTakesTelegram = 0;
+ int _agentTalk = 0;
+ int _agentSalutes = 0;
+ machine *_machine1 = nullptr;
+
public:
Room301() : Room() {}
~Room301() override {}
+ void preload() override;
void init() override;
void daemon() override;
};
diff --git a/engines/m4/wscript/ws_load.cpp b/engines/m4/wscript/ws_load.cpp
index 8037a20fb44..bc9ff4a493c 100644
--- a/engines/m4/wscript/ws_load.cpp
+++ b/engines/m4/wscript/ws_load.cpp
@@ -272,6 +272,10 @@ void ShutdownWSAssets(void) {
_GWS(wsloaderInitialized) = false;
}
+bool LoadWSAssets(const char *wsAssetName) {
+ return LoadWSAssets(wsAssetName, _G(master_palette));
+}
+
bool LoadWSAssets(const char *wsAssetName, RGB8 *myPalette) {
MemHandle workHandle;
char *mainAssetPtr, *parseAssetPtr, *endOfAssetBlock;
diff --git a/engines/m4/wscript/ws_load.h b/engines/m4/wscript/ws_load.h
index 95f71b8761b..1f0fd9ebc07 100644
--- a/engines/m4/wscript/ws_load.h
+++ b/engines/m4/wscript/ws_load.h
@@ -81,6 +81,7 @@ bool InitWSAssets();
bool ClearWSAssets(uint32 assetType, int32 minHash, int32 maxHash);
void ShutdownWSAssets();
+bool LoadWSAssets(const char *wsAssetName);
bool LoadWSAssets(const char *wsAssetName, RGB8 *myPalette);
int32 AddWSAssetCELS(const char *wsAssetName, int32 hash, RGB8 *myPalette);
M4sprite *GetWSAssetSprite(char *spriteName, uint32 hash, uint32 index, M4sprite *mySprite, bool *streamSeries);
Commit: 67e81ce4b5f6b8bf624bc33cddab36c261ecf1d7
https://github.com/scummvm/scummvm/commit/67e81ce4b5f6b8bf624bc33cddab36c261ecf1d7
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00
Commit Message:
M4: RIDDLE: In progress room 301 parser
Changed paths:
engines/m4/riddle/rooms/section3/room301.cpp
engines/m4/riddle/rooms/section3/room301.h
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index bf9e0293804..eaf0316c60e 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -41,7 +41,7 @@ void Room301::init() {
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
_val1 = 0;
_val2 = 0;
- _val3 = 0;
+ _soundName = nullptr;
_val4 = 0;
_val5 = -1;
_val6 = 2;
@@ -96,6 +96,137 @@ void Room301::init() {
}
void Room301::daemon() {
+ // TODO
+}
+
+void Room301::pre_parser() {
+ if (player_said("exit") && _G(globals)[GLB_TEMP_1]) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+}
+
+void Room301::parser() {
+ auto oldMode = _G(kernel).trigger_mode;
+ bool lookFlag = player_said_any("look", "look at"); // ecx
+ bool talkFlag = player_said_any("talk", "talk to");
+ bool takeFlag = player_said("take"); // edi
+ bool useFlag = player_said_any("push", "pull", "gear", "open", "close"); // esi
+
+ if (player_said("con301a")) {
+ conv301a();
+ } else if (player_said("exit")) {
+ if (_G(globals)[GLB_TEMP_1]) {
+ if (_G(kernel).trigger == -1) {
+ player_set_commands_allowed(false);
+ _marshalMatt = series_load("marshall matt");
+ digi_preload("301s01");
+ _ripTrekArms = series_load("rip trek arms x pos3");
+ ws_walk(200, 269, nullptr, 1, 9);
+ } else if (_G(kernel).trigger == 1) {
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _machine2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ triggerMachineByHashCallbackNegative, "marshal");
+ sendWSMessage(1, _machine2, _marshalMatt, 1, 2, 202, _marshalMatt, 3, 3, 0);
+ _val17 = 0;
+ _val18 = 0;
+ }
+ } else {
+ if (_G(kernel).trigger == -1) {
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(1);
+ } else if (_G(kernel).trigger == 1) {
+ _G(game).new_room = 303;
+ }
+ }
+ } else if (lookFlag && player_said("poster")) {
+ digi_play("301r04", 1);
+ } else if (lookFlag && player_said("window")) {
+ digi_play(_G(player).been_here_before ? "301r15" : "301r05", 1);
+ } else if (lookFlag && player_said("magazines")) {
+ digi_play("301r06", 1);
+ } else if (lookFlag && player_said("water cooler")) {
+ digi_play(_G(player).been_here_before ? "301r16" : "301r07", 1);
+ } else if (lookFlag && player_said("agent")) {
+ digi_play("301r08", 1);
+ } else if (lookFlag && player_said("telephone")) {
+ digi_play("301r27", 1);
+ } else if (lookFlag && player_said("plant")) {
+ digi_play("301r28", 1);
+ } else if (lookFlag && player_said("postcards")) {
+ if (_G(globals)[V033]) {
+ digi_play("301r14", 1);
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ digi_play("301r03", 1, 255, 3);
+ kernel_timing_trigger(260, 1);
+ break;
+ case 1:
+ player_update_info();
+ ws_walk(_G(player_info).x, _G(player_info).y,
+ nullptr, 2, 3);
+ break;
+ case 2:
+ // TODO
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+
+ // TODO
+ _G(player).command_ready = false;
+}
+
+void Room301::conv301a() {
+ const char *sound = conv_sound_to_play();
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+
+ if (_G(kernel).trigger == 1 || !sound) {
+ if (who <= 0) {
+ if (node != 3) {
+ _val14 = 4;
+ conv_resume();
+ }
+ } else if (who == 1) {
+ if (node == 11) {
+ _val14 = 12;
+ } else if (node != 13) {
+ _val15 = 0;
+ conv_resume();
+ } else {
+ conv_resume();
+ }
+ } else {
+ conv_resume();
+ }
+ } else {
+ if (who <= 0) {
+ if (node == 3) {
+ _val14 = 15;
+ } else if (node != 2) {
+ _val14 = imath_ranged_rand(5, 6);
+ } else {
+ _val14 = 2;
+ _soundName = sound;
+ _val16 = 1;
+ return;
+ }
+ } else if (who == 1) {
+ if (node == 13)
+ _val14 = 13;
+ else
+ _val15 = 1;
+ }
+
+ digi_play(sound, 1, 255, 1);
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index 88ea2ef2f69..e1a1be0e6ce 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -32,7 +32,7 @@ class Room301 : public Room {
private:
int _val1 = 0;
int _val2 = 0;
- int _val3 = 0;
+ const char *_soundName = nullptr;
int _val4 = 0;
int _val5 = -1;
int _val6 = 2;
@@ -44,6 +44,10 @@ private:
int _val12 = 0;
int _val13 = 0;
int _val14 = 0;
+ int _val15 = 0;
+ int _val16 = 0;
+ int _val17 = 0;
+ int _val18 = 0;
int _ripTrekHandTalk3 = 0;
int _ripTrekTalker3 = 0;
int _ripTrekTravel = 0;
@@ -54,7 +58,12 @@ private:
int _agentTakesTelegram = 0;
int _agentTalk = 0;
int _agentSalutes = 0;
+ int _ripTrekArms = 0;
+ int _marshalMatt = 0;
machine *_machine1 = nullptr;
+ machine *_machine2 = nullptr;
+
+ void conv301a();
public:
Room301() : Room() {}
@@ -63,6 +72,8 @@ public:
void preload() override;
void init() override;
void daemon() override;
+ void pre_parser() override;
+ void parser() override;
};
} // namespace Rooms
Commit: 96227666df4d6019523b16ec978c6255a7987319
https://github.com/scummvm/scummvm/commit/96227666df4d6019523b16ec978c6255a7987319
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00
Commit Message:
M4: RIDDLE: Finished room 301 parser
Changed paths:
engines/m4/riddle/flags.h
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room301.cpp
engines/m4/riddle/rooms/section3/room301.h
diff --git a/engines/m4/riddle/flags.h b/engines/m4/riddle/flags.h
index f10e3adedd2..c5827542a9e 100644
--- a/engines/m4/riddle/flags.h
+++ b/engines/m4/riddle/flags.h
@@ -55,7 +55,7 @@ enum {
V020 = 20,
V021 = 21,
V022 = 22,
- kHarryComingToRoof = 23,
+ V023 = 23,
V024 = 24,
V025 = 25,
V026 = 26,
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 4682d2386c8..649fb267802 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -127,6 +127,88 @@ 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::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_C0000(machine *walker, int trigger) {
+ if (!trigger)
+ trigger = -1;
+
+ _G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+ sendWSMessage(0xC0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_C0000(int trigger) {
+ sendWSMessage_C0000(_G(my_walker), trigger);
+}
+
+void Room::sendWSMessage_110000(machine *walker, int trigger) {
+ if (!trigger)
+ trigger = -1;
+
+ _G(globals)[V023] = kernel_trigger_create(trigger);
+ sendWSMessage(0x110000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_110000(int trigger) {
+ sendWSMessage_110000(_G(my_walker), trigger);
+}
+
+void Room::sendWSMessage_140000(machine *walker, int trigger) {
+ if (!trigger)
+ trigger = -1;
+
+ _G(globals)[V023] = kernel_trigger_create(trigger);
+ sendWSMessage(0x140000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_140000(int trigger) {
+ sendWSMessage_140000(_G(my_walker), trigger);
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 03e4b930747..a8db601df32 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -49,6 +49,24 @@ 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, 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);
+
+ 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_C0000(machine *walker, int trigger);
+ void sendWSMessage_C0000(int trigger);
+ void sendWSMessage_110000(machine *walker, int trigger);
+ void sendWSMessage_110000(int trigger);
+ void sendWSMessage_140000(machine *walker, int trigger);
+ void sendWSMessage_140000(int trigger);
+
int _roomVal1 = 0; // TODO: deprecate
public:
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index eaf0316c60e..1fe02699d21 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -170,16 +170,100 @@ void Room301::parser() {
nullptr, 2, 3);
break;
case 2:
- // TODO
+ setGlobals1(_ripTrekHandTalk3, 1, 7, 8, 9, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ sendWSMessage_110000(-1);
+ break;
+ case 3:
+ sendWSMessage_140000(-1);
+ _val14 = 5;
+ _val6 = 1;
+ _val7 = 1;
+ _val16 = 4;
+ _soundName = "301a02";
+ break;
+ case 4:
+ _val14 = 0;
+ _val5 = kernel_trigger_create(5);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 11);
+ _G(kernel).trigger_mode = oldMode;
+ break;
+ case 5:
+ player_set_commands_allowed(true);
+ _G(globals)[V033] = 1;
break;
default:
break;
}
}
- }
+ } else if (player_said_any("AMERICAN CURRENCY", "CHINESE CURRENCY") &&
+ player_said("AGENT")) {
+ digi_play("301r30", 1);
+ } else if (lookFlag && player_said_any("sofa", "chair")) {
+ digi_play("301r29", 1);
+ } else if (_G(kernel).trigger == 747) {
+ player_set_commands_allowed(false);
+ _val14 = 0;
+ _val15 = 4;
+ if (_val1) {
+ switch (_val1) {
+ case 1:
+ _G(globals)[V129] = 0;
+ break;
+ case 2:
+ _G(globals)[V129] = 2;
+ break;
+ case 3:
+ _G(globals)[V129] = 3;
+ break;
+ case 4:
+ _G(globals)[V129] = 4;
+ break;
+ default:
+ break;
+ }
+
+ disable_player_commands_and_fade_init(748);
+ }
+
+ } else if (_G(kernel).trigger == 748) {
+ _G(game).setRoom(495);
+
+ } else if (talkFlag && player_said("agent")) {
+ ws_hide_walker();
+ player_set_commands_allowed(false);
+ player_update_info();
+
+ _machine3 = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ _machine4 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ triggerMachineByHashCallbackNegative, "rip");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _val19 = 0;
+ _val15 = 5;
+ sendWSMessage_10000(1, _machine4, _ripTrekTravel, 1, 9, 20,
+ _ripTrekTravel, 10, 10, 0);
+ _val14 = 4;
+ } else if (takeFlag && player_said("postcards")) {
+ digi_play("301r09", 1);
+ } else if (takeFlag && player_said("water cooler")) {
+ digi_play("301r10", 1);
+ } else if (takeFlag && player_said("magazines")) {
+ digi_play("301r11", 1);
+ } else if (useFlag && player_said_any("sofa", "chair")) {
+ digi_play("301r31", 1);
+ } else if (useFlag && player_said("telephone")) {
+ digi_play("301r32", 1);
+ } else if (useFlag && _G(player).click_y <= 374 &&
+ !inv_player_has(_G(player).noun)) {
+ digi_play("301r33", 1);
+ } else {
+ return;
+ }
- // TODO
_G(player).command_ready = false;
}
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index e1a1be0e6ce..1333b65aa3a 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -48,6 +48,7 @@ private:
int _val16 = 0;
int _val17 = 0;
int _val18 = 0;
+ int _val19 = 0;
int _ripTrekHandTalk3 = 0;
int _ripTrekTalker3 = 0;
int _ripTrekTravel = 0;
@@ -62,6 +63,8 @@ private:
int _marshalMatt = 0;
machine *_machine1 = nullptr;
machine *_machine2 = nullptr;
+ machine *_machine3 = nullptr;
+ machine *_machine4 = nullptr;
void conv301a();
More information about the Scummvm-git-logs
mailing list