[Scummvm-git-logs] scummvm master -> 96227666df4d6019523b16ec978c6255a7987319

dreammaster noreply at scummvm.org
Thu Jul 25 04:59:49 UTC 2024


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ebbb8b79f9 M4: RIDDLE: Room 301 init code
67e81ce4b5 M4: RIDDLE: In progress room 301 parser
96227666df M4: RIDDLE: Finished room 301 parser


Commit: ebbb8b79f97a1e8b79ae8d004c2cef6f687373d5
    https://github.com/scummvm/scummvm/commit/ebbb8b79f97a1e8b79ae8d004c2cef6f687373d5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00

Commit Message:
M4: RIDDLE: Room 301 init code

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/wscript/ws_load.cpp
    engines/m4/wscript/ws_load.h


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 379e83701cb..4682d2386c8 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -39,13 +39,94 @@ void Room::restoreAutosave() {
 	}
 }
 
-void Room::triggerMachineByHashCallback(frac16 myMessage, machine *sender) {
+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);
+}
+
+int Room::checkFlags(bool flag) {
+	int count = 0;
+
+	if (_G(flags)[V364] == 1) {
+		++count;
+		switch (_G(flags)[V005]) {
+		case 1:
+			_G(flags)[V351] = 1;
+			break;
+		case 2:
+			_G(flags)[V352] = 1;
+			break;
+		case 3:
+			_G(flags)[V353] = 1;
+			break;
+		case 4:
+			_G(flags)[V354] = 1;
+			break;
+		default:
+			break;
+		}
+	}
+
+	if (_G(flags)[V365] == 1) {
+		_G(flags)[V355] = 1;
+		++count;
+	}
+	if (_G(flags)[V366] == 1) {
+		_G(flags)[V356] = 1;
+		++count;
+	}
+
+	if (flag) {
+		if (_G(flags)[V367] == 1) {
+			_G(flags)[V357] = 1;
+			++count;
+		}
+		if (_G(flags)[V368] == 1) {
+			_G(flags)[V358] = 1;
+			++count;
+		}
+		if (_G(flags)[V369] == 1) {
+			_G(flags)[V359] = 1;
+			++count;
+		}
+	}
+
+	if (_G(game).room_id == 501 && _G(flags)[V370] == 1) {
+		_G(flags)[V360] = 1;
+		++count;
+	}
+
+	if (_G(game).room_id != 401 && _G(flags)[V373] == 1) {
+		_G(flags)[V363] = 1;
+		++count;
+	}
+
+	if (_G(game).room_id != 501 && _G(flags)[V371] == 1) {
+		_G(flags)[V361] = 1;
+		++count;
+	}
+
+	if (_G(flags)[V372] == 1) {
+		_G(flags)[V362] = 1;
+		++count;
+	}
+
+	return count;
+}
+
+void Room::setFlag45() {
+	_G(flags)[V045] = 1;
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 0eb694d658f..03e4b930747 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -35,10 +35,21 @@ namespace Rooms {
 class Room : public M4::Room {
 protected:
 	static void intrMsgNull(frac16 myMessage, machine *sender) {}
-	static void triggerMachineByHashCallback(frac16 myMessage, machine *sender);
+	static void triggerMachineByHashCallback(frac16 myMessage, machine *sender = nullptr);
+	static void triggerMachineByHashCallbackNegative(frac16 myMessage, machine *sender = nullptr);
 
 	void restoreAutosave();
-	int _roomVal1 = 0;
+
+	/**
+	 * Checks various game flags for updates
+	 * @param flag		If set, does extra checks
+	 * @return	A count of the flag changes done
+	 */
+	int checkFlags(bool flag);
+
+	void setFlag45();
+
+	int _roomVal1 = 0;		// TODO: deprecate
 
 public:
 	Room() : M4::Room() {}
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index 2949b4ec16d..bf9e0293804 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -27,7 +27,72 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room301::preload() {
+	_G(player).walker_type = 1;
+	_G(player).shadow_type = 1;
+	_G(player).walker_in_this_scene = true;
+	LoadWSAssets("OTHER SCRIPT");
+}
+
 void Room301::init() {
+	_G(flags)[V000] = 1;
+	digi_preload("950_s01");
+
+	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+		_val1 = 0;
+		_val2 = 0;
+		_val3 = 0;
+		_val4 = 0;
+		_val5 = -1;
+		_val6 = 2;
+		_val7 = 2;
+		_val8 = 0;
+		_val9 = 0;
+		_val10 = 0;
+		_val11 = 0;
+		_val12 = 0;
+	}
+
+	_val13 = 0;
+	_val14 = 0;
+
+	_ripTrekHandTalk3 = series_load("rip trek hand talk pos3");
+	_ripTrekTalker3 = series_load("RIP TREK TALKER POS3");
+	_ripTrekTravel = series_load("rip trek travel disp");
+	_agentStander = series_load("agent stander / talk disp");
+	_agentCheckingList = series_load("agent checking list on desk");
+	_agentSlidesPaper = series_load("AGENT SLIDES PAPER TO RIP");
+	_agentTakesMoney = series_load("agent takes money from rip");
+	_agentTakesTelegram = series_load("agent takes telegram from slot");
+	_agentTalk = series_load("agent animated talk disp");
+	_agentSalutes = series_load("agent salutes rip");
+	_machine1 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+		triggerMachineByHashCallbackNegative, "guy behind desk");
+
+	sendWSMessage(1, _machine1, _agentStander, 1, 1, 10, _agentStander, 1, 1, 0);
+
+	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+		if (inv_object_in_scene("ROMANOV EMERALD", 305)) {
+			setFlag45();
+			inv_move_object("ROMANOV EMERALD", NOWHERE);
+		}
+
+		_val12 = checkFlags(false);
+		player_set_commands_allowed(false);
+		ws_demand_location(55, 270, 3);
+
+		if (_val12 || (!player_been_here(401) && _G(flags)[V092] && !_G(flags)[V093])) {
+			ws_walk(352, 269, nullptr, 60, 3);
+		} else if (!player_been_here(301)) {
+			digi_preload("301r37");
+			digi_play("301r37", 1, 255, 51);
+			ws_walk(165, 270, nullptr, -1, 3);
+		} else {
+			ws_walk(165, 270, nullptr, 51, 3);
+		}
+	}
+
+	digi_play_loop("950_s01", 3, 140);
 }
 
 void Room301::daemon() {
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index ce94b792230..88ea2ef2f69 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -29,10 +29,38 @@ namespace Riddle {
 namespace Rooms {
 
 class Room301 : public Room {
+private:
+	int _val1 = 0;
+	int _val2 = 0;
+	int _val3 = 0;
+	int _val4 = 0;
+	int _val5 = -1;
+	int _val6 = 2;
+	int _val7 = 2;
+	int _val8 = 0;
+	int _val9 = 0;
+	int _val10 = 0;
+	int _val11 = 0;
+	int _val12 = 0;
+	int _val13 = 0;
+	int _val14 = 0;
+	int _ripTrekHandTalk3 = 0;
+	int _ripTrekTalker3 = 0;
+	int _ripTrekTravel = 0;
+	int _agentStander = 0;
+	int _agentCheckingList = 0;
+	int _agentSlidesPaper = 0;
+	int _agentTakesMoney = 0;
+	int _agentTakesTelegram = 0;
+	int _agentTalk = 0;
+	int _agentSalutes = 0;
+	machine *_machine1 = nullptr;
+
 public:
 	Room301() : Room() {}
 	~Room301() override {}
 
+	void preload() override;
 	void init() override;
 	void daemon() override;
 };
diff --git a/engines/m4/wscript/ws_load.cpp b/engines/m4/wscript/ws_load.cpp
index 8037a20fb44..bc9ff4a493c 100644
--- a/engines/m4/wscript/ws_load.cpp
+++ b/engines/m4/wscript/ws_load.cpp
@@ -272,6 +272,10 @@ void ShutdownWSAssets(void) {
 	_GWS(wsloaderInitialized) = false;
 }
 
+bool LoadWSAssets(const char *wsAssetName) {
+	return LoadWSAssets(wsAssetName, _G(master_palette));
+}
+
 bool LoadWSAssets(const char *wsAssetName, RGB8 *myPalette) {
 	MemHandle workHandle;
 	char *mainAssetPtr, *parseAssetPtr, *endOfAssetBlock;
diff --git a/engines/m4/wscript/ws_load.h b/engines/m4/wscript/ws_load.h
index 95f71b8761b..1f0fd9ebc07 100644
--- a/engines/m4/wscript/ws_load.h
+++ b/engines/m4/wscript/ws_load.h
@@ -81,6 +81,7 @@ bool InitWSAssets();
 bool ClearWSAssets(uint32 assetType, int32 minHash, int32 maxHash);
 void ShutdownWSAssets();
 
+bool LoadWSAssets(const char *wsAssetName);
 bool LoadWSAssets(const char *wsAssetName, RGB8 *myPalette);
 int32 AddWSAssetCELS(const char *wsAssetName, int32 hash, RGB8 *myPalette);
 M4sprite *GetWSAssetSprite(char *spriteName, uint32 hash, uint32 index, M4sprite *mySprite, bool *streamSeries);


Commit: 67e81ce4b5f6b8bf624bc33cddab36c261ecf1d7
    https://github.com/scummvm/scummvm/commit/67e81ce4b5f6b8bf624bc33cddab36c261ecf1d7
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00

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

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


diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index bf9e0293804..eaf0316c60e 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -41,7 +41,7 @@ void Room301::init() {
 	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
 		_val1 = 0;
 		_val2 = 0;
-		_val3 = 0;
+		_soundName = nullptr;
 		_val4 = 0;
 		_val5 = -1;
 		_val6 = 2;
@@ -96,6 +96,137 @@ void Room301::init() {
 }
 
 void Room301::daemon() {
+	// TODO
+}
+
+void Room301::pre_parser() {
+	if (player_said("exit") && _G(globals)[GLB_TEMP_1]) {
+		_G(player).need_to_walk = false;
+		_G(player).ready_to_walk = true;
+		_G(player).waiting_for_walk = false;
+	}
+}
+
+void Room301::parser() {
+	auto oldMode = _G(kernel).trigger_mode;
+	bool lookFlag = player_said_any("look", "look at");		// ecx
+	bool talkFlag = player_said_any("talk", "talk to");
+	bool takeFlag = player_said("take");					// edi
+	bool useFlag = player_said_any("push", "pull", "gear", "open", "close"); // esi
+
+	if (player_said("con301a")) {
+		conv301a();
+	} else if (player_said("exit")) {
+		if (_G(globals)[GLB_TEMP_1]) {
+			if (_G(kernel).trigger == -1) {
+				player_set_commands_allowed(false);
+				_marshalMatt = series_load("marshall matt");
+				digi_preload("301s01");
+				_ripTrekArms = series_load("rip trek arms x pos3");
+				ws_walk(200, 269, nullptr, 1, 9);
+			} else if (_G(kernel).trigger == 1) {
+				_G(kernel).trigger_mode = KT_DAEMON;
+				_machine2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+					triggerMachineByHashCallbackNegative, "marshal");
+				sendWSMessage(1, _machine2, _marshalMatt, 1, 2, 202, _marshalMatt, 3, 3, 0);
+				_val17 = 0;
+				_val18 = 0;
+			}
+		} else {
+			if (_G(kernel).trigger == -1) {
+				player_set_commands_allowed(false);
+				disable_player_commands_and_fade_init(1);
+			} else if (_G(kernel).trigger == 1) {
+				_G(game).new_room = 303;
+			}
+		}
+	} else if (lookFlag && player_said("poster")) {
+		digi_play("301r04", 1);
+	} else if (lookFlag && player_said("window")) {
+		digi_play(_G(player).been_here_before ? "301r15" : "301r05", 1);
+	} else if (lookFlag && player_said("magazines")) {
+		digi_play("301r06", 1);
+	} else if (lookFlag && player_said("water cooler")) {
+		digi_play(_G(player).been_here_before ? "301r16" : "301r07", 1);
+	} else if (lookFlag && player_said("agent")) {
+		digi_play("301r08", 1);
+	} else if (lookFlag && player_said("telephone")) {
+		digi_play("301r27", 1);
+	} else if (lookFlag && player_said("plant")) {
+		digi_play("301r28", 1);
+	} else if (lookFlag && player_said("postcards")) {
+		if (_G(globals)[V033]) {
+			digi_play("301r14", 1);
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				digi_play("301r03", 1, 255, 3);
+				kernel_timing_trigger(260, 1);
+				break;
+			case 1:
+				player_update_info();
+				ws_walk(_G(player_info).x, _G(player_info).y,
+					nullptr, 2, 3);
+				break;
+			case 2:
+				// TODO
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+
+	// TODO
+	_G(player).command_ready = false;
+}
+
+void Room301::conv301a() {
+	const char *sound = conv_sound_to_play();
+	int who = conv_whos_talking();
+	int node = conv_current_node();
+
+	if (_G(kernel).trigger == 1 || !sound) {
+		if (who <= 0) {
+			if (node != 3) {
+				_val14 = 4;
+				conv_resume();
+			}
+		} else if (who == 1) {
+			if (node == 11) {
+				_val14 = 12;
+			} else if (node != 13) {
+				_val15 = 0;
+				conv_resume();
+			} else {
+				conv_resume();
+			}
+		} else {
+			conv_resume();
+		}
+	} else {
+		if (who <= 0) {
+			if (node == 3) {
+				_val14 = 15;
+			} else if (node != 2) {
+				_val14 = imath_ranged_rand(5, 6);
+			} else {
+				_val14 = 2;
+				_soundName = sound;
+				_val16 = 1;
+				return;
+			}
+		} else if (who == 1) {
+			if (node == 13)
+				_val14 = 13;
+			else
+				_val15 = 1;
+		}
+
+		digi_play(sound, 1, 255, 1);
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index 88ea2ef2f69..e1a1be0e6ce 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -32,7 +32,7 @@ class Room301 : public Room {
 private:
 	int _val1 = 0;
 	int _val2 = 0;
-	int _val3 = 0;
+	const char *_soundName = nullptr;
 	int _val4 = 0;
 	int _val5 = -1;
 	int _val6 = 2;
@@ -44,6 +44,10 @@ private:
 	int _val12 = 0;
 	int _val13 = 0;
 	int _val14 = 0;
+	int _val15 = 0;
+	int _val16 = 0;
+	int _val17 = 0;
+	int _val18 = 0;
 	int _ripTrekHandTalk3 = 0;
 	int _ripTrekTalker3 = 0;
 	int _ripTrekTravel = 0;
@@ -54,7 +58,12 @@ private:
 	int _agentTakesTelegram = 0;
 	int _agentTalk = 0;
 	int _agentSalutes = 0;
+	int _ripTrekArms = 0;
+	int _marshalMatt = 0;
 	machine *_machine1 = nullptr;
+	machine *_machine2 = nullptr;
+
+	void conv301a();
 
 public:
 	Room301() : Room() {}
@@ -63,6 +72,8 @@ public:
 	void preload() override;
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms


Commit: 96227666df4d6019523b16ec978c6255a7987319
    https://github.com/scummvm/scummvm/commit/96227666df4d6019523b16ec978c6255a7987319
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-07-24T21:59:36-07:00

Commit Message:
M4: RIDDLE: Finished room 301 parser

Changed paths:
    engines/m4/riddle/flags.h
    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/flags.h b/engines/m4/riddle/flags.h
index f10e3adedd2..c5827542a9e 100644
--- a/engines/m4/riddle/flags.h
+++ b/engines/m4/riddle/flags.h
@@ -55,7 +55,7 @@ enum {
 	V020 =  20,
 	V021 =  21,
 	V022 =  22,
-	kHarryComingToRoof =  23,
+	V023 =  23,
 	V024 =  24,
 	V025 =  25,
 	V026 =  26,
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 4682d2386c8..649fb267802 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -127,6 +127,88 @@ void Room::setFlag45() {
 	_G(flags)[V045] = 1;
 }
 
+void Room::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) {
+	_G(globals)[GLB_TEMP_1] = val1 << 24;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val3 << 16;
+	_G(globals)[GLB_TEMP_4] = val4 << 16;
+	_G(globals)[GLB_TEMP_5] = val5 << 16;
+	_G(globals)[GLB_TEMP_6] = val6 << 16;
+	_G(globals)[GLB_TEMP_7] = val7 << 16;
+	_G(globals)[GLB_TEMP_8] = val8 << 16;
+	_G(globals)[GLB_TEMP_9] = val9 << 16;
+	_G(globals)[GLB_TEMP_10] = val10 << 16;
+	_G(globals)[GLB_TEMP_11] = val11 << 16;
+	_G(globals)[GLB_TEMP_12] = val12 << 16;
+	_G(globals)[GLB_TEMP_13] = val13 << 16;
+	_G(globals)[GLB_TEMP_14] = val14 << 16;
+	_G(globals)[V021] = val15 << 16;
+	_G(globals)[V022] = val16 << 16;
+	_G(globals)[V024] = val17 << 16;
+	_G(globals)[V025] = val18 << 16;
+	_G(globals)[V026] = val19 << 16;
+	_G(globals)[V027] = val20 << 16;
+	_G(globals)[V028] = val21 << 16;
+}
+
+void Room::sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
+		int val4, int trigger, int val9, int val6, int val7, int val8) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[GLB_TEMP_1] = val1 << 16;
+	_G(globals)[GLB_TEMP_2] = val2 << 16;
+	_G(globals)[GLB_TEMP_3] = val3 << 16;
+	_G(globals)[GLB_TEMP_4] = val4 << 16;
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	_G(globals)[GLB_TEMP_6] = val6 << 16;
+	_G(globals)[GLB_TEMP_7] = val7 << 16;
+	_G(globals)[GLB_TEMP_8] = val8 << 16;
+	_G(globals)[GLB_TEMP_9] = val9 << 24;
+
+	sendWSMessage(0x10000, 0, nullptr, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_C0000(machine *walker, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[GLB_TEMP_5] = kernel_trigger_create(trigger);
+	sendWSMessage(0xC0000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_C0000(int trigger) {
+	sendWSMessage_C0000(_G(my_walker), trigger);
+}
+
+void Room::sendWSMessage_110000(machine *walker, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x110000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_110000(int trigger) {
+	sendWSMessage_110000(_G(my_walker), trigger);
+}
+
+void Room::sendWSMessage_140000(machine *walker, int trigger) {
+	if (!trigger)
+		trigger = -1;
+
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+	sendWSMessage(0x140000, 0, walker, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_140000(int trigger) {
+	sendWSMessage_140000(_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 03e4b930747..a8db601df32 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -49,6 +49,24 @@ protected:
 
 	void setFlag45();
 
+	/**
+	 * 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);
+
+	void sendWSMessage_10000(int val1, machine *recv, int val2, int val3,
+		int val4, int trigger, int val9, int val6, int val7, int val8);
+	void sendWSMessage_C0000(machine *walker, int trigger);
+	void sendWSMessage_C0000(int trigger);
+	void sendWSMessage_110000(machine *walker, int trigger);
+	void sendWSMessage_110000(int trigger);
+	void sendWSMessage_140000(machine *walker, int trigger);
+	void sendWSMessage_140000(int trigger);
+
 	int _roomVal1 = 0;		// TODO: deprecate
 
 public:
diff --git a/engines/m4/riddle/rooms/section3/room301.cpp b/engines/m4/riddle/rooms/section3/room301.cpp
index eaf0316c60e..1fe02699d21 100644
--- a/engines/m4/riddle/rooms/section3/room301.cpp
+++ b/engines/m4/riddle/rooms/section3/room301.cpp
@@ -170,16 +170,100 @@ void Room301::parser() {
 					nullptr, 2, 3);
 				break;
 			case 2:
-				// TODO
+				setGlobals1(_ripTrekHandTalk3, 1, 7, 8, 9, 1, 0, 0,
+					0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(-1);
+				break;
+			case 3:
+				sendWSMessage_140000(-1);
+				_val14 = 5;
+				_val6 = 1;
+				_val7 = 1;
+				_val16 = 4;
+				_soundName = "301a02";
+				break;
+			case 4:
+				_val14 = 0;
+				_val5 = kernel_trigger_create(5);
+				_G(kernel).trigger_mode = KT_DAEMON;
+				kernel_timing_trigger(1, 11);
+				_G(kernel).trigger_mode = oldMode;
+				break;
+			case 5:
+				player_set_commands_allowed(true);
+				_G(globals)[V033] = 1;
 				break;
 			default:
 				break;
 			}
 		}
-	}
+	} else if (player_said_any("AMERICAN CURRENCY", "CHINESE CURRENCY") &&
+			player_said("AGENT")) {
+		digi_play("301r30", 1);
+	} else if (lookFlag && player_said_any("sofa", "chair")) {
+		digi_play("301r29", 1);
+	} else if (_G(kernel).trigger == 747) {
+		player_set_commands_allowed(false);
+		_val14 = 0;
+		_val15 = 4;
 
+		if (_val1) {
+			switch (_val1) {
+			case 1:
+				_G(globals)[V129] = 0;
+				break;
+			case 2:
+				_G(globals)[V129] = 2;
+				break;
+			case 3:
+				_G(globals)[V129] = 3;
+				break;
+			case 4:
+				_G(globals)[V129] = 4;
+				break;
+			default:
+				break;
+			}
+
+			disable_player_commands_and_fade_init(748);
+		}
+
+	} else if (_G(kernel).trigger == 748) {
+		_G(game).setRoom(495);
+
+	} else if (talkFlag && player_said("agent")) {
+		ws_hide_walker();
+		player_set_commands_allowed(false);
+		player_update_info();
+
+		_machine3 = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0,
+			_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+		_machine4 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "rip");
+
+		_G(kernel).trigger_mode = KT_DAEMON;
+		_val19 = 0;
+		_val15 = 5;
+		sendWSMessage_10000(1, _machine4, _ripTrekTravel, 1, 9, 20,
+			_ripTrekTravel, 10, 10, 0);
+		_val14 = 4;
+	} else if (takeFlag && player_said("postcards")) {
+		digi_play("301r09", 1);
+	} else if (takeFlag && player_said("water cooler")) {
+		digi_play("301r10", 1);
+	} else if (takeFlag && player_said("magazines")) {
+		digi_play("301r11", 1);
+	} else if (useFlag && player_said_any("sofa", "chair")) {
+		digi_play("301r31", 1);
+	} else if (useFlag && player_said("telephone")) {
+		digi_play("301r32", 1);
+	} else if (useFlag && _G(player).click_y <= 374 &&
+			!inv_player_has(_G(player).noun)) {
+		digi_play("301r33", 1);
+	} else {
+		return;
+	}
 
-	// TODO
 	_G(player).command_ready = false;
 }
 
diff --git a/engines/m4/riddle/rooms/section3/room301.h b/engines/m4/riddle/rooms/section3/room301.h
index e1a1be0e6ce..1333b65aa3a 100644
--- a/engines/m4/riddle/rooms/section3/room301.h
+++ b/engines/m4/riddle/rooms/section3/room301.h
@@ -48,6 +48,7 @@ private:
 	int _val16 = 0;
 	int _val17 = 0;
 	int _val18 = 0;
+	int _val19 = 0;
 	int _ripTrekHandTalk3 = 0;
 	int _ripTrekTalker3 = 0;
 	int _ripTrekTravel = 0;
@@ -62,6 +63,8 @@ private:
 	int _marshalMatt = 0;
 	machine *_machine1 = nullptr;
 	machine *_machine2 = nullptr;
+	machine *_machine3 = nullptr;
+	machine *_machine4 = nullptr;
 
 	void conv301a();
 




More information about the Scummvm-git-logs mailing list