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

1711 lines
43 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/room102.h"
#include "m4/burger/rooms/section1/section1.h"
#include "m4/burger/vars.h"
#include "m4/core/imath.h"
#include "m4/graphics/gr_series.h"
#include "m4/platform/timer.h"
namespace M4 {
namespace Burger {
namespace Rooms {
enum {
kCHANGE_HARRY_ANIMATION = 3,
kCHANGE_WILBUR_CHAIR_ANIMATION = 4
};
static const seriesStreamBreak STREAMS1[] = {
{ 40, nullptr, 1, 255, 12, 0, nullptr, 0 },
{ 57, nullptr, 1, 255, 1, 0, nullptr, 0 },
{ 57, "102_034", 2, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS2[] = {
{ 13, "102_036", 2, 255, -1, 0, nullptr, 0 },
{ 16, "102_037", 1, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS3[] = {
{ 13, "102_036", 2, 255, -1, 0, nullptr, 0 },
{ 16, "102_037", 1, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS4[] = {
{ 6,"102_035", 2, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS5[] = {
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS6[] = {
{ 13, "102w010", 1, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesStreamBreak STREAMS7[] = {
{ 13, "102w010", 1, 255, -1, 0, nullptr, 0 },
STREAM_BREAK_END
};
static const seriesPlayBreak PLAY1[] = {
{ 0, 7, nullptr, 1, 255, -1, 0, 0, nullptr, 0 },
{ 8, 8, nullptr, 1, 255, 2, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
static const seriesPlayBreak PLAY2[] = {
{ 0, 18, nullptr, 1, 255, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
static const seriesPlayBreak PLAY3[] = {
{ 6, 20, nullptr, 1, 255, -1, 0, 0, nullptr, 0 },
{ 21, -1, nullptr, 1, 255, 9, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
static const seriesPlayBreak PLAY4[] = {
{ 0, 5, nullptr, 1, 255, -1, 0, 0, nullptr, 0 },
{ 6, 14, "102_039", 2, 255, -1, 0, 0, nullptr, 0 },
PLAY_BREAK_END
};
void Room102::init() {
_val1 = 0;
_series3 = nullptr;
_val3 = -1;
_val4 = 0;
_val5 = 0;
_val6 = 0;
_val8 = 0;
_val9 = 0;
_val10 = 99999;
_G(flags)[kDisableFootsteps] = 1;
digi_preload("102_001");
digi_preload("102_002");
switch (_G(flags)[V012]) {
case 1:
_index1 = series_load("102ha01", -1);
_index2 = series_load("102ha03", -1);
_harryMode = 35;
_harryShould = 35;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
_wilburChairShould = 58;
_wilburChairMode = 62;
kernel_trigger_dispatch_now(4);
hotspot_set_active("harry", false);
setup(5, 0);
break;
case 2:
hotspot_set_active("harry", false);
hotspot_set_active("harry ", false);
_series1 = series_play("102seat", 0xa00, 0, -1, 100, -1, 100, 0, 0, 0, 0);
_series1s = series_play("102seats", 0xa01, 0, -1, 100, -1, 100, 0, 0, 0, 0);
setup(5, 0);
break;
default:
_index1 = series_load("102ha01", -1);
setup(0, 0);
_harryMode = 19;
_harryShould = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
++_G(flags)[V015];
_series1s = series_play("102seats", 0xa01, 0, -1, 100, -1, 100, 0, 0, 0, 0);
hotspot_set_active("harry ", false);
break;
}
_trigger = -1;
if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
if (_G(flags)[V012] == 1) {
ws_demand_location(321, 343);
ws_demand_facing(4);
ws_hide_walker();
}
} else {
_G(wilbur_should) = 1;
_val16 = 1;
digi_preload("102_038");
digi_play("102_038", 2, 255, kCHANGE_WILBUR_ANIMATION);
player_set_commands_allowed(false);
}
kernel_trigger_dispatch_now(6);
setupWax();
setupLaz();
}
void Room102::daemon() {
const KernelTriggerType oldMode = _G(kernel).trigger_mode;
int frame;
switch (_G(kernel).trigger) {
case 1:
conv_resume_curr();
break;
case 2:
ws_unhide_walker();
break;
case kCHANGE_HARRY_ANIMATION:
switch (_harryShould) {
case 19:
term_message(" mumble or change channel");
if (timer_read_60() > _val10 &&_harryMode == 19 && player_commands_allowed() &&
!digi_play_state(1) && INTERFACE_VISIBLE) {
if (_val8) {
_harryMode = 26;
term_message("change channel");
} else {
digi_play(getDigi1(_G(flags)[V008]), 2, 255, 18);
_val9 = 1;
_harryMode = 20;
term_message("mumble");
}
}
term_message("!");
switch (_harryMode) {
case 19:
switch (imath_ranged_rand(1, 45)) {
case 1:
case 2:
case 3:
series_play("102ha01", 0xa00, 1, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, 0, 2);
break;
case 6:
_harryShould = 30;
series_play("102ha01", 0xa00, 2, kCHANGE_HARRY_ANIMATION, 10, 0, 100, 0, 0, 16, 19);
break;
case 7:
_harryShould = 31;
series_play("102ha01", 0xa00, 2, kCHANGE_HARRY_ANIMATION, 10, 0, 100, 0, 0, 20, 23);
break;
case 8:
_harryShould = 24;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 1, 1);
break;
case 9:
_harryShould = 25;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 7, 0, 100, 0, 0, 3, 4);
break;
case 10:
_harryShould = 23;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 8, 0, 100, 0, 0, 46, 48);
break;
default:
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 40, 0, 100, 0, 0, 0, 0);
break;
}
break;
case 20:
_harryShould = 20;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, 24, 24);
break;
case 21:
_harryShould = 21;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, 30, 30);
break;
case 26:
_harryMode = 27;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 8, 14);
break;
case 27:
if (player_commands_allowed() && !digi_play_state(1)) {
setup();
_harryMode = 19;
_harryShould = 26;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 60, 0, 100, 0, 0, 14, 14);
}
break;
case 28:
_harryMode = 29;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 8, 14);
break;
case 29:
setup(5);
_harryMode = 32;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 15, 15);
break;
case 32:
series_unload(_index1);
terminateMachineAndNull(_series1s);
_harryMode = 33;
series_play("102ha02s", 0xf01, 0, 11, 6, 0, 100, 0, 0, 0, 41);
digi_preload_stream_breaks(STREAMS1);
_stream1 = series_stream_with_breaks(STREAMS1, "102ha02", 6, 0xf00, 3);
break;
case 33:
digi_unload_stream_breaks(STREAMS1);
_wilburChairMode = 62;
_wilburChairShould = 58;
kernel_trigger_dispatch_now(4);
digi_stop(2);
_index2 = series_load("102ha03", -1);
_harryMode = 34;
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 0, 4);
break;
case 34:
_harryMode = 35;
_harryShould = 35;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
hotspot_set_active("harry", false);
hotspot_set_active("harry ", true);
conv_resume_curr();
break;
default:
break;
}
break;
case 20:
if (_harryMode == 20) {
if (_play1) {
digi_play(_play1, 1, 255, 26);
_play1 = nullptr;
}
if (_series3)
terminateMachineAndNull(_series3);
_series3 = series_play("102ha01", 0xa00, 4, -1, 5, -1, 100, 0, 0, 24, 29);
} else {
terminateMachineAndNull(_series3);
_series3 = nullptr;
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, 24, 24);
}
break;
case 21:
if (_harryMode == 21) {
if (_play1) {
digi_play(_play1, 1, 255, 26);
_play1 = nullptr;
}
_series3 = series_play("102ha01", 0xa00, 4, -1, 5, -1, 100, 0, 0, 31, 42);
} else {
terminateMachineAndNull(_series3);
_series3 = nullptr;
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, 30, 30);
}
break;
case 22:
_harryShould = 23;
series_play("102ha01", 0xa00, 2, 3, 6, 0, 100, 0, 0, 44, 48);
break;
case 23:
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 44, 46);
break;
case 24:
if (_harryMode == 19) {
if (imath_ranged_rand(1, 15) == 1) {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 0, 0);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 1, 1);
}
} else {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 0, 0);
}
break;
case 25:
if (_harryMode == 19) {
if (imath_ranged_rand(1, 15) == 1) {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 5, 7);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 4, 4);
}
} else {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 5, 7);
}
break;
case 26:
if (_harryMode == 19) {
if (imath_ranged_rand(1, 17) == 1) {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 15, 15);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 14, 14);
}
} else {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 15, 15);
}
break;
case 30:
if (_harryMode == 19) {
if (imath_ranged_rand(1, 15) == 1) {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 19);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 16);
}
} else {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 19);
}
break;
case 31:
if (_harryMode == 19) {
if (imath_ranged_rand(1, 15) == 1) {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 20, 23);
} else {
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 20, 20);
}
} else {
_harryShould = 19;
series_play("102ha01", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 20, 23);
}
break;
case 35:
switch (_harryMode) {
case 35:
switch (imath_ranged_rand(1, 4)) {
case 1:
if (!digi_play_state(2))
digi_play("102_030", 2, 255, -1);
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 4, 6);
break;
case 2:
if (!digi_play_state(2))
digi_play("102_031", 2, 255, -1);
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 7, 8);
break;
case 3:
if (!digi_play_state(2))
digi_play("102_032", 2, 255, -1);
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 9, 11);
break;
case 4:
if (!digi_play_state(2))
digi_play("102_033", 2, 255, -1);
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 12, 15);
break;
default:
break;
}
if (++_val5 > 24 && player_commands_allowed()) {
_val5 = -666;
conv_load_and_prepare("conv05", 20, false);
conv_export_pointer_curr(&_G(flags)[V016], 0);
conv_play_curr();
}
break;
case 36:
_harryShould = 36;
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 16);
break;
case 37:
_harryMode = 39;
_G(flags)[V011] = 2;
digi_preload_stream_breaks(STREAMS2);
series_play("102ha09s", 0x101, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS2, "102ha09", 6, 0x100, 3);
break;
case 38:
_harryMode = 40;
_G(flags)[V011] = 1;
digi_preload_stream_breaks(STREAMS3);
series_play("102ha10s", 0x101, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS3, "102ha10", 6, 0x100, 3);
break;
case 39:
digi_unload_stream_breaks(STREAMS2);
_harryMode = 41;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
break;
case 40:
digi_unload_stream_breaks(STREAMS3);
_harryMode = 41;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
break;
case 41:
_wilburChairShould = 65;
series_unload(_index2);
_harryMode = 42;
freeWilburChair();
digi_preload_stream_breaks(STREAMS4);
series_play("102ha04s", 0x400, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS4, "102ha04", 6, 0x300, 3);
break;
case 42:
digi_unload_stream_breaks(STREAMS4);
digi_stop(2);
_wilburChairMode = 59;
_wilburChairShould = 58;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_CHAIR_ANIMATION);
_index3 = series_load("102wi05", -1);
_index4 = series_load("102ha05", -1);
_harryMode = 43;
_harryShould = 43;
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 0, 4);
conv_load_and_prepare("conv06", 21);
conv_export_pointer_curr(&_val4, 0);
conv_export_value_curr(_G(flags)[V001], 1);
conv_play_curr();
_G(flags)[V017] = 1;
break;
default:
break;
}
break;
case 36:
if (_harryMode == 36) {
if (!digi_play_state(2)) {
++_val6;
if (imath_ranged_rand(4, 6) < _val6) {
_val6 = 0;
switch (imath_ranged_rand(1, 4)) {
case 1:
digi_play("102_030", 2, 255, -1);
break;
case 2:
digi_play("102_031", 2, 255, -1);
break;
case 3:
digi_play("102_032", 2, 255, -1);
break;
case 4:
digi_play("102_033", 2, 255, -1);
break;
default:
break;
}
}
}
while ((frame = imath_ranged_rand(16, 21)) == _val3) {
}
_val3 = frame;
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, frame, frame);
} else {
_harryShould = 35;
Series::series_play("102ha03", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 16);
}
break;
case 43:
switch (_harryMode) {
case 20:
frame = imath_ranged_rand(8, 11);
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, frame, frame);
break;
case 21:
frame = imath_ranged_rand(12, 15);
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, frame, frame);
break;
case 43:
frame = imath_ranged_rand(4, 7);
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 4, 0, 100, 0, 0, frame, frame);
break;
case 44:
_harryMode = 45;
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 16, 24);
conv_resume_curr();
break;
case 45:
Series::series_play("102ha05", 0xa00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 24, 24);
break;
case 48:
_harryMode = 49;
Series::series_play("102ha05", 0xa00, 2, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 0, 3);
break;
case 49:
_harryMode = 50;
Series::series_play("102ha05", 0xb02, 2, kCHANGE_HARRY_ANIMATION, 30, 0, 100, 0, 0, 8, 8);
break;
case 50:
freeWilburChair();
series_unload(_index4);
series_unload(_index3);
_wilburChairShould = 65;
_harryMode = 51;
series_play_with_breaks(PLAY1, "102ha11", 0xa00, kCHANGE_HARRY_ANIMATION, 3, 6, 100, 0, 0);
break;
case 51:
_index1 = series_load("102ha01", -1);
series_play_with_breaks(PLAY2, "102ha06", 0xa00, 25, 3, 6, 100, 0, 0);
hotspot_set_active("harry", true);
hotspot_set_active("harry ", false);
_G(flags)[V012] = 0;
if (!_flag1)
player_set_commands_allowed(true);
break;
default:
break;
}
break;
case 54:
switch (_harryMode) {
case 46:
terminateMachineAndNull(_series1);
terminateMachineAndNull(_series1s);
_harryMode = 47;
series_play_with_breaks(PLAY2, "102ha06", 0xa00, kCHANGE_HARRY_ANIMATION, 3, 6, 100, 0, 0);
hotspot_set_active("harry", true);
break;
case 47:
_series1s = series_play("102seats", 0xa01, 0, -1, 100, -1, 100, 0, 0, 0, 0);
_index1 = series_load("102ha01", -1);
_harryMode = 19;
_harryShould = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
player_set_commands_allowed(true);
if (_G(flags)[V015] && !_G(flags)[V013])
queuePlay("102h202");
_G(flags)[V012] = 0;
++_G(flags)[V015];
break;
case 53:
_harryMode = 54;
_index5 = series_load("102ha07", -1);
Series::series_play("102ha07", 0xf00, 0, kCHANGE_HARRY_ANIMATION, 10, 0, 100, 0, 0, 0, 7);
if (_G(flags)[V013]) {
_play1 = "102h204";
_harryMode = 56;
_G(flags)[V014] = 1;
} else {
_harryMode = 55;
_play1 = _G(flags)[V015] ? "102h203" : "102h201";
}
break;
case 54:
Series::series_play("102ha07", 0xf00, 0, kCHANGE_HARRY_ANIMATION, 30, 0, 100, 0, 0, 23, 23);
if (_play1) {
digi_play(_play1, 1, 255, 10);
_play1 = nullptr;
}
break;
case 55:
_harryShould = 55;
Series::series_play("102ha07", 0xf00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 30, 30);
break;
case 56:
_harryShould = 56;
Series::series_play("102ha07", 0xf00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 9, 10);
break;
case 57:
series_unload(_index5);
_harryMode = 46;
series_play("102ha08s", 0xf01, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS5, "102ha08", 6, 0xf00, 3);
break;
default:
break;
}
break;
case 55:
if (_harryMode == 55) {
_series3 = series_play("102ha07", 0xf00, 4, -1, 6, -1, 100, 0, 0, 30, 33);
_series6 = series_play("102ha07s", 0xf01, 4, -1, 6, -1, 100, 0, 0, 30, 33);
if (_play1) {
digi_play(_play1, 1, 255, 10);
_play1 = nullptr;
kernel_timing_trigger(80, 16);
}
} else {
terminateMachineAndNull(_series3);
terminateMachineAndNull(_series6);
_series3 = nullptr;
_harryShould = 54;
Series::series_play("102ha07", 0xf00, 2, 3, 6, 0, 100, 0, 0, 30, 30);
}
break;
case 56:
if (_harryMode == 56) {
_series3 = series_play("102ha07", 0xf00, 4, -1, 4, -1, 100, 0, 0, 11, 19);
_series6 = series_play("102ha07s", 0xf01, 4, -1, 4, -1, 100, 0, 0, 11, 19);
if (_play1) {
digi_play(_play1, 1, 255, 15);
_play1 = nullptr;
}
} else {
terminateMachineAndNull(_series3);
terminateMachineAndNull(_series6);
_series3 = nullptr;
_harryShould = 54;
Series::series_play("102ha07", 0xf00, 0, kCHANGE_HARRY_ANIMATION, 6, 0, 100, 0, 0, 20, 21);
}
break;
default:
break;
}
break;
case kCHANGE_WILBUR_CHAIR_ANIMATION:
switch (_wilburChairMode) {
case 59:
switch (_wilburChairShould) {
case 58:
_wilburChair.play("102wi05", 0xb00, 0, kCHANGE_WILBUR_CHAIR_ANIMATION, 10, -1, 100, 0, 0, 0, 0);
break;
case 60:
freeWilburChair();
frame = imath_ranged_rand(1, 5);
Series::series_play("102wi05", 0xb00, 0, kCHANGE_WILBUR_CHAIR_ANIMATION, 4, 0, 100, 0, 0, frame, frame);
break;
case 63:
freeWilburChair();
_wilburChairMode = 64;
_wilburChairShould = 58;
series_play_with_breaks(PLAY3, "102wi05", 0xb00, kCHANGE_WILBUR_CHAIR_ANIMATION, 3, 6, 100, 0, 0);
break;
default:
freeWilburChair();
break;
}
break;
case 62:
switch (_wilburChairShould) {
case 58:
_wilburChair.play("102wi03", 0xb00, 0, -1, 600, -1, 100, 0, 0, 2, 2);
break;
case 60:
freeWilburChair();
frame = imath_ranged_rand(0, 5);
Series::series_play("102wi03", 0xb00, 0, kCHANGE_WILBUR_CHAIR_ANIMATION, 4, 0, 100, 0, 0, frame, frame);
break;
case 61:
freeWilburChair();
_wilburChairShould = 60;
Series::series_play("102wi03", 0xb00, 1, kCHANGE_WILBUR_CHAIR_ANIMATION, 6, 0, 100, 0, 0, 6, 9);
break;
default:
freeWilburChair();
break;
}
break;
case 64:
_wilburChairMode = 59;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_CHAIR_ANIMATION);
break;
default:
break;
}
break;
case 6:
series_play("102tv01", 0, 4, -1, 5, -1, 100, 0, 0, 1, 4);
break;
case 8:
_series1s = series_play("102seats", 0xa01, 0, -1, 100, -1, 100, 0, 0, 0, 0);
break;
case 9:
_harryMode = 44;
break;
case 10:
_harryMode = 57;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
break;
case 11:
_series7 = series_play("102ha02s", 0xf01, 0, -1, 600, -1, 100, 0, 0, 40, 40);
break;
case 12:
series_set_frame_rate(_stream1, 30000);
ws_walk(324, 341, nullptr, 13, 10, true);
break;
case 13:
terminateMachineAndNull(_series7);
series_play("102ha02s", 0xf01, 0, -1, 6, 0, 100, 0, 0, 42, -1);
series_set_frame_rate(_stream1, 6);
ws_OverrideCrunchTime(_stream1);
ws_demand_location(321, 343, 4);
ws_hide_walker();
break;
case 14:
ws_hide_walker();
break;
case 15:
_harryMode = 54;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
pal_fade_init(_G(kernel).first_fade, 255, 0, 30, 1001);
break;
case 16:
ws_walk(318, 343, nullptr, -1, 2, true);
break;
case 17:
pal_fade_init(_G(kernel).first_fade, 255, 0, 30, 1001);
break;
case 18:
_val8 = 1;
_val9 = 0;
_harryMode = player_commands_allowed() && !digi_play_state(1) ? 26 : 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
break;
case 19:
case 28:
player_set_commands_allowed(true);
break;
case 21:
if (_G(flags)[V013]) {
pal_fade_init(_G(kernel).first_fade, 255, 0, 30, 1001);
} else {
player_set_commands_allowed(_flag1);
}
break;
case 23:
_harryMode = 36;
player_set_commands_allowed(false);
switch (imath_ranged_rand(1, 4)) {
case 1:
digi_play("102h200a", 1, 255, 24);
break;
case 2:
digi_play("102h200b", 1, 255, 24);
break;
case 3:
digi_play("102h200c", 1, 255, 24);
break;
case 4:
digi_play("102h200d", 1, 255, 24);
break;
default:
break;
}
break;
case 24:
player_set_commands_allowed(true);
_harryMode = 35;
break;
case 25:
_series1s = series_play("102seats", 0xa01, 0, -1, 100, -1, 100, 0, 0, 0, 0);
_harryShould = 19;
_harryMode = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
conv_resume_curr();
break;
case 26:
_harryMode = 19;
_val10 = timer_read_60() + 600;
if (_trigger != -1) {
_G(kernel).trigger_mode = _triggerMode;
kernel_trigger_dispatch_now(_trigger);
_G(kernel).trigger_mode = oldMode;
_trigger = -1;
}
break;
case 29:
if (_G(flags)[V012] != 2)
player_set_commands_allowed(true);
_harryMode = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
break;
case 1037:
if (player_commands_allowed() && _G(player).walker_visible && INTERFACE_VISIBLE)
freshen();
else
kernel_timing_trigger(60, 1037);
break;
case kWILBUR_SPEECH_STARTED:
break;
case 10014:
_G(kernel).continue_handling_trigger = true;
break;
case kCHANGE_WILBUR_ANIMATION:
switch (_G(wilbur_should)) {
case 1:
digi_unload("102_038");
ws_demand_location(628, 325);
ws_demand_facing(9);
_G(wilbur_should) = 2;
ws_walk(435, 329, nullptr, kCHANGE_WILBUR_ANIMATION, 9);
break;
case 2:
if (_G(flags)[V012] == 2) {
_G(wilbur_should) = 3;
wilbur_speech("102w003", kCHANGE_WILBUR_ANIMATION);
} else if (_G(flags)[V012] == 0) {
_G(wilbur_should) = 5;
if (_G(flags)[V018]) {
wilbur_speech("102w002", kCHANGE_WILBUR_ANIMATION);
} else {
queuePlay("102h001", kCHANGE_WILBUR_ANIMATION);
}
}
break;
case 3:
wilbur_speech("102w004", kCHANGE_WILBUR_ANIMATION);
_G(wilbur_should) = 4;
break;
case 4:
_val16 = 0;
player_set_commands_allowed(true);
break;
case 5:
if (_G(flags)[V018]) {
switch (imath_ranged_rand(1, 3)) {
case 1:
queuePlay("102h002a");
break;
case 2:
queuePlay("102h002b");
break;
case 3:
queuePlay("102h002c");
break;
default:
break;
}
} else {
_harryMode = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
wilbur_speech("102w001", 28);
_G(flags)[V018] = 1;
}
break;
case 71:
ws_hide_walker();
_G(wilbur_should) = 72;
digi_preload_stream_breaks(STREAMS6);
series_play("102wi07s", 0xb00, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS6, "102wi07", 6, 0x100, kCHANGE_WILBUR_ANIMATION);
break;
case 72:
digi_unload_stream_breaks(STREAMS6);
ws_unhide_walker();
wilbur_speech("102w011", 28);
break;
case 73:
ws_hide_walker();
_G(wilbur_should) = 74;
digi_preload_stream_breaks(STREAMS7);
series_play("102wi06s", 0xb00, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS7, "102wi06", 6, 0x100, kCHANGE_WILBUR_ANIMATION);
break;
case 74:
digi_unload_stream_breaks(STREAMS7);
ws_unhide_walker();
wilbur_speech("102w011", 28);
break;
case 75:
ws_hide_walker();
_G(wilbur_should) = 76;
digi_preload_stream_breaks(STREAMS6);
series_play("102wi11s", 0x101, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS6, "102wi11", 6, 0x100, kCHANGE_WILBUR_ANIMATION);
break;
case 76:
digi_unload_stream_breaks(STREAMS6);
ws_unhide_walker();
wilbur_speech("102w011", 28);
break;
case 77:
ws_hide_walker();
_G(wilbur_should) = 78;
digi_preload_stream_breaks(STREAMS7);
series_play("102wi10s", 0x101, 0, -1, 6, 0, 100, 0, 0, 0, -1);
series_stream_with_breaks(STREAMS7, "102wi10", 6, 0x100, kCHANGE_WILBUR_ANIMATION);
break;
case 78:
digi_unload_stream_breaks(STREAMS7);
ws_unhide_walker();
wilbur_speech("102w011", 28);
break;
case 79:
ws_hide_walker();
terminateMachineAndNull(_laz1);
terminateMachineAndNull(_laz2);
_G(flags)[V019] = 1;
_G(wilbur_should) = 80;
if (!_G(flags)[V020])
digi_preload("102w008");
series_play_with_breaks(PLAY4, "102wi09", 0x100, kCHANGE_WILBUR_ANIMATION, 3, 6, 100, 0, 0);
break;
case 80:
ws_unhide_walker();
if (!_G(flags)[V020]) {
digi_play("102w008", 1, 255, 81);
_G(flags)[V020] = 1;
}
player_set_commands_allowed(true);
setupLaz();
setupWax();
break;
case 81:
digi_unload("102w008");
break;
case 82:
ws_hide_walker();
terminateMachineAndNull(_laz1);
terminateMachineAndNull(_laz2);
_G(flags)[V019] = 0;
_G(wilbur_should) = 83;
series_play_with_breaks(PLAY4, "102wi08", 0x100, kCHANGE_WILBUR_ANIMATION, 3, 6, 100, 0, 0);
break;
case 83:
ws_unhide_walker();
setupLaz();
setupWax();
player_set_commands_allowed(true);
break;
default:
_G(kernel).continue_handling_trigger = true;
break;
}
break;
default:
_G(kernel).continue_handling_trigger = true;
break;
}
}
void Room102::pre_parser() {
if (player_said("main street") && !player_said_any("exit", "gear", "look", "look at"))
player_hotspot_walk_override_just_face(3);
if (_G(flags)[V012] == 1) {
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(23);
_G(player).need_to_walk = false;
_G(kernel).trigger_mode = KT_PARSE;
g_vars->getInterface()->freshen_sentence();
} else if (player_said("talk to")) {
player_hotspot_walk_override(192, 327, 2, -1);
}
}
void Room102::parser() {
const bool lookFlag = player_said("look") || player_said("look at");
_G(kernel).trigger_mode = KT_DAEMON;
if (player_said("conv04")) {
conv04();
} else if (player_said("conv05")) {
conv05();
} else if (player_said("conv06")) {
conv06();
} else if (player_said("talk to")) {
conv_load_and_prepare("conv04", 19, false);
conv_export_value_curr(_G(flags)[V017], 0);
conv_export_value_curr(_G(flags)[V016], 1);
conv_play_curr();
} else if (inv_player_has(_G(player).verb) && player_said("main street")) {
wilbur_speech("102w015");
} else if (player_said("exit") || player_said("gear", "main_street")) {
player_set_commands_allowed(false);
digi_preload("102_038");
digi_play("102_038", 2, 255, 17);
} else {
if (player_said("TAKE", "DOORWAY"))
wilbur_speech("102W003");
if (player_said("USE", "GO", "DOORWAY")) {
_G(wilbur_should) = 1;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
}
if (player_said("USE", "GO", "FIRE ESCAPE")) {
wilbur_speech("102W005");
kernel_trigger_dispatch_now(1003);
}
if (player_said("TAKE", "LAZY SUSAN")) {
flagAction("102w007", "102h004");
} else if (player_said("GEAR", "LAZY SUSAN")) {
if (_G(flags)[V012]) {
player_set_commands_allowed(false);
_G(wilbur_should) = _G(flags)[V019] ? 82 : 79;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
} else {
queuePlay("102h005");
}
} else if (player_said("GEAR", "harry") || player_said("take", "harry")) {
wilbur_speech("102w015");
} else if (player_said("take", "hair wax") || player_said("take", "hair wax ")) {
if (_G(flags)[V012]) {
player_set_commands_allowed(false);
_G(wilbur_should) = player_said("hair wax") ? 71 : 75;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
} else {
queuePlay("102h007");
}
} else if (player_said("gear", "hair wax") || player_said("gear", "hair wax ")) {
flagAction("102w012", "102h007");
} else if (player_said("take", "television")) {
flagAction("102w018", "102h012");
} else if (player_said("gear", "television")) {
flagAction("102w019", "102h013");
} else if (player_said("take", "hair wax ") || player_said("take", "hair wax ")) {
if (_G(flags)[V012]) {
player_set_commands_allowed(false);
_G(wilbur_should) = player_said("hair wax ") ? 73 : 77;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
} else {
queuePlay("102h007");
}
} else if (player_said("gear", "hair wax ") || player_said("gear", "hair wax ")) {
flagAction("102w012", "102h007");
} else if (player_said("take", "back room") || player_said("gear", "back room")) {
wilbur_speech("102w015");
} else if (player_said("enter", "back room")) {
if (_G(flags)[V012]) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
_G(kernel).trigger_mode = KT_PARSE;
digi_play("102h015", 1, 255, 1);
break;
case 1:
freshen();
break;
default:
break;
}
} else {
queuePlay("102h014");
}
} else if (player_said("take", "barber's chair")) {
flagAction("102w021", "102h016");
} else if (player_said("gear", "barber's chair")) {
flagAction("102w022", "102h017");
} else if (player_said("take", "fish")) {
flagAction("102w025", "102h019");
} else if (player_said("gear", "fish")) {
flagAction("102w026", "102h020");
} else if (player_said("gear", "bottles")) {
wilbur_speech("102w029");
} else if (player_said("take", "bottles")) {
if (_G(flags)[V012]) {
switch (_G(kernel).trigger) {
case -1:
_G(kernel).trigger_mode = KT_PARSE;
digi_play("102h023", 1, 255, 1);
player_set_commands_allowed(false);
break;
case 1:
_G(kernel).trigger_mode = KT_PARSE;
wilbur_speech("102w028");
break;
default:
break;
}
} else {
player_set_commands_allowed(false);
}
} else if (player_said("take", "towels")) {
wilbur_speech("102w2029");
} else if (player_said("gear", "towels")) {
flagAction("102w032", "102h025");
} else if (player_said("take", "mirror")) {
wilbur_speech("102w015");
} else if (player_said("gear", "mirror")) {
flagAction("102w034", "102h027");
} else if (player_said("take", "sink")) {
wilbur_speech("102w037");
} else if (player_said("gear", "sink")) {
flagAction("102w038", "102h029");
} else if (player_said("take", "stove")) {
wilbur_speech("102w040");
} else if (player_said("gear", "stove")) {
flagAction("102w041", "102h031");
} else if (player_said("harry") && inv_player_has(_G(player).verb) && !_G(flags)[V012]) {
queuePlay(imath_ranged_rand(1, 2) == 1 ? "102h009y" : "102h009z");
} else if (lookFlag) {
if (player_said("Harry")) {
switch (_G(kernel).trigger) {
case -1:
if (!_G(flags)[V012]) {
_G(kernel).trigger_mode = KT_PARSE;
wilbur_speech("102w014");
player_set_commands_allowed(false);
}
break;
case 1:
queuePlay("102h009", 2, KT_PARSE);
break;
case 2:
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
_G(kernel).trigger_mode = KT_PARSE;
kernel_timing_trigger(120, 3);
break;
case 3:
queuePlay("102h010");
break;
default:
break;
}
} else if (player_said("HAIR WAX") || player_said("HAIR WAX ")) {
flagAction("102w009", "102h006");
} else if (player_said("HAIR WAX ") || player_said("HAIR WAX ")) {
flagAction("102w013", "102h008");
} else if (player_said("LAZY SUSAN")) {
flagAction("102w005", "102h003");
} else if (player_said("television")) {
flagAction("102w017", "102h011");
} else if (player_said("back room")) {
if (_G(flags)[V012]) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
_G(kernel).trigger_mode = KT_PARSE;
digi_play("102h015", 1, 255, 1);
break;
case 1:
freshen();
break;
default:
break;
}
} else {
queuePlay("102h014");
}
} else if (player_said("barber's chair")) {
wilbur_speech("102W020");
} else if (player_said("fish")) {
flagAction("102w023", "102h018");
} else if (player_said("bottles")) {
flagAction("102w027", "102h021");
} else if (player_said("towels")) {
flagAction("102w030", "102h024");
} else if (player_said("mirror")) {
flagAction("102w033", "102h026");
} else if (player_said("sink")) {
flagAction("102w036", "102h028");
} else if (player_said("stove")) {
flagAction("102w039", "102h030");
} else {
return;
}
} else {
return;
}
}
_G(player).command_ready = false;
}
void Room102::flagAction(const char *name1, const char *name2) {
switch (_G(kernel).trigger) {
case -1:
if (_G(flags)[V012]) {
wilbur_speech(name1);
} else {
_G(kernel).trigger_mode = KT_PARSE;
wilbur_speech(name1, 1);
player_set_commands_allowed(false);
}
break;
case 1:
queuePlay(name2);
break;
default:
break;
}
}
void Room102::setup(int val1, int val2) {
digi_stop(3);
if (val2)
digi_play_loop("102_001", 3, 255, -1);
if (_val1) {
digi_unload(getDigi1(_G(flags)[V008]));
digi_unload(getDigi2(_G(flags)[V008]));
}
if (val1) {
_G(flags)[V008] = val1;
} else {
if (++_G(flags)[V008] == 36)
_G(flags)[V008] = 1;
}
_val1 = 1;
digi_preload(getDigi1(_G(flags)[V008]));
digi_preload(getDigi2(_G(flags)[V008]));
if (val2)
digi_stop(3);
digi_play_loop(getDigi2(_G(flags)[V008]), 3, 255, -1);
_val10 = timer_read_60() + digi_ticks_to_play(getDigi2(_G(flags)[V008]));
_val8 = 0;
}
void Room102::setupWax() {
if (_G(flags)[V019]) {
hotspot_set_active("hair wax ", false);
hotspot_set_active("hair wax ", true);
hotspot_set_active("hair wax ", true);
hotspot_set_active("hair wax", false);
} else {
hotspot_set_active("hair wax ", true);
hotspot_set_active("hair wax ", false);
hotspot_set_active("hair wax ", false);
hotspot_set_active("hair wax", true);
}
}
void Room102::setupLaz() {
if (_G(flags)[V019]) {
_laz1 = series_play("102lazys", 512, 0, -1, 100, -1, 100, 0, 0, 0, 0);
_laz2 = series_play("102lazss", 513, 0, -1, 100, -1, 100, 0, 0, 0, 0);
} else {
_laz1 = series_play("102lazy2", 512, 0, -1, 100, -1, 100, 0, 0, 0, 0);
_laz2 = series_play("102laz2s", 513, 0, -1, 100, -1, 100, 0, 0, 0, 0);
}
}
const char *Room102::getDigi1(int num) const {
static const char *NAMES[34] = {
"102h0323", "102h032b", "102h032c", "102h032d",
"102h032e", "102h032f", "102h032g", "102h032h",
"102h032i", "102h032j", "102h032k", "102h032l",
"102h032m", "102h0321", "102h032o", "102h032p",
"102h032q", "102h032r", "102h032s", "102h0324",
"102h032u", "102h0321", "102h032w", "102h032x",
"102h032y", "102h032z", "102h032v", "102h0322",
"102h032a", "102h032t", "102h0325", "102h0326",
"102h0327", "102h0328" };
return (num >= 1 && num <= 34) ? NAMES[num - 1] : "102h0329";
}
const char *Room102::getDigi2(int num) const {
static const char *NAMES[35] = {
"102_011", "102_004", "102_024", "102_006", "102_008",
"102_009", "102_013", "102_005", "102_014", "102_023",
"102_020", "102_011", "102_015", "102_006", "102_007",
"102_016", "102_014", "102_015", "102_013", "102_011",
"102_003", "102_012", "102_008", "102_013", "102_021",
"102_011", "102_013", "102_010", "102_003", "102_005",
"102_010", "102_011", "102_021", "102_021", "102_012"
};
return (num >= 1 && num <= 35) ? NAMES[num - 1] : "102_024";
}
void Room102::freeWilburChair() {
_wilburChair.terminate();
}
void Room102::queuePlay(const char *filename, int trigger, KernelTriggerType triggerMode) {
if (_val9) {
digi_stop(2);
_val9 = 0;
_val8 = 1;
}
_play1 = filename;
_harryMode = 20;
_trigger = trigger;
_triggerMode = triggerMode;
player_set_commands_allowed(false);
term_message("spleen %d %d %d %d", _harryShould, _harryMode, 19, 20);
if (_harryShould == 20) {
term_message("spleen2");
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
}
}
void Room102::freshen() {
if (_G(flags)[V012] == 2) {
player_set_commands_allowed(false);
_G(flags)[V012] = 0;
_harryShould = 54;
_harryMode = 53;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
g_vars->getInterface()->freshen_sentence();
Section1::walk();
}
}
void Room102::conv04() {
_G(kernel).trigger_mode = KT_PARSE;
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 (_G(kernel).trigger == 22) {
if (who <= 0) {
_G(kernel).trigger_mode = KT_DAEMON;
if (node == 1 && entry == 0) {
_harryMode = 26;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
player_update_info();
ws_walk(192, 327, nullptr, -1, 4);
conv_resume_curr();
} else if (node == 4 && entry == 0) {
digi_preload("102_030");
digi_preload("102_031");
digi_preload("102_032");
digi_preload("102_033");
_harryMode = 28;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
} else if ((node == 4 && entry == 1) || (node == 4 && entry == 2)) {
_harryMode = 35;
conv_resume_curr();
} else {
_harryMode = 19;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
conv_resume_curr();
}
} else if (who == 1) {
if (node == 4 && entry == 1) {
// Nothing
} else if (node == 4 && entry == 2) {
_wilburChairShould = 58;
conv_resume_curr();
} else {
_G(wilbur_should) = 10002;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(kCHANGE_WILBUR_ANIMATION);
conv_resume_curr();
}
}
} else if (sound) {
if (who <= 0) {
if ((node == 4 && entry == 1) || (node == 4 && entry == 2)) {
_harryMode = 36;
digi_play(sound, 1, 255, 22);
_G(flags)[V012] = 1;
} else {
queuePlay(sound, 22, KT_PARSE);
}
} else if (who == 1) {
player_update_info();
if (_G(player).walker_visible && _G(player_info).facing != 2) {
ws_walk(192, 327, nullptr, 7, 2);
} else if (node == 4 && entry == 1) {
digi_preload("04p0502", 102);
digi_play(sound, 1, 255, 22);
} else if (node == 4 && entry == 2) {
_wilburChairShould = 60;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(4);
_G(kernel).trigger_mode = KT_PARSE;
digi_play(sound, 1, 255, 22);
} else {
wilbur_speech(sound, 22);
}
}
} else {
conv_resume_curr();
}
}
void Room102::conv05() {
_G(kernel).trigger_mode = KT_PARSE;
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 (_G(kernel).trigger == 22) {
if (who <= 0) {
if ((node == 1 && entry == 3) || (node == 3 && entry == 9) ||
(node == 5 && entry == 8) || (node == 2)) {
_harryMode = 41;
} else if ((node == 1 && entry == 0) || (node == 3 && entry == 8) ||
(node == 5 && entry == 7)) {
_harryMode = _G(flags)[V019] ? 38 : 37;
} else {
_harryMode = 35;
}
} else if (who == 1) {
_wilburChairShould = 58;
}
conv_resume_curr();
} else if (sound) {
if (who <= 0) {
_harryMode = 36;
} else if (who == 1) {
if ((node == 1 && entry == 1) || (node == 3 && entry == 0) ||
(node == 3 && entry == 3) || (node == 5 && entry == 3)) {
_wilburChairShould = 61;
} else {
_wilburChairShould = 60;
}
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(4);
}
_G(kernel).trigger_mode = KT_PARSE;
digi_play(sound, 1, 255, 22);
} else {
conv_resume_curr();
}
}
void Room102::conv06() {
_G(kernel).trigger_mode = KT_PARSE;
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 (_G(kernel).trigger == 22) {
if (who <= 0) {
if (node == 2) {
_harryMode = 19;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(kCHANGE_HARRY_ANIMATION);
} else if (node == 1 && entry == 4) {
_G(flags)[V014] = 1;
_harryMode = 43;
} else if (node != 1 || entry != 1) {
_harryMode = 43;
}
conv_resume_curr();
} else if (who == 1) {
if (node == 1 && entry == 1) {
_wilburChairShould = 63;
} else if (node == 2) {
_harryMode = _G(flags)[V010] == 1 ? 49 : 48;
_wilburChairShould = 58;
} else {
_wilburChairShould = 58;
conv_resume_curr();
}
}
} else if (sound) {
if (who <= 0) {
if (node == 1 && entry == 3) {
_G(flags)[V010] = 3;
if (_G(flags)[V011] == 1)
_G(flags)[V021] = 10034;
}
if (node == 2) {
term_message("gonna_say_sheepdog %d %d", _harryShould, _harryMode);
queuePlay(sound, 22, KT_PARSE);
_flag1 = true;
return;
} else if (node == 1 && entry == 1) {
_G(flags)[V010] = 1;
_G(flags)[V001] -= 8;
if (_G(flags)[V011] == 1)
_G(flags)[V021] = 10032;
} else if (node == 1 && entry == 4) {
_harryMode = 21;
_G(flags)[V010] = 2;
if (_G(flags)[V011] == 1)
_G(flags)[V021] = 10033;
_G(flags)[V013] = 1;
_flag1 = false;
} else {
_harryMode = 20;
}
} else if (who == 1) {
if (_wilburChairMode == 64) {
kernel_timing_trigger(30, 7);
return;
} else {
_wilburChairShould = 60;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_trigger_dispatch_now(4);
}
}
_G(kernel).trigger_mode = KT_PARSE;
digi_play(sound, 1, 255, 22);
} else {
conv_resume_curr();
}
}
} // namespace Rooms
} // namespace Burger
} // namespace M4