/* 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 = 2) { _val4 = 0; freeStolie(); freeDr2(); series_play_with_breaks(PLAY9, "402dr02", 0x300, 28, 3); } break; case 28: series_play_with_breaks(PLAY10, "402dr03", 0x300, 30, 3); break; case 29: _series2Set = true; loadPe4(); _series2.show("402pe04", 0x100, 0, -1, -1, 21); break; case 30: freeSeries2(); digi_play("402s010h", 1, 170); _stolieSet = true; _stolie.show("402dr03", 0x300, 0, -1, -1, 2); _dr03 = series_load("402dr03"); _dr03s = series_load("402dr03s"); freePe4(); series_play_with_breaks(PLAY11, "402pe04", 0x100, 32, 3); break; case 32: _elmoShould = 41; _elmoMode = 45; kernel_trigger_dispatch_now(kCHANGE_ELMO_ANIMATION); break; case 33: freeStolie(); series_play("402dr03", 0x300, 2, 34, 6, 0, 100, 0, 0, 0, 1); series_play("402dr03s", 0x301, 2, -1, 6, 0, 100, 0, 0, 0, -1); break; case 34: series_unload(_dr03); series_unload(_dr03s); freeDr2(); series_play_with_breaks(PLAY13, "402dr02", 0x300, 35, 3); break; case 35: loadDr1(); series_play("402dr01", 0x300, 2, 36, 6, 0, 100, 0, 0, 0, -1); series_play("402dr01s", 0x301, 2, -1, 6, 0, 100, 0, 0, 0, -1); break; case 36: series_play("402dr12", 0x300, 0, 37, 6, 0, 100, 0, 0, 0, 0); series_play("402dr12s", 0x301, 0, -1, 6, 0, 100, 0, 0, 0, 0); break; case 37: freeDr1(); _stolieShould = 15; _stolieMode = 15; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); player_set_commands_allowed(true); break; case 38: freeSeries2(); loadPe4(); Series::series_play("402pe04", 0x100, 0, 29, 6, 0, 100, 0, 0, 17, 21); break; case kCHANGE_WILBUR_ANIMATION: switch (_G(wilbur_should)) { case 2: _G(wilbur_should) = 3; kernel_timing_trigger(180, kCHANGE_WILBUR_ANIMATION); break; case 3: ws_unhide_walker(); _G(walker).wilbur_poof(); _stolieShould = 10; kernel_timing_trigger(30, 22); break; case 5: ws_unhide_walker(); _G(walker).wilbur_poof(); player_set_commands_allowed(true); break; default: _G(kernel).continue_handling_trigger = true; break; } break; default: _G(kernel).continue_handling_trigger = true; break; } } void Room402::pre_parser() { if (player_said("disc") && !player_said("poof") && !player_said("gear")) player_hotspot_walk_override(162, 264, 9, -1); if (player_said("disc ") && !player_said("poof ") && !player_said("gear")) player_hotspot_walk_override(556, 189, 2, -1); } void Room402::parser() { const bool lookFlag = player_said_any("look", "look at"); _G(kernel).trigger_mode = KT_DAEMON; if (_G(walker).wilbur_said(SAID)) { // Already handled } else if (lookFlag && player_said("stolie")) { wilbur_speech(_G(flags)[V157] ? "402w002" : "402w001"); } else if (lookFlag && player_said_any("disc", "disc ")) { wilbur_speech(_G(flags)[V154] ? "400w002" : "402w004"); } else if (player_said_any("disc", "disc ") && inv_player_has(_G(player).verb)) { wilbur_speech("400w004"); } else if (player_said("poof") || player_said("gear", "disc")) { poof(4006); } else if (player_said("poof ") || player_said("gear", "disc ")) { poof(4005); } else if (player_said("stolie") && inv_player_has(_G(player).verb) && !player_said("deed")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech("402w901"); break; case 1: _digiName = "402s006"; _newMode = KT_PARSE; _digiTrigger = 2; freeStolie(); _stolieShould = 45; break; case 2: _stolieShould = 15; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); kernel_trigger_dispatch_now(1); break; default: break; } } else if (player_said("elmo") && inv_player_has(_G(player).verb) && !player_said("deed")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); switch (imath_ranged_rand(1, 3)) { case 1: _digiName = "402p904a"; break; case 2: _digiName = "402p904b"; break; case 3: _digiName = "402p904c"; break; default: break; } break; case 1: _elmoShould = 15; kernel_trigger_dispatch_now(1); break; default: break; } } else if (player_said("TALK TO", "stolie")) { player_set_commands_allowed(false); conv_load_and_prepare("conv84", 1); conv_export_pointer_curr(&Flags::_flags[V157], 0); conv_play_curr(); } else if (player_said("TALK TO", "elmo")) { if (_G(flags)[V158]) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech("402w501", 1); break; case 1: switch (imath_ranged_rand(1, 3)) { case 1: _digiName = "402p502a"; break; case 2: _digiName = "402p502b"; break; case 3: _digiName = "402p502c"; break; default: break; } break; case 2: _elmoShould = 15; player_set_commands_allowed(true); break; default: break; } } else { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech("402w501", 1); break; case 1: _digiName = "402p501"; _newMode = KT_PARSE; _digiTrigger = 2; _elmoShould = 45; break; case 2: _G(flags)[V158] = 1; _elmoShould = 15; player_set_commands_allowed(true); break; default: break; } } } else if (player_said("deed", "stolie") || player_said("deed", "elmo")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech(_G(flags)[V157] ? "402w902" : "402w502", 1); break; case 1: freeSeries2(); freeDr2(); _digiName = "402p902"; _newMode = KT_PARSE; _digiTrigger = 2; _elmoShould = 45; break; case 2: _elmoShould = 41; _digiName = "402s007"; _newMode = KT_PARSE; _digiTrigger = 3; _stolieShould = 40; break; case 3: _digiName = "402s008"; _newMode = KT_PARSE; _digiTrigger = 4; freeStolie(); freeDr2(); _stolieShould = 46; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); break; case 4: _stolieShould = 47; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech("402w903", 5); break; case 5: _digiName = "402s009"; _newMode = KT_PARSE; _digiTrigger = 6; _stolieShould = 45; break; case 6: _stolieShould = 47; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); _G(kernel).trigger_mode = KT_PARSE; wilbur_speech("402w904", 7); break; case 7: ws_walk(337, 375, nullptr, 15, 2); break; default: break; } } else if (player_said("conv84")) { conv84(); } else { return; } _G(player).command_ready = false; } void Room402::conv84() { const int who = conv_whos_talking(); const int entry = conv_current_entry(); const int node = conv_current_node(); const char *sound = conv_sound_to_play(); _G(kernel).trigger_mode = KT_PARSE; switch (_G(kernel).trigger) { case 6: if (who == 0) { _G(kernel).trigger_mode = KT_DAEMON; if (node == 3 && entry == 1) { _stolieShould = 47; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); } else if (node == 1 && entry == 1) { _stolieShould = 39; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); } else if (node == 9 && entry == 0) { _stolieShould = 39; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); term_message("--------------------------------"); } else if (node == 9 && entry == 2) { _stolieShould = 15; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); term_message("HHHHHHHHHHHHHHHHHH"); } else if ((node == 1 && entry == 6) || (node == 2 && entry == 0) || (node == 3 && entry == 0) || (node == 4 && entry == 0) || (node == 5 && entry == 0) || (node == 6 && entry == 1) || (node == 6 && entry == 3) || (node == 8 && entry == 1) || (node == 9 && entry == 1)) { _elmoShould = 47; } else { term_message("xxxxxxxxxxxxxxxxxxxxx"); _stolieShould = 47; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); } conv_resume(conv_get_handle()); } break; case 21: _elmoShould = 47; if (_elmoMode == 45) _G(kernel).trigger_mode = KT_DAEMON; break; default: if (sound) { if (who <= 0) { _digiName = sound; _newMode = KT_PARSE; _digiTrigger = 6; if (node == 1 && entry == 0) kernel_timing_trigger(180, 21); if ((node == 4 && entry == 0) || (node == 1 && entry == 6) || (node == 9 && entry == 1)) { if (!(node == 9 && entry == 1)) _stolieShould = 7; if (_stolieMode == 45) _G(kernel).trigger_mode = KT_DAEMON; } if (node == 3 && entry == 1) { _stolieShould = 40; _G(kernel).trigger_mode = KT_DAEMON; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); } else if (node == 6 && entry == 2) { _stolieShould = 40; } else if ((node == 1 && entry == 1) || (node == 9 && entry == 0)) { _stolieShould = 40; if (_stolieMode == 45) _G(kernel).trigger_mode = KT_DAEMON; } else if (node == 9 && entry == 2) { _stolieShould = 40; _G(kernel).trigger_mode = KT_DAEMON; kernel_trigger_dispatch_now(kCHANGE_STOLIE_ANIMATION); } else if ((node == 1 && entry == 6) || (node == 2 && entry == 0) || (node == 3 && entry == 0) || (node == 4 && entry == 0) || (node == 5 && entry == 0) || (node == 6 && entry == 1) || (node == 6 && entry == 3) || (node == 8 && entry == 1) || (node == 9 && entry == 1)) { _elmoShould = 45; if (_elmoMode == 45) { _G(kernel).trigger_mode = KT_DAEMON; kernel_trigger_dispatch_now(kCHANGE_ELMO_ANIMATION); } } else { _stolieShould = 45; if (_stolieMode == 45) _G(kernel).trigger_mode = KT_DAEMON; } } else if (who == 1) { if ((node == 1 && entry == 1) || (node == 1 && entry == 3)) { _stolieShould = 39; if (_stolieMode == 45) _G(kernel).trigger_mode = KT_DAEMON; } _G(kernel).trigger_mode = KT_DAEMON; wilbur_speech(sound, kRESUME_CONVERSATION); } } break; } } void Room402::playDigiName() { if (_digiName) { _G(kernel).trigger_mode = _newMode; digi_play(_digiName, 1, 255, _digiTrigger); _digiName = nullptr; } } void Room402::playRandom1() { static const char *NAMES[5] = { "402s010f", "402s010g", "402s010h", "402s010a", "402s010d" }; if (!digi_play_state(1)) digi_play(NAMES[imath_ranged_rand(0, 4)], 1, 140, -1); } void Room402::playRandom2() { digi_play(Common::String::format("402p903%c", 'a' + imath_ranged_rand(0, 5)).c_str(), 2, 140); } void Room402::freeStolie() { if (_stolieSet) { _stolie.terminate(); _stolieSet = false; } } void Room402::freeSeries2() { if (_series2Set) { _series2.terminate(); _series2Set = false; } } void Room402::loadDr1() { if (_dr01 == -1) { _dr01 = series_load("402dr01"); _dr01s = series_load("402dr01s"); } } void Room402::freeDr1() { if (_dr01 != -1) { series_unload(_dr01); series_unload(_dr01); _dr01 = _dr01s = -1; } } void Room402::loadDr2() { if (_dr02 == -1) { _dr02 = series_load("402dr02"); _dr02s = series_load("402dr02s"); } } void Room402::freeDr2() { if (_dr02 != -1) { series_unload(_dr02); series_unload(_dr02); _dr02 = _dr02s = -1; } } void Room402::loadDr8() { if (_dr08 == -1) { _dr08 = series_load("402dr08"); _dr08s = series_load("402dr08s"); } } void Room402::freeDr8() { if (_dr08 != -1) { series_unload(_dr08); series_unload(_dr08); _dr08 = _dr08s = -1; } } void Room402::loadPe1() { if (_pe01 == -1) { _pe01 = series_load("402pe01"); _pe01s = series_load("402pe01s"); } } void Room402::freePe1() { if (_pe01 != -1) { series_unload(_pe01); series_unload(_pe01s); _pe01 = _pe01s = -1; } } void Room402::loadPe2() { if (_pe02 == -1) { _pe02 = series_load("402pe02"); _pe02s = series_load("402pe02s"); } } void Room402::freePe2() { if (_pe02 != -1) { series_unload(_pe02); series_unload(_pe02s); _pe02 = _pe02s = -1; } } void Room402::loadPe3() { if (_pe03 == -1) { _pe03 = series_load("402pe03"); _pe03s = series_load("402pe03s"); } } void Room402::freePe3() { if (_pe03 != -1) { series_unload(_pe03); series_unload(_pe03s); _pe03 = _pe03s = -1; } } void Room402::loadPe4() { if (_pe04 == -1) { _pe04 = series_load("402pe04"); _pe04s = series_load("402pe04s"); } } void Room402::freePe4() { if (_pe04 != -1) { series_unload(_pe04); series_unload(_pe04s); _pe04 = _pe04s = -1; } } } // namespace Rooms } // namespace Burger } // namespace M4