/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see 374) break; switch (imath_ranged_rand(1, 3)) { case 1: digi_play("com077", 1, 255, 84, -1); break; case 2: digi_play("com078", 1, 255, 84, -1); break; case 3: digi_play("com079", 1, 255, 84, -1); break; default: break; } break; case 84: sendWSMessage_130000(_G(my_walker), 85); break; case 85: sendWSMessage_150000(_G(my_walker), 86); break; case 86: case 91: player_set_commands_allowed(true); break; case 123: if (_field78_mode != 124) break; switch (_field7C_should) { case 121: _706eye3aSeries = series_load("706eye3a", -1, nullptr); _field7C_should = 922; _monkMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 640, -53, 100, 256, false, triggerMachineByHashCallback, "monk"); sendWSMessage_10000(1, _monkMach, _706eye3aSeries, 1, 5, 123, _706eye3aSeries, 5, 5, 0); break; case 122: terminateMachine(_monkMach); series_unload(_706eye3aSeries); conv_resume(conv_get_handle()); break; case 125: conv_load("conv706a", 10, 10, 91); conv_export_value_curr(0, 0); conv_export_value_curr(_G(flags)[V211], 1); conv_export_value_curr(_G(flags)[V213], 2); conv_export_value_curr((_G(flags)[V219] == 4) ? 1 : 0, 0); conv_play(conv_get_handle()); break; case 922: switch (imath_ranged_rand(1, 2)) { case 1: _field7C_should = 923; break; case 2: _field7C_should = 924; break; default: break; } kernel_timing_trigger(10, 123, nullptr); break; case 923: _field7C_should = 925; sendWSMessage_10000(1, _monkMach, _706eye3aSeries, 6, 9, -1, _706eye3aSeries, 10, 11, 4); sendWSMessage_1a0000(_monkMach, 9); digi_play(conv_sound_to_play(), 1, 255, 123, -1); break; case 924: _field7C_should = 925; sendWSMessage_10000(1, _monkMach, _706eye3aSeries, 10, 10, -1, _706eye3aSeries, 10, 11, 4); sendWSMessage_1a0000(_monkMach, 9); digi_play(conv_sound_to_play(), 1, 255, 123, -1); break; case 925: _field7C_should = 926; sendWSMessage_10000(1, _monkMach, _706eye3aSeries, 12, 15, 123, _706eye3aSeries, 15, 15, 0); break; case 926: _field7C_should = 122; kernel_timing_trigger(10, 123, nullptr); break; default: // including case 126 break; } break; case 127: if (_field78_mode != 124) break; switch (_field7C_should) { case 121: case 122: case 124: case 125: case 126: case 127: case 922: case 923: case 924: case 925: case 926: kernel_timing_trigger(1, 123, nullptr); break; default: break; } break; case 131: sendWSMessage_120000(_G(my_walker), 132); break; case 132: digi_play("706r23", 1, 255, 133, -1); break; case 133: sendWSMessage_150000(_G(my_walker), 135); break; case 135: series_unload(_ripShieldsFaceSeries); player_set_commands_allowed(true); break; case 140: player_set_commands_allowed(true); ws_unhide_walker(_G(my_walker)); terminateMachine(_ripStairsMach); kernel_timing_trigger(10, 141, nullptr); break; case 141: series_unload(_706RipGoesDownStairsSeries); break; default: break; } } void Room706::conv706a() { const char *digiName = conv_sound_to_play(); if (digiName == nullptr) { conv_resume(conv_get_handle()); return; } const int32 who = conv_whos_talking(); if (who <= 0) { _field7C_should = 121; _G(kernel).trigger_mode = KT_DAEMON; kernel_trigger_dispatchx(kernel_trigger_create(127)); _G(kernel).trigger_mode = KT_PARSE; } else if (who == 1) { digi_play(digiName, 1, 255, 90); } } void Room706::playCheckBrochureAnim(int32 trigger, const char *digiName) { switch (trigger) { case -1: player_set_commands_allowed(false); player_update_info(_G(my_walker), &_G(player_info)); ws_walk(_G(my_walker), _G(player_info).x + 1, _G(player_info).y - 1, nullptr, 41, 1, true); break; case 41: _ripChecksBrochureSeries = series_load("RIP CHECKS BROCHURE", -1, nullptr); setGlobals1(_ripChecksBrochureSeries, 1, 25, 25, 25, 0, 25, 31, 31, 31, 0, 31, 1, 1, 1, 0, 0, 0, 0, 0, 0); sendWSMessage_110000(_G(my_walker), -1); kernel_timing_trigger(60, 43, nullptr); break; case 43: sendWSMessage_120000(_G(my_walker), -1); digi_play(digiName, 1, 255, 44, -1); break; case 44: kernel_timing_trigger(10, 45, nullptr); break; case 45: sendWSMessage_130000(_G(my_walker), 48); break; case 48: sendWSMessage_150000(_G(my_walker), 49); break; case 49: // CHECKME: Loading the series is totally illogical, despite it's in the original game. // At this point, we usually unload the series (+ it's already loaded). I suspect it could lead to a memory leak. _ripChecksBrochureSeries = series_load("RIP CHECKS BROCHURE"); player_set_commands_allowed(true); break; default: break; } } void Room706::useWheelOnNiche(int32 trigger, int32 val1) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); if (_G(flags)[V219] == 0) { setGlobals1(_ripTrekMedReachHandPos1Series, 1, 5, 5, 5, 0, 5, 10, 10, 10, 0, 10, 1, 1, 1, 0, 0, 0, 0, 0, 0); sendWSMessage_110000(_G(my_walker), 101); } else { digi_play("com080", 1, 255, 114, -1); } break; case 101: kernel_timing_trigger(5, 102, nullptr); break; case 102: sendWSMessage_120000(_G(my_walker), 103); break; case 103: kernel_timing_trigger(5, 104, nullptr); break; case 104: if (_G(flags)[V219] != 0) return; switch (val1) { case 1: inv_move_object("PEACE WHEEL", 706); _G(flags)[V219] = 1; digi_play("950_S40A", 2, 255, -1, 950); _prayerWheelMach = series_place_sprite("706 PEACE PRAYER WHEEL", 0, 640, 0, 100, 1280); break; case 2: inv_move_object("INSIGHT WHEEL", 706); _G(flags)[V219] = 2; digi_play("950_S40A", 2, 255, -1, 950); _prayerWheelMach = series_place_sprite("706 INSIGHT PRAYER WHEEL", 0, 640, 0, 100, 1280); break; case 3: inv_move_object("SERENITY WHEEL", 706); _G(flags)[V219] = 3; digi_play("950_S40A", 2, 255, -1, 950); _prayerWheelMach = series_place_sprite("706 SERENITY PRAYER WHEEL", 0, 640, 0, 100, 1280); break; case 4: inv_move_object("TRUTH WHEEL", 706); _G(flags)[V219] = 4; digi_play("950_S40A", 2, 255, -1, 950); _prayerWheelMach = series_place_sprite("706 TRUTH PRAYER WHEEL", 0, 640, 0, 100, 1280); break; case 5: inv_move_object("WISDOM WHEEL", 706); _G(flags)[V219] = 5; digi_play("950_S40A", 2, 255, -1, 950); _prayerWheelMach = series_place_sprite("706 WISDOM PRAYER WHEEL", 0, 640, 0, 100, 1280); break; default: return; } kernel_timing_trigger(5, 105, nullptr); break; case 105: switch (val1) { case 1: digi_play("705r06", 1, 255, -1, 705); break; case 2: digi_play("705r15", 1, 255, -1, 705); break; case 3: digi_play("704r10", 1, 255, -1, 704); break; case 4: sendWSMessage_130000(_G(my_walker), 106); return; case 5: digi_play("703r12", 1, 255, -1, 703); break; default: break; } sendWSMessage_130000(_G(my_walker), 113); break; case 106: digi_play("706r11", 1, 255, 107, -1); break; case 107: _706Monk3Series = series_load("706 MONK 3", -1, nullptr); _monkMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 640, -53, 100, 256, false, triggerMachineByHashCallback, "monk"); sendWSMessage_10000(1, _monkMach, _706Monk3Series, 1, 11, 908, _706Monk3Series, 11, 11, 0); break; case 108: terminateMachine(_monkMach); series_unload(_706Monk3Series); sendWSMessage_150000(_G(my_walker), -1); ws_walk(_G(my_walker), 6, 344, nullptr, 109, 11, true); break; case 109: ws_walk(_G(my_walker), 4, 290, nullptr, -1, 11, true); kernel_timing_trigger(60, 111, nullptr); break; case 111: disable_player_commands_and_fade_init(112); break; case 112: adv_kill_digi_between_rooms(false); digi_play_loop("950_s39", 3, 255, -1, -1); _G(game).setRoom(705); break; case 113: if (_G(flags)[V219] == 4) { terminateMachine(_monkMach); series_unload(_706Monk3Series); } sendWSMessage_150000(_G(my_walker), 114); break; case 114: hotspot_set_active(_G(currentSceneDef).hotspots, "PRAYER WHEEL #15", true); hotspot_set_active(_G(currentSceneDef).hotspots, "EMPTY NICHE", false); player_set_commands_allowed(true); break; case 908: sendWSMessage_10000(1, _monkMach, _706Monk3Series, 11, 16, -1, _706Monk3Series, 17, 18, 0); sendWSMessage_1a0000(_monkMach, 9); digi_play("706p02", 1, 255, 912, -1); break; case 912: sendWSMessage_10000(1, _monkMach, _706Monk3Series, 19, 22, 113, _706Monk3Series, 19, 22, 0); break; default: break; } } } // namespace Rooms } // namespace Riddle } // namespace M4