[Scummvm-git-logs] scummvm master -> dfdc90eb709cd2acfad5eb1b1e987c87b718478f
dreammaster
noreply at scummvm.org
Wed Sep 18 05:17:11 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:
dfdc90eb70 M4: In progress room 603 parser
Commit: dfdc90eb709cd2acfad5eb1b1e987c87b718478f
https://github.com/scummvm/scummvm/commit/dfdc90eb709cd2acfad5eb1b1e987c87b718478f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-17T22:16:26-07:00
Commit Message:
M4: In progress room 603 parser
Changed paths:
engines/m4/riddle/rooms/room.cpp
engines/m4/riddle/rooms/room.h
engines/m4/riddle/rooms/section6/room603.cpp
engines/m4/riddle/rooms/section6/room603.h
diff --git a/engines/m4/riddle/rooms/room.cpp b/engines/m4/riddle/rooms/room.cpp
index e37e483f1ae..07fa786445d 100644
--- a/engines/m4/riddle/rooms/room.cpp
+++ b/engines/m4/riddle/rooms/room.cpp
@@ -409,6 +409,20 @@ void Room::sendWSMessage_1a0000(machine *recv, int trigger) {
sendWSMessage(0x1a0000, 0, recv, 0, nullptr, 1);
}
+void Room::sendWSMessage_1e0000(machine *recv, int val1, int val2) {
+ _G(globals)[V023] = val1 << 16;
+ _G(globals)[V024] = val2 << 16;
+ sendWSMessage(0x1e0000, 0, recv, 0, nullptr, 1);
+}
+
+void Room::sendWSMessage_200000(machine *recv, int trigger) {
+
+}
+
+void Room::sendWSMessage_1e0000(int val1, int val2) {
+ sendWSMessage_1e0000(_G(my_walker), val1, val2);
+}
+
void Room::sendWSMessage_29a0000(machine *recv, int val1) {
_G(globals)[GLB_TEMP_1] = val1 << 24;
sendWSMessage(0x29a0000, 0, recv, 0, 0, 1);
diff --git a/engines/m4/riddle/rooms/room.h b/engines/m4/riddle/rooms/room.h
index fadd6285d01..d4fd97ca5dd 100644
--- a/engines/m4/riddle/rooms/room.h
+++ b/engines/m4/riddle/rooms/room.h
@@ -102,6 +102,10 @@ protected:
void sendWSMessage_190000(machine *recv, int trigger);
void sendWSMessage_190000(int trigger);
void sendWSMessage_1a0000(machine *recv, int trigger);
+ void sendWSMessage_1e0000(machine *recv, int val1, int val2);
+ void sendWSMessage_1e0000(int val1, int val2);
+ void sendWSMessage_200000(machine *recv, int trigger);
+
void sendWSMessage_29a0000(machine *recv, int val1);
void sendWSMessage_29a0000(int val1);
void sendWSMessage_multi(const char *name);
diff --git a/engines/m4/riddle/rooms/section6/room603.cpp b/engines/m4/riddle/rooms/section6/room603.cpp
index eb4f4aed9cd..efdf77879ba 100644
--- a/engines/m4/riddle/rooms/section6/room603.cpp
+++ b/engines/m4/riddle/rooms/section6/room603.cpp
@@ -48,7 +48,7 @@ void Room603::preload() {
void Room603::init() {
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
- _val1 = 0;
+ _trigger1 = 0;
_val2 = 0;
_val3 = 0;
_val4 = 0;
@@ -208,7 +208,7 @@ void Room603::init() {
triggerMachineByHashCallbackNegative, "tt");
sendWSMessage_10000(1, _tt, _ttDigShirtOff, 2, 2, 200, _ttDigShirtOff, 2, 2, 0);
- _val1 = 200;
+ _trigger1 = 200;
_val7 = 1;
_val8 = 0;
_val9 = 0;
@@ -235,7 +235,7 @@ void Room603::init() {
_tt = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x200, 0,
triggerMachineByHashCallbackNegative, "tt");
sendWSMessage_10000(1, _tt, _ttD01, 1, 1, 400, _ttD01, 1, 1, 0);
- _val1 = 400;
+ _trigger1 = 400;
hotspot_set_active("twelvetrees ", false);
_ttShadow = series_show("tt walker shadow 4", 0xf00, 0, -1, -1, 0, 53, 291, 293);
@@ -244,7 +244,7 @@ void Room603::init() {
triggerMachineByHashCallbackNegative, "tt");
sendWSMessage_10000(1, _tt, _ttDigShirtOn, 1, 1, 500,
_ttDigShirtOn, 1, 1, 0);
- _val1 = 500;
+ _trigger1 = 500;
hotspot_set_active("twelvetrees", false);
}
break;
@@ -273,13 +273,458 @@ void Room603::daemon() {
}
void Room603::pre_parser() {
- // TODO
+ if (_G(flags)[V202] && !player_said("talk to", "twelvetrees"))
+ _G(flags)[V204] = 1;
+
+ if (_val6) {
+ Common::strcpy_s(_G(player).noun, "remove note");
+ _G(player).resetWalk();
+ }
+
+ if (player_said("take", "sleeve") && inv_object_is_here("SLEEVE")) {
+ auto &v203 = _G(flags)[V203];
+ if (v203 == 1 || v203 == 3 || v203 == 5 || v203 == 7)
+ _G(player).resetWalk();
+ }
}
void Room603::parser() {
+ bool lookFlag = player_said_any("look", "look at");
+ bool takeFlag = player_said("take");
+
+ if (player_said("conv603a")) {
+ conv603a();
+ } else if (player_said("conv603b")) {
+ conv603b();
+ } else if (_G(kernel).trigger == 747) {
+ if (_val8 != 20) {
+ unloadSeries();
+ _val9 = 1000;
+ _num1 = 11;
+ _val8 = 17;
+ }
+ } else if (_G(kernel).trigger == 748) {
+ if (_val8 == 21) {
+ disable_player_commands_and_fade_init(749);
+ } else {
+ unloadSeries();
+ _val9 = 1000;
+ _num1 = 11;
+ _val8 = 17;
+ }
+ } else if (_G(kernel).trigger == 749) {
+ digi_unload("603_S02");
+ digi_unload("603_S02a");
+ digi_unload("603_S02b");
+ digi_unload("603_S02c");
+ adv_kill_digi_between_rooms(false);
+ digi_play_loop("950_s28a", 3, 90);
+ _G(game).setRoom(608);
+ _G(flags)[V203] = 6;
+ } else if (player_said("talk to", "person it pit")) {
+ switch (_G(kernel).trigger) {
+ case -1:
+ case 666:
+ player_set_commands_allowed(false);
+ player_update_info();
+ _G(player).disable_hyperwalk = true;
+ _G(flags)[V202] = 1;
+ setGlobals1(_ripHandsBehindBack, 1, 15, 15, 15);
+ sendWSMessage_110000(2);
+ break;
+ case 2:
+ sendWSMessage_150000(-1);
+ ws_hide_walker();
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 311, 308, -59, 0x100, 0,
+ triggerMachineByHashCallbackNegative, "rip");
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, _rp01, 1, 15, 302, _rp01, 15, 15, 0);
+ sendWSMessage_1e0000(0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ _G(kernel).trigger_mode = KT_PARSE;
+
+ _num2 = 0;
+ _num1 = 0;
+ _G(flags)[V203] = 1;
+ _val5 = 1;
+ hotspot_set_active("person in pit", false);
+ hotspot_set_active("twelvetrees", true);
+ hotspot_set_active("twelvetrees ", false);
+ break;
+ default:
+ break;
+ }
+ } else if (player_said_any("lighter", "lit lighter") &&
+ player_said_any("twelvetrees", "twelvetrees ")) {
+ digi_play("com140", 1, 255, -1, 997);
+ } else if (player_said("talk to", "twelvetrees")) {
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _val2 = 1;
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 345, 300, -56, 0x100, 1,
+ triggerMachineByHashCallbackNegative, "rip");
+ _shadow = series_show("safari shadow 2", 0xf00, 128, -1, -1, 0, 56, 345, 300);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, 300, _ripTalk, 1, 1, 0);
+ sendWSMessage_190000(_ripley, 4);
+ _G(kernel).trigger_mode = KT_PARSE;
+ _num2 = 0;
+ _num1 = 0;
+
+ conv_load("conv603a", 10, 10, 747);
+ conv_set_shading(65);
+ conv_export_value_curr(_G(flags)[V204], 0);
+ conv_export_value_curr(_G(flags)[V205], 1);
+ conv_play();
+ } else if (player_said("talk to", "twelvetrees ")) {
+ player_set_commands_allowed(false);
+ ws_hide_walker();
+ _val2 = 1;
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 311, 308, -59, 0x100, 1,
+ triggerMachineByHashCallbackNegative, "rip");
+ _shadow = series_show("safari shadow 2", 0xf00, 128, -1, -1, 0, 59, 311, 308);
+ _G(kernel).trigger_mode = KT_DAEMON;
+
+ sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, 300, _ripTalk, 1, 1, 0);
+ sendWSMessage_190000(_ripley, 4);
+ _G(kernel).trigger_mode = KT_PARSE;
+ _num2 = 0;
+ _num1 = 0;
+ _val8 = 7;
+
+ if (_G(flags)[V203] <= 1) {
+ conv_load("conv603a", 10, 10, 747);
+ conv_export_value_curr(_G(flags)[V204], 0);
+ conv_export_value_curr(_G(flags)[V205], 1);
+ conv_play();
+ } else {
+ conv_load("conv603b", 10, 10, 748);
+
+ if (_G(flags)[V203] == 7) {
+ conv_export_value_curr(4, 0);
+ } else {
+ switch (_G(flags)[V186]) {
+ case 0:
+ conv_export_value_curr(1, 0);
+ break;
+ case 1:
+ conv_export_value_curr(2, 0);
+ break;
+ case 2:
+ conv_export_value_curr(3, 0);
+ break;
+ default:
+ break;
+ }
+ }
+
+ conv_export_value_curr(0, 1);
+ conv_export_value_curr(_G(flags)[V039], 6);
+ conv_play();
+ }
+ } else if (takeFlag && player_said("sleeve")) {
+ // TODO
+ } else if (lookFlag) {
+ // TODO
+ }
+ // TODO
+ else {
+ return;
+ }
+
+ _G(player).command_ready = false;
+}
+
+void Room603::conv603a() {
+ 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 == 23) {
+ if (_val5) {
+ _pu01 = series_stream("603pu03", 5, 0, 30);
+ _val8 = 6;
+
+ if (_val5)
+ kernel_timing_trigger(1, _trigger1, KT_DAEMON, KT_PARSE);
+ } else {
+ _pu01 = series_stream("603pu03a", 5, 0, 30);
+ _val8 = 7;
+ kernel_timing_trigger(1, 500, KT_DAEMON, KT_PARSE);
+ }
+ } else if (_val5) {
+ if (node == 3 && (entry == 1 || entry == 2)) {
+ // No implementation
+ } else if ((node == 6 || node == 27) && entry == 0) {
+ _val8 = 12;
+ kernel_timing_trigger(1, 400, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ } else if ((node == 3 && entry == 7) ||
+ (node == 3 && entry == 8)) {
+ // No implementation
+ } else if (node == 25 && entry == 3) {
+ _val8 = 20;
+ kernel_timing_trigger(1, 400, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ } else if (node == 3 && entry == 4) {
+ _val8 = 16;
+ kernel_timing_trigger(1, 400, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ } else if (node = 0 || node == 1 || node == 2) {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 43, 43, -1,
+ _ttDigShirtOff, 43, 43, 0);
+ conv_resume();
+ } else {
+ _val8 = 6;
+
+ if (_trigger1)
+ kernel_timing_trigger(1, _trigger1, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ }
+ } else {
+ _val8 = (node == 25 && entry == 3) ? 20 : 7;
+ kernel_timing_trigger(1, 500, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ }
+ } else if (who == 1) {
+ if (node == 3 && entry == 0) {
+ // No implementation
+ } else if (node == 0 || node == 1 || node == 2) {
+ _num1 = 14;
+ kernel_timing_trigger(1, 300, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ } else if (node == 3 && entry == 6) {
+ // No implementation
+ } else if ((node == 5 && entry == 0) ||
+ (node == 25 && entry == 0) ||
+ (node == 14 && entry == 0) ||
+ (node == 27 && entry == 0) ||
+ (node == 11 && entry == 0) ||
+ (node == 4 && entry == 0) ||
+ (node == 4 && entry == 1) ||
+ (node == 7)) {
+ conv_resume();
+ } else if (node == 12 && entry == 1) {
+ _num1 = 0;
+ conv_resume();
+ } else if (_val2) {
+ if (_num1 == 5)
+ kernel_timing_trigger(1, 300, KT_DAEMON, KT_PARSE);
+ conv_resume();
+ } else {
+ conv_resume();
+ }
+ } else {
+ conv_resume();
+ }
+ break;
+
+ case 2:
+ series_stream_break_on_frame(_pu01, 16, 40);
+ digi_play(sound, 1);
+ break;
+
+ case 3:
+ ws_hide_walker();
+ series_play("603tt07", 0, 0, 4, 6);
+ break;
+
+ case 4:
+ terminateMachineAndNull(_door);
+ series_play("603DOOR", 0x300, 2, 6, 6, 0, 100, 0, 0, 1, 23);
+ series_play("603tt07", 0, 2, 5, 6, 1, 100, 0, 0, 0, 9);
+ break;
+
+ case 5:
+ ws_unhide_walker();
+ sendWSMessage_10000(_tt, 501, 236, 8, 7, 1);
+ break;
+
+ case 6:
+ _door = series_show("603DOOR", 0xf00, 16);
+ hotspot_set_active("wire", false);
+ digi_play("603_s03", 2);
+ break;
+
+ case 7:
+ case 33:
+ conv_resume();
+ break;
+
+ case 10:
+ kernel_timing_trigger(40, 11);
+ break;
+
+ case 11:
+ _pu01 = series_stream("603pu02", 5, 0, 12);
+ break;
+
+ case 12:
+ digi_unload("17_04n08");
+ digi_unload("17_04n99");
+ sendWSMessage_10000(_tt, 357, 283, 1, 13, 0);
+ kernel_timing_trigger(200, 15);
+ break;
+
+ case 13:
+ sendWSMessage_10000(_tt, 291, 293, 4, 14, 1);
+ break;
+
+ case 14:
+ conv_resume();
+ sendWSMessage_60000(_tt);
+ _ttShadow = series_show("tt walker shadow 4", 0xf00, 0, -1, -1, 0, 53, 291, 293);
+ _trigger1 = 400;
+ _tt = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x200, 0,
+ triggerMachineByHashCallbackNegative, "tt");
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _tt, _tt03, 110, 122, 400, _ttD01, 1, 1, 0);
+ _G(kernel).trigger_mode = KT_PARSE;
+ break;
+
+ case 15:
+ ws_walk(345, 300, nullptr, 16, 10);
+ break;
+
+ case 16:
+ ws_hide_walker();
+ _val2 = 1;
+ _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 345, 300, -56, 0x100, 1,
+ triggerMachineByHashCallbackNegative, "rip");
+ _shadow = series_show("safari shadow 2", 0xf00, 128, -1, -1, 0, 56, 345, 300);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 1, 15, 300,
+ _ripHandsBehindBack, 15, 15, 0);
+ sendWSMessage_190000(_ripley, 4);
+ _G(kernel).trigger_mode = KT_PARSE;
+ _num2 = 8;
+ _num1 = 8;
+ break;
+
+ case 20:
+ _num1 = 10;
+ break;
+
+ case 21:
+ _val8 = 14;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, _trigger1);
+ break;
+
+ case 22:
+ _val8 = 13;
+ _G(kernel).trigger_mode = KT_DAEMON;
+ kernel_timing_trigger(1, _trigger1);
+ break;
+
+ case 30:
+ kernel_timing_trigger(1, 31);
+ break;
+
+ case 31:
+ _pu01 = series_stream(_val5 ? "603pu04" : "603pu04a", 5, 0, 33);
+ break;
+
+ case 40:
+ conv_resume();
+ digi_play(sound, 1);
+ break;
+
+ default:
+ if (sound) {
+ if (who <= 0) {
+ if (!_val5) {
+ _val8 = 8;
+ } else if (node == 0 || node == 1 || node == 2) {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 41, 43, -1,
+ _ttDigShirtOff, 41, 43, 0);
+ sendWSMessage_190000(_tt, 13);
+ sendWSMessage_1a0000(_tt, 13);
+ } else if (node == 12 && entry == 1) {
+ _val8 = 8;
+ kernel_timing_trigger(200, 20);
+ kernel_timing_trigger(760, 21);
+ } else if (node == 12 && entry == 2) {
+ _val8 = 8;
+ kernel_timing_trigger(210, 22);
+ } else if (node == 11 && entry == 0) {
+ _val8 = 14;
+ } else if ((node == 27 && entry == 0) ||
+ (node == 6 && entry == 0)) {
+ _val8 = 11;
+ } else if (node == 3 && entry == 7) {
+ digi_preload("17_04n08");
+ digi_preload("17_04n99");
+ _pu01 = series_stream("603pu01", 5, 0, 10);
+ series_stream_break_on_frame(_pu01, 6, 2);
+ } else {
+ _val8 = 8;
+ }
+ } else if (who == 1) {
+ if (node == 3 && entry == 0) {
+ _num1 = 1;
+ } else if (node == 3 && entry == 6) {
+ sendWSMessage_10000(_tt, 501, 234, 1, 3, 1);
+ } else if ((node == 4 && entry == 0) || (node == 7)) {
+ _num1 = 8;
+ } else if (node == 0 || node == 1 || node == 2) {
+ _num1 = 13;
+ } else if (node == 6 && entry == 0) {
+ _num1 = 2;
+ } else if (node == 6 && entry == 1) {
+ _num1 = 6;
+ } else if (node == 15 && entry == 0) {
+ _num1 = 6;
+ } else if (node == 14 && entry == 0) {
+ _num1 = 8;
+ } else if (node == 27 && entry == 0) {
+ _num1 = 10;
+ } else if (node == 8 && entry == 0) {
+ _num1 = 9;
+ } else if ((node == 11 && entry == 0) ||
+ (node == 25 && entry == 0)) {
+ _num1 = 10;
+ } else if (node == 25 && entry == 2) {
+ _num1 = 7;
+ } else if ((node == 12 && entry == 1) ||
+ (node == 7 && entry == 0)) {
+ _num1 = 6;
+ } else if (node == 5 && entry == 0) {
+ _num1 = 10;
+ } else if (_val2) {
+ _num1 = 5;
+ }
+ }
+
+ digi_play(sound, 1);
+
+ } else {
+ conv_resume();
+ }
+ break;
+ }
+}
+
+void Room603::conv603b() {
// TODO
}
+void Room603::unloadSeries() {
+ series_unload(200);
+ series_unload(201);
+ series_unload(202);
+ series_unload(203);
+ series_unload(204);
+ series_unload(210);
+ series_unload(211);
+ series_unload(212);
+ series_unload(214);
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section6/room603.h b/engines/m4/riddle/rooms/section6/room603.h
index 486ee0ed7e9..f036f9bd330 100644
--- a/engines/m4/riddle/rooms/section6/room603.h
+++ b/engines/m4/riddle/rooms/section6/room603.h
@@ -30,7 +30,7 @@ namespace Rooms {
class Room603 : public Room {
private:
- int _val1 = 0;
+ int _trigger1 = 0;
int _val2 = 0;
int _val3 = 0;
int _val4 = 0;
@@ -40,6 +40,8 @@ private:
int _val8 = 0;
int _val9 = 0;
int _val10 = 0;
+ int _num1 = 0;
+ int _num2 = 0;
machine *_shed = nullptr;
machine *_shenWalker = nullptr;
machine *_kuangWalker = nullptr;
@@ -50,6 +52,9 @@ private:
machine *_door = nullptr;
machine *_tt = nullptr;
machine *_ttShadow = nullptr;
+ machine *_pu01 = nullptr;
+ machine *_ripley = nullptr;
+ machine *_shadow = nullptr;
int _rp01 = 0;
int _rp02 = 0;
int _ttDigShirtOff = 0;
@@ -63,6 +68,10 @@ private:
int _ripHandChin = 0;
int _ripTwoHandTalk = 0;
+ void conv603a();
+ void conv603b();
+ void unloadSeries();
+
public:
Room603() : Room() {}
~Room603() override {}
More information about the Scummvm-git-logs
mailing list