[Scummvm-git-logs] scummvm master -> b4545dfda0d613c8011b5b8c95f3cc1a7402a1ee
dreammaster
noreply at scummvm.org
Mon Sep 30 03:23: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:
b4545dfda0 M4: RIDDLE: Added room 610 daemon
Commit: b4545dfda0d613c8011b5b8c95f3cc1a7402a1ee
https://github.com/scummvm/scummvm/commit/b4545dfda0d613c8011b5b8c95f3cc1a7402a1ee
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-29T20:23:05-07:00
Commit Message:
M4: RIDDLE: Added room 610 daemon
Changed paths:
engines/m4/riddle/rooms/section6/room610.cpp
engines/m4/riddle/rooms/section6/room610.h
diff --git a/engines/m4/riddle/rooms/section6/room610.cpp b/engines/m4/riddle/rooms/section6/room610.cpp
index a6adcf8b415..0f37f7b99b1 100644
--- a/engines/m4/riddle/rooms/section6/room610.cpp
+++ b/engines/m4/riddle/rooms/section6/room610.cpp
@@ -124,7 +124,330 @@ void Room610::init() {
}
void Room610::daemon() {
- // TODO
+ daemonPreprocess();
+
+ switch (_G(kernel).trigger) {
+ case 1:
+ player_set_commands_allowed(1);
+ break;
+
+ case 10:
+ _pu01 = series_stream("610pu01", 5, 0, 103);
+ series_stream_break_on_frame(_pu01, 6, 102);
+ ws_demand_location(272, 273, 7);
+ ws_hide_walker();
+
+ _ripAction = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallback610, "spleen");
+ sendWSMessage_10000(1, _ripAction, _ripPeerAroundHut, 1, 65, -1,
+ _ripPeerAroundHut, 65, 65, 1);
+ break;
+
+ case 102:
+ digi_play("610k01", 1);
+ break;
+
+ case 103:
+ digi_play("610k02", 1, 255, 104);
+ break;
+
+ case 104:
+ digi_play("610k03", 1, 255, 107);
+ break;
+
+ case 107:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt1, 1, 36, 108,
+ _sgSlapsTt1, 36, 36, 1);
+ break;
+
+ case 108:
+ digi_play("610k04", 1, 255, 112);
+ sendWSMessage_10000(1, _ripAction, _ripPeerAroundHut, 65, 53, 109,
+ _ripPeerAroundHut, 53, 53, 1);
+ sendWSMessage_190000(_ripAction, 10);
+ break;
+
+ case 109:
+ kernel_timing_trigger(200, 110);
+ break;
+
+ case 110:
+ sendWSMessage_10000(1, _ripAction, _ripPeerAroundHut, 53, 65, -1,
+ _ripPeerAroundHut, 65, 65, 1);
+ break;
+
+ case 112:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt1, 37, 68, 115,
+ _sgSlapsTt1, 68, 68, 1);
+ digi_play("610t01", 1);
+ break;
+
+ case 115:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt1, 69, 81, 117,
+ _sgSlapsTt1, 81, 81, 1);
+ digi_play("610s01", 1, 255, 116);
+ break;
+
+ case 116:
+ _val7 = 1;
+ break;
+
+ case 117:
+ if (_val7)
+ kernel_timing_trigger(1, 120);
+ else
+ kernel_timing_trigger(30, 117);
+ break;
+
+ case 120:
+ sendWSMessage_10000(1, _k, _k00, 59, 60, -1, _k00, 60, 60, 1);
+ sendWSMessage_10000(1, _ripAction, _ripPeerAroundHut, 65, 53, 122,
+ _ripPeerAroundHut, 53, 53, 1);
+ sendWSMessage_190000(_ripAction, 10);
+ digi_play("610k05", 1, 255, 124);
+ break;
+
+ case 121:
+ kernel_timing_trigger(50, 122);
+ break;
+
+ case 122:
+ sendWSMessage_10000(1, _ripAction, _ripPeerAroundHut, 53, 65, 123,
+ _ripPeerAroundHut, 65, 65, 1);
+ break;
+
+ case 123:
+ terminateMachineAndNull(_ripAction);
+ ws_unhide_walker();
+ break;
+
+ case 124:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt1, 82, 90, 125,
+ _sgSlapsTt1, 90, 90, 1);
+ break;
+
+ case 125:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt1, 91, 110, 128,
+ _sgSlapsTt1, 110, 110, 1);
+ digi_play(imath_ranged_rand(1, 2) == 1 ? "610_s02" : "610_s02a", 2);
+ break;
+
+ case 126:
+ switch (imath_ranged_rand(1, 3)) {
+ case 1:
+ digi_play("610_s03", 2);
+ break;
+ case 2:
+ digi_play("610_s03a", 2);
+ break;
+ case 3:
+ digi_play("610_s03b", 2);
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case 128:
+ sendWSMessage_10000(1, _k, _k00, 50, 60, -1, _k00, 50, 60, 4);
+ sendWSMessage_190000(_k, 11);
+ sendWSMessage_1a0000(_k, 11);
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 1, -1,
+ _sgSlapsTt2, 1, 1, 1);
+ digi_play("610k06", 1, 255, 130);
+ break;
+
+ case 130:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 1, 200,
+ _sgSlapsTt2, 1, 1, 1);
+ _val1 = 1;
+ _val2 = 0;
+ _val3 = 0;
+ sendWSMessage_10000(1, _k, _k00, 50, 50, 400, _k00, 50, 60, 4);
+ sendWSMessage_190000(_k, 11);
+ sendWSMessage_1a0000(_k, 11);
+ _val4 = 0;
+ _val5 = 1;
+ _val6 = 0;
+ _flag2 = 1;
+ player_set_commands_allowed(true);
+ kernel_timing_trigger(300, 135);
+ break;
+
+ case 200:
+ kernel_trigger_dispatchx(kernel_trigger_create(201));
+ break;
+
+ case 201:
+ switch (_val1) {
+ case 1:
+ switch (_val2) {
+ case 0:
+ if (imath_ranged_rand(1, 40) == 1) {
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 46, 200,
+ _sgSlapsTt2, 46, 46, 0);
+ _val1 = 2;
+ } else {
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 1, 200,
+ _sgSlapsTt2, 1, 1, 0);
+ }
+ break;
+
+ case 1:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 1, 200,
+ _sgSlapsTt2, 1, 1, 0);
+ break;
+
+ case 3:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 1, 46, 200,
+ _sgSlapsTt2, 46, 46, 0);
+ _val1 = 2;
+ break;
+
+ case 4:
+ sendWSMessage_10000(1, _sgTt, _sgPullsGun, 1, 36, -1,
+ _sgPullsGun, 36, 36, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ switch (_val2) {
+ case 0:
+ if (imath_ranged_rand(1, 40) == 1) {
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 46, 1, 200,
+ _sgSlapsTt2, 1, 1, 0);
+ _val1 = 1;
+ } else {
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 46, 46, 200,
+ _sgSlapsTt2, 46, 46, 0);
+ }
+ break;
+
+ case 2:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 46, 46, 200,
+ _sgSlapsTt2, 46, 46, 0);
+ break;
+
+ case 3:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 47, 48, 202,
+ _sgSlapsTt2, 48, 48, 0);
+ _val1 = 1;
+ _val2 = 0;
+ break;
+
+ default:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 47, 48, 202,
+ _sgSlapsTt2, 48, 48, 0);
+ _val1 = 1;
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 202:
+ sendWSMessage_10000(1, _sgTt, _sgSlapsTt2, 49, 62, 200,
+ _sgSlapsTt2, 1, 1, 0);
+
+ digi_play(imath_ranged_rand(1, 2) == 1 ? "610_s02" : "610_s02a", 2);
+ kernel_timing_trigger(20, 126);
+ break;
+
+ case 400:
+ kernel_trigger_dispatchx(kernel_trigger_create(401));
+ break;
+
+ case 401:
+ switch (_val4) {
+ case 0:
+ sendWSMessage_10000(1, _k, _k00, 54, 54, 400, _k00, 54, 54, 0);
+ break;
+
+ case 1:
+ if (imath_ranged_rand(5, 10) < ++_val6) {
+ _val6 = 0;
+
+ if (imath_ranged_rand(1, 2) == 1) {
+ kernel_timing_trigger(50, 400);
+ } else {
+ sendWSMessage_10000(1, _k, _k00, 1, 53, 400, _k00, 54, 60, 4);
+ sendWSMessage_1a0000(_k, 11);
+ }
+ } else {
+ kernel_timing_trigger(50, 400);
+ }
+ break;
+
+ case 2:
+ digi_stop(2);
+ sendWSMessage_10000(1, _k, _k01, 1, 29, 665, _k01, 29, 29, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 665:
+ if (!player_said("talk to", "KUANG") &&
+ !player_said("talk to", "SHEN GUO") &&
+ !player_said("talk to", "SAMANTHA")) {
+ if (player_said("gear", "WHALE BONE HORN")) {
+ disable_player_commands_and_fade_init(700);
+ interface_hide();
+ } else {
+ digi_play("610K14", 1, 255, 667);
+ }
+ }
+ break;
+
+ case 666:
+ ws_hide_walker();
+ _ripAction = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ triggerMachineByHashCallback610, "spleen");
+ sendWSMessage_10000(1, _ripAction, _rp04, 1, 21, -1, _rp04, 21, 11, 4);
+ sendWSMessage_1a0000(_ripAction, 50);
+ break;
+
+ case 667:
+ digi_play("610R10", 1, 255, 668);
+ break;
+
+ case 668:
+ disable_player_commands_and_fade_init(669);
+ interface_hide();
+ break;
+
+ case 669:
+ kernel_timing_trigger(30, 670);
+ break;
+
+ case 670:
+ digi_play("950_s14", 1, 255, 671);
+ break;
+
+ case 671:
+ _flag1 = true;
+ other_save_game_for_resurrection();
+ _G(game).setRoom(413);
+ break;
+
+ case 700:
+ digi_play("610R11", 1, 255, 669);
+ break;
+
+ default:
+ break;
+ }
+
+ daemonPostprocess();
}
void Room610::pre_parser() {
@@ -226,10 +549,10 @@ void Room610::talkKuangShenGuo() {
case 1:
ws_hide_walker();
- _spleen = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ _ripAction = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
triggerMachineByHashCallback610, "spleen");
- sendWSMessage_10000(1, _spleen, _rp04, 1, 21, 2, _rp04, 21, 11, 4);
- sendWSMessage_1a0000(_spleen, 50);
+ sendWSMessage_10000(1, _ripAction, _rp04, 1, 21, 2, _rp04, 21, 11, 4);
+ sendWSMessage_1a0000(_ripAction, 50);
break;
case 2:
@@ -272,10 +595,10 @@ void Room610::talkSamantha() {
case 1:
ws_hide_walker();
- _spleen = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
+ _ripAction = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, 0,
triggerMachineByHashCallback610, "spleen");
- sendWSMessage_10000(1, _spleen, _rp04, 1, 21, 2, _rp04, 21, 11, 4);
- sendWSMessage_1a0000(_spleen, 50);
+ sendWSMessage_10000(1, _ripAction, _rp04, 1, 21, 2, _rp04, 21, 11, 4);
+ sendWSMessage_1a0000(_ripAction, 50);
break;
case 2:
@@ -326,7 +649,7 @@ void Room610::useWindow() {
kernel_timing_trigger(1, 1);
} else {
ws_hide_walker();
- _spleen = series_play("610rp02", 0, 0, 3, 5, 0, 100, 0, 0, 0, 32);
+ _ripAction = series_play("610rp02", 0, 0, 3, 5, 0, 100, 0, 0, 0, 32);
}
break;
@@ -339,7 +662,7 @@ void Room610::useWindow() {
break;
case 3:
- _spleen = series_play("610rp02", 0, 0, 4, 5, 0, 100, 0, 0, 33, 64);
+ _ripAction = series_play("610rp02", 0, 0, 4, 5, 0, 100, 0, 0, 33, 64);
digi_play("610_s01", 2);
hotspot_set_active("window", false);
hotspot_set_active("window ", true);
@@ -357,6 +680,77 @@ void Room610::useWindow() {
}
}
+void Room610::daemonPreprocess() {
+ switch (_G(kernel).trigger) {
+ case 135:
+ if (!_flag1) {
+ if (++_val8 >= 8)
+ _val8 = 1;
+
+ switch (_val8) {
+ case 1:
+ digi_play("610k07", 2, 150);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 2:
+ digi_play("610k08", 2, 150);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 3:
+ digi_play("610k09", 2, 150);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 4:
+ digi_play("610k10", 2, 150);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 5:
+ digi_play("610k11", 2, 150);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 6:
+ digi_play("610k12", 2, 150, 137);
+ kernel_timing_trigger(400, 135);
+ break;
+ case 7:
+ digi_play("610k13", 2, 150);
+ kernel_timing_trigger(500, 135);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
+ case 137:
+ _val2 = 3;
+ break;
+
+ default:
+ break;
+ }
+}
+
+void Room610::daemonPostprocess() {
+ if (!_flag1 && _flag2) {
+ player_update_info();
+
+ if (_G(player_info).x <= 222)
+ player_set_commands_allowed(false);
+
+ if (!player_said("talk to", "KUANG") &&
+ !player_said("talk to", "SHEN GUO") &&
+ !player_said("talk to", "SAMANTHA") &&
+ _G(player_info).x <= 222) {
+ intr_cancel_sentence();
+ ws_walk(202, 244, nullptr, 666, 11);
+ _flag1 = true;
+ _val5 = 2;
+ _val2 = 4;
+ }
+ }
+}
+
} // namespace Rooms
} // namespace Riddle
} // namespace M4
diff --git a/engines/m4/riddle/rooms/section6/room610.h b/engines/m4/riddle/rooms/section6/room610.h
index 63dbe5a75e5..b3ae4da494d 100644
--- a/engines/m4/riddle/rooms/section6/room610.h
+++ b/engines/m4/riddle/rooms/section6/room610.h
@@ -37,9 +37,10 @@ private:
int _sgSlapsTt1 = 0;
int _sgSlapsTt2 = 0;
int _sgPullsGun = 0;
- machine *_spleen = nullptr;
+ machine *_ripAction = nullptr;
machine *_k = nullptr;
machine *_sgTt = nullptr;
+ machine *_pu01 = nullptr;
int _val1 = 0;
int _val2 = 0;
int _val3 = 0;
@@ -57,6 +58,8 @@ private:
void talkSamantha();
bool useHorn();
void useWindow();
+ void daemonPreprocess();
+ void daemonPostprocess();
public:
Room610() : Room() {}
More information about the Scummvm-git-logs
mailing list