[Scummvm-git-logs] scummvm master -> 7d09fb5b28b65598dede020bfabec25edc306fd3
dreammaster
noreply at scummvm.org
Thu Oct 10 05:25:27 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:
d2074c5959 M4: RIDDLE: Room 304 snake fixes
7d09fb5b28 M4: RIDDLE: Properly implement triggerMachineByHash_3000
Commit: d2074c59596621cf3a8122c03a9e6fa19cae918c
https://github.com/scummvm/scummvm/commit/d2074c59596621cf3a8122c03a9e6fa19cae918c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-09T21:27:26-07:00
Commit Message:
M4: RIDDLE: Room 304 snake fixes
Changed paths:
engines/m4/riddle/rooms/section3/room304.cpp
engines/m4/riddle/rooms/section3/room304.h
diff --git a/engines/m4/riddle/rooms/section3/room304.cpp b/engines/m4/riddle/rooms/section3/room304.cpp
index ef0a8099d8d..7e6795ed7a3 100644
--- a/engines/m4/riddle/rooms/section3/room304.cpp
+++ b/engines/m4/riddle/rooms/section3/room304.cpp
@@ -81,7 +81,8 @@ void Room304::init() {
digi_preload("304_s04");
player_set_commands_allowed(false);
- _val2 = _val3 = _val4 = 0;
+ _useSword = _useHandlingStick = false;
+ _val4 = 0;
ws_demand_location(452, 285, 9);
kernel_timing_trigger(1, 49);
_trunk = series_show_sprite("one frame trunk", 0, 0);
@@ -154,7 +155,7 @@ void Room304::daemon() {
void Room304::pre_parser() {
bool takeFlag = player_said("take");
- bool gearFlag = player_said("gear");
+ bool useFlag = player_said("gear");
if (_flag1) {
terminateMachineAndNull(_machine3);
@@ -164,31 +165,32 @@ void Room304::pre_parser() {
interface_show();
}
+ // At the very start of the game, you can't freely move around
+ // the room until the Cobra has been dealt with
if (_G(flags)[V001]) {
- _G(player).need_to_walk = false;
- _G(player).ready_to_walk = true;
- _G(player).waiting_for_walk = false;
+ _G(player).resetWalk();
- if ((takeFlag || gearFlag) && player_said("samurai sword")) {
+ if ((takeFlag || useFlag) && player_said("samurai sword")) {
player_set_commands_allowed(false);
- _val2 = 1;
+ _useSword = true;
digi_preload("304_s10");
digi_preload("304_s05");
_cutSnake = series_load("CUT SNAKE");
sendWSMessage(0xa0000, 0, _machine2, 0, nullptr, 1);
}
- if ((takeFlag || gearFlag) && player_said("handling stick")) {
+ if ((takeFlag || useFlag) && player_said("handling stick")) {
digi_preload("304_s03");
digi_preload("304_s08");
digi_preload("304_s02");
digi_preload("304_s11");
+ _useHandlingStick = true;
}
}
}
void Room304::parser() {
- bool lookFlag = player_said_any("look", "look any");
+ bool lookFlag = player_said_any("look", "look at");
bool takeFlag = player_said("take");
bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
@@ -273,11 +275,10 @@ void Room304::parser() {
digi_play("304r64", 1);
}
} else if (_G(flags)[V001] && (takeFlag || useFlag) && player_said("handling stick")) {
- // This is such an enormous switch in the original that
- // it's been refactored to it's own method
+ // Catching snake with the handling stick
handlingStick();
- } if (lookFlag && player_said_any("native mask", "shield")) {
+ } else if (lookFlag && player_said_any("native mask", "shield")) {
digi_play("304r05", 1);
} else if (lookFlag && player_said("mailbag")) {
digi_play("304r15", 1);
@@ -418,23 +419,24 @@ void Room304::intrMsg(frac16 myMessage, struct machine *sender) {
return;
}
- if (r->_val3) {
+ if (r->_useHandlingStick) {
ws_demand_location(382, 295);
+ ws_hide_walker();
player_set_commands_allowed(false);
terminateMachineAndNull(r->_machine2);
terminateMachineAndNull(r->_stick);
digi_stop(1);
terminateMachineAndNull(r->_trunk);
- r->_handle = series_stream("SNAKE HANDLE", 5, 0, 17);
- series_stream_break_on_frame(r->_handle, 10, 13);
+ r->_safe3 = series_stream("SNAKE HANDLE", 5, 0, 17);
+ series_stream_break_on_frame(r->_safe3, 10, 13);
sendWSMessage(0x200000, 0, r->_machine1, 0, nullptr, 1);
_G(flags)[V084] = 2;
return;
}
}
- if ((myMessage >> 16) == 58 && r->_val2) {
+ if ((myMessage >> 16) == 58 && r->_useSword) {
ws_demand_location(382, 295);
ws_hide_walker();
player_set_commands_allowed(false);
@@ -454,19 +456,19 @@ void Room304::intrMsg(frac16 myMessage, struct machine *sender) {
void Room304::handlingStick() {
switch (_G(kernel).trigger) {
case 13:
- series_stream_break_on_frame(_field64, 29, 14);
+ series_stream_break_on_frame(_safe3, 29, 14);
digi_play("304_s03", 1);
break;
case 14:
- series_stream_break_on_frame(_field64, 106, 15);
+ series_stream_break_on_frame(_safe3, 106, 15);
digi_play("304_s08", 1);
break;
case 15:
- series_stream_break_on_frame(_field64, 111, 16);
+ series_stream_break_on_frame(_safe3, 111, 16);
digi_play("304_s02", 1);
break;
case 16:
- series_stream_break_on_frame(_field64, 145, 19);
+ series_stream_break_on_frame(_safe3, 145, 19);
midi_stop();
digi_play("304_s11", 1);
break;
@@ -798,7 +800,7 @@ void Room304::handlingStick() {
_suit1 = series_load("rip suit rt hand gest talk pos3");
setGlobals1(_suit1, 1, 11, 12, 15, 1);
sendWSMessage_110000(73);
- digi_play(_val3 ? "304r24" : "304r23", 1, 255, 73);
+ digi_play(_useHandlingStick ? "304r24" : "304r23", 1, 255, 73);
sendWSMessage_10000(_machine1, 242, 274, 3, 18, 0);
break;
@@ -816,7 +818,7 @@ void Room304::handlingStick() {
_suit3 = series_load("mei ny hands out talk pos4");
setGlobals1(_suit3, 1, 9, 10, 15, 1);
sendWSMessage_110000(71);
- digi_play(_val3 ? "304m03" : "304m02", 1, 255, 71);
+ digi_play(_useHandlingStick ? "304m03" : "304m02", 1, 255, 71);
break;
case 75:
diff --git a/engines/m4/riddle/rooms/section3/room304.h b/engines/m4/riddle/rooms/section3/room304.h
index 3b23aacf59e..a60c13444be 100644
--- a/engines/m4/riddle/rooms/section3/room304.h
+++ b/engines/m4/riddle/rooms/section3/room304.h
@@ -32,20 +32,18 @@ class Room304 : public Room {
private:
bool _flag1 = false;
int _val1 = 0;
- int _val2 = 0;
- int _val3 = 0;
+ bool _useSword = false;
+ bool _useHandlingStick = false;
int _val4 = 0;
machine *_sword = nullptr;
machine *_trunk = nullptr;
machine *_stick = nullptr;
- machine *_handle = nullptr;
int _smoke = -1;
machine *_machine1 = nullptr;
machine *_machine2 = nullptr;
machine *_machine3 = nullptr;
machine *_pu = nullptr;
machine *_cobraKills = nullptr;
- machine *_field64 = nullptr;
machine *_field60 = nullptr;
int _cutSnake = -1;
int _mei1 = -1;
Commit: 7d09fb5b28b65598dede020bfabec25edc306fd3
https://github.com/scummvm/scummvm/commit/7d09fb5b28b65598dede020bfabec25edc306fd3
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-10-09T22:25:09-07:00
Commit Message:
M4: RIDDLE: Properly implement triggerMachineByHash_3000
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section3/room303.cpp
engines/m4/riddle/rooms/section3/room304.cpp
engines/m4/riddle/rooms/section4/room402.cpp
engines/m4/riddle/rooms/section4/room403.cpp
engines/m4/riddle/rooms/section4/room404.cpp
engines/m4/riddle/rooms/section4/room405.cpp
engines/m4/riddle/rooms/section4/room408.cpp
engines/m4/riddle/rooms/section5/room504.cpp
engines/m4/riddle/rooms/section6/room603.cpp
engines/m4/riddle/rooms/section6/room605.cpp
engines/m4/riddle/rooms/section6/room608.cpp
engines/m4/riddle/rooms/section6/room615.cpp
engines/m4/riddle/rooms/section8/room801.cpp
engines/m4/riddle/triggers.cpp
engines/m4/riddle/triggers.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 723e19f212c..06d9e5e24dc 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -47,52 +47,6 @@ void Room::restoreAutosave() {
}
}
-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);
-}
-
-void Room::triggerMachineByHashCallbackAlways(frac16 myMessage, machine *sender) {
- kernel_trigger_dispatchx(myMessage);
-}
-
-void Room::triggerMachineByHashCallback3000(frac16 myMessage, machine *sender) {
- int triggerType = _G(globals)[GLB_TEMP_1] >> 16;
- int param = _G(globals)[GLB_TEMP_2] >> 16;
- int msg = myMessage >> 16;
-
- switch (triggerType) {
- case 0:
- break;
-
- case 1:
- case 3:
- if (msg >= 0)
- kernel_trigger_dispatchx(myMessage);
- break;
-
- case 2:
- if (param)
- sendWSMessage(0x30000, triggerType, sender, 0, nullptr, 1);
- else if(msg >= 0)
- kernel_trigger_dispatchx(myMessage);
- break;
-
- default:
- error("spawn walker callback with triggerType = %d", triggerType);
- break;
- }
-}
-
int Room::checkFlags(bool flag) {
int count = 0;
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 118568b57ec..c1e220a153f 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -41,12 +41,6 @@ private:
static int _ripSketching;
protected:
- static void intrMsgNull(frac16 myMessage, machine *sender) {}
- static void triggerMachineByHashCallback(frac16 myMessage, machine *sender = nullptr);
- static void triggerMachineByHashCallbackNegative(frac16 myMessage, machine *sender = nullptr);
- static void triggerMachineByHashCallback3000(frac16 myMessage, machine *sender = nullptr);
- static void triggerMachineByHashCallbackAlways(frac16 myMessage, machine *sender = nullptr);
-
void restoreAutosave();
/**
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 43527637fc3..5593e3d48dc 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -148,7 +148,7 @@ void Room303::init() {
ws_walk_load_walker_series(S3_NORMAL_DIRS, S3_NORMAL_NAMES);
ws_walk_load_shadow_series(S3_SHADOW_DIRS, S3_SHADOW_NAMES);
- _machine1 = triggerMachineByHash_3000(8, 2, S3_NORMAL_DIRS, S3_SHADOW_DIRS,
+ _machine1 = triggerMachineByHash_3000(8, 2, *S3_NORMAL_DIRS, *S3_SHADOW_DIRS,
470, 226, 9, triggerMachineByHashCallback3000, "fl");
_val13 = 1;
@@ -159,7 +159,7 @@ void Room303::init() {
ws_walk_load_walker_series(S3_NORMAL_DIRS2, S3_NORMAL_NAMES2);
ws_walk_load_shadow_series(S3_SHADOW_DIRS2, S3_SHADOW_NAMES2);
- _hands4 = triggerMachineByHash_3000(8, 3, S3_NORMAL_DIRS2, S3_SHADOW_DIRS2,
+ _hands4 = triggerMachineByHash_3000(8, 3, *S3_NORMAL_DIRS2, *S3_SHADOW_DIRS2,
445, 215, 7, triggerMachineByHashCallback3000, "mc");
_gestTalk4 = series_load("mei ny lft hand gest talk pos4");
kernel_timing_trigger(1, 107);
@@ -1034,10 +1034,10 @@ void Room303::daemon() {
terminateMachineAndNull(_machine1);
if (_val13)
- _machine1 = triggerMachineByHash_3000(8, 2, S3_NORMAL_DIRS, S3_SHADOW_DIRS,
+ _machine1 = triggerMachineByHash_3000(8, 2, *S3_NORMAL_DIRS, *S3_SHADOW_DIRS,
480, 256, 7, triggerMachineByHashCallback3000, "fl walker");
else
- _machine1 = triggerMachineByHash_3000(8, 2, S3_NORMAL_DIRS, S3_SHADOW_DIRS,
+ _machine1 = triggerMachineByHash_3000(8, 2, *S3_NORMAL_DIRS, *S3_SHADOW_DIRS,
706, 256, 5, triggerMachineByHashCallback3000, "fl walker");
_G(kernel).trigger_mode = KT_PARSE;
diff --git a/engines/m4/riddle/rooms/section3/room304.cpp b/engines/m4/riddle/rooms/section3/room304.cpp
index 7e6795ed7a3..812428c3393 100644
--- a/engines/m4/riddle/rooms/section3/room304.cpp
+++ b/engines/m4/riddle/rooms/section3/room304.cpp
@@ -499,7 +499,7 @@ void Room304::handlingStick() {
_headUp1 = series_load("fl returns to head up");
_headUp2 = series_ranged_play("fl returns to head up",
1, 0, 0, 0, 100, 0x100, 250, 31);
- _machine1 = triggerMachineByHash_3000(8, 3, S3_NORMAL_DIRS2, S3_SHADOW_DIRS2,
+ _machine1 = triggerMachineByHash_3000(8, 3, *S3_NORMAL_DIRS2, *S3_SHADOW_DIRS2,
464, 283, 8, triggerMachineByHashCallback3000, "mc");
ws_demand_facing(8);
kernel_timing_trigger(1, 74);
diff --git a/engines/m4/riddle/rooms/section4/room402.cpp b/engines/m4/riddle/rooms/section4/room402.cpp
index 7aacc31ba9b..d22629cd9d7 100644
--- a/engines/m4/riddle/rooms/section4/room402.cpp
+++ b/engines/m4/riddle/rooms/section4/room402.cpp
@@ -237,7 +237,7 @@ void Room402::init() {
_G(flags)[V131] = 408;
ws_demand_location(517, 239, 3);
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
475, 300, 11, triggerMachineByHashCallback3000, "wolf_walker");
sendWSMessage_10000(_wolfWalker, 549, 239, 9, 42, 0);
kernel_timing_trigger(90, 40);
@@ -1268,7 +1268,7 @@ void Room402::daemon() {
case 302:
terminateMachineAndNull(_wolfieMach);
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
484, 315, 11, triggerMachineByHashCallback3000, "wolf_walker");
sendWSMessage_10000(_wolfWalker, 517, 239, 9, -1, 0);
@@ -1343,7 +1343,7 @@ void Room402::daemon() {
case 357:
digi_play("402w11", 1);
terminateMachineAndNull(_wolfieMach);
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
484, 315, 11, triggerMachineByHashCallback3000, "wolf_walker");
sendWSMessage_10000(_wolfWalker, 517, 239, 9, -1, 0);
kernel_timing_trigger(150, 358);
diff --git a/engines/m4/riddle/rooms/section4/room403.cpp b/engines/m4/riddle/rooms/section4/room403.cpp
index c26c984ab32..87cb526a453 100644
--- a/engines/m4/riddle/rooms/section4/room403.cpp
+++ b/engines/m4/riddle/rooms/section4/room403.cpp
@@ -1227,7 +1227,7 @@ void Room403::daemon() {
break;
case 310:
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
620, 313, 3, triggerMachineByHashCallbackNegative, "wolf_walker");
DisposePath(_wolfWalker->walkPath);
_wolfWalker->walkPath = CreateCustomPath(1067, 313, -1);
@@ -1303,7 +1303,7 @@ void Room403::daemon() {
sendWSMessage_120000(-1);
terminateMachineAndNull(_wolfie);
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
1067, 313, 3, triggerMachineByHashCallback3000, "wolf_walker");
sendWSMessage_10000(_wolfWalker, 620, 313, 3, 324, 0);
break;
@@ -1908,7 +1908,7 @@ void Room403::edgerBell() {
if (_G(flags)[V119] >= 7) {
ws_walk_load_shadow_series(S4_SHADOW_DIRS, S4_SHADOW_NAMES);
ws_walk_load_walker_series(S4_NORMAL_DIRS, S4_NORMAL_NAMES);
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS, 620, 323, 3,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS, 620, 323, 3,
triggerMachineByHashCallback3000, "wolf_walker");
_wolfAdmonish = series_load("WOLF ADMONISHES RIP");
kernel_timing_trigger(120, 4);
@@ -1955,7 +1955,7 @@ void Room403::edgerBell() {
case 9:
terminateMachineAndNull(_wolfie);
_wolfWalker = triggerMachineByHash_3000(8, 8,
- S4_NORMAL_DIRS, S4_SHADOW_DIRS, 687, 323, 3,
+ *S4_NORMAL_DIRS, *S4_SHADOW_DIRS, 687, 323, 3,
triggerMachineByHashCallback3000, "wolf_walker");
sendWSMessage_10000(_wolfWalker, 620, 323, 3, 10, 0);
playNum2(_G(flags)[V119]);
diff --git a/engines/m4/riddle/rooms/section4/room404.cpp b/engines/m4/riddle/rooms/section4/room404.cpp
index 09bfb90d119..13e14aea3dc 100644
--- a/engines/m4/riddle/rooms/section4/room404.cpp
+++ b/engines/m4/riddle/rooms/section4/room404.cpp
@@ -105,7 +105,7 @@ void Room404::init() {
ws_walk_load_walker_series(NORMAL_DIRS, NORMAL_NAMES);
ws_demand_location(340, 480, 2);
- _machine1 = triggerMachineByHash_3000(8, 10, NORMAL_DIRS, SHADOW_DIRS,
+ _machine1 = triggerMachineByHash_3000(8, 10, *NORMAL_DIRS, *SHADOW_DIRS,
380, 421, 1, triggerMachineByHashCallback3000, "BUTLER_walker");
if (!_G(kittyScreaming) || !player_been_here(404)) {
@@ -183,7 +183,7 @@ void Room404::daemon() {
case 32:
terminateMachineAndNull(_butlerTalks);
- _machine1 = triggerMachineByHash_3000(8, 10, NORMAL_DIRS, SHADOW_DIRS,
+ _machine1 = triggerMachineByHash_3000(8, 10, *NORMAL_DIRS, *SHADOW_DIRS,
390, 332, 9, triggerMachineByHashCallback3000, "BUTLER_walker");
kernel_timing_trigger(270, 33);
break;
diff --git a/engines/m4/riddle/rooms/section4/room405.cpp b/engines/m4/riddle/rooms/section4/room405.cpp
index 4bea6697508..c7f8c48dcdd 100644
--- a/engines/m4/riddle/rooms/section4/room405.cpp
+++ b/engines/m4/riddle/rooms/section4/room405.cpp
@@ -99,7 +99,7 @@ void Room405::init() {
} else {
ws_walk_load_shadow_series(SHADOW_DIRS, SHADOW_NAMES);
ws_walk_load_walker_series(NORMAL_DIRS, NORMAL_NAMES);
- _baron = triggerMachineByHash_3000(8, 11, NORMAL_DIRS, SHADOW_DIRS, 185, 365, 1,
+ _baron = triggerMachineByHash_3000(8, 11, *NORMAL_DIRS, *SHADOW_DIRS, 185, 365, 1,
triggerMachineByHashCallback3000, "BARON_walker");
ws_walk(329, 320, nullptr, 20, 9);
}
diff --git a/engines/m4/riddle/rooms/section4/room408.cpp b/engines/m4/riddle/rooms/section4/room408.cpp
index 6adf921bdd0..e7990618b5e 100644
--- a/engines/m4/riddle/rooms/section4/room408.cpp
+++ b/engines/m4/riddle/rooms/section4/room408.cpp
@@ -439,7 +439,7 @@ void Room408::daemon() {
break;
case 300:
- _wolfWalker = triggerMachineByHash_3000(8, 8, S4_NORMAL_DIRS, S4_SHADOW_DIRS,
+ _wolfWalker = triggerMachineByHash_3000(8, 8, *S4_NORMAL_DIRS, *S4_SHADOW_DIRS,
-20, 345, 3, triggerMachineByHashCallback3000, "WOLF_WALKER");
sendWSMessage_10000(_wolfWalker, 660, 345, 9, -1, 0);
kernel_timing_trigger(400, 302);
diff --git a/engines/m4/riddle/rooms/section5/room504.cpp b/engines/m4/riddle/rooms/section5/room504.cpp
index f008d222e46..9b38328e77c 100644
--- a/engines/m4/riddle/rooms/section5/room504.cpp
+++ b/engines/m4/riddle/rooms/section5/room504.cpp
@@ -820,7 +820,7 @@ void Room504::daemon() {
series_unload(_mzMenancesClimbs);
digi_unload("504_S02D");
- _menendez = triggerMachineByHash_3000(8, 16, NORMAL_DIRS, SHADOW_DIRS,
+ _menendez = triggerMachineByHash_3000(8, 16, *NORMAL_DIRS, *SHADOW_DIRS,
1005, 155, 9, triggerMachineByHashCallback3000, "Emilio Menendez Walker");
sendWSMessage_10000(_menendez, -_G(game_buff_ptr)->x1 - 30,
155, 9, 536, 1);
diff --git a/engines/m4/riddle/rooms/section6/room603.cpp b/engines/m4/riddle/rooms/section6/room603.cpp
index 5a14c79c20e..eb4ebe73069 100644
--- a/engines/m4/riddle/rooms/section6/room603.cpp
+++ b/engines/m4/riddle/rooms/section6/room603.cpp
@@ -91,14 +91,14 @@ void Room603::init() {
ws_walk_load_walker_series(NORMAL_DIRS1, NORMAL_NAMES1);
ws_walk_load_shadow_series(SHADOW_DIRS1, SHADOW_NAMES1);
- _shenWalker = triggerMachineByHash_3000(8, 12, NORMAL_DIRS1, SHADOW_DIRS1, 525, 238, 3,
+ _shenWalker = triggerMachineByHash_3000(8, 12, *NORMAL_DIRS1, *SHADOW_DIRS1, 525, 238, 3,
triggerMachineByHashCallback3000, "shen suit gun walker");
sendWSMessage_10000(_shenWalker, 535, 235, 3, 10, 1);
ws_walk_load_walker_series(NORMAL_DIRS2, NORMAL_NAMES2);
ws_walk_load_shadow_series(SHADOW_DIRS2, SHADOW_NAMES2);
- _kuangWalker = triggerMachineByHash_3000(8, 13, NORMAL_DIRS2, SHADOW_DIRS2, 554, 245, 2,
+ _kuangWalker = triggerMachineByHash_3000(8, 13, *NORMAL_DIRS2, *SHADOW_DIRS2, 554, 245, 2,
triggerMachineByHashCallback3000, "kuang suit walker");
sendWSMessage_10000(_kuangWalker, 563, 244, 2, -1, 1);
return;
@@ -959,7 +959,7 @@ void Room603::daemon() {
_trigger1 = 0;
terminateMachineAndNull(_ttShadow);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
291, 293, 4, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 357, 283, 1, 405, 0);
conv_resume();
@@ -981,7 +981,7 @@ void Room603::daemon() {
case 410:
terminateMachineAndNull(_tt);
terminateMachineAndNull(_ttShadow);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
291, 293, 4, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 397, 286, 2, 415, 0);
kernel_timing_trigger(200, 411);
@@ -1176,7 +1176,7 @@ void Room603::daemon() {
case 510:
terminateMachineAndNull(_tt);
_trigger1 = 0;
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
291, 293, 4, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 357, 283, 3, 0x200, 0);
kernel_timing_trigger(100, 511);
@@ -1202,7 +1202,7 @@ void Room603::daemon() {
case 530:
terminateMachineAndNull(_tt);
_trigger1 = 0;
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
291, 293, 4, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 397, 286, 2, 533, 0);
kernel_timing_trigger(70, 531);
diff --git a/engines/m4/riddle/rooms/section6/room605.cpp b/engines/m4/riddle/rooms/section6/room605.cpp
index f576ebf11bc..d4d7ffa3b9a 100644
--- a/engines/m4/riddle/rooms/section6/room605.cpp
+++ b/engines/m4/riddle/rooms/section6/room605.cpp
@@ -86,7 +86,7 @@ void Room605::init() {
ws_walk_load_walker_series(SECTION6_NORMAL_DIRS, SECTION6_NORMAL_NAMES);
ws_walk_load_shadow_series(SECTION6_SHADOW_DIRS, SECTION6_SHADOW_NAMES);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
450, 339, 1, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 476, 290, 5, 10, 1);
@@ -280,7 +280,7 @@ void Room605::daemon() {
case 203:
terminateMachineAndNull(_tt);
terminateMachineAndNull(_ttShadow);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
476, 290, 5, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 485, 199, 2, 208, 0);
digi_play("19_07n04", 1, 255, 206);
diff --git a/engines/m4/riddle/rooms/section6/room608.cpp b/engines/m4/riddle/rooms/section6/room608.cpp
index 21d8c84da61..f2c150aa1ce 100644
--- a/engines/m4/riddle/rooms/section6/room608.cpp
+++ b/engines/m4/riddle/rooms/section6/room608.cpp
@@ -141,7 +141,7 @@ void Room608::init() {
ws_walk_load_walker_series(SECTION6_NORMAL_DIRS, SECTION6_NORMAL_NAMES);
ws_walk_load_shadow_series(SECTION6_SHADOW_DIRS, SECTION6_SHADOW_NAMES);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
-30, 324, 3, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 105, 324, 5, 20, 1);
} else if (_G(flags)[V203] == 6) {
@@ -162,7 +162,7 @@ void Room608::init() {
ws_walk_load_walker_series(SECTION6_NORMAL_DIRS, SECTION6_NORMAL_NAMES);
ws_walk_load_shadow_series(SECTION6_SHADOW_DIRS, SECTION6_SHADOW_NAMES);
- _tt = triggerMachineByHash_3000(8, 9, SECTION6_NORMAL_DIRS, SECTION6_SHADOW_DIRS,
+ _tt = triggerMachineByHash_3000(8, 9, *SECTION6_NORMAL_DIRS, *SECTION6_SHADOW_DIRS,
-30, 324, 3, triggerMachineByHashCallback3000, "tt walker");
sendWSMessage_10000(_tt, 103, 318, 3, 700, 1);
}
@@ -859,7 +859,7 @@ void Room608::daemon() {
case 500:
terminateMachineAndNull(_ol);
- _ol = triggerMachineByHash_3000(8, 15, NORMAL_DIRS1, SHADOW_DIRS1,
+ _ol = triggerMachineByHash_3000(8, 15, *NORMAL_DIRS1, *SHADOW_DIRS1,
499, 318, 9, triggerMachineByHashCallback3000, "ow walker");
sendWSMessage_10000(_ol, 487, 290, 11, -1, 1);
kernel_timing_trigger(60, 501);
@@ -1051,7 +1051,7 @@ void Room608::daemon() {
case 548:
terminateMachineAndNull(_ol);
- _ol = triggerMachineByHash_3000(8, 15, NORMAL_DIRS1, SHADOW_DIRS1,
+ _ol = triggerMachineByHash_3000(8, 15, *NORMAL_DIRS1, *SHADOW_DIRS1,
487, 293, 9, triggerMachineByHashCallback3000, "ow walker");
sendWSMessage_10000(_ol, 417, 295, 9, 549, 0);
kernel_timing_trigger(300, 551);
diff --git a/engines/m4/riddle/rooms/section6/room615.cpp b/engines/m4/riddle/rooms/section6/room615.cpp
index 533b5e08a57..0827707c33e 100644
--- a/engines/m4/riddle/rooms/section6/room615.cpp
+++ b/engines/m4/riddle/rooms/section6/room615.cpp
@@ -192,7 +192,7 @@ void Room615::daemon() {
series_load("SAFARI SHADOW 1", 11);
series_load("SAFARI SHADOW 1", 12);
- _pu = triggerMachineByHash_3000(8, 0, RIPLEY_SERIES_DIRS, RIPLEY_SHADOWS_DIRS,
+ _pu = triggerMachineByHash_3000(8, 0, *RIPLEY_SERIES_DIRS, *RIPLEY_SHADOWS_DIRS,
392, 361, 10, triggerMachineByHashCallback3000, "rip");
sendWSMessage_10000(_pu, 426, 347, 9, 50, 1);
diff --git a/engines/m4/riddle/rooms/section8/room801.cpp b/engines/m4/riddle/rooms/section8/room801.cpp
index dc67c9addb2..4d3cfc39e61 100644
--- a/engines/m4/riddle/rooms/section8/room801.cpp
+++ b/engines/m4/riddle/rooms/section8/room801.cpp
@@ -107,7 +107,7 @@ void Room801::init() {
_roomStates_field60 = series_load("shadow of de plane", -1, nullptr);
ws_walk_load_shadow_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1);
ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2);
- _roomStates_field9Eh = triggerMachineByHash_3000(8, 4, S8_SHADOW_DIRS2, S8_SHADOW_DIRS1,
+ _roomStates_field9Eh = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1,
20, 310, 3, triggerMachineByHashCallback3000, "mc_trek");
kernel_timing_trigger(60, 1, nullptr);
} else if (_G(game).previous_room < 850 || _G(game).previous_room != -2) {
diff --git a/engines/m4/riddle/triggers.cpp b/engines/m4/riddle/triggers.cpp
index f5366d3f158..63e470970cd 100644
--- a/engines/m4/riddle/triggers.cpp
+++ b/engines/m4/riddle/triggers.cpp
@@ -101,20 +101,25 @@ void sendWSMessage_10000(machine *recv, int val1, int val2, int val3,
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
+machine *triggerMachineByHash_3000(int myHash, int dataHash, int normalDir, int shadowDir,
+ int param1, int param2, int index, MessageCB intrMsg, const char *machName) {
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
+ _G(globals)[GLB_TEMP_1] = dataHash << 16;
+ _G(globals)[GLB_TEMP_2] = normalDir << 24;
+ _G(globals)[GLB_TEMP_3] = shadowDir << 24;
+ _G(globals)[GLB_TEMP_4] = param1 << 16;
+ _G(globals)[GLB_TEMP_5] = param2 << 16;
+ _G(globals)[GLB_TEMP_6] = ((param2 << 16) - _G(globals)[V002])
+ * _G(globals)[V006] + _G(globals)[V004];
+ _G(globals)[GLB_TEMP_7] = NUMS[index] << 16;
+
+ machine *result = TriggerMachineByHash(myHash, nullptr, dataHash, 0,
+ intrMsg ? intrMsg : &triggerMachineByHashCallback3000,
+ false, machName);
+ _G(inverse_pal)->release();
+
+ return result;
}
void sendWSMessage_60000(machine *mach) {
@@ -419,6 +424,55 @@ void sendWSMessage_multi(const char *name) {
}
}
+void intrMsgNull(frac16 myMessage, machine *sender) {
+}
+
+void triggerMachineByHashCallback(frac16 myMessage, machine *) {
+ int32 hi = myMessage >> 16;
+
+ if (hi >= 0)
+ kernel_trigger_dispatch_now(hi);
+}
+
+void triggerMachineByHashCallbackNegative(frac16 myMessage, machine *) {
+ int32 hi = myMessage >> 16;
+
+ if (hi < 0)
+ kernel_trigger_dispatchx(hi);
+}
+
+void triggerMachineByHashCallbackAlways(frac16 myMessage, machine *sender) {
+ kernel_trigger_dispatchx(myMessage);
+}
+
+void triggerMachineByHashCallback3000(frac16 myMessage, machine *sender) {
+ int triggerType = _G(globals)[GLB_TEMP_1] >> 16;
+ int param = _G(globals)[GLB_TEMP_2] >> 16;
+ int msg = myMessage >> 16;
+
+ switch (triggerType) {
+ case 0:
+ break;
+
+ case 1:
+ case 3:
+ if (msg >= 0)
+ kernel_trigger_dispatchx(myMessage);
+ break;
+
+ case 2:
+ if (param)
+ sendWSMessage(0x30000, triggerType, sender, 0, nullptr, 1);
+ else if (msg >= 0)
+ kernel_trigger_dispatchx(myMessage);
+ break;
+
+ default:
+ error("spawn walker callback with triggerType = %d", triggerType);
+ break;
+ }
+}
+
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/triggers.h b/engines/m4/riddle/triggers.h
index 19decf91136..74b5000aedd 100644
--- a/engines/m4/riddle/triggers.h
+++ b/engines/m4/riddle/triggers.h
@@ -45,9 +45,9 @@ extern void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
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);
+machine *triggerMachineByHash_3000(int myHash, int dataHash,
+ int normalDir, int shadowDir, int param1, int param2,
+ int index, 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);
@@ -87,6 +87,11 @@ extern void sendWSMessage_210000(machine *recv, int trigger);
extern void sendWSMessage_29a0000(machine *recv, int val1);
extern void sendWSMessage_29a0000(int val1);
+extern void intrMsgNull(frac16 myMessage, machine *sender);
+extern void triggerMachineByHashCallback(frac16 myMessage, machine *sender = nullptr);
+extern void triggerMachineByHashCallbackNegative(frac16 myMessage, machine *sender = nullptr);
+extern void triggerMachineByHashCallback3000(frac16 myMessage, machine *sender = nullptr);
+extern void triggerMachineByHashCallbackAlways(frac16 myMessage, machine *sender = nullptr);
} // namespace Riddle
} // namespace M4
More information about the Scummvm-git-logs
mailing list