[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