/* 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 242 || _G(player_info).y > 265) && !_flag1 && !digi_play_state(1)) { _flag1 = true; loadSeries3(); _val4 = _val7; kernel_trigger_dispatch_now(13); } else { kernel_timing_trigger(15, 11); } } break; case 13: switch (_val4) { case 20: digi_stop(2); digi_unload("502_006"); _flag1 = false; _val4 = 27; kernel_trigger_dispatch_now(13); break; case 27: _G(flags)[kStairsBorkState] = kBORK_ON_FAN; _G(flags)[V186] = 0; _borkStairs.terminate(); _val7 = imath_rand_bool(3) ? 29 : 28; kernel_timing_trigger(imath_ranged_rand(240, 360), 11); break; case 28: _val8 = 0; kernel_trigger_dispatch_now(14); _G(flags)[kStairsBorkState] = kBORK_SLIDING_DOWN; _G(flags)[V186] = 1; kernel_trigger_dispatch_now(8); _val4 = 32; _borkStairs.play("502bkst", 0xc00, 16, 13, 6, 0, 100, 0, 0, 0, 8); break; case 29: _val8 = 0; kernel_trigger_dispatch_now(14); _G(flags)[kStairsBorkState] = kBORK_SLIDING_DOWN; _G(flags)[V186] = 1; kernel_trigger_dispatch_now(8); _val4 = 30; _borkStairs.play("502bkst", 0xc00, 0, 13, 6, 0, 100, 0, 0, 0, 8); break; case 30: kernel_trigger_dispatch_now(22); _val4 = 31; _borkStairs.play("502bkst", 0xc00, 0, 13, 6, 0, 100, 0, 0, 9, 18); break; case 31: _val8 = 1; kernel_trigger_dispatch_now(14); _val4 = 32; _borkStairs.play("502bkst", 0xc00, 0, 13, 6, 2, 100, 0, 0, 19, 22); break; case 32: digi_stop(2); digi_unload("502_007"); _borkStairs.terminate(); _val4 = 33; _borkStairs.play("502bkst", 0xc00, 0, 13, 6, 0, 100, 0, 0, 23, 32); break; case 33: _G(flags)[kStairsBorkState] = kBORK_CLIMBING_STAIRS; _val4 = 20; _borkStairs.play("502bkst", 0xc00, 0, 13, 6, 0, 100, 0, 0, 33, 44); digi_preload("502_006"); digi_play("502_006", 2); break; case 34: if (_flag1) { kernel_timing_trigger(30, 13); } else { _flag1 = true; _val8 = 2; kernel_trigger_dispatch_now(14); _val4 = 35; series_play_with_breaks(PLAY16, "502bk09", 0xc00, 13, 3); } break; case 35: Section5::flagsTrigger(); _flag1 = false; kernel_trigger_dispatch_now(18); break; default: _G(kernel).continue_handling_trigger = true; break; } break; case 14: switch (_val8) { case 0: digi_play((imath_ranged_rand(1, 2) == 1) ? "502b001a" : "502b001b", 2); break; case 1: digi_play((imath_ranged_rand(1, 2) == 1) ? "502b003a" : "502b003b", 2); break; case 2: digi_play("502b004", 2); break; default: break; } break; case 15: _G(flags)[V206] = 5005; kernel_trigger_dispatch_now(5015); break; case 16: _G(flags)[V206] = 5006; kernel_trigger_dispatch_now(5015); break; case 17: switch (_val5) { case 36: series_show("502soap2", 0xaff); break; case 37: _val5 = 38; series_play("502soap1", 0xaff, 0, 17); break; case 38: _val5 = 36; series_play("502soap", 0xaff, 0, 17, 6, 4); break; default: break; } break; case 18: series_show("502windo", 0xf00); break; case 19: _G(flags)[kFireplaceHasFire] = 1; digi_play_loop("500_002", 3, 125); series_play("502fire", 0xc00, 4, -1, 6, -1); break; case 20: inv_give_to_player("GIZMO"); break; case 21: if ((_G(flags)[kStairsBorkState] == 5000 || _G(flags)[kStairsBorkState] == 5003) && !_flag1 && !digi_play_state(1)) { _flag1 = true; kernel_trigger_dispatch_now(22); } kernel_timing_trigger(imath_ranged_rand(240, 360), 21); break; case 22: terminateMachineAndNull(_series2); _state3 = imath_ranged_rand(1, 6); series_play_with_breaks(PLAY17, "502spark", 0xc00, 23, 2); break; case 23: if (_G(flags)[kStairsBorkState] == 5000 || _G(flags)[kStairsBorkState] == 5003) _flag1 = false; _series2 = series_show("502spark", 0xc00); break; case 24: series_play("502smoke", 0x500); break; case 5002: enable_player(); break; case kCHANGE_WILBUR_ANIMATION: switch (_G(wilbur_should)) { case 1: kernel_trigger_dispatch_now(7); break; case 2: _G(flags)[V195] = 1; break; case 3: ws_demand_location(237, 235); player_set_commands_allowed(false); ws_hide_walker(); _destTrigger = 5009; series_play_with_breaks(PLAY1, "502wi02", 0xc01, 1, 3, 5); break; case 4: _G(wilbur_should) = 10001; series_play_with_breaks(PLAY2, "502wi03", 0xc01, kCHANGE_WILBUR_ANIMATION, 3, 5); break; case 5: player_set_commands_allowed(false); series_load("502wi02"); series_load("502wi03"); series_load("502wi05"); series_load("502bk09"); ws_demand_location(237, 235, 9); ws_hide_walker(); _G(wilbur_should) = 8; series_play_with_breaks(PLAY3, "502wi02", 0xc01, kCHANGE_WILBUR_ANIMATION, 3, 5); break; case 6: _G(wilbur_should) = 7; series_play_with_breaks(PLAY4, "502wi03", 0xc01, kCHANGE_WILBUR_ANIMATION, 3, 5); break; case 7: _G(wilbur_should) = 8; series_play_with_breaks(PLAY5, "502wi05", 0xc01, kCHANGE_WILBUR_ANIMATION, 2, 5); break; case 8: _val5 = 37; _G(wilbur_should) = 9; if (_G(flags)[V196]) { series_play_with_breaks(PLAY7, "502wi05", 0xc01, kCHANGE_WILBUR_ANIMATION, 2); } else { series_play_with_breaks(PLAY6, "502wi05", 0xc01, kCHANGE_WILBUR_ANIMATION, 2); } _G(flags)[V196] = 0; break; case 9: if (_G(flags)[kStairsBorkState] == 5003) { _G(wilbur_should) = 10001; } else { _G(flags)[kStairsBorkState] = 5003; _val2 = 19; _G(wilbur_should) = 1; } inv_move_object("SOAPY WATER", NOWHERE); inv_give_to_player("BOTTLE"); series_play_with_breaks(PLAY8, "502wi03", 0xc01, kCHANGE_WILBUR_ANIMATION, 3); break; case 10: player_set_commands_allowed(false); ws_hide_walker(); _G(wilbur_should) = 11; series_play_with_breaks(PLAY9, "502wi06", 0x801, kCHANGE_WILBUR_ANIMATION, 3); break; case 11: inv_give_to_player("KINDLING"); _G(wilbur_should) = 10001; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); break; case 12: player_set_commands_allowed(false); ws_hide_walker(); _val2 = 18; _G(wilbur_should) = 1; series_play_with_breaks(PLAY10, "502wi07", 0xbff, kCHANGE_WILBUR_ANIMATION, 3); break; default: _G(kernel).continue_handling_trigger = true; break; } break; default: _G(kernel).continue_handling_trigger = true; break; } } void Room502::pre_parser() { _G(kernel).trigger_mode = KT_DAEMON; if (player_said("KITCHEN") && !player_said_any("LOOK AT", "GEAR")) player_set_facing_hotspot(); } void Room502::parser() { _G(kernel).trigger_mode = KT_DAEMON; const bool railing = player_said("RAILING") && _G(flags)[kStairsBorkState] == 5003; const bool takeKindling = player_said("KINDLING ") && player_said("TAKE"); const bool gearKindling = player_said("KINDLING ") && player_said("GEAR"); const bool fireplace = player_said("FIREPLACE") && _G(flags)[kFireplaceHasFire] != 0; if (player_said("LOOK AT", "FRONT DOOR") && _G(flags)[V195]) { wilbur_speech("502w004"); } else if (player_said("LOOK AT STAIRS") && _G(flags)[kStairsBorkState] == 5003) { wilbur_speech("502w008"); } else if (railing && player_said("LOOK AT")) { wilbur_speech("502w015"); } else if (railing && player_said("GEAR")) { wilbur_speech("502w017"); } else if (takeKindling && inv_player_has("kindling")) { wilbur_speech("502w019"); } else if (takeKindling && _G(flags)[kFireplaceHasFire]) { wilbur_speech("502w020"); } else if (gearKindling && inv_player_has("KINDLING")) { wilbur_speech("502w022"); } else if (gearKindling && _G(flags)[kFireplaceHasFire]) { wilbur_speech("502w020"); } else if (player_said("KINDLING") && player_said("FIREPLACE")) { wilbur_speech(_G(flags)[kFireplaceHasFire] ? "500w063" : "500w062"); } else if (player_said("KINDLING") && player_said("WIRES")) { wilbur_speech("500w065"); } else if (fireplace && player_said("LOOK AT")) { wilbur_speech("502w024"); } else if (fireplace && player_said("GEAR")) { wilbur_speech("502w025"); } else if (fireplace && player_said("RUBBER DUCK")) { wilbur_speech("502w030"); } else if (player_said("GEAR", "WINDOW") && _G(flags)[kStairsBorkState] == 5003) { wilbur_speech("502w026"); } else if ((player_said("LOOK AT") || player_said("GEAR")) && player_said("PHONE JACK") && _G(flags)[V197] != 0) { wilbur_speech("502w033"); } else if (player_said("LOOK AT", "ROCKER") && _G(flags)[V197] != 0) { wilbur_speech("502w037"); } else if (_G(walker).wilbur_said(SAID)) { // Already handled } else if (player_said("GEAR", "FRONT DOOR")) { _G(wilbur_should) = 2; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); } else if (player_said("KITCHEN") && player_said_any("LOOK AT", "GEAR")) { _destTrigger = 5007; kernel_trigger_dispatch_now(1); } else if (player_said("GEAR", "STAIRS")) { _G(wilbur_should) = 3; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); } else if (player_said("BORK ") && player_said("LOOK AT") && !player_said_any("GIZMO", "ROLLING PIN", "DIRTY SOCK", "SOAPY WATER", "RUBBER GLOVES") && !player_said("LAXATIVE")) { player_set_commands_allowed(false); _purpleBorkShould = 26; ++_state4; } else if (player_said("TAKE", "KINDLING ")) { if (!_G(flags)[kFireplaceHasFire] && !inv_player_has("KINDLING")) { _G(wilbur_should) = 10; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); } } else if (player_said("SOAPY WATER", "RAILING")) { _G(wilbur_should) = 5; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); } else if (player_said("BURNING KINDLING", "FIREPLACE")) { _G(wilbur_should) = 12; kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION); inv_move_object("BURNING KINDLING", NOWHERE); } else { return; } _G(player).command_ready = false; } void Room502::loadSeries1() { static const char *NAMES[6] = { "500_008", "500_009", "500_010", "500_011", "500_012", "500_013" }; for (int i = 0; i < 6; ++i) digi_preload(NAMES[i]); series_load("502spark"); } void Room502::loadSeries2() { static const char *NAMES[15] = { "502bk01", "502bk01s", "502bk02", "502bk02s", "502bk03", "502bk03s", "502bk04", "502bk04s", "502bk05", "502bk06", "502bk06s", "502bk07", "502bk07s", "502bk08", "502bk08s" }; for (int i = 0; i < 15; ++i) series_load(NAMES[i]); } void Room502::loadSeries3() { series_load("502bk09"); series_load("502bk09s"); series_load("502bkst"); series_load("502bksts"); digi_preload("502b001a"); digi_preload("502b001b"); digi_preload("502b003a"); digi_preload("502b003b"); digi_preload("502b004"); } void Room502::setup1() { if (_G(flags)[V197]) { series_show("502bk05", 0xd00); series_show("502phone", 0x800); hotspot_set_active("BORK ", false); hotspot_set_active("CHARRED OUTLINE", true); } else { loadSeries2(); hotspot_set_active("BORK ", true); hotspot_set_active("CHARRED OUTLINE", false); _walk1 = intr_add_no_walk_rect(370, 281, 500, 310, 328, 318); if (_G(game).previous_room == 503) { series_show("502bk01", 0x400); _series1.show("502bk01", 0x400); _flag1 = true; _purpleBorkShould = 25; kernel_timing_trigger(120, 10); } else { _purpleBorkShould = 20; kernel_trigger_dispatch_now(kCHANGE_PURPLE_BORK_ANIMATION); } } } void Room502::setup2() { if (_G(flags)[kStairsBorkState] == 5003) { _val5 = 36; kernel_trigger_dispatch_now(17); kernel_trigger_dispatch_now(18); } else { loadSeries3(); _borkTable = BORK_TABLE; _val4 = _G(game).previous_room == 505 ? 33 : 27; kernel_trigger_dispatch_now(13); } } void Room502::setup3() { if (_G(flags)[V211] == 5000) { _series2 = series_show("502spark", 0xc00); kernel_trigger_dispatch_now(21); } } } // namespace Rooms } // namespace Burger } // namespace M4