[Scummvm-git-logs] scummvm master -> 2ec1f9051a1714087cffc1ea23db7a2b70aadafa

Strangerke noreply at scummvm.org
Thu Nov 7 06:58:53 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:
2ec1f9051a M4: Riddle: Partial implementation of room 204 (preload, init)


Commit: 2ec1f9051a1714087cffc1ea23db7a2b70aadafa
    https://github.com/scummvm/scummvm/commit/2ec1f9051a1714087cffc1ea23db7a2b70aadafa
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-11-07T07:58:32+01:00

Commit Message:
M4: Riddle: Partial implementation of room 204 (preload, init)

Changed paths:
    engines/m4/riddle/rooms/section2/room204.cpp
    engines/m4/riddle/rooms/section2/room204.h


diff --git a/engines/m4/riddle/rooms/section2/room204.cpp b/engines/m4/riddle/rooms/section2/room204.cpp
index bdfd2f6f5e3..3f99ef716a3 100644
--- a/engines/m4/riddle/rooms/section2/room204.cpp
+++ b/engines/m4/riddle/rooms/section2/room204.cpp
@@ -20,19 +20,199 @@
  */
 
 #include "m4/riddle/rooms/section2/room204.h"
+#include "m4/riddle/rooms/section2/section2.h"
 #include "m4/graphics/gr_series.h"
+#include "m4/gui/gui_vmng.h"
+#include "m4/gui/gui_vmng_screen.h"
+#include "m4/riddle/riddle.h"
 #include "m4/riddle/vars.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
+void Room204::preload() {
+	_G(player).walker_type = WALKER_ALT;
+	_G(player).shadow_type = SHADOW_ALT;
+	LoadWSAssets("OTHER SCRIPT", _G(master_palette));
+}
+
 void Room204::init() {
+	digi_preload("950_s04", -1);
+	digi_play_loop("950_s04", 3, 70, -1, -1);
+	if (!_G(flags[V070]))
+		_G(flags[V078]) = 0;
+
+	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+		_field4 = 0;
+		_field180 = 0;
+		_field184 = 0;
+		_field188 = 0;
+
+		if (!player_been_here(205) && (!_G(flags[V056]) || _G(flags[V049]) == 1)) {
+			_field4 = 1;
+			initWalkerSeries();
+			_G(flags[V049]) = 0;
+		}
+	}
+
+	_courtyardGongSeries = series_load("COURTYARD GONG", -1, nullptr);
+	_malletSpriteSeries = series_load("MALLET SPRITE", -1, nullptr);
+	_field68 = 0;
+	_field44 = -1;
+	_field48 = -1;
+	_fieldC4 = -1;
+	_fieldBC = -1;
+	_fieldEC = -1;
+	_fieldF0 = -1;
+	_field104 = 0;
+	_field108 = 0;
+
+	if (inv_object_is_here("SILVER BUTTERFLY")) {
+		_silverButterflyCoinMach = series_place_sprite("SILVER BUTTERFLY COIN", 0, 1280, 0, 100, 3840);
+	} else {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "silver butterfly", false);
+	}
+
+	if (inv_object_is_here("GONG")) {
+		_courtyardGongMach = series_place_sprite("COURTYARD GONG", 0, 0, 0, 100, 2457);
+	} else {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "gong", false);
+	}
+
+	if (inv_object_is_here("MALLET")) {
+		_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
+	} else {
+		hotspot_set_active(_G(currentSceneDef).hotspots, "mallet", false);
+	}
+
+	if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
+		if (player_been_here(205)) {
+			hotspot_set_active(_G(currentSceneDef).hotspots, "acolyte", false);
+			_G(camera_reacts_to_player) = false;
+		} else {
+			kernel_timing_trigger(1, 578, nullptr);
+			if (_field4 == 1) {
+				initWalkerSeries();
+
+				_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, _fieldE0, 323, (_fieldDC == 1) ? 10 : 2, Walker::player_walker_callback, "mc walker room 204");
+				sub216B2();
+				if (_fieldE0 == 472) {
+					sub1F6AF();
+					sub1F641();
+				}
+
+				kernel_timing_trigger(1, 630, nullptr);
+			}
+		}
+	} else if (_G(game).previous_room == 205) {
+		player_set_commands_allowed(false);
+		_G(camera_reacts_to_player) = false;
+		hotspot_set_active(_G(currentSceneDef).hotspots, "acolyte", false);
+		ws_demand_location(_G(my_walker), 421, 330);
+		ws_demand_facing(_G(my_walker), 3);
+		ws_hide_walker(_G(my_walker));
+		series_play("204 leap down", 3840, 0, 15, 5, 0, 100, 0, 0, 0, -1);
+	} else if (keyCheck() && !player_been_here(205)) {
+		_G(camera_reacts_to_player) = false;
+		player_set_commands_allowed(false);
+		ws_demand_location(_G(my_walker), 600, 334);
+		ws_demand_facing(_G(my_walker), 9);
+		sendWSMessage_10000(_G(my_walker), 424, 331, 9, 9, true);
+		_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 620, 340, 9, Walker::player_walker_callback, "mc");
+		sendWSMessage_10000(_mcMach, 450, 340, 9, -1, true);
+		kernel_timing_trigger(60, 5, nullptr);
+	} else {
+		_fieldDC = 0;
+		_field40 = 0;
+		player_set_commands_allowed(false);
+		if (!_G(flags[V070])) {
+			digi_preload("204_S02", -1);
+			_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 1864, 334, 9, Walker::player_walker_callback, "mc walker room 204");
+			DisposePath(_mcMach->walkPath);
+			_ripDropsSeries = series_load("RIP DROPS", -1, nullptr);
+			player_set_commands_allowed(false);
+			ws_demand_location(_G(my_walker), 1864, 334);
+			ws_demand_facing(_G(my_walker), 3);
+
+			_G(flags[V070]) = 1;
+			_G(flags[V068]) = 1;
+			_G(flags[V078]) = 1;
+
+			int32 status;
+			ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
+			MoveScreenDelta(game_buff_ptr, -1280, 0);
+			kernel_timing_trigger(1, 500, nullptr);
+		} else {
+			_G(flags[V068]) = 1;
+			if (!_field4) {
+				ws_demand_location(_G(my_walker), 1864, 334);
+				ws_demand_facing(_G(my_walker), 9);
+				int32 status;
+				ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
+				MoveScreenDelta(game_buff_ptr, -1280, 0);
+				kernel_timing_trigger(1, 708, nullptr);
+			} else if (_G(flags[V049]) == 1) {
+				_G(flags[V049]) = 0;
+				_G(flags[V078]) = 2;
+				ws_demand_location(_G(my_walker), 1864, 334);
+				ws_demand_facing(_G(my_walker), 9);
+				_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 1864, 334, 4, Walker::player_walker_callback, "mc walker room 204");
+				kernel_timing_trigger(1, 536, nullptr);
+				int32 status;
+				ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
+				MoveScreenDelta(game_buff_ptr, -1280, 0);
+			} else {
+				ws_demand_location(_G(my_walker), 1864, 334);
+				ws_demand_facing(_G(my_walker), 9);
+				int32 status;
+				ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
+				MoveScreenDelta(game_buff_ptr, -1280, 0);
+				kernel_timing_trigger(1, 708, nullptr);
+				switch (imath_ranged_rand(1, 4)) {
+				case 1:
+					_fieldE4 = 1663;
+					break;
+
+				case 2:
+					_fieldE4 = 1576;
+					break;
+
+				case 3:
+					_fieldE4 = 1494;
+					break;
+
+				case 4:
+					_fieldE4 = 1412;
+					break;
+
+				default:
+					break;
+				}
+
+				_mcMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, _fieldE4, 323, 2, Walker::player_walker_callback, "mc walker room 204");
+				sub216B2();
+				kernel_timing_trigger(1, 630, nullptr);
+				kernel_timing_trigger(1, 578, nullptr);
+			}
+		}
+	}
+}
+
+void Room204::pre_parser() {
+}
+
+void Room204::parser() {
 }
 
 void Room204::daemon() {
 }
 
+void Room204::initWalkerSeries() {
+	ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2, false);
+	ws_walk_load_walker_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1, false);
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section2/room204.h b/engines/m4/riddle/rooms/section2/room204.h
index 6152073cc1a..62988c6bc6c 100644
--- a/engines/m4/riddle/rooms/section2/room204.h
+++ b/engines/m4/riddle/rooms/section2/room204.h
@@ -22,19 +22,55 @@
 #ifndef M4_RIDDLE_ROOMS_SECTION2_ROOM204_H
 #define M4_RIDDLE_ROOMS_SECTION2_ROOM204_H
 
-#include "m4/riddle/rooms/room.h"
+#include "m4/riddle/rooms/section2/section2_room.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
-class Room204 : public Room {
+class Room204 : public Section2Room {
 public:
-	Room204() : Room() {}
+	Room204() : Section2Room() {}
 	~Room204() override {}
 
+	void preload() override;
 	void init() override;
+	void pre_parser() override;
+	void parser() override;
 	void daemon() override;
+
+private:
+	void initWalkerSeries();
+	void sub216B2();
+	void sub1F6AF();
+	void sub1F641();
+
+	int32 _field4 = 0;
+	int32 _field40 = 0;
+	int32 _field44 = 0;
+	int32 _field48 = 0;
+	int32 _field68 = 0;
+	int32 _fieldBC = 0;
+	int32 _fieldC4 = 0;
+	int32 _fieldDC = 0;
+	int32 _fieldE0 = 0;
+	int32 _fieldE4 = 0;
+	int32 _fieldEC = 0;
+	int32 _fieldF0 = 0;
+	int32 _field104 = 0;
+	int32 _field108 = 0;
+	int32 _field180 = 0;
+	int32 _field184 = 0;
+	int32 _field188 = 0;
+
+	int32 _courtyardGongSeries = 0;
+	int32 _malletSpriteSeries = 0;
+	int32 _ripDropsSeries = 0;
+
+	machine *_courtyardGongMach = nullptr;
+	machine *_mcMach = nullptr;
+	machine *_malletSpriteMach = nullptr;
+	machine *_silverButterflyCoinMach = nullptr;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list