[Scummvm-git-logs] scummvm master -> 0298a79b0d46c0d5068748e9d135f27cb231a63d
Strangerke
noreply at scummvm.org
Wed Oct 9 12:10:44 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:
0298a79b0d M4: RIDDLE: WIP room 801
Commit: 0298a79b0d46c0d5068748e9d135f27cb231a63d
https://github.com/scummvm/scummvm/commit/0298a79b0d46c0d5068748e9d135f27cb231a63d
Author: Strangerke (arnaud.boutonne at gmail.com)
Date: 2024-10-09T14:10:38+02:00
Commit Message:
M4: RIDDLE: WIP room 801
Changed paths:
engines/m4/riddle/rooms/section8/room801.cpp
engines/m4/riddle/rooms/section8/room801.h
engines/m4/riddle/rooms/section8/section8.cpp
engines/m4/riddle/rooms/section8/section8.h
diff --git a/engines/m4/riddle/rooms/section8/room801.cpp b/engines/m4/riddle/rooms/section8/room801.cpp
index 67942382cd4..b0cad391e04 100644
--- a/engines/m4/riddle/rooms/section8/room801.cpp
+++ b/engines/m4/riddle/rooms/section8/room801.cpp
@@ -20,6 +20,10 @@
*/
#include "m4/riddle/rooms/section8/room801.h"
+
+#include "section8.h"
+#include "glk/zcode/glk_interface.h"
+#include "m4/core/cstring.h"
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
@@ -27,12 +31,206 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+static const char *const SAID[][2] = {
+{ "farmer", "801r10" },
+{ "rice paddies", "801r11" },
+{ "root cellar", "801r29" },
+{ "root cellar ", "801r29" },
+{ "root cellar ", "801r14" },
+{ "garden fence", "801r17" },
+{ "earthen jugs", "801r18" },
+{ nullptr, nullptr }
+};
+
+
+void Room801::preload() {
+ mouse_show();
+
+ if (!_G(flags)[V260])
+ interface_show();
+
+ LoadWSAssets("OTHER SCRIPT", _G(master_palette));
+ _G(player).walker_type = WALKER_ALT;
+ _G(player).shadow_type = SHADOW_ALT;
+}
+
void Room801::init() {
+ if (!player_been_here(201) && !player_been_here(801)) {
+ inv_give_to_player("CHINESE YUAN");
+ }
+
+ digi_preload("801_s02", -1);
+ digi_play_loop("801_s02", 3, 100, -1, -1);
+ _roomStates_field64 = series_load("farmer displacement", -1, nullptr);
+ _roomStates_field74 = series_load("farmer talk loop", -1, nullptr);
+ _roomStates_field6C = series_load("farmer give take bow", -1, nullptr);
+ _roomStates_field78 = series_load("mei prattle loop", -1, nullptr);
+ _roomStates_loop1 = series_load("rip kneel to pottery", -1, nullptr);
+ _roomStates_loop2 = series_load("rip enters root cellar", -1, nullptr);
+ _roomStates_loop6 = series_load("rip trek head turn pos5", -1, nullptr);
+ _roomStates_loop7 = series_load("rptmr15", -1, nullptr);
+ _roomStates_val1 = series_load("rip trek hand on chin pos2", -1, nullptr);
+ _roomStates_ear2 = series_load("rip trek hands beh back pos1", -1, nullptr);
+ _roomStates_val3 = series_load("rip trek nod pos4", -1, nullptr);
+ _roomStates_val2 = series_load("rip looks l r down", -1, nullptr);
+ series_load("SAFARI SHADOW 5", -1, nullptr);
+ _roomStates_loop4 = series_load("MCTSH1", -1, nullptr);
+ _roomStates_field96h = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1024, 0, triggerMachineByHashCallbackNegative, "farmer displacement");
+ sendWSMessage_10000(1, _roomStates_field96h, _roomStates_field64, 1, 14, 0, _roomStates_field64, 14, 14, 0);
+ _roomStates_field9Ah = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 151, 317, 100, 1280, 0, triggerMachineByHashCallbackNegative, "farmer shadow");
+ sendWSMessage_10000(1, _roomStates_field9Ah, _roomStates_loop4, 1, 1, -1, _roomStates_loop4, 1, 1, 0);
+ if (inv_player_has("farmer's shovel"))
+ hotspot_set_active(_G(currentSceneDef).hotspots, "farmer's shovel", false);
+ else {
+ _roomStates_field80 = series_load("801 SHOVEL ", -1, nullptr);
+ _roomStates_field86h = series_place_sprite("801 SHOVEL ", 0, 0, 0, 100, 1024);
+ }
+
+ if (_G(game).previous_room == 850) {
+ _G(flags) [V250] = 0;
+ _G(flags) [V251] = 0;
+ _G(flags) [V252] = 0;
+ _G(flags) [V273] = 0;
+
+ _roomStates_tt = 0;
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
+ _roomStates_ripTalk = series_load("CELLAR DOOR CLOSED", -1, nullptr);
+ _roomStates_fieldA6h = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
+ _G(player).disable_hyperwalk = true;
+ player_set_commands_allowed(false);
+ _G(kernel).call_daemon_every_loop = true;
+ ws_demand_facing(_G(my_walker), 3);
+ ws_demand_location(_G(my_walker), 20, 270);
+ _roomStates_field68 = series_load("farmer earthquake gesture", -1, nullptr);
+ _roomStates_loop0 = series_load("rip looks to zero", -1, nullptr);
+ _roomStates_field7C = series_load("mei looks to zero", -1, nullptr);
+ _roomStates_field70 = series_load("farmer looks to zero", -1, nullptr);
+ _roomStates_field60 = series_load("shadow of de plane", -1, nullptr);
+ ws_walk_load_shadow_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1);
+ ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2);
+ _roomStates_field9Eh = triggerMachineByHash_3000(8, 4, S8_SHADOW_DIRS2, S8_SHADOW_DIRS1,
+ 20, 310, 3, triggerMachineByHashCallback3000, "mc_trek");
+ kernel_timing_trigger(60, 1, nullptr);
+ } else if (_G(game).previous_room < 850 || _G(game).previous_room != -2) {
+ // CHECKME: the second part of the check is useless. That's suspicious.
+ ws_demand_facing(_G(my_walker), 8);
+ ws_demand_location(_G(my_walker), 525, 301);
+ _roomStates_loop3 = series_load("rip returns from root cellar", -1, nullptr);
+ _roomStates_tt = 1;
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
+ _roomStates_field24 = series_load("CELLAR DOOR OPEN", -1, nullptr);
+ _roomStates_fieldAAh = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
+ kernel_timing_trigger(10, 7, nullptr);
+ } else {
+ if (_roomStates_tt) {
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
+ _roomStates_field24 = series_load("CELLAR DOOR OPEN", -1, nullptr);
+ _roomStates_fieldAAh = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
+ } else {
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
+ hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
+ _roomStates_ripTalk = series_load("CELLAR DOOR CLOSED", -1, nullptr);
+ _roomStates_fieldA6h = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
+ }
+
+ _roomStates_field9Eh = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1280, 0, triggerMachineByHashCallbackNegative, "mc talk frames");
+ _roomStates_fieldA2h = series_show("SAFARI SHADOW 5", 1280, 16, -1, -1, 0, 50, 124, 304);
+ sendWSMessage_10000(1, _roomStates_field9Eh, _roomStates_field78, 42, 42, 0, _roomStates_field78, 42, 42, 0);
+ }
+}
+
+void Room801::pre_parser() {
+ player_said("take", nullptr, nullptr);
+ bool lookCheck = false;
+ if (player_said("look", nullptr, nullptr) || player_said("look at", nullptr, nullptr)) {
+ lookCheck = true;
+ }
+
+ if (player_said("push", nullptr, nullptr) || player_said("pull", nullptr, nullptr)
+ || player_said("gear", nullptr, nullptr) || player_said("open", nullptr, nullptr)) {
+ player_said("close", nullptr, nullptr);
+ }
+
+ player_said("go", nullptr, nullptr);
+ if (lookCheck && player_said("farm", nullptr, nullptr)) {
+ digi_play("801R23", 1, 255, -1, -1);
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+
+ if (lookCheck && player_said(" ", nullptr, nullptr)) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+}
+
+void Room801::parser() {
+ bool lookFl = false;
+ bool takeFl = false;
+ bool gearFl = false;
+ bool talkFl = false;
+ bool goFl = false;
+
+ if (player_said("look", nullptr, nullptr) || player_said("look at", nullptr, nullptr)) {
+ lookFl = true;
+ }
+
+ if (player_said("talk", nullptr, nullptr) || player_said("talk TO", nullptr, nullptr)) {
+ talkFl = true;
+ }
+
+ if (player_said("take", nullptr, nullptr)) {
+ takeFl = true;
+ }
+
+ if (player_said("gear", nullptr, nullptr)) {
+ gearFl = true;
+ }
+
+ if (player_said("go", nullptr, nullptr)) {
+ goFl = true;
+ }
+
+ if (player_said("conv801a", nullptr, nullptr)) {
+ room801_conv801a();
+ _G(player).command_ready = false;
+ return;
+ }
+
+ if (_G(kernel).trigger == 747) {
+ _roomStates_ripTalker = 4;
+ _roomStates_pu = 8;
+ _roomStates_field18 = 5;
+ conv_shutdown();
+ player_set_commands_allowed(true);
+ _G(player).command_ready = false;
+ return;
+ }
+
+ if (lookFl && _G(walker).ripley_said(SAID)) {
+ _G(player).command_ready = false;
+ return;
+ }
+
+
+ _G(player).command_ready = false;
}
void Room801::daemon() {
}
+void Room801::room801_conv801a() {
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section8/room801.h b/engines/m4/riddle/rooms/section8/room801.h
index 2182ae25766..3999bc1989e 100644
--- a/engines/m4/riddle/rooms/section8/room801.h
+++ b/engines/m4/riddle/rooms/section8/room801.h
@@ -33,8 +33,49 @@ public:
Room801() : Room() {}
~Room801() override {}
+ void preload() override;
void init() override;
+ void pre_parser() override;
+ void parser() override;
void daemon() override;
+
+private:
+ void room801_conv801a();
+
+ int32 _roomStates_ear2 = 0;
+ int32 _roomStates_field18 = 0;
+ int32 _roomStates_field24 = 0;
+ int32 _roomStates_field60 = 0;
+ int32 _roomStates_field64 = 0;
+ int32 _roomStates_field68 = 0;
+ int32 _roomStates_field70 = 0;
+ int32 _roomStates_field74 = 0;
+ int32 _roomStates_field6C = 0;
+ int32 _roomStates_field78 = 0;
+ int32 _roomStates_field7C = 0;
+ int32 _roomStates_field80 = 0;
+ int32 _roomStates_loop0 = 0;
+ int32 _roomStates_loop1 = 0;
+ int32 _roomStates_loop2 = 0;
+ int32 _roomStates_loop3 = 0;
+ int32 _roomStates_loop4 = 0;
+ int32 _roomStates_loop6 = 0;
+ int32 _roomStates_loop7 = 0;
+ int32 _roomStates_pu = 0;
+ int32 _roomStates_ripTalk = 0;
+ int32 _roomStates_ripTalker = 0;
+ int32 _roomStates_tt = 0;
+ int32 _roomStates_val1 = 0;
+ int32 _roomStates_val2 = 0;
+ int32 _roomStates_val3 = 0;
+
+ machine *_roomStates_field86h = nullptr;
+ machine *_roomStates_field96h = nullptr;
+ machine *_roomStates_field9Ah = nullptr;
+ machine *_roomStates_fieldA6h = nullptr;
+ machine *_roomStates_field9Eh = nullptr;
+ machine *_roomStates_fieldA2h = nullptr;
+ machine *_roomStates_fieldAAh = nullptr;
};
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section8/section8.cpp b/engines/m4/riddle/rooms/section8/section8.cpp
index d63ef4646ee..59c032f638e 100644
--- a/engines/m4/riddle/rooms/section8/section8.cpp
+++ b/engines/m4/riddle/rooms/section8/section8.cpp
@@ -26,6 +26,25 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+const int16 S8_SHADOW_DIRS1[] = { 230, 231, 232, 233, 234, -1 };
+const char *S8_SHADOW_NAMES1[] = {
+ "mctsh1",
+ "mctsh2",
+ "mctsh3",
+ "mctsh4",
+ "mctsh5"
+};
+
+const int16 S8_SHADOW_DIRS2[] = {220, 221, 222, 223, 224, -1};
+const char *S8_SHADOW_NAMES2[] = {
+ "mei chen trek walk pos1",
+ "mei chen trek walk pos2",
+ "mei chen trek walk pos3",
+ "mei chen trek walk pos4",
+ "mei chen trek walk pos5"
+};
+
+
Section8::Section8() : Rooms::Section() {
add(801, &_room801);
add(802, &_room802);
diff --git a/engines/m4/riddle/rooms/section8/section8.h b/engines/m4/riddle/rooms/section8/section8.h
index 76dcf1b80ad..340d56327ec 100644
--- a/engines/m4/riddle/rooms/section8/section8.h
+++ b/engines/m4/riddle/rooms/section8/section8.h
@@ -47,6 +47,12 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+extern const int16 S8_SHADOW_DIRS1[];
+extern const char *S8_SHADOW_NAMES1[];
+
+extern const int16 S8_SHADOW_DIRS2[];
+extern const char *S8_SHADOW_NAMES2[];
+
class Section8 : public Section {
private:
Room801 _room801;
More information about the Scummvm-git-logs
mailing list