[Scummvm-git-logs] scummvm master -> 77a589e1c8f4a36fe300f9fd09e1a6039ae39969

Strangerke noreply at scummvm.org
Thu Oct 17 22:51:38 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:
77a589e1c8 M4: RIDDLE: WIP implementation of room 805. Missing parser and some daemon sub functions


Commit: 77a589e1c8f4a36fe300f9fd09e1a6039ae39969
    https://github.com/scummvm/scummvm/commit/77a589e1c8f4a36fe300f9fd09e1a6039ae39969
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-18T00:50:34+01:00

Commit Message:
M4: RIDDLE: WIP implementation of room 805. Missing parser and some daemon sub functions

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 0fb456a58a0..11389008af9 100644
--- a/engines/m4/riddle/rooms/section8/room805.cpp
+++ b/engines/m4/riddle/rooms/section8/room805.cpp
@@ -20,17 +20,466 @@
  */
 
 #include "m4/riddle/rooms/section8/room805.h"
+
+#include "m4/adv_r/adv_file.h"
 #include "m4/graphics/gr_series.h"
+#include "m4/riddle/riddle.h"
 #include "m4/riddle/vars.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room805::initSub2() {
+	series_play("BRAZIER 1 (L TO R) BURNING", 768, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 2 (L TO R) BURNING", 1536, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 3 (L TO R) BURNING", 3840, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 4&5 (L TO R) BURNING", 2560, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 6 (L TO R) BURNING", 0, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+
+	initHotspots();
+
+	switch (_G(game).previous_room) {
+	case -2:
+		if (_G(flags)[V276] == 0) {
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 276, 201, 10, Walker::player_walker_callback, "mc");
+		}
+
+		break;
+
+	case 804:
+		ws_demand_location(_G(my_walker), 0, 264);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 0, 264, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 53, 264, nullptr, 102, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+		break;
+
+	case 806:
+		ws_demand_location(_G(my_walker), 395, 202);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 420, 201, 0, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 370, 201, nullptr, 109, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+		break;
+
+	case 814:
+		ws_demand_location(_G(my_walker), 119, 194);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 119, 194, 0, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 169, 194, nullptr, 103, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+
+		break;
+
+	case 824:
+		ws_demand_location(_G(my_walker), 61, 221);
+		if (_G(flags)[V276] == 0) {
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 61, 221, 0, Walker::player_walker_callback, "mc");
+		}
+
+		if (_G(flags)[V270] == 805 && _G(flags)[V262] == 0) {
+			ws_hide_walker(_G(my_walker));
+			player_set_commands_allowed(false);
+			digi_preload("950_s33", -1);
+			digi_play_loop("950_s33", 2, 255, -1, -1);
+			kernel_timing_trigger(1, 110, nullptr);
+		} else if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			ws_walk(_G(my_walker), 295, 305, nullptr, 104, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+
+		break;
+
+	case 834:
+		ws_demand_location(_G(my_walker), 156, 164);
+		if (_G(flags)[V276] == 0) {
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 156, 164, 3, Walker::player_walker_callback, "mc");
+			player_set_commands_allowed(false);
+			ws_walk(_G(my_walker), 206, 164, nullptr, 107, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+
+		break;
+
+	case 844:
+		ws_demand_location(_G(my_walker), 170, 154);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 170, 154, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 240, 154, nullptr, 108, 3, true);
+		} else {
+			ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		}
+
+		break;
+
+	default:
+		ws_demand_facing(_G(my_walker), 3);
+		ws_demand_location(_G(my_walker), 295, 305);
+		if (_G(flags)[V276] == 0) {
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 276, 201, 10, Walker::player_walker_callback, "mc");
+		}
+		break;
+	}
+}
+
+void Room805::initHotspots() {
+	if (inv_object_is_here("TWO SOLDIERS' SHIELDS")) {
+		_G(flags[V257]) = 0;
+		_G(flags[V258]) = 0;
+
+		hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD", true);
+		hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD ", true);
+	}
+
+	if (_G(flags)[V257] == 0)
+		_farSoldiersShieldMach = series_play("805 FAR SOLDIERS SHIELD", 2304, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+	else
+		hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD", false);
+
+	if (_G(flags)[V258] == 0)
+		_nearSoldiersShieldMach = series_play("805 NEAR SOLDIERS SHIELD", 1280, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+	else
+		hotspot_set_active(_G(currentSceneDef).hotspots, "SHIELD ", false);
+
+	if (inv_object_is_here("WOODEN POST"))
+		_fallenBeamOnFloorMach = series_play("805 FALLEN BEAM ON FLOOR", 0, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+	else
+		hotspot_set_active(_G(currentSceneDef).hotspots, "WOODEN POST", false);
+
+	if (_G(flags)[V272] == 1) {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "JADE DOOR", false);
+		_jadeDoorsOpenMach = series_play("805 JADE DOORS OPEN", 1280, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+		hotspot_set_active(_G(currentSceneDef).hotspots, "URN ", false);
+	} else
+		hotspot_set_active(_G(currentSceneDef).hotspots, "JADE DOOR ", false);
+
+	if (!player_been_here(805))
+		_G(flags)
+		[V262] = 0;
+
+	if (_G(flags)[V270] == 805 && _G(flags)[V262] == 1) {
+		_chariotRestMach = series_play("805 CHARIOT REST", 1280, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+		kernel_load_variant("805LOCK1");
+		hotspot_set_active(_G(currentSceneDef).hotspots, "CHARIOT", true);
+	} else {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "CHARIOT", false);
+	}
+
+	_unkVar1 = 0;
+}
+
+void Room805::daemonSub1() {
+	switch (_G(kernel).trigger) {
+	case 100:
+		player_set_commands_allowed(true);
+		_unkVar1 = 0;
+
+		break;
+
+	case 101:
+		sendWSMessage_10000(_mcMach, 276, 201, 10, 100, 1);
+		break;
+
+	case 102:
+	case 103:
+	case 108:
+		ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		ws_walk(_mcMach, 250, 201, nullptr, 101, 3, true);
+
+		break;
+
+	case 104:
+		sendWSMessage_10000(_mcMach, 185, 221, 1, 105, 1);
+		break;
+
+	case 105:
+		sendWSMessage_10000(_mcMach, 200, 201, 3, 101, 1);
+		break;
+
+	case 109:
+		ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		kernel_timing_trigger(1, 101, nullptr);
+
+		break;
+
+	case 111:
+		_unkVar1 = 1;
+		ws_unhide_walker(_G(my_walker));
+		ws_demand_facing(_G(my_walker), 3);
+		ws_demand_location(_G(my_walker), 240, 215);
+		digi_stop(1);
+		digi_stop(2);
+		digi_unload("950_s33");
+		_chariotRestMach = series_play("805 CHARIOT REST", 1280, 0, -1, 0, -1, 100, 0, 0, 0, -1);
+		_G(flags[V262]) = 1;
+		kernel_load_variant("805LOCK1");
+		hotspot_set_active(_G(currentSceneDef).hotspots, "CHARIOT", true);
+		ws_walk(_G(my_walker), 295, 305, nullptr, -1, 3, true);
+		if (_G(flags[V276]) == 0)
+			kernel_timing_trigger(10, 104, nullptr);
+		else
+			player_set_commands_allowed(true);
+
+		break; // case 111
+
+	default:
+		break;
+	}
+}
+
+void Room805::daemonSub2(const char *seriesName1, const char *seriesName2) {
+	switch (_G(kernel).trigger) {
+	case 30:
+		ws_turn_to_face(_G(my_walker), 3, -1);
+		ws_turn_to_face(_mcMach, 10, 31);
+
+		break;
+
+	case 31:
+		setGlobals1(_meiHandsBehindBack, 1, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_mcMach, 32);
+
+		break;
+
+	case 32:
+		sendWSMessage_150000(_mcMach, -1);
+		setGlobals1(_meiSpookedPos2, 1, 49, 49, 49, 0, 49, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_mcMach, 33);
+		if (strlen(seriesName1) != 0)
+			digi_play(seriesName1, 1, 255, -1, 997);
+
+		break;
+
+	case 33:
+		sendWSMessage_120000(_mcMach, -1);
+		setGlobals1(_ripPos3LookAround, 1, 19, 19, 19, 0, 19, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_G(my_walker), 34);
+
+		break;
+
+	case 34:
+		digi_play(seriesName2, 1, 255, 35, 997);
+		break;
+
+	case 35:
+		sendWSMessage_120000(_G(my_walker), 36);
+		break;
+
+	case 36:
+		sendWSMessage_150000(_G(my_walker), -1);
+		sendWSMessage_150000(_mcMach, -1);
+		sendWSMessage_140000(_G(my_walker), -1);
+		setGlobals1(_meiHandsBehindBack, 17, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_mcMach, 37);
+
+		break;
+
+	case 37:
+		sendWSMessage_150000(_mcMach, 38);
+		break;
+
+	case 38:
+		ws_turn_to_face(_mcMach, 10, -1);
+		player_set_commands_allowed(true);
+
+		break;
+
+	default:
+		break;
+	}
+
+}
+
+void Room805::daemonSub3(const char *seriesName1, const char *seriesName2) {
+	warning("STUB - Room805::daemonSub3");
+}
+
+void Room805::daemonSub4(const char *seriesName1, const char *seriesName2) {
+	warning("STUB - Room805::daemonSub4");
+}
+
+void Room805::preload() {
+	_G(player).walker_type = WALKER_ALT;
+	_G(player).shadow_type = SHADOW_ALT;
+	LoadWSAssets("other script", _G(master_palette));
+}
+
 void Room805::init() {
+	digi_preload("950_s29", -1);
+	_meiHandsBehindBack = series_load("MEI CHIEN HANDS BEHIND BACK", -1, nullptr);
+	_meiSpookedPos2 = series_load("MEI SPOOKED POS2", -1, nullptr);
+	_meiTalkPos3 = series_load("Mei talks pos3", -1, nullptr);
+	_ripPos3LookAround = series_load("RIP POS 3 LOOK AROUND", -1, nullptr);
+	_ripHeadTurnPos3 = series_load("RIP TREK HEAD TURN POS3", -1, nullptr);
+	_ripLookDownPos3 = series_load("RIP TREK LOOK DOWN POS3", -1, nullptr);
+	_ripLowReachPos2 = series_load("RIP TREK LOW REACH POS2", -1, nullptr);
+	_ripTalkerPos3 = series_load("RIP TREK TALKER POS3", -1, nullptr);
+	_ripMedHiReachPos2 = series_load("RIP MED HI REACH POS2", -1, nullptr);
+	_ripMedHiReachPos3 = series_load("RIP MED HI REACH POS3", -1, nullptr);
+
+	if (_G(flags)[V276] == 0) {
+		ws_walk_load_walker_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1, false);
+		ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2, false);
+	} else {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
+	}
+
+	if (!player_been_here(809) && _G(flags)[V276] == 0)
+		kernel_timing_trigger(29, imath_ranged_rand(3600, 7200));
+
+	initSub2();
+
+	digi_play_loop("950_s29", 3, 127, -1, 950);
+}
+
+void Room805::parser() {
+	warning("STUB - Room805::parser");
 }
 
 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 (player_been_here(809))
+				kernel_timing_trigger(imath_ranged_rand(3600, 7200), 29, nullptr);
+
+			player_set_commands_allowed(false);
+
+			_lastRnd = imath_ranged_rand(1, 4);
+			switch (_lastRnd) {
+			case 1:
+				digi_play("950_s15", 1, 255, 30, -1);
+				break;
+
+			case 2:
+				digi_play("950_s16", 1, 255, 30, -1);
+				break;
+
+			case 3:
+				digi_play("950_s17", 1, 255, 30, -1);
+				break;
+
+			default:
+				digi_play("950_s18", 1, 255, 30, -1);
+				break;
+			}
+		} else
+			kernel_timing_trigger(60, 39, nullptr);
+
+		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)
+			kernel_timing_trigger(1, 29, nullptr);
+		else
+			kernel_timing_trigger(60, 39, nullptr);
+
+		break; // case 39
+
+	case 55:
+		sendWSMessage_150000(_mcMach, -1);
+		player_set_commands_allowed(true);
+
+		break; // case 55
+
+	case 56:
+		sendWSMessage_150000(_mcMach, -1);
+
+		break; // case 56
+
+	case 63:
+		sendWSMessage_150000(_G(my_walker), -1);
+		switch (imath_ranged_rand(1, 4)) {
+		case 1:
+			digi_play("COM048", 1, 255, 55, 997);
+			break;
+
+		case 2:
+			digi_play("COM049", 1, 255, 55, 997);
+			break;
+
+		case 3:
+			digi_play("COM050", 1, 255, 55, 997);
+			break;
+
+		case 4:
+			digi_play("COM051", 1, 255, 55, 997);
+			break;
+
+		default:
+			break;
+		}
+		_unkVar1 = 0;
+		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);
+
+		break; // case 63
+
+	case 100:
+	case 101:
+	case 102:
+	case 103:
+	case 104:
+	case 105:
+	case 108:
+	case 109:
+	case 111:
+		daemonSub1();
+
+		break;
+
+	case 110:
+		digi_preload("950_s33", -1);
+		digi_play_loop("950_s33", 2, 255, -1, -1);
+		_ripChariotInMach = series_stream("805 RIP CHARIOT IN", 5, 1280, 111);
+		_G(flags[V262]) = 1;
+
+		break; // case 110
+
+	default:
+		if (_G(kernel).trigger > 29 && _G(kernel).trigger < 39) {
+			switch (_lastRnd) {
+			case 1:
+				daemonSub2("COM052", "COM053");
+
+				break;
+			case 2:
+				daemonSub3("COM054", "COM055");
+
+				break;
+			case 3:
+				daemonSub4("COM056", nullptr);
+
+				break;
+			case 4:
+				daemonSub2("COM057", "COM058");
+
+				break;
+			default:
+				break;
+			}
+		}
+
+		break;
+	}
+
+
+
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/room805.h b/engines/m4/riddle/rooms/section8/room805.h
index ab8822c0e1a..353e9c85de0 100644
--- a/engines/m4/riddle/rooms/section8/room805.h
+++ b/engines/m4/riddle/rooms/section8/room805.h
@@ -33,8 +33,39 @@ public:
 	Room805() : Room() {}
 	~Room805() override {}
 
+	void preload() override;
 	void init() override;
+	void parser() override;
 	void daemon() override;
+
+private:
+	int32 _lastRnd = 1;
+	int32 _meiHandsBehindBack = 0;
+	int32 _meiSpookedPos2 = 0;
+	int32 _meiTalkPos3 = 0;
+	int32 _ripPos3LookAround = 0;
+	int32 _ripHeadTurnPos3 = 0;
+	int32 _ripLookDownPos3 = 0;
+	int32 _ripLowReachPos2 = 0;
+	int32 _ripTalkerPos3 = 0;
+	int32 _ripMedHiReachPos2 = 0;
+	int32 _ripMedHiReachPos3 = 0;
+	int32 _unkVar1 = 0;
+
+	machine *_chariotRestMach = nullptr;
+	machine *_fallenBeamOnFloorMach = nullptr;
+	machine *_farSoldiersShieldMach = nullptr;
+	machine *_jadeDoorsOpenMach = nullptr;
+	machine *_mcMach = nullptr;
+	machine *_nearSoldiersShieldMach = nullptr;
+	machine *_ripChariotInMach = nullptr;
+
+	void initSub2();
+	void initHotspots();
+	void daemonSub1();
+	void daemonSub2(const char *seriesName1, const char *seriesName2);
+	void daemonSub3(const char *seriesName1, const char *seriesName2);
+	void daemonSub4(const char *seriesName1, const char *seriesName2);
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list