[Scummvm-git-logs] scummvm master -> 60ddbb34248eb97f25acdced058c3bda46bca708

dreammaster noreply at scummvm.org
Fri Jul 26 05:14:34 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:
e8dabad377 M4: RIDDLE: In progress room 301 daemon
60ddbb3424 M4: RIDDLE: More room 301 daemon


Commit: e8dabad377fd10070eee3d5af90c5ab687ae25b9
    https://github.com/scummvm/scummvm/commit/e8dabad377fd10070eee3d5af90c5ab687ae25b9
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-25T22:14:26-07:00

Commit Message:
M4: RIDDLE: In progress room 301 daemon

Changed paths:
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section3/room301.cpp
    engines/m4/riddle/rooms/section3/room301.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 649fb267802..1418486f291 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -209,6 +209,15 @@ void Room::sendWSMessage_140000(int trigger) {
 	sendWSMessage_140000(_G(my_walker), trigger);
 }
 
+void Room::sendWSMessage_150000(machine *walker, int trigger) {
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x150000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_150000(int trigger) {
+	sendWSMessage_150000(_G(my_walker), trigger);
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index a8db601df32..d64bf3f2608 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -53,10 +53,10 @@ protected:
 	 * Sets a bunch of globals. Sooooo many globals.
 	 */
 	void setGlobals1(int val1, int val2, int val3, int val4, int val5,
-		int val6, int val7, int val8, int val9, int val10,
-		int val11, int val12, int val13, int val14, int val15,
-		int val16, int val17, int val18, int val19, int val20,
-		int val21);
+		int val6, int val7 = 0, int val8 = 0, int val9 = 0, int val10 = 0,
+		int val11 = 0, int val12 = 0, int val13 = 0, int val14 = 0, int val15 = 0,
+		int val16 = 0, int val17 = 0, int val18 = 0, int val19 = 0, int val20 = 0,
+		int val21 = 0);
 
 	void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
 		int val4, int trigger, int val9, int val6, int val7, int val8);
@@ -66,6 +66,8 @@ protected:
 	void sendWSMessage_110000(int trigger);
 	void sendWSMessage_140000(machine *walker, int trigger);
 	void sendWSMessage_140000(int trigger);
+	void sendWSMessage_150000(machine *walker, int trigger);
+	void sendWSMessage_150000(int trigger);
 
 	int _roomVal1 = 0;		// TODO: deprecate
 
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index 1fe02699d21..c34362154b8 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -35,14 +35,14 @@ void Room301::preload() {
 }
 
 void Room301::init() {
-	_G(flags)[V000] = 1;
+	_G(globals)[V000] = 1;
 	digi_preload("950_s01");
 
 	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
 		_val1 = 0;
 		_val2 = 0;
 		_soundName = nullptr;
-		_val4 = 0;
+		_nextSound = nullptr;
 		_val5 = -1;
 		_val6 = 2;
 		_val7 = 2;
@@ -81,7 +81,7 @@ void Room301::init() {
 		player_set_commands_allowed(false);
 		ws_demand_location(55, 270, 3);
 
-		if (_val12 || (!player_been_here(401) && _G(flags)[V092] && !_G(flags)[V093])) {
+		if (_val12 || (!player_been_here(401) && _G(globals)[V092] && !_G(globals)[V093])) {
 			ws_walk(352, 269, nullptr, 60, 3);
 		} else if (!player_been_here(301)) {
 			digi_preload("301r37");
@@ -96,7 +96,165 @@ void Room301::init() {
 }
 
 void Room301::daemon() {
-	// TODO
+	switch (_G(kernel).trigger) {
+	case 203:
+		setGlobals1(_ripTrekArms, 1, 15, 15, 15, 1);
+		sendWSMessage_110000(-1);
+		digi_play("301r22", 1, 255, 204);
+		break;
+
+	case 204:
+		digi_play("301s02", 1, 255, 205);
+		_val17 = 1;
+		break;
+
+	case 205:
+		_val17 = 0;
+		kernel_timing_trigger(60, 206);
+		break;
+
+	case 206:
+		disable_player_commands_and_fade_init(207);
+		break;
+
+	case 207:
+		sendWSMessage_150000(208);
+		break;
+
+	case 208:
+		ws_demand_facing(3);
+		kernel_timing_trigger(1, 209);
+		break;
+
+	case 209:
+		_G(game).setRoom(413);
+		break;
+
+	case 300:
+		terminateMachineAndNull(_machine1);
+		_machine4 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _machine4, _agentStander, 7,
+			1, 304, _agentStander, 1, 1, 0);
+		break;
+
+	case 304:
+		ws_hide_walker();
+		sendWSMessage(1, _machine4, _agentTakesTelegram,
+			1, 53, 305, _agentTakesTelegram, 53, 53, 0);
+		break;
+
+	case 305:
+		kernel_timing_trigger(1, 990);
+		inv_give_to_player("MESSAGE LOG");
+		break;
+
+	case 320:
+		sendWSMessage(1, _machine4, _agentTakesTelegram,
+			54, 63, 322, _agentTakesTelegram, 63, 63, 0);
+		break;
+
+	case 322:
+		sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+			10, 1, 324, _ripTrekTravel, 1, 1, 0);
+		_machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "guy behind desk");
+		_val13 = 0;
+		_val14 = 0;
+		sendWSMessage_10000(1, _machine1, _agentStander, 1,
+			1, 10, _agentStander, 1, 1, 0);
+		break;
+
+	case 324:
+		terminateMachineAndNull(_machine4);
+		ws_unhide_walker();
+		kernel_timing_trigger(1, 1000);
+		break;
+
+	case 990:
+		_digiSound1 = _digiSound2 = 0;
+		_digiSound3 = _digiSound4 = 0;
+
+		if (_val12 <= 0) {
+			kernel_timing_trigger(1, 320);
+		} else if (_nextSound) {
+			_digiSound1 = _nextSound;
+			_nextSound = nullptr;
+			kernel_timing_trigger(1, 991);
+		} else  if (_G(globals)[V365] == 1) {
+			_digiSound1 = "201R61";
+			_G(globals)[V365] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(globals)[V366] == 1) {
+			_digiSound1 = "401R31";
+			_G(globals)[V366] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(globals)[V373] == 1) {
+			_digiSound1 = "401R36";
+			_G(globals)[V373] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(globals)[V371] == 1) {
+			_digiSound1 = "501R03C";
+			_G(globals)[V371] = 0;
+			kernel_timing_trigger(1, 991);
+		} else if (_G(globals)[V372] == 1) {
+			_digiSound1 = "701R39";
+			_digiSound2 = "701R39A";
+			_G(globals)[V372] = 0;
+			kernel_timing_trigger(1, 991);
+		}
+		break;
+
+	case 991:
+		if (_digiSound1)
+			digi_play(_digiSound1, 1, 255, 993);
+		else
+			kernel_timing_trigger(1, 993);
+		break;
+
+	case 993:
+		if (_digiSound2)
+			digi_play(_digiSound2, 1, 255, 994);
+		else
+			kernel_timing_trigger(1, 994);
+		break;
+
+	case 994:
+		if (_digiSound3)
+			digi_play(_digiSound3, 1, 255, 995);
+		else
+			kernel_timing_trigger(1, 995);
+		break;
+
+	case 995:
+		if (_digiSound4)
+			digi_play(_digiSound4, 1, 255, 996);
+		else
+			kernel_timing_trigger(1, 996);
+		break;
+
+	case 996:
+		if (--_val12 == 0)
+			kernel_timing_trigger(1, 320);
+		else
+			kernel_timing_trigger(1, 990);
+		break;
+
+	case 999:
+		kernel_timing_trigger(1, !_val12 ? 1000 : 300);
+		break;
+
+	case 1000:
+		if (!player_been_here(401) && _G(globals)[V092]
+			&& !_G(globals)[V093]) {
+			_G(globals)[V092] = 0;
+			_G(globals)[V093] = 1;
+			kernel_timing_trigger(30, 65);
+		}
+
+		player_set_commands_allowed(true);
+		break;
+	}
 }
 
 void Room301::pre_parser() {
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index 1333b65aa3a..f9df7d1ccd3 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -33,7 +33,7 @@ private:
 	int _val1 = 0;
 	int _val2 = 0;
 	const char *_soundName = nullptr;
-	int _val4 = 0;
+	const char *_nextSound = nullptr;
 	int _val5 = -1;
 	int _val6 = 2;
 	int _val7 = 2;
@@ -65,6 +65,10 @@ private:
 	machine *_machine2 = nullptr;
 	machine *_machine3 = nullptr;
 	machine *_machine4 = nullptr;
+	const char *_digiSound1 = nullptr;
+	const char *_digiSound2 = nullptr;
+	const char *_digiSound3 = nullptr;
+	const char *_digiSound4 = nullptr;
 
 	void conv301a();
 


Commit: 60ddbb34248eb97f25acdced058c3bda46bca708
    https://github.com/scummvm/scummvm/commit/60ddbb34248eb97f25acdced058c3bda46bca708
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-25T22:14:26-07:00

Commit Message:
M4: RIDDLE: More room 301 daemon

Changed paths:
    engines/m4/riddle/rooms/room.cpp
    engines/m4/riddle/rooms/room.h
    engines/m4/riddle/rooms/section3/room301.cpp
    engines/m4/riddle/rooms/section3/room301.h
    engines/m4/riddle/vars.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 1418486f291..a41696f1bb8 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -218,6 +218,16 @@ void Room::sendWSMessage_150000(int trigger) {
 	sendWSMessage_150000(_G(my_walker), trigger);
 }
 
+void Room::sendWSMessage_190000(machine *recv, int trigger) {
+	_G(globals)[V023] = trigger << 16;
+	sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_1a0000(machine *recv, int trigger) {
+	_G(globals)[V024] = trigger << 16;
+	sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index d64bf3f2608..00c589745d5 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -68,6 +68,8 @@ protected:
 	void sendWSMessage_140000(int trigger);
 	void sendWSMessage_150000(machine *walker, int trigger);
 	void sendWSMessage_150000(int trigger);
+	void sendWSMessage_190000(machine *recv, int trigger);
+	void sendWSMessage_1a0000(machine *recv, int trigger);
 
 	int _roomVal1 = 0;		// TODO: deprecate
 
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index c34362154b8..299dcbd2972 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -96,7 +96,234 @@ void Room301::init() {
 }
 
 void Room301::daemon() {
+	int frame;
+
 	switch (_G(kernel).trigger) {
+	// TODO: More cases
+
+	case 21:
+		if (!_val19) {
+			switch (_val15) {
+			case 0:
+				sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+					10, 10, 20, _ripTrekTravel, 10, 10, 0);
+				break;
+
+			case 1:
+				frame = imath_ranged_rand(11, 19);
+				sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+					frame, frame, 20, _ripTrekTravel, frame, frame, 0);
+				sendWSMessage_190000(_machine4, 13);
+				sendWSMessage_1a0000(_machine4, 13);
+				break;
+
+			case 2:
+				sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+					20, 26, 20, _ripTrekTravel, 10, 10, 0);
+				break;
+
+			case 3:
+				sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+					37, 50, 20, _ripTrekTravel, 10, 10, 0);
+				break;
+
+			case 4:
+				sendWSMessage_10000(1, _machine4, _ripTrekTravel,
+					9, 1, 22, _ripTrekTravel, 1, 1, 0);
+				break;
+
+			case 5:
+				_G(kernel).trigger_mode = KT_PARSE;
+				conv_load("conv301a", 10, 10, 747, player_commands_allowed());
+				_val1 = 0;
+
+				conv_export_value(conv_get_handle(), _G(globals)[V088] >= 3 ? 1 : 0, 0);
+				conv_export_value(conv_get_handle(), _G(globals)[V056], 1);
+				conv_export_value(conv_get_handle(), _G(globals)[V110], 2);
+				conv_export_pointer(conv_get_handle(), &_val1, 5);
+
+				if (player_been_here(201))
+					conv_export_value(conv_get_handle(), 2, 6);
+
+				conv_play(conv_get_handle());
+				_val15 = 0;
+				_G(kernel).trigger_mode = KT_DAEMON;
+				kernel_timing_trigger(1, 20);
+				break;
+
+			default:
+				break;
+			}
+		}
+		break;
+
+	case 22:
+		terminateMachineAndNull(_machine4);
+		terminateMachineAndNull(_machine3);
+		ws_unhide_walker();
+		player_set_commands_allowed(true);
+		break;
+
+	case 25:
+		sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 50, 64, 26,
+			_agentSlidesPaper, 64, 64, 0);
+		digi_play("950_s35", 2);
+		break;
+
+	case 26:
+		sendWSMessage_10000(1, _machine1, _agentSlidesPaper, 49, 1, 27,
+			_agentStander, 1, 1, 0);
+		break;
+
+	case 27:
+		sendWSMessage_10000(1, _machine1, _agentTakesMoney, 52, 9, 28,
+			_agentTakesMoney, 9, 9, 0);
+		_val14 = 4;
+		_val13 = 4;
+		_val8 = 0;
+		_val15 = 0;
+		break;
+
+	case 28:
+		conv_resume();
+		kernel_timing_trigger(1, 13);
+		break;
+
+	case 51:
+		digi_unload("301r37");
+		setGlobals1(_ripTrekHandTalk3, 1, 7, 7, 7, 1);
+		sendWSMessage_110000(52);
+		digi_play("301r01", 1, 255, 53);
+		break;
+
+	case 52:
+		sendWSMessage_140000(-1);
+		break;
+
+	case 53:
+		_val14 = 6;
+		_soundName = "301a01";
+		_val16 = 56;
+		break;
+
+	case 56:
+		_val14 = 3;
+		kernel_timing_trigger(1, 11);
+		player_set_commands_allowed(true);
+		break;
+
+	case 60:
+		setGlobals1(_ripTrekHandTalk3, 1, 7, 7, 7, 1);
+		sendWSMessage_110000(62);
+		digi_play("301r01", 1);
+		break;
+
+	case 62:
+		sendWSMessage_140000(63);
+		break;
+
+	case 63:
+		_val14 = 6;
+		_val7 = 2;
+		_soundName = "301a01";
+		_val16 = 72;
+		break;
+
+	case 64:
+		if (_val12) {
+			_val14 = 5;
+			_soundName = (_val12 == 1) ? "301a03" : "301a04";
+			_val7 = 2;
+			_val16 = 71;
+		} else if (!player_been_here(401) && _G(globals)[V092] &&
+				!_G(globals)[V093]) {
+			kernel_timing_trigger(1, 1000);
+		}
+		break;
+
+	case 65:
+		_G(global301) = 0;
+		setGlobals1(_ripTrekTalker3, 1, 1, 1, 5, 1);
+		sendWSMessage_110000(68);
+		digi_play("301r01a", 1, 255, 68);
+		break;
+
+	case 68:
+		if (_G(global301) >= 1) {
+			_G(global301) = 0;
+			sendWSMessage_140000(-1);
+			_val14 = 0;
+			_soundName = "301a04a";
+			_val16 = 70;
+		} else {
+			++_G(global301);
+		}
+		break;
+
+	case 70:
+		_val14 = 0;
+		player_set_commands_allowed(true);
+		break;
+
+	case 71:
+		_val14 = 0;
+		kernel_timing_trigger(1, 999);
+		break;
+
+	case 72:
+		_val14 = 4;
+		_G(kernel).trigger_mode = KT_DAEMON;
+		kernel_timing_trigger(1, 11);
+		_G(kernel).trigger_mode = KT_DAEMON;
+		kernel_timing_trigger(10, 64);
+		break;
+
+	case 100:
+		sendWSMessage_10000(1, _machine1, _agentCheckingList, 8,
+			1, 10, _agentStander, 1, 1, 0);
+		break;
+
+	case 200:
+		if (_val18 || _val17 || _val5 == -1) {
+			kernel_timing_trigger(1, 201);
+		} else {
+			kernel_trigger_dispatchx(_val5);
+			_val5 = -1;
+		}
+
+	case 201:
+		if (_val18 <= 0) {
+			if (_val17 <= 0) {
+				kernel_timing_trigger(30, 201);
+			} if (_val17 == 1) {
+				sendWSMessage_10000(1, _machine2, _marshalMatt, 17, 51, 201,
+					_marshalMatt, 51, 51, 0);
+				_val18 = 1;
+				_val17 = 1;
+			}
+		} else if (_val18 == 1) {
+			if (_val17 == 1) {
+				frame = imath_ranged_rand(52, 55);
+				sendWSMessage_10000(1, _machine2, _marshalMatt, frame, frame, 201,
+					_marshalMatt, frame, frame, 0);
+				sendWSMessage_190000(_machine2, 13);
+				sendWSMessage_1a0000(_machine2, 13);
+
+			} else {
+				sendWSMessage_10000(1, _machine2, _marshalMatt, 52, 52, 200,
+					_marshalMatt, 52, 52, 0);
+			}
+		}
+		break;
+
+	case 202:
+		digi_play("301s01", 1, 255, 203);
+		sendWSMessage_10000(1, _machine2, _marshalMatt, 4, 16, 201,
+			_marshalMatt, 16, 16, 0);
+		_val17 = 0;
+		_val18 = 0;
+		break;
+
 	case 203:
 		setGlobals1(_ripTrekArms, 1, 15, 15, 15, 1);
 		sendWSMessage_110000(-1);
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index f9df7d1ccd3..01bd4839191 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -30,7 +30,7 @@ namespace Rooms {
 
 class Room301 : public Room {
 private:
-	int _val1 = 0;
+	int32 _val1 = 0;
 	int _val2 = 0;
 	const char *_soundName = nullptr;
 	const char *_nextSound = nullptr;
diff --git a/engines/m4/riddle/vars.h b/engines/m4/riddle/vars.h
index 7b1967f66da..00599689a06 100644
--- a/engines/m4/riddle/vars.h
+++ b/engines/m4/riddle/vars.h
@@ -53,6 +53,7 @@ public:
 	Riddle::Walker _walker;
 	Riddle::Hotkeys _hotkeys;
 	Riddle::GUI::Interface _interface;
+	int _global301 = 0;
 
 public:
 	Vars();




More information about the Scummvm-git-logs mailing list