/* 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 = 5) { static const char *NAMES[7] = { "103h002a", "103h002b", "103h002c", "103h002d", "103h002e", "103h002f", "103h002g" }; assert(_digi1 >= 1 && _digi1 <= 7); digi_play(NAMES[_digi1 - 1], 2, 255, 1); } else { kernel_timing_trigger(60, 2); } break; case 3: terminateMachineAndNull(_series2); series_load("103ha03"); series_load("103ha03s"); digi_preload("103H005"); digi_preload_stream_breaks(SERIES2); series_play("103ha01s", 0x201); series_stream_with_breaks(SERIES2, "103ha01", 6, 0x200, 4); break; case 4: digi_unload_stream_breaks(SERIES2); series_play_with_breaks(PLAY2, "103ha03", 0x200, 9, 3, 12); break; case 6: digi_play("103H005", 1, 255, 7); break; case 7: _G(flags)[kHarryComingToRoof] = 0; _G(flags)[V009] = _G(flags).get_boonsville_time_and_display() + 1800; _G(flags)[V012] = 2; pal_fade_init(_G(kernel).first_fade, 255, 0, 30, 1001); break; case 8: player_update_info(); digi_stop(1); if ((_G(player_info).x > 391 && _G(player_info).y < 321) || (_G(player_info).x > 490 && _G(player_info).y < 374) || (_G(player_info).x > 215 && _G(player_info).y < 267) || (_G(player_info).y < 224)) { ws_walk(271, 265, nullptr, 19, 2); term_message("walk to caught"); } else { kernel_timing_trigger(1, 19); term_message("don't walk to caught"); } break; case 9: series_play_with_breaks(PLAY3, "103ha03", 0x201, 9, 3, 12); series_play_with_breaks(PLAY2, "103ha03", 0x200, 9, 3, 12); break; case kCHANGE_CROW1_ANIMATION: switch (_crow1Should) { case 12: if (imath_ranged_rand(1, 3) == 1) { Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 30, 0, 100, 0, 0, 1, 2); } else { Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 60, 0, 100, 0, 0, 0, 0); } break; case 13: switch (imath_ranged_rand(1, 8)) { case 1: _crow1Should = 12; Series::series_play("103cr01", 0x100, 2, kCHANGE_CROW1_ANIMATION, 30, 0, 100, 0, 0, 1, 2); break; case 3: Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 6, 0, 100, 0, 0, 7, 15); break; case 4: case 5: _crow1Should = 14; Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 30, 0, 100, 0, 0, 3, 4); break; default: Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 60, 0, 100, 0, 0, 2, 2); break; } break; case 14: if (imath_ranged_rand(1, 4) == 1) { _crow1Should = 13; Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 6, 0, 100, 0, 0, 5, 15); } else { Series::series_play("103cr01", 0x100, 0, kCHANGE_CROW1_ANIMATION, 60, 0, 100, 0, 0, 4, 4); } break; default: break; } break; case kCHANGE_CROW2_ANIMATION: switch (_crow2Should) { case 15: if (imath_ranged_rand(1, 4) == 1) { _crow2Should = 16; series_play("103cr02", 0x100, 0, kCHANGE_CROW2_ANIMATION, 30, 0, 100, 0, 0, 1, 2); series_play("103cr02s", 0x100, 0, -1, 30, 0, 100, 0, 0, 1, 2); } else { series_play("103cr02", 0x100, 0, kCHANGE_CROW2_ANIMATION, 70, 0, 100, 0, 0, 0, 0); series_play("103cr02s", 0x100, 0, -1, 70, 0, 100, 0, 0, 0, 0); } break; case 16: switch (imath_ranged_rand(1, 5)) { case 1: _crow2Should = 15; series_play("103cr02", 0x100, 2, kCHANGE_CROW2_ANIMATION, 30, 0, 100, 0, 0, 1, 2); series_play("103cr02s", 0x100, 2, -1, 30, 0, 100, 0, 0, 1, 2); break; case 2: _crow2Should = 17; series_play("103cr02", 0x100, 0, kCHANGE_CROW2_ANIMATION, 30, 0, 100, 0, 0, 3, 4); series_play("103cr02s", 0x100, 0, -1, 30, 0, 100, 0, 0, 3, 4); break; default: series_play("103cr02", 0x100, 0, kCHANGE_CROW2_ANIMATION, 70, 0, 100, 0, 0, 2, 2); series_play("103cr02s", 0x100, 0, -1, 70, 0, 100, 0, 0, 2, 2); break; } break; case 17: switch (imath_ranged_rand(1, 6)) { case 1: _crow2Should = 16; series_play("103cr02", 0x100, 2, 11, 30, 0, 100, 0, 0, 3, 4); series_play("103cr02s", 0x100, 2, -1, 30, 0, 100, 0, 0, 3, 4); break; case 2: _crow2Should = 18; series_play("103cr02", 0x100, 0, 11, 30, 0, 100, 0, 0, 5, 8); series_play("103cr02s", 0x100, 0, -1, 30, 0, 100, 0, 0, 5, 8); break; default: series_play("103cr02", 0x100, 0, 11, 70, 0, 100, 0, 0, 4, 4); series_play("103cr02s", 0x100, 0, -1, 70, 0, 100, 0, 0, 4, 4); break; } break; case 18: if (imath_ranged_rand(1, 4) == 1) { _crow2Should = 17; series_play("103cr02", 0x100, 0, 11, 30, 0, 100, 0, 0, 9, 12); series_play("103cr02s", 0x100, 0, -1, 30, 0, 100, 0, 0, 9, 12); } else { series_play("103cr02", 0x100, 0, 11, 70, 0, 100, 0, 0, 8, 8); series_play("103cr02s", 0x100, 0, -1, 70, 0, 100, 0, 0, 8, 8); } break; default: break; } break; case kCHANGE_CROW3_ANIMATION: switch (_crow3Should) { case 19: if (imath_ranged_rand(1, 4) == 1) { _crow3Should = 20; series_play("103cr03", 0x100, 0, kCHANGE_CROW3_ANIMATION, 30, 0, 100, 0, 0, 1, 2); series_play("103cr03s", 0x100, 0, -1, 30, 0, 100, 0, 0, 1, 2); } else { series_play("103cr03", 0x100, 0, kCHANGE_CROW3_ANIMATION, 80, 0, 100, 0, 0, 0, 0); series_play("103cr03s", 0x100, 0, -1, 80, 0, 100, 0, 0, 0, 0); } break; case 20: switch (imath_ranged_rand(1, 6)) { case 1: _crow3Should = 19; series_play("103cr03", 0x100, 0, kCHANGE_CROW3_ANIMATION, 80, 0, 100, 0, 0, 4, 4); series_play("103cr03s", 0x100, 0, -1, 80, 0, 100, 0, 0, 4, 4); break; case 3: series_play("103cr03", 0x100, 0, kCHANGE_CROW3_ANIMATION, 80, 0, 100, 0, 0, 2, 2); series_play("103cr03s", 0x100, 0, -1, 80, 0, 100, 0, 0, 2, 2); break; default: series_play("103cr03", 0x100, 0, kCHANGE_CROW3_ANIMATION, 80, 0, 100, 0, 0, 3, 3); series_play("103cr03s", 0x100, 0, -1, 80, 0, 100, 0, 0, 3, 3); break; } break; default: break; } break; case kCHANGE_CROW4_ANIMATION: switch (_crow4Should) { case 21: switch (imath_ranged_rand(1, 6)) { case 1: series_play("103cr04", 0x100, 0, kCHANGE_CROW4_ANIMATION, 6, 0, 100, 0, 0, 5, 9); series_play("103cr04s", 0x100, 0, -1, 6, 0, 100, 0, 0, 5, 9); break; case 2: _crow4Should = 22; series_play("103cr04", 0x100, 0, kCHANGE_CROW4_ANIMATION, 30, 0, 100, 0, 0, 1, 2); series_play("103cr04s", 0x100, 0, -1, 30, 0, 100, 0, 0, 1, 2); break; default: series_play("103cr04", 0x100, 0, kCHANGE_CROW4_ANIMATION, 90, 0, 100, 0, 0, 0, 0); series_play("103cr04s", 0x100, 0, -1, 90, 0, 100, 0, 0, 0, 0); break; } break; case 22: if (imath_ranged_rand(1, 4) == 1) { _crow4Should = 21; series_play("103cr04", 0x100, 2, kCHANGE_CROW4_ANIMATION, 30, 0, 100, 0, 0, 0, 1); series_play("103cr04s", 0x100, 2, -1, 30, 0, 100, 0, 0, 0, 1); } else { series_play("103cr04", 0x100, 0, kCHANGE_CROW4_ANIMATION, 90, 0, 100, 0, 0, 0, 2); series_play("103cr04s", 0x100, 0, -1, 90, 0, 100, 0, 0, 2, 2); } break; default: break; } break; case 14: _digi1 = imath_ranged_rand(1, 7); preloadDigi1(); _G(flags)[kDisableFootsteps] = 1; if (_G(flags)[V024]) { player_set_commands_allowed(true); kernel_timing_trigger(60, 2); } else { wilbur_speech("103w003", 15); } _G(flags)[kHarryComingToRoof] = 1; _G(flags)[V024] = 1; _flag1 = true; _val7 = 0; _val0 = 0; break; case 15: player_set_commands_allowed(true); kernel_timing_trigger(1, 2); break; case 16: terminateMachineAndNull(_series1); break; case 17: _G(flags)[kHarryComingToRoof] = 0; _G(wilbur_should) = 6; _G(flags)[kDisableFootsteps] = 0; ws_walk(325, 173, nullptr, 10016); break; case 19: _G(flags)[kDisableFootsteps] = 1; terminateMachineAndNull(_series2); series_play_with_breaks(PLAY4, "103ha02", 0x100, kCHANGE_HARRY_ANIMATION, 2, 10, 100, 0, 0); _frame = 10; _harryShould = 9; break; case kCHANGE_HARRY_ANIMATION: switch (_harryShould) { case 9: if (imath_ranged_rand(1, 2) == 1) { if (++_frame >= 17) _frame = 15; } else { if (--_frame <= 10) _frame = 12; } series_play("103ha02", 0x101, 0, kCHANGE_HARRY_ANIMATION, 10, 0, 100, 0, 0, _frame, _frame); break; case 10: series_play("103ha02", 0x101, 0, 22, 6, 0, 100, 0, 0, 17, 22); break; default: break; } break; case 21: _harryShould = 10; kernel_timing_trigger(1, 24); break; case 22: series_play("103ha02", 0x101, 0, -1, 6, -1, 100, 0, 0, 22, 22); break; case 23: if (_G(flags)[V010] == 2 || _G(flags)[V013]) { switch (imath_ranged_rand(1, 3)) { case 1: digi_play("103h008a", 1, 255, 21); break; case 2: digi_play("103h008b", 1, 255, 21); break; case 3: digi_play("103h008c", 1, 255, 21); break; default: break; } } else { digi_play("103h007", 1, 255, 21); } _G(flags)[V009] = _G(flags).get_boonsville_time_and_display() + 1800; _G(flags)[V012] = 2; ws_walk(271, 265, nullptr, 24, 2); break; case 24: if (++_val3 > 1) { wilbur_speech("103w004", 17, -1, 0, 75); _G(flags)[V013] = 1; } break; case kCHANGE_WILBUR_ANIMATION: switch (_G(wilbur_should)) { case 1: digi_unload_stream_breaks(SERIES1); player_set_commands_allowed(true); ws_unhide_walker(); _G(wilbur_should) = 10002; break; case 2: ws_hide_walker(); _G(wilbur_should) = 3; digi_preload_stream_breaks(SERIES3); series_play("103wi04s", 0x100, 0, -1, 6, 0, 100, 0, 0, 0, 9); series_stream_with_breaks(SERIES3, "103wi04", 6, 0x100, kCHANGE_WILBUR_ANIMATION); break; case 3: digi_unload_stream_breaks(SERIES3); player_set_commands_allowed(true); ws_unhide_walker(); _G(wilbur_should) = 10002; wilbur_speech("103w012"); break; case 4: _G(wilbur_should) = 5; terminateMachineAndNull(_series1); ws_hide_walker(); series_play("103wi03s", 0x101, 0, -1, 6, 0, 100, 0, 0, 0, 19); series_stream_with_breaks(SERIES4, "103wi03", 6, 0x100, kCHANGE_WILBUR_ANIMATION); break; case 5: ws_unhide_walker(); _G(wilbur_should) = 10002; _series1 = series_play("103wi06", 0x500, 0, -1, 100, -1, 100, 0, 0, 0, 0); digi_play(Common::String::format("103h001%c", 'a' + imath_ranged_rand(0, 4)).c_str(), 2, 255, 14); break; case 6: _G(wilbur_should) = 7; kernel_timing_trigger(1, kCHANGE_WILBUR_ANIMATION); break; case 7: _G(wilbur_should) = 8; ws_hide_walker(); series_play_with_breaks(PLAY1, "103wi02", 0xa00, kCHANGE_WILBUR_ANIMATION, 2); series_play("103wi02s", 0x100, 0, -1, 6, 0, 100, 0, 0, 0, 27); player_set_commands_allowed(false); break; case 8: _val2 = 2; if (!_G(flags)[kHarryComingToRoof]) pal_fade_init(_G(kernel).first_fade, 255, 0, 30, 1001); break; default: _G(kernel).continue_handling_trigger = true; break; } break; default: _G(kernel).continue_handling_trigger = true; break; } } void Room103::pre_parser() { if (player_said("gear", "satellite dish")) player_hotspot_walk_override(225, 257, 8); if (player_said("gear", "door") || player_said("gear", "stairway")) player_hotspot_walk_override(391, 264, 1); } void Room103::parser() { _G(kernel).trigger_mode = KT_DAEMON; if (!_G(walker).wilbur_said(SAID)) { if (player_said("gear", "satellite dish") && _G(flags)[kHarryComingToRoof] == 0) { _G(wilbur_should) = 4; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); player_set_commands_allowed(false); _G(player).command_ready = false; } else if (player_said("gear", "door") || player_said("gear", "stairway")) { _G(wilbur_should) = 2; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); player_set_commands_allowed(false); _G(player).command_ready = false; } else if (player_said("ENTER", "FIRE ESCAPE") || player_said("gear", "FIRE ESCAPE")) { _val2 = 1; _G(wilbur_should) = 6; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); player_set_commands_allowed(false); _G(player).command_ready = false; } } else { _G(player).command_ready = false; } } void Room103::preloadDigi1() { const char *NAMES[7] = { "103h002a", "103h002b", "103h002c", "103h002d", "103h002e", "103h002f", "103h002g" }; assert(_digi1 >= 1 && _digi1 <= 7); digi_preload(NAMES[_digi1 - 1]); } } // namespace Rooms } // namespace Burger } // namespace M4