[Scummvm-git-logs] scummvm master -> d37cb8ff6b70a8a7cb0ca06317738515d635650b

dreammaster noreply at scummvm.org
Mon Sep 16 01:22:18 UTC 2024


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7ad90f64fa M4: RIDDLE: Added room 509
d37cb8ff6b M4: RIDDLE: Room 510 init and pre-parser


Commit: 7ad90f64faaa225c23345156c8e7a174cf535c65
    https://github.com/scummvm/scummvm/commit/7ad90f64faaa225c23345156c8e7a174cf535c65
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-15T18:22:12-07:00

Commit Message:
M4: RIDDLE: Added room 509

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


diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index be04d1bff52..e37e483f1ae 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -383,6 +383,18 @@ void Room::sendWSMessage_160000(int val1, int trigger) {
 	sendWSMessage_160000(_G(my_walker), val1, trigger);
 }
 
+void Room::sendWSMessage_180000(machine *recv, int trigger) {
+	if (!trigger)
+		trigger = -1;
+	_G(globals)[V023] = kernel_trigger_create(trigger);
+
+	sendWSMessage(0x180000, 0, recv, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_180000(int trigger) {
+	sendWSMessage_180000(_G(my_walker), trigger);
+}
+
 void Room::sendWSMessage_190000(machine *recv, int trigger) {
 	_G(globals)[V023] = trigger << 16;
 	sendWSMessage(0x190000, 0, recv, 0, nullptr, 1);
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index c7ea5905232..fadd6285d01 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -97,6 +97,8 @@ protected:
 	void sendWSMessage_150000(int trigger);
 	void sendWSMessage_160000(machine *mach, int val1, int trigger);
 	void sendWSMessage_160000(int val1, int trigger);
+	void sendWSMessage_180000(machine *recv, int trigger);
+	void sendWSMessage_180000(int trigger);
 	void sendWSMessage_190000(machine *recv, int trigger);
 	void sendWSMessage_190000(int trigger);
 	void sendWSMessage_1a0000(machine *recv, int trigger);
diff --git a/engines/m4/riddle/rooms/section5/room509.cpp b/engines/m4/riddle/rooms/section5/room509.cpp
index 7e65812549b..5aee12020da 100644
--- a/engines/m4/riddle/rooms/section5/room509.cpp
+++ b/engines/m4/riddle/rooms/section5/room509.cpp
@@ -28,9 +28,215 @@ namespace Riddle {
 namespace Rooms {
 
 void Room509::init() {
+	_roomNum = -1;
+	_ripDigsWall = series_load("RIP DIGS AT WALL");
+	_ripFrom506 = series_load("RIP CLIMBS STEPS FROM 506");
+	_ripFrom510 = series_load("RIP DOWN FROM 510");
+	_ripClimbStairs1 = series_load("RIP CLIMBS STAIRS 1");
+	_ripClimbStairs3 = series_load("RIP CLIMBS STAIRS 3");
+	_ripMedHighReacher = series_load("RIP MED HIGH REACHER POS2");
+	digi_play_loop("509_s01", 3, 140);
+
+	switch (_G(game).previous_room) {
+	case KERNEL_RESTORING_GAME:
+		_flag1 = false;
+		break;
+
+	case 510:
+		player_set_commands_allowed(false);
+		ws_demand_location(289, 261, 6);
+		kernel_timing_trigger(1, 3);
+		break;
+
+	default:
+		player_set_commands_allowed(false);
+		ws_demand_location(342, 320, 2);
+		kernel_timing_trigger(1, 2);
+		_flag1 = !player_been_here(509);
+		break;
+	}
 }
 
 void Room509::daemon() {
+	switch (_G(kernel).trigger) {
+	case 1:
+		player_set_commands_allowed(true);
+		break;
+
+	case 2:
+		ws_hide_walker();
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "Rip climbs steps from 506");
+		sendWSMessage_10000(1, _ripley, _ripFrom506, 1, 39, 6,
+			_ripFrom506, 40, 40, 0);
+		break;
+
+	case 3:
+		ws_hide_walker();
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "Rip climbs steps from 506");
+		sendWSMessage_10000(1, _ripley, _ripFrom510, 1, 15, 7,
+			_ripFrom510, 16, 16, 0);
+		break;
+
+	case 5:
+		digi_play("509_s02", 1);
+		break;
+
+	case 6:
+		terminateMachineAndNull(_ripley);
+		ws_unhide_walker();
+
+		if (_flag1)
+			digi_play("509R01", 1, 255, 1);
+		else
+			player_set_commands_allowed(true);
+		break;
+
+	case 7:
+		terminateMachineAndNull(_ripley);
+		ws_unhide_walker();
+		player_set_commands_allowed(true);
+		break;
+
+	case 8:
+		sendWSMessage_10000(1, _ripley, _ripDigsWall, 34, 2, 7,
+			_ripDigsWall, 1, 1, 0);
+		break;
+
+	case 9:
+		adv_kill_digi_between_rooms(false);
+		digi_play_loop("509_s01", 3, 170);
+
+		switch (_roomNum) {
+		case 506:
+		case 510:
+			_G(game).setRoom(_roomNum);
+			break;
+		default:
+			break;
+		}
+		break;
+
+	default:
+		break;
+	}
+}
+
+void Room509::pre_parser() {
+	if (player_said("gear", "hutch"))
+		_G(player).resetWalk();
+}
+
+void Room509::parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said("gear");
+
+	if (lookFlag && player_said("wall")) {
+		digi_play("509R03", 1);
+	} else if (lookFlag && player_said("hutch")) {
+		digi_play(inv_player_has("CRYSTAL SKULL") ? "509R04A" : "509R04", 1);
+	} else if (lookFlag && player_said("stairs up")) {
+		digi_play("509R05", 1);
+	} else if (lookFlag && player_said("stairs down")) {
+		digi_play("509R06", 1);
+	} else if (lookFlag && player_said(" ")) {
+		digi_play("509R02", 1);
+	} else if (lookFlag && player_said("  ")) {
+		digi_play(_G(player).been_here_before ? "506r01" : "506r01a", 1, 255, -1, 506);
+	} else if (useFlag && player_said("hutch")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_walk(313, 271, nullptr, 1, 2);
+			break;
+		case 1:
+			setGlobals1(_ripMedHighReacher, 1, 9, 9, 9, 0, 9, 10, 10, 10, 0,
+				10, 9, 9, 9, 0, 9, 1, 1, 1);
+			sendWSMessage_110000(2);
+			break;
+		case 2:
+			sendWSMessage_120000(3);
+			break;
+		case 3:
+			sendWSMessage_130000(4);
+			break;
+		case 4:
+			sendWSMessage_120000(5);
+			break;
+		case 5:
+			sendWSMessage_130000(6);
+			break;
+		case 6:
+			sendWSMessage_180000(7);
+			digi_play("509R07", 1, 255, 5);
+			break;
+		case 7:
+			sendWSMessage_150000(-1);
+			player_set_commands_allowed(true);
+			break;
+		default:
+			break;
+		}
+	} else if (player_said("SHOVEL", "hutch")) {
+		player_set_commands_allowed(false);
+		ws_hide_walker();
+		digi_preload("509_s02");
+		_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+			triggerMachineByHashCallbackNegative, "RIP DIGS AT WALL");
+		_G(kernel).trigger_mode = KT_DAEMON;
+		sendWSMessage_10000(1, _ripley, _ripDigsWall, 1, 33, 8,
+			_ripDigsWall, 34, 34, 0);
+		kernel_timing_trigger(120, 5);
+	} else if (!lookFlag && !takeFlag && !useFlag &&
+			!player_said("SHOVEL", "hutch") && player_said("hutch")) {
+		digi_play("509R08", 1);
+	} else if (player_said("walk to", "stairs up")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_hide_walker();
+			_roomNum = 510;
+			_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+				triggerMachineByHashCallbackNegative, "RIP CLIMBS UP TO 510");
+			sendWSMessage_10000(1, _ripley, _ripClimbStairs3, 1, 8, 1,
+				_ripClimbStairs3, 9, 16, 0);
+			break;
+
+		case 1:
+			_G(kernel).trigger_mode = KT_DAEMON;
+			disable_player_commands_and_fade_init(9);
+			break;
+
+		default:
+			break;
+		}
+	} else if (player_said("walk to", "stairs down")) {
+		switch (_G(kernel).trigger) {
+		case -1:
+			player_set_commands_allowed(false);
+			ws_hide_walker();
+			_roomNum = 506;
+			_ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+				triggerMachineByHashCallbackNegative, "RIP CLIMBS DOWN TO 506");
+			sendWSMessage_10000(1, _ripley, _ripClimbStairs1, 1, 14, 1,
+				_ripClimbStairs1, 15, 28, 0);
+			break;
+
+		case 1:
+			_G(kernel).trigger_mode = KT_DAEMON;
+			disable_player_commands_and_fade_init(9);
+			break;
+
+		default:
+			break;
+		}
+	} else {
+		return;
+	}
+
+	_G(player).command_ready = false;
 }
 
 } // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section5/room509.h b/engines/m4/riddle/rooms/section5/room509.h
index 0b2ced7180c..113406c7fbd 100644
--- a/engines/m4/riddle/rooms/section5/room509.h
+++ b/engines/m4/riddle/rooms/section5/room509.h
@@ -29,12 +29,25 @@ namespace Riddle {
 namespace Rooms {
 
 class Room509 : public Room {
+private:
+	int _ripDigsWall = 0;
+	int _ripFrom506 = 0;
+	int _ripFrom510 = 0;
+	int _ripClimbStairs1 = 0;
+	int _ripClimbStairs3 = 0;
+	int _ripMedHighReacher = 0;
+	int _roomNum = 0;
+	bool _flag1 = false;
+	machine *_ripley = nullptr;
+
 public:
 	Room509() : Room() {}
 	~Room509() override {}
 
 	void init() override;
 	void daemon() override;
+	void pre_parser() override;
+	void parser() override;
 };
 
 } // namespace Rooms


Commit: d37cb8ff6b70a8a7cb0ca06317738515d635650b
    https://github.com/scummvm/scummvm/commit/d37cb8ff6b70a8a7cb0ca06317738515d635650b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-15T18:22:12-07:00

Commit Message:
M4: RIDDLE: Room 510 init and pre-parser

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


diff --git a/engines/m4/riddle/rooms/section5/room510.cpp b/engines/m4/riddle/rooms/section5/room510.cpp
index 012734ab951..588bb8a4235 100644
--- a/engines/m4/riddle/rooms/section5/room510.cpp
+++ b/engines/m4/riddle/rooms/section5/room510.cpp
@@ -22,17 +22,189 @@
 #include "m4/riddle/rooms/section5/room510.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 Room510::init() {
+	digi_preload("509_s01");
+	_val1 = 0;
+
+	static const char *HOTSPOTS[] = {
+		"ROPE ", "GREEN VINE ", "BROWN VINE ", "VINES ",
+		"ROPE", "GREEN VINE", "BROWN VINE", "VINES"
+	};
+	for (int i = 0; i < 8; ++i)
+		hotspot_set_active(HOTSPOTS[i], false);
+
+	switch (_G(flags)[V169]) {
+	case 0:
+		_statue = series_play("510 STATUE", 0xa00, 16, -1, 5);
+		hotspot_set_active("ALTAR POST ", false);
+		kernel_load_variant("510lock0");
+		break;
+
+	case 1:
+		_statue = series_play("510 STATUE LAYED DOWN", 0xa00, 16, -1, 5);
+		hotspot_set_active("ALTAR POST", false);
+		kernel_load_variant("510lock1");
+		break;
+
+	case 2:
+		_statue = series_play(" 510 STATUE LAYED DOWN", 0xa00, 16, -1, 5);
+
+		if (inv_object_is_here("ROPE")) {
+			hotspot_set_active("ROPE ", true);
+			_ropeStatue = series_play("510 STATUE AND ROPE", 0xf00, 16, -1, 5, 0, 100, 0, 0, 38, 38);
+		}
+
+		if (inv_object_is_here("BROWN VINE")) {
+			hotspot_set_active("BROWN VINE ", true);
+			_ropeStatue = series_play("510 STATUE AND ANY VINE", 0xf00, 16, -1, 5, 0, 100, 0, 0, 38, 38);
+		}
+
+		if (inv_object_is_here("GREEN VINE")) {
+			hotspot_set_active("GREEN VINE ", true);
+			_ropeStatue = series_play("510 STATUE AND ANY VINE", 0xf00, 16, -1, 5, 0, 100, 0, 0, 38, 38);
+		}
+
+		if (inv_object_is_here("VINES")) {
+			hotspot_set_active("VINES  ", true);
+			_ropeStatue = series_play("510 STATUE AND COMBO VINES", 0xf00, 16, -1, 5, 0, 100, 0, 0, 38, 38);
+		}
+
+		hotspot_set_active("ALTAR POST", false);
+		kernel_load_variant("510lock1");
+		break;
+
+	default:
+		break;
+	}
+
+	if (inv_object_is_here("WOODEN LADDER"))
+		_ladder = series_play("510 LADDER", 0xf00, 16, -1, 5);
+	else
+		hotspot_set_active("WOODEN LADDER", false);
+
+	if (_G(flags)[V169] != 2) {
+		if (inv_object_is_here("ROPE")) {
+			hotspot_set_active("ROPE", true);
+			_ropeStatue = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
+		}
+
+		if (inv_object_is_here("GREEN VINE")) {
+			hotspot_set_active("GREEN VINE", true);
+			_ropeStatue = series_play("510 SHORTER VINE UNWINDS", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
+		}
+
+		if (inv_object_is_here("BROWN VINE")) {
+			hotspot_set_active("BROWN VINE", true);
+			_ropeStatue = series_play("510 LONGER VINE UNWINDS", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
+		}
+
+		if (inv_object_is_here("VINES")) {
+			hotspot_set_active("VINES", true);
+			_ropeStatue = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
+		}
+	}
+
+	hotspot_set_active("SKULL", false);
+
+	if (inv_object_is_here("CRYSTAL SKULL"))
+		_skull = series_play("SKULL SPARKLES", 0x100, 16, -1, 15);
+
+	if (_G(flags)[V170] == 1 && inv_object_is_here("CRYSTAL SKULL")) {
+		hotspot_set_active("SKULL", true);
+		hotspot_set_active("NICHE", false);
+		_G(flags)[V292] = 0;
+	}
+
+	if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
+		if (_G(flags)[V170]) {
+			ws_hide_walker();
+			_steps = series_play("RIP DANGLES FROM ROPE", 0x100, 16, -1, 5);
+		}
+
+		kernel_timing_trigger(60, 999);
+
+	} else {
+		player_set_commands_allowed(false);
+		_stepsSeries = series_load("510 UP STEPS");
+		_steps = series_play("510 UP STEPS", 0xf00, 0, 110, 5);
+		ws_demand_location(409, 86, 11);
+		ws_hide_walker();
+	}
+
+	digi_play_loop("509_s01", 3, 127);
 }
 
 void Room510::daemon() {
 }
 
+void Room510::pre_parser() {
+	bool lookFlag = player_said_any("look", "look at");
+	bool takeFlag = player_said("take");
+	bool useFlag = player_said("gear");
+
+	if (!useFlag && !lookFlag && !takeFlag)
+		return;
+	if (!_G(flags)[V170])
+		return;
+
+	if (takeFlag && player_said("SKULL"))
+		return;
+	if (useFlag && player_said("ROPE"))
+		return;
+
+	if (lookFlag && player_said("NICHE")) {
+		digi_play("com127", 1);
+		intr_cancel_sentence();
+		return;
+	}
+
+	if (lookFlag && player_said("ROPE"))
+		return;
+
+	if (lookFlag && player_said("WOODEN LADDER")) {
+		digi_play("com107", 1);
+	} else {
+		if (lookFlag && player_said("TOWER"))
+			return;
+		if (lookFlag && player_said("SKULL"))
+			return;
+		if (!lookFlag && !takeFlag && !useFlag)
+			return;
+
+		if (player_said_any("ALTAR POST", "ALTAR POST ", "TROUGH", "STAIRS")) {
+			switch (imath_ranged_rand(1, 5)) {
+			case 1:
+				digi_play("301r23", 1, 255, -1, 301);
+				break;
+			case 2:
+				digi_play("301r25", 1, 255, -1, 301);
+				break;
+			case 3:
+				digi_play("301r26", 1, 255, -1, 301);
+				break;
+			case 4:
+				digi_play("301r35", 1, 255, -1, 301);
+				break;
+			case 5:
+				digi_play("301r36", 1, 255, -1, 301);
+				break;
+			default:
+				break;
+			}
+		}
+	}
+}
+
+void Room510::parser() {
+
+}
+
 } // namespace Rooms
 } // namespace Riddle
 } // namespace M4
diff --git a/engines/m4/riddle/rooms/section5/room510.h b/engines/m4/riddle/rooms/section5/room510.h
index 8d458a9ab30..049d5831b1a 100644
--- a/engines/m4/riddle/rooms/section5/room510.h
+++ b/engines/m4/riddle/rooms/section5/room510.h
@@ -29,12 +29,23 @@ namespace Riddle {
 namespace Rooms {
 
 class Room510 : public Room {
+private:
+	int _val1 = 0;
+	machine *_statue = nullptr;
+	machine *_ropeStatue = nullptr;
+	machine *_ladder = nullptr;
+	machine *_skull = nullptr;
+	int _stepsSeries = 0;
+	machine *_steps = nullptr;
+
 public:
 	Room510() : Room() {}
 	~Room510() 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