[Scummvm-git-logs] scummvm master -> e6e5e52781923a24822a061ef63fc3ae8cea1451
dreammaster
noreply at scummvm.org
Wed Aug 7 04:52:01 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:
e66db12995 M4: RIDDLE: Added room 401 init, conv401a
e6e5e52781 M4: RIDDLE: Added room 401 parser
Commit: e66db1299562c7a933c298f10a49663691a5cf0a
https://github.com/scummvm/scummvm/commit/e66db1299562c7a933c298f10a49663691a5cf0a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-06T20:13:01-07:00
Commit Message:
M4: RIDDLE: Added room 401 init, conv401a
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section4/room401.cpp
engines/m4/riddle/rooms/section4/room401.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index 6b5f85fd033..c8b85e7a245 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -386,6 +386,55 @@ int Room::getNumKeyItemsPlaced() const {
return total;
}
+bool Room::setItemsPlacedFlags() {
+ int count = getNumKeyItemsPlaced();
+
+ switch (_G(flags)[V005]) {
+ case 0:
+ if (_G(flags)[V006] >= 2 && getNumKeyItemsPlaced() == 0) {
+ _G(flags)[V005] += 1;
+ return true;
+ }
+ break;
+
+ case 1:
+ case 2:
+ case 3:
+ if ((_G(flags)[V006] >= 15 && count < 9) ||
+ (_G(flags)[V006] >= 10 && count < 6) ||
+ (_G(flags)[V006] >= 5 && count < 3)) {
+ _G(flags)[V005] += 1;
+ return true;
+ }
+ break;
+
+ case 4:
+ case 5:
+ if ((_G(flags)[V006] >= 15 && count < 9) ||
+ (_G(flags)[V006] >= 10 && count < 6) ||
+ (_G(flags)[V006] >= 5 && count < 3)) {
+ if (_G(flags)[V005] == 4)
+ _G(flags)[V005]++;
+ return true;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ _G(flags)[GLB_TEMP_1] = 0;
+ return false;
+}
+
+const char *Room::getItemsPlacedDigi() const {
+ static const char *NAMES[5] = {
+ "301r18", "301r19", "301r20", "301r21", "301r38"
+ };
+ int val = _G(flags)[V005];
+ return (val >= 1 && val <= 5) ? NAMES[val - 1] : nullptr;
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 4926f29af63..ed10a0e4e37 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -99,6 +99,9 @@ protected:
*/
int getNumKeyItemsPlaced() const;
+ bool setItemsPlacedFlags();
+ const char *getItemsPlacedDigi() const;
+
public:
Room() : M4::Room() {}
~Room() override {}
diff --git a/engines/m4/riddle/rooms/section4/room401.cpp b/engines/m4/riddle/rooms/section4/room401.cpp
index 9252bb1a4c0..a174c4b5bbd 100644
--- a/engines/m4/riddle/rooms/section4/room401.cpp
+++ b/engines/m4/riddle/rooms/section4/room401.cpp
@@ -27,10 +27,163 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+void Room401::preload() {
+ _G(player).walker_type = 1;
+ _G(player).shadow_type = 1;
+ LoadWSAssets("other script");
+}
+
void Room401::init() {
+ digi_preload("950_s01");
+
+ if (_G(game).previous_room != KERNEL_RESTORING_GAME)
+ _val1 = _val2 = 0;
+
+ _val4 = 0;
+ _digiName = nullptr;
+
+ _401a01 = series_load("401A01");
+ _401a02 = series_load("401A02");
+ _401a03 = series_load("401A03");
+ _401a04 = series_load("401A04");
+ _401a05 = series_load("401A05");
+ _401a06 = series_load("401A06");
+ _401a01 = series_load("401A01");
+
+ _rip1 = series_load("rip trek hand talk pos3");
+ _rip2 = series_load("RIP TREK ARMS X POS3");
+ _rip3 = series_load("RIP HEAD DOWN TALK OFF TD33");
+ _rip4 = series_load("RIP TREK TALKER POS3");
+ _401rp01 = series_load("401rp01");
+
+ _agent = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x500, 0,
+ triggerMachineByHashCallbackNegative, "agent");
+ sendWSMessage_10000(1, _agent, _401a01, 1, 1, 100, _401a01, 1, 1, 0);
+ _val5 = 1;
+ _val6 = 0;
+
+ if (_G(game).previous_room <= 495 && _G(game).previous_room != KERNEL_RESTORING_GAME) {
+ _val1 = checkFlags(true);
+ _G(flags)[V006]++;
+
+ if (setItemsPlacedFlags()) {
+ _digiName = getItemsPlacedDigi();
+ ++_val1;
+ }
+
+ player_set_commands_allowed(false);
+ ws_demand_location(66, 266, 3);
+
+ if (_val1 ||
+ !_G(flags)[GLB_TEMP_14] ||
+ (_G(flags)[V110] && !_G(flags)[GLB_TEMP_10]) ||
+ (_G(flags)[GLB_TEMP_11] && player_been_here(407) && !_G(flags)[GLB_TEMP_13]) ||
+ (_G(flags)[GLB_TEMP_12] && !_G(flags)[V091])
+ ) {
+ ws_walk(346, 267, 0, 7, 3, 1);
+ } else {
+ ws_walk(158, 266, 0, 7, 3, 1);
+ }
+ }
+
+ digi_play_loop("950_s01", 3, 140);
}
void Room401::daemon() {
+
+}
+
+void Room401::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool takeFlag = player_said("take");
+ bool useFlag = player_said("gear");
+
+ if (player_said("conv401a")) {
+ conv401a();
+ }
+ // TODO
+ else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+void Room401::conv401a() {
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+ const char *sound = conv_sound_to_play();
+
+ if (_G(kernel).trigger == 1) {
+ if (who <= 0) {
+ if (node == 3)
+ return;
+
+ _val6 = 4;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 100);
+ _G(kernel).trigger_mode = KT_PARSE;
+ } else if (who == 1) {
+ if (node == 1 && entry == 1) {
+
+ } else {
+ conv_set_box_xy(10, 10);
+ }
+
+ if (node == 1 && entry == 3) {
+ _val6 = 9;
+ _val3 = 0;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 200);
+ _G(kernel).trigger_mode = KT_PARSE;
+ return;
+ }
+
+ _val3 = 0;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 200);
+ _G(kernel).trigger_mode = KT_PARSE;
+ }
+
+ conv_resume();
+
+ } else if (!sound) {
+ conv_resume();
+
+ } else {
+ if (who <= 0) {
+ if (node == 3) {
+ _val6 = 8;
+ _G(flags)[GLB_TEMP_8] = 0;
+ } else if (node == 2 && entry == 0) {
+ _val6 = 10;
+ return;
+ } else {
+ _val6 = 5;
+ }
+ } else if (who == 1) {
+#define ITEM(NODE, ENTRY, ITEM) if (node == NODE && entry == ENTRY) inv_move_object(ITEM, 305)
+ ITEM(11, 0, "CRYSTAL SKULL");
+ ITEM(11, 1, "STICK AND SHELL MAP");
+ ITEM(11, 2, "WHEELED TOY");
+ ITEM(11, 3, "REBUS AMULET");
+ ITEM(11, 4, "SHRUNKEN HEAD");
+ ITEM(11, 5, "SILVER BUTTERFLY");
+ ITEM(11, 6, "POSTAGE STAMP");
+ ITEM(11, 7, "GERMAN BAKNOTE");
+ ITEM(11, 8, "WHALE BONE HORN");
+ ITEM(11, 9, "CHISEL");
+ ITEM(11, 10, "INCENSE BURNER");
+ ITEM(11, 11, "ROMANOV EMERALD");
+#undef ITEM
+
+ if (node != 11)
+ _val3 = 1;
+ }
+
+ digi_play(sound, 1, 255, 1);
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room401.h b/engines/m4/riddle/rooms/section4/room401.h
index 2bef956874e..4e5d06e73f1 100644
--- a/engines/m4/riddle/rooms/section4/room401.h
+++ b/engines/m4/riddle/rooms/section4/room401.h
@@ -29,12 +29,37 @@ namespace Riddle {
namespace Rooms {
class Room401 : public Room {
+private:
+ int _val1 = 0;
+ int _val2 = 0;
+ int _val3 = 0;
+ int _val4 = 0;
+ int _val5 = 0;
+ int _val6 = 0;
+ int _401a01 = 0;
+ int _401a02 = 0;
+ int _401a03 = 0;
+ int _401a04 = 0;
+ int _401a05 = 0;
+ int _401a06 = 0;
+ int _401rp01 = 0;
+ int _rip1 = 0;
+ int _rip2 = 0;
+ int _rip3 = 0;
+ int _rip4 = 0;
+ machine *_agent = nullptr;
+ const char *_digiName = nullptr;
+
+ void conv401a();
+
public:
Room401() : Room() {}
~Room401() override {}
+ void preload() override;
void init() override;
void daemon() override;
+ void parser() override;
};
} // namespace Rooms
Commit: e6e5e52781923a24822a061ef63fc3ae8cea1451
https://github.com/scummvm/scummvm/commit/e6e5e52781923a24822a061ef63fc3ae8cea1451
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-06T21:51:45-07:00
Commit Message:
M4: RIDDLE: Added room 401 parser
Changed paths:
engines/m4/riddle/rooms/section4/room401.cpp
engines/m4/riddle/rooms/section4/room401.h
diff --git a/engines/m4/riddle/rooms/section4/room401.cpp b/engines/m4/riddle/rooms/section4/room401.cpp
index a174c4b5bbd..eef8db9ac9e 100644
--- a/engines/m4/riddle/rooms/section4/room401.cpp
+++ b/engines/m4/riddle/rooms/section4/room401.cpp
@@ -100,9 +100,148 @@ void Room401::parser() {
if (player_said("conv401a")) {
conv401a();
- }
- // TODO
- else {
+ } else if (_G(kernel).trigger == 747) {
+ if (_val4) {
+ switch (_val4) {
+ case 1:
+ _G(flags)[V129] = 1;
+ break;
+ case 2:
+ _G(flags)[V129] = 0;
+ break;
+ case 3:
+ _G(flags)[V129] = 4;
+ break;
+ case 4:
+ _G(flags)[V129] = 3;
+ break;
+ default:
+ break;
+ }
+
+ disable_player_commands_and_fade_init(748);
+ }
+
+ _val6 = 0;
+ _val3 = 3;
+ } else if (_G(kernel).trigger == 748) {
+ _G(flags)[V322] = 0;
+ _G(game).setRoom(495);
+ } else if (player_said("talk to", "agent")) {
+ ws_hide_walker();
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _ripMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x400, 0,
+ triggerMachineByHashCallbackNegative, "rip");
+ sendWSMessage_10000(1, _ripMach, _401rp01, 1, 11, 200, _401rp01, 11, 11, 0);
+
+ _val7 = 0;
+ _val3 = 0;
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ conv_load("conv401a", 10, 10, 747);
+ conv_export_value_curr(_G(flags)[V088] < 3 ? 0 : 1, 1);
+ conv_export_pointer_curr(&_val4, 2);
+ conv_export_value_curr(inv_player_has("POMERANIAN MARKS") ? 1 : 0, 3);
+ conv_export_value_curr(_G(flags)[V110], 4);
+ conv_export_value_curr(getItemCount() ? 1 : 0, 5);
+
+ #define EXPORT(INDEX, NAME) conv_export_value_curr(inv_player_has(NAME) ? 1 : 0, INDEX)
+ EXPORT(6, "CRYSTAL SKULL");
+ EXPORT(7, "STICK AND SHELL MAP");
+ EXPORT(8, "WHEELED TOY");
+ EXPORT(9, "REBUS AMULET");
+ EXPORT(10, "SHRUNKEN HEAD");
+ EXPORT(11, "SILVER BUTTERFLY");
+ EXPORT(12, "POSTAGE STAMP");
+ EXPORT(13, "GERMAN BANKNOTE");
+ EXPORT(14, "WHALE BONE HORN");
+ EXPORT(15, "CHISEL");
+ EXPORT(16, "INCENSE BURNER");
+ EXPORT(17, "ROMANOV EMERALD");
+
+ conv_play();
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _val6 = 4;
+ } else if (lookFlag && player_said(" ")) {
+ digi_play("COM001", 1, 255, -1, 997);
+ } else if (takeFlag && player_said("BEER STEIN")) {
+ digi_play("203r58", 1);
+ } else if (lookFlag && player_said("BEER STEIN")) {
+ if (_G(flags)[GLB_TEMP_9]) {
+ digi_play("401R07", 1);
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ digi_play("401R05", 1, 255, 3);
+ kernel_timing_trigger(1, 230);
+ break;
+ case 1:
+ player_update_info();
+ ws_walk(_G(player_info).x + 1, _G(player_info).y,
+ nullptr, 2, 3);
+ _val6 = 4;
+ break;
+ case 2:
+ setGlobals1(_rip1, 1, 7, 8, 9, 1);
+ sendWSMessage_110000(-1);
+ break;
+ case 3:
+ sendWSMessage_140000(-1);
+ _val6 = 5;
+ digi_play("401x06", 1, 255, 4);
+ break;
+ case 4:
+ setGlobals1(_rip1, 1, 7, 8, 9, 1);
+ sendWSMessage_110000(-1);
+ _val6 = 4;
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 100);
+ _G(kernel).trigger_mode = KT_PARSE;
+ digi_play("401r06", 1, 255, 5);
+ break;
+ case 5:
+ sendWSMessage_140000(-1);
+ _val6 = 5;
+ digi_play("401x07", 1, 255, 6);
+ break;
+ case 6:
+ _val6 = 0;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 100);
+ _G(kernel).trigger_mode = KT_PARSE;
+ _G(flags)[GLB_TEMP_9] = 1;
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("POSTCARD RACK")) {
+ // No implementation
+ } else if (useFlag && player_said_any("SOFA", "CHAIR")) {
+ digi_play("COM025", 1, 255, -1, 997);
+ } else if (useFlag && player_said("TELEPHONE")) {
+ digi_play("COM026", 1, 255, -1, 997);
+ } else if ((useFlag || takeFlag) && player_said("COAT")) {
+ digi_play("203R58", 1);
+ } else if (takeFlag && player_said("POSTCARD RACK")) {
+ digi_play("COM004", 1, 255, -1, 997);
+ } else if (takeFlag && player_said("MAGAZINE")) {
+ digi_play("COM005", 1, 255, -1, 997);
+ } else if (player_said("exit")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ disable_player_commands_and_fade_init(3);
+ break;
+ case 3:
+ _G(game).setRoom(410);
+ break;
+ default:
+ break;
+ }
+ } else {
return;
}
@@ -186,6 +325,22 @@ void Room401::conv401a() {
}
}
+int Room401::getItemCount() const {
+ int count = 0;
+ static const char *NAMES[12] = {
+ "SHRUNKEN HEAD", "INCENSE BURNER", "CRYSTAL SKULL",
+ "WHALE BONE HORN", "WHEELED TOY", "SILVER BUTTERFLY",
+ "REBUS AMULET", "CHISEL", "GERMAN BANKNOTE",
+ "POSTAGE STAMP", "STICK AND SHELL MAP", "ROMANOV EMERALD"
+ };
+ for (int i = 0; i < 12; ++i) {
+ if (inv_player_has(NAMES[i]))
+ ++count;
+ }
+
+ return count;
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section4/room401.h b/engines/m4/riddle/rooms/section4/room401.h
index 4e5d06e73f1..6cc4f2f6526 100644
--- a/engines/m4/riddle/rooms/section4/room401.h
+++ b/engines/m4/riddle/rooms/section4/room401.h
@@ -33,9 +33,10 @@ private:
int _val1 = 0;
int _val2 = 0;
int _val3 = 0;
- int _val4 = 0;
+ int32 _val4 = 0;
int _val5 = 0;
int _val6 = 0;
+ int _val7 = 0;
int _401a01 = 0;
int _401a02 = 0;
int _401a03 = 0;
@@ -48,9 +49,11 @@ private:
int _rip3 = 0;
int _rip4 = 0;
machine *_agent = nullptr;
+ machine *_ripMach = nullptr;
const char *_digiName = nullptr;
void conv401a();
+ int getItemCount() const;
public:
Room401() : Room() {}
More information about the Scummvm-git-logs
mailing list