[Scummvm-git-logs] scummvm master -> 069bbc9fd709d14d3f06cdeb7a226679a43c2897

dreammaster noreply at scummvm.org
Sun Sep 15 00:01:50 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:
069bbc9fd7 M4: RIDDLE: Room 508 init and parser


Commit: 069bbc9fd709d14d3f06cdeb7a226679a43c2897
    https://github.com/scummvm/scummvm/commit/069bbc9fd709d14d3f06cdeb7a226679a43c2897
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-14T17:01:41-07:00

Commit Message:
M4: RIDDLE: Room 508 init and parser

Changed paths:
    engines/m4/riddle/rooms/section5/room508.cpp
    engines/m4/riddle/rooms/section5/room508.h


diff --git a/engines/m4/riddle/rooms/section5/room508.cpp b/engines/m4/riddle/rooms/section5/room508.cpp
index 358f134adeb..75e147dd94e 100644
--- a/engines/m4/riddle/rooms/section5/room508.cpp
+++ b/engines/m4/riddle/rooms/section5/room508.cpp
@@ -22,15 +22,289 @@
 #include "m4/riddle/rooms/section5/room508.h"
 #include "m4/graphics/gr_series.h"
 #include "m4/riddle/vars.h"
+#include "m4/adv_r/adv_file.h"
 
 namespace M4 {
 namespace Riddle {
 namespace Rooms {
 
 void Room508::init() {
+	hotspot_set_active("CRYSTAL SKULL ", false);
+	hotspot_set_active("SHOVEL", false);
+	hotspot_set_active("SHOVEL ", false);
+
+	if (inv_object_is_here("SHOVEL"))
+		kernel_load_variant("508lock1");
+
+	if (_G(flags)[V158] == 1) {
+		player_set_commands_allowed(false);
+		ws_hide_walker();
+		_ripReturnsToStander = series_load("RIP RETURNS TO STANDER");
+		_chainBreaking = series_load("508 CHAIN BREAKING");
+		_lightAppearing = series_load("LIGHT APPEARING ON FLOOR");
+
+		digi_preload("508_s02");
+		digi_preload("508_s04");
+		digi_preload("508_s08");
+
+		series_stream("RIP STOPS DOME TURNING", 7, 0x100, 525);
+		digi_play("508_S02", 1);
+		digi_play("508_S04", 2);
+
+	} else if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+		ws_demand_location(246, 265, 5);
+		ws_walk(256, 283, nullptr, 562, 5);
+	}
+
+	if (_G(flags)[V157] == 1) {
+		hotspot_set_active("CHAIN ", false);
+		_chainAfterBreak = series_place_sprite("508 CHAIN AFTER BREAK", 0, 0, 0, 100, 0xf00);
+		_domeAfterTurn = series_place_sprite("DOME SPRITE AFTER ITS TURNED", 0, 0, 0, 100, 0xf00);
+
+		if (inv_object_is_here("CRYSTAL SKULL")) {
+			hotspot_set_active("CRYSTAL SKULL ", true);
+			_skull = series_place_sprite("SKULL SPRITE AFTER DOME TURN", 0, 0, 0, 100, 0x450);
+		}
+
+		if (inv_object_is_here("SHOVEL")) {
+			hotspot_set_active("SHOVEL ", true);
+			_shovel = series_place_sprite("SHOVEL AFTER DOMES TURNED", 0, 0, 0, 100, 0x300);
+		}
+	}
+
+	if (!_G(flags)[V157]) {
+		if (_G(flags)[V158]) {
+			hotspot_set_active("CRYSTAL SKULL ", true);
+			_skull = series_place_sprite("SKULL SPRITE BEFORE DOME TURN", 0, 0, 0, 100, 0x450);
+		}
+
+		if (inv_object_is_here("SHOVEL")) {
+			hotspot_set_active("SHOVEL", true);
+			_shovel = series_place_sprite("SHOVEL SPRITE", 0, 0, 0, 100, 0x300);
+		}
+	}
+
+	digi_preload("508_s01");
+	digi_play_loop("508_s01", 3, 120);
+
+	if (_G(flags)[V158] == 1) {
+		digi_unload("506_s01");
+		digi_unload("506_s02");
+	}
+
+	if (_G(game).previous_room == 507)
+		digi_unload("507_s02");
 }
 
 void Room508::daemon() {
+
+}
+
+void Room508::pre_parser() {
+	if (player_said("SHOVEL") && player_said("HOLE IN CAPSTAN") &&
+		!_G(flags)[V157] && !inv_object_is_here("SHOVEL"))
+		_G(player).resetWalk();
+}
+
+void Room508::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said("gear");
+
+	if (lookFlag && player_said(" ")) {
+		if (_G(flags)[V162] == 1) {
+			digi_play("508R01", 1);
+		} else {
+			digi_play("508R01A", 1);
+			_G(flags)[V162] = 1;
+		}
+	} else if (lookFlag && player_said("DOMED CEILING")) {
+		digi_play("508R02", 1);
+	} else if (lookFlag && player_said("SLIT IN DOMED CEILING")) {
+		digi_play("508R03", 1);
+	} else if (lookFlag && player_said("SYMBOL ON WALL")) {
+		digi_play("508R04", 1);
+	} else if (lookFlag && player_said("SKELETON")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			player_set_commands_allowed(false);
+			ws_walk(317, 360, nullptr, 2, 1);
+			break;
+
+		case 2:
+			if (inv_player_has("CRYSTAL SKULL")) {
+				digi_play("508R05A", 1);
+			} else if (inv_object_is_here("CRYSTALL SKULL")) {
+				digi_play("508R05B", 1);
+			} else {
+				digi_play("508R05", 1);
+			}
+
+			player_set_commands_allowed(true);
+			break;
+
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said_any("CHAIN", "CHAIN ")) {
+		digi_play(_G(flags)[V157] ? "508R15" : "508R06", 1);
+	} else if (lookFlag && player_said("FLOOR")) {
+		digi_play("508R07", 1);
+	} else if (lookFlag && player_said("CAPSTAN")) {
+		digi_play("508R08", 1);
+	} else if (lookFlag && player_said("HOLE IN CAPSTAN")) {
+		digi_play("508R09", 1);
+	} else if (lookFlag && player_said("ORNAMENTATION ON WALL")) {
+		digi_play("508R10", 1);
+	} else if (player_said("Walk Through")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			player_set_commands_allowed(false);
+			ws_walk(237, 255, nullptr, -1, 11);
+			pal_fade_init(21, 255, 0, 30, 2);
+			break;
+
+		case 2:
+			_G(game).setRoom(506);
+			break;
+
+		default:
+			break;
+		}
+	} else if (player_said("SHOVEL") && player_said("HOLE IN CAPSTAN")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			ws_walk(423, 356, nullptr, 2, 1);
+			break;
+
+		case 2:
+			if (!_G(flags)[V157] && !inv_object_is_here("SHOVEL")) {
+				player_set_commands_allowed(false);
+				kernel_load_variant("508lock1");
+				_G(kernel).trigger_mode = KT_DAEMON;
+				ws_walk(423, 356, nullptr, 2, 1);
+			}
+			break;
+
+		default:
+			break;
+		}
+	} else if (takeFlag && player_said("SHOVEL") &&
+			inv_object_is_here("SHOVEL") && _G(kernel).trigger == -1) {
+		if (_G(flags)[V157] == 0 && inv_object_is_here("SHOVEL")) {
+			player_set_commands_allowed(false);
+			kernel_load_variant("508lock0");
+			_G(kernel).trigger_mode = KT_DAEMON;
+			kernel_timing_trigger(1, 508);
+		}
+
+		if (_G(flags)[V157] == 1) {
+			player_set_commands_allowed(false);
+			_val1 = 1;
+			_G(kernel).trigger_mode = KT_DAEMON;
+			kernel_timing_trigger(1, 511);
+		}
+	} else if (lookFlag && player_said_any("crystal skull", "crystal skull ") &&
+		inv_object_is_here("CRYSTAL SKULL")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			ws_walk(317, 360, nullptr, 2, 1);
+			break;
+
+		case 2:
+			digi_play("510r11", 1);
+			break;
+
+		default:
+			break;
+		}
+	} else if (lookFlag && player_said_any("shovel", "shovel ") &&
+			inv_object_is_here("SHOVEL")) {
+		digi_play("com106", 1);
+	} else if (takeFlag && player_said("SHOVEL ") && _G(kernel).trigger == -1) {
+		if (_G(flags)[V157] == 1) {
+			player_set_commands_allowed(false);
+			_val1 = 1;
+			_G(kernel).trigger_mode = KT_DAEMON;
+			kernel_timing_trigger(1, 511);
+		}
+	} else if (useFlag && player_said("SHOVEL") && inv_object_is_here("SHOVEL")) {
+		if (!_G(flags)[V157] && inv_object_is_here("SHOVEL") &&
+				!inv_object_is_here("CRYSTAL SKULL") && _G(kernel).trigger == -1) {
+			player_set_commands_allowed(false);
+			_G(kernel).trigger_mode = KT_DAEMON;
+			kernel_timing_trigger(1, 511);
+		}
+
+		if (!_G(flags)[V157] && inv_object_is_here("SHOVEL") &&
+				inv_object_is_here("CRYSTAL SKULL") && _G(kernel).trigger == -1) {
+			player_set_commands_allowed(false);
+			_G(kernel).trigger_mode = KT_DAEMON;
+			kernel_timing_trigger(1, 515);
+		}
+	} else if (player_said("CRYSTAL SKULL", "SKELETON")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			ws_walk(333, 290, nullptr, 2, 3);
+			break;
+
+		case 2:
+			player_set_commands_allowed(false);
+			hotspot_set_active("CRYSTAL SKULL ", true);
+			digi_play("508_s05", 1);
+
+			_skull = series_place_sprite("SKULL SPRITE AFTER DOME TURN", 0, 0, 0, 100, 0x450);
+			inv_move_object("CRYSTAL SKULL", 508);
+			ws_walk(317, 360, nullptr, 3, 1);
+			break;
+
+		case 3:
+			player_set_commands_allowed(true);
+			break;
+
+		default:
+			break;
+		}
+	} else if (takeFlag && player_said("CRYSTAL SKULL ")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+		case 666:
+			if (inv_object_is_here("CRYSTAL SKULL")) {
+				ws_walk(333, 290, nullptr, 2, 3);
+			}
+			break;
+
+		case 2:
+			player_set_commands_allowed(false);
+			hotspot_set_active("CRYSTAL SKULL ", false);
+			kernel_examine_inventory_object("PING CRYSTAL SKULL", 5, 1, 250, 170, 3, "508_s05", 7);
+			break;
+
+		case 3:
+			inv_give_to_player("CRYSTAL SKULL");
+			ws_walk(317, 360, nullptr, 4, 1);
+			break;
+
+		case 4:
+			player_set_commands_allowed(true);
+			break;
+
+		case 7:
+			terminateMachineAndNull(_skull);
+			break;
+
+		default:
+			break;
+		}
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section5/room508.h b/engines/m4/riddle/rooms/section5/room508.h
index 3e7ae38d695..56ed58ccadf 100644
--- a/engines/m4/riddle/rooms/section5/room508.h
+++ b/engines/m4/riddle/rooms/section5/room508.h
@@ -29,12 +29,24 @@ namespace Riddle {
 namespace Rooms {
 
 class Room508 : public Room {
+private:
+	int _val1 = 0;
+	int _ripReturnsToStander = 0;
+	int _chainBreaking = 0;
+	int _lightAppearing = 0;
+	machine *_chainAfterBreak = nullptr;
+	machine *_domeAfterTurn = nullptr;
+	machine *_skull = nullptr;
+	machine *_shovel = nullptr;
+
 public:
 	Room508() : Room() {}
 	~Room508() override {}
 
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms




More information about the Scummvm-git-logs mailing list