[Scummvm-git-logs] scummvm master -> 7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e

dreammaster noreply at scummvm.org
Wed Sep 25 05:02:57 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:
7e4a78c5cc M4: RIDDLE: Added room 605 parser


Commit: 7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e
    https://github.com/scummvm/scummvm/commit/7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-24T22:02:48-07:00

Commit Message:
M4: RIDDLE: Added room 605 parser

Changed paths:
    engines/m4/riddle/rooms/section6/room605.cpp
    engines/m4/riddle/rooms/section6/room605.h


diff --git a/engines/m4/riddle/rooms/section6/room605.cpp b/engines/m4/riddle/rooms/section6/room605.cpp
index 66a239b6ac5..f576ebf11bc 100644
--- a/engines/m4/riddle/rooms/section6/room605.cpp
+++ b/engines/m4/riddle/rooms/section6/room605.cpp
@@ -362,7 +362,7 @@ void Room605::daemon() {
 			case 5:
 				terminateMachineAndNull(_ripley);
 				ws_unhide_walker();
-				terminateMachineAndNull(_machine1);
+				terminateMachineAndNull(_shadow);
 				break;
 			case 6:
 				sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, -1, _ripTalk, 1, 7, 4);
@@ -431,7 +431,437 @@ void Room605::pre_parser() {
 }
 
 void Room605::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool talkFlag = player_said_any("talk", "talk to");
+	bool takeFlag = player_said("take");
 
+	if (player_said("conv605a")) {
+		conv605a();
+	} else if (talkFlag && player_said("samantha")) {
+		player_set_commands_allowed(false);
+		player_update_info();
+		ws_hide_walker();
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+			_G(player_info).x, _G(player_info).y, _G(player_info).scale + 1,
+			0x100, 1, triggerMachineByHashCallbackNegative, "rip");
+
+		_G(kernel).trigger_mode = KT_DAEMON;
+		sendWSMessage_10000(1, _ripley, 1, 1, 1, 300, 1, 1, 1, 0);
+		_G(kernel).trigger_mode = KT_PARSE;
+
+		_val1 = 0;
+		_val2 = 0;
+		_shadow = series_show("safari shadow 2", 0xd00, 16, -1, -1, 0,
+			-_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+		conv_load("conv605a", 10, 10, 747);
+		conv_play();
+
+	} else if (_G(kernel).trigger == 747) {
+		// No implementation
+	} else if (takeFlag && player_said_any("pupil", "obsidian disk") &&
+			_G(flags)[V203] != 2 && takePupilDisk()) {
+		// No implementation
+	} else if (player_said("SLEEVE") && player_said_any("pupil", "OBSIDIAN DISK") &&
+			_G(flags)[V203] == 2 && sleeveDisk1()) {
+		// No implementation
+	} else if (player_said("SLEEVE") && player_said_any("pupil", "OBSIDIAN DISK") &&
+		_G(flags)[V203] != 2 && sleeveDisk2()) {
+		// No implementation
+	} else if (player_said("journal", "glyphs")) {
+		if (_G(flags)[V196]) {
+			digi_play("203r54", 1);
+		} else {
+			if (_G(kernel).trigger == 6)
+				_G(flags)[V196] = 1;
+			sendWSMessage_multi(0);
+		}
+	} else if (lookFlag && player_said("head")) {
+		digi_play("605r03", 1);
+	} else if (lookFlag && player_said("glyphs")) {
+		digi_play("605r35", 1);
+	} else if (lookFlag && player_said("SAMANTHA")) {
+		static const char *DIGI[4] = { "605r05", "605r06", "605r07", "605r08" };
+		digi_play(DIGI[imath_ranged_rand(0, 3)], 1);
+	} else if (lookFlag && player_said("topknot")) {
+		if (_G(flags)[V203] == 2) {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				_val6 = 5;
+				digi_play("605r04", 1, 255, 1);
+				break;
+			case 1:
+				_val6 = 4;
+				digi_play("605t03", 1, 255, 2);
+				break;
+			case 2:
+				_val6 = 0;
+				kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+				break;
+			default:
+				break;
+			}
+		} else {
+			digi_play("605r26", 1);
+		}
+	} else if (lookFlag && player_said("LEFT")) {
+		if (_G(flags)[V000]) {
+			if (_G(flags)[V186])
+				digi_play("305r53", 1);
+			else
+				_G(flags)[V185] = 1;
+		} else {
+			digi_play("305r53", 1);
+		}
+	} else if (lookFlag && player_said("up")) {
+		if (_G(flags)[V000]) {
+			if (_G(flags)[V184])
+				digi_play("305r53", 1);
+			else
+				_G(flags)[V184] = 1;
+		} else {
+			digi_play("305r53", 1);
+		}
+	} else if (lookFlag && player_said_any("pupil", "OBSIDIAN DISK") &&
+			inv_object_is_here("OBSIDIAN DISK")) {
+		digi_play(_G(flags)[V203] == 2 ? "605r09" : "605r27", 1);
+
+	} else if (parserMisc()) {
+		// No implementation
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
+}
+
+void Room605::conv605a() {
+	const char *sound = conv_sound_to_play();
+	int who = conv_whos_talking();
+	int node = conv_current_node();
+	int entry = conv_current_entry();
+
+	switch (_G(kernel).trigger) {
+	case 1:
+		if (who <= 0) {
+			if (node == 1 && entry == 0)
+				_val2 = 0;
+			if (node == 2 && entry == 0) {
+				kernel_timing_trigger(60, 4);
+				return;
+			}
+			if (_val6 == 3)
+				kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+
+			_val6 = 0;
+
+		} else if (who == 1) {
+			if (!(node == 6 && entry == 2) &&
+					!(node == 1 && entry == 0) &&
+					!(node == 2 && entry == 3)) {
+				if (_val2 == 6)
+					kernel_timing_trigger(1, 300, KT_DAEMON, KT_PARSE);
+				_val2 = 0;
+			}
+		}
+
+		conv_resume();
+		break;
+
+	case 2:
+		ws_walk(513, 316, nullptr, 3, 10);
+		return;
+
+	case 3:
+		player_update_info();
+		ws_hide_walker();
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+			_G(player_info).x, _G(player_info).y, _G(player_info).scale + 1,
+			0x100, 1, triggerMachineByHashCallbackNegative, "rip");
+
+		_G(kernel).trigger_mode = KT_DAEMON;
+		sendWSMessage_10000(1, _ripley, 1, 1, 1, 300, 1, 1, 1, 0);
+		_G(kernel).trigger_mode = KT_PARSE;
+
+		_val1 = 0;
+		_val2 = 0;
+		_shadow = series_show("safari shadow 2", 0xd00, 16, -1, -1, 0,
+			-_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+		break;
+
+	case 4:
+		conv_resume();
+		_val6 = 0;
+		break;
+
+	case 5:
+		_val2 = 0;
+		break;
+
+	default:
+		if (sound) {
+			if (who <= 0) {
+				if (node == 6 && entry == 3) {
+					_val6 = 8;
+				} else if (node == 6 && entry == 4) {
+					_val6 = 10;
+					_val2 = 5;
+				} else if (node == 3 && entry == 0) {
+					kernel_timing_trigger(120, 2);
+				} else if (node == 2 && entry == 0) {
+					_val6 = 9;
+				} else {
+					_val6 = 3;
+				}
+			} else if (who == 1) {
+				if (node == 6 && entry == 2) {
+					_val2 = 3;
+				} else if (node == 6 && entry == 1) {
+					_val2 = 1;
+				} else if ((node == 1 && entry == 0) ||
+						(node == 2 && entry == 3)) {
+					_val2 = 2;
+				} else if (node == 2 && entry == 1) {
+					_val2 = 1;
+					kernel_timing_trigger(60, 5);
+				} else {
+					_val2 = 6;
+				}
+			}
+
+			digi_play(sound, 1);
+
+		} else {
+			conv_resume();
+		}
+		break;
+	}
+}
+
+bool Room605::takePupilDisk() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("OBSIDIAN DISK")) {
+			player_set_commands_allowed(false);
+			_ripHandOnIris = series_load("RIP BURNS HAND ON IRIS");
+			ws_hide_walker();
+			_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+				triggerMachineByHashCallbackNegative, "take pupil");
+			sendWSMessage_10000(1, _ripley, _ripHandOnIris, 1, 26, 2,
+				_ripHandOnIris, 26, 26, 1);
+			return true;
+		}
+		break;
+
+	case 1:
+		_val6 = 7;
+		return true;
+
+	case 2:
+		sendWSMessage_10000(1, _ripley, _ripHandOnIris, 27, 41, 6,
+			_ripHandOnIris, 41, 41, 1);
+		digi_play("605r15", 1, 255, 4);
+		return true;
+
+	case 4:
+		_val6 = 6;
+		digi_play("605t06", 1, 255, 8);
+		return true;
+
+	case 6:
+		terminateMachineAndNull(_ripley);
+		ws_unhide_walker();
+		return true;
+
+	case 8:
+		series_unload(_ripHandOnIris);
+		_val6 = 0;
+		_G(kernel).trigger_mode = KT_DAEMON;
+		kernel_timing_trigger(1, 200);
+		player_set_commands_allowed(true);
+		_G(flags)[V197] = 1;
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room605::sleeveDisk1() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("OBSIDIAN DISK")) {
+			player_set_commands_allowed(false);
+			ws_hide_walker();
+			_ripGetsIrisWithCloth = series_load("RIP GETS IRIS WITH CLOTH");
+			digi_preload("605_s01");
+			digi_preload("605_s02");
+			_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+				triggerMachineByHashCallbackNegative, "take pupil");
+			sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 1,
+				_ripGetsIrisWithCloth, 41, 41, 1);
+			return true;
+		}
+		break;
+
+	case 1:
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 3,
+			_ripGetsIrisWithCloth, 43, 43, 1);
+		_val6 = 7;
+		digi_play("605_S01", 2);
+		return true;
+
+	case 3:
+		terminateMachineAndNull(_pupil);
+		inv_give_to_player("OBSIDIAN DISK");
+		hotspot_set_active("PUPIL", false);
+		hotspot_set_active("OBSIDIAN DISK", false);
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 44, 75, 6,
+			_ripGetsIrisWithCloth, 75, 75, 1);
+		return true;
+
+	case 6:
+		terminateMachineAndNull(_ripley);
+		ws_unhide_walker();
+		digi_play("605r16", 1, 255, 8);
+		return true;
+
+	case 8:
+		_val6 = 6;
+		digi_play("605t07", 1, 255, 9);
+		return true;
+
+	case 9:
+		_val6 = 7;
+		kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+			triggerMachineByHashCallbackNegative, "take pupil");
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 10,
+			_ripGetsIrisWithCloth, 41, 41, 1);
+		return true;
+
+	case 10:
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 11,
+			_ripGetsIrisWithCloth, 43, 43, 1);
+		digi_play("605_S02", 2);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room605::sleeveDisk2() {
+	switch (_G(kernel).trigger) {
+	case -1:
+		if (inv_object_is_here("OBSIDIAN DISK")) {
+			player_set_commands_allowed(false);
+			ws_hide_walker();
+			_ripGetsIrisWithCloth = series_load("RIP GETS IRIS WITH CLOTH");
+			digi_preload("605_s01");
+			_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+				triggerMachineByHashCallbackNegative, "take pupil");
+			sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 1,
+				_ripGetsIrisWithCloth, 41, 41, 1);
+			return true;
+		}
+		break;
+
+	case 1:
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 2,
+			_ripGetsIrisWithCloth, 43, 43, 1);
+		digi_play("605_S01", 2);
+		return true;
+
+	case 2:
+		hotspot_set_active("PUPIL", false);
+		hotspot_set_active("OBSIDIAN DISK", false);
+		inv_give_to_player("OBSIDIAN DISK");
+		kernel_examine_inventory_object("PING OBSIDIAN DISK", 5, 1, 260, 190, 3);
+		terminateMachineAndNull(_pupil);
+		return true;
+
+	case 3:
+		sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 44, 75, 6,
+			_ripGetsIrisWithCloth, 75, 75, 1);
+		return true;
+
+	case 6:
+		digi_unload("605_s01");
+		terminateMachineAndNull(_ripley);
+		series_unload(_ripGetsIrisWithCloth);
+		ws_unhide_walker();
+		player_set_commands_allowed(true);
+		return true;
+
+	default:
+		break;
+	}
+
+	return false;
+}
+
+bool Room605::parserMisc() {
+	switch (_G(kernel).trigger) {
+	case 555:
+		digi_stop(1);
+		midi_play("tensions", 255, 1, -1, 949);
+		adv_kill_digi_between_rooms(false);
+		digi_play_loop("950_s28", 3, 90);
+		_G(game).setRoom(610);
+		break;
+
+	case 556:
+		digi_stop(1);
+		adv_kill_digi_between_rooms(false);
+		digi_play_loop("950_s28", 3, 90);
+		_G(game).setRoom(603);
+		break;
+
+	case 557:
+		digi_stop(1);
+		adv_kill_digi_between_rooms(false);
+		digi_play_loop("950_s28", 3, 90);
+		_G(game).setRoom(608);
+		break;
+
+	case 558:
+		digi_stop(1);
+		adv_kill_digi_between_rooms(false);
+		digi_play_loop("950_s28", 3, 90);
+		_G(game).setRoom(623);
+		break;
+
+	default:
+		if (player_said_any("down", "left", "right")) {
+			if (_G(flags)[V203] != 2) {
+				if (player_said("down")) {
+					player_set_commands_allowed(false);
+					disable_player_commands_and_fade_init(
+						_G(flags)[V203] == 8 ? 555 : 556);
+				}
+
+				if (player_said("right")) {
+					player_set_commands_allowed(false);
+					disable_player_commands_and_fade_init(557);
+				}
+
+				if (player_said("left")) {
+					player_set_commands_allowed(false);
+					disable_player_commands_and_fade_init(558);
+				}
+			}
+		} else {
+			return false;
+		}
+		break;
+	}
+
+	return true;
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room605.h b/engines/m4/riddle/rooms/section6/room605.h
index e0ae016d11e..31373d0ce23 100644
--- a/engines/m4/riddle/rooms/section6/room605.h
+++ b/engines/m4/riddle/rooms/section6/room605.h
@@ -43,12 +43,20 @@ private:
 	int _ripHandOnChin = 0;
 	int _ripTwoHandTalk = 0;
 	int _ripTalk = 0;
+	int _ripGetsIrisWithCloth = 0;
+	int _ripHandOnIris = 0;
 	int _605tt = 0;
 	machine *_pupil = nullptr;
 	machine *_ripley = nullptr;
 	machine *_tt = nullptr;
 	machine *_ttShadow = nullptr;
-	machine *_machine1 = nullptr;
+	machine *_shadow = nullptr;
+
+	void conv605a();
+	bool takePupilDisk();
+	bool sleeveDisk1();
+	bool sleeveDisk2();
+	bool parserMisc();
 
 public:
 	Room605() : Room() {}




More information about the Scummvm-git-logs mailing list