[Scummvm-git-logs] scummvm master -> 97b417b5913a213f6be29542c00dfbd1e0476966

Strangerke noreply at scummvm.org
Sat Oct 12 21:29:48 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:
97b417b591 M4: RIDDLE: Partial implementation of room 803 (no parser) - includes a change in riddle/walker.h


Commit: 97b417b5913a213f6be29542c00dfbd1e0476966
    https://github.com/scummvm/scummvm/commit/97b417b5913a213f6be29542c00dfbd1e0476966
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-12T23:28:01+01:00

Commit Message:
M4: RIDDLE: Partial implementation of room 803 (no parser) - includes a change in riddle/walker.h

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


diff --git a/engines/m4/riddle/rooms/section8/room803.cpp b/engines/m4/riddle/rooms/section8/room803.cpp
index 857d21773a7..d5ef87b4b7c 100644
--- a/engines/m4/riddle/rooms/section8/room803.cpp
+++ b/engines/m4/riddle/rooms/section8/room803.cpp
@@ -19,7 +19,7 @@
  *
  */
 
-#include "m4/riddle/rooms/section8/room803.h"
+#include "m4/riddle/rooms/section8/section8.h"
 #include "m4/graphics/gr_series.h"
 #include "m4/riddle/vars.h"
 
@@ -27,10 +27,277 @@ namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room803::preload() {
+	_G(player).walker_type = WALKER_ALT;
+	_G(player).shadow_type = SHADOW_ALT;
+	LoadWSAssets("other script", _G(master_palette));
+}
+
 void Room803::init() {
+	digi_preload("950_s29", -1);
+	_var1 = 0;
+
+	if (_G(flags)[V276])
+		hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
+	else
+		loadWalkSeries();
+
+	initWalker();
+	digi_play_loop("950_s29", 2, 127, -1, 950);
+}
+
+void Room803::parser() {
 }
 
 void Room803::daemon() {
+	int32 trigger = _G(kernel).trigger;
+
+	if ((trigger >= 1) && (trigger < 15))
+		daemonSub1();
+	else if (trigger == 15) {
+		sendWSMessage_150000(_mcWalkerMach, -1);
+		player_set_commands_allowed(true);
+	} else if (trigger == 16) {
+		sendWSMessage_150000(_G(my_walker), -1);
+	} else if (trigger == 33) {
+		sendWSMessage_150000(_G(my_walker), -1);
+		switch (imath_ranged_rand(1, 4)) {
+		case 1:
+			digi_play("COM048", 1, 255, 15, 997);
+			break;
+		case 2:
+			digi_play("COM049", 1, 255, 15, 997);
+			break;
+		case 3:
+			digi_play("COM050", 1, 255, 15, 997);
+			break;
+		case 4:
+			digi_play("COM051", 1, 255, 15, 997);
+			break;
+		default:
+			break;
+		}
+
+		_meiTalksPos3 = series_load("Mei talks pos3", -1, nullptr);
+		setGlobals1(_meiTalksPos3, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_mcWalkerMach, -1);
+	} else if ((trigger >= 50) && ((trigger <= 56) || (trigger == 999)))
+		daemonSub1();
+}
+
+void Rooms::Room803::initWalker() {
+	switch (_G(game).previous_room) {
+	case -2:
+		if (_G(flags)[V276] == 0) {
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 357, 175, 3, Walker::player_walker_callback, "mc");
+		}
+		break;
+
+	case 804:
+		ws_demand_location(_G(my_walker), 639, 260);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 639, 260, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 579, 260, nullptr, 50, 9, true);
+		} else {
+			ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+		}
+		break;
+
+	case 814:
+		ws_demand_location(_G(my_walker), 513, 192);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags)[V276] == 0) {
+			player_set_commands_allowed(false);
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 513, 192, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 463, 192, nullptr, 51, 9, true);
+		} else {
+			ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+		}
+		break;
+
+	case 824:
+		ws_demand_location(_G(my_walker), 570, 220);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags[V276]) == 0) {
+			player_set_commands_allowed(false);
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 570, 220, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 520, 220, nullptr, 52, 9, true);
+		} else {
+			ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+		}
+		break;
+
+	case 834:
+		ws_demand_location(_G(my_walker), 491, 174);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags[V276]) == 0) {
+			player_set_commands_allowed(false);
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 491, 174, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 441, 174, nullptr, 53, 9, true);
+		} else {
+			ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+		}
+		break;
+
+	case 844:
+		ws_demand_location(_G(my_walker), 475, 161);
+		ws_demand_facing(_G(my_walker), 9);
+		if (_G(flags[V276]) == 0) {
+			player_set_commands_allowed(false);
+			_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 475, 161, 3, Walker::player_walker_callback, "mc");
+			ws_walk(_G(my_walker), 425, 161, nullptr, 54, 9, true);
+		} else {
+			ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+		}
+		break;
+
+	default:
+		ws_demand_location(_G(my_walker), 202, 239);
+		ws_demand_facing(_G(my_walker), 7);
+		if (_G(flags[V276]) == 0) {
+			ws_hide_walker(_G(my_walker));
+			_meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 15, 2, 5, 0, 100, 0, 0, 0, 0);
+			kernel_timing_trigger(15, 1, nullptr);
+		}
+
+		break;
+	}
+
+	series_play("BRAZIERS 1-6 BURNING", 3840, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 8 BURNING", 2304, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 9 BURNING", 1792, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+	series_play("BRAZIER 10 BURNING", 1024, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+}
+
+void Room803::loadWalkSeries() {
+	ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2, false);
+	ws_walk_load_shadow_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1);
+}
+
+void Room803::daemonSub1() {
+	switch (_G(kernel).trigger) {
+	case 1:
+		player_set_commands_allowed(false);
+		terminateMachine(_meiStepOffPileMach);
+		_meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 15, 2, 5, 0, 100, 0, 0, 0, 56);
+		break;
+
+	case 2:
+		digi_play("803m01", 1, 255, 3, -1);
+		break;
+
+	case 3:
+		if (_meiStepOffPileMach != nullptr)
+			terminateMachine(_meiStepOffPileMach);
+
+		_meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 16, 4, 5, 0, 100, 0, 0, 56, 57);
+		break;
+
+	case 4:
+		if (_meiStepOffPileMach != nullptr)
+			terminateMachine(_meiStepOffPileMach);
+
+		_meiStepOffPile = series_load("MEI STEPS OFF PILE", -1, nullptr);
+		_meiStepOffPileMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip");
+		sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 57, 50, -1, _meiStepOffPile, 57, 60, 1);
+		digi_play("803r01", 1, 255, 5, -1);
+		break;
+
+	case 5:
+		sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 57, 57, -1, _meiStepOffPile, 57, 57, 0);
+		digi_play("803m02", 1, 255, 6, -1);
+		break;
+
+	case 6:
+		sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 61, 67, 7, _meiStepOffPile, 67, 67, 0);
+		digi_play("803r02", 1, 255, -1, -1);
+		break;
+
+	case 7:
+		sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 67, 57, 8, _meiStepOffPile, 57, 57, 0);
+		break;
+
+	case 8:
+		sendWSMessage_150000(_meiStepOffPileMach, -1);
+
+		if (_meiStepOffPileMach != nullptr) {
+			terminateMachine(_meiStepOffPileMach);
+			series_unload(_meiStepOffPile);
+		}
+
+		_ripStanderMach = series_play("RIP STANDER", 0, 16, -1, 5, 0, 100, 0, 0, 0, -1);
+		_meiLooksAboutMach = series_play("MEI LOOKS ABOUT", 0, 16, 9, 5, 0, 100, 0, 0, 0, 32);
+		break;
+
+	case 9:
+		digi_play("803m03", 1, 255, 10, -1);
+		break;
+
+	case 10:
+		sendWSMessage_150000(_meiLooksAboutMach, -1);
+		if (_meiLooksAboutMach != nullptr)
+			terminateMachine(_meiLooksAboutMach);
+
+		_ripTalkerPos5 = series_load("RIP TALKER POS 5", -1, nullptr);
+		ws_unhide_walker(_G(my_walker));
+		ws_demand_facing(_G(my_walker), 7);
+		setGlobals1(_ripTalkerPos5, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+		sendWSMessage_110000(_G(my_walker), -1);
+		digi_play("803r03", 1, 255, 11, -1);
+		_mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 186, 252, 1, Walker::player_walker_callback, "mc");
+		sendWSMessage_10000(_mcWalkerMach, 244, 252, 3, 12, 1);
+		if (_ripStanderMach != nullptr)
+			terminateMachine(_ripStanderMach);
+		break;
+
+	case 11:
+		sendWSMessage_150000(_G(my_walker), -1);
+		ws_unhide_walker(_G(my_walker));
+		break;
+
+	case 12:
+		sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 13, 1);
+		break;
+
+	case 13:
+	case 56:
+		player_set_commands_allowed(true);
+		break;
+
+	case 14:
+		// Nothing
+		break;
+
+	case 50:
+		ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+		ws_walk(_mcWalkerMach, 450, 260, nullptr, 55, 1, true);
+		break;
+
+	case 51:
+		ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+		ws_walk(_mcWalkerMach, 400, 191, nullptr, 55, 1, true);
+		break;
+
+	case 52:
+		ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+		ws_walk(_mcWalkerMach, 390, 220, nullptr, 55, 1, true);
+		break;
+
+	case 53:
+	case 54:
+		ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+		sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 55, 1);
+		break;
+
+	case 55:
+		sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 56, 1);
+		break;
+
+	default:
+		break;
+	}
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/room803.h b/engines/m4/riddle/rooms/section8/room803.h
index 3e92a89eebb..3d766690306 100644
--- a/engines/m4/riddle/rooms/section8/room803.h
+++ b/engines/m4/riddle/rooms/section8/room803.h
@@ -33,8 +33,25 @@ public:
 	Room803() : Room() {}
 	~Room803() override {}
 
+	void preload() override;
 	void init() override;
+	void parser() override;
 	void daemon() override;
+
+private:
+	int32 _meiStepOffPile = 0;
+	int32 _meiTalksPos3 = 0;
+	int32 _ripTalkerPos5 = 0;
+	int32 _var1 = 0;
+
+	machine *_mcWalkerMach = nullptr;
+	machine *_meiLooksAboutMach = nullptr;
+	machine *_meiStepOffPileMach = nullptr;
+	machine *_ripStanderMach = nullptr;
+
+	void initWalker();
+	void loadWalkSeries();
+	void daemonSub1();
 };
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/walker.h b/engines/m4/riddle/walker.h
index a9f33da2831..d5e6fbc3445 100644
--- a/engines/m4/riddle/walker.h
+++ b/engines/m4/riddle/walker.h
@@ -44,7 +44,8 @@ enum {
 };
 
 class Walker : public M4::Walker {
-private:
+	// Strangerke : I turned the callback from private to public as it's called by room 803. TODO: Check if it's correct, then update the description accordingly
+public:
 	/**
 	 * This is called when PLAYER walker code sends system message back to C (used by MAIN PLAYER WALKER ONLY)
 	 */




More information about the Scummvm-git-logs mailing list