[Scummvm-git-logs] scummvm master -> 9de655f71a4d8b09bb52655bc8aaf8c13dbf4602

dreammaster noreply at scummvm.org
Fri Aug 9 05:42:21 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:
9de655f71a M4: RIDDLE: Finished room 401 daemon


Commit: 9de655f71a4d8b09bb52655bc8aaf8c13dbf4602
    https://github.com/scummvm/scummvm/commit/9de655f71a4d8b09bb52655bc8aaf8c13dbf4602
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-08T22:41:41-07:00

Commit Message:
M4: RIDDLE: Finished room 401 daemon

Changed paths:
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section4/room401.cpp
    engines/m4/riddle/rooms/section4/room401.h
    engines/m4/riddle/vars.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index c8b85e7a245..0cfd3c31844 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -325,6 +325,18 @@ void Room::sendWSMessage_120000(int trigger) {
 	sendWSMessage_120000(_G(my_walker), trigger);
 }
 
+void Room::sendWSMessage_130000(machine *recv, int val1) {
+	if (val1 == 0)
+		val1 = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(val1);
+	sendWSMessage(0x130000, 0, recv, 0, 0, 1);
+}
+
+void Room::sendWSMessage_130000(int val1) {
+	sendWSMessage_130000(_G(my_walker), val1);
+}
+
 void Room::sendWSMessage_140000(machine *mach, int trigger) {
 	if (!trigger)
 		trigger = -1;
@@ -369,6 +381,16 @@ void Room::sendWSMessage_1a0000(machine *recv, int trigger) {
 	sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
 }
 
+void Room::sendWSMessage_29a0000(machine *recv, int val1) {
+	_G(globals)[GLB_TEMP_1] = val1 << 24;
+	sendWSMessage(0x29a0000, 0, recv, 0, 0, 1);
+}
+
+void Room::sendWSMessage_29a0000(int val1) {
+	sendWSMessage_29a0000(_G(my_walker), val1);
+}
+
+
 int Room::getNumKeyItemsPlaced() const {
 	static const char *const ITEMS[11] = {
 		"SHRUNKEN HEAD", "INCENSE BURNER", "CRYSTAL SKULL",
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index ed10a0e4e37..0c0ee04f8f3 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -82,9 +82,11 @@ protected:
 	void sendWSMessage_F0000(machine *mach, int trigger);
 	void sendWSMessage_F0000(int trigger);
 	void sendWSMessage_110000(machine *mach, int trigger);
+	void sendWSMessage_110000(int trigger);
 	void sendWSMessage_120000(int trigger);
 	void sendWSMessage_120000(machine *mach, int trigger);
-	void sendWSMessage_110000(int trigger);
+	void sendWSMessage_130000(machine *recv, int val1);
+	void sendWSMessage_130000(int val1);
 	void sendWSMessage_140000(machine *mach, int trigger);
 	void sendWSMessage_140000(int trigger);
 	void sendWSMessage_150000(machine *mach, int trigger);
@@ -93,6 +95,8 @@ protected:
 	void sendWSMessage_160000(int val1, int trigger);
 	void sendWSMessage_190000(machine *recv, int trigger);
 	void sendWSMessage_1a0000(machine *recv, int trigger);
+	void sendWSMessage_29a0000(machine *recv, int val1);
+	void sendWSMessage_29a0000(int val1);
 
 	/**
 	 * Get the number of key items placed in room 305 (display room)
diff --git a/engines/m4/riddle/rooms/section4/room401.cpp b/engines/m4/riddle/rooms/section4/room401.cpp
index 6e84a5989e2..832185ef444 100644
--- a/engines/m4/riddle/rooms/section4/room401.cpp
+++ b/engines/m4/riddle/rooms/section4/room401.cpp
@@ -302,6 +302,465 @@ void Room401::daemon() {
 		conv_resume();
 		break;
 
+	case 105:
+		sendWSMessage_10000(1, _agent, _401a05, 53, 1, 106, _401a01, 1, 1, 0);
+		break;
+
+	case 106:
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 11, 200, _401rp01, 11, 11, 0);
+		_val7 = _val3 = 0;
+
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		_val6 = 0;
+		_ctr1 = 0;
+
+		inv_give_to_player("POMERANIAN MARKS");
+		conv_resume();
+		break;
+
+	case 108:
+		sendWSMessage_10000(1, _agent, _401a04, 63, 90, 104, _401a01, 1, 1, 0);
+		digi_play("950_s35", 2);
+		break;
+
+	case 200:
+		kernel_timing_trigger(1, 201);
+		break;
+
+	case 201:
+		if (!_val7) {
+			switch (_val3) {
+			case 0:
+				sendWSMessage_10000(1, _ripMach, _401rp01, 11, 11, 200, _401rp01, 11, 11, 0);
+				break;
+			case 1:
+				sendWSMessage_10000(1, _ripMach, _401rp01, 12, 12, -1, _401rp01, 12, 19, 4);
+				sendWSMessage_1a0000(_ripMach, 13);
+				break;
+			case 2:
+				sendWSMessage_10000(1, _ripMach, _401rp01, 20, 36, 200, _401rp01, 11, 11, 0);
+				sendWSMessage_190000(_ripMach, 13);
+				_val3 = 0;
+				break;
+			case 3:
+				sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 202, _401rp01, 1, 1, 0);
+				break;
+			default:
+				break;
+			}
+		}
+		break;
+
+	case 202:
+		terminateMachineAndNull(_ripMach);
+		ws_unhide_walker();
+		player_set_commands_allowed(true);
+		break;
+
+	case 300:
+		ws_hide_walker();
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401rp01, 1, 11, 305, _401rp01, 11, 11, 0);
+		_val6 = 5;
+
+		digi_play((_val1 == 1) ? "401x02" : "401x03", 1);
+		break;
+
+	case 305:
+		terminateMachineAndNull(_agent);
+		sendWSMessage_10000(1, _ripMach, _401a02, 1, 47, 306, _401a02, 47, 47, 0);
+		break;
+
+	case 306:
+		kernel_timing_trigger(1, 990);
+		inv_give_to_player("MESSAGE LOG");
+		break;
+
+	case 320:
+		sendWSMessage_10000(1, _ripMach, _401a02, 48, 57, 322, _401a02, 57, 57, 0);
+		break;
+
+	case 322:
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 324, _401rp01, 1, 1, 0);
+		_agent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "agent");
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		break;
+
+	case 324:
+	case 520:
+	case 620:
+	case 720:
+	case 826:
+		terminateMachineAndNull(_ripMach);
+		ws_unhide_walker();
+		kernel_timing_trigger(1, 1000);
+		break;
+
+	case 400:
+		_G(flag1) = 0;
+		setGlobals1(_rip4, 1, 1, 1, 5, 1);
+		sendWSMessage_110000(405);
+		_val6 = 4;
+		digi_play("401r02", 1, 255, 405);
+		break;
+
+	case 405:
+		if (_G(flag1) >= 1) {
+			_G(flag1) = 0;
+			sendWSMessage_140000(-1);
+			_val6 = 5;
+			digi_play("401x04", 1, 255, 407);
+		} else {
+			++_G(flag1);
+		}
+		break;
+
+	case 407:
+		_val6 = 4;
+		kernel_timing_trigger(1, 100);
+
+		setGlobals1(_rip4, 1, 1, 1, 5, 1);
+		sendWSMessage_110000(410);
+		digi_play("401r03", 1, 255, 410);
+		break;
+
+	case 410:
+		if (_G(flag1) >= 1) {
+			_G(flag1) = 0;
+			sendWSMessage_140000(-1);
+			_val6 = 5;
+			digi_play("401x05", 1, 255, 412);
+		} else {
+			++_G(flag1);
+		}
+		break;
+
+	case 412:
+		_val6 = 0;
+		kernel_timing_trigger(1, 100);
+		_G(flags)[GLB_TEMP_14] = 1;
+		kernel_timing_trigger(1, 1000);
+		break;
+
+	case 500:
+		setGlobals1(_rip2, 1, 15, 15, 15, 0, 1, 2, 3, 5, 1, 2, 1, 1, 1);
+		_val6 = 4;
+		sendWSMessage_110000(503);
+		digi_play("401r29", 1, 255, 505);
+		break;
+
+	case 503:
+	case 603:
+		sendWSMessage_29a0000(_rip3);
+		sendWSMessage_120000(-1);
+		break;
+
+	case 505:
+		sendWSMessage_130000(-1);
+		digi_play("401x09", 1, 255, 507);
+		break;
+
+	case 507:
+		_val6 = 4;
+		kernel_timing_trigger(1, 100);
+		sendWSMessage_120000(-1);
+		digi_play("401r30", 1, 255, 510);
+		break;
+
+	case 510:
+		sendWSMessage_110000(511);
+		_val6 = 5;
+		digi_play("401x10", 1, 255, 512);
+
+	case 511:
+		sendWSMessage_29a0000(_rip2);
+		sendWSMessage_140000(514);
+		break;
+
+	case 512:
+		sendWSMessage_10000(1, _agent, _401a01, 3, 3, 100, _401a01, 3, 3, 0);
+		break;
+
+	case 514:
+		kernel_timing_trigger(60, 515);
+		break;
+
+	case 515:
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401rp01, 1, 11, 516, _401rp01, 11, 11, 0);
+		break;
+
+	case 516:
+		terminateMachineAndNull(_ripMach);
+		sendWSMessage_10000(1, _agent, _401a04, 1, 63, 517, _401a04, 63, 63, 0);
+		break;
+
+	case 517:
+		sendWSMessage_10000(1, _agent, _401a04, 64, 90, 518, _401a01, 1, 1, 0);
+		digi_play("950_s35", 2);
+		break;
+
+	case 518:
+		series_show("401a06", 0x600, 16);
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		_G(flags)[GLB_TEMP_10] = 1;
+		_G(flags)[V366] = 1;
+
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 520, _401rp01, 1, 1, 0);
+		_val6 = 0;
+		_ctr1 = 0;
+		break;
+
+	case 600:
+		setGlobals1(_rip2, 1, 15, 15, 15, 0, 1, 2, 3, 5, 1, 2, 1, 1, 1);
+		_val6 = 4;
+		sendWSMessage_110000(603);
+		digi_play("401r32", 1, 255, 605);
+		break;
+
+	case 605:
+		sendWSMessage_110000(612);
+		break;
+
+	case 612:
+		sendWSMessage_29a0000(_rip2);
+		sendWSMessage_140000(613);
+		break;
+
+	case 613:
+		ws_hide_walker();
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _agent, _401rp01, 1, 11, 616, _401rp01, 11, 11, 0);
+		break;
+
+	case 616:
+		terminateMachineAndNull(_agent);
+		sendWSMessage_10000(1, _ripMach, _401a04, 1, 63, 617, _401a04, 63, 63, 0);
+		break;
+
+	case 617:
+		sendWSMessage_10000(1, _ripMach, _401a04, 1, 90, 618, _401a01, 1, 1, 0);
+		digi_play("950_s35", 2);
+		break;
+
+	case 618:
+		series_show("401a06", 0x600, 16);
+		_agent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "agent");
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 620, _401rp01, 1, 1, 0);
+		_G(flags)[GLB_TEMP_13] = 1;
+		_val6 = 0;
+		_ctr1 = 0;
+		break;
+
+	case 700:
+		setGlobals1(_rip4, 1, 1, 1, 5, 1);
+		sendWSMessage_110000(705);
+		_val6 = 4;
+		digi_play(_G(flags)[GLB_TEMP_13] ? "401r33" : "401r34", 1, 255, 705);
+		break;
+
+	case 705:
+		if (_G(flag1) >= 1) {
+			_G(flag1) = 0;
+			sendWSMessage_140000(-1);
+			_val6 = 5;
+			digi_play("401x12", 1, 255, 707);
+		} else {
+			++_G(flag1);
+		}
+		break;
+
+	case 707:
+		_val6 = 4;
+		kernel_timing_trigger(1, 100);
+		setGlobals1(_rip4, 1, 1, 1, 5, 1);
+		sendWSMessage_110000(710);
+		digi_play("401r35", 1, 255, 710);
+		_G(flags)[V373] = 1;
+		break;
+
+	case 710:
+		if (_G(flag1) >= 1) {
+			_G(flag1) = 0;
+			sendWSMessage_140000(-1);
+			_val6 = 5;
+			digi_play("401x13", 1, 255, 712);
+		} else {
+			++_G(flag1);
+		}
+		break;
+
+	case 711:
+		sendWSMessage_10000(1, _agent, _401a01, 3, 3, -1, _401a01, 3, 3, 0);
+		kernel_timing_trigger(1, 715);
+		break;
+
+	case 715:
+		ws_hide_walker();
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401a04, 1, 11, 716, _401rp01, 11, 11, 0);
+		break;
+
+	case 716:
+		terminateMachineAndNull(_ripMach);
+		sendWSMessage_10000(1, _agent, _401a03, 1, 67, 718, _401a01, 1, 1, 0);
+		break;
+
+	case 718:
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		inv_move_object("TURTLE", 305);
+		inv_move_object("TURTLE TREATS", 305);
+
+		_ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 720, _401rp01, 1, 1, 0);
+		_ctr1 = 0;
+		break;
+
+	case 800:
+		sendWSMessage_10000(1, _ripMach, _401a02, 48, 57, 822, _401a02, 57, 57, 0);
+		break;
+
+	case 822:
+		sendWSMessage_10000(1, _ripMach, _401a03, 67, 1, 824, _401rp01, 11, 11, 0);
+		break;
+
+	case 824:
+		sendWSMessage_10000(1, _ripMach, _401rp01, 11, 1, 826, _401rp01, 1, 1, 0);
+		inv_give_to_player("ROMANOV EMERALD");
+		_agent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x600, 0,
+			triggerMachineByHashCallbackNegative, "agent");
+		sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+		_val6 = 0;
+		_ctr1 = 0;
+		break;
+
+	case 990:
+		_digiName1 = nullptr;
+		_digiName2 = nullptr;
+		_digiName3 = nullptr;
+		_digiName4 = nullptr;
+
+		if (_val1 <= 0) {
+			kernel_timing_trigger(1, 320);
+		} else if (_digiName) {
+			_digiName1 = _digiName;
+			_digiName = nullptr;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V364] == 1) {
+			_digiName1 = "201R26";
+			_G(flags)[V364] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V365] == 1) {
+			_digiName1 = "201R61";
+			_G(flags)[V365] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V366] == 1) {
+			_digiName1 = "401R31";
+			_G(flags)[V366] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V371] == 1) {
+			_digiName = "501R03C";
+			_G(flags)[V371] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V372] == 1) {
+			_digiName1 = "701R39";
+			_digiName2 = "701R39A";
+			_G(flags)[V372] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V367] == 1) {
+			_digiName1 = "401R37";
+			_G(flags)[V367] = 0;
+			_val2 = 1;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V368] == 1) {
+			_digiName1 = "401R38";
+			_G(flags)[V368] = 0;
+			_val2 = 1;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(flags)[V369] == 1) {
+			_digiName1 = "401R39";
+			_G(flags)[V369] = 0;
+			_val2 = 1;
+			kernel_timing_trigger(1, 991);
+		}
+		break;
+
+	case 991:
+		if (_digiName1) {
+			digi_play(_digiName1, 1, 255, 993);
+		} else {
+			kernel_timing_trigger(1, 993);
+		}
+		break;
+
+	case 993:
+		if (_digiName2) {
+			digi_play(_digiName2, 1, 255, 994);
+		} else {
+			kernel_timing_trigger(1, 994);
+		}
+		break;
+
+	case 994:
+		if (_digiName3) {
+			digi_play(_digiName3, 1, 255, 995);
+		} else {
+			kernel_timing_trigger(1, 995);
+		}
+		break;
+
+	case 995:
+		if (_digiName4) {
+			digi_play(_digiName4, 1, 255, 996);
+		} else {
+			kernel_timing_trigger(1, 996);
+		}
+		break;
+
+	case 996:
+		if (_val2) {
+			_val2 = 0;
+			kernel_timing_trigger(1, 800);
+		} else {
+			if (--_val1 == 0) {
+				kernel_timing_trigger(1, 320);
+			} else {
+				kernel_timing_trigger(1, 800);
+			}
+		}
+		break;
+
+	case 999:
+		kernel_timing_trigger(1, _val1 ? 300 : 1000);
+		break;
+
+	case 1000:
+		if (_G(flags)[GLB_TEMP_14]) {
+			kernel_timing_trigger(30, 400);
+		} else if (_G(flags)[V110] && !_G(flags)[GLB_TEMP_10]) {
+			kernel_timing_trigger(30, 500);
+		} else if (_G(flags)[GLB_TEMP_11] && player_been_here(407) &&
+				!_G(flags)[GLB_TEMP_13]) {
+			kernel_timing_trigger(30, 600);
+		} else if (_G(flags)[GLB_TEMP_12] && !_G(flags)[V091]) {
+			kernel_timing_trigger(30, 700);
+		} else {
+			player_set_commands_allowed(true);
+		}
+		break;
+
 	default:
 		break;
 	}
diff --git a/engines/m4/riddle/rooms/section4/room401.h b/engines/m4/riddle/rooms/section4/room401.h
index 21e2a687c72..37d7ce6b291 100644
--- a/engines/m4/riddle/rooms/section4/room401.h
+++ b/engines/m4/riddle/rooms/section4/room401.h
@@ -37,6 +37,10 @@ private:
 	int _val5 = 0;
 	int _val6 = 0;
 	int _val7 = 0;
+	const char *_digiName1 = nullptr;
+	const char *_digiName2 = nullptr;
+	const char *_digiName3 = nullptr;
+	const char *_digiName4 = nullptr;
 	int _401a01 = 0;
 	int _401a02 = 0;
 	int _401a03 = 0;
diff --git a/engines/m4/riddle/vars.h b/engines/m4/riddle/vars.h
index 00599689a06..cd877c2a44b 100644
--- a/engines/m4/riddle/vars.h
+++ b/engines/m4/riddle/vars.h
@@ -54,6 +54,7 @@ public:
 	Riddle::Hotkeys _hotkeys;
 	Riddle::GUI::Interface _interface;
 	int _global301 = 0;
+	int _flag1 = 0;
 
 public:
 	Vars();




More information about the Scummvm-git-logs mailing list