[Scummvm-git-logs] scummvm master -> 27490d73de15057259e5eadbcd51bd8b6bbe365e
dreammaster
noreply at scummvm.org
Sun Aug 11 19:17:20 UTC 2024
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
86c80192b9 M4: RIDDLE: Added sendWSMessage_multi
04c0a9becd M4: RIDDLE: Finished room 402 parser
8ad00a20ff M4: RIDDLE: Beginnings of room 402 daemon
27490d73de M4: RIDDLE: More room 402 daemon
Commit: 86c80192b94c3cc99e1e0d476ba35d2c48f1fc8c
https://github.com/scummvm/scummvm/commit/86c80192b94c3cc99e1e0d476ba35d2c48f1fc8c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T12:17:13-07:00
Commit Message:
M4: RIDDLE: Added sendWSMessage_multi
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section4/room402.cpp
engines/m4/riddle/rooms/section4/room402.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 0cfd3c31844..c4fd6cb0897 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -376,6 +376,10 @@ void Room::sendWSMessage_190000(machine *recv, int trigger) {
sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
}
+void Room::sendWSMessage_190000(machine *recv, 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);
@@ -390,6 +394,116 @@ 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] = {
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 0c0ee04f8f3..9618e3c6b9b 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -33,6 +33,9 @@ namespace Riddle {
namespace Rooms {
class Room : public M4::Room {
+private:
+ static int _ripSketching;
+
protected:
static void intrMsgNull(frac16 myMessage, machine *sender) {}
static void triggerMachineByHashCallback(frac16 myMessage, machine *sender = nullptr);
@@ -94,9 +97,11 @@ protected:
void sendWSMessage_160000(machine *mach, int val1, int trigger);
void sendWSMessage_160000(int val1, int trigger);
void sendWSMessage_190000(machine *recv, int trigger);
+ void sendWSMessage_190000(int trigger);
void sendWSMessage_1a0000(machine *recv, int trigger);
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)
diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index a387103d345..83c10c2d5cb 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -117,9 +117,9 @@ void Room402::init() {
digi_preload("950_s22");
_ripDownStairs = series_load("RIP DOWN STAIRS");
ws_hide_walker();
- _ripLeaving = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
triggerMachineByHashCallbackNegative, "rip leaving castle");
- sendWSMessage_10000(1, _ripLeaving, _ripDownStairs, 1, 27, 55,
+ sendWSMessage_10000(1, _ripEnterLeave, _ripDownStairs, 1, 27, 55,
_ripDownStairs, 27, 27, 0);
#endif
@@ -142,9 +142,9 @@ void Room402::init() {
digi_preload("950_s22");
_ripDownStairs = series_load("RIP DOWN STAIRS");
ws_hide_walker();
- _ripLeaving = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
triggerMachineByHashCallbackNegative, "rip leaving castle");
- sendWSMessage_10000(1, _ripLeaving, _ripDownStairs, 1, 27, 55,
+ sendWSMessage_10000(1, _ripEnterLeave, _ripDownStairs, 1, 27, 55,
_ripDownStairs, 27, 27, 0);
break;
@@ -201,9 +201,9 @@ void Room402::init() {
_ripDownStairs = series_load("RIP DOWN STAIRS");
ws_hide_walker();
- _ripLeaving = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
triggerMachineByHashCallbackNegative, "rip leaving castle");
- sendWSMessage_10000(1, _ripLeaving, _ripDownStairs, 1, 27, 55,
+ sendWSMessage_10000(1, _ripEnterLeave, _ripDownStairs, 1, 27, 55,
_ripDownStairs, 27, 27, 0);
break;
@@ -349,8 +349,97 @@ void Room402::parser() {
bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
if (player_said("conv402a")) {
- // TODO
- conv402a();
+ if (_G(kernel).trigger) {
+ conv402a777();
+ } else {
+ conv402a();
+ }
+ } else if (talkFlag && player_said("WOLF")) {
+ player_set_commands_allowed(false);
+ _val5 = -1;
+ _val10 = 1000;
+ _val11 = 1100;
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 102);
+ _G(kernel).trigger_mode = KT_PARSE;
+ } else if (lookFlag && player_said("WOLF")) {
+ digi_play(_G(flags)[V111] ? "402r13" : "402r12", 1);
+ } else if (lookFlag && player_said("CASTLE")) {
+ // No implementation
+ } else if (lookFlag && player_said_any("TOPIARY", "TOPIARY ")) {
+ digi_play("408r02", 1);
+ } else if (takeFlag && player_said("WHEELBARROW")) {
+ digi_play("402r17", 1);
+ } else if (takeFlag && player_said_any("TOPIARY", "TOPIARY ")) {
+ digi_play("402r18", 1);
+ } else if (useFlag && player_said("TOPIARY")) {
+ digi_play("402r16", 1);
+ } else if (useFlag && player_said("TOPIARY ")) {
+ useTopiary();
+ } else if (player_said("POMERANIAN MARKS", "WOLF") && inv_player_has("POMERANIAN MARKS")) {
+ if (_G(flags)[V115] && !_G(flags)[V114]) {
+ _G(flags)[V114] = 1;
+ _G(flags)[V111]++;
+ player_set_commands_allowed(false);
+ _val5 = 210;
+ } else {
+ player_set_commands_allowed(false);
+ _val5 = 200;
+ }
+ }
+#define MONEY(ITEM) player_said("WOLF") && player_said(ITEM) && inv_player_has(ITEM)
+ else if (MONEY("US DOLLARS") || MONEY("CHINESE YUAN") ||
+ MONEY("PERUVIAN INTI") || MONEY("SIKKIMESE RUPEE")) {
+ if (!_G(flags)[V116]) {
+ _G(flags)[V116] = 1;
+ player_set_commands_allowed(false);
+ _val5 = 221;
+ }
+ }
+#undef MONEY
+ else if (enterFlag && player_said("GATE")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_walk(517, 239, nullptr, 2, 11);
+ break;
+ case 2:
+ disable_player_commands_and_fade_init(3);
+ break;
+ default:
+ break;
+ }
+ } else if (enterFlag && player_said("DANZIG")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(2);
+ break;
+ case 2:
+ _G(flags)[V112] = 1;
+ _G(game).setRoom(401);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("DANZIG")) {
+ // No implementation
+ } else if (enterFlag && player_said("CASTLE DOOR")) {
+ enterCastle();
+ } else if (player_said("journal") && !talkFlag && !lookFlag &&
+ !inv_player_has(_G(player).noun)) {
+ if (_G(flags)[kCastleCartoon])
+ digi_play("com016", 1);
+ else if (_G(kernel).trigger == -1)
+ ws_walk(190, 333, nullptr, 8, 2);
+ else {
+ if (_G(kernel).trigger == 6) {
+ _G(flags)[kCastleCartoon] = 1;
+ _G(flags)[V089] = 1;
+ }
+ //sub("com015");
+ }
}
// TODO
else {
@@ -580,6 +669,121 @@ void Room402::conv402a() {
}
}
+void Room402::conv402a777() {
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+
+ if (who <= 0) {
+ if (node == 26 && entry == 0) {
+ _val10 = 1000;
+ _val11 = 1123;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 102);
+ _G(kernel).trigger_mode = KT_PARSE;
+ } else {
+ _val13 = (_val12 == 2002) ? 2143 : 2104;
+ conv_resume();
+ }
+ } else if (who == 1) {
+ _val11 = (_val10 == 1001) ? 1115 : 1103;
+ conv_resume();
+ }
+}
+
+void Room402::useTopiary() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ _ripMessesBush = series_load("RIP MESSES UP THE BUSH");
+ player_update_info();
+ _safariShadow = series_place_sprite("SAFARI SHADOW 3", 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale, 0xf00);
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x200, 0,
+ triggerMachineByHashCallbackNegative, "rip entering castle");
+ sendWSMessage_10000(1, _ripEnterLeave, _ripMessesBush, 1, 10, 1,
+ _ripMessesBush, 10, 10, 0);
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _ripEnterLeave, _ripMessesBush, 10, 34, 2,
+ _ripMessesBush, 34, 34, 0);
+ digi_play("402_s02", 1, 255, 2);
+ break;
+
+ case 2:
+ if (inv_player_has("TURTLE") && !_G(flags)[V117]) {
+ _G(flags)[V117] = 1;
+ _G(flags)[V118]++;
+ }
+
+ _branch = series_place_sprite("sprite of the pulled out branch", 0, 0, -53, 100, 0x300);
+ series_unload(_ripMessesBush);
+ terminateMachineAndNull(_safariShadow);
+ ws_unhide_walker();
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+
+}
+
+void Room402::enterCastle() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ _ripClimbKnock = series_load("RIP CLIMBS AND KNOCKS");
+ _doorOpens = series_load("DOOR OPENS");
+ ws_hide_walker();
+
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+ triggerMachineByHashCallbackNegative, "rip entering castle");
+ sendWSMessage_10000(1, _ripEnterLeave, _ripClimbKnock, 1,
+ 69, 1, _ripClimbKnock, 69, 69, 0);
+ break;
+
+ case 1:
+ digi_play("402_s01", 1, 255, 2);
+ sendWSMessage_10000(1, _ripEnterLeave, _ripClimbKnock, 69, 58, -1,
+ _ripClimbKnock, 58, 58, 0);
+ break;
+
+ case 2:
+ kernel_timing_trigger(15, 3);
+ break;
+
+ case 3:
+ _castleDoor = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, 0,
+ triggerMachineByHashCallbackNegative, "castle door");
+ sendWSMessage_10000(1, _castleDoor, _doorOpens, 1, 2, -1,
+ _doorOpens, 2, 2, 0);
+ digi_play("402_S05", 1, 255, 4);
+ break;
+
+ case 4:
+ if (player_been_here(404)) {
+ kernel_timing_trigger(1, 5);
+ } else {
+ digi_play("402r28", 1, 255, 5);
+ }
+ break;
+
+ case 5:
+ disable_player_commands_and_fade_init(6);
+ break;
+
+ case 6:
+ _G(flags)[V112] = 1;
+ _G(game).setRoom(404);
+ break;
+
+ default:
+ break;
+ }
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section4/room402.h b/engines/m4/riddle/rooms/section4/room402.h
index 7fbec8ce720..5ce4fd11089 100644
--- a/engines/m4/riddle/rooms/section4/room402.h
+++ b/engines/m4/riddle/rooms/section4/room402.h
@@ -55,14 +55,22 @@ private:
int _wolfWantsMoney = 0;
int _ripHeadTurn = 0;
int _ripDownStairs = 0;
- machine *_ripLeaving = nullptr;
+ machine *_ripEnterLeave = nullptr;
machine *_branch = nullptr;
int _wolfTurnsClipping = 0;
int _turtlePopup = 0;
int _ripLeanWall = 0;
machine *_wolfWalker = nullptr;
+ machine *_safariShadow = nullptr;
+ int _ripMessesBush = 0;
+ int _ripClimbKnock = 0;
+ int _doorOpens = 0;
+ machine *_castleDoor = nullptr;
void conv402a();
+ void conv402a777();
+ void useTopiary();
+ void enterCastle();
public:
Room402() : Room() {}
Commit: 04c0a9becd358f35ebbf3c73189d264c816bb4fa
https://github.com/scummvm/scummvm/commit/04c0a9becd358f35ebbf3c73189d264c816bb4fa
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T12:17:13-07:00
Commit Message:
M4: RIDDLE: Finished room 402 parser
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/section4/room402.cpp
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index c4fd6cb0897..d66fc144b73 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -27,6 +27,8 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+int Room::_ripSketching;
+
void Room::restoreAutosave() {
if (g_engine->autosaveExists()) {
_G(kernel).restore_slot = 0;
@@ -376,7 +378,7 @@ void Room::sendWSMessage_190000(machine *recv, int trigger) {
sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
}
-void Room::sendWSMessage_190000(machine *recv, int trigger) {
+void Room::sendWSMessage_190000(int trigger) {
sendWSMessage_190000(_G(my_walker), trigger);
}
diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index 83c10c2d5cb..1d9beeedc95 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -388,7 +388,7 @@ void Room402::parser() {
_val5 = 200;
}
}
-#define MONEY(ITEM) player_said("WOLF") && player_said(ITEM) && inv_player_has(ITEM)
+#define MONEY(ITEM) (player_said("WOLF") && player_said(ITEM) && inv_player_has(ITEM))
else if (MONEY("US DOLLARS") || MONEY("CHINESE YUAN") ||
MONEY("PERUVIAN INTI") || MONEY("SIKKIMESE RUPEE")) {
if (!_G(flags)[V116]) {
@@ -407,6 +407,12 @@ void Room402::parser() {
case 2:
disable_player_commands_and_fade_init(3);
break;
+ case 3:
+ _G(flags)[V112] = 1;
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s22", 3);
+ _G(game).setRoom(408);
+ break;
default:
break;
}
@@ -438,11 +444,11 @@ void Room402::parser() {
_G(flags)[kCastleCartoon] = 1;
_G(flags)[V089] = 1;
}
- //sub("com015");
+ sendWSMessage_multi("com015");
}
- }
- // TODO
- else {
+ } else if (lookFlag && player_said(" ")) {
+ digi_play("402r08", 1);
+ } else {
return;
}
Commit: 8ad00a20ffebcb349346d44f268f4416cc5f6c28
https://github.com/scummvm/scummvm/commit/8ad00a20ffebcb349346d44f268f4416cc5f6c28
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T12:17:13-07:00
Commit Message:
M4: RIDDLE: Beginnings of room 402 daemon
Changed paths:
engines/m4/riddle/rooms/section4/room402.cpp
diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index 1d9beeedc95..b6bf9d65caa 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -274,6 +274,236 @@ void Room402::init() {
}
void Room402::daemon() {
+ switch (_G(kernel).trigger) {
+ case 19:
+ ws_walk(449, 317, nullptr, 20, 3);
+ midi_fade_volume(0, 120);
+ break;
+
+ case 20:
+ midi_stop();
+ setGlobals1(_ripTalker, 1, 5, 1, 5, 1, 1, 1, 1, 1);
+ sendWSMessage_110000(-1);
+ digi_play("402r01", 1, 255, 21);
+ break;
+
+ case 21:
+ sendWSMessage_120000(-1);
+ digi_play("402w01", 1, 255, 22);
+ break;
+
+ case 22:
+ sendWSMessage_150000(23);
+ break;
+
+ case 23:
+ setGlobals1(_ripHeadTurn, 1, 5, 5, 5, 0, 5, 1, 1, 1, 0, 1, 1, 1, 1, 1);
+ sendWSMessage_110000(24);
+ digi_play("402r02", 1, 255, 25);
+ break;
+
+ case 24:
+ sendWSMessage_120000(-1);
+ break;
+
+ case 25:
+ sendWSMessage_130000(-1);
+ digi_play("402w02", 1, 255, 26);
+ break;
+
+ case 26:
+ sendWSMessage_150000(27);
+ break;
+
+ case 27:
+ ws_hide_walker();
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "RIP talks to Wolife");
+ sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 13, 28,
+ _ripTalkWolf, 13, 13, 0);
+ digi_play("402r03", 1);
+ break;
+
+ case 28:
+ sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 13, 1, 29,
+ _ripTalkWolf, 1, 1, 0);
+ break;
+
+ case 29:
+ terminateMachineAndNull(_ripEnterLeave);
+ series_unload(_ripHeadTurn);
+ ws_unhide_walker();
+ player_set_commands_allowed(true);
+ break;
+
+ case 30:
+ setGlobals1(_ripTalker, 0, 0, 1, 1, 0, 1, 5, 1, 5, 1);
+ sendWSMessage_110000(32);
+ break;
+
+ case 31:
+ digi_play("402r29", 1, 255, 33);
+ sendWSMessage_120000(-1);
+ break;
+
+ case 32:
+ sendWSMessage_110000(-1);
+ digi_play("402w09", 1, 255, 34);
+ break;
+
+ case 33:
+ sendWSMessage_150000(35);
+ break;
+
+ case 35:
+ case 43:
+ player_set_commands_allowed(true);
+ break;
+
+ case 40:
+ ws_walk(510, 260, nullptr, -1, 8);
+ break;
+
+ case 42:
+ sendWSMessage_10000(_wolfWalker, 517, 239, 9, 43, 0);
+ break;
+
+ case 50:
+ midi_stop();
+ player_set_commands_allowed(true);
+ break;
+
+ case 55:
+ terminateMachineAndNull(_ripEnterLeave);
+ series_unload(_ripDownStairs);
+ ws_demand_location(345, 275, 3);
+ ws_walk(375, 279, nullptr,
+ (_G(flags)[V131] == 402) ? 56 : 50,
+ 1);
+ break;
+
+ case 56:
+ ws_walk(449, 317, nullptr, 30, 3);
+ break;
+
+ case 100:
+ kernel_timing_trigger(1, 102);
+ break;
+
+ case 101:
+ switch (_val10) {
+ case 1000:
+ _val11 = 1105;
+ break;
+ case 1001:
+ _val5 = (_G(flags)[V132]) ? 300 : 1112;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 102:
+ if (_val2 == -1) {
+ kernel_timing_trigger(1, 103);
+ } else {
+ kernel_timing_trigger(1, _val2);
+ _val2 = -1;
+ }
+ break;
+
+ case 103:
+ switch (_val10) {
+ case 1000:
+ // TODO
+ default:
+ break;
+ }
+ break;
+
+ case 110:
+ switch (_val12) {
+ case 2000:
+ if (_val5 == -1) {
+ kernel_timing_trigger(1, 111);
+ } else {
+ kernel_timing_trigger(1, _val5);
+ _val5 = -1;
+ }
+ break;
+
+ case 2001:
+ if (_val13 == 2300) {
+ if (_val5 == -1) {
+ kernel_timing_trigger(1, 111);
+ } else {
+ kernel_timing_trigger(1, _val5);
+ _val5 = -1;
+ }
+ }
+ break;
+
+ case 2002:
+ if (_val5 == -1) {
+ kernel_timing_trigger(1, 111);
+ } else {
+ kernel_timing_trigger(1, _val5);
+ _val5 = -1;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 111:
+ switch (_val12) {
+ case 2000:
+ switch (_val13) {
+ case 2106:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 1, 10, 110,
+ _wolfClipping, 10, 10, 0);
+ break;
+ case 2108:
+ // TODO
+ case 2230:
+ player_set_commands_allowed(false);
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 111,
+ _wolfClippersDown, 8, 8, 0);
+ _val13 = 2231;
+ break;
+ case 2231:
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "rip talks wolf");
+ player_update_info();
+
+ _safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+ triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+ sendWSMessage_10000(1, _safariShadow, _shadow3, 1, 1, -1,
+ _shadow3, 1, 1, 0);
+ ws_hide_walker();
+
+ sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 7, 111,
+ _ripTalkWolf, 7, 7, 0);
+ _val13 = 2242;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
}
void Room402::pre_parser() {
Commit: 27490d73de15057259e5eadbcd51bd8b6bbe365e
https://github.com/scummvm/scummvm/commit/27490d73de15057259e5eadbcd51bd8b6bbe365e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-11T12:17:13-07:00
Commit Message:
M4: RIDDLE: More room 402 daemon
Changed paths:
engines/m4/riddle/rooms/section4/room402.cpp
engines/m4/riddle/rooms/section4/room402.h
diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index b6bf9d65caa..6c6afb7beda 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -274,6 +274,8 @@ void Room402::init() {
}
void Room402::daemon() {
+ int frame;
+
switch (_G(kernel).trigger) {
case 19:
ws_walk(449, 317, nullptr, 20, 3);
@@ -462,18 +464,57 @@ void Room402::daemon() {
switch (_val12) {
case 2000:
switch (_val13) {
+ case 2101:
+ frame = imath_ranged_rand(8, 10);
+ sendWSMessage_10000(1, _wolfieMach, _wolfClipping, frame, frame, 110,
+ _wolfClipping, frame, frame, 0);
+ break;
+
+ case 2104:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 8, 8, 110,
+ _wolfClipping, 8, 8, 0);
+ break;
+
+ case 2105:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 8, 10, -1,
+ _wolfClipping, 10, 10, 0);
+ break;
case 2106:
sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 1, 10, 110,
_wolfClipping, 10, 10, 0);
break;
+
case 2108:
- // TODO
+ sendWSMessage_10000(1, _machine1, _machine1Series, 44, 16, 111,
+ _machine1Series, 16, 16, 0);
+ _val13 = 2110;
+ break;
+
+ case 2109:
+ kernel_timing_trigger(4, 111);
+ _val13 = 2108;
+ break;
+
+ case 2110:
+ terminateMachineAndNull(_machine1);
+ _val13 = 2101;
+ kernel_timing_trigger(1, 110);
+
+ if (_soundPtr2) {
+ _G(kernel).trigger_mode = KT_PARSE;
+ digi_play(_soundPtr2, 1, 255, 777);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _soundPtr2 = nullptr;
+ }
+ break;
+
case 2230:
player_set_commands_allowed(false);
sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 111,
_wolfClippersDown, 8, 8, 0);
_val13 = 2231;
break;
+
case 2231:
_ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
triggerMachineByHashCallbackNegative, "rip talks wolf");
@@ -491,6 +532,218 @@ void Room402::daemon() {
_val13 = 2242;
break;
+ case 2250:
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 111,
+ _wolfWantsMoney, 1, 1, 0);
+ _val13 = 2252;
+ break;
+
+ case 2252:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 111,
+ _wolfClipping, 1, 1, 0);
+ _val13 = 2253;
+ break;
+
+ case 2253:
+ _val12 = 2001;
+ _val13 = 2300;
+ kernel_timing_trigger(1, 110);
+
+ if (!player_said("enter", "CASTLE DOOR") && !_G(flags)[V052]) {
+ player_set_commands_allowed(true);
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2001:
+ if (_val13 == 2300) {
+ sendWSMessage_10000(1, _wolfieMach, _wolfClipping, 1, 10, 110,
+ _wolfClipping, 10, 10, 0);
+ kernel_timing_trigger(35, 10000);
+ }
+ break;
+
+ case 2002:
+ switch (_val13) {
+ case 2141:
+ sendWSMessage_10000(1, _wolfieMach, _wolfShakesHead, 1, 1, 110,
+ _wolfShakesHead, 1, 1, 0);
+ _val13 = 2143;
+ break;
+
+ case 2142:
+ frame = imath_ranged_rand(1, 5);
+ sendWSMessage_10000(1, _wolfieMach, _wolfShakesHead, frame, frame, 110,
+ _wolfShakesHead, frame, frame, 0);
+ break;
+
+ case 2143:
+ sendWSMessage_10000(1, _wolfieMach, _wolfShakesHead, 1, 1, 110,
+ _wolfShakesHead, 1, 1, 0);
+ break;
+
+ case 2150:
+ _val13 = 2152;
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, 111,
+ _wolfWantsMoney, 16, 16, 0);
+
+ if (_soundPtr2) {
+ digi_play(_soundPtr2, 1);
+ _soundPtr2 = nullptr;
+ }
+ break;
+
+ case 2152:
+ _val13 = 2153;
+
+ if (_G(flags)[V111] > 0) {
+ _machine1 = series_stream("Rip popup", 7, 0, 111);
+ } else {
+ kernel_timing_trigger(1, 111);
+ }
+ break;
+
+ case 2153:
+ player_set_commands_allowed(true);
+ break;
+
+ case 2160:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 111,
+ _wolfClipping, 1, 1, 0);
+ _val13 = 2162;
+ break;
+
+ case 2162:
+ _val12 = 2000;
+ _val13 = 2104;
+ kernel_timing_trigger(1, 110);
+ conv_resume();
+ break;
+
+ case 2170:
+ _val13 = 2272;
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, -1,
+ _wolfWantsMoney, 16, 16, 0);
+
+ if (_soundPtr2) {
+ digi_play(_soundPtr2, 1, 255, 111);
+ _soundPtr2 = nullptr;
+ }
+ break;
+
+ case 2180:
+ _val13 = 2181;
+ digi_play(_soundPtr2, 1, 255, 111);
+ break;
+
+ case 2181:
+ _val13 = 2182;
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 111,
+ _wolfWantsMoney, 1, 1, 0);
+ break;
+
+ case 2182:
+ _val12 = 2002;
+ _val13 = 2143;
+ kernel_timing_trigger(1, 110);
+ conv_resume();
+ break;
+
+ case 2190:
+ if (_soundPtr2) {
+ digi_play(_soundPtr2, 1);
+ _soundPtr2 = nullptr;
+ }
+
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 16, 1, 111,
+ _wolfWantsMoney, 1, 1, 0);
+ _val13 = 2192;
+ break;
+
+ case 2192:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 43, 1, 111,
+ _wolfClipping, 1, 1, 0);
+ _val13 = 2193;
+ break;
+
+ case 2193:
+ _val12 = 2001;
+ _val13 = 2300;
+ kernel_timing_trigger(1, 110);
+ player_set_commands_allowed(true);
+ break;
+
+ case 2260:
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 111,
+ _wolfClippersDown, 8, 8, 0);
+ _val13 = 2261;
+ break;
+
+ case 2261:
+ digi_play("402_s04", 2);
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 8, 43, 111,
+ _wolfClippersDown, 43, 43, 0);
+ _val13 = 2262;
+ break;
+
+ case 2262:
+ if (_G(flags)[V111] > 0 || _currentNode == 16 ||
+ _currentNode == 14 || _currentNode == 26) {
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, -1,
+ _wolfWantsMoney, 16, 16, 0);
+
+ if (_soundPtr2) {
+ _G(kernel).trigger_mode = KT_PARSE;
+ digi_play(_soundPtr2, 1, 255, 777);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _soundPtr2 = nullptr;
+ }
+ } else {
+ _val13 = 2263;
+
+ if (_soundPtr2) {
+ digi_play(_soundPtr2, 1, 255, 111);
+ } else {
+ kernel_timing_trigger(1, 111);
+ }
+ }
+
+ if (inv_player_has("POMERANIAN MARKS")) {
+ player_set_commands_allowed(true);
+ }
+ break;
+
+ case 2263:
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, 110,
+ _wolfWantsMoney, 16, 16, 0);
+ _val13 = 2264;
+ break;
+
+ case 2264:
+ _machine1 = series_stream("Rip popup", 7, 0, 111);
+ _val13 = 2265;
+ break;
+
+ case 2265:
+ if (_soundPtr2) {
+ _soundPtr2 = nullptr;
+ _G(kernel).trigger_mode = KT_PARSE;
+ kernel_timing_trigger(1, 777);
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ } else {
+ player_set_commands_allowed(true);
+ }
+ break;
+
+ case 2272:
+ conv_resume();
+ break;
+
default:
break;
}
@@ -501,6 +754,51 @@ void Room402::daemon() {
}
break;
+ case 200:
+ _ripEnterLeave = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "rip talks wolf");
+
+ player_update_info();
+ _safariShadow = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale, 0x200, 0,
+ triggerMachineByHashCallbackNegative, "rip talks wolf SHADOW");
+ sendWSMessage_10000(1, _ripEnterLeave, _ripTalkWolf, 1, 7, -1,
+ _ripTalkWolf, 7, 7, 0);
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 1, 8, 201,
+ _wolfClippersDown, 8, 8, 0);
+ break;
+
+ case 201:
+ digi_play("402_s04", 2);
+ sendWSMessage_10000(1, _wolfieMach, _wolfClippersDown, 8, 43, 202,
+ _wolfClippersDown, 43, 43, 0);
+ break;
+
+ case 202:
+ sendWSMessage_10000(1, _wolfieMach, _ripPaysWolfie, 1, 24, 203,
+ _ripPaysWolfie, 24, 24, 0);
+ break;
+
+ case 203:
+ sendWSMessage_10000(1, _wolfieMach, _wolfWantsMoney, 1, 16, 204,
+ _wolfWantsMoney, 16, 16, 0);
+
+ if (!_G(flags)[V115])
+ digi_play("402w07", 1);
+ break;
+
+ case 204:
+ digi_play("950_s23", 2);
+ kernel_timing_trigger(30, 205);
+ break;
+
+ // TODO
+
+ case 223:
+ sendWSMessage_10000(1, _wolfieMach, _ripPaysWolfie, 1, 24, 224,
+ _ripPaysWolfie, 24, 24, 0);
+ break;
+
default:
break;
}
diff --git a/engines/m4/riddle/rooms/section4/room402.h b/engines/m4/riddle/rooms/section4/room402.h
index 5ce4fd11089..c8bd7b4489f 100644
--- a/engines/m4/riddle/rooms/section4/room402.h
+++ b/engines/m4/riddle/rooms/section4/room402.h
@@ -66,6 +66,8 @@ private:
int _ripClimbKnock = 0;
int _doorOpens = 0;
machine *_castleDoor = nullptr;
+ machine *_machine1 = nullptr;
+ int _machine1Series = 0;
void conv402a();
void conv402a777();
More information about the Scummvm-git-logs
mailing list