[Scummvm-git-logs] scummvm master -> 1777de7e8e437d22696e641d193648ec9094e3e8
dreammaster
noreply at scummvm.org
Fri Sep 27 04:56:35 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:
1777de7e8e M4: RIDDLE: In progress room 608 parser
Commit: 1777de7e8e437d22696e641d193648ec9094e3e8
https://github.com/scummvm/scummvm/commit/1777de7e8e437d22696e641d193648ec9094e3e8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-26T21:56:24-07:00
Commit Message:
M4: RIDDLE: In progress room 608 parser
Changed paths:
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section6/room607.cpp
engines/m4/riddle/rooms/section6/room608.cpp
engines/m4/riddle/rooms/section6/room608.h
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index 2485c02cdaf..27d6a0adab2 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -32,6 +32,9 @@ namespace M4 {
namespace Riddle {
namespace Rooms {
+#define HAS(ITEM) (player_said(ITEM) && inv_player_has(ITEM))
+#define HERE(ITEM) (player_said(ITEM) && inv_object_is_here(ITEM))
+
class Room : public M4::Room {
private:
static int _ripSketching;
diff --git a/engines/m4/riddle/rooms/section6/room607.cpp b/engines/m4/riddle/rooms/section6/room607.cpp
index 3baa31ef095..d5868250eb8 100644
--- a/engines/m4/riddle/rooms/section6/room607.cpp
+++ b/engines/m4/riddle/rooms/section6/room607.cpp
@@ -239,7 +239,7 @@ void Room607::parser() {
if (!_G(flags)[V198])
terminateMachineAndNull(_mud);
- ws_unhide_walker();
+ ws_unhide_walker();
player_set_commands_allowed(true);
break;
case 6:
diff --git a/engines/m4/riddle/rooms/section6/room608.cpp b/engines/m4/riddle/rooms/section6/room608.cpp
index 2b5f8477b83..7ac6ac51d24 100644
--- a/engines/m4/riddle/rooms/section6/room608.cpp
+++ b/engines/m4/riddle/rooms/section6/room608.cpp
@@ -203,11 +203,350 @@ void Room608::daemon() {
}
void Room608::pre_parser() {
-
+ bool takeFlag = player_said("take");
+ bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+ if (player_said("HORN/PULL CORD", "WATER") && !_G(flags)[GLB_TEMP_3])
+ _G(player).resetWalk();
+ if (player_said("POLE", "DRIFTWOOD STUMP ") && inv_player_has("POLE"))
+ _G(player).resetWalk();
+ if (useFlag && HERE("POLE"))
+ _G(player).resetWalk();
+ if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && inv_player_has("DRIFTWOOD STUMP"))
+ _G(player).resetWalk();
+ if (takeFlag && HAS("POLE"))
+ _G(player).resetWalk();
}
void Room608::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool talkFlag = player_said_any("talk", "talk to");
+ bool takeFlag = player_said("take");
+ bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
+
+ if (player_said("conv608a")) {
+ conv608a();
+ } else if (_G(kernel).trigger == 747) {
+ _val3 = 1;
+ _val4 = 2;
+ } else if (talkFlag && player_said("old woman")) {
+ if (_G(flags)[GLB_TEMP_7]) {
+ digi_play(_G(flags)[V203] > 2 ? "608r04" : "608r35", 1);
+ } else {
+ if (_G(flags)[V203] >= 2 || !_G(flags)[V034]) {
+ player_set_commands_allowed(false);
+ _G(flags)[V034] = 1;
+
+ player_update_info();
+ _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ ws_hide_walker();
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "rip");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, _rp09, 1, 23, 300, _rp09, 23, 23, 0);
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ _val5 = 0;
+ _val4 = 0;
+ _val3 = 6;
+ conv_load("conv608a", 10, 10, 747);
+ conv_export_value_curr(_G(flags)[V203] >= 3 ? 1 : 0, 0);
+ conv_play();
+ } else {
+ digi_play("608r35", 1);
+ }
+ }
+ } else if (takeFlag && player_said("DRIFTWOOD STUMP") && takeStump1()) {
+ // No implementation
+ } else if (takeFlag && player_said("DRIFTWOOD PUFFIN") && takePuffin()) {
+ // No implementation
+ } else if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && stumpHole()) {
+ // No implementation
+ } else if (takeFlag && player_said("DRIFTWOOD STUMP ") && takeStump2()) {
+ // No implementation
+ } else if (takeFlag && player_said("LIGHTER") && takeLighter()) {
+ // No implementation
+ } else if (player_said("HORN/PULL CORD/WATER", "WATER")) {
+ digi_play("608r72", 1);
+ } else if (player_said("DRIFTWOOD STUMP") && player_said_any("STATUE", "STATUE ")) {
+ digi_play("com019", 1);
+ } else if (player_said("HORN/PULL CORD", "WATER") && hornCordWater()) {
+ // No implementation
+ } else if (lookFlag || useFlag) {
+ // TODO
+ }
+ // TODO
+ else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+void Room608::conv608a() {
+ const char *sound = conv_sound_to_play();
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+
+ if (_G(kernel).trigger == 1) {
+ if (who <= 0) {
+ _val3 = 6;
+ kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+ } else if (who == 1) {
+ _val4 = 0;
+ }
+
+ conv_resume();
+
+ } else if (sound) {
+ if (who <= 0) {
+ if (node == 4 && entry == 0)
+ midi_play("eastiswo", 255, 0, -1, 949);
+ if ((node == 2 && entry == 1) || (node == 3 && entry == 2))
+ _val3 = 7;
+ else if ((node == 2 && entry == 0) || (node == 3 && entry == 1))
+ _val3 = 12;
+ else
+ _val3 = 5;
+ } else if (who == 1) {
+ if (node == 4)
+ _G(flags)[GLB_TEMP_7] = 1;
+ if (!(node == 5 && entry == 3))
+ _val4 = 1;
+ }
+
+ digi_play(sound, 1, 255, 1);
+ } else {
+ conv_resume();
+ }
+}
+
+bool Room608::takeStump1() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_in_scene("DRIFTWOOD STUMP", 600)) {
+ player_set_commands_allowed(false);
+ _ripLowReach = series_load("RIP LOW REACH POS1");
+ setGlobals1(_ripLowReach, 1, 10, 10, 10);
+ sendWSMessage_110000(2);
+ return true;
+ }
+ break;
+
+ case 2:
+ hotspot_set_active("DRIFTWOOD STUMP", false);
+ inv_give_to_player("DRIFTWOOD STUMP");
+ kernel_examine_inventory_object("PING DRIFTWOOD STUMP",
+ 5, 1, 230, 244, 3);
+ return true;
+
+ case 3:
+ sendWSMessage_140000(5);
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room608::takePuffin() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("DRIFTWOOD PUFFIN")) {
+ player_set_commands_allowed(false);
+ _ripLowReach2 = series_load("RIP LOW REACH POS2");
+ setGlobals1(_ripLowReach2, 1, 16, 16, 16);
+ sendWSMessage_110000(2);
+ return true;
+ }
+ break;
+
+ case 2:
+ hotspot_set_active("DRIFTWOOD PUFFIN", false);
+ inv_give_to_player("DRIFTWOOD PUFFIN");
+ kernel_examine_inventory_object("PING DRIFTWOOD PUFFIN",
+ 5, 1, 142, 239, 3);
+ terminateMachineAndNull(_puffin);
+ return true;
+
+ case 3:
+ sendWSMessage_140000(5);
+ return true;
+
+ case 5:
+ series_unload(_ripLowReach2);
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room608::stumpHole() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_player_has("DRIFTWOOD STUMP")) {
+ ws_walk(474, 309, nullptr, 1, 2);
+ return true;
+ }
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+ _ripLowReach = series_load("RIP LOW REACH POS1");
+ setGlobals1(_ripLowReach, 1, 10, 10, 10);
+ sendWSMessage_110000(2);
+ return true;
+
+ case 2:
+ hotspot_set_active("DRIFTWOOD STUMP ", true);
+ inv_move_object("DRIFTWOOD STUMP", 608);
+ _stump = series_show("608ST_UP", 0x400, 16);
+ sendWSMessage_140000(5);
+ digi_play("608_s02", 2);
+ return true;
+
+ case 5:
+ series_unload(_ripLowReach);
+ player_set_commands_allowed(true);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room608::takeStump2() {
+ if (inv_object_is_here("POLE")) {
+ digi_play("608r74", 1);
+ return true;
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(474, 309, nullptr, 1, 2);
+ return true;
+
+ case 1:
+ player_set_commands_allowed(false);
+ _ripLowReach = series_load("RIP LOW REACH POS1");
+ setGlobals1(_ripLowReach, 1, 10, 10, 10);
+ sendWSMessage_110000(2);
+ return true;
+
+ case 2:
+ hotspot_set_active("DRIFTWOOD STUMP ", false);
+ terminateMachineAndNull(_stump);
+ inv_give_to_player("DRIFTWOOD STUMP");
+ sendWSMessage_140000(5);
+ return true;
+
+ case 5:
+ series_unload(_ripLowReach);
+ player_set_commands_allowed(true);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+ }
+}
+
+bool Room608::takeLighter() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("LIGHTER")) {
+ player_set_commands_allowed(false);
+ _ripLowReach = series_load("RIP LOW REACH POS1");
+ return true;
+ }
+ break;
+
+ case 2:
+ hotspot_set_active("LIGHTER", false);
+ inv_give_to_player("LIGHTER");
+ kernel_examine_inventory_object("PING LIGHTER", 5, 1, 455, 250, 3);
+ terminateMachineAndNull(_lighter);
+ return true;
+
+ case 3:
+ sendWSMessage_140000(5);
+ return true;
+
+ case 5:
+ series_unload(_ripLowReach);
+ player_set_commands_allowed(true);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room608::hornCordWater() {
+ if (_G(flags)[V193]) {
+ digi_play("com118", 1);
+ return true;
+ } else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(64, 354, nullptr, 1, 7);
+ return true;
+
+ case 1:
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_hide_walker();
+ digi_preload("608_s08");
+
+ _shadow5 = series_show("safari shadow 5", _G(player_info).depth, 144, -1, -1, 0,
+ _G(player_info).scale, _G(player_info).x, _G(player_info.y));
+ _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "ol");
+ sendWSMessage_10000(1, _ol2, _horn, 1, 16, 2, _horn, 16, 16, 0);
+ return true;
+
+ case 2:
+ sendWSMessage_10000(1, _ol2, _horn, 17, 37, 3, _horn, 37, 37, 0);
+ digi_play("608_s08", 2);
+ return true;
+
+ case 3:
+ inv_give_to_player("HORN/PULL CORD/WATER");
+ inv_move_object("HORN/PULL CORD", NOWHERE);
+ kernel_examine_inventory_object("PING HORN/PULL CORD/WATER",
+ 5, 1, 42, 239, 4);
+ return true;
+
+ case 4:
+ digi_unload("608_s08");
+ terminateMachineAndNull(_ol2);
+ series_unload(_horn);
+ terminateMachineAndNull(_shadow5);
+ ws_unhide_walker();
+ _G(flags)[GLB_TEMP_3] = 1;
+ player_set_commands_allowed(true);
+ digi_play("608r65", 1);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room608.h b/engines/m4/riddle/rooms/section6/room608.h
index 2733ce6725a..e82825022e8 100644
--- a/engines/m4/riddle/rooms/section6/room608.h
+++ b/engines/m4/riddle/rooms/section6/room608.h
@@ -33,6 +33,8 @@ private:
int _rp01 = 0;
int _rp09 = 0;
int _ripHandChin = 0;
+ int _ripLowReach = 0;
+ int _ripLowReach2 = 0;
int _ripTalker = 0;
int _tt01 = 0;
int _tt02 = 0;
@@ -50,8 +52,13 @@ private:
int _all5a = 0;
int _loop0 = 0;
int _loop1 = 0;
+ int _horn = 0;
+ machine *_ripley = nullptr;
+ machine *_shadow = nullptr;
+ machine *_shadow5 = nullptr;
machine *_tt = nullptr;
machine *_ol = nullptr;
+ machine *_ol2 = nullptr;
machine *_stump = nullptr;
machine *_lighter = nullptr;
machine *_pole = nullptr;
@@ -61,6 +68,16 @@ private:
int _val1 = 0;
int _val2 = 0;
int _val3 = 0;
+ int _val4 = 0;
+ int _val5 = 0;
+
+ void conv608a();
+ bool takeStump1();
+ bool takePuffin();
+ bool stumpHole();
+ bool takeStump2();
+ bool takeLighter();
+ bool hornCordWater();
public:
Room608() : Room() {}
More information about the Scummvm-git-logs
mailing list