[Scummvm-git-logs] scummvm master -> 97b417b5913a213f6be29542c00dfbd1e0476966
Strangerke
noreply at scummvm.org
Sat Oct 12 21:29:48 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:
97b417b591 M4: RIDDLE: Partial implementation of room 803 (no parser) - includes a change in riddle/walker.h
Commit: 97b417b5913a213f6be29542c00dfbd1e0476966
https://github.com/scummvm/scummvm/commit/97b417b5913a213f6be29542c00dfbd1e0476966
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-12T23:28:01+01:00
Commit Message:
M4: RIDDLE: Partial implementation of room 803 (no parser) - includes a change in riddle/walker.h
Changed paths:
engines/m4/riddle/rooms/section8/room803.cpp
engines/m4/riddle/rooms/section8/room803.h
engines/m4/riddle/walker.h
diff --git a/engines/m4/riddle/rooms/section8/room803.cpp b/engines/m4/riddle/rooms/section8/room803.cpp
index 857d21773a7..d5ef87b4b7c 100644
--- a/engines/m4/riddle/rooms/section8/room803.cpp
+++ b/engines/m4/riddle/rooms/section8/room803.cpp
@@ -19,7 +19,7 @@
*
*/
-#include "m4/riddle/rooms/section8/room803.h"
+#include "m4/riddle/rooms/section8/section8.h"
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
@@ -27,10 +27,277 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+void Room803::preload() {
+ _G(player).walker_type = WALKER_ALT;
+ _G(player).shadow_type = SHADOW_ALT;
+ LoadWSAssets("other script", _G(master_palette));
+}
+
void Room803::init() {
+ digi_preload("950_s29", -1);
+ _var1 = 0;
+
+ if (_G(flags)[V276])
+ hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
+ else
+ loadWalkSeries();
+
+ initWalker();
+ digi_play_loop("950_s29", 2, 127, -1, 950);
+}
+
+void Room803::parser() {
}
void Room803::daemon() {
+ int32 trigger = _G(kernel).trigger;
+
+ if ((trigger >= 1) && (trigger < 15))
+ daemonSub1();
+ else if (trigger == 15) {
+ sendWSMessage_150000(_mcWalkerMach, -1);
+ player_set_commands_allowed(true);
+ } else if (trigger == 16) {
+ sendWSMessage_150000(_G(my_walker), -1);
+ } else if (trigger == 33) {
+ sendWSMessage_150000(_G(my_walker), -1);
+ switch (imath_ranged_rand(1, 4)) {
+ case 1:
+ digi_play("COM048", 1, 255, 15, 997);
+ break;
+ case 2:
+ digi_play("COM049", 1, 255, 15, 997);
+ break;
+ case 3:
+ digi_play("COM050", 1, 255, 15, 997);
+ break;
+ case 4:
+ digi_play("COM051", 1, 255, 15, 997);
+ break;
+ default:
+ break;
+ }
+
+ _meiTalksPos3 = series_load("Mei talks pos3", -1, nullptr);
+ setGlobals1(_meiTalksPos3, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ sendWSMessage_110000(_mcWalkerMach, -1);
+ } else if ((trigger >= 50) && ((trigger <= 56) || (trigger == 999)))
+ daemonSub1();
+}
+
+void Rooms::Room803::initWalker() {
+ switch (_G(game).previous_room) {
+ case -2:
+ if (_G(flags)[V276] == 0) {
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 357, 175, 3, Walker::player_walker_callback, "mc");
+ }
+ break;
+
+ case 804:
+ ws_demand_location(_G(my_walker), 639, 260);
+ ws_demand_facing(_G(my_walker), 9);
+ if (_G(flags)[V276] == 0) {
+ player_set_commands_allowed(false);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 639, 260, 3, Walker::player_walker_callback, "mc");
+ ws_walk(_G(my_walker), 579, 260, nullptr, 50, 9, true);
+ } else {
+ ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+ }
+ break;
+
+ case 814:
+ ws_demand_location(_G(my_walker), 513, 192);
+ ws_demand_facing(_G(my_walker), 9);
+ if (_G(flags)[V276] == 0) {
+ player_set_commands_allowed(false);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 513, 192, 3, Walker::player_walker_callback, "mc");
+ ws_walk(_G(my_walker), 463, 192, nullptr, 51, 9, true);
+ } else {
+ ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+ }
+ break;
+
+ case 824:
+ ws_demand_location(_G(my_walker), 570, 220);
+ ws_demand_facing(_G(my_walker), 9);
+ if (_G(flags[V276]) == 0) {
+ player_set_commands_allowed(false);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 570, 220, 3, Walker::player_walker_callback, "mc");
+ ws_walk(_G(my_walker), 520, 220, nullptr, 52, 9, true);
+ } else {
+ ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+ }
+ break;
+
+ case 834:
+ ws_demand_location(_G(my_walker), 491, 174);
+ ws_demand_facing(_G(my_walker), 9);
+ if (_G(flags[V276]) == 0) {
+ player_set_commands_allowed(false);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 491, 174, 3, Walker::player_walker_callback, "mc");
+ ws_walk(_G(my_walker), 441, 174, nullptr, 53, 9, true);
+ } else {
+ ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+ }
+ break;
+
+ case 844:
+ ws_demand_location(_G(my_walker), 475, 161);
+ ws_demand_facing(_G(my_walker), 9);
+ if (_G(flags[V276]) == 0) {
+ player_set_commands_allowed(false);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 475, 161, 3, Walker::player_walker_callback, "mc");
+ ws_walk(_G(my_walker), 425, 161, nullptr, 54, 9, true);
+ } else {
+ ws_walk(_G(my_walker), 202, 309, nullptr, -1, 7, true);
+ }
+ break;
+
+ default:
+ ws_demand_location(_G(my_walker), 202, 239);
+ ws_demand_facing(_G(my_walker), 7);
+ if (_G(flags[V276]) == 0) {
+ ws_hide_walker(_G(my_walker));
+ _meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 15, 2, 5, 0, 100, 0, 0, 0, 0);
+ kernel_timing_trigger(15, 1, nullptr);
+ }
+
+ break;
+ }
+
+ series_play("BRAZIERS 1-6 BURNING", 3840, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+ series_play("BRAZIER 8 BURNING", 2304, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+ series_play("BRAZIER 9 BURNING", 1792, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+ series_play("BRAZIER 10 BURNING", 1024, 0, -1, 5, -1, 100, 0, 0, 0, -1);
+}
+
+void Room803::loadWalkSeries() {
+ ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2, false);
+ ws_walk_load_shadow_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1);
+}
+
+void Room803::daemonSub1() {
+ switch (_G(kernel).trigger) {
+ case 1:
+ player_set_commands_allowed(false);
+ terminateMachine(_meiStepOffPileMach);
+ _meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 15, 2, 5, 0, 100, 0, 0, 0, 56);
+ break;
+
+ case 2:
+ digi_play("803m01", 1, 255, 3, -1);
+ break;
+
+ case 3:
+ if (_meiStepOffPileMach != nullptr)
+ terminateMachine(_meiStepOffPileMach);
+
+ _meiStepOffPileMach = series_play("MEI STEPS OFF PILE", 0, 16, 4, 5, 0, 100, 0, 0, 56, 57);
+ break;
+
+ case 4:
+ if (_meiStepOffPileMach != nullptr)
+ terminateMachine(_meiStepOffPileMach);
+
+ _meiStepOffPile = series_load("MEI STEPS OFF PILE", -1, nullptr);
+ _meiStepOffPileMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 256, 0, triggerMachineByHashCallbackNegative, "rip");
+ sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 57, 50, -1, _meiStepOffPile, 57, 60, 1);
+ digi_play("803r01", 1, 255, 5, -1);
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 57, 57, -1, _meiStepOffPile, 57, 57, 0);
+ digi_play("803m02", 1, 255, 6, -1);
+ break;
+
+ case 6:
+ sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 61, 67, 7, _meiStepOffPile, 67, 67, 0);
+ digi_play("803r02", 1, 255, -1, -1);
+ break;
+
+ case 7:
+ sendWSMessage_10000(1, _meiStepOffPileMach, _meiStepOffPile, 67, 57, 8, _meiStepOffPile, 57, 57, 0);
+ break;
+
+ case 8:
+ sendWSMessage_150000(_meiStepOffPileMach, -1);
+
+ if (_meiStepOffPileMach != nullptr) {
+ terminateMachine(_meiStepOffPileMach);
+ series_unload(_meiStepOffPile);
+ }
+
+ _ripStanderMach = series_play("RIP STANDER", 0, 16, -1, 5, 0, 100, 0, 0, 0, -1);
+ _meiLooksAboutMach = series_play("MEI LOOKS ABOUT", 0, 16, 9, 5, 0, 100, 0, 0, 0, 32);
+ break;
+
+ case 9:
+ digi_play("803m03", 1, 255, 10, -1);
+ break;
+
+ case 10:
+ sendWSMessage_150000(_meiLooksAboutMach, -1);
+ if (_meiLooksAboutMach != nullptr)
+ terminateMachine(_meiLooksAboutMach);
+
+ _ripTalkerPos5 = series_load("RIP TALKER POS 5", -1, nullptr);
+ ws_unhide_walker(_G(my_walker));
+ ws_demand_facing(_G(my_walker), 7);
+ setGlobals1(_ripTalkerPos5, 1, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ sendWSMessage_110000(_G(my_walker), -1);
+ digi_play("803r03", 1, 255, 11, -1);
+ _mcWalkerMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1, 186, 252, 1, Walker::player_walker_callback, "mc");
+ sendWSMessage_10000(_mcWalkerMach, 244, 252, 3, 12, 1);
+ if (_ripStanderMach != nullptr)
+ terminateMachine(_ripStanderMach);
+ break;
+
+ case 11:
+ sendWSMessage_150000(_G(my_walker), -1);
+ ws_unhide_walker(_G(my_walker));
+ break;
+
+ case 12:
+ sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 13, 1);
+ break;
+
+ case 13:
+ case 56:
+ player_set_commands_allowed(true);
+ break;
+
+ case 14:
+ // Nothing
+ break;
+
+ case 50:
+ ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+ ws_walk(_mcWalkerMach, 450, 260, nullptr, 55, 1, true);
+ break;
+
+ case 51:
+ ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+ ws_walk(_mcWalkerMach, 400, 191, nullptr, 55, 1, true);
+ break;
+
+ case 52:
+ ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+ ws_walk(_mcWalkerMach, 390, 220, nullptr, 55, 1, true);
+ break;
+
+ case 53:
+ case 54:
+ ws_walk(_G(my_walker), 202, 239, nullptr, -1, 7, true);
+ sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 55, 1);
+ break;
+
+ case 55:
+ sendWSMessage_10000(_mcWalkerMach, 357, 175, 1, 56, 1);
+ break;
+
+ default:
+ break;
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/room803.h b/engines/m4/riddle/rooms/section8/room803.h
index 3e92a89eebb..3d766690306 100644
--- a/engines/m4/riddle/rooms/section8/room803.h
+++ b/engines/m4/riddle/rooms/section8/room803.h
@@ -33,8 +33,25 @@ public:
Room803() : Room() {}
~Room803() override {}
+ void preload() override;
void init() override;
+ void parser() override;
void daemon() override;
+
+private:
+ int32 _meiStepOffPile = 0;
+ int32 _meiTalksPos3 = 0;
+ int32 _ripTalkerPos5 = 0;
+ int32 _var1 = 0;
+
+ machine *_mcWalkerMach = nullptr;
+ machine *_meiLooksAboutMach = nullptr;
+ machine *_meiStepOffPileMach = nullptr;
+ machine *_ripStanderMach = nullptr;
+
+ void initWalker();
+ void loadWalkSeries();
+ void daemonSub1();
};
} // namespace Rooms
diff --git a/engines/m4/riddle/walker.h b/engines/m4/riddle/walker.h
index a9f33da2831..d5e6fbc3445 100644
--- a/engines/m4/riddle/walker.h
+++ b/engines/m4/riddle/walker.h
@@ -44,7 +44,8 @@ enum {
};
class Walker : public M4::Walker {
-private:
+ // Strangerke : I turned the callback from private to public as it's called by room 803. TODO: Check if it's correct, then update the description accordingly
+public:
/**
* This is called when PLAYER walker code sends system message back to C (used by MAIN PLAYER WALKER ONLY)
*/
More information about the Scummvm-git-logs
mailing list