[Scummvm-git-logs] scummvm master -> 7b56c92aa9ab2714ea63c5a2e9f8326034389aae
dreammaster
noreply at scummvm.org
Mon Sep 16 05:56:56 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:
7b56c92aa9 M4: RIDDLE: In progress room 510 parser
Commit: 7b56c92aa9ab2714ea63c5a2e9f8326034389aae
https://github.com/scummvm/scummvm/commit/7b56c92aa9ab2714ea63c5a2e9f8326034389aae
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-15T22:56:47-07:00
Commit Message:
M4: RIDDLE: In progress room 510 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 588bb8a4235..06ce36628bb 100644
--- a/engines/m4/riddle/rooms/section5/room510.cpp
+++ b/engines/m4/riddle/rooms/section5/room510.cpp
@@ -23,6 +23,7 @@
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
#include "m4/adv_r/adv_file.h"
+#include "m4/adv_r/other.h"
namespace M4 {
namespace Riddle {
@@ -57,22 +58,22 @@ void Room510::init() {
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);
+ _rope = 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);
+ _rope = 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);
+ _rope = 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);
+ _rope = series_play("510 STATUE AND COMBO VINES", 0xf00, 16, -1, 5, 0, 100, 0, 0, 38, 38);
}
hotspot_set_active("ALTAR POST", false);
@@ -91,22 +92,22 @@ void Room510::init() {
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);
+ _rope = 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);
+ _rope = 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);
+ _rope = 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);
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
}
}
@@ -201,8 +202,661 @@ void Room510::pre_parser() {
}
}
+#define HERE(ITEM) player_said(ITEM) && inv_object_is_here(ITEM)
+
void Room510::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool takeFlag = player_said("take");
+ bool useFlag = player_said("gear");
+
+ if (lookFlag && player_said(" ")) {
+ digi_play("510R02", 1);
+ } else if (lookFlag && player_said_any("ALTAR POST", "ALTAR POST ", "ALTAR")) {
+ digi_play(_G(flags)[V165] == 1 ? "510R03A" : "510R03", 1);
+ } else if (lookFlag && player_said("TROUGH")) {
+ if (_G(flags)[V166] == 1) {
+ digi_play("510R04A", 1);
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ digi_play("510R04", 1);
+ break;
+ case 1:
+ digi_play("510_s01", 1);
+ kernel_timing_trigger(300, 2);
+ break;
+ case 2:
+ digi_play("510r05", 2);
+ _G(flags)[V166] = 1;
+ break;
+ case 7:
+ digi_play("510R04A", 1);
+ break;
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("NICHE")) {
+ switch (_G(kernel).trigger) {
+ case 1:
+ digi_play("510r06", 1, 255, 2);
+ break;
+ case -1:
+ if (_G(flags)[V170]) {
+ digi_play("com127", 1);
+ } else {
+ player_set_commands_allowed(false);
+ _ripLooksDown = series_load("RIP LOOKS DOWN POS4");
+ kernel_timing_trigger(1, 5);
+ }
+ break;
+ case 2:
+ sendWSMessage_140000(3);
+ break;
+ case 3:
+ kernel_timing_trigger(1, 4);
+ break;
+ case 4:
+ series_unload(_ripLooksDown);
+ break;
+ case 5:
+ setGlobals1(_ripLooksDown, 1, 12, 12, 12);
+ sendWSMessage_110000(1);
+ break;
+ case 7:
+ if (_G(flags)[V170])
+ digi_play("com127", 1);
+ break;
+ default:
+ break;
+ }
+ } else if (lookFlag && player_said("SKULL")) {
+ digi_play("510R11", 1);
+ } else if (lookFlag && player_said("DOME")) {
+ digi_play("510R20", 1);
+ } else if (lookFlag && HERE("WOODEN LADDER")) {
+ digi_play("com107", 1);
+ } else if (lookFlag && HERE("ROPE")) {
+ digi_play("COM132", 1, 255, -1, 997);
+ } else if (lookFlag && HERE("GREEN VINE")) {
+ digi_play("COM133", 1, 255, -1, 997);
+ } else if (lookFlag && HERE("BROWN VINE")) {
+ digi_play("COM133", 1, 255, -1, 997);
+ } else if (lookFlag && HERE("VINES")) {
+ digi_play("COM134", 1, 255, -1, 997);
+ } else if (lookFlag && player_said("STAIRS")) {
+ digi_play("509r06", 1, 255, -1, 509);
+ } else if (takeFlag && player_said_any("ALTAR POST", "ALTAR POST ")) {
+ digi_play("510R09", 1);
+ } else if (takeFlag && player_said("SKULL")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ terminateMachineAndNull(_steps);
+ terminateMachineAndNull(_rope);
+ _ripDangles = series_play("RIP DANGLES FROM ROPE", 0x100, 16, 1, 5, 0, 100, 0, 0, 0, 41);
+ break;
+ case 1:
+ hotspot_set_active("SKULL", false);
+ hotspot_set_active("NICHE", true);
+
+ if (inv_object_is_here("CRYSTAL SKULL")) {
+ kernel_examine_inventory_object("PING CRYSTAL SKULL", 5, 1, 330, 280, 2, 0, 2);
+ inv_give_to_player("CRYSTAL SKULL");
+ terminateMachineAndNull(_skull);
+ }
+
+ digi_preload("510_s07");
+ break;
+ case 2:
+ terminateMachineAndNull(_ripDangles);
+ _ripDangles = series_play("RIP DANGLES FROM ROPE", 0x100, 16, 3, 5, 0, 100, 0, 0, 42, 58);
+ break;
+ case 3:
+ terminateMachineAndNull(_ripDangles);
+ terminateMachineAndNull(_statue);
+ terminateMachineAndNull(_ladder);
+
+ _ripStartsDownWall = series_load("Rip starts down wall");
+ _pu03 = series_stream("510pu03", 5, 0, 7);
+ series_stream_break_on_frame(_pu03, 58, 4);
+ break;
+ case 4:
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, -1, 5, 0, 100, 0, 0, 35, 35);
+ _statue = series_play(" 510 STATUE LAYED DOWN", 0xa00, 16, -1, 5);
+ _ladder = series_play("510 LADDER", 0xf00, 16, -1, 5);
+ _steps = series_play("Rip starts down wall", 0x200, 18, 5, 5, 0, 100, 0, 0, 0, 34);
+ digi_play("510_s07", 2);
+ break;
+ case 5:
+ digi_unload("510_s07");
+ terminateMachineAndNull(_steps);
+ _G(flags)[V170] = 0;
+ _G(flags)[V292] = 1;
+
+ if (inv_object_is_here("CRYSTAL SKULL")) {
+ hotspot_set_active("SKULL", false);
+ hotspot_set_active("NICHE", true);
+ }
+
+ ws_unhide_walker();
+ ws_demand_location(425, 128, 11);
+ kernel_timing_trigger(1, 6);
+ break;
+ case 6:
+ _G(flags)[V292] = 1;
+ series_unload(_ripStartsDownWall);
+ break;
+ case 7:
+ terminateMachineAndNull(_pu03);
+ break;
+ default:
+ break;
+ }
+ } else if (takeFlag && player_said_any("VINES ", "ROPE ", "GREEN VINE ", "BROWN VINE ")) {
+ if (!parserSub())
+ return;
+ } else if (takeFlag && _G(flags)[V170] != 1 &&
+ player_said_any("VINES", "ROPE", "GREEN VINE", "BROWN VINE") && takeVinesRope()) {
+ // No implementation
+ } else if (takeFlag && player_said("WOODEN LADDER")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("WOODEN LADDER") && !_G(flags)[V169]) {
+ ws_walk(395, 121, nullptr, 1, 5);
+ }
+ break;
+ case 1:
+ player_set_commands_allowed(false);
+ if (!_G(flags)[V169]) {
+ if (!inv_object_is_here("VINES") && !inv_object_is_here("ROPE") &&
+ !inv_object_is_here("GREEN VINE") && !inv_object_is_here("BROWN VINE") &&
+ !_G(flags)[V170]) {
+ kernel_timing_trigger(10, 8);
+ } else {
+ kernel_timing_trigger(10, 2);
+ }
+ } else {
+ return;
+ }
+ break;
+ case 2:
+ ws_hide_walker();
+ _steps = series_play("Rip ties rope to ladder", 0x100, 16, 3, 5, 0, 100, 0, 0, 0, 23);
+ break;
+ case 3:
+ terminateMachineAndNull(_steps);
+ _steps = series_play("Rip ties rope to ladder", 0x100, 16, -1, 5, 0, 100, 0, 0, 23, 32);
+
+ if (inv_object_is_here("GREEN VINE")) {
+ hotspot_set_active("GREEN VINE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("510 SHORTER VINE UNWINDS", 0x100, 18, 4, 5);
+ digi_play("510_s06", 1);
+ }
+ if (inv_object_is_here("BROWN VINE")) {
+ hotspot_set_active("BROWN VINE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("510 LONGER VINE UNWINDS", 0x100, 18, 4, 5);
+ digi_play("510_s06", 1);
+ }
+ if (inv_object_is_here("ROPE")) {
+ hotspot_set_active("ROPE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 18, 4, 5);
+ digi_play("510_s06", 1);
+ }
+ if (inv_object_is_here("VINES")) {
+ hotspot_set_active("VINES", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 18, 4, 5);
+ digi_play("510_s06", 1);
+ }
+ break;
+ case 4:
+ terminateMachineAndNull(_steps);
+ terminateMachineAndNull(_rope);
+ _steps = series_play("Rip ties rope to ladder", 0x100, 18, 5, 5, 0, 100, 0, 0, 0, 23);
+ break;
+ case 5:
+ terminateMachineAndNull(_steps);
+ ws_unhide_walker();
+
+ if (inv_object_is_here("GREEN VINE")) {
+ inv_give_to_player("GREEN VINE");
+ kernel_examine_inventory_object("PING GREEN VINE", 5, 1, 325, 200, 8);
+ }
+ if (inv_object_is_here("BROWN VINE")) {
+ inv_give_to_player("BROWN VINE");
+ kernel_examine_inventory_object("PING BROWN VINE", 5, 1, 325, 200, 8);
+ }
+ if (inv_object_is_here("ROPE")) {
+ inv_give_to_player("ROPE");
+ kernel_examine_inventory_object("PING ROPE", 5, 1, 325, 200, 8);
+ }
+ if (inv_object_is_here("VINES")) {
+ inv_give_to_player("VINES");
+ kernel_examine_inventory_object("PING VINES", 5, 1, 325, 200, 8);
+ }
+ break;
+ case 7:
+ return;
+ case 8:
+ kernel_timing_trigger(1, 12);
+ break;
+ case 9:
+ terminateMachineAndNull(_ladder);
+ inv_give_to_player("WOODEN LADDER");
+ kernel_examine_inventory_object("PING WOODEN LADDER", 5, 1, 300, 80, 10, nullptr, 10);
+ break;
+ case 10:
+ sendWSMessage_140000(11);
+ break;
+ case 11:
+ series_unload(_ripLowReach);
+ player_set_commands_allowed(true);
+ break;
+ case 12:
+ hotspot_set_active("WOODEN LADDER", false);
+ _ripLowReach = series_load("Rip trek low reacher pos5");
+ setGlobals1(_ripLowReach, 1, 26, 26, 26);
+ sendWSMessage_110000(9);
+ break;
+ default:
+ break;
+ }
+ } else if (useFlag && player_said("ROPE ")) {
+ digi_play("com112a", 1);
+ } else if (useFlag && player_said_any("GREEN VINE ", "BROWN VINE ")) {
+ digi_play("com113", 1);
+ } else if (useFlag && player_said("VINES ")) {
+ useVines();
+ } else if (useFlag && player_said_any("ALTAR POST", "ALTAR POST ")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 4:
+ case 7:
+ case 11:
+ case 666:
+ if (!parserSub())
+ return;
+ break;
+
+ default:
+ return;
+ }
+ } else if (player_said("WOODEN LADDER", "ALTAR") && inv_player_has("WOODEN LADDER")) {
+ if (_G(flags)[V169])
+ return;
+
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(395, 121, nullptr, 1, 7);
+ break;
+ case 1:
+ player_set_commands_allowed(false);
+ _ripLowReach2 = series_load("Rip trek low reacher pos5");
+ setGlobals1(_ripLowReach2, 1, 26, 26, 26);
+ sendWSMessage_110000(2);
+ break;
+ case 2:
+ digi_play("510_s03", 1);
+ hotspot_set_active("WOODEN LADDER", true);
+ sendWSMessage_140000(3);
+ _ladder = series_play("510 LADDER", 0xf00, 16, -1, 5);
+ break;
+ case 3:
+ kernel_timing_trigger(1, 4);
+ break;
+ case 4:
+ series_unload(_ripLowReach2);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if (inv_object_is_here("WOODEN LADDER") && (
+ player_said("ROPE", "WOODEN LADDER") ||
+ player_said("VINES", "WOODEN LADDER") ||
+ player_said("GREEN VINE", "WOODEN LADDER") ||
+ player_said("BROWN VINE", "WOODEN LADDER")
+ )) {
+ woodenLadder();
+ } else if ((player_said("LADDER/ROPE", "ALTAR") && inv_player_has("LADDER/ROPE")) ||
+ (player_said("LADDER/VINES", "ALTAR") && inv_player_has("LADDER/VINES")) ||
+ (player_said("LADDER/GREEN VINE", "ALTAR") && inv_player_has("LADDER/GREEN VINE")) ||
+ (player_said("LADDER/BROWN VINE", "ALTAR") && inv_player_has("LADDER/BROWN VINE"))
+ ) {
+ if (!_G(flags)[V169])
+ altar();
+ }
+ // TODO
+ else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+bool Room510::parserSub() {
+ // TODO
+ return false;
+}
+
+bool Room510::takeVinesRope() {
+ static const char *ITEMS[4] = { "VINES", "ROPE", "GREEN VINE", "BROWN VINE" };
+
+ switch (_G(kernel).trigger) {
+ case -1:
+ for (int i = 0; i < 4; ++i) {
+ if (player_said(ITEMS[i]) && inv_player_has(ITEMS[i]))
+ return true;
+ }
+
+ ws_walk(395, 121, nullptr, 1, 5);
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+
+ if (!inv_player_has(_G(player).noun)) {
+ ws_hide_walker();
+ _steps = series_play("Rip ties rope to ladder", 0, 16, 2, 5, 0, 100, 0, 0, 0, 23);
+ }
+ break;
+
+ case 2:
+ terminateMachineAndNull(_steps);
+ _steps = series_play("Rip ties rope to ladder", 0, 16, -1, 5, 0, 100, 0, 0, 23, 32);
+
+ if (player_said("GREEN VINE")) {
+ hotspot_set_active("GREEN VINE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("510 SHORTER VINE UNWINDS", 0x100, 18, 3, 5);
+ digi_play("510_s06", 1);
+ }
+ if (player_said("BROWN VINE")) {
+ hotspot_set_active("BROWN VINE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("510 LONGER VINE UNWINDS", 0x100, 18, 3, 5);
+ digi_play("510_s06", 1);
+ }
+ if (player_said("ROPE")) {
+ hotspot_set_active("ROPE", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 18, 3, 5);
+ digi_play("510_s06", 1);
+ }
+ if (player_said("VINES")) {
+ hotspot_set_active("VINES", false);
+ terminateMachineAndNull(_rope);
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 18, 3, 5);
+ digi_play("510_s06", 1);
+ }
+ break;
+
+ case 3:
+ terminateMachineAndNull(_rope);
+ terminateMachineAndNull(_steps);
+ _steps = series_play("Rip ties rope to ladder", 0, 18, 4, 5, 0, 100, 0, 0, 0, 23);
+ break;
+
+ case 4:
+ if (player_said("GREEN VINE")) {
+ inv_give_to_player("GREEN VINE");
+ kernel_examine_inventory_object("PING GREEN VINE", 5, 1, 325, 200, 5, nullptr, 10);
+ }
+ if (player_said("BROWN VINE")) {
+ inv_give_to_player("BROWN VINE");
+ kernel_examine_inventory_object("PING BROWN VINE", 5, 1, 325, 200, 5, nullptr, 10);
+ }
+ if (player_said("VINES")) {
+ inv_give_to_player("VINES");
+ kernel_examine_inventory_object("PING VINES", 5, 1, 325, 200, 5, nullptr, 10);
+ }
+ if (player_said("ROPE")) {
+ inv_give_to_player("ROPE");
+ kernel_examine_inventory_object("PING ROPE", 5, 1, 325, 200, 5, nullptr, 10);
+ }
+ break;
+
+ case 5:
+ terminateMachineAndNull(_steps);
+ ws_unhide_walker();
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+void Room510::useVines() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ other_save_game_for_resurrection();
+ ws_walk(425, 128, nullptr, 1, 11);
+ break;
+
+ case 1:
+ ws_hide_walker();
+ player_set_commands_allowed(false);
+ _steps = series_play("Rip starts down wall", 0x200, 16, 2, 5);
+ break;
+
+ case 2:
+ kernel_timing_trigger(20, 3);
+ terminateMachineAndNull(_steps);
+
+ if (inv_object_is_here("WOODEN LADDER"))
+ terminateMachineAndNull(_ladder);
+
+ terminateMachineAndNull(_rope);
+ terminateMachineAndNull(_statue);
+ series_stream("510 RIP DIES", 5, 0, 4);
+ break;
+
+ case 3:
+ digi_play("510_s04", 1);
+ digi_play("510_s05", 2);
+ break;
+ case 4:
+ disable_player_commands_and_fade_init(5);
+ break;
+
+ case 5:
+ _G(game).setRoom(413);
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+}
+
+void Room510::woodenLadder() {
+ if (player_said("ROPE", "WOODEN LADDER")) {
+ if (inv_object_is_here("GREEN VINE") || inv_object_is_here("BROWN VINE") ||
+ inv_object_is_here("VINES"))
+ return;
+
+ hotspot_set_active("ROPE", true);
+ inv_put_thing_in("ROPE", 510);
+ }
+
+ if (player_said("BROWN VINE", "WOODEN LADDER")) {
+ if (inv_object_is_here("GREEN VINE") || inv_object_is_here("VINES") ||
+ inv_object_is_here("ROPE"))
+ return;
+
+ hotspot_set_active("BROWN VINE", true);
+ inv_put_thing_in("BROWN VINE", 510);
+ }
+
+ if (player_said("GREEN VINE", "WOODEN LADDER")) {
+ if (inv_object_is_here("BROWN VINE") || inv_object_is_here("VINES") ||
+ inv_object_is_here("ROPE"))
+ return;
+
+ hotspot_set_active("GREEN VINE", true);
+ inv_put_thing_in("GREEN VINE", 510);
+ }
+
+ if (player_said("VINES", "WOODEN LADDER")) {
+ if (inv_object_is_here("BROWN VINE") || inv_object_is_here("GREEN VINE") ||
+ inv_object_is_here("ROPE"))
+ return;
+
+ hotspot_set_active("VINES", true);
+ inv_put_thing_in("VINES", 510);
+ }
+
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _steps = series_play("Rip ties rope to ladder", 0x100, 16, 1, 5);
+ break;
+
+ case 1:
+ if (player_said("GREEN VINE", "WOODEN LADDER")) {
+ _rope = series_play("510 SHORTER VINE UNWINDS", 0x100, 16, 2, 5);
+ digi_play("510_s06", 1);
+ }
+
+ if (player_said("BROWN VINE", "WOODEN LADDER")) {
+ _rope = series_play("510 LONGER VINE UNWINDS", 0x100, 16, 2, 5);
+ digi_play("510_s06", 1);
+ }
+
+ if (player_said("VINES", "WOODEN LADDER")) {
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, 2, 5);
+ digi_play("510_s06", 1);
+ }
+
+ if (player_said("ROPE", "WOODEN LADDER")) {
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, 2, 5);
+ digi_play("510_s06", 1);
+ }
+ break;
+
+ case 2:
+ terminateMachineAndNull(_steps);
+ _steps = series_play("Rip ties rope to ladder", 0x100, 18, 3, 5, 0, 100, 0, 0, 0, 23);
+ break;
+
+ case 3:
+ ws_unhide_walker();
+ terminateMachineAndNull(_steps);
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
+}
+
+void Room510::altar() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(395, 121, nullptr, 1, 7);
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+ _ripLowReach3 = series_load("Rip trek low reacher pos5");
+ setGlobals1(_ripLowReach3, 1, 26, 26, 26);
+ sendWSMessage_110000(2);
+ break;
+
+ case 2:
+ digi_play("510_s03", 1);
+ hotspot_set_active("WOODEN LADDER", true);
+ sendWSMessage_140000(3);
+ _ladder = series_play("510 LADDER", 0xf00, 16, -1, 5);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ break;
+
+ case 3:
+ ws_hide_walker();
+ _steps = series_play("Rip ties rope to ladder", 0x100, 16, 4, 5);
+ break;
+
+ case 4:
+ series_unload(_ripLowReach3);
+
+ if (player_said("LADDER/GREEN VINE", "ALTAR")) {
+ _rope = series_play("510 SHORTER VINE UNWINDS", 0x100, 16, 5, 5);
+ digi_play("510_s06", 1);
+ hotspot_set_active("GREEN VINE", true);
+ }
+
+ if (player_said("LADDER/BROWN VINE", "ALTAR")) {
+ _rope = series_play("510 LONGER VINE UNWINDS", 0x100, 16, 5, 5);
+ digi_play("510_s06", 1);
+ hotspot_set_active("BROWN VINE", true);
+ }
+
+ if (player_said("LADDER/VINES", "ALTAR")) {
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, 5, 5);
+ digi_play("510_s06", 1);
+ hotspot_set_active("VINES", true);
+ }
+
+ if (player_said("LADDER/ROPE", "ALTAR")) {
+ _rope = series_play("ROPE UNWINDS DOWN THE TOWER", 0x100, 16, 5, 5);
+ digi_play("510_s06", 1);
+ hotspot_set_active("ROPE", true);
+ }
+ break;
+
+ case 5:
+ terminateMachineAndNull(_steps);
+ _steps = series_play("Rip ties rope to ladder", 0x100, 18, 6, 5, 0, 100, 0, 0, 0, 23);
+ break;
+
+ case 6:
+ ws_unhide_walker();
+ terminateMachineAndNull(_steps);
+
+ if (player_said("LADDER/GREEN VINE", "ALTAR")) {
+ inv_put_thing_in("GREEN VINE", 510);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ inv_put_thing_in("LADDER/GREEN VINE", NOWHERE);
+ hotspot_set_active("GREEN VINE", true);
+ }
+
+ if (player_said("LADDER/BROWN VINE", "ALTAR")) {
+ inv_put_thing_in("BROWN VINE", 510);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ inv_put_thing_in("LADDER/BROWN VINE", NOWHERE);
+ hotspot_set_active("BROWN VINE", true);
+ }
+
+ if (player_said("LADDER/VINES", "ALTAR")) {
+ inv_put_thing_in("VINES", 510);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ inv_put_thing_in("LADDER/VINES", NOWHERE);
+ hotspot_set_active("VINES", true);
+ }
+
+ if (player_said("LADDER/ROPE", "ALTAR")) {
+ inv_put_thing_in("ROPE", 510);
+ inv_put_thing_in("WOODEN LADDER", 510);
+ inv_put_thing_in("LADDER/ROPE", NOWHERE);
+ hotspot_set_active("ROPE", true);
+ }
+
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ break;
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section5/room510.h b/engines/m4/riddle/rooms/section5/room510.h
index 049d5831b1a..f490915eb50 100644
--- a/engines/m4/riddle/rooms/section5/room510.h
+++ b/engines/m4/riddle/rooms/section5/room510.h
@@ -31,12 +31,25 @@ namespace Rooms {
class Room510 : public Room {
private:
int _val1 = 0;
+ int _ripLooksDown = 0;
+ int _ripLowReach = 0;
+ int _ripLowReach2 = 0;
+ int _ripLowReach3 = 0;
machine *_statue = nullptr;
- machine *_ropeStatue = nullptr;
+ machine *_rope = nullptr;
machine *_ladder = nullptr;
machine *_skull = nullptr;
+ machine *_ripDangles = nullptr;
int _stepsSeries = 0;
machine *_steps = nullptr;
+ int _ripStartsDownWall = 0;
+ machine *_pu03 = nullptr;
+
+ bool parserSub();
+ bool takeVinesRope();
+ void useVines();
+ void woodenLadder();
+ void altar();
public:
Room510() : Room() {}
More information about the Scummvm-git-logs
mailing list