[Scummvm-git-logs] scummvm master -> 6bf5686ab96c75975d7cb68df319294949a3ee35
dreammaster
noreply at scummvm.org
Sat Aug 17 03:57:05 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:
03b73e8947 M4: RIDDLE: Added room 404 pre-parser
6bf5686ab9 M4: RIDDLE: Added room 404 parser
Commit: 03b73e8947453571150e3895be2c071db27b7232
https://github.com/scummvm/scummvm/commit/03b73e8947453571150e3895be2c071db27b7232
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-16T20:18:22-07:00
Commit Message:
M4: RIDDLE: Added room 404 pre-parser
Changed paths:
engines/m4/riddle/rooms/section4/room404.cpp
diff --git a/engines/m4/riddle/rooms/section4/room404.cpp b/engines/m4/riddle/rooms/section4/room404.cpp
index 4b41f946e78..035ab3569b1 100644
--- a/engines/m4/riddle/rooms/section4/room404.cpp
+++ b/engines/m4/riddle/rooms/section4/room404.cpp
@@ -123,7 +123,24 @@ void Room404::daemon() {
}
void Room404::pre_parser() {
- // TODO
+ bool takeFlag = player_said("take");
+ bool lookFlag = player_said_any("look", "look at");
+ bool useFlag = player_said_any("push", "pull", "gear",
+ "open", "close");
+
+ if ((player_said("SITTING ROOM") && (lookFlag || useFlag || takeFlag)) ||
+ (lookFlag && player_said(" "))) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
+
+ if (player_said("journal") && !takeFlag && !lookFlag &&
+ _G(kernel).trigger == -1) {
+ _G(player).need_to_walk = false;
+ _G(player).ready_to_walk = true;
+ _G(player).waiting_for_walk = false;
+ }
}
void Room404::parser() {
Commit: 6bf5686ab96c75975d7cb68df319294949a3ee35
https://github.com/scummvm/scummvm/commit/6bf5686ab96c75975d7cb68df319294949a3ee35
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-08-16T20:56:57-07:00
Commit Message:
M4: RIDDLE: Added room 404 parser
Changed paths:
engines/m4/riddle/rooms/section4/room404.cpp
engines/m4/riddle/rooms/section4/room404.h
diff --git a/engines/m4/riddle/rooms/section4/room404.cpp b/engines/m4/riddle/rooms/section4/room404.cpp
index 035ab3569b1..1ecb11b633e 100644
--- a/engines/m4/riddle/rooms/section4/room404.cpp
+++ b/engines/m4/riddle/rooms/section4/room404.cpp
@@ -39,6 +39,16 @@ static const char *SHADOW_NAMES[] = {
"wolf walker shadow pos3"
};
+static const char *const SAID[][2] = {
+ { "DOOR", "404r10" },
+ { "BUTLER", "404r30" },
+ { "HUGE DOOR", "404r11" },
+ { "LARGE PAINTING", "404r13" },
+ { "PAINTING", "404r14" },
+ { "RUG", "404r12" },
+ { nullptr, nullptr }
+};
+
void Room404::preload() {
_G(player).walker_type = 1;
_G(player).shadow_type = 1;
@@ -144,7 +154,176 @@ void Room404::pre_parser() {
}
void Room404::parser() {
- // TODO
+ bool lookFlag = player_said_any("look", "look at");
+ bool talkFlag = player_said_any("talk", "talk to");
+ bool takeFlag = player_said("take");
+ bool enterFlag = player_said("enter");
+ bool useFlag = player_said_any("push", "pull", "gear",
+ "open", "close");
+
+ if (player_said("conv404a")) {
+ if (_G(kernel).trigger == 1) {
+ _val6 = 1103;
+ _val8 = 2102;
+ conv_resume();
+ } else {
+ conv404a();
+ }
+ } else if (player_said("-", " ")) {
+ // No implementation
+ } else if (talkFlag && player_said("butler")) {
+ player_set_commands_allowed(false);
+ _val4 = -1;
+ _val5 = 1000;
+ _val6 = 1100;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 102);
+ _G(kernel).trigger_mode = KT_PARSE;
+ } else if (enterFlag && player_said("BILLIARDS ROOM")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(1);
+ break;
+ case 1:
+ midi_stop();
+ digi_stop(3);
+ _G(game).setRoom(406);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_walk(_G(player_info).x, _G(player_info).y + 50, nullptr, -1, 5);
+ disable_player_commands_and_fade_init(1);
+ break;
+ case 1:
+ midi_stop();
+ digi_stop(3);
+ _G(game).setRoom(402);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("WALK TO", "OUTSIDE CASTLE")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_walk(58, 347, nullptr, -1, 9);
+ disable_player_commands_and_fade_init(1);
+ break;
+ case 1:
+ midi_stop();
+ digi_stop(3);
+ _G(game).setRoom(402);
+ break;
+ default:
+ break;
+ }
+ } else if (enterFlag && player_said("SITTING ROOM")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_walk(58, 347, nullptr, -1, 9);
+ disable_player_commands_and_fade_init(1);
+ break;
+ case 1:
+ midi_stop();
+ digi_stop(3);
+ _G(game).setRoom(405);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("GO", "STAIRS")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+
+ if (!_G(flags)[V126]) {
+ _G(flags)[V126] = 1;
+ digi_play("404u05", 1, 255, 2);
+ _val7 = 2000;
+ _val8 = 2102;
+ _G(kernel).trigger = KT_DAEMON;
+ kernel_timing_trigger(1, 110);
+ _G(kernel).trigger_mode = KT_PARSE;
+ } else {
+ digi_play("404r15", 1, 255, 2);
+ }
+ break;
+ case 2:
+ _val8 = 2103;
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if (lookFlag && player_said("BILLIARDS ROOM")) {
+ digi_play(player_been_here(405) ? "404r08a" : "404r08", 1);
+ } else if (player_said("SITTING ROOM") && (useFlag || takeFlag) &&
+ _G(kernel).trigger >= -1) {
+ ws_walk(115, 350, nullptr, 2, 9);
+ } else if (lookFlag && player_said("SITTING ROOM")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(115, 350, nullptr, 2, 9);
+ break;
+ default:
+ digi_play("404r09", 1);
+ break;
+ }
+ } else if (lookFlag && _G(walker).ripley_said(SAID)) {
+ // No implementation
+ } else if (lookFlag && player_said(" ")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ digi_play("404r07", 1, 255, 2);
+ break;
+ case 2:
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("journal") && !takeFlag && !lookFlag &&
+ !inv_player_has(_G(player).noun)) {
+ if (_G(flags)[kCastleCartoon]) {
+ digi_play("com016", 1);
+ } else if (_G(kernel).trigger == 6) {
+ _G(flags)[kCastleCartoon] = 1;
+ sendWSMessage_multi("com015");
+ } else {
+ sendWSMessage_multi("");
+ }
+ } else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+void Room404::conv404a() {
+ int who = conv_whos_talking();
+ _currentNode = conv_current_node();
+ const char *sound = conv_sound_to_play();
+
+ if (sound) {
+ if (who <= 0)
+ _val8 = 2101;
+ else if (who == 1)
+ _val6 = 1102;
+
+ digi_play(sound, 1, 255, 1);
+
+ } else {
+ conv_resume();
+ }
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section4/room404.h b/engines/m4/riddle/rooms/section4/room404.h
index a8d9e3e0eeb..0a938d7d890 100644
--- a/engines/m4/riddle/rooms/section4/room404.h
+++ b/engines/m4/riddle/rooms/section4/room404.h
@@ -45,6 +45,9 @@ private:
machine *_door = nullptr;
machine *_butlerTalks = nullptr;
machine *_machine1 = nullptr;
+ int _currentNode = 0;
+
+ void conv404a();
public:
Room404() : Room() {}
More information about the Scummvm-git-logs
mailing list