[Scummvm-git-logs] scummvm master -> 6b3fb0bf7747e3d1d481621de5bb5ee669ea0e67

Strangerke noreply at scummvm.org
Sat Oct 19 22:04:18 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:
6b3fb0bf77 M4: RIDDLE: WIP implementation of room 805. partial implementation of parser


Commit: 6b3fb0bf7747e3d1d481621de5bb5ee669ea0e67
    https://github.com/scummvm/scummvm/commit/6b3fb0bf7747e3d1d481621de5bb5ee669ea0e67
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-20T00:03:42+01:00

Commit Message:
M4: RIDDLE: WIP implementation of room 805. partial implementation of parser

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


diff --git a/engines/m4/riddle/rooms/section8/room805.cpp b/engines/m4/riddle/rooms/section8/room805.cpp
index e21b319d7ff..bd071733065 100644
--- a/engines/m4/riddle/rooms/section8/room805.cpp
+++ b/engines/m4/riddle/rooms/section8/room805.cpp
@@ -180,14 +180,14 @@ void Room805::initHotspots() {
 		hotspot_set_active(_G(currentSceneDef).hotspots, "CHARIOT", false);
 	}
 
-	_unkVar1 = 0;
+	_unkFlag1 = false;
 }
 
 void Room805::daemonSub1() {
 	switch (_G(kernel).trigger) {
 	case 100:
 		player_set_commands_allowed(true);
-		_unkVar1 = 0;
+		_unkFlag1 = false;
 
 		break;
 
@@ -218,7 +218,7 @@ void Room805::daemonSub1() {
 		break;
 
 	case 111:
-		_unkVar1 = 1;
+		_unkFlag1 = true;
 		ws_unhide_walker(_G(my_walker));
 		ws_demand_facing(_G(my_walker), 3);
 		ws_demand_location(_G(my_walker), 240, 215);
@@ -396,6 +396,14 @@ void Room805::daemonSub4(const char *seriesName1) {
 	}
 }
 
+void Room805::parserSub1(const char *name, uint channel, int32 vol, int32 trigger, int32 room_num) {
+	if (_G(kernel).trigger == -1) {
+		_unkFlag1 = true;
+		digi_play(name, channel, vol, trigger, room_num);
+	} else
+		_unkFlag1 = false;
+}
+
 void Room805::preload() {
 	_G(player).walker_type = WALKER_ALT;
 	_G(player).shadow_type = SHADOW_ALT;
@@ -431,13 +439,457 @@ void Room805::init() {
 }
 
 void Room805::parser() {
+	bool lookFl = player_said_any("look", "look at");
+	bool takeFl = player_said("take");
+	bool talkFl = player_said_any("talk", "talk to");
+	bool gearFl = player_said("gear");
+	bool goFl = player_said("go");
+
+	if (lookFl && player_said(" "))
+		parserSub1("805R01", 1, 255, 1, -1);
+
+	else if (lookFl && (player_said("JADE DOOR") || player_said("JADE DOOR ")))
+		parserSub1("805R02", 1, 255, 1, -1);
+
+	else if (lookFl && (player_said("URN") || player_said("URN ")))
+		parserSub1("COM060", 1, 255, 1, 997);
+
+	else if (lookFl && player_said("UNLIT URN"))
+		parserSub1("COM061", 1, 255, 1, 997);
+
+	else if (lookFl && player_said("SOLDIER")) {
+		if (_G(flags[V257]))
+			parserSub1("COM074", 1, 255, 1, -1);
+		else if (_G(flags[V258]))
+			parserSub1("805R10a", 1, 255, 1, -1);
+		else
+			parserSub1("805R10", 1, 255, 1, -1);
+	} // if (lookFl && player_said("SOLDIER"))
+
+	else if (lookFl && player_said("SOLDIER ")) {
+		if (_G(flags[V258]))
+			parserSub1("COM074", 1, 255, 1, -1);
+		else if (_G(flags[V257]))
+			parserSub1("805R10a", 1, 255, 1, -1);
+		else
+			parserSub1("805R10", 1, 255, 1, -1);
+	} // if (lookFl && player_said("SOLDIER "))
+
+	else if (lookFl && (player_said("SHIELD") || player_said("SHIELD ")))
+		parserSub1("805R11", 1, 255, 1, -1);
+
+	else if (lookFl && (player_said("MURAL") || player_said("BROKEN BEAM")))
+		parserSub1("805R12", 1, 255, 1, -1);
+
+	else if (lookFl && player_said("CHARIOT"))
+		parserSub1("805R13", 1, 255, 1, -1);
+
+	else if (lookFl && player_said("MEI CHEN"))
+		parserSub1("COM043", 1, 255, 1, 997);
+
+	else if (lookFl && player_said("WOODEN POST") && inv_object_is_here("WOODEN POST")) {
+		_unkFlag1 = true;
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_unkSeries1, 1, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+			sendWSMessage_110000(_G(my_walker), 10);
+			digi_stop(1);
+
+			break;
+
+		case 2:
+			player_set_commands_allowed(true);
+			_unkFlag1 = false;
+
+			break;
+
+		case 10:
+			sendWSMessage_140000(_G(my_walker), -1);
+			digi_play("805r07", 1, 255, 2, -1);
+
+			break;
+
+		default:
+			break;
+		}
+
+	} // if (lookFl && player_said("WOODEN POST") && inv_object_is_here("WOODEN POST"))
+
+	else if (lookFl && player_said("HOLE IN ROOF")) {
+		if (_G(flags[V261]) != 1 && _G(flags[V276]) == 0 && _G(flags[V256]) != 1) {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				ws_hide_walker(_G(my_walker));
+				_unkSeries4 = series_load("805 RIP LOOKS UP", -1, nullptr);
+				_ripSiftsDirtMach = series_play("805 RIP LOOKS UP", 256, 16, 2, 5, 0, 100, 0, 0, 0, 11);
+				digi_stop(1);
+
+				break;
+
+			case 2:
+				terminateMachine(_ripSiftsDirtMach);
+				_ripSiftsDirtMach = series_play("805 RIP LOOKS UP", 256, 18, 3, 5, 0, 100, 0, 0, 0, 11);
+
+				break;
+
+			case 3:
+				ws_unhide_walker(_G(my_walker));
+				terminateMachine(_ripSiftsDirtMach);
+				setGlobals1(_ripHeadTurnPos3, 1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_G(my_walker), -1);
+				digi_play("805R03", 1, 255, 4, -1);
+
+				break;
+
+			case 4:
+				series_unload(_unkSeries4);
+				sendWSMessage_140000(_G(my_walker), 5);
+				ws_turn_to_face(_mcMach, 4, -1);
+
+				break;
+
+			case 5:
+				ws_hide_walker(_G(my_walker));
+				_ripSiftsDirtSeries = series_load("RIP SIFTS DIRT WITH HAND", -1, nullptr);
+				_ripSiftsDirtMach = series_play("RIP SIFTS DIRT WITH HAND", 256, 16, 6, 5, 0, 100, 0, 0, 0, -1);
+				break;
+
+			case 6:
+				digi_play("805R04", 1, 255, 7, -1);
+
+				break;
+
+			case 7:
+				_meiTrekTalkerSeries = series_load("MEI TREK TALKER POS4", -1, nullptr);
+				setGlobals1(_meiTrekTalkerSeries, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_mcMach, -1);
+				digi_play("805M01", 1, 255, 8, -1);
+
+				break;
+
+			case 8:
+				sendWSMessage_140000(_mcMach, -1);
+				terminateMachine(_ripSiftsDirtMach);
+				_ripSiftsDirtMach = series_play("RIP SIFTS DIRT WITH HAND", 256, 18, 9, 5, 0, 100, 0, 0, 0, 25);
+
+				break;
+
+			case 9:
+				digi_play("805R05", 1, 255, 10, -1);
+
+				break;
+
+			case 10:
+				terminateMachine(_ripSiftsDirtMach);
+				ws_unhide_walker(_G(my_walker));
+				setGlobals1(_ripHeadTurnPos3, 6, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_G(my_walker), 12);
+
+				break;
+
+			case 12:
+				series_unload(_ripSiftsDirtSeries);
+				kernel_timing_trigger(15, 13, nullptr);
+
+				break;
+
+			case 13:
+				sendWSMessage_140000(_G(my_walker), 14);
+				break;
+
+			case 14:
+				setGlobals1(_ripHeadTurnPos3, 1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_G(my_walker), -1);
+				digi_play("805R05A", 1, 255, 16, -1);
+
+				break;
+
+			case 16:
+				ws_walk(_mcMach, 276, 201, nullptr, 100, 10, true);
+				sendWSMessage_140000(_G(my_walker), 17);
+				break;
+
+			case 17:
+				series_unload(_ripHeadTurnPos3);
+				series_unload(_meiTrekTalkerSeries);
+				_G(flags[V261]) = 1;
+				ws_walk(_mcMach, 276, 201, nullptr, 100, 10, true);
+				player_set_commands_allowed(true);
+				break;
+
+			default:
+				break;
+			}
+		} else if (_G(flags[V256]) == 1) {
+			parserSub1("805R06A", 1, 255, 1, -1);
+		} else {
+			parserSub1("805R06", 1, 255, 1, -1);
+		}
+	} // if (lookFl && player_said("HOLE IN ROOF")
+
+	else if (takeFl && (player_said("SOLDIER") || player_said("SOLDIER ")))
+		parserSub1("805R15", 1, 255, 1, -1);
+
+	else if (takeFl && (player_said("URN") || player_said("URN ")))
+		parserSub1("COM067", 1, 255, 1, 997);
+
+	else if (takeFl && player_said("UNLIT URN"))
+		parserSub1("COM068", 1, 255, 1, 997);
+
+	else if (takeFl && player_said("CHARIOT"))
+		parserSub1("805R36", 1, 255, 1, -1);
+
+	else if (takeFl && player_said("SHIELD")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_unkSeries5, 1, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+			sendWSMessage_110000(_G(my_walker), 10);
+			digi_stop(1);
+
+			break;
+
+		case 10:
+			if (_unkFlag1)
+				kernel_timing_trigger(5, 1, nullptr);
+			_G(flags[V257]) = 1;
+
+			if (_G(flags[V258]) == 0) {
+				kernel_examine_inventory_object("PING SOLDIER'S SHIELD", _G(master_palette), 5, 1, 310, 130, 20, nullptr, 1);
+				inv_give_to_player("SOLDIER'S SHIELD");
+				inv_put_thing_in("TWO SOLDIERS' SHIELDS", 999);
+			} else {
+				kernel_examine_inventory_object("PING SOLDIER'S SHIELD", _G(master_palette), 5, 1, 310, 130, 20, nullptr, 1);
+				inv_put_thing_in("SOLDIER'S SHIELD", 999);
+				inv_give_to_player("TWO SOLDIERS' SHIELDS");
+			}
+
+			terminateMachine(_farSoldiersShieldMach);
+
+			break;
+
+		case 20:
+			sendWSMessage_140000(_G(my_walker), 30);
+			break;
+
+		case 30:
+			hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD", false);
+			player_set_commands_allowed(true);
+			break;
+
+		default:
+			break;
+		}
+	} // if (takeFl && player_said("SHIELD"))
+
+	else if (takeFl && player_said("SHIELD ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			setGlobals1(_unkSeries6, 1, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+			sendWSMessage_110000(_G(my_walker), 10);
+			digi_stop(1);
+
+			break;
+
+		case 10:
+			if (_unkFlag1)
+				kernel_timing_trigger(5, 1, nullptr);
+			_G(flags[V258]) = 1;
+
+			if (_G(flags[V257]) == 0) {
+				kernel_examine_inventory_object("PING SOLDIER'S SHIELD", _G(master_palette), 5, 1, 330, 170, 20, nullptr, 1);
+				inv_give_to_player("SOLDIER'S SHIELD");
+				inv_put_thing_in("TWO SOLDIERS' SHIELDS", 999);
+			} else {
+				kernel_examine_inventory_object("PING SOLDIER'S SHIELD", _G(master_palette), 5, 1, 330, 170, 20, nullptr, 1);
+				inv_put_thing_in("SOLDIER'S SHIELD", 999);
+				inv_give_to_player("TWO SOLDIERS' SHIELDS");
+			}
+
+			terminateMachine(_nearSoldiersShieldMach);
+
+			break;
+
+		case 20:
+			sendWSMessage_140000(_G(my_walker), 30);
+			break;
+
+		case 30:
+			hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD ", false);
+			player_set_commands_allowed(true);
+
+			break;
+
+		default:
+			break;
+		}
+	} // if (takeFl && player_said("SHIELD "))
+
+	else if (takeFl && player_said("WOODEN POST")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			ws_demand_facing(_G(my_walker), 2);
+			if (inv_object_is_here("WOODEN POST")) {
+				player_set_commands_allowed(false);
+				player_update_info(_G(my_walker), &_G(player_info));
+				player_set_commands_allowed(false);
+				setGlobals1(_unkSeries7, 1, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+				sendWSMessage_110000(_G(my_walker), 10);
+			}
+
+			digi_stop(1);
+
+			break;
+
+		case 10:
+			inv_give_to_player("WOODEN POST");
+			_unkFlag1 = true;
+			kernel_examine_inventory_object("PING WOODEN POST", _G(master_palette), 5, 1, 386, 279, 20, nullptr, -1);
+			terminateMachine(_fallenBeamOnFloorMach);
+
+			break;
+
+		case 20:
+			sendWSMessage_140000(_G(my_walker), 30);
+			break;
+
+		case 30:
+			_unkFlag1 = false;
+			hotspot_set_active(_G(currentSceneDef).hotspots, "WOODEN POST", false);
+			player_set_commands_allowed(true);
+
+			break;
+
+		default:
+			break;
+		}
+	} // if (takeFl && player_said("WOODEN POST"))
+
+	else if (takeFl && _unkFlag1) {
+		switch (imath_ranged_rand(1, 6)) {
+		case 1:
+			parserSub1("COM006", 1, 255, 1, 997);
+			break;
+
+		case 2:
+			parserSub1("COM007", 1, 255, 1, 997);
+			break;
+
+		case 3:
+			parserSub1("COM008", 1, 255, 1, 997);
+			break;
+
+		case 4:
+			parserSub1("COM009", 1, 255, 1, 997);
+			break;
+
+		case 5:
+			parserSub1("COM010", 1, 255, 1, 997);
+			break;
+
+		case 6:
+			parserSub1("COM011", 1, 255, 1, 997);
+			break;
+
+		default:
+			break;
+		}
+	} // if (takeFl && _unkFlag1)
+
+	else if (talkFl && player_said("MEI CHEN")) {
+		player_set_commands_allowed(false);
+		_G(kernel.trigger_mode) = KT_DAEMON;
+		switch (imath_ranged_rand(1, 4)) {
+		case 1:
+			digi_play("COM044", 1, 255, 63, 997);
+			break;
+
+		case 2:
+			digi_play("COM045", 1, 255, 63, 997);
+			break;
+
+		case 3:
+			digi_play("COM046", 1, 255, 63, 997);
+			break;
+
+		case 4:
+			digi_play("COM047", 1, 255, 63, 997);
+			break;
+
+		default:
+			break;
+		}
+
+		ws_demand_facing(_G(my_walker), 3);
+		setGlobals1(_unkSeries8, 1, 5, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_G(my_walker), -1);
+	} // if (talkFl && player_said("MEI CHEN"))
+
+	else if (player_said("go", "jade door"))
+		parserSub1("805r34", 1, 255, 1, -1);
+
+	else if (gearFl && (player_said("JADE DOOR") || player_said("JADE DOOR ")) && (_G(flags[V271]) == 1))
+		parserSub1("805R18", 1, 255, 1, -1);
+
+	else if (gearFl && (player_said("JADE DOOR") || player_said("JADE DOOR ")) && (_G(flags[V272]) == 1))
+		parserSub1("805R19", 1, 255, 1, -1);
+
+	else if (gearFl && player_said("CHARIOT")) {
+		if (_G(flags[V272])!= 1) {
+			parserSub1("805R20", 1, 255, 1, -1);
+		} else {
+			switch (_G(kernel).trigger) {
+			case -1:
+				player_set_commands_allowed(false);
+				ws_hide_walker(_G(my_walker));
+				terminateMachine(_chariotRestMach);
+				digi_preload("950_s33", -1);
+				_ripSiftsDirtMach = series_stream("805rp04a", 5, 0, -1);
+				series_stream_break_on_frame(_ripSiftsDirtMach, 15, 7);
+				digi_stop(1);
+
+				break;
+
+			case 2:
+				adv_kill_digi_between_rooms(false);
+				digi_play_loop("950_s29", 3, 180, -1, 950);
+				digi_play_loop("950_s33", 2, 255, -1, -1);
+				_G(flags[V270]) = 806;
+				_G(flags[V262]) = 0;
+				_G(game).new_room = 806;
+
+				break;
+
+			case 7:
+				series_stream_break_on_frame(_ripSiftsDirtMach, 50, 10);
+				digi_play_loop("950_s33", 2, 255, -1, -1);
+
+				break;
+
+			case 10:
+				disable_player_commands_and_fade_init(2);
+				break;
+
+			default:
+				break;
+
+			}
+		}
+	} // if (gearFl && player_said("CHARIOT"))
+
 	warning("STUB - Room805::parser");
+
+	_G(player).command_ready = false;
+
 }
 
 void Room805::daemon() {
 	switch (_G(kernel).trigger) {
 	case 29:
-		if (_unkVar1 == 0 && player_commands_allowed() && !_G(player).need_to_walk && !_G(player).ready_to_walk && !_G(player).waiting_for_walk) {
+		if (!_unkFlag1 && player_commands_allowed() && !_G(player).need_to_walk && !_G(player).ready_to_walk && !_G(player).waiting_for_walk) {
 			if (player_been_here(809))
 				kernel_timing_trigger(imath_ranged_rand(3600, 7200), 29, nullptr);
 
@@ -467,7 +919,7 @@ void Room805::daemon() {
 		break; // case 29
 
 	case 39:
-		if (_unkVar1 == 0 && player_commands_allowed() && !_G(player).need_to_walk && !_G(player).ready_to_walk && !_G(player).waiting_for_walk)
+		if (!_unkFlag1 && player_commands_allowed() && !_G(player).need_to_walk && !_G(player).ready_to_walk && !_G(player).waiting_for_walk)
 			kernel_timing_trigger(1, 29, nullptr);
 		else
 			kernel_timing_trigger(60, 39, nullptr);
@@ -507,7 +959,7 @@ void Room805::daemon() {
 		default:
 			break;
 		}
-		_unkVar1 = 0;
+		_unkFlag1 = false;
 		setGlobals1(_meiTalkPos3, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 		sendWSMessage_110000(_mcMach, -1);
 
@@ -560,9 +1012,6 @@ void Room805::daemon() {
 
 		break;
 	}
-
-
-
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/room805.h b/engines/m4/riddle/rooms/section8/room805.h
index ef5ad948bc5..7fef2b9a8f8 100644
--- a/engines/m4/riddle/rooms/section8/room805.h
+++ b/engines/m4/riddle/rooms/section8/room805.h
@@ -43,14 +43,24 @@ private:
 	int32 _meiHandsBehindBack = 0;
 	int32 _meiSpookedPos2 = 0;
 	int32 _meiTalkPos3 = 0;
+	int32 _meiTrekTalkerSeries = 0;
 	int32 _ripPos3LookAround = 0;
 	int32 _ripHeadTurnPos3 = 0;
 	int32 _ripLookDownPos3 = 0;
 	int32 _ripLowReachPos2 = 0;
+	int32 _ripSiftsDirtSeries = 0;
 	int32 _ripTalkerPos3 = 0;
 	int32 _ripMedHiReachPos2 = 0;
 	int32 _ripMedHiReachPos3 = 0;
-	int32 _unkVar1 = 0;
+
+	int32 _unkSeries1 = 0;
+	int32 _unkSeries4 = 0;
+	int32 _unkSeries5 = 0;
+	int32 _unkSeries6 = 0;
+	int32 _unkSeries7 = 0;
+	int32 _unkSeries8 = 0;
+
+	bool _unkFlag1 = false;
 
 	machine *_chariotRestMach = nullptr;
 	machine *_fallenBeamOnFloorMach = nullptr;
@@ -59,6 +69,7 @@ private:
 	machine *_mcMach = nullptr;
 	machine *_nearSoldiersShieldMach = nullptr;
 	machine *_ripChariotInMach = nullptr;
+	machine *_ripSiftsDirtMach = nullptr;
 
 	void initSub2();
 	void initHotspots();
@@ -66,6 +77,7 @@ private:
 	void daemonSub2(const char *seriesName1, const char *seriesName2);
 	void daemonSub3(const char *seriesName1, const char *seriesName2);
 	void daemonSub4(const char *seriesName1);
+	void parserSub1(const char *name, uint channel, int32 vol, int32 trigger, int32 room_num);
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list