[Scummvm-git-logs] scummvm master -> 6fd6f8e74b8284a1f4fc379ffbb512348b6d6e0e
dreammaster
noreply at scummvm.org
Fri Sep 20 05:17:20 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:
6fd6f8e74b M4: RIDDLE: More of room 603 daemon
Commit: 6fd6f8e74b8284a1f4fc379ffbb512348b6d6e0e
https://github.com/scummvm/scummvm/commit/6fd6f8e74b8284a1f4fc379ffbb512348b6d6e0e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2024-09-19T22:16:52-07:00
Commit Message:
M4: RIDDLE: More of room 603 daemon
Changed paths:
engines/m4/riddle/rooms/section6/room603.cpp
engines/m4/riddle/rooms/section6/room603.h
diff --git a/engines/m4/riddle/rooms/section6/room603.cpp b/engines/m4/riddle/rooms/section6/room603.cpp
index f6c24785db1..15e4893bc35 100644
--- a/engines/m4/riddle/rooms/section6/room603.cpp
+++ b/engines/m4/riddle/rooms/section6/room603.cpp
@@ -280,7 +280,463 @@ void Room603::init() {
}
void Room603::daemon() {
- // TODO
+ switch (_G(kernel).trigger) {
+ case 1:
+ player_set_commands_allowed(true);
+ break;
+
+ case 2:
+ player_set_commands_allowed(true);
+ digi_play("603_s03", 2);
+ break;
+
+ case 5:
+ terminateMachineAndNull(_door);
+ _door = series_play("603door", 0xf00, 18, 2, 8, 0, 100, 0, 0, 0, 14);
+ break;
+
+ case 10:
+ sendWSMessage_60000(_shenWalker);
+ sendWSMessage_60000(_kuangWalker);
+ _explosion = series_stream("603 EXPLOSION", 5, 0x100, -1);
+ series_stream_break_on_frame(_explosion, 40, 24);
+ break;
+
+ case 20:
+ disable_player_commands_and_fade_init(22);
+ break;
+
+ case 22:
+ kernel_timing_trigger(180, 23);
+ break;
+
+ case 23:
+ digi_stop(1);
+ digi_unload("explode");
+ digi_play_loop("950_s28a", 3, 90);
+ adv_kill_digi_between_rooms(false);
+ _G(game).setRoom(615);
+ break;
+
+ case 24:
+ midi_stop();
+ series_stream_break_on_frame(_explosion, 105, 20);
+ terminateMachineAndNull(_shed);
+ digi_play("explode", 1);
+ break;
+
+ case 200:
+ kernel_trigger_dispatchx(kernel_trigger_create(201));
+ break;
+
+ case 201:
+ switch (_val7) {
+ case 1:
+ switch (_val8) {
+ case 0:
+ switch (imath_ranged_rand(1, 3)) {
+ case 1:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 2, 2, 200,
+ _ttDigShirtOff, 2, 2, 0);
+ sendWSMessage_190000(_tt, imath_ranged_rand(10, 60));
+ break;
+ case 2:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 1, 1, 200,
+ _ttDigShirtOff, 1, 1, 0);
+ _val7 = 2;
+ sendWSMessage_190000(_tt, imath_ranged_rand(10, 60));
+ playRandomDigi(8);
+ break;
+ default:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 1, 14, 200,
+ _ttDigShirtOff, 15, 15, 0);
+ _val7 = 3;
+ sendWSMessage_190000(_tt, imath_ranged_rand(7, 10));
+ playRandomDigi(8);
+ break;
+ }
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 25, 43, 202,
+ _ttDigShirtOff, 43, 43, 0);
+ break;
+
+ case 22:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 25, 34, 210,
+ _ttDigShirtOff, 34, 34, 0);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ switch (_val8) {
+ case 0:
+ if (imath_ranged_rand(1, 2) == 1) {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 1, 1, 200,
+ _ttDigShirtOff, 1, 1, 0);
+ _val7 = 1;
+ } else {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 1, 1, 200,
+ _ttDigShirtOff, 1, 1, 0);
+ sendWSMessage_190000(_tt, imath_ranged_rand(10, 60));
+ }
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 1, 1, 200,
+ _ttDigShirtOff, 1, 1, 0);
+ _val7 = 1;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 3:
+ switch (_val8) {
+ case 0:
+ switch (imath_ranged_rand(1, 3)) {
+ case 1:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 15, 15, 200,
+ _ttDigShirtOff, 15, 15, 0);
+ sendWSMessage_190000(_tt, imath_ranged_rand(10, 60));
+ break;
+ case 2:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 14, 1, 200,
+ _ttDigShirtOff, 2, 2, 0);
+ _val7 = 1;
+ sendWSMessage_190000(_tt, imath_ranged_rand(7, 10));
+ break;
+ case 3:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 16, 24, 200,
+ _ttDigShirtOff, 24, 24, 0);
+ _val7 = 4;
+ sendWSMessage_190000(_tt, imath_ranged_rand(7, 10));
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 14, 1, 200,
+ _ttDigShirtOff, 2, 2, 0);
+ _val7 = 1;
+ break;
+
+ case 22:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 14, 1, 200,
+ _ttDigShirtOff, 2, 2, 0);
+ _val7 = 1;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 4:
+ switch (_val8) {
+ case 0:
+ if (imath_ranged_rand(1, 2) == 1) {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 24, 16, 200,
+ _ttDigShirtOff, 15, 15, 0);
+ _val7 = 3;
+ sendWSMessage_190000(_tt, imath_ranged_rand(7, 10));
+ playRandomDigi(8);
+ } else {
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 24, 24, 200,
+ _ttDigShirtOff, 24, 24, 0);
+ _val7 = 1;
+ sendWSMessage_190000(_tt, imath_ranged_rand(10, 60));
+ }
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 24, 16, 200,
+ _ttDigShirtOff, 15, 15, 0);
+ _val7 = 3;
+ break;
+
+ case 22:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 14, 16, 200,
+ _ttDigShirtOff, 15, 15, 0);
+ _val7 = 3;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 202:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 41, 43, -1,
+ _ttDigShirtOff, 41, 43, 1);
+ sendWSMessage_190000(_tt, 12);
+ sendWSMessage_1a0000(_tt, 12);
+ digi_play("603t02", 1, 255, 203);
+ break;
+
+ case 203:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 43, 43, -1,
+ _ttDigShirtOff, 43, 43, 1);
+ _num1 = 13;
+ digi_play("603r13", 1, 255, 204);
+ break;
+
+ case 204:
+ _num1 = 14;
+ kernel_timing_trigger(1, 300);
+ _G(kernel).trigger_mode = KT_PARSE;
+ conv_load("conv603a", 10, 10, 747);
+ conv_set_shading(65);
+ conv_export_value_curr(0, 0);
+ conv_export_value_curr(0, 1);
+ conv_play();
+ _G(kernel).trigger_mode = KT_DAEMON;
+ break;
+
+ case 210:
+ sendWSMessage_10000(1, _tt, _ttDigShirtOff, 35, 43, -1,
+ _ttDigShirtOff, 43, 43, 1);
+ digi_play("603t01", 1);
+ kernel_timing_trigger(60, 212);
+ break;
+
+ case 212:
+ if (player_said("take", "shirt") || player_said("take", "pole")) {
+ sendWSMessage_140000(213);
+ } else {
+ kernel_timing_trigger(1, 213);
+ }
+ break;
+
+ case 213:
+ if (player_said("take", "shirt") || player_said("take", "pole"))
+ series_unload(_ripAction);
+
+ Common::strcpy_s(_G(player).verb, "talk to");
+ Common::strcpy_s(_G(player).noun, "person in pit");
+ _G(kernel).trigger_mode = KT_PARSE;
+ ws_walk(311, 306, nullptr, 666, 10);
+ _G(kernel).trigger_mode = KT_DAEMON;
+ _G(player).disable_hyperwalk = false;
+ break;
+
+ case 300:
+ kernel_trigger_dispatchx(kernel_trigger_create(301));
+ break;
+
+ case 301:
+ switch (_num2) {
+ case 0:
+ switch (_num1) {
+ case 0:
+ sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, 300, _ripTalk, 1, 1, 0);
+ break;
+ case 2:
+ case 8:
+ case 14:
+ sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 1, 15, 300,
+ _ripHandsBehindBack, 15, 15, 0);
+ _num2 = 8;
+ sendWSMessage_190000(_ripley, 4);
+ break;
+
+ case 5:
+ sendWSMessage_10000(1, _ripley, _ripTalk, 1, 1, -1, _ripTalk, 1, 7, 4);
+ sendWSMessage_1a0000(_ripley, 13);
+ break;
+
+ case 6:
+ sendWSMessage_10000(1, _ripley, _ripTwoHandTalk, 1, 6, 300,
+ _ripTwoHandTalk, 6, 6, 0);
+ _num2 = 6;
+ break;
+
+ case 9:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 1, 16, 300,
+ _ripHandChin, 16, 16, 0);
+ _num2 = 9;
+ break;
+
+ case 10:
+ sendWSMessage_10000(1, _ripley, _ripHandsHips, 1, 12, 300,
+ _ripHandsHips, 12, 12, 0);
+ _num2 = 10;
+ break;
+
+ case 11:
+ terminateMachineAndNull(_ripley);
+ player_set_commands_allowed(true);
+ ws_unhide_walker();
+ break;
+
+ case 12:
+ terminateMachineAndNull(_ripley);
+ ws_unhide_walker();
+ terminateMachineAndNull(_shadow);
+ ws_walk(670, 232, nullptr, -1, 3);
+ break;
+
+ default:
+ break;
+ }
+ break;
+ // TODO
+ default:
+ break;
+ }
+ break;
+
+ case 302:
+ sendWSMessage_10000(1, _ripley, _rp01, 16, 36, 300,
+ _ripHandsBehindBack, 15, 15, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ _num2 = 13;
+ _num1 = 14;
+ digi_play("603r12", 1, 255, 203);
+ break;
+
+ case 303:
+ if (_val8 == 22)
+ kernel_timing_trigger(1, 22);
+ else
+ _val8 = 5;
+ break;
+
+ case 304:
+ sendWSMessage_10000(1, _ripley, _ripHandsBehindBack, 15, 15, 300,
+ _ripHandsBehindBack, 15, 15, 0);
+ _shadow = series_show("safari shadow 2", 0xf00, 128, -1, -1, 0, 59, 311, 308);
+ break;
+
+ case 305:
+ sendWSMessage_10000(1, _ripley, _ripHandChin, 29, 36, 309,
+ _rp02, 36, 36, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ digi_play("603_s01", 2, 255, 306);
+ break;
+
+ case 306:
+ conv_resume();
+ break;
+
+ case 309:
+ sendWSMessage_10000(1, _ripley, _rp02, 36, 30, 310, _rp02, 30, 30, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ break;
+
+ case 310:
+ sendWSMessage_10000(1, _ripley, _rp02, 30, 37, 311, _rp02, 37, 37, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ break;
+
+ case 311:
+ sendWSMessage_10000(1, _ripley, _rp02, 36, 31, 312, _rp02, 31, 31, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ break;
+
+ case 312:
+ sendWSMessage_10000(1, _ripley, _rp02, 32, 38, 313, _rp02, 38, 38, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ digi_play("603_s01a", 2);
+ break;
+
+ case 313:
+ sendWSMessage_10000(1, _ripley, _rp02, 39, 124, 320, _rp02, 124, 124, 0);
+ sendWSMessage_1e0000(_ripley, 0, 0);
+ sendWSMessage_200000(_ripley, 100);
+ digi_stop(2);
+ break;
+
+ case 320:
+ terminateMachineAndNull(_ripley);
+ _treesGoneHome = series_show("603rp02a", 0x100, 16);
+ _tt = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x200, 0,
+ triggerMachineByHashCallbackNegative, "tt");
+ sendWSMessage_10000(1, _tt, _tt03, 1, 39, 322, _tt03, 39, 39, 0);
+ break;
+
+ case 322:
+ sendWSMessage_10000(1, _tt, _tt03, 40, 59, 324, _tt03, 59, 59, 0);
+ conv_resume();
+ break;
+
+ case 324:
+ sendWSMessage_10000(1, _tt, _tt03, 59, 82, 325, _tt03, 82, 82, 0);
+ digi_play("603_s01b", 2);
+ break;
+
+ case 325:
+ sendWSMessage_10000(1, _tt, _tt03, 83, 122, 326, _tt03, 122, 122, 0);
+ terminateMachineAndNull(_treesGoneHome);
+ terminateMachineAndNull(_shadow);
+ ws_unhide_walker();
+ ws_demand_facing(4);
+ ws_walk(345, 300, nullptr, -1, 10);
+ break;
+
+ case 326:
+ terminateMachineAndNull(_tt);
+ _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);
+ _val8 = 6;
+ _val7 = 6;
+ _ttShadow = series_show("tt walker shadow 4", 0xf00, 0, -1, -1, 0, 53, 291, 293);
+ series_unload(_rp01);
+ series_unload(_rp02);
+ _trigger1 = 400;
+ conv_resume();
+ break;
+
+ case 330:
+ sendWSMessage_10000(1, _ripley, _rp04, 31, 31, -1, _rp04, 31, 31, 0);
+ kernel_timing_trigger(100, 331);
+ break;
+
+ case 331:
+ sendWSMessage_10000(1, _ripley, _rp04, 32, 41, 300, _rp04, 15, 15, 0);
+ break;
+
+ case 400:
+ kernel_trigger_dispatchx(kernel_trigger_create(401));
+ break;
+
+ // TODO: Various
+ default:
+ break;
+ }
+
+ if (!_G(flags)[V191]) {
+ player_update_info();
+
+ if (_G(player_info).y < 284 && !_val3 && !_G(flags)[V203]) {
+ _val3 = 1;
+ _val8 = 22;
+ _G(kernel).call_daemon_every_loop = false;
+ _val7 = 1;
+ kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE);
+ player_set_commands_allowed(false);
+ }
+ }
}
void Room603::pre_parser() {
@@ -1242,6 +1698,15 @@ void Room603::enter() {
}
}
+void Room603::playRandomDigi(int max) {
+ static const char *SOUNDS[4] = {
+ "603_s02", "603_s02a", "603_s02b", "603_s02c"
+ };
+ int num = imath_ranged_rand(1, max) - 1;
+ if (num < 4)
+ digi_play(SOUNDS[num], 2);
+}
+
} // 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 c14fd2fcf4f..dc8d788f009 100644
--- a/engines/m4/riddle/rooms/section6/room603.h
+++ b/engines/m4/riddle/rooms/section6/room603.h
@@ -56,6 +56,7 @@ private:
machine *_ripley = nullptr;
machine *_shadow = nullptr;
machine *_treesGoneHome = nullptr;
+ machine *_explosion = nullptr;
int _rp01 = 0;
int _rp02 = 0;
int _ttDigShirtOff = 0;
@@ -77,6 +78,7 @@ private:
bool takeNote();
bool takePole();
void enter();
+ void playRandomDigi(int max);
public:
Room603() : Room() {}
More information about the Scummvm-git-logs
mailing list