[Scummvm-git-logs] scummvm master -> 1e424fb5f4764448329e7cae5e8a3a8b36966f0b
dreammaster
noreply at scummvm.org
Mon Sep 23 00:11:31 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:
1e424fb5f4 M4: RIDDLE: Finished room 604
Commit: 1e424fb5f4764448329e7cae5e8a3a8b36966f0b
https://github.com/scummvm/scummvm/commit/1e424fb5f4764448329e7cae5e8a3a8b36966f0b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-22T17:11:25-07:00
Commit Message:
M4: RIDDLE: Finished room 604
Changed paths:
engines/m4/riddle/rooms/section6/room604.cpp
engines/m4/riddle/rooms/section6/room604.h
diff --git a/engines/m4/riddle/rooms/section6/room604.cpp b/engines/m4/riddle/rooms/section6/room604.cpp
index d2828606b46..ebaaa04367d 100644
--- a/engines/m4/riddle/rooms/section6/room604.cpp
+++ b/engines/m4/riddle/rooms/section6/room604.cpp
@@ -172,6 +172,47 @@ void Room604::init() {
}
void Room604::daemon() {
+ daemon1();
+
+ switch (_G(kernel).trigger) {
+ case 10:
+ ws_unhide_walker();
+ ws_walk(374, 330, nullptr, 11, 10);
+ break;
+
+ case 11:
+ player_set_commands_allowed(true);
+ break;
+
+ case 12:
+ player_set_commands_allowed(true);
+ digi_play("603_s03", 2);
+ break;
+
+ case 50:
+ ws_walk(238, 339, nullptr, 52, 3);
+ break;
+
+ case 52:
+ terminateMachineAndNull(_shedDoor);
+ _shedDoor = series_play("SHED DOOR OPENS", 0xf00, 18, 12, 11);
+ break;
+
+ case 666:
+ if (_val3) {
+ if (++_val4 < 15) {
+ kernel_timing_trigger(60, 666);
+ } else {
+ Common::strcpy_s(_G(player).verb, "kill rip");
+ _G(kernel).trigger_mode = KT_PARSE;
+ kernel_timing_trigger(1, 667);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
}
void Room604::pre_parser() {
@@ -293,7 +334,7 @@ void Room604::parser() {
if (_G(flags)[V203] == 8)
digi_preload("genshut");
- ripStartsGenerator = series_load("RIP STARTS GENERATOR");
+ _ripAction = series_load("RIP STARTS GENERATOR");
series_play("RIP STARTS GENERATOR", 0x100, 0, 17, 5, 0, 100, 0, 0, 0, 17);
_shadow = series_play("SAFARI SHADOW 1", 0x200, 0, -1, 600, -1, 100,
_G(player_info).x, _G(player_info).y, 0, 0);
@@ -301,9 +342,9 @@ void Room604::parser() {
case 2:
ws_unhide_walker();
- series_unload(ripStartsGenerator);
+ series_unload(_ripAction);
terminateMachineAndNull(_shadow);
- series_unload(ripStartsGenerator);
+ series_unload(_ripAction);
if (_G(flags)[V203] == 8) {
kernel_timing_trigger(180, 3);
@@ -361,12 +402,374 @@ void Room604::parser() {
}
}
} else if (takeFlag && player_said("gas tank cap")) {
- // TODO
- } else if (lookFlag) {
- // TODO
- }
- // TODO
- else {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ digi_preload("604_s02");
+ _ripAction = series_load("RIP TAKES OFF GAS CAP");
+ player_update_info();
+ _ripley = series_play("RIP TAKES OFF GAS CAP", 0x100, 0, 2, 6, 0, 100, 0, 0, 0, 13);
+ _shadow = series_play("SAFARI SHADOW 1", _G(player_info).depth + 1,
+ 0, -1, 600, -1, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 1, 1);
+ break;
+ case 2:
+ _ripley = series_play("RIP TAKES OFF GAS CAP", 0x100, 0, 3, 6, 0, 100, 0, 0, 14, 36);
+ digi_play("604_s02", 2);
+ break;
+ case 3:
+ ws_unhide_walker();
+ series_unload(_ripAction);
+ digi_stop(2);
+ digi_unload("604_s02");
+ terminateMachineAndNull(_shadow);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if ((takeFlag || useFlag) && player_said("power cable")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ digi_preload("wirepull");
+ _ripAction = series_load("RIP PULLS WIRE");
+ player_update_info();
+ _ripley = series_play("RIP PULLS WIRE", 0xf00, 0, 1, 6, 0, 100, 0, 0, 0, 12);
+ _shadow = series_play("SAFARI SHADOW 1", 0xf00, 0, -1, 600, -1,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y, 1, 1);
+ break;
+ case 1:
+ _ripley = series_play("RIP PULLS WIRE", 0xf00, 0, 3, 6, 0, 100, 0, 0, 13, 24);
+
+ if (_G(flags)[V203] == 8) {
+ digi_stop(3);
+ _val5 = 1;
+ }
+
+ digi_play("wirepull", 2, 255, 2);
+ break;
+ case 2:
+ digi_unload("wirepull");
+ break;
+ case 3:
+ ws_unhide_walker();
+ series_unload(_ripAction);
+ terminateMachineAndNull(_shadow);
+
+ if (_G(flags)[V203] == 8) {
+ kernel_timing_trigger(30, 5);
+ } else {
+ player_set_commands_allowed(true);
+ }
+ break;
+ case 5:
+ _ripley = series_play("BAD GUYS LOOK TO WIRE", 0, 0, 6, 6);
+ break;
+ case 6:
+ kernel_timing_trigger(30, 7);
+ break;
+ case 7:
+ digi_play("604k01", 1);
+ _val2 = 1;
+ _val3 = 1;
+ _val4 = 0;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(60, 666);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if (takeFlag && player_said("wire")) {
+ takeWire();
+ } else if (player_said("LIGHTER", " ") ||
+ player_said("LIT LIGHTER", " ")) {
+ if (_G(flags)[V203] == 8) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ ws_walk(331, 323, nullptr, 1, 10);
+ break;
+ case 1:
+ player_set_commands_allowed(false);
+ setGlobals1(_ripLowReach2, 1, 16, 16, 16);
+ sendWSMessage_110000(2);
+
+ if (player_said("LIGHTER"))
+ kernel_timing_trigger(40, 3);
+ break;
+ }
+ } else {
+ digi_play("com118", 1, 255, -1, 997);
+ }
+ } else if (takeFlag && player_said("LIGHTER") && takeLighter()) {
+ // No implementation
+ } else if (player_said("pull cord", "plug") && pullCordPlug()) {
+ // No implementation
+ } else if (player_said("plug", "pull cord ")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_G(flags)[V190])
+ ws_walk(289, 312, nullptr, 1, 11);
+ else
+ digi_play("604r12", 1);
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+ setGlobals1(_ripLowReach1, 1, 15, 16, 16, 0, 17, 24, 24, 24, 0, 16, 1, 1, 1);
+ sendWSMessage_110000(2);
+ break;
+
+ case 2:
+ sendWSMessage_120000(4);
+ terminateMachineAndNull(_cord);
+ series_play("604TWANG", 0x300, 0, 3, 5);
+ break;
+
+ case 3:
+ _tiedWires = series_show("604 wires tied together", 0xd00, 16);
+ break;
+
+ case 4:
+ _G(flags)[V189] = 3;
+ hotspot_set_active(" ", true);
+ hotspot_set_active("pull cord ", true);
+ hotspot_set_active("pull cord ", false);
+ hotspot_set_active("plug", false);
+ hotspot_set_active("WIRE", false);
+ hotspot_set_active("WIRE ", true);
+ sendWSMessage_130000(5);
+ break;
+
+ case 5:
+ sendWSMessage_150000(-1);
+ kernel_load_variant("604lock1");
+ digi_play("604r48", 1);
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ false;
+ }
+ } else if (player_said("SPARK PLUG TOOL", "plug") &&
+ inv_player_has("SPARK PLUG TOOL")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_G(flags)[V190])
+ digi_play("604r32a", 1);
+ else
+ kernel_timing_trigger(1, 1);
+ break;
+ case 1:
+ player_set_commands_allowed(false);
+ setGlobals1(_ripLowReach1, 1, 24, 24, 24, 0, 16, 1, 1, 1);
+ sendWSMessage_110000(2);
+ break;
+ case 2:
+ _G(flags)[V190] = 1;
+ sendWSMessage_120000(5);
+ digi_play("604r32", 1);
+ break;
+ case 5:
+ sendWSMessage_150000(-1);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("pull cord ", "wire") && inv_object_is_here("pull cord")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_hide_walker();
+ terminateMachineAndNull(_pullCord2);
+ series_load("door wire be gone");
+
+ _shedDoor = series_show("door wire be gone", 0xe00, 16);
+ _ripAction = series_load("RIP TIES CORD AND WIRE TOGETHER");
+ _ripley = series_play("RIP TIES CORD AND WIRE TOGETHER", 0x100, 0, 2, 6);
+ _shadow = series_play("SAFARI SHADOW 3", 0x200, 128, -1, 600, -1,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 0);
+ break;
+ case 2:
+ ws_unhide_walker();
+ series_unload(_ripAction);
+ terminateMachineAndNull(_shadow);
+ series_load("604 wires tied together");
+ _tiedWires = series_show("604 wires tied together", 0xd00, 16);
+ _G(flags)[V189] = 3;
+ hotspot_set_active(" ", true);
+ hotspot_set_active("PULL CORD ", false);
+ hotspot_set_active("PULL CORD ", true);
+ hotspot_set_active("WIRE", false);
+ hotspot_set_active("WIRE ", true);
+ kernel_load_variant("604lock1");
+ digi_play("604r48", 1);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("pull cord", "wire") && inv_player_has("pull cord")) {
+ if (_G(flags)[V203] == 8) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_hide_walker();
+ series_load("door wire be gone");
+ _shedDoor = series_show("door wire be gone", 0xe00, 16);
+ _ripAction = series_load("RIP TIES CORDS 2");
+ _ripley = series_play("RIP TIES CORDS 2", 0x100, 0, 2);
+ _shadow = series_play("SAFARI SHADOW 3", 0x200, 128, -1, 600, -1);
+ break;
+ case 2:
+ ws_unhide_walker();
+ series_unload(_ripAction);
+ terminateMachineAndNull(_shadow);
+ series_load("604cord2");
+ _cord = series_show("604cord2", 0xc00, 16);
+ _G(flags)[V189] = 2;
+
+ inv_move_object("PULL CORD", 604);
+ hotspot_set_active("pull cord ", true);
+ player_set_commands_allowed(true);
+ break;
+ default:
+ break;
+ }
+ } else {
+ digi_play("com017", 1, 255, -1, 997);
+ }
+ } else if (player_said("exit")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _ripley = series_play("RIP CRAWLS THROUGH WINDOW", 0x100, 0, 1);
+ break;
+ case 1:
+ if (_G(flags)[V189] == 3 && inv_object_is_here("LIGHTER") && _val2) {
+ interface_hide();
+ disable_player_commands_and_fade_init(3);
+ _G(flags)[V191] = 1;
+ } else {
+ disable_player_commands_and_fade_init(2);
+ }
+ break;
+ case 2:
+ _G(game).setRoom(610);
+ break;
+ case 3:
+ if (_val2 == 2)
+ _G(flags)[V042] = 1;
+ _G(game).setRoom(603);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said("left")) {
+ if (_G(flags)[V203] == 4) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ _ripMedReach2 = series_load("rip trek med reach pos3");
+ setGlobals1(_ripMedReach2, 1, 10, 10, 10);
+ sendWSMessage_110000(-1);
+ disable_player_commands_and_fade_init(1);
+ break;
+ case 1:
+ adv_kill_digi_between_rooms(false);
+
+ if (_G(flags)[GLB_TEMP_5]) {
+ digi_play_loop("genrun", 3);
+ } else {
+ digi_preload("950_s28");
+ digi_play_loop("950_s28", 3);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ } else if (lookFlag && player_said("LIGHTER") &&
+ inv_object_is_here("LIGHTER")) {
+ digi_play("604r44", 1);
+ } else if (lookFlag && player_said_any("wire", "wire ")) {
+ if (_G(flags)[V203] != 8)
+ digi_play("604r01", 1);
+ else if (_G(flags)[V189] == 2 || _G(flags)[V189] == 3)
+ digi_play("604r38", 1);
+ else
+ digi_play("604r25", 1);
+ } else if (lookFlag && player_said("generator set")) {
+ digi_play(_G(flags)[V203] == 8 ? "604r26" : "604r02", 1);
+ } else if (lookFlag && player_said("gas tank")) {
+ if (_G(flags)[V189] == 1 || _G(flags)[V189] == 3)
+ digi_play("604r36", 1);
+ else
+ digi_play("604r03", 1);
+ } else if (lookFlag && player_said("gas tank cap")) {
+ digi_play("604r04", 1);
+ } else if (lookFlag && player_said("plug")) {
+ digi_play("604r05", 1);
+ } else if (lookFlag && player_said("spark plug tool") &&
+ inv_object_is_here("SPARK PLUG TOOL")) {
+ if (_G(kernel).trigger == 1) {
+ digi_play("604r27a", 1);
+ _G(flags)[V188] = 1;
+ player_set_commands_allowed(true);
+ } else if (_G(flags)[V188]) {
+ digi_play("604r27", 1);
+ } else {
+ digi_play("604r27", 1);
+ player_set_commands_allowed(false);
+ }
+ } else if (lookFlag && player_said("pull cord") &&
+ inv_object_is_here("PULL CORD")) {
+ digi_play("604r06", 1);
+ } else if (lookFlag && player_said("pull cord ")) {
+ digi_play("604r36", 1);
+ } else if (lookFlag && player_said("pull cord ")) {
+ digi_play("604r38", 1);
+ } else if (lookFlag && player_said("pull cord ")) {
+ digi_play("604r39", 1);
+ } else if (lookFlag && player_said("power cable")) {
+ digi_play("604r07", 1);
+ } else if (lookFlag && player_said("door")) {
+ digi_play("604r28", 1);
+ } else if (lookFlag && player_said("door ")) {
+ digi_play("604r09", 1);
+ } else if (useFlag && player_said("window")) {
+ digi_play(_G(flags)[V203] == 8 ? "604r30" : "604r47", 1);
+ } else if (lookFlag && player_said_any("window", "window ")) {
+ digi_play(_G(flags)[V203] == 8 ? "604r29" : "604r10", 1);
+ } else if (takeFlag && player_said("generator set")) {
+ digi_play(_G(flags)[V203] == 8 ? "604r31" : "604r11", 1);
+ } else if (takeFlag && player_said("generator set") &&
+ _G(flags)[V203] == 8) {
+ digi_play("604r31", 1);
+ } else if ((takeFlag || useFlag) && player_said("plug")) {
+ digi_play(_G(flags)[V190] ? "604r32a" : "604r12", 1);
+ } else if (useFlag && player_said_any("wire", "wire ")) {
+ digi_play("604r15", 1);
+ } else if (useFlag && player_said_any("window", "window ")) {
+ digi_play(_G(flags)[V190] ? "604r30" : "604r46", 1);
+ } else if (lookFlag && player_said(" ")) {
+ if (_G(flags)[V203] != 8)
+ digi_play("604r08", 1);
+ else if (_G(flags)[V189] == 3 && inv_object_is_here("LIGHTER"))
+ digi_play("604r41", 1);
+ else if (_G(flags)[V189] == 1 || _G(flags)[V189] == 2 ||
+ inv_object_is_here("LIGHTER"))
+ digi_play("604r41a", 1);
+ else if (_G(flags)[V189] == 3)
+ digi_play("604r41a", 1);
+ else
+ digi_play("604r24", 1);
+ } else {
return;
}
@@ -629,6 +1032,150 @@ bool Room604::takeSparkPlugTool() {
return false;
}
+void Room604::takeWire() {
+ if (_G(flags)[V189] == 0 || _G(flags)[V189] == 1) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ player_set_commands_allowed(false);
+ player_update_info();
+ ws_hide_walker();
+ _ripAction = series_load("RIP PULLS DOOR WIRE");
+ _doorWireGone = series_show("door wire be gone", 0xe00, 16);
+ _ripley = series_play("RIP PULLS DOOR WIRE", 0x100, 0, 2);
+ _shadow = series_play("SAFARI SHADOW 3", 0x200, 128, -1, 600, -1,
+ _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 0);
+ break;
+
+ case 2:
+ ws_unhide_walker();
+ series_unload(_ripAction);
+ terminateMachineAndNull(_shadow);
+ terminateMachineAndNull(_doorWireGone);
+ player_set_commands_allowed(true);
+ digi_play("604r14", 1);
+ break;
+
+ default:
+ break;
+ }
+ } else {
+ digi_play("604r14", 1);
+ }
+}
+
+bool Room604::takeLighter() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (!inv_object_is_here("LIGHTER"))
+ return false;
+
+ ws_walk(331, 323, nullptr, 1, 10);
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+ setGlobals1(_ripLowReach2, 1, 16, 16, 16);
+ sendWSMessage_110000(2);
+ break;
+
+ case 2:
+ terminateMachineAndNull(_flame);
+ hotspot_set_active("LIGHTER", false);
+ inv_give_to_player("LIGHTER");
+ sendWSMessage_140000(5);
+ break;
+
+ case 5:
+ player_set_commands_allowed(true);
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+bool Room604::pullCordPlug() {
+ switch (_G(kernel).trigger) {
+ case -1:
+ if (_G(flags)[V190]) {
+ if (!inv_player_has("PULL CORD"))
+ return false;
+ ws_walk(289, 312, nullptr, 1, 11);
+ } else {
+ digi_play("604r12", 1);
+ }
+ break;
+
+ case 1:
+ player_set_commands_allowed(false);
+ setGlobals1(_ripLowReach1, 1, 24, 24, 24, 0, 16, 1, 1, 1);
+ sendWSMessage_110000(2);
+ break;
+
+ case 2:
+ series_load("one frame pull cord");
+ _pullCord2 = series_show("ONE FRAME PULL CORD", 0xd00, 16);
+ _G(flags)[V189] = 1;
+ inv_move_object("PULL CORD", 604);
+ hotspot_set_active("pull cord ", true);
+ hotspot_set_active("plug", false);
+ sendWSMessage_120000(5);
+ break;
+
+ case 5:
+ sendWSMessage_150000(-1);
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+void Room604::daemon1() {
+ if (_val5)
+ return;
+
+ static const char *DIGI[3] = { "610_s03a", "610_s03b", "610_s03" };
+
+ switch (_G(kernel).trigger) {
+ case 126:
+ digi_play(DIGI[imath_ranged_rand(0, 2)], 3, 130);
+ kernel_timing_trigger(300, 135);
+ break;
+
+ case 135:
+ if (++_val1 >= 8)
+ _val1 = 1;
+
+ digi_play(Common::String::format("610k%.2d", _val1 + 6).c_str(), 3, 130, 136);
+ break;
+
+ case 136:
+ kernel_timing_trigger(300, 135);
+ break;
+
+ case 137:
+ kernel_timing_trigger(60, 138);
+ break;
+
+ case 138:
+ if (imath_ranged_rand(1, 2) == 1)
+ digi_play("610_s02", 3, 130);
+ else
+ digi_play("610_s02a", 3, 130);
+
+ kernel_timing_trigger(20, 126);
+ break;
+
+ default:
+ break;
+ }
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section6/room604.h b/engines/m4/riddle/rooms/section6/room604.h
index ec728cd261c..bfe8e24d2ed 100644
--- a/engines/m4/riddle/rooms/section6/room604.h
+++ b/engines/m4/riddle/rooms/section6/room604.h
@@ -38,7 +38,8 @@ private:
int _ripLowReach1 = 0;
int _ripLowReach2 = 0;
int _ripMedReach1 = 0;
- int ripStartsGenerator = 0;
+ int _ripMedReach2 = 0;
+ int _ripAction = 0;
machine *_ripley = nullptr;
machine *_sparkPlugTool = nullptr;
machine *_sparkPlugWire = nullptr;
@@ -52,9 +53,12 @@ private:
machine *_generatorCord = nullptr;
machine *_shadow = nullptr;
+ void daemon1();
bool useWhaleBoneHorn();
bool takePullCord();
bool takeSparkPlugTool();
+ bool takeLighter();
+ bool pullCordPlug();
/**
* This Ripley is no more! It has ceased to be! It's expired
@@ -66,6 +70,8 @@ private:
*/
void killRipley();
+ void takeWire();
+
public:
Room604() : Room() {}
~Room604() override {}
More information about the Scummvm-git-logs
mailing list