[Scummvm-git-logs] scummvm master -> 6cce93bddf4d5d0e1a2788f36a45f4ef3139666d
dreammaster
noreply at scummvm.org
Wed Jul 31 05:37:12 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
6cce93bddf M4: RIDDLE: Added room 303 priestTalk method
Commit: 6cce93bddf4d5d0e1a2788f36a45f4ef3139666d
https://github.com/scummvm/scummvm/commit/6cce93bddf4d5d0e1a2788f36a45f4ef3139666d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-30T22:37:06-07:00
Commit Message:
M4: RIDDLE: Added room 303 priestTalk method
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/room303.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index cbfb8d3e4a2..ae2f695988e 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -295,6 +295,18 @@ void Room::sendWSMessage_110000(int trigger) {
sendWSMessage_110000(_G(my_walker), trigger);
}
+void Room::sendWSMessage_120000(machine *walker, int trigger) {
+ if (!trigger)
+ trigger = -1;
+
+ _G(globals)[V023] = kernel_trigger_create(trigger);
+ sendWSMessage(0x120000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_120000(int trigger) {
+ sendWSMessage_120000(_G(my_walker), trigger);
+}
+
void Room::sendWSMessage_140000(machine *walker, int trigger) {
if (!trigger)
trigger = -1;
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 0aaa622af05..2238c399dfa 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -79,6 +79,8 @@ protected:
void sendWSMessage_E0000(machine *walker);
void sendWSMessage_E0000();
void sendWSMessage_110000(machine *walker, int trigger);
+ void sendWSMessage_120000(int trigger);
+ void sendWSMessage_120000(machine *walker, int trigger);
void sendWSMessage_110000(int trigger);
void sendWSMessage_140000(machine *walker, int trigger);
void sendWSMessage_140000(int trigger);
diff --git a/engines/m4/riddle/rooms/section3/room303.cpp b/engines/m4/riddle/rooms/section3/room303.cpp
index 0409a1cb5ca..8c6d6067595 100644
--- a/engines/m4/riddle/rooms/section3/room303.cpp
+++ b/engines/m4/riddle/rooms/section3/room303.cpp
@@ -26,6 +26,7 @@
#include "m4/gui/gui_vmng.h"
#include "m4/gui/gui_sys.h"
#include "m4/platform/keys.h"
+#include "m4/riddle/riddle.h"
namespace M4 {
namespace Riddle {
@@ -160,7 +161,7 @@ void Room303::init() {
_G(camera_reacts_to_player) = true;
MoveScreenDelta(game_buff_ptr, -110, 0);
- _val12 = 2;
+ _val12 = KT_DAEMON;
player_set_commands_allowed(false);
playSeries(false);
@@ -301,7 +302,7 @@ void Room303::init() {
break;
default:
- _val12 = 1;
+ _val12 = KT_PARSE;
kernel_load_variant("303lock1");
setFengActive(true);
ws_demand_location(145, 289, 3);
@@ -326,6 +327,29 @@ void Room303::init() {
}
void Room303::daemon() {
+ switch (_G(kernel).trigger) {
+ case 3:
+ sendWSMessage_120000(4);
+ break;
+
+ case 4:
+ sendWSMessage_150000(61);
+ break;
+
+ case 5:
+ case 61:
+ ws_demand_location(230, 258);
+ player_set_commands_allowed(true);
+ break;
+
+ case 6:
+ ws_walk(128, 267, nullptr, 75, 3);
+ break;
+
+ // TODO
+ default:
+ break;
+ }
}
void Room303::pre_parser() {
@@ -1170,6 +1194,38 @@ void Room303::conv303b() {
conv_resume();
}
+void Room303::priestTalkCallback(frac16 myMessage, machine *sender) {
+ Room303 *room = (Room303 *)g_engine->_activeRoom;
+ auto oldMode = _G(kernel).trigger_mode;
+ int trigger = myMessage >> 16;
+
+ if (trigger > 0) {
+ _G(kernel).trigger_mode = room->_val12;
+ kernel_timing_trigger(1, trigger);
+ _G(kernel).trigger_mode = oldMode;
+ }
+}
+
+void Room303::priestTalk(bool flag, int trigger) {
+ ws_hide_walker(_machine1);
+ _G(globals)[GLB_TEMP_1] = _clasped1 << 24;
+ _G(globals)[GLB_TEMP_2] = 0xD << 24;
+ _G(globals)[GLB_TEMP_3] = _clasped3 << 24;
+ _G(globals)[GLB_TEMP_4] = 0xD << 24;
+ _G(globals)[GLB_TEMP_9] = _clasped4 << 24;
+ _G(globals)[GLB_TEMP_10] = 0xD << 24;
+ _G(globals)[GLB_TEMP_5] = (flag ? 480 : 705) << 16;
+ _G(globals)[GLB_TEMP_6] = 1 << 24;
+ _G(globals)[V007] = _G(globals)[V006] *
+ ((1 << 24) - _G(globals)[V002]) + _G(globals)[V004];
+ _G(globals)[GLB_TEMP_8] = (flag ? 1 : 0) << 16;
+ _G(globals)[V008] = trigger << 16;
+ _G(globals)[GLB_TEMP_12] = 0xdc28;
+
+ _priestTalk = TriggerMachineByHash(32, nullptr, 0, -1,
+ priestTalkCallback, false, "fl priest/talk");
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section3/room303.h b/engines/m4/riddle/rooms/section3/room303.h
index 46afb897d8c..45ed072e743 100644
--- a/engines/m4/riddle/rooms/section3/room303.h
+++ b/engines/m4/riddle/rooms/section3/room303.h
@@ -41,7 +41,7 @@ private:
int _val9 = 0;
int _val10 = 0;
int _val11 = 0;
- int _val12 = 0;
+ KernelTriggerType _val12 = KT_DAEMON;
bool _val13 = false;
int _val14 = 0;
int _val15 = 0;
@@ -74,6 +74,7 @@ private:
int _suit2 = 0;
int _meiLips = 0;
int _ripGesture = 0;
+ machine *_priestTalk = nullptr;
static void escapePressed(void *, void *);
@@ -86,6 +87,8 @@ private:
void playSeries(bool cow = true);
void conv303a();
void conv303b();
+ static void priestTalkCallback(frac16 myMessage, machine *sender);
+ void priestTalk(bool flag, int trigger);
public:
Room303() : Room() {}
More information about the Scummvm-git-logs
mailing list