Files
2026-02-02 04:50:13 +01:00

1002 lines
22 KiB
C++

/* 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 <http://www.gnu.org/licenses/ },.
*
*/
#include "m4/burger/rooms/section1/room145.h"
#include "m4/burger/rooms/section1/section1.h"
#include "m4/burger/burger.h"
#include "m4/burger/vars.h"
namespace M4 {
namespace Burger {
namespace Rooms {
enum {
kCHANGE_DRUMZ_ANIMATION = 2,
kCHANGE_ROXY_ANIMATION = 4,
kCHANGE_VIPE_ANIMATION = 5,
kSPEAK_TO_VIPE = 8,
kSPEAK_TO_ROXY = 9,
kSPEAK_TO_DRUMZ = 10
};
const char *Room145::SAID[][4] = {
{ "TOUR BUS", "145w001", "145w002", "145w003" },
{ "INSTRUMENTS", "145w005", "145w006", "145w006" },
{ "AMPLIFIER ", "145w009", nullptr, "145w012" },
{ "VIPE", "145w013", "145w004", "145w004" },
{ "ROXY", "145w016", "145w004", "145w004" },
{ "DRUMZ", "145w019", "145w004", "145w004" },
{ "MAP", "145w022", "145w002", "145w023" },
{ "VERA'S DINER", "145w024", "145w004", "145w004" },
{ "VERA'S DINER ", "145w024", "145w004", nullptr },
{ nullptr, nullptr, nullptr, nullptr }
};
const WilburMatch Room145::MATCH[] = {
{ nullptr, "TOUR BUS", 1, nullptr, 0, &_state1, 12 },
{ "TALK", "ROXY", 10016, nullptr, 0, &Vars::_wilbur_should, 11 },
{ "AMPLIFIER", "ROXY", 1, nullptr, 0, &_state1, 15 },
{ nullptr, "ROXY", 1, nullptr, 0, &_state1, 17 },
{ "TALK" , "DRUMZ", kSPEAK_TO_DRUMZ, nullptr, 0, 0, 0 },
{ "LAXATIVE" , "DRUMZ", 10016, nullptr, 0, &Vars::_wilbur_should, 3 },
{ nullptr, "DRUMZ", 1, nullptr, 0, &_state1, 16 },
{ "TALK" , "VIPE", 10016, nullptr, 0, &Vars::_wilbur_should, 10 },
{ "AMPLIFIER", "VIPE", 1, nullptr, 0, &_state1, 15 },
{ nullptr, "VIPE", 1, nullptr, 0, &_state1, 16 },
{ "AMPLIFIER" , "INSTRUMENTS", 1, nullptr, 0, &_state1, 13 },
{ nullptr, "INSTRUMENTS", 1, nullptr, 0, &_state1, 14 },
{ "TAKE", "AMPLIFIER ", 10016, &Flags::_flags[kDrumzFled], 0, &Vars::_wilbur_should, 1 },
{ "TAKE", "AMPLIFIER ", 10016, &Flags::_flags[kDrumzFled], 1, &Vars::_wilbur_should, 8 },
{ nullptr, "AMPLIFIER ", 1, nullptr, 0, &_state1, 14 },
{ nullptr, "MAP", 1, nullptr, 0, &_state1, 18 },
WILBUR_MATCH_END
};
const seriesPlayBreak Room145::PLAY1[] = {
{ 0, 6, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 6, 6, nullptr, 0, 0, -1, 0, 6, nullptr, 0 },
{ 6, 6, "145w010", 1, 255, -1, 0, -1, nullptr, 0 },
{ 0, 6, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY2[] = {
{ 0, 23, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 24, -1, "145w011", 1, 255, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY3[] = {
{ 15, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY4[] = {
{ 0, 3, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 4, 4, nullptr, 0, 0, -1, 0, 4, nullptr, 0 },
{ 5, 9, "145w021", 1, 255, -1, 4, -1, nullptr, 0 },
{ 4, 4, nullptr, 0, 0, -1, 0, 4, nullptr, 0 },
{ 0, 3, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY5[] = {
{ 0, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY6[] = {
{ 0, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY7[] = {
{ 0, 1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 2, -1, nullptr, 0, 0, -1, 0, 4, nullptr, 0 },
{ 0, 1, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY8[] = {
{ 0, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY9[] = {
{ 0, -1, "145_004", 2, 125, -1, 1, 0, &_state2, 0 },
{ 0, -1, nullptr, 0, 0, -1, 0, 0, &_state2, 1 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY10[] = {
{ 0, -1, nullptr, 0, 0, -1, 3, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY11[] = {
{ 0, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY12[] = {
{ 0, 1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 2, 4, nullptr, 0, 0, -1, 1, 2, nullptr, 0 },
{ 5, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY13[] = {
{ 0, 5, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
{ 6, 16, nullptr, 0, 0, 10016, 0, 0, nullptr, 0 },
{ 17, 20, "145_002", 1, 255, -1, 0, 0, nullptr, 0 },
{ 21, 25, "145_005", 1, 255, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY14[] = {
{ 26, -1, "145_001", 1, 255, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY15[] = {
{ 0, 3, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY16[] = {
{ 0, 3, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY17[] = {
{ 1, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY18[] = {
{ 0, -1, "145r901", 2, 125, -1, 4, -1, &_state3, 1 },
{ 0, -1, "145r902", 2, 125, -1, 4, -1, &_state3, 2 },
{ 0, -1, "145r903", 2, 125, -1, 4, -1, &_state3, 3 },
{ 0, -1, "145r904", 2, 125, -1, 4, -1, &_state3, 4 },
{ 0, -1, "145r905", 2, 125, -1, 4, -1, &_state3, 5 },
{ 0, -1, "145r906", 2, 125, -1, 4, -1, &_state3, 6 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY19[] = {
{ 1, -1, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY20[] = {
{ 1, -1, nullptr, 0, 0, -1, 0, 2, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY21[] = {
{ 0, -1, nullptr, 0, 0, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY22[] = {
{ 0, -1, nullptr, 0, 0, -1, 1, 0, nullptr, 0 },
PLAY_BREAK_END
};
const seriesPlayBreak Room145::PLAY23[] = {
{ 0, -1, nullptr, 0, 0, -1, 2, 0, nullptr, 0 },
PLAY_BREAK_END
};
int32 Room145::_state1;
int32 Room145::_state2;
int32 Room145::_state3;
Room145::Room145() : Room() {
_state1 = 0;
_state2 = 0;
_state3 = 0;
}
void Room145::init() {
digi_preload("145_006");
digi_play_loop("145_006", 3, 255, -1);
_state2 = 0;
switch (_G(game).previous_room) {
case KERNEL_RESTORING_GAME:
break;
case 142:
ws_demand_location(680, 340, 9);
ws_walk(570, 330, nullptr, -1, -1);
break;
default:
ws_demand_location(570, 330, 9);
break;
}
kernel_timing_trigger(600, 7);
if (_G(flags)[kDrumzFled]) {
series_show("145drum", 0xa01);
hotspot_set_active("DRUMZ", false);
} else {
loadDrum();
_walk1 = intr_add_no_walk_rect(140, 295, 240, 325, 139, 326);
_drumzState = 19;
kernel_trigger_dispatch_now(kCHANGE_DRUMZ_ANIMATION);
}
loadRx();
_walk2 = intr_add_no_walk_rect(423, 308, 540, 340, 541, 341);
_roxyTalkTo = 101;
_roxyState = 33;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
_walk3 = intr_add_no_walk_rect(341, 326, 480, 365, 481, 366);
_vipeState = 43;
kernel_trigger_dispatch_now(kCHANGE_VIPE_ANIMATION);
if (inv_player_has("AMPLIFIER")) {
hotspot_set_active("AMPLIFIER ", false);
} else {
_amplifier = series_show("145amp", 0xa01);
}
}
void Room145::daemon() {
switch (_G(kernel).trigger) {
case 1:
switch (_state1) {
case 12:
wilbur_speech("145w004");
break;
case 13:
wilbur_speech("145w007");
break;
case 14:
wilbur_speech("145w008");
break;
case 15:
wilbur_speech("145w014");
break;
case 16:
wilbur_speech("145w015");
break;
case 17:
wilbur_speech("145w018");
break;
case 18:
wilbur_speech("145w003");
break;
default:
break;
}
break;
case kCHANGE_DRUMZ_ANIMATION:
switch (_drumzState) {
case 19:
if (!digi_play_state(2))
digi_play_loop("145_003", 2, 125, -1);
_drumzState = getRandomDrumzState();
series_play_with_breaks(PLAY5, "145dz01", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 20:
_drumzState = 23;
series_play_with_breaks(PLAY6, "145dz02", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 21:
_drumzState = 23;
series_play_with_breaks(PLAY7, "145dz03", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 22:
if (!_state2)
digi_stop(2);
_drumzState = 23;
series_play_with_breaks(PLAY8, "145dz04", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 23:
kernel_trigger_dispatch_now(10001);
_drumzState = getRandomDrumzState();
kernel_trigger_dispatch_now(kCHANGE_DRUMZ_ANIMATION);
break;
case 24:
_drumzState = getRandomDrumzState();
series_play_with_breaks(PLAY9, "145dz05", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 25:
if (!_state2)
digi_stop(2);
_drumzState = getRandomDrumzState();
series_play_with_breaks(PLAY10, "145dz06", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 26:
_drumzState = 27;
series_play_with_breaks(PLAY11, "145dz05", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
_G(wilbur_should) = 2;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
break;
case 27:
_drumzState = getRandomDrumzState();
series_play_with_breaks(PLAY12, "145dz06", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 28:
if (!_state2)
digi_stop(2);
_G(wilbur_should) = 5;
_drumzState = 29;
series_play_with_breaks(PLAY13, "145dz08", 0xa01, kCHANGE_DRUMZ_ANIMATION, 3);
break;
case 29:
hotspot_set_active("DRUMZ", false);
intr_remove_no_walk_rect(_walk1);
_G(flags)[kDrumzFled] = 1;
series_play_with_breaks(PLAY14, "145dz08", 0, -1, 3);
series_show("145drum", 0xa01);
_G(wilbur_should) = 6;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
break;
default:
break;
}
break;
case kCHANGE_ROXY_ANIMATION:
_val5 = _roxyState;
switch (_roxyState) {
case 30:
_roxy.terminate();
_roxyState = 31;
series_play_with_breaks(PLAY15, "145rx01", 0x900, kCHANGE_ROXY_ANIMATION, 3, 6, 100, 0, 0);
break;
case 31:
_duration = imath_ranged_rand(180, 360);
_roxyState = 32;
_roxy.show("145rx01", 0x900, 0, 4, _duration);
break;
case 32:
_roxy.terminate();
_roxyState = 33;
series_play_with_breaks(PLAY16, "145rx01", 0x900, kCHANGE_ROXY_ANIMATION, 3);
break;
case 33:
if (_roxyTalkTo == 101) {
_duration = imath_ranged_rand(180, 360);
_roxyState = 30;
_roxy.show("145rx01", 0x900, 0, kCHANGE_ROXY_ANIMATION, _duration, 3);
} else if (_roxyTalkTo == 17) {
playRandomDigi2();
} else {
_roxyState = 35;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
}
break;
case 34:
digi_unload(_digiName2);
_state2 = 0;
_roxyTalkTo = 101;
_roxyState = 33;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
case 35:
switch (_roxyTalkTo) {
case 0:
player_set_commands_allowed(false);
_roxyState = 36;
break;
case 15:
_roxyState = 37;
break;
case 100:
_roxyState = 40;
break;
default:
term_message("ERROR!!! Who is roxy talking to???");
break;
}
series_play_with_breaks(PLAY17, "145rx02", 0x900, kCHANGE_ROXY_ANIMATION, 3);
break;
case 36:
kernel_trigger_dispatch_now(kSPEAK_TO_ROXY);
_roxyState = 40;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
case 37:
_state2 = 1;
_roxyState = 38;
series_play_with_breaks(PLAY18, "145rx04", 0x900, kCHANGE_ROXY_ANIMATION, 3);
break;
case 38:
_roxy.show("145rx04", 0x900);
switch (_state3) {
case 1:
_digiName1 = "145v901";
break;
case 2:
_digiName1 = "145v902";
break;
case 3:
_digiName1 = "145v903";
break;
case 4:
_digiName1 = "145v904";
break;
case 5:
_digiName1 = "145v905";
break;
case 6:
_digiName1 = "145v906";
break;
default:
break;
}
digi_preload(_digiName1);
digi_play(_digiName1, 2, 125, -1);
_roxyState = 42;
kernel_timing_trigger(120, kCHANGE_ROXY_ANIMATION);
break;
case 39:
_roxy.terminate();
_roxyState = 40;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
kernel_trigger_dispatch_now(10001);
break;
case 40:
_roxy.show("145rx04", 0x900);
break;
case 41:
_roxyTalkTo = 101;
_roxy.terminate();
_roxyState = 33;
series_play_with_breaks(PLAY19, "145rx02", 0x900, kCHANGE_ROXY_ANIMATION, 3);
break;
case 42:
digi_unload(_digiName1);
_state2 = 0;
_roxy.terminate();
_roxyState = 41;
series_play_with_breaks(PLAY20, "145rx06", 0x900, kCHANGE_ROXY_ANIMATION, 3);
break;
default:
break;
}
break;
case kCHANGE_VIPE_ANIMATION:
switch (_vipeState) {
case 39:
_vipe.terminate();
_vipeState = 40;
kernel_trigger_dispatch_now(kCHANGE_VIPE_ANIMATION);
kernel_trigger_dispatch_now(10001);
break;
case 40:
_vipe.show("145vp04", 0x300);
break;
case 43:
player_set_commands_allowed(true);
_vipe.show("145vp02", 0x300);
break;
case 44:
player_set_commands_allowed(true);
_flag1 = true;
if (_roxyTalkTo == 101) {
_roxyTalkTo = 100;
resetRoxy();
_vipe.terminate();
_vipeState = 45;
series_play_with_breaks(PLAY21, "145vp02", 0x300, kCHANGE_VIPE_ANIMATION, 3);
} else {
kernel_timing_trigger(15, kCHANGE_VIPE_ANIMATION);
}
break;
case 45:
_vipeState = 46;
series_play_with_breaks(PLAY22, "145vp06", 0x300, kCHANGE_VIPE_ANIMATION, 3);
break;
case 46:
kernel_trigger_dispatch_now(kSPEAK_TO_VIPE);
_vipeState = 40;
kernel_trigger_dispatch_now(kCHANGE_VIPE_ANIMATION);
break;
case 47:
_vipe.terminate();
_vipeState = 43;
series_play_with_breaks(PLAY23, "145vp02", 0x300, kCHANGE_VIPE_ANIMATION, 3);
break;
default:
break;
}
break;
case 6:
digi_unload(_digiName1);
_state2 = 0;
break;
case 7:
if (!digi_play_state(1) && !_flag1 && _roxyTalkTo == 101) {
switch (imath_ranged_rand(1, 3)) {
case 1:
_state3 = imath_ranged_rand(1, 6);
_roxyTalkTo = 15;
resetRoxy();
break;
case 2:
playRandomDigi1();
break;
default:
_roxyTalkTo = 17;
resetRoxy();
break;
}
}
kernel_timing_trigger(imath_ranged_rand(600, 900), 7);
break;
case kSPEAK_TO_VIPE:
conv_load_and_prepare("conv21", 11);
conv_export_pointer_curr(&_G(flags)[V068], 0);
conv_export_pointer_curr(&_G(flags)[V069], 1);
conv_export_pointer_curr(&_G(flags)[V070], 2);
conv_export_pointer_curr(&_G(flags)[V071], 3);
conv_export_pointer_curr(&_G(flags)[V072], 4);
conv_play_curr();
break;
case kSPEAK_TO_ROXY:
conv_load_and_prepare("conv22", 12);
conv_export_pointer_curr(&_G(flags)[V073], 0);
conv_play_curr();
break;
case kSPEAK_TO_DRUMZ:
player_set_commands_allowed(false);
conv_load_and_prepare("conv23", 13);
conv_export_value_curr(_G(flags)[V068], 0);
conv_export_value_curr(_G(flags)[V069], 1);
conv_export_pointer_curr(&_G(flags)[V074], 2);
conv_export_pointer_curr(&_G(flags)[V075], 3);
conv_export_pointer_curr(&_G(flags)[V076], 4);
conv_play_curr();
break;
case 11:
_vipeState = 47;
kernel_trigger_dispatch_now(kCHANGE_VIPE_ANIMATION);
_roxyState = 41;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
case 12:
_G(flags)[V073] = 1;
player_set_commands_allowed(true);
_roxyState = 41;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
case 13:
_G(flags)[V070] = 1;
player_set_commands_allowed(true);
break;
case kCHANGE_WILBUR_ANIMATION:
switch (_G(wilbur_should)) {
case 1:
player_set_commands_allowed(false);
_drumzState = 26;
break;
case 2:
disable_player();
_G(wilbur_should) = 10001;
series_play_with_breaks(PLAY1, "145wi04", 0xa00, kCHANGE_WILBUR_ANIMATION, 3);
break;
case 3:
player_set_commands_allowed(false);
loadSeries1();
ws_hide_walker();
_G(wilbur_should) = 4;
_general.play("145wi02", 0xa00, 16, kCHANGE_WILBUR_ANIMATION, 6, 0, 100, 0, 0, 0, 14);
digi_play("145w020", 1, 255, -1);
break;
case 4:
_drumzState = 28;
break;
case 5:
_general.terminate();
_G(wilbur_should) = 7;
series_play_with_breaks(PLAY3, "145wi02", 0xa00, kCHANGE_WILBUR_ANIMATION, 3);
break;
case 6:
disable_player();
_G(wilbur_should) = 10001;
series_play_with_breaks(PLAY4, "145wi03", 0xa01, kCHANGE_WILBUR_ANIMATION, 3);
break;
case 7:
ws_unhide_walker();
break;
case 8:
player_set_commands_allowed(false);
ws_hide_walker();
terminateMachineAndNull(_amplifier);
_G(wilbur_should) = 9;
series_play_with_breaks(PLAY2, "145wi04", 0xa01, kCHANGE_WILBUR_ANIMATION, 3);
break;
case 9:
enable_player();
hotspot_set_active("AMPLIFIER ", false);
inv_give_to_player("AMPLIFIER");
break;
case 10:
player_set_commands_allowed(false);
if (_state2) {
kernel_timing_trigger(15, kCHANGE_WILBUR_ANIMATION);
} else {
_vipeState = 44;
kernel_trigger_dispatch_now(kCHANGE_VIPE_ANIMATION);
}
break;
case 11:
player_set_commands_allowed(false);
if (_roxyTalkTo == 101) {
_roxyTalkTo = 0;
resetRoxy();
} else {
kernel_timing_trigger(15, kCHANGE_WILBUR_ANIMATION);
}
break;
default:
_G(kernel).continue_handling_trigger = true;
break;
}
break;
default:
_G(kernel).continue_handling_trigger = true;
break;
}
}
void Room145::pre_parser() {
_G(kernel).trigger_mode = KT_DAEMON;
if (!_G(flags)[kDrumzFled] && _G(player).walk_x >= 140 && _G(player).walk_x <= 240 &&
_G(player).walk_y >= 295 && _G(player).walk_y <= 325)
player_walk_to(139, 326);
if (_G(player).walk_x >= 423 && _G(player).walk_x <= 540 &&
_G(player).walk_y >= 308 && _G(player).walk_y <= 340)
player_walk_to(541, 341);
if (_G(player).walk_x >= 341 && _G(player).walk_x <= 480 &&
_G(player).walk_y >= 326 && _G(player).walk_y <= 365)
player_walk_to(481, 366);
if (player_said("GEAR") && player_said("VERA'S DINER "))
player_set_facing_at(680, 340);
}
void Room145::parser() {
_G(kernel).trigger_mode = KT_DAEMON;
if (_G(walker).wilbur_said(SAID)) {
// Already handled
} else if (player_said("conv21")) {
conv21();
} else if (player_said("conv22")) {
conv22();
} else if (player_said("conv23")) {
conv23();
} else if (player_said("GEAR", "VERA'S DINER ")) {
disable_player_commands_and_fade_init(1014);
} else if (!_G(walker).wilbur_match(MATCH)) {
return;
}
_G(player).command_ready = false;
}
void Room145::loadDrum() {
static const char *NAMES[12] = {
"145dz01", "145dz02", "145dz03", "145dz04", "145dz05",
"145dz06", "145dz01s", "145dz02s", "145dz03s", "145dz04s",
"145dz05s", "145dz06s"
};
for (int i = 0; i < 12; ++i)
series_load(NAMES[i]);
digi_preload("145_003");
digi_preload("145_004");
}
void Room145::loadRx() {
static const char *NAMES[8] = {
"145rx01", "145rx02", "145rx04", "145rx06",
"145rx01s", "145rx02s", "145rx04s", "145rx06s"
};
for (int i = 0; i < 8; ++i)
series_load(NAMES[i]);
}
void Room145::conv21() {
const char *sound = conv_sound_to_play();
const int who = conv_whos_talking();
const int node = conv_current_node();
const int entry = conv_current_entry();
if (sound) {
if (who == 1) {
wilbur_speech(sound, 10001);
} else {
switch (node) {
case 2:
case 7:
case 12:
vipeSpeaking();
break;
case 3:
case 4:
case 5:
case 6:
case 8:
case 11:
roxySpeaking();
break;
case 9:
if (entry <= 0) {
roxySpeaking();
} else if (entry <= 2) {
vipeSpeaking();
}
break;
case 10:
if (entry <= 0) {
vipeSpeaking();
} else if (entry == 1) {
roxySpeaking();
}
break;
default:
break;
}
}
}
}
void Room145::conv22() {
const char *sound = conv_sound_to_play();
const int who = conv_whos_talking();
if (sound) {
if (who == 1)
wilbur_speech(sound, 10001);
else
roxySpeaking();
}
}
void Room145::conv23() {
const char *sound = conv_sound_to_play();
const int who = conv_whos_talking();
const int node = conv_current_node();
const int entry = conv_current_entry();
if (sound) {
if (who == 1) {
wilbur_speech(sound, 10001);
} else {
switch (node) {
case 2:
switch (entry) {
case 0:
_drumzState = 20;
break;
case 1:
_drumzState = 21;
break;
case 2:
case 3:
_drumzState = 22;
break;
case 4:
_drumzState = 21;
break;
case 5:
_drumzState = 20;
break;
case 6:
_drumzState = 20;
break;
case 7:
conv_resume_curr();
break;
default:
break;
}
break;
case 5:
_drumzState = 20;
break;
default:
break;
}
}
}
}
void Room145::vipeSpeaking() {
_vipe.terminate();
_vipeState = 39;
digi_play(conv_sound_to_play(), 1, 255, 5);
_vipe.play("145vp04", 0x300, 4, -1., 6, -1);
}
void Room145::roxySpeaking() {
_roxy.terminate();
_roxyState = 39;
digi_play(conv_sound_to_play(), 1, 255, 4);
_roxy.play("145rx04", 0x900, 4, -1, 6, -1);
}
void Room145::loadSeries1() {
series_load("145wi02");
series_load("145wi02s");
series_load("145wi03");
series_load("145wi03s");
series_load("145dz08");
series_load("145dz08s");
}
int Room145::getRandomDrumzState() const {
switch (imath_ranged_rand(1, 10)) {
case 1:
return 24;
case 2:
return 25;
default:
return 19;
}
}
void Room145::resetRoxy() {
switch (_val5) {
case 31:
_roxy.terminate();
_roxyState = 32;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
case 33:
_roxy.terminate();
_roxyState = 33;
kernel_trigger_dispatch_now(kCHANGE_ROXY_ANIMATION);
break;
default:
term_message("Can't move roxy to home state, just have to wait!");
break;
}
}
void Room145::playRandomDigi1() {
_state2 = 1;
static const char *NAMES[4] = { "145v907", "145v908", "145v909", "145v910" };
_digiName1 = NAMES[imath_ranged_rand(0, 3)];
digi_preload(_digiName1);
digi_play(_digiName1, 2, 125, 6);
}
void Room145::playRandomDigi2() {
_state2 = 1;
static const char *NAMES[13] = {
"145r907", "145r908", "145r909", "145r910", "145r911",
"145r912", "145r913", "145r914", "145r915", "145r916",
"145r917", "145r918", "145r919"
};
_digiName2 = NAMES[imath_ranged_rand(0, 12)];
_roxyState = 34;
digi_preload(_digiName2);
npc_say(_digiName2, 4, "145rx01", 0x900, 1, 3, 7, 2);
}
} // namespace Rooms
} // namespace Burger
} // namespace M4