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

924 lines
21 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/riddle/rooms/section4/room405.h"
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
#include "m4/riddle/riddle.h"
namespace M4 {
namespace Riddle {
namespace Rooms {
static const int16 NORMAL_DIRS[] = { 220, 221, -1 };
static const char *NORMAL_NAMES[] = {
"baron walker pos1",
"baron walker pos7"
};
static const int16 SHADOW_DIRS[] = { 230, 231, -1 };
static const char *SHADOW_NAMES[] = {
"baron walker shadow pos1",
"baron walker shadow pos7"
};
static const char *const SAID[][2] = {
{ "FIREPLACE", "405r05" },
{ "WINDOW", "405r06" },
{ "ZEBRA SKIN", "405r07" },
{ "DEER HEAD", "405r08" },
{ "BATTLE AXE", "405r09" },
{ "SHIELD", "405r09" },
{ "CHANDELIER", "405r10" },
{ "BOOKSHELF", "405r11" },
{ "RUG", "405r16" },
{ "CHAIR", "405r13" },
{ nullptr, nullptr }
};
void Room405::init() {
player_set_commands_allowed(false);
_door = series_place_sprite("405doora", 0, 0, 0, 100, 0);
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
_val1 = 0;
_val2 = -1;
_val3 = 0;
_val4 = -1;
_val5 = 0;
_val6 = 0;
_val7 = 0;
_val8 = 0;
_val9 = 0;
}
if (!_G(flags)[kGermanBanknoteFound] || !inv_object_is_here("GERMAN BANKNOTE"))
hotspot_set_active("GERMAN BANKNOTE", false);
_safariShadow = series_load("SAFARI SHADOW 3");
if (inv_object_is_here("GERMAN BANKNOTE"))
_bankNote = series_place_sprite("405 BANK NOTE UNDER RUG", 0, 0, 0, 100, 0xf00);
_candlesBurning = series_load("TWO CANDLES BURNING");
_candles = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, false,
triggerMachineByHashCallback, "candles");
sendWSMessage_10000(1, _candles, _candlesBurning, 1, 8, -1,
_candlesBurning, 1, 8, 0);
if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
player_set_commands_allowed(true);
return;
}
_G(flags)[V110] = 1;
if (!inv_player_has("TURTLE"))
inv_move_object("TURTLE", 305);
ws_demand_location(_G(my_walker), 155, 370, 9);
if (player_been_here(405) || _G(kittyScreaming)) {
ws_walk(_G(my_walker), 230, 345, nullptr, 50, 2);
} else {
ws_walk_load_shadow_series(SHADOW_DIRS, SHADOW_NAMES);
ws_walk_load_walker_series(NORMAL_DIRS, NORMAL_NAMES);
_baron = triggerMachineByHash_3000(8, 11, *NORMAL_DIRS, *SHADOW_DIRS, 185, 365, 1,
triggerMachineByHashCallback3000, "BARON_walker");
ws_walk(_G(my_walker), 329, 320, nullptr, 20, 9);
}
}
void Room405::daemon() {
int frame;
switch (_G(kernel).trigger) {
case 20:
digi_preload("405b01a");
_baronShakeSit = series_load("BARON SHAKES AND SITS");
_baronTalkLoop = series_load("BARON TALK LOOP");
_baronLeanForward = series_load("BARON LEAN FORWARD");
_baronTurnWalk = series_load("BARON TURNWALK");
_ripHandLetter = series_load("RIP HANDS BARON LETTER");
_ripTalkGesture = series_load("RIPLEY TALKGESTURE");
_ripLeanForward = series_load("RIPLEY LEAN FORWARD");
_lowReacher = series_load("RIP TREK MED REACH HAND POS1");
_ripHeadTurn = series_load("RIP TREK HEAD TURN POS3");
digi_preload("13_05n03");
digi_preload("13_03n01");
digi_preload("13_09p03");
setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
sendWSMessage_110000(-1);
kernel_timing_trigger(50, 21);
sendWSMessage_10000(_baron, 284, 324, 1, 22, 1);
break;
case 21:
sendWSMessage_120000(-1);
break;
case 22:
ws_demand_location(_G(my_walker), 286, 324, 7);
ws_hide_walker(_baron);
sendWSMessage_150000(-1);
ws_hide_walker(_G(my_walker));
_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
triggerMachineByHashCallback, "BARON talks rip");
sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 1, 48, 23,
_baronShakeSit, 48, 48, 0);
digi_play("405b01", 1);
break;
case 23:
sendWSMessage_10000(1, _baronWalker, _baronShakeSit, 48, 100, 24,
_baronShakeSit, 100, 100, 0);
digi_play("405b01a", 1, 255, 25);
break;
case 24:
_ripTalksBaron = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
triggerMachineByHashCallback, "rip talks baron");
_val5 = 1000;
_val6 = 1103;
kernel_timing_trigger(1, 102);
_val7 = 2000;
_val8 = 2101;
kernel_timing_trigger(1, 110);
break;
case 25:
digi_play("405b02", 1, 255, 26);
break;
case 26:
_val8 = 2102;
_val6 = 1102;
digi_play("405r01", 1, 255, 27);
break;
case 27:
_val6 = 1104;
_val8 = 2101;
digi_play("405b03", 1, 255, 28);
break;
case 28:
_val8 = 2103;
kernel_timing_trigger(10, 29);
break;
case 29:
terminateMachineAndNull(_baronWalker);
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 1, 15, 30,
_ripHandLetter, 15, 15, 0);
break;
case 30:
digi_preload("950_s06");
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 16, 29, -1,
_ripHandLetter, 29, 29, 0);
digi_play("405r02", 1, 255, 31);
digi_play("950_s06", 2, 255, -1, 950);
break;
case 31:
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 30, 84, -1,
_ripHandLetter, 84, 84, 0);
kernel_timing_trigger(45, 32);
break;
case 32:
digi_play("405b04", 1, 255, 33);
break;
case 33:
digi_play("405b03", 1, 255, 34);
break;
case 34:
digi_play("405b05", 1, 255, 35);
break;
case 35:
digi_play("950_s06", 2, 255, -1, 950);
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 85, 98, 36,
_ripHandLetter, 98, 98, 0);
break;
case 36:
_baronWalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x600, false,
triggerMachineByHashCallback, "BARON talks rip");
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
_baronTalkLoop, 1, 1, 0);
kernel_timing_trigger(1, 37);
break;
case 37:
digi_play("405b05a", 1, 255, 38);
_val8 = 2101;
kernel_timing_trigger(1, 110);
break;
case 38:
_val8 = 2102;
sendWSMessage_10000(1, _ripTalksBaron, _ripHandLetter, 15, 1, 39,
_ripHandLetter, 1, 1, 0);
break;
case 39:
_val5 = 1000;
_val6 = 1100;
kernel_timing_trigger(1, 102);
break;
case 40:
kernel_timing_trigger(1, 60);
break;
case 50:
case 69:
player_set_commands_allowed(true);
break;
case 61:
digi_play("13_15n07", 1, 255, 62);
break;
case 62:
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 58, 79, 63,
_baronTurnWalk, 80, 82, 4);
sendWSMessage_1a0000(_baronWalker, 11);
break;
case 63:
digi_play("13_20p01", 1, 255, 64);
break;
case 64:
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 83, 99, 65,
_baronTurnWalk, 99, 99, 0);
break;
case 65:
ws_unhide_walker(_baron);
ws_unhide_walker();
setGlobals1(_ripHeadTurn, 6, 9, 9, 9, 0, 9, 6, 6, 6);
sendWSMessage_110000(-1);
terminateMachineAndNull(_baronWalker);
sendWSMessage_10000(_baron, 185, 365, 9, 66, 1);
break;
case 66:
sendWSMessage_60000(_baron);
digi_play("13_20n01", 1, 255, 67);
sendWSMessage_120000(68);
break;
case 67:
digi_play("405_s01", 2, 255, 69);
break;
case 68:
sendWSMessage_150000(-1);
break;
case 100:
kernel_timing_trigger(1, 102);
break;
case 101:
_val8 = 2163;
break;
case 102:
if (_val2 != -1) {
kernel_timing_trigger(1, _val2);
_val2 = -1;
} else {
kernel_timing_trigger(1, 103);
}
break;
case 103:
if (_val5 == 1000) {
switch (_val6) {
case 1100:
ws_hide_walker();
player_set_commands_allowed(false);
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
_ripTalkGesture, 13, 13, 0);
_val6 = 1101;
_val7 = 2000;
_val8 = 2100;
kernel_timing_trigger(1, 110);
break;
case 1101:
_val6 = 1103;
kernel_timing_trigger(1, 102);
conv_load("conv405a", 10, 10, 101);
conv_export_pointer_curr(&_G(flags)[V115], 0);
conv_export_pointer_curr(&_G(flags)[V314], 1);
conv_play();
break;
case 1102:
frame = imath_ranged_rand(13, 16);
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, frame, frame, 102,
_ripTalkGesture, frame, frame, 0);
break;
case 1103:
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, 102,
_ripTalkGesture, 13, 13, 0);
break;
case 1104:
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 13, -1,
_ripTalkGesture, 13, 13, 0);
break;
case 1220:
_G(kernel).call_daemon_every_loop = true;
_response = series_stream("RIP DONT I KNOW", 4, 0, 103);
series_stream_break_on_frame(_response, 9, 103);
_val6 = 1221;
break;
case 1221:
if (!_sound2.empty()) {
digi_play(_sound2.c_str(), 1);
_sound2.clear();
}
_G(kernel).call_daemon_every_loop = false;
_val6 = 1222;
break;
case 1222:
_val6 = 1103;
kernel_timing_trigger(1, 102);
conv_resume();
break;
case 1230:
sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 1, 16, 103,
_ripLeanForward, 16, 16, 0);
_val6 = 1232;
break;
case 1232:
_val6 = 1233;
if (!_sound2.empty()) {
digi_play(_sound2.c_str(), 1, 255, 103);
_sound2.clear();
}
break;
case 1233:
sendWSMessage_10000(1, _ripTalksBaron, _ripLeanForward, 16, 1, 102,
_ripLeanForward, 1, 1, 0);
_val6 = 1103;
conv_resume();
break;
case 2110:
sendWSMessage_10000(1, _ripTalksBaron, _ripTalkGesture, 13, 42, 103,
_ripTalkGesture, 42, 42, 0);
_val6 = 2112;
if (!_sound2.empty()) {
_G(kernel).trigger_mode = KT_PARSE;
digi_play(_sound2.c_str(), 1);
_G(kernel).trigger_mode = KT_DAEMON;
_sound2.clear();
}
break;
case 2112:
_val6 = 1102;
kernel_timing_trigger(1, 102);
conv_resume();
break;
default:
break;
}
}
break;
case 110:
if (_val7 == 2000) {
if (_val4 != -1) {
kernel_timing_trigger(1, _val4);
_val4 = -1;
} else {
kernel_timing_trigger(1, 111);
}
}
break;
case 111:
if (_val7 == 2000) {
switch (_val8) {
case 2100:
case 2102:
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, 110,
_baronTalkLoop, 1, 1, 0);
_val8 = 2102;
break;
case 2101:
frame = imath_ranged_rand(4, 9);
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, frame, frame, 110,
_baronTalkLoop, frame, frame, 0);
break;
case 2103:
sendWSMessage_10000(1, _baronWalker, _baronTalkLoop, 1, 1, -1,
_baronTalkLoop, 1, 1, 0);
break;
case 2110:
_G(kernel).call_daemon_every_loop = true;
_response = series_stream("Baron sport is life", 5, 0, 111);
series_stream_break_on_frame(_response, 3, 111);
_val8 = 2111;
break;
case 2111:
if (!_sound1.empty()) {
digi_play(_sound1.c_str(), 1);
_sound1.clear();
}
_G(kernel).call_daemon_every_loop = false;
_val8 = 2112;
break;
case 2112:
case 2153:
_val8 = 2102;
kernel_timing_trigger(1, 110);
conv_resume();
break;
case 2120:
_G(kernel).call_daemon_every_loop = true;
_response = series_stream("BARON WORLD WAR", 6, 0, 111);
series_stream_break_on_frame(_response, 4, 111);
_val8 = 2121;
break;
case 2121:
if (!_sound1.empty()) {
digi_play(_sound1.c_str(), 1);
_sound1.clear();
}
_val8 = 2122;
_G(kernel).call_daemon_every_loop = false;
break;
case 2122:
kernel_timing_trigger(1, 666);
break;
case 2123:
_val8 = 2152;
kernel_timing_trigger(1, 110);
_val6 = 1103;
kernel_timing_trigger(1, 102);
break;
case 2140:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 1, 11, -1,
_baronLeanForward, 12, 18, 1);
_val8 = 2142;
if (!_sound1.empty()) {
digi_play(_sound1.c_str(), 1, 255, 111);
_sound1.clear();
}
break;
case 2142:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
_baronLeanForward, 11, 11, 0);
_val8 = 2162;
conv_resume();
break;
case 2150:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, -1,
_baronLeanForward, 12, 18, 1);
if (!_sound1.empty()) {
digi_play(_sound1.c_str(), 1, 255, 111);
_sound1.clear();
}
break;
case 2152:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
_baronLeanForward, 1, 1, 0);
_val8 = 2153;
break;
case 2161:
frame = imath_ranged_rand(12, 18);
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, frame, frame, 110,
_baronLeanForward, frame, frame, 0);
break;
case 2162:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 11, 11, 111,
_baronLeanForward, 11, 11, 0);
_val8 = 2162;
break;
case 2163:
terminateMachineAndNull(_ripTalksBaron);
sendWSMessage_10000(1, _baronWalker, _baronTurnWalk, 1, 57, 61,
_baronTurnWalk, 77, 79, 4);
sendWSMessage_1a0000(_baronWalker, 11);
break;
case 2171:
sendWSMessage_10000(1, _baronWalker, _baronLeanForward, 12, 1, 111,
_baronLeanForward, 1, 1, 0);
_val8 = 2102;
break;
default:
break;
}
}
break;
case 666:
_response = series_stream("RIP WAR REACTION", 5, 0, 111);
series_stream_break_on_frame(_response, 4, 667);
_val8 = 2123;
break;
case 667:
series_set_frame_rate(_response, 15);
series_stream_break_on_frame(_response, 10, 668);
break;
case 668:
series_set_frame_rate(_response, 5);
ws_OverrideCrunchTime(_response);
break;
default:
break;
}
}
void Room405::pre_parser() {
const bool takeFlag = player_said("take");
const bool lookFlag = player_said_any("look", "look at");
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
if (player_said("DOOR") && (lookFlag || useFlag || takeFlag)) {
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
if (player_said("journal") && !takeFlag && !lookFlag && _G(kernel).trigger == -1) {
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
}
void Room405::parser() {
const bool lookFlag = player_said_any("look", "look at");
const bool talkFlag = player_said_any("talk", "talk to");
const bool takeFlag = player_said("take");
const bool enterFlag = player_said("enter");
const bool useFlag = player_said_any("push", "pull", "gear", "open", "close");
if (player_said("conv405a")) {
if (_G(kernel).trigger == 1)
conv405a1();
else
conv405a();
} else if (talkFlag && player_said("baron")) {
player_set_commands_allowed(false);
_val4 = -1;
_val5 = 1000;
_val6 = 1100;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 102);
_G(kernel).trigger_mode = KT_PARSE;
} else if (enterFlag) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
disable_player_commands_and_fade_init(1);
break;
case 1:
midi_stop();
digi_stop(3);
_G(game).setRoom(404);
break;
default:
break;
}
} else if (lookFlag && player_said("DOOR") && lookDoor()) {
// No implementation
} else if (useFlag && player_said("DOOR") && useDoor()) {
// No implementation
} else if (takeFlag && player_said("DOOR") && takeDoor()) {
// No implementation
} else if (lookFlag && _G(walker).ripley_said(SAID)) {
// No implementation
} else if ((lookFlag && player_said("LIBRARY TABLE")) ||
(lookFlag && player_said("JOURNAL "))) {
if (_val9) {
doAction("405r14");
} else {
switch (_G(kernel).trigger) {
case -1:
digi_play("405r14", 1, 255, 1);
break;
case 1:
digi_play("405r14a", 1);
_val9 = 1;
break;
default:
break;
}
}
} else if (lookFlag && player_said("SOFA")) {
if (!_G(flags)[kGermanBanknoteFound] && inv_object_is_here("GERMAN BANKNOTE")) {
_G(flags)[kGermanBanknoteFound] = 1;
doAction("405r15");
hotspot_set_active("GERMAN BANKNOTE", true);
} else {
doAction("405r12");
}
} else if (lookFlag && player_said("GERMAN BANKNOTE") && inv_object_is_here("GERMAN BANKNOTE")) {
doAction("405r17");
} else if (lookFlag && player_said(" ")) {
doAction("405r04");
} else if (takeFlag && player_said("ZEBRA SKIN")) {
doAction("405r18");
} else if (takeFlag && player_said("DEER HEAD")) {
doAction("405r19");
} else if (takeFlag && player_said("BATTLE AXE")) {
doAction("405r20");
} else if (takeFlag && player_said("SHIELD")) {
doAction("405r20");
} else if (takeFlag && player_said("BOOKSHELF")) {
doAction("405r21");
} else if (takeFlag && player_said("SOFA")) {
doAction("405r22");
} else if (takeFlag && player_said("CHAIR")) {
doAction("405r22");
} else if (takeFlag && player_said("JOURNAL ")) {
doAction("405r23");
} else if (takeFlag && player_said("GERMAN BANKNOTE") && takeBanknote()) {
// No implementation
} else if (player_said("journal") && !takeFlag && !lookFlag && !inv_player_has(_G(player).noun)) {
if (_G(flags)[kCastleCartoon]) {
digi_play("com016", 1);
} else {
if (_G(kernel).trigger == 6)
_G(flags)[kCastleCartoon] = 1;
sketchInJournal("com015");
}
} else {
return;
}
_G(player).command_ready = false;
}
void Room405::conv405a() {
const int who = conv_whos_talking();
_currentNode = conv_current_node();
const int entry = conv_current_entry();
const char *sound = conv_sound_to_play();
if (sound) {
if (who <= 0) {
switch (_currentNode) {
case 2:
if (entry == 0) {
_val8 = 2110;
_sound1 = sound;
} else {
_val8 = 2101;
digi_play(sound, 1, 255, 1);
}
break;
case 4:
if (entry == 1) {
_val8 = 2140;
_sound1 = sound;
} else if (entry == 2) {
_val8 = 2120;
_sound1 = sound;
} else {
_val8 = 2101;
digi_play(sound, 1, 255, 1);
}
break;
case 14:
if (entry == 4) {
_val8 = 2140;
_sound1 = sound;
} else {
_val8 = 2101;
digi_play(sound, 1, 255, 1);
}
break;
default:
_val8 = 2101;
digi_play(sound, 1, 255, 1);
break;
}
} else if (who == 1) {
switch (_currentNode) {
case 1:
if (entry == 3) {
_val6 = 2110;
_sound2 = sound;
} else {
_val6 = 1102;
digi_play(sound, 1, 255, 1);
}
break;
case 8:
if (entry == 2) {
_val6 = 1220;
_sound2 = sound;
} else {
_val6 = 1102;
digi_play(sound, 1, 255, 1);
}
break;
case 14:
if (entry == 1) {
_val6 = 1230;
_sound2 = sound;
} else {
if (entry == 5)
_val8 = 2171;
_val6 = 1102;
digi_play(sound, 1, 255, 1);
}
break;
default:
_val6 = 1102;
digi_play(sound, 1, 255, 1);
break;
}
}
} else {
conv_resume();
}
}
void Room405::conv405a1() {
const int who = conv_whos_talking();
if (who <= 0)
_val8 = 2102;
else if (who == 1)
_val6 = 1103;
conv_resume();
}
bool Room405::lookDoor() {
switch (_G(kernel).trigger) {
case -1:
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
return true;
case 2:
digi_play("405r30", 1);
return true;
default:
break;
}
return false;
}
bool Room405::useDoor() {
switch (_G(kernel).trigger) {
case -1:
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
return true;
case 2:
digi_play("405r31", 1);
return true;
default:
break;
}
return false;
}
bool Room405::takeDoor() {
if (_G(kernel).trigger == 1) {
ws_walk(_G(my_walker), 245, 367, nullptr, 2, 9);
return true;
}
return false;
}
bool Room405::takeBanknote() {
switch (_G(kernel).trigger) {
case -1:
if (inv_object_is_here("GERMAN BANKNOTE")) {
player_set_commands_allowed(false);
_lowReacher = series_load("RIP TREK LOW REACHER POS1");
setGlobals1(_lowReacher, 1, 16, 16, 16, 0, 16, 1, 1, 1);
sendWSMessage_110000(1);
return true;
}
break;
case 1:
kernel_examine_inventory_object("PING GERMAN BANKNOTE", _G(master_palette),
5, 1, 265, 270, 2, "405r24", -1);
return true;
case 2:
terminateMachineAndNull(_bankNote);
inv_give_to_player("GERMAN BANKNOTE");
sendWSMessage_120000(3);
return true;
case 3:
hotspot_set_active("GERMAN BANKNOTE", false);
sendWSMessage_150000(4);
return true;
case 4:
series_unload(_lowReacher);
player_set_commands_allowed(true);
return true;
default:
break;
}
return false;
}
void Room405::doAction(const char *name) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
digi_play(name, 1, 255, 1);
break;
case 1:
player_set_commands_allowed(true);
break;
default:
break;
}
}
} // namespace Rooms
} // namespace Riddle
} // namespace M4