[Scummvm-git-logs] scummvm master -> c1a9117d8e720050a29b95064569530a847f9c1f

Strangerke noreply at scummvm.org
Thu Oct 10 21:19:09 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:
c1a9117d8e M4: RIDDLE: Implement parser in room 801


Commit: c1a9117d8e720050a29b95064569530a847f9c1f
    https://github.com/scummvm/scummvm/commit/c1a9117d8e720050a29b95064569530a847f9c1f
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-10T22:19:02+01:00

Commit Message:
M4: RIDDLE: Implement parser in room 801

Changed paths:
    engines/m4/riddle/rooms/section8/room801.cpp
    engines/m4/riddle/rooms/section8/room801.h


diff --git a/engines/m4/riddle/rooms/section8/room801.cpp b/engines/m4/riddle/rooms/section8/room801.cpp
index 4d3cfc39e61..18ff0efaa04 100644
--- a/engines/m4/riddle/rooms/section8/room801.cpp
+++ b/engines/m4/riddle/rooms/section8/room801.cpp
@@ -199,25 +199,500 @@ void Room801::parser() {
 
 	if (player_said("conv801a", nullptr, nullptr)) {
 		room801_conv801a();
-		_G(player).command_ready = false;
-		return;
 	}
 
-	if (_G(kernel).trigger == 747) {
+	else if (_G(kernel).trigger == 747) {
 		_roomStates_ripTalker = 4;
 		_roomStates_pu = 8;
 		_roomStates_field18 = 5;
 		conv_shutdown();
 		player_set_commands_allowed(true);
-		_G(player).command_ready = false;
-		return;
 	}
 
-	if (lookFl && _G(walker).ripley_said(SAID)) {
-		_G(player).command_ready = false;
-		return;
+	else if (lookFl && _G(walker).ripley_said(SAID)) {
+		; // Yep, nothing
+	}
+
+	else if (lookFl && player_said("house")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_roomStates_val1, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 0, 16, 16, 16, 16, 0);
+			sendWSMessage_110000(_G(my_walker), 4);
+			digi_play("801R12", 1, 255, 1, -1);
+			break;
+		case 1:
+			sendWSMessage_140000(_G(my_walker), 2);
+			break;
+		case 2: player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (lookFl && player_said("mount li")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			if (_G(flags)[V250]) {
+				digi_play("801R13A", 1, 255, 0);
+			} else {
+				player_set_commands_allowed(false);
+				setGlobals1(_roomStates_ear2, 1, 11, 11, 11, 0, 11, 1, 1, 1, 0, 1, 1, 1, 1, 0, 11, 11, 11, 11, 0);
+				sendWSMessage_110000(_G(my_walker), 4);
+				digi_play("801R13", 1, 255, 1, -1);
+				_G(flags)[V250] = 1;
+			}
+			break;
+		case 1:
+			sendWSMessage_140000(_G(my_walker), 2);
+			break;
+		case 2:
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (lookFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_roomStates_val2, 1, 4, 4, 4, 0, 4, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
+			sendWSMessage_110000(_G(my_walker), 1);
+			break;
+		case 1:
+			if (_G(flags)[V253]) {
+				digi_play("801R15A", 1, 255, 2, -1);
+			} else {
+				digi_play("801R15", 1, 255, 2, -1);
+			}
+			break;
+		case 2:
+			sendWSMessage_140000(_G(my_walker), 3);
+			break;
+		case 3:
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (lookFl && player_said("garden")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_roomStates_val3, 1, 3, 3, 3, 0, 3, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
+			sendWSMessage_110000(_G(my_walker), 1);
+			digi_play("801R16", 1, 255, 2, -1);
+			break;
+		case 2:
+			sendWSMessage_140000(_G(my_walker), 3);
+			break;
+		case 3:
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (lookFl && player_said("pottery")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			break;
+		case 1:
+			if (_var1 == 0)
+				++_var1;
+			else
+				sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 3, 42, 2, _roomStates_loop2, 42, 42, 0);
+			break;
+		case 2:
+			digi_play("801r20", 1, 255, 3, -1);
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 3, _roomStates_field78, 40, 40, 0);
+			break;
+		case 3:
+			if (_var1 == 0)
+				++_var1;
+			else {
+				_var1 = 0;
+				sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 42, 26, 4, _roomStates_loop2, 26, 26, 0);
+				sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 37, 40, 4, _roomStates_field78, 37, 40, 1);
+				digi_play("801m10", 1, 255, 4, -1);
+			}
+			break;
+		case 4:
+			if (_var1 == 2)
+				++_var1;
+			else {
+				_var1 = 0;
+				sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 40, 5, _roomStates_field78, 40, 40, 0);
+				sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 26, 42, 5, _roomStates_loop1, 42, 42, 0);
+			}
+			break;
+		case 5:
+			if (_var1 == 1)
+				++_var1;
+			else {
+				_var1 = 0;
+				digi_play("801r21", 1, 255, 6, -1);
+			}
+			break;
+		case 6:
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 42, 26, 7, _roomStates_loop1, 26, 26, 0);
+			break;
+		case 7:
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop1, 26, 1, 8, _roomStates_loop1, 1, 1, 0);
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 37, 40, 9, _roomStates_field78, 37, 40, 1);
+			digi_play("801m11", 1, 255, 9, -1);
+			break;
+		case 8:
+			terminateMachine(_roomStates_field8Ah);
+			_roomStates_field8Ah = nullptr;
+			ws_unhide_walker(_G(my_walker));
+			break;
+		case 9:
+			if (_var1 == 1)
+				++_var1;
+			else {
+				_var1 = 0;
+				sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 31, 10, _roomStates_field78, 31, 31, 0);
+			}
+			break;
+		case 10:
+			_G(flags)[V252] = 1;
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (lookFl && player_said("mei chen")) {
+		digi_play("COM043", 1, 255, -1, 997);
+	}
+
+	else if (lookFl && player_said("farm")) {
+		; // I bet there was something at some point, but it's really empty now
+	}
+
+	else if (gearFl && player_said("MATCH")) {
+		digi_play("801R09", 1, 255, -1, -1);
+	}
+
+	else if (player_said("US DOLLARS", "FARMER")) {
+		if (_G(flags)[V273]) {
+			digi_play("801r43b", 1, 255, -1, -1);
+		} else {
+			digi_play("801r43c", 1, 255, -1, -1);
+			_G(flags)[V273] = 1;
+		}
+	}
+
+	else if (player_said("CHINESE YUAN", "FARMER")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_roomStates_loop6, 1, 1, 1, 1, 0, 1, 7, 5, 7, 1, 7, 1, 1, 1, 0, 7, 7, 7, 7, 0);
+			sendWSMessage_110000(_G(my_walker), 1);
+			break;
+		case 1:
+			digi_play("801r27", 1, 255, 3, -1);
+			kernel_timing_trigger(430, 2, nullptr);
+			break;
+		case 2:
+			sendWSMessage_120000(_G(my_walker), 0);
+			break;
+		case 3:
+			sendWSMessage_130000(_G(my_walker), 0);
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 42, 55, 0, _roomStates_field78, 53, 55, 1);
+			digi_play("801m12", 1, 255, 4, -1);
+			break;
+		case 4:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 55, 55, 0, _roomStates_field78, 55, 55, 0);
+			digi_play("801f06", 1, 255, 5, -1);
+			sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 3, 4);
+			break;
+		case 5:
+			sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 1, 0);
+			sendWSMessage_150000(_G(my_walker), 0);
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 6, _roomStates_field78, 40, 40, 0);
+			break;
+		case 6:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 41, 0, _roomStates_field78, 39, 41, 4);
+			digi_play("801m13", 1, 255, 7, -1);
+			break;
+		case 7:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 41, 31, 0, _roomStates_field78, 31, 31, 0);
+			setGlobals1(_roomStates_loop7, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
+			sendWSMessage_110000(_G(my_walker), 9);
+			kernel_timing_trigger(50, 8, nullptr);
+			inv_move_object("CHINESE YUAN", 801);
+			digi_play("801r28", 1, 255, 9, -1);
+			break;
+		case 8:
+			sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field6C, 71, 110, 10, _roomStates_field74, 110, 110, 0);
+			break;
+		case 9:
+			sendWSMessage_120000(_G(my_walker), 0);
+			break;
+		case 10:
+			sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field74, 1, 1, 0, _roomStates_field74, 1, 1, 0);
+			sendWSMessage_150000(_G(my_walker), 12);
+			break;
+		case 12:
+			player_update_info(_G(my_walker), &_G(player_info));
+			ws_walk(_G(my_walker), 8, 6, nullptr, 13, 5, true);
+			break;
+		case 13:
+			hotspot_set_active(_G(currentSceneDef).hotspots, "farmer's shovel", false);
+			setGlobals1(_roomStates_loop7, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
+			sendWSMessage_110000(_G(my_walker), 16);
+			break;
+		case 16:
+			kernel_examine_inventory_object("PING FARMER'S SHOVEL", _G(master_palette), 5, 1, 110, 250, 17, nullptr, -1);
+			terminateMachine(_roomStates_field86h);
+			inv_give_to_player("farmer's shovel");
+			break;
+		case 17:
+			sendWSMessage_140000(_G(my_walker), 18);
+			break;
+		case 18:
+			series_unload(_roomStates_field80);
+			player_set_commands_allowed(true);
+			break;
+
+		default:
+			break;
+		}
+	}
+
+	else if (gearFl && player_said("root cellar  ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			if (_roomStates_tt == 0) {
+				player_set_commands_allowed(false);
+				ws_hide_walker();
+				terminateMachine(_roomStates_fieldA6h);
+				_roomStates_field18 = series_load("RIP OPENS CELLAR", -1, nullptr);
+				_roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip opens cellar");
+				sendWSMessage_10000(1, _roomStates_field8Ah, 1, _roomStates_field18, 28, 10, _roomStates_field18, 28, 28, 0);
+			}
+			break;
+		case 1:
+			_roomStates_tt = 1;
+			terminateMachine(_roomStates_field8Ah);
+			series_unload(_roomStates_field18);
+			_roomStates_fieldAAh = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar  ", false);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
+			ws_unhide_walker(_G(my_walker));
+			player_set_commands_allowed(true);
+			break;
+
+		case 10:
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_field18, 29, 45, 11, _roomStates_field18, 45, 45, 0);
+			digi_play("801_s03", 2, 255, -1, -1);
+			break;
+
+		case 11:
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_field18, 46, 56, 1, _roomStates_field18, 56, 56, 0);
+			digi_stop(1);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (gearFl && player_said("root cellar ")) {
+	// Not the same as the previous one : there's one space instead of two at the end
+		switch (_G(kernel).trigger) {
+		case -1:
+			if (_roomStates_tt != 0) {
+				player_set_commands_allowed(false);
+				ws_hide_walker(_G(my_walker));
+				terminateMachine(_roomStates_fieldAAh);
+				_roomStates_ripTalking = series_load("RIP CLOSES CELLAR", -1, nullptr);
+				_roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip closes cellar");
+				sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_ripTalking, 1, 19, 10, _roomStates_ripTalking, 34, 34, 0);
+			}
+			break;
+		case 1:
+			_roomStates_tt = 0;
+			terminateMachine(_roomStates_field8Ah);
+			ws_unhide_walker(_G(my_walker));
+			digi_stop(1);
+			series_unload(_roomStates_ripTalking);
+			_roomStates_fieldA6h = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar  ", true);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+			hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
+			player_set_commands_allowed(true);
+			break;
+		case 10:
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_ripTalking, 20, 34, 1, _roomStates_ripTalking, 34, 34, 0);
+			digi_play("801_s04", 2, 255, -1, -1);
+			break;
+		default:
+			break;
+		}
 	}
 
+	else if ((gearFl || takeFl) && player_said("mei chen")) {
+		digi_play("com013", 1, 255, -1, 997);
+	}
+
+	else if (talkFl && player_said("farmer")) {
+		if (_G(flags)[V252] || _G(flags)[V253] || _G(flags)[V255]) {
+			ws_hide_walker(_G(my_walker));
+			player_set_commands_allowed(false);
+			_roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 167, 303, 49, 1280, 1, triggerMachineByHashCallbackNegative, "rip talking to farmer");
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop6, 1, 1, -1, _roomStates_loop6, 1, 1, 0);
+			_roomStates_field8Eh = series_show("SAFARI SHADOW 5", 1280, 144, -1, -1, 0, 48, 167, 303);
+			_roomStates_pu2 = 1;
+			_roomStates_ripTalker = 1;
+			_roomStates_untie2 = 1;
+			_roomStates_pu = 1;
+			_roomStates_ripTalker2 = 1;
+			_roomStates_field18 = 1;
+			_G(kernel).trigger_mode = KT_DAEMON;
+
+			kernel_timing_trigger(1, 300, nullptr);
+			kernel_timing_trigger(1, 200, nullptr);
+			kernel_timing_trigger(1, 400, nullptr);
+
+			_G(kernel).trigger_mode = KT_PARSE;
+			conv_load("conv801a", 10, 10, 747);
+			conv_set_shading(65);
+			conv_export_value(conv_get_handle(), _G(flags)[V252], 0);
+			conv_export_value(conv_get_handle(), _G(flags)[V255], 1);
+			conv_export_value(conv_get_handle(), _G(flags)[V253], 2);
+
+			conv_play(conv_get_handle());
+		} else {
+			digi_play("801r06", 1, 255, -1, -1);
+		}
+	}
+
+	else if (talkFl && player_said("mei chen")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_roomStates_loop6, 1, 4, 5, 7, 1, 4, 4, 4, 4, 1, 4, 1, 1, 1, 0, 4, 1, 1, 1, 0);
+			sendWSMessage_110000(_G(my_walker), 1);
+			break;
+		case 1:
+			switch (imath_ranged_rand(1, 4)) {
+			case 1:
+				digi_play("com034", 1, 255, 2, 997);
+				break;
+			case 2:
+				digi_play("com035", 1, 255, 2, 997);
+				break;
+			case 3:
+				digi_play("com036", 1, 255, 2, 997);
+				break;
+			case 4:
+				digi_play("com037", 1, 255, 2, 997);
+				break;
+			default:
+				break;
+			}
+			break;
+		case 2:
+			sendWSMessage_120000(_G(my_walker), 4);
+			break;
+		case 4:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 31, 40, 5, _roomStates_field78, 40, 40, 0);
+			break;
+		case 5:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 40, 41, 0, _roomStates_field78, 40, 41, 4);
+			switch (imath_ranged_rand(1, 3)) {
+			case 1:
+				digi_play("com039", 1, 255, 6, 997);
+				break;
+			case 2:
+				digi_play("com040", 1, 255, 6, 997);
+				break;
+			case 3:
+				digi_play("com041", 1, 255, 6, 997);
+				break;
+			default:
+				break;
+			}
+			break;
+		case 6:
+			sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 41, 31, 7, _roomStates_field78, 31, 31, 0);
+			sendWSMessage_130000(_G(my_walker), 0);
+			break;
+		case 7:
+			sendWSMessage_150000(_G(my_walker), 0);
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (gearFl && player_said("farmer")) {
+		digi_play("com017", 1, 255, -1, 997);
+	}
+
+	else if (takeFl && player_said("pottery")) {
+		if (_G(flags)[V251]) {
+			digi_play("801r25", 1, 255, -1, -1);
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				digi_play("801r25", 1, 255, 1, -1);
+				break;
+			case 1:
+				digi_play("801r25a", 1, 255, 2, -1);
+				break;
+			case 2:
+				player_set_commands_allowed(true);
+				_G(flags)[V251] = 1;
+			default:
+				break;
+			}
+		}
+	}
+
+	else if (goFl && player_said("root cellar")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_hide_walker(_G(my_walker));
+			_roomStates_field8Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip enters cellar");
+			sendWSMessage_10000(1, _roomStates_field8Ah, _roomStates_loop2, 1, 14, 5, _roomStates_loop2, 15, 19, 0);
+			break;
+		case 5:
+			disable_player_commands_and_fade_init(6);
+			break;
+		case 6:
+			terminateMachine(_roomStates_field8Ah);
+			ws_unhide_walker(_G(my_walker));
+			adv_kill_digi_between_rooms(false);
+			digi_play_loop("801_s02", 3, 35, -1, -1);
+			_G(game).new_room = 802;
+			break;
+		default:
+			break;
+		}
+	}
+
+	else if (takeFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
+		digi_play("801r26", 1, 255, -1, -1);
+	}
+
+	else if (player_said("journal") && !takeFl && !lookFl && !gearFl) {
+		digi_play("com042", 1, 255, -1, 997);
+	} else
+		return;
 
 	_G(player).command_ready = false;
 }
diff --git a/engines/m4/riddle/rooms/section8/room801.h b/engines/m4/riddle/rooms/section8/room801.h
index 3999bc1989e..c7ccf2a0acb 100644
--- a/engines/m4/riddle/rooms/section8/room801.h
+++ b/engines/m4/riddle/rooms/section8/room801.h
@@ -62,19 +62,26 @@ private:
 	int32 _roomStates_loop6 = 0;
 	int32 _roomStates_loop7 = 0;
 	int32 _roomStates_pu = 0;
+	int32 _roomStates_pu2 = 0;
 	int32 _roomStates_ripTalk = 0;
 	int32 _roomStates_ripTalker = 0;
+	int32 _roomStates_ripTalker2 = 0;
+	int32 _roomStates_ripTalking = 0;
 	int32 _roomStates_tt = 0;
+	int32 _roomStates_untie2 = 0;
 	int32 _roomStates_val1 = 0;
 	int32 _roomStates_val2 = 0;
 	int32 _roomStates_val3 = 0;
+	int32 _var1 = 0;
 
 	machine *_roomStates_field86h = nullptr;
+	machine *_roomStates_field8Ah = nullptr;
+	machine *_roomStates_field8Eh = nullptr;
 	machine *_roomStates_field96h = nullptr;
 	machine *_roomStates_field9Ah = nullptr;
-	machine *_roomStates_fieldA6h = nullptr;
 	machine *_roomStates_field9Eh = nullptr;
 	machine *_roomStates_fieldA2h = nullptr;
+	machine *_roomStates_fieldA6h = nullptr;
 	machine *_roomStates_fieldAAh = nullptr;
 };
 




More information about the Scummvm-git-logs mailing list