[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