[Scummvm-git-logs] scummvm master -> 7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e
dreammaster
noreply at scummvm.org
Wed Sep 25 05:02:57 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:
7e4a78c5cc M4: RIDDLE: Added room 605 parser
Commit: 7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e
https://github.com/scummvm/scummvm/commit/7e4a78c5cc75b69e7d7e9a7da944068dd0d0d87e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-24T22:02:48-07:00
Commit Message:
M4: RIDDLE: Added room 605 parser
Changed paths:
engines/m4/riddle/rooms/section6/room605.cpp
engines/m4/riddle/rooms/section6/room605.h
diff --git a/engines/m4/riddle/rooms/section6/room605.cpp b/engines/m4/riddle/rooms/section6/room605.cpp
index 66a239b6ac5..f576ebf11bc 100644
--- a/engines/m4/riddle/rooms/section6/room605.cpp
+++ b/engines/m4/riddle/rooms/section6/room605.cpp
@@ -362,7 +362,7 @@ void Room605::daemon() {
case 5:
terminateMachineAndNull(_ripley);
ws_unhide_walker();
- terminateMachineAndNull(_machine1);
+ terminateMachineAndNull(_shadow);
break;
case 6:
sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, -1, _ripTalk, 1, 7, 4);
@@ -431,7 +431,437 @@ void Room605::pre_parser() {
}
void Room605::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool talkFlag = player_said_any("talk", "talk to");
+ bool takeFlag = player_said("take");
+ if (player_said("conv605a")) {
+ conv605a();
+ } else if (talkFlag && player_said("samantha")) {
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_hide_walker();
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale + 1,
+ 0x100, 1, triggerMachineByHashCallbackNegative, "rip");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, 1, 1, 1, 300, 1, 1, 1, 0);
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ _val1 = 0;
+ _val2 = 0;
+ _shadow = series_show("safari shadow 2", 0xd00, 16, -1, -1, 0,
+ -_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ conv_load("conv605a", 10, 10, 747);
+ conv_play();
+
+ } else if (_G(kernel).trigger == 747) {
+ // No implementation
+ } else if (takeFlag && player_said_any("pupil", "obsidian disk") &&
+ _G(flags)[V203] != 2 && takePupilDisk()) {
+ // No implementation
+ } else if (player_said("SLEEVE") && player_said_any("pupil", "OBSIDIAN DISK") &&
+ _G(flags)[V203] == 2 && sleeveDisk1()) {
+ // No implementation
+ } else if (player_said("SLEEVE") && player_said_any("pupil", "OBSIDIAN DISK") &&
+ _G(flags)[V203] != 2 && sleeveDisk2()) {
+ // No implementation
+ } else if (player_said("journal", "glyphs")) {
+ if (_G(flags)[V196]) {
+ digi_play("203r54", 1);
+ } else {
+ if (_G(kernel).trigger == 6)
+ _G(flags)[V196] = 1;
+ sendWSMessage_multi(0);
+ }
+ } else if (lookFlag && player_said("head")) {
+ digi_play("605r03", 1);
+ } else if (lookFlag && player_said("glyphs")) {
+ digi_play("605r35", 1);
+ } else if (lookFlag && player_said("SAMANTHA")) {
+ static const char *DIGI[4] = { "605r05", "605r06", "605r07", "605r08" };
+ digi_play(DIGI[imath_ranged_rand(0, 3)], 1);
+ } else if (lookFlag && player_said("topknot")) {
+ if (_G(flags)[V203] == 2) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ _val6 = 5;
+ digi_play("605r04", 1, 255, 1);
+ break;
+ case 1:
+ _val6 = 4;
+ digi_play("605t03", 1, 255, 2);
+ break;
+ case 2:
+ _val6 = 0;
+ kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+ break;
+ default:
+ break;
+ }
+ } else {
+ digi_play("605r26", 1);
+ }
+ } else if (lookFlag && player_said("LEFT")) {
+ if (_G(flags)[V000]) {
+ if (_G(flags)[V186])
+ digi_play("305r53", 1);
+ else
+ _G(flags)[V185] = 1;
+ } else {
+ digi_play("305r53", 1);
+ }
+ } else if (lookFlag && player_said("up")) {
+ if (_G(flags)[V000]) {
+ if (_G(flags)[V184])
+ digi_play("305r53", 1);
+ else
+ _G(flags)[V184] = 1;
+ } else {
+ digi_play("305r53", 1);
+ }
+ } else if (lookFlag && player_said_any("pupil", "OBSIDIAN DISK") &&
+ inv_object_is_here("OBSIDIAN DISK")) {
+ digi_play(_G(flags)[V203] == 2 ? "605r09" : "605r27", 1);
+
+ } else if (parserMisc()) {
+ // No implementation
+ } else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+void Room605::conv605a() {
+ const char *sound = conv_sound_to_play();
+ int who = conv_whos_talking();
+ int node = conv_current_node();
+ int entry = conv_current_entry();
+
+ switch (_G(kernel).trigger) {
+ case 1:
+ if (who <= 0) {
+ if (node == 1 && entry == 0)
+ _val2 = 0;
+ if (node == 2 && entry == 0) {
+ kernel_timing_trigger(60, 4);
+ return;
+ }
+ if (_val6 == 3)
+ kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+
+ _val6 = 0;
+
+ } else if (who == 1) {
+ if (!(node == 6 && entry == 2) &&
+ !(node == 1 && entry == 0) &&
+ !(node == 2 && entry == 3)) {
+ if (_val2 == 6)
+ kernel_timing_trigger(1, 300, KT_DAEMON, KT_PARSE);
+ _val2 = 0;
+ }
+ }
+
+ conv_resume();
+ break;
+
+ case 2:
+ ws_walk(513, 316, nullptr, 3, 10);
+ return;
+
+ case 3:
+ player_update_info();
+ ws_hide_walker();
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0,
+ _G(player_info).x, _G(player_info).y, _G(player_info).scale + 1,
+ 0x100, 1, triggerMachineByHashCallbackNegative, "rip");
+
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, 1, 1, 1, 300, 1, 1, 1, 0);
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ _val1 = 0;
+ _val2 = 0;
+ _shadow = series_show("safari shadow 2", 0xd00, 16, -1, -1, 0,
+ -_G(player_info).scale, _G(player_info).x, _G(player_info).y);
+ break;
+
+ case 4:
+ conv_resume();
+ _val6 = 0;
+ break;
+
+ case 5:
+ _val2 = 0;
+ break;
+
+ default:
+ if (sound) {
+ if (who <= 0) {
+ if (node == 6 && entry == 3) {
+ _val6 = 8;
+ } else if (node == 6 && entry == 4) {
+ _val6 = 10;
+ _val2 = 5;
+ } else if (node == 3 && entry == 0) {
+ kernel_timing_trigger(120, 2);
+ } else if (node == 2 && entry == 0) {
+ _val6 = 9;
+ } else {
+ _val6 = 3;
+ }
+ } else if (who == 1) {
+ if (node == 6 && entry == 2) {
+ _val2 = 3;
+ } else if (node == 6 && entry == 1) {
+ _val2 = 1;
+ } else if ((node == 1 && entry == 0) ||
+ (node == 2 && entry == 3)) {
+ _val2 = 2;
+ } else if (node == 2 && entry == 1) {
+ _val2 = 1;
+ kernel_timing_trigger(60, 5);
+ } else {
+ _val2 = 6;
+ }
+ }
+
+ digi_play(sound, 1);
+
+ } else {
+ conv_resume();
+ }
+ break;
+ }
+}
+
+bool Room605::takePupilDisk() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("OBSIDIAN DISK")) {
+ player_set_commands_allowed(false);
+ _ripHandOnIris = series_load("RIP BURNS HAND ON IRIS");
+ ws_hide_walker();
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "take pupil");
+ sendWSMessage_10000(1, _ripley, _ripHandOnIris, 1, 26, 2,
+ _ripHandOnIris, 26, 26, 1);
+ return true;
+ }
+ break;
+
+ case 1:
+ _val6 = 7;
+ return true;
+
+ case 2:
+ sendWSMessage_10000(1, _ripley, _ripHandOnIris, 27, 41, 6,
+ _ripHandOnIris, 41, 41, 1);
+ digi_play("605r15", 1, 255, 4);
+ return true;
+
+ case 4:
+ _val6 = 6;
+ digi_play("605t06", 1, 255, 8);
+ return true;
+
+ case 6:
+ terminateMachineAndNull(_ripley);
+ ws_unhide_walker();
+ return true;
+
+ case 8:
+ series_unload(_ripHandOnIris);
+ _val6 = 0;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, 200);
+ player_set_commands_allowed(true);
+ _G(flags)[V197] = 1;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room605::sleeveDisk1() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("OBSIDIAN DISK")) {
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _ripGetsIrisWithCloth = series_load("RIP GETS IRIS WITH CLOTH");
+ digi_preload("605_s01");
+ digi_preload("605_s02");
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "take pupil");
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 1,
+ _ripGetsIrisWithCloth, 41, 41, 1);
+ return true;
+ }
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 3,
+ _ripGetsIrisWithCloth, 43, 43, 1);
+ _val6 = 7;
+ digi_play("605_S01", 2);
+ return true;
+
+ case 3:
+ terminateMachineAndNull(_pupil);
+ inv_give_to_player("OBSIDIAN DISK");
+ hotspot_set_active("PUPIL", false);
+ hotspot_set_active("OBSIDIAN DISK", false);
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 44, 75, 6,
+ _ripGetsIrisWithCloth, 75, 75, 1);
+ return true;
+
+ case 6:
+ terminateMachineAndNull(_ripley);
+ ws_unhide_walker();
+ digi_play("605r16", 1, 255, 8);
+ return true;
+
+ case 8:
+ _val6 = 6;
+ digi_play("605t07", 1, 255, 9);
+ return true;
+
+ case 9:
+ _val6 = 7;
+ kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "take pupil");
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 10,
+ _ripGetsIrisWithCloth, 41, 41, 1);
+ return true;
+
+ case 10:
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 11,
+ _ripGetsIrisWithCloth, 43, 43, 1);
+ digi_play("605_S02", 2);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room605::sleeveDisk2() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (inv_object_is_here("OBSIDIAN DISK")) {
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _ripGetsIrisWithCloth = series_load("RIP GETS IRIS WITH CLOTH");
+ digi_preload("605_s01");
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "take pupil");
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 1, 41, 1,
+ _ripGetsIrisWithCloth, 41, 41, 1);
+ return true;
+ }
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 42, 43, 2,
+ _ripGetsIrisWithCloth, 43, 43, 1);
+ digi_play("605_S01", 2);
+ return true;
+
+ case 2:
+ hotspot_set_active("PUPIL", false);
+ hotspot_set_active("OBSIDIAN DISK", false);
+ inv_give_to_player("OBSIDIAN DISK");
+ kernel_examine_inventory_object("PING OBSIDIAN DISK", 5, 1, 260, 190, 3);
+ terminateMachineAndNull(_pupil);
+ return true;
+
+ case 3:
+ sendWSMessage_10000(1, _ripley, _ripGetsIrisWithCloth, 44, 75, 6,
+ _ripGetsIrisWithCloth, 75, 75, 1);
+ return true;
+
+ case 6:
+ digi_unload("605_s01");
+ terminateMachineAndNull(_ripley);
+ series_unload(_ripGetsIrisWithCloth);
+ ws_unhide_walker();
+ player_set_commands_allowed(true);
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool Room605::parserMisc() {
+ switch (_G(kernel).trigger) {
+ case 555:
+ digi_stop(1);
+ midi_play("tensions", 255, 1, -1, 949);
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s28", 3, 90);
+ _G(game).setRoom(610);
+ break;
+
+ case 556:
+ digi_stop(1);
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s28", 3, 90);
+ _G(game).setRoom(603);
+ break;
+
+ case 557:
+ digi_stop(1);
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s28", 3, 90);
+ _G(game).setRoom(608);
+ break;
+
+ case 558:
+ digi_stop(1);
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s28", 3, 90);
+ _G(game).setRoom(623);
+ break;
+
+ default:
+ if (player_said_any("down", "left", "right")) {
+ if (_G(flags)[V203] != 2) {
+ if (player_said("down")) {
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(
+ _G(flags)[V203] == 8 ? 555 : 556);
+ }
+
+ if (player_said("right")) {
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(557);
+ }
+
+ if (player_said("left")) {
+ player_set_commands_allowed(false);
+ disable_player_commands_and_fade_init(558);
+ }
+ }
+ } else {
+ return false;
+ }
+ break;
+ }
+
+ return true;
}
} // namespace Rooms
diff --git a/engines/m4/riddle/rooms/section6/room605.h b/engines/m4/riddle/rooms/section6/room605.h
index e0ae016d11e..31373d0ce23 100644
--- a/engines/m4/riddle/rooms/section6/room605.h
+++ b/engines/m4/riddle/rooms/section6/room605.h
@@ -43,12 +43,20 @@ private:
int _ripHandOnChin = 0;
int _ripTwoHandTalk = 0;
int _ripTalk = 0;
+ int _ripGetsIrisWithCloth = 0;
+ int _ripHandOnIris = 0;
int _605tt = 0;
machine *_pupil = nullptr;
machine *_ripley = nullptr;
machine *_tt = nullptr;
machine *_ttShadow = nullptr;
- machine *_machine1 = nullptr;
+ machine *_shadow = nullptr;
+
+ void conv605a();
+ bool takePupilDisk();
+ bool sleeveDisk1();
+ bool sleeveDisk2();
+ bool parserMisc();
public:
Room605() : Room() {}
More information about the Scummvm-git-logs
mailing list