Files
scummvm-cursorfix/engines/m4/riddle/rooms/section2/room204.cpp
2026-02-02 04:50:13 +01:00

2953 lines
77 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/section2/room204.h"
#include "m4/riddle/rooms/section2/section2.h"
#include "m4/graphics/gr_series.h"
#include "m4/gui/gui_vmng.h"
#include "m4/gui/gui_vmng_screen.h"
#include "m4/riddle/riddle.h"
#include "m4/riddle/vars.h"
namespace M4 {
namespace Riddle {
namespace Rooms {
const int16 ROOM204_NORMAL_DIRS[] = { 200, -1};
const int16 ROOM204_SHADOW_DIRS[] = { 210, -1};
static const char *ROOM204_NORMAL_NAMES[] = { "priest walker" };
static const char *ROOM204_SHADOW_NAMES[] = { "kuangs shadow 2" };
static const char *const SAID[][2] = {
{"ZHENMU SHOU FIGURINE", "204r27"},
{"BRONZE LANTERN", "204r07"},
{"PAGODA", "204r08"},
{"GIANT URN", "204r09"},
{"ACOLYTE", "204r12"},
{"YOUNG PRIEST", "204r13"},
{"FOO DOG", "204r28"},
{nullptr, nullptr}
};
void Room204::preload() {
_G(player).walker_type = WALKER_ALT;
_G(player).shadow_type = SHADOW_ALT;
LoadWSAssets("OTHER SCRIPT", _G(master_palette));
}
void Room204::init() {
digi_preload("950_s04", -1);
digi_play_loop("950_s04", 3, 70, -1, -1);
if (!_G(flags)[V070])
_G(flags)[V078] = 0;
if (_G(game).previous_room != KERNEL_RESTORING_GAME) {
_meiPresent = false;
_field180 = 0;
_field184 = 0;
_field188 = 0;
if (!player_been_here(205) && (_G(flags)[V056] == 0 || _G(flags)[V049] == 1)) {
_meiPresent = true;
initWalkerSeries();
_G(flags)[V049] = 0;
}
}
_courtyardGongSeries = series_load("COURTYARD GONG", -1, nullptr);
_malletSpriteSeries = series_load("MALLET SPRITE", -1, nullptr);
_ripMachineFlag = false;
_field44_triggerNum = -1;
_field48_triggerNum = -1;
_fieldC4 = -1;
_fieldBC_trigger = -1;
_fieldEC = -1;
_fieldF0 = -1;
_field104 = 0;
_field108 = 0;
if (inv_object_is_here("SILVER BUTTERFLY")) {
_silverButterflyCoinMach = series_place_sprite("SILVER BUTTERFLY COIN", 0, 1280, 0, 100, 3840);
} else {
hotspot_set_active(_G(currentSceneDef).hotspots, "silver butterfly", false);
}
if (inv_object_is_here("GONG")) {
_courtyardGongMach = series_place_sprite("COURTYARD GONG", 0, 0, 0, 100, 2457);
} else {
hotspot_set_active(_G(currentSceneDef).hotspots, "gong", false);
}
if (inv_object_is_here("MALLET")) {
_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
} else {
hotspot_set_active(_G(currentSceneDef).hotspots, "mallet", false);
}
if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
if (player_been_here(205)) {
hotspot_set_active(_G(currentSceneDef).hotspots, "acolyte", false);
_G(camera_reacts_to_player) = false;
} else {
kernel_timing_trigger(1, 578, nullptr);
if (_meiPresent) {
initWalkerSeries();
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, _fieldE0_x, 323, _meiMachineFlag ? 10 : 2, Walker::player_walker_callback, "mc walker room 204");
addMovingMeiHotspot();
if (_fieldE0_x == 472) {
deleteMalletHotspot();
addLookMalletHotspot();
}
kernel_timing_trigger(1, 630, nullptr);
}
}
} else if (_G(game).previous_room == 205) {
player_set_commands_allowed(false);
_G(camera_reacts_to_player) = false;
hotspot_set_active(_G(currentSceneDef).hotspots, "acolyte", false);
ws_demand_location(_G(my_walker), 421, 330);
ws_demand_facing(_G(my_walker), 3);
ws_hide_walker(_G(my_walker));
series_play("204 leap down", 3840, 0, 15, 5, 0, 100, 0, 0, 0, -1);
} else if (keyCheck() && !player_been_here(205)) {
_G(camera_reacts_to_player) = false;
player_set_commands_allowed(false);
ws_demand_location(_G(my_walker), 600, 334);
ws_demand_facing(_G(my_walker), 9);
sendWSMessage_10000(_G(my_walker), 424, 331, 9, 9, true);
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, 620, 340, 9, Walker::player_walker_callback, "mc");
sendWSMessage_10000(_mcMach, 450, 340, 9, -1, true);
kernel_timing_trigger(60, 5, nullptr);
} else {
_meiMachineFlag = false;
_field40 = 0;
player_set_commands_allowed(false);
if (!_G(flags)[V070]) {
digi_preload("204_S02", -1);
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, 1864, 334, 9, Walker::player_walker_callback, "mc walker room 204");
DisposePath(_mcMach->walkPath);
_ripDropsSeries = series_load("RIP DROPS", -1, nullptr);
player_set_commands_allowed(false);
ws_demand_location(_G(my_walker), 1864, 334);
ws_demand_facing(_G(my_walker), 3);
_G(flags)[V070] = 1;
_G(flags)[V068] = 1;
_G(flags)[V078] = 1;
int32 status;
ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
MoveScreenDelta(game_buff_ptr, -1280, 0);
kernel_timing_trigger(1, 500, nullptr);
} else {
_G(flags)[V068] = 1;
if (!_meiPresent) {
ws_demand_location(_G(my_walker), 1864, 334);
ws_demand_facing(_G(my_walker), 9);
int32 status;
ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
MoveScreenDelta(game_buff_ptr, -1280, 0);
kernel_timing_trigger(1, 708, nullptr);
} else if (_G(flags)[V049] == 1) {
_G(flags)[V049] = 0;
_G(flags)[V078] = 2;
ws_demand_location(_G(my_walker), 1864, 334);
ws_demand_facing(_G(my_walker), 9);
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, 1864, 334, 4, Walker::player_walker_callback, "mc walker room 204");
kernel_timing_trigger(1, 536, nullptr);
int32 status;
ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
MoveScreenDelta(game_buff_ptr, -1280, 0);
} else {
ws_demand_location(_G(my_walker), 1864, 334);
ws_demand_facing(_G(my_walker), 9);
int32 status;
ScreenContext *game_buff_ptr = vmng_screen_find(_G(gameDrawBuff), &status);
MoveScreenDelta(game_buff_ptr, -1280, 0);
kernel_timing_trigger(1, 708, nullptr);
switch (imath_ranged_rand(1, 4)) {
case 1:
_fieldE4_walkerDestX = 1663;
break;
case 2:
_fieldE4_walkerDestX = 1576;
break;
case 3:
_fieldE4_walkerDestX = 1494;
break;
case 4:
_fieldE4_walkerDestX = 1412;
break;
default:
break;
}
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, _fieldE4_walkerDestX, 323, 2, Walker::player_walker_callback, "mc walker room 204");
addMovingMeiHotspot();
kernel_timing_trigger(1, 630, nullptr);
kernel_timing_trigger(1, 578, nullptr);
}
}
}
}
void Room204::pre_parser() {
if (player_said("enter", "PAGODA") || player_said("walk to", "PAGODA") || player_said("walk to", "stairs")) {
if (player_been_here(205)) {
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
}
if (player_been_here(205) && inv_object_is_here("GONG")) {
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
}
void Room204::parser() {
const bool lookFl = player_said_any("look", "look at");
const bool takeFl = player_said("take");
const bool talkFl = player_said_any("talk", "talk to");
const bool gearFl = player_said("gear");
bool moveAndLookFl = false;
if (player_said("conv204a")) {
conv204a();
goto done;
}
if (_G(kernel).trigger == 747) {
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 606, nullptr);
goto done;
}
if (player_been_here(205) && lookFl && player_said_any("FOO DOG", "PAGODA", "BRONZE LANTERN", "CONFUCIAN ANALECTS", "CONFUCIAN ANALECTS ", "TABLETS OF HISTORY", "LAO-TZU TABLETS")) {
digi_play("204R62", 1, 255, -1, -1);
goto done;
}
if (!player_been_here(205)) {
if (inv_player_has("MALLET") && !_field40 && !_field16C
&& !(player_said("MALLET") && player_said_any("GONG", "ACOLYTE")) && !(lookFl && player_said("MALLET"))
&& !(takeFl && player_said("GONG")) && !(lookFl && player_said("MEI CHEN"))&& !(gearFl && player_said("MALLET"))) {
_field124 = 2;
player_update_info(_G(my_walker), &_G(player_info));
_field40 = 1;
player_set_commands_allowed(false);
_field34_x = _G(player_info).x;
_field38_y = _G(player_info).y;
_field3C_facing = _G(player_info).facing;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 647, nullptr);
goto done;
}
if (lookFl && player_said("SHIH CHI TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x > 1500) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 1663;
moveAndLookFl = true;
}
}
if (lookFl && player_said("SHIH CHING TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x > 1400) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 1494;
moveAndLookFl = true;
}
}
if (lookFl && player_said("CONFUCIAN ANALECTS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x > 1280) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 1412;
moveAndLookFl = true;
}
}
if (lookFl && player_said("CONFUCIAN ANALECTS ") && !_meiPresent) {
digi_play("204R52", 1, 255, -1, -1);
goto done;
}
if (lookFl && player_said("CONFUCIAN ANALECTS ")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
_field108 = 1;
kernel_timing_trigger(5, 1, nullptr);
break;
case 1:
ws_get_walker_info(_mcMach, &_fieldFC_infoX, &_field100_infoY, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
if (_fieldFC_infoX == _fieldE4_walkerDestX) {
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(555, 323, 463, 359, 317, 367, -1);
ws_custom_walk(_mcMach, 9, 2, 1);
} else {
kernel_timing_trigger(60, 1);
}
break;
case 2:
_meiTalksPos3Series = series_load("MEI TALKS POS3", -1, nullptr);
setGlobals1(_meiTalksPos3Series, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_mcMach, 3);
if (_field180 != 99999 && _field180) {
digi_play("204M13", 1, 255, 3, -1);
} else {
digi_play("204M06", 1, 255, 3, -1);
_field180 = 99999;
}
break;
case 3:
if (_G(204_dword1A1898) >= 1) {
_G(204_dword1A1898) = 0;
sendWSMessage_150000(_mcMach, 4);
} else {
++_G(204_dword1A1898);
}
break;
case 4:
series_unload(_meiTalksPos3Series);
DisposePath(_mcMach->walkPath);
_meiMachineFlag = true;
_fieldE4_walkerDestX = 555;
_mcMach->walkPath = CreateCustomPath(463, 359, 555, 323, -1);
ws_custom_walk(_mcMach, 10, 5, true);
break;
case 5:
_field108 = 0;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 630, nullptr);
_fieldE0_x = 555;
deleteMeiCheiHotspot();
addMovingMeiHotspot();
player_set_commands_allowed(true);
break;
default:
break;
}
goto done;
} // if (lookFl && player_said("CONFUCIAN ANALECTS "))
if (lookFl && player_said("TAO-TE CHING TABLETS")) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 1328;
moveAndLookFl = true;
}
if (lookFl && player_said("SHIH CHI TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x < 1300) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 1245;
moveAndLookFl = true;
}
}
if (lookFl && player_said("LAO-TZU TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x > 700) {
_meiMachineFlag = false;
_fieldE4_walkerDestX = 800;
moveAndLookFl = true;
}
}
if (lookFl && player_said("SHANG TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x < 900) {
_meiMachineFlag = true;
_fieldE4_walkerDestX = 717;
moveAndLookFl = true;
}
}
if (lookFl && player_said("TABLETS OF HISTORY")) {
_meiMachineFlag = true;
_fieldE4_walkerDestX = 670;
moveAndLookFl = true;
}
if (lookFl && player_said("CONFUCIAN ANALECTS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x < 1280) {
_meiMachineFlag = true;
_fieldE4_walkerDestX = 555;
moveAndLookFl = true;
}
}
if (lookFl && player_said("LAO-TZU TABLETS")) {
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x < 640) {
_meiMachineFlag = true;
_fieldE4_walkerDestX = 472;
moveAndLookFl = true;
}
}
if (moveAndLookFl) {
if (!_meiPresent)
digi_play("204R52", 1, 255, -1, -1);
else {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
_field104 = 1;
kernel_timing_trigger(1, 1, nullptr);
break;
case 1:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
_fieldE0_x = 0;
_G(kernel).trigger_mode = KT_DAEMON;
ws_custom_walk(_mcMach, _meiMachineFlag ? 10 : 2, 632, true);
_G(kernel).trigger_mode = KT_PARSE;
kernel_timing_trigger(5, 2, nullptr);
break;
case 2:
if (_fieldE0_x == _fieldE4_walkerDestX)
kernel_timing_trigger(30, 5, nullptr);
else
kernel_timing_trigger(1, 2, nullptr);
break;
case 5:
_meiReadsTabletsSeries = series_load("MEI READS TABLETS", -1, nullptr);
setGlobals1(_meiReadsTabletsSeries, 1, 15, 15, 15, 0, 16, 29, 29, 16, 2, 15, 1, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_mcMach, 6);
break;
case 6:
sendWSMessage_120000(_mcMach, -1);
switch (_fieldE4_walkerDestX) {
case 472:
if (_field184 != 472 && _field184) {
digi_play("204M11", 1, 255, 7, -1);
} else {
digi_play("204M04", 1, 255, 7, -1);
_field184 = 472;
}
deleteMalletHotspot();
addLookMalletHotspot();
break;
case 555:
if (_field180 != 555 && _field180) {
digi_play("204M13", 1, 255, 7, -1);
} else {
digi_play("204M06", 1, 255, 7, -1);
_field180 = 555;
}
break;
case 670:
digi_play("204M10", 1, 255, 7, -1);
break;
case 717:
digi_play("204M05", 1, 255, 7, -1);
break;
case 800:
if (_field184 != 800 && _field184) {
digi_play("204M11", 1, 255, 7, -1);
} else {
digi_play("204M04", 1, 255, 7, -1);
_field184 = 800;
}
break;
case 1245:
if (_field188 != 1245 && _field188) {
digi_play("204M15", 1, 255, 7, -1);
} else {
digi_play("204M09", 1, 255, 7, -1);
_field188 = 1245;
}
break;
case 1328:
if (_field184 != 1328 && _field184) {
digi_play("204M14", 1, 255, 7, -1);
} else {
digi_play("204M04", 1, 255, 7, -1);
_field184 = 1328;
}
break;
case 1412:
if (_field180 != 1412 && _field180) {
digi_play("204M13", 1, 255, 7, -1);
} else {
digi_play("204M06", 1, 255, 7, -1);
_field180 = 1412;
}
break;
case 1494:
digi_play("204M07", 1, 255, 7, -1);
break;
case 1576:
digi_play("204M08", 1, 255, 7, -1);
break;
case 1663:
if (_field188 != 1663 && _field188) {
digi_play("204M15", 1, 255, 7, -1);
} else {
digi_play("204M09", 1, 255, 7, -1);
_field188 = 1663;
}
break;
default:
break;
}
break;
case 7:
sendWSMessage_130000(_mcMach, 8);
break;
case 8:
sendWSMessage_150000(_mcMach, 9);
break;
case 9:
series_unload(_meiReadsTabletsSeries);
_field104 = 0;
player_set_commands_allowed(true);
break;
default:
break;
}
}
goto done;
} // (moveAndLookFl)
if (player_said("walk through") && _meiPresent) {
if (_G(flags)[V056] == 1) {
player_set_commands_allowed(false);
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(2, 609, nullptr);
} else {
player_set_commands_allowed(false);
_G(kernel).trigger_mode = KT_DAEMON;
ws_walk(_G(my_walker), 1874, 333, nullptr, 710, 3, true);
}
goto done;
}
if (player_said("walk through") && !_meiPresent) {
player_set_commands_allowed(false);
_G(kernel).trigger_mode = KT_DAEMON;
ws_walk(_G(my_walker), 1874, 333, nullptr, 710, 3, true);
goto done;
}
if ((player_said("MALLET", "GONG") || (gearFl && player_said("MALLET"))) && inv_player_has("MALLET")) {
handleRipBangsBong();
goto done;
}
} // if (!player_been_here(205)
if (lookFl && player_said("GONG") && !inv_player_has("GONG")) {
digi_play("204R10", 1, 255, -1, -1);
goto done;
}
if (lookFl && player_said("MALLET") && !inv_player_has("MALLET")) {
digi_play("204R11", 1, 255, -1, -1);
goto done;
}
if (lookFl && _G(walker).ripley_said(SAID)) {
goto done;
}
if (lookFl && player_said("SILVER BUTTERFLY") && inv_object_is_here("SILVER BUTTERFLY")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
kernel_timing_trigger(30, 1, nullptr);
break;
case 1:
if (g_engine->game_camera_panning()) {
kernel_timing_trigger(5, 1, nullptr);
} else {
_ripTrekLowReachPos2Series = series_load("RIP TREK LOW REACH POS2", -1, nullptr);
setGlobals1(_ripTrekLowReachPos2Series, 1, 14, 14, 14, 0, 14, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 2);
}
break;
case 2:
digi_play("204R40", 1, 255, 3, -1);
break;
case 3:
sendWSMessage_120000(_G(my_walker), 4);
break;
case 4:
sendWSMessage_150000(_G(my_walker), 5);
break;
case 5:
series_unload(_ripTrekLowReachPos2Series);
player_set_commands_allowed(true);
break;
default:
break;
}
goto done;
} // lookFl && player_said("SILVER BUTTERFLY") && inv_player_has("SILVER BUTTERFLY")
if (lookFl && player_said("GIANT URN")) {
digi_play("204R09", 1, 255, -1, -1);
goto done;
}
if (player_said("enter", "PAGODA") || player_said("walk to", "PAGODA") || player_said("walk to", "stairs")) {
if (player_been_here(205)) {
_G(kernel).trigger_mode = KT_DAEMON;
ws_walk(_G(my_walker), 424, 331, nullptr, 10, 9, true);
goto done;
}
if (_field128 != 2) {
_field124 = 2;
goto done;
}
} else if (_field128 == 2) {
_field124 = 1;
goto done;
}
if (player_been_here(205)) {
if (takeFl && player_said("GONG")) {
switch (_G(kernel).trigger) {
case -1:
if (inv_object_is_here("GONG")) {
ws_walk(_G(my_walker), 475, 332, nullptr, 1, 11, true);
}
break;
case 1:
player_set_commands_allowed(false);
_ripTrekMedReachHandPos1Series = series_load("RIP TREK MED REACH HAND POS1", -1, nullptr);
setGlobals1(_ripTrekMedReachHandPos1Series, 1, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 2);
break;
case 2:
hotspot_set_active(_G(currentSceneDef).hotspots, "GONG", false);
inv_give_to_player("GONG");
kernel_examine_inventory_object("PING GONG", _G(master_palette), 5, 1, 370, 264, 3, nullptr, -1);
terminateMachine(_courtyardGongMach);
break;
case 3:
sendWSMessage_150000(_G(my_walker), 5);
break;
case 5:
series_unload(_ripTrekMedReachHandPos1Series);
player_set_commands_allowed(true);
break;
default:
break;
}
goto done;
} // if (talkFl && player_said("GONG"))
if (takeFl && player_said("MALLET")) {
switch (_G(kernel).trigger) {
case -1:
if (inv_object_is_here("MALLET")) {
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", false);
inv_give_to_player("MALLET");
kernel_examine_inventory_object("PING MALLET", _G(master_palette), 5, 1, 370, 264, 1, nullptr, -1);
terminateMachine(_courtyardGongMach);
goto done;
}
break;
case 1:
terminateMachine(_malletSpriteMach);
player_set_commands_allowed(true);
goto done;
break;
default:
break;
}
}
} // player_been_here(205)
if (gearFl && player_said("MAILLET")) {
digi_play("COM102", 1, 255, -1, -1);
goto done;
}
if (takeFl && player_said("MALLET") && inv_object_is_here("MALLET")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
kernel_timing_trigger(30, 1, nullptr);
break;
case 1:
if (g_engine->game_camera_panning()) {
kernel_timing_trigger(5, 1);
} else {
ws_walk(_G(my_walker), 510, 325, nullptr, 2, 9, true);
}
break;
case 2:
terminateMachine(_malletSpriteMach);
kernel_examine_inventory_object("PING MALLET", _G(master_palette), 5, 1, 370, 264, 3, nullptr, -1);
break;
case 3:
_G(flags)[V032] = 1;
inv_give_to_player("MALLET");
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", false);
_field16C = 0;
player_set_commands_allowed(true);
break;
default:
break;
}
goto done;
} // takeFl && player_said("MALLET") && inv_object_is_here("MALLET")
if (player_said("MALLET", "ACOLYTE")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
ws_walk(_G(my_walker), 497, 325, nullptr, 1, 9, true);
break;
case 1:
_field124 = 3;
_field12C_triggerNum = kernel_trigger_create(2);
break;
case 2:
kernel_timing_trigger(1, 3, nullptr);
break;
case 3:
ws_walk(_G(my_walker), 510, 325, nullptr, 4, 9, true);
break;
case 4:
_field40 = 0;
player_set_commands_allowed(true);
break;
default:
break;
}
goto done;
} // player_said("MALLET", "ACOLYTE")
if (takeFl && player_said("GONG") && inv_object_is_here("GONG")) {
digi_play("204r26", 1, 255, -1, -1);
goto done;
}
if (takeFl && player_said("SILVER BUTTERFLY")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
if (inv_object_is_here("SILVER BUTTERFLY")) {
player_set_commands_allowed(false);
kernel_timing_trigger(30, 1, nullptr);
goto done;
}
break;
case 1:
if (g_engine->game_camera_panning()) {
kernel_timing_trigger(5, 1);
} else {
g_engine->camera_shift_xy(1280, 0);
_ripTrekLowReachPos2Series = series_load("RIP TREK LOW REACH POS2", -1, nullptr);
setGlobals1(_ripTrekLowReachPos2Series, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 2);
}
goto done;
break;
case 2:
kernel_examine_inventory_object("PING SILVER BUTTERFLY", _G(master_palette), 5, 1, 387, 250, 3, "204R41", -1);
goto done;
break;
case 3:
inv_give_to_player("SILVER BUTTERFLY");
terminateMachine(_silverButterflyCoinMach);
sendWSMessage_120000(_G(my_walker), 4);
goto done;
break;
case 4:
sendWSMessage_150000(_G(my_walker), 5);
goto done;
break;
case 5:
series_unload(_ripTrekLowReachPos2Series);
hotspot_set_active(_G(currentSceneDef).hotspots, "SILVER BUTTERFLY", false);
player_set_commands_allowed(true);
goto done;
break;
default:
break;
}
} // takeFl && player_said("SILVER BUTTERFLY")
if (talkFl && player_said("MEI CHEN")) {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
ws_get_walker_info(_mcMach, &_G(player_info).x, &_G(player_info).y, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
_fieldF8 = _meiMachineFlag ? 10 : 2;
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_G(player_info).x + 1, _G(player_info).y, -1);
ws_custom_walk(_mcMach, 4, 3, true);
break;
case 3:
_ripTrekTwoHandTalkPos2Series = series_load("RIP TREK TWO HAND TALK POS2", -1, nullptr);
setGlobals1(_ripTrekTwoHandTalkPos2Series, 1, 5, 5, 5, 0, 6, 8, 6, 8, 1, 9, 19, 19, 19, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 4);
break;
case 4:
sendWSMessage_120000(_G(my_walker), -1);
switch (imath_ranged_rand(1, 3)) {
case 1:
digi_play("204r17", 1, 255, 5, -1);
break;
case 2:
digi_play("204r18", 1, 255, 5, -1);
break;
default:
digi_play("204r19", 1, 255, 5, -1);
break;
}
break;
case 5:
sendWSMessage_130000(_G(my_walker), 6);
break;
case 6:
sendWSMessage_150000(_G(my_walker), 7);
break;
case 7:
series_unload(_ripTrekTwoHandTalkPos2Series);
_meiTrekTalkerPos4Series = series_load("MEI TREK TALKER POS4", -1, nullptr);
setGlobals1(_meiTrekTalkerPos4Series, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_mcMach, 8);
switch (imath_ranged_rand(1, 3)) {
case 1:
digi_play("204M16", 1, 255, 8, -1);
break;
case 2:
digi_play("204M17", 1, 255, 8, -1);
break;
case 3:
digi_play("204M18", 1, 255, 8, -1);
break;
default:
break;
}
break;
case 8:
if (_G(204_dword1A1898) < 1) {
++_G(204_dword1A1898);
} else {
_G(204_dword1A1898) = 0;
sendWSMessage_150000(_mcMach, 9);
}
break;
case 9:
series_unload(_meiTrekTalkerPos4Series);
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, _fieldD8_facing, 10, true);
break;
case 10:
player_set_commands_allowed(true);
break;
default:
break;
}
} // talkFl && player_said("MEI CHEN")
else if (talkFl && player_said("ACOLYTE"))
digi_play("204R51", 1, 255, -1, -1);
else if (player_said("US DOLLARS", "ACOLYTE") || player_said("US DOLLARS", "YOUNG PRIEST"))
digi_play("204R24", 1, 255, -1, -1);
else if (player_said("CHINESE YUAN", "ACOLYTE") || player_said("CHINESE YUAN", "YOUNG PRIEST"))
digi_play("204R25", 1, 255, -1, -1);
else if (player_said("journal") && !takeFl && !lookFl && !inv_player_has(_G(player).noun)) {
if (_G(flags)[kTabletsCartoon] != 0) {
digi_play("204R15", 1, 255, -1, -1);
} else {
if (_G(kernel).trigger == 6) {
_G(flags)[V089] = 1;
_G(flags)[kTabletsCartoon] = 1;
}
warning("Room204 Parser : sendWSMessage_multi(nullptr)");
}
} else if (lookFl && !inv_player_has(_G(player).noun) && !player_said("MEI CHEN"))
digi_play("204R06", 1, 255, -1, -1);
else
return;
done:
_G(player).command_ready = false;
}
void Room204::daemon() {
switch (_G(kernel).trigger) {
case 5:
digi_play("204r47", 1, 255, -1, -1);
break;
case 9:
player_set_commands_allowed(false);
ws_hide_walker(_G(my_walker));
series_play("204rp99", 3840, 0, 11, 5, 0, 100, 0, 0, 0, -1);
kernel_timing_trigger(130, 11, nullptr);
break;
case 10:
player_set_commands_allowed(false);
ws_hide_walker(_G(my_walker));
series_play("204up", 3840, 16, 11, 5, 0, 100, 0, 0, 0, -1);
kernel_timing_trigger(90, 11, nullptr);
break;
case 11:
pal_fade_init(_G(master_palette), 21, 255, 0, 15, 12);
break;
case 12:
interface_show();
_G(game).setRoom(205);
break;
case 15:
ws_unhide_walker(_G(my_walker));
sendWSMessage_10000(_G(my_walker), 440, 330, 3, 50, true);
break;
case 50:
player_set_commands_allowed(true);
break;
case 500:
player_set_commands_allowed(false);
kernel_timing_trigger(1, 501, nullptr);
break;
case 501:
_ripDeltaMachineStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, _G(player_info).depth, false, triggerMachineByHashCallback, "Rip Delta Machine State");
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripDropsSeries, 1, 2, 502, _ripDropsSeries, 2, 2, 0);
break;
case 502:
digi_play("204_s02", 1, 255, -1, -1);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripDropsSeries, 3, 40, 503, _ripDropsSeries, 40, 40, 0);
break;
case 503:
digi_unload("204_s02");
terminateMachine(_ripDeltaMachineStateMach);
_ripDeltaMachineStateMach = nullptr;
series_unload(_ripDropsSeries);
ws_demand_location(_G(my_walker), 1750, 328);
ws_demand_facing(_G(my_walker), 5);
_ripTrekHeadTurnPos5Series = series_load("RIP TREK HEAD TURN POS5", -1, nullptr);
setGlobals1(_ripTrekHeadTurnPos5Series, 1, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 504);
break;
case 504:
sendWSMessage_140000(_G(my_walker), 505);
break;
case 505:
setGlobals1(_ripTrekHeadTurnPos5Series, 8, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 506);
break;
case 506:
sendWSMessage_140000(_G(my_walker), 507);
break;
case 507:
series_unload(_ripTrekHeadTurnPos5Series);
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1770, 337, -1);
ws_custom_walk(_mcMach, 10, 509, true);
break;
case 509:
ws_walk(_G(my_walker), 1751, 329, nullptr, 512, 4, true);
break;
case 512:
digi_preload("204R03", -1);
_ripTrekLHandTalkPos4Series = series_load("RIP TREK L HAND TALK POS4", -1, nullptr);
setGlobals1(_ripTrekLHandTalkPos4Series, 1, 5, 5, 5, 0, 6, 9, 6, 9, 1, 10, 17, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 513);
break;
case 513:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_190000(_G(my_walker), 20);
digi_play("204r01", 1, 255, 515, -1);
break;
case 515:
sendWSMessage_130000(_G(my_walker), 516);
break;
case 516:
sendWSMessage_150000(_G(my_walker), 517);
break;
case 517:
series_unload(_ripTrekLHandTalkPos4Series);
_meiShould = 3;
_meiMachineFlag = true;
_field108 = 1;
kernel_timing_trigger(1, 574, nullptr);
kernel_timing_trigger(2, 518, nullptr);
break;
case 518:
_meiShould = 3;
_fieldBC_trigger = kernel_trigger_create(520);
break;
case 520:
_meiShould = 6;
_fieldC0_trigger = kernel_trigger_create(521);
break;
case 521:
digi_play("204m01", 1, 255, 522, -1);
break;
case 522:
_meiShould = 3;
_fieldBC_trigger = kernel_trigger_create(523);
break;
case 523:
_ripTrekLHandTalkPos4Series = series_load("RIP TREK L HAND TALK POS4", -1, nullptr);
setGlobals1(_ripTrekLHandTalkPos4Series, 1, 5, 5, 5, 0, 6, 9, 6, 9, 1, 10, 17, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 524);
break;
case 524:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_190000(_G(my_walker), 20);
digi_play("204r02", 1, 255, 525, -1);
break;
case 525:
sendWSMessage_130000(_G(my_walker), 526);
break;
case 526:
sendWSMessage_150000(_G(my_walker), 527);
break;
case 527:
series_unload(_ripTrekLHandTalkPos4Series);
_meiShowsRipHerPassesSeries = series_load("MEI SHOWS RIP HER PASSES", -1, nullptr);
_meiShould = 7;
_fieldCC_trigger = kernel_trigger_create(528);
break;
case 528:
digi_play("204m02", 1, 255, -1, -1);
kernel_examine_inventory_object("PING PASS", _G(master_palette), 5, 1, 370, 234, -1, nullptr, -1);
_meiShould = 3;
_fieldBC_trigger = kernel_trigger_create(529);
break;
case 529:
_ripTrekLHandTalkPos4Series = series_load("RIP TREK L HAND TALK POS4", -1, nullptr);
setGlobals1(_ripTrekLHandTalkPos4Series, 1, 5, 5, 5, 0, 6, 9, 6, 9, 1, 10, 17, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 530);
break;
case 530:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_190000(_G(my_walker), 20);
digi_play("204r03", 1, 255, 531, -1);
break;
case 531:
digi_unload("204R03");
sendWSMessage_130000(_G(my_walker), 532);
break;
case 532:
sendWSMessage_150000(_G(my_walker), 533);
break;
case 533:
series_unload(_ripTrekLHandTalkPos4Series);
inv_give_to_player("PASS");
_meiShould = 3;
_fieldBC_trigger = kernel_trigger_create(535);
break;
case 535:
_fieldD8_facing = 1;
_field2C = 1;
kernel_timing_trigger(5, 567, nullptr);
break;
case 536:
ws_walk(_G(my_walker), 1612, 328, nullptr, 538, 4, true);
kernel_timing_trigger(240, 537, nullptr);
break;
case 537:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1642, 333, -1);
ws_custom_walk(_mcMach, 10, -1, true);
break;
case 538:
ws_get_walker_info(_mcMach, &_fieldFC_infoX, &_field100_infoY, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
kernel_timing_trigger(1, (_fieldFC_infoX == 1642) ? 539 : 538, nullptr);
break;
case 539:
_ripTrekLHandTalkPos4Series = series_load("RIP TREK L HAND TALK POS4", -1, nullptr);
setGlobals1(_ripTrekLHandTalkPos4Series, 1, 5, 5, 5, 0, 6, 9, 6, 9, 1, 10, 17, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 540);
break;
case 540:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_190000(_G(my_walker), 20);
digi_play("204R34", 1, 255, 541, -1);
break;
case 541:
sendWSMessage_130000(_G(my_walker), 542);
break;
case 542:
sendWSMessage_150000(_G(my_walker), 543);
break;
case 543:
digi_play("204M20", 1, 255, 544, -1);
break;
case 544:
setGlobals1(_ripTrekLHandTalkPos4Series, 1, 5, 5, 5, 0, 6, 9, 6, 9, 1, 10, 17, 1, 1, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 545);
break;
case 545:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_190000(_G(my_walker), 20);
digi_play("204R35", 1, 255, 546, -1);
break;
case 546:
digi_play("204R36", 1, 255, 547, -1);
break;
case 547:
sendWSMessage_130000(_G(my_walker), 548);
break;
case 548:
sendWSMessage_150000(_G(my_walker), 549);
break;
case 549:
digi_play("204M21", 1, 255, 550, -1);
break;
case 550:
kernel_timing_trigger(60, 551, nullptr);
break;
case 551:
_fieldE4_walkerDestX = 1663;
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, 2, 555, true);
break;
case 555:
kernel_timing_trigger(1, 630, nullptr);
kernel_timing_trigger(1, 578, nullptr);
player_set_commands_allowed(true);
break;
case 556:
player_set_commands_allowed(false);
ws_walk(_G(my_walker), 1612, 328, nullptr, 558, 9, true);
kernel_timing_trigger(140, 557);
break;
case 557:
_fieldE4_walkerDestX = 1663;
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1770, 330, _fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, 2, -1, true);
break;
case 558:
ws_get_walker_info(_mcMach, &_fieldFC_infoX, &_field100_infoY, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
kernel_timing_trigger(1, (_fieldFC_infoX == _fieldE4_walkerDestX) ? 559 : 558, nullptr);
break;
case 559:
kernel_timing_trigger(60, 630, nullptr);
kernel_timing_trigger(1, 578, nullptr);
player_set_commands_allowed(true);
break;
case 567:
if (_mcMach) {
_fieldE4_walkerDestX = 1663;
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1720, 337, -1);
ws_custom_walk(_mcMach, 9, 583, true);
series_unload(_meiShowsRipHerPassesSeries);
} else {
kernel_timing_trigger(5, 567, nullptr);
}
break;
case 569:
_ripleyMode = 1;
_field2C = 0;
player_update_info(_G(my_walker), &_G(player_info));
ws_hide_walker(_G(my_walker));
_ripDeltaMachineStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, _G(player_info).depth, _ripMachineFlag, triggerMachineByHashCallback, "Rip Absolute Machine State");
switch (_ripleyShould) {
case 8:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 1, 1, 571, _ripBangsBongSeries, 1, 1, 0);
_safariShadow3Mach = series_place_sprite("SAFARI SHADOW 3", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840);
_ripleyMode = 8;
break;
case 11:
_ripTrekLowReachPos2Series = series_load("RIP TREK LOW REACH POS2", -1, nullptr);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 1, 1, 571, _ripTrekLowReachPos2Series, 1, 1, 0);
_safariShadow3Mach = series_place_sprite("SAFARI SHADOW 2", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840);
_ripleyMode = 11;
break;
case 16:
_ripTrekTalkerPos3Series = series_load("RIP TREK TALKER POS3", -1, nullptr);
_safariShadow3Mach = series_place_sprite("SAFARI SHADOW 3", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTalkerPos3Series, 1, 1, 571, _ripTrekTalkerPos3Series, 1, 1, 0);
_ripleyMode = 16;
break;
default:
break;
}
break;
case 570:
_ripleyMode = 1;
_field2C = 0;
_field24_triggerNum = -1;
player_update_info(_G(my_walker), &_G(player_info));
ws_hide_walker(_G(my_walker));
_ripDeltaMachineStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, _G(player_info).depth, false, triggerMachineByHashCallback, "Rip Delta Machine State");
if (_ripleyShould == 8) {
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 1, 1, 571, _ripBangsBongSeries, 1, 1, 0);
_ripleyMode = 8;
}
_safariShadow3Mach = series_place_sprite("SAFARI SHADOW 3", 0, _G(player_info).x, _G(player_info).y, _G(player_info.scale), _G(player_info).depth);
break;
case 571:
if (_ripleyMode == 8 && _ripleyShould == 8 && _field18_triggerNum != -1) {
kernel_trigger_dispatchx(_field18_triggerNum);
_field18_triggerNum = -1;
}
if (_ripleyMode == 9 && _ripleyShould == 9 && _field24_triggerNum != -1) {
kernel_trigger_dispatchx(_field24_triggerNum);
_field24_triggerNum = -1;
}
if (_ripleyMode == 12 && _ripleyShould == 12 && _field44_triggerNum != -1) {
kernel_trigger_dispatchx(_field44_triggerNum);
_field44_triggerNum = -1;
}
if (_ripleyMode == 13 && _ripleyShould == 13 && _field48_triggerNum != -1) {
kernel_trigger_dispatchx(_field48_triggerNum);
_field48_triggerNum = -1;
}
if (_ripleyMode == 11 && _ripleyShould == 11 && _field18_triggerNum != -1) {
kernel_trigger_dispatchx(_field18_triggerNum);
_field18_triggerNum = -1;
}
if (_ripleyMode == 14 && _ripleyShould == 14 && _field28_triggerNum != -1) {
kernel_trigger_dispatchx(_field28_triggerNum);
_field28_triggerNum = -1;
}
if (_ripleyMode == 16 && _ripleyShould == 16 && _field18_triggerNum != -1) {
kernel_trigger_dispatchx(_field18_triggerNum);
_field18_triggerNum = -1;
}
if (_ripleyMode == 21 && _ripleyShould == 21 && _field28_triggerNum != -1) {
kernel_trigger_dispatchx(_field28_triggerNum);
_field28_triggerNum = -1;
}
if (!_field2C)
kernel_timing_trigger(1, 572, nullptr);
else {
terminateMachine(_ripDeltaMachineStateMach);
_ripDeltaMachineStateMach = nullptr;
ws_unhide_walker(_G(my_walker));
terminateMachine(_safariShadow3Mach);
_ripMachineFlag = false;
if (_ripleyMode == 16)
series_unload(_ripTrekTalkerPos3Series);
}
break;
case 572:
switch (_ripleyMode) {
case 8:
switch (_ripleyShould) {
case 8:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 1, 1, 571, _ripBangsBongSeries, 1, 1, 0);
_ripleyMode = 8;
break;
case 9:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 1, 16, 571, _ripBangsBongSeries, 16, 16, 0);
_ripleyMode = 9;
break;
default:
break;
}
break;
case 9:
switch (_ripleyShould) {
case 9:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 16, 16, 571, _ripBangsBongSeries, 16, 16, 0);
break;
case 10:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripBangsBongSeries, 17, 34, 571, _ripBangsBongSeries, 34, 34, 0);
_ripleyMode = 8;
_ripleyShould = 8;
break;
default:
break;
}
break;
case 11:
switch (_ripleyShould) {
case 11:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 1, 1, 571, _ripTrekLowReachPos2Series, 1, 1, 0);
break;
case 12:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 1, 16, 571, _ripTrekLowReachPos2Series, 16, 16, 0);
_ripleyMode = 12;
break;
case 13:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 1, 14, 571, _ripTrekLowReachPos2Series, 14, 14, 0);
_ripleyMode = 13;
break;
case 14:
case 15:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTwoHandTalkPos2Series, 1, 5, 571, _ripTrekTwoHandTalkPos2Series, 5, 5, 0);
_ripleyMode = 14;
break;
default:
break;
}
break;
case 12:
switch (_ripleyShould) {
case 11:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 16, 1, 571, _ripTrekLowReachPos2Series, 1, 1, 0);
_ripleyMode = 11;
break;
case 12:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 16, 16, 571, _ripTrekLowReachPos2Series, 16, 16, 0);
break;
default:
break;
}
break;
case 13:
if (_ripleyShould == 11) {
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 14, 1, 571, _ripTrekLowReachPos2Series, 1, 1, 0);
_ripleyMode = 11;
} else if (_ripleyShould == 13) {
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekLowReachPos2Series, 14, 14, 571, _ripTrekLowReachPos2Series, 14, 14, 0);
}
break;
case 14:
switch (_ripleyShould) {
case 11:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTwoHandTalkPos2Series, 13, 19, 571, _ripTrekTwoHandTalkPos2Series, 19, 19, 0);
_ripleyMode = 11;
break;
case 14:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTwoHandTalkPos2Series, 5, 5, 571, _ripTrekTwoHandTalkPos2Series, 5, 5, 0);
break;
case 15: {
const int32 rnd = imath_ranged_rand(6, 12);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTwoHandTalkPos2Series, rnd, rnd, 571, _ripTrekTwoHandTalkPos2Series, rnd, rnd, 0);
}
break;
default:
break;
}
break;
case 16:
switch (_ripleyShould) {
case 16:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTalkerPos3Series, 1, 1, 571, _ripTrekTalkerPos3Series, 1, 1, 0);
break;
case 18:
_ripleyShould = 16;
_field18_triggerNum = kernel_trigger_create(605);
kernel_timing_trigger(1, 571, nullptr);
break;
case 19: {
const int32 rnd = imath_ranged_rand(1, 5);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTalkerPos3Series, rnd, rnd, 571, _ripTrekTalkerPos3Series, rnd, rnd, 0);
}
break;
case 20:
case 21:
_ripTrekHandTalkPos3Series = series_load("RIP TREK HAND TALK POS3", -1, nullptr);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 1, 7, 571, _ripTrekHandTalkPos3Series, 7, 7, 0);
_ripleyMode = 21;
break;
case 22:
_ripTrekHandTalkPos3Series = series_load("RIP TREK HAND TALK POS3", -1, nullptr);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 1, 7, 571, _ripTrekHandTalkPos3Series, 7, 7, 0);
_ripleyShould = 23;
break;
case 23:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 8, 10, -1, _ripTrekHandTalkPos3Series, 8, 10, 4);
digi_play(conv_sound_to_play(), 1, 255, 571, -1);
_ripleyShould = 24;
break;
case 24:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 9, 16, 571, _ripTrekHandTalkPos3Series, 16, 16, 0);
_ripleyShould = 25;
break;
case 25:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTalkerPos3Series, 1, 1, 571, _ripTrekTalkerPos3Series, 1, 1, 0);
series_unload(_ripTrekHandTalkPos3Series);
_ripleyShould = 16;
conv_resume(conv_get_handle());
break;
default:
break;
}
break;
case 21:
switch (_ripleyShould) {
case 16:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 9, 16, 571, _ripTrekHandTalkPos3Series, 16, 16, 0);
_ripleyMode = 16;
_ripleyShould = 17;
break;
case 17:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekTalkerPos3Series, 1, 1, 571, _ripTrekTalkerPos3Series, 1, 1, 0);
series_unload(_ripTrekHandTalkPos3Series);
_ripleyShould = 16;
_ripleyMode = 16;
break;
case 20: {
const int32 rnd = imath_ranged_rand(8, 10);
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, rnd, rnd, 571, _ripTrekHandTalkPos3Series, rnd, rnd, 0);
}
break;
case 21:
sendWSMessage_10000(1, _ripDeltaMachineStateMach, _ripTrekHandTalkPos3Series, 8, 8, 571, _ripTrekHandTalkPos3Series, 8, 8, 0);
break;
default:
break;
}
break;
default:
break;
}
break;
case 574:
_fieldC0_trigger = -1;
_fieldCC_trigger = -1;
_fieldD8_facing = -1;
_fieldC8_trigger = -1;
_fieldF4 = -1;
ws_get_walker_info(_mcMach, &_field10C_x, &_field110_y, &_field118_scale, &_field11C_depth, &_field114_facing);
if (_field110_y == 323)
_field11C_depth = 3840;
_meiChenOtherStatesMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _field10C_x, _field110_y, _field118_scale, _field11C_depth, _meiMachineFlag, triggerMachineByHashCallback, "Mei Chen other states machine");
_safariShadow2Mach = series_place_sprite("SAFARI SHADOW 2", 0, _field10C_x, _field110_y, _field118_scale, 3840);
switch (_meiShould) {
case 3:
_meiTrekRtHandOutPos2Series = series_load("MEI TREK RT HAND OUT POS2", -1, nullptr);
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
_meiMode = 3;
break;
case 4:
_meiTalksPos3Series = series_load("MEI TALKS POS3", -1, nullptr);
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, 1, 1, 576, _meiTalksPos3Series, 1, 1, 0);
_meiMode = 4;
break;
case 5:
_meiTrekTalkerPos4Series = series_load("MEI TREK TALKER POS4", -1, nullptr);
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, 1, 1, 576, _meiTrekTalkerPos4Series, 1, 1, 0);
_meiMode = 5;
break;
default:
break;
}
if (_field108 == 1)
killMcMach();
if (_field108 == 0)
ws_hide_walker(_mcMach);
break;
case 576:
if (_meiMode == 3 && _meiShould == 3 && _fieldBC_trigger != -1) {
kernel_trigger_dispatchx(_fieldBC_trigger);
_fieldBC_trigger = -1;
}
if (_meiMode == 4 && _meiShould == 4 && _fieldBC_trigger != -1) {
kernel_trigger_dispatchx(_fieldBC_trigger);
_fieldBC_trigger = -1;
}
if (_meiMode == 5 && _meiShould == 5 && _fieldBC_trigger != -1) {
kernel_trigger_dispatchx(_fieldBC_trigger);
_fieldBC_trigger = -1;
}
if (_meiMode == 6 && _meiShould == 6 && _fieldC0_trigger != -1) {
kernel_trigger_dispatchx(_fieldC0_trigger);
_fieldC0_trigger = -1;
}
if (_meiMode == 7 && _meiShould == 7 && _fieldCC_trigger != -1) {
kernel_trigger_dispatchx(_fieldCC_trigger);
_fieldCC_trigger = -1;
}
if (_fieldD8_facing != 1) {
kernel_timing_trigger(1, 577, nullptr);
break;
}
if (!_field108) {
ws_unhide_walker(_mcMach);
} else {
switch (_meiMode) {
case 3:
_field114_facing = _meiMachineFlag ? 10 : 2;
break;
case 4:
_field114_facing = _meiMachineFlag ? 9 : 3;
break;
case 5:
_field114_facing = _meiMachineFlag ? 8 : 4;
break;
default:
break;
}
ws_walk_load_walker_series(S2_MEI_NORMAL_DIRS, S8_SHADOW_NAMES2, false);
ws_walk_load_walker_series(S2_MEI_SHADOW_DIRS, S8_SHADOW_NAMES1, false);
_mcMach = triggerMachineByHash_3000(8, 4, *S2_MEI_NORMAL_DIRS, *S2_MEI_SHADOW_DIRS, _field10C_x, _field110_y, _field114_facing, Walker::player_walker_callback, "mc");
kernel_timing_trigger(60, 630, nullptr);
if (_fieldC8_trigger != -1) {
kernel_trigger_dispatchx(_fieldC8_trigger);
_fieldC8_trigger = -1;
}
}
terminateMachine(_meiChenOtherStatesMach);
_meiChenOtherStatesMach = nullptr;
_meiMachineFlag = false;
terminateMachine(_safariShadow2Mach);
switch (_meiMode) {
case 3:
series_unload(_meiTrekRtHandOutPos2Series);
break;
case 4:
series_unload(_meiTalksPos3Series);
break;
case 5:
series_unload(_meiTrekTalkerPos4Series);
break;
default:
break;
}
_field108 = 0;
break;
case 577:
switch (_meiMode) {
case 3:
switch (_meiShould) {
case 3:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
break;
case 6:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 1, 10, 576, _meiTrekRtHandOutPos2Series, 10, 10, 0);
_meiMode = 6;
break;
case 7:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 1, 6, 576, _meiShowsRipHerPassesSeries, 6, 6, 0);
_meiMode = 7;
break;
default:
break;
}
break;
case 4:
switch (_meiShould) {
case 4:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, 1, 1, 576, _meiTalksPos3Series, 1, 1, 0);
break;
case 17: {
const int32 rnd = imath_ranged_rand(1, 4);
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTalksPos3Series, rnd, rnd, 576, _meiTalksPos3Series, rnd, rnd, 0);
}
break;
default:
break;
}
break;
case 5:
switch (_meiShould) {
case 5:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, 1, 1, 576, _meiTrekTalkerPos4Series, 1, 1, 0);
break;
case 13: {
const int32 rnd = imath_ranged_rand(1, 4);
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekTalkerPos4Series, rnd, rnd, 576, _meiTrekTalkerPos4Series, rnd, rnd, 0);
}
break;
default:
break;
}
break;
case 6:
switch (_meiShould) {
case 3:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 10, 1, 576, _meiTrekRtHandOutPos2Series, 1, 1, 0);
_meiMode = 3;
break;
case 6:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiTrekRtHandOutPos2Series, 10, 10, 576, _meiTrekRtHandOutPos2Series, 10, 10, 0);
break;
default:
break;
}
break;
case 7:
switch (_meiShould) {
case 7:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 6, 6, 576, _meiShowsRipHerPassesSeries, 6, 6, 0);
// Intentional fallthrough
case 3:
sendWSMessage_10000(1, _meiChenOtherStatesMach, _meiShowsRipHerPassesSeries, 6, 1, 576, _meiShowsRipHerPassesSeries, 1, 1, 0);
_meiMode = 3;
break;
default:
break;
}
break;
default:
break;
}
break;
case 578:
_field128 = 1;
_field124 = 1;
_field12C_triggerNum = -1;
_field130 = 0;
_acolyteGuardingEntranceMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 2048, false, triggerMachineByHashCallback, "Acolyte Guarding Entrance");
_acolyteSaysHaltSeries = series_load("ACOLYTE SAYS HALT", -1, nullptr);
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
_field128 = 1;
break;
case 579:
if (_field124 == 1 && _field128 == 1 && _field12C_triggerNum != -1) {
kernel_trigger_dispatchx(_field12C_triggerNum);
_field12C_triggerNum = -1;
}
if (_field130 == 1) {
terminateMachine(_acolyteGuardingEntranceMach);
_acolyteGuardingEntranceMach = nullptr;
series_unload(_acolyteSaysHaltSeries);
}
kernel_timing_trigger(1, 580, nullptr);
break;
case 580:
switch (_field128) {
case 1:
switch (_field124) {
case 1:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, -1, _acolyteSaysHaltSeries, 1, 1, 0);
kernel_timing_trigger(60, 579, nullptr);
break;
case 2:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 16, 579, _acolyteSaysHaltSeries, 16, 16, 0);
_field128 = 2;
break;
case 3:
ws_hide_walker(_G(my_walker));
_acolyteGrabsMalletSeries = series_load("ACOLYTE GRABS MALLET", -1, nullptr);
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 1, 6, 579, _acolyteGrabsMalletSeries, 6, 6, 0);
_field128 = 3;
_field124 = 4;
break;
default:
break;
}
break;
case 2:
switch (_field124) {
case 1:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 16, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
_field128 = 1;
break;
case 2:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 16, 16, 579, _acolyteSaysHaltSeries, 16, 16, 0);
break;
default:
break;
}
break;
case 3:
switch (_field124) {
case 1:
ws_unhide_walker(_G(my_walker));
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteSaysHaltSeries, 1, 1, 579, _acolyteSaysHaltSeries, 1, 1, 0);
_field128 = 1;
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", true);
_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
inv_move_object("MALLET", 204);
series_unload(_acolyteGrabsMalletSeries);
break;
case 3:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 6, 6, 579, _acolyteGrabsMalletSeries, 6, 6, 0);
break;
case 4:
sendWSMessage_10000(1, _acolyteGuardingEntranceMach, _acolyteGrabsMalletSeries, 7, 43, 579, _acolyteGrabsMalletSeries, 43, 43, 0);
digi_play("204_s01", 1, 255, -1, -1);
_field124 = 1;
break;
default:
break;
}
break;
default:
break;
}
break;
case 581:
if (_fieldE0_x != _fieldE4_walkerDestX) {
_meiShould = 3;
_fieldBC_trigger = kernel_trigger_create(582);
}
break;
case 582:
_fieldD8_facing = 1;
kernel_timing_trigger(1, 583, nullptr);
break;
case 583:
addMovingMeiHotspot();
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, 2, 584, true);
kernel_timing_trigger(1, 630, nullptr);
break;
case 584:
_fieldE0_x = _fieldE4_walkerDestX;
kernel_timing_trigger(1, 578);
player_set_commands_allowed(true);
break;
case 588:
MoveScreenDelta(_G(game_buff_ptr), 0, 0);
ws_walk_load_walker_series(ROOM204_NORMAL_DIRS, ROOM204_NORMAL_NAMES, false);
ws_walk_load_walker_series(ROOM204_SHADOW_DIRS, ROOM204_SHADOW_NAMES, false);
gameSetScale(369, 326, 100, 99);
_priestWalkerMach = triggerMachineByHash_3000(8, 14, *ROOM204_NORMAL_DIRS, *ROOM204_SHADOW_DIRS, 1864, 334, 3, triggerMachineByHashCallback3000, "Priest Walker");
gameSetScale(369, 326, 47, 38);
kernel_timing_trigger(20, 590, nullptr);
break;
case 590:
midi_play("PRIEST", 255, false, -1, 949);
series_stream("PRIEST ENTERS", 7, 0, 592);
break;
case 592:
gameSetScale(369, 326, 100, 99);
ws_demand_location(_priestWalkerMach, 360, 305);
gameSetScale(369, 326, 47, 38);
kernel_timing_trigger(5, 593, nullptr);
break;
case 593:
initPriestWalker();
kernel_timing_trigger(20, 594, nullptr);
break;
case 594:
if (_priestTurningStateMach)
_field13C_triggerNum = kernel_trigger_create(596);
else
kernel_timing_trigger(20, 594, nullptr);
break;
case 596:
_field134 = 1;
_ripleyShould = 16;
_ripMachineFlag = true;
_field18_triggerNum = kernel_trigger_create(597);
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(2, 569, nullptr);
break;
case 597:
_ripleyShould = 18;
player_set_commands_allowed(true);
break;
case 603:
if (_field134 == 1 && _field138 == 1 && _field13C_triggerNum != -1) {
kernel_trigger_dispatchx(_field13C_triggerNum);
_field13C_triggerNum = -1;
}
if (_field140 == 1) {
terminateMachine(_priestTurningStateMach);
_priestTurningStateMach = nullptr;
if (_field144_triggerNum != -1) {
kernel_trigger_dispatchx(_field144_triggerNum);
_field144_triggerNum = -1;
}
}
kernel_timing_trigger(1, 604, nullptr);
break;
case 604:
switch (_field134) {
case 1:
sendWSMessage_10000(1, _priestTurningStateMach, _priestWalkerSeries, 2, 2, 603, _priestWalkerSeries, 2, 2, 0);
break;
case 2: {
const int32 rnd = imath_ranged_rand(1, 2);
sendWSMessage_10000(1, _priestTurningStateMach, _priestWalkerSeries, 1, rnd, 603, _priestWalkerSeries, rnd, rnd, 0);
}
break;
default:
break;
}
break;
case 605:
_checkNode10Fl = false;
_checkNode10NegWhoEntry1Fl = false;
_checkNode11NegWhoEntry0Fl = false;
_G(kernel).trigger_mode = KT_PARSE;
conv_load("conv204a", 10, 10, 747);
conv_export_value(conv_get_handle(), _G(flags)[V071] ? 0 : 1, 0);
conv_play(conv_get_handle());
break;
case 606:
if (_checkNode20Fl) {
player_set_commands_allowed(false);
kernel_timing_trigger(1, 714, nullptr);
_checkNode20Fl = false;
_G(flags)[V056] = 1;
} else if (_checkNode10Fl) {
player_set_commands_allowed(false);
_checkNode10Fl = false;
kernel_timing_trigger(1, 660, nullptr);
} else {
kernel_timing_trigger(1, 607, nullptr);
}
break;
case 607:
_ripleyShould = 16;
_field18_triggerNum = kernel_trigger_create(608);
_field134 = 1;
break;
case 608:
_field2C = 1;
_field140 = 1;
player_set_commands_allowed(true);
break;
case 609:
player_set_commands_allowed(false);
_field108 = 1;
kernel_timing_trigger(5, 611, nullptr);
break;
case 611:
ws_get_walker_info(_mcMach, &_fieldFC_infoX, &_field100_infoY, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
if (_fieldFC_infoX == _fieldE4_walkerDestX) {
ws_walk(_G(my_walker), 1874, 333, nullptr, -1, 3, true);
kernel_timing_trigger(120, 613, nullptr);
} else {
kernel_timing_trigger(60, 611, nullptr);
}
break;
case 612:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX + 1, 324, -1);
ws_custom_walk(_mcMach, 4, 614);
break;
case 613:
player_update_info(_G(my_walker), &_G(player_info));
if (_G(player_info).x < _fieldE4_walkerDestX + 20)
kernel_timing_trigger(15, 613, nullptr);
else
kernel_timing_trigger(1, 612, nullptr);
break;
case 614:
_dword1A189C = 0;
_meiTrekTalkerPos4Series = series_load("MEI TREK TALKER POS4", -1, nullptr);
setGlobals1(_meiTrekTalkerPos4Series, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_mcMach, 615);
digi_play("COM038", 1, 255, 615, -1);
break;
case 615:
if (_dword1A189C >= 1) {
_dword1A189C = 0;
sendWSMessage_150000(_mcMach, 616);
} else {
++_dword1A189C;
}
break;
case 616:
series_unload(_meiTrekTalkerPos4Series);
ws_walk(_G(my_walker), _fieldE4_walkerDestX + 35, 333, nullptr, 619, 10, true);
break;
case 619:
digi_play("204R29", 1, 255, 620, -1);
break;
case 620:
_meiTrekTalkerPos4Series = series_load("MEI TREK TALKER POS4", -1, nullptr);
setGlobals1(_meiTrekTalkerPos4Series, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_mcMach, 621);
digi_play("204M30", 1, 255, 621, -1);
break;
case 621:
if (_dword1A189C < 1) {
++_dword1A189C;
} else {
_dword1A189C = 0;
sendWSMessage_150000(_mcMach, 622);
}
break;
case 622:
series_unload(_meiTrekTalkerPos4Series);
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX + 1, 343, -1);
ws_custom_walk(_mcMach, 4, 623, true);
player_update_info(_G(my_walker), &_G(player_info));
ws_walk(_G(my_walker), _G(player_info).x, _G(player_info).y, nullptr, -1, 4, true);
break;
case 623:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1874, 333, -1);
ws_custom_walk(_mcMach, 3, -1, true);
kernel_timing_trigger(360, 625, nullptr);
break;
case 624:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(1874, 333, -1);
ws_custom_walk(_mcMach, 3, -1, true);
kernel_timing_trigger(240, 625, nullptr);
break;
case 625:
ws_walk(_G(my_walker), 1874, 333, nullptr, 626, 3, true);
break;
case 626:
pal_fade_init(_G(master_palette), 21, 255, 0, 30, 629);
break;
case 629:
case 711:
_G(game).setRoom(203);
break;
case 630:
if (_field108 != 1) {
player_update_info(_mcMach, &_G(player_info));
if (_G(game_buff_ptr)->x1 * -1 >= _G(player_info).x) {
hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
setWalkerDestX();
player_update_info(_mcMach, &_G(player_info));
if ((_G(game_buff_ptr)->x1 * -1) - 30 > _G(player_info).x) {
ws_demand_location(_mcMach, (_G(game_buff_ptr)->x1 * -1) - 30, 323);
}
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, _meiMachineFlag ? 10 : 2, 631, true);
} else if ((_G(game_buff_ptr)->x1 * -1) + 639 <= _G(player_info).x) {
hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false);
setWalkerDestX();
player_update_info(_mcMach, &_G(player_info));
if ((_G(game_buff_ptr)->x1 * -1) + 669 < _G(player_info).x) {
ws_demand_location(_mcMach, (_G(game_buff_ptr)->x1 * -1) + 669, 323);
}
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(_fieldE4_walkerDestX, 323, -1);
ws_custom_walk(_mcMach, _meiMachineFlag ? 10 : 2, 631, true);
}
kernel_timing_trigger(60, 630, nullptr);
}
break;
case 631:
kernel_timing_trigger(1, 632, nullptr);
break;
case 632:
deleteMeiCheiHotspot();
addMovingMeiHotspot();
_fieldE0_x = _fieldE4_walkerDestX;
break;
case 633:
_ripTrekMedReachHandPos1Series = series_load("RIP TREK MED REACH HAND POS1", -1, nullptr);
ws_walk(_G(my_walker), 473, 331, nullptr, 634, 1, true);
break;
case 634:
setGlobals1(_ripTrekMedReachHandPos1Series, 1, 10, 10, 10, 0, 10, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 635);
break;
case 635:
_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
sendWSMessage_120000(_G(my_walker), 636);
inv_move_object("MALLET", 204);
break;
case 636:
sendWSMessage_150000(_G(my_walker), 637);
break;
case 637:
if (_G(flags)[V056] == 1) {
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", true);
player_set_commands_allowed(true);
} else {
series_unload(_ripTrekMedReachHandPos1Series);
ws_walk(_G(my_walker), 468, 338, nullptr, 638, 9, true);
}
break;
case 638:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(555, 323, 473, 331, -1);
ws_custom_walk(_mcMach, 9, 639, true);
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", true);
_field40 = 0;
break;
case 639:
_meiShould = 4;
_meiMachineFlag = true;
_field108 = 1;
kernel_timing_trigger(1, 574, nullptr);
_fieldBC_trigger = kernel_trigger_create(588);
break;
case 647:
digi_play("204R50", 1, 255, -1, -1);
_ripTrekMedReachHandPos1Series = series_load("RIP TREK MED REACH HAND POS1", -1, nullptr);
ws_walk(_G(my_walker), 473, 331, nullptr, 648, 1, true);
break;
case 648:
setGlobals1(_ripTrekMedReachHandPos1Series, 1, 10, 10, 10, 0, 10, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 649);
break;
case 649:
sendWSMessage_150000(_G(my_walker), 650);
break;
case 650:
hotspot_set_active(_G(currentSceneDef).hotspots, "MALLET", true);
_malletSpriteMach = series_place_sprite("MALLET SPRITE", 0, 0, 0, 100, 2304);
inv_move_object("MALLET", 204);
kernel_timing_trigger(5, 651, nullptr);
break;
case 651:
_field2C = 1;
kernel_timing_trigger(1, 652, nullptr);
break;
case 652:
_field40 = 0;
series_unload(_ripTrekMedReachHandPos1Series);
player_set_commands_allowed(true);
_field124 = 1;
player_set_commands_allowed(true);
break;
case 660:
_field134 = 1;
_field13C_triggerNum = kernel_trigger_create(661);
break;
case 661:
_ripleyShould = 16;
_field140 = 1;
_field144_triggerNum = kernel_trigger_create(662);
break;
case 662:
_priestTurnsFrom3To9Series = series_load("PRIEST TURNS FROM 3 TO 9", -1, nullptr);
ws_hide_walker(_priestWalkerMach);
_priestTurningStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 360, 305, 100, 2048, false, triggerMachineByHashCallback, "Priest Turning State Machine");
sendWSMessage_10000(1, _priestTurningStateMach, _priestTurnsFrom3To9Series, 1, 37, 663, _priestTurnsFrom3To9Series, 37, 37, 0);
_field2C = 1;
break;
case 663:
terminateMachine(_priestTurningStateMach);
_priestTurningStateMach = nullptr;
series_unload(_priestTurnsFrom3To9Series);
ws_unhide_walker(_priestWalkerMach);
ws_demand_facing(_priestWalkerMach, 9);
kernel_timing_trigger(2, 664, nullptr);
break;
case 664:
gameSetScale(369, 326, 100, 99);
sendWSMessage_10000(_priestWalkerMach, 289, 305, 9, 665, 1);
gameSetScale(369, 326, 47, 38);
break;
case 665:
digi_play(_checkNode10NegWhoEntry1Fl ? "204M26" : "204M27", 1, 255, 666, -1);
break;
case 666:
_ripleyShould = 20;
digi_play(_checkNode10NegWhoEntry1Fl ? "204R48" : "204R49", 1, 255, 667, -1);
break;
case 667:
_ripleyShould = 21;
_fieldD8_facing = 1;
_fieldC8_trigger = kernel_trigger_create(669);
break;
case 669:
DisposePath(_mcMach->walkPath);
_meiMachineFlag = true;
_fieldE4_walkerDestX = 555;
_mcMach->walkPath = CreateCustomPath(555, 323, -1);
ws_custom_walk(_mcMach, 10, 670, true);
_meiMachineFlag = true;
break;
case 670:
kernel_timing_trigger(1, 630, nullptr);
_meiMachineFlag = true;
_fieldE0_x = 555;
killPriestWalkerMach();
deleteMeiCheiHotspot();
addMovingMeiHotspot();
player_set_commands_allowed(true);
break;
case 675:
player_set_commands_allowed(false);
digi_preload("950_s34", -1);
midi_play("RIPTHEM1", 180, false, -1, 949);
_204pu99Series = series_load("204PU99", -1, nullptr);
_ripSketchingInNotebookPos2Series = series_load("RIP SKETCHING IN NOTEBOOK POS 2", -1, nullptr);
setGlobals1(_ripSketchingInNotebookPos2Series, 1, 17, 17, 17, 0, 18, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sendWSMessage_110000(_G(my_walker), 676);
break;
case 676:
sendWSMessage_120000(_G(my_walker), 677);
digi_play("950_s34", 2, 200, -1, -1);
break;
case 677:
_204pu99Mach = series_place_sprite("204PU99", 0, 0, 0, 100, 0);
kernel_timing_trigger(120, 678, nullptr);
break;
case 678:
terminateMachine(_204pu99Mach);
sendWSMessage_110000(_G(my_walker), 679);
break;
case 679:
sendWSMessage_140000(_G(my_walker), 680);
break;
case 680:
series_unload(_204pu99Series);
series_unload(_ripSketchingInNotebookPos2Series);
digi_unload("950_s34");
kernel_timing_trigger(1, 697, nullptr);
break;
case 681:
_field140 = 1;
_field144_triggerNum = kernel_trigger_create(682);
break;
case 682:
_priestTurnsFrom3To9Series = series_load("PRIEST TURNS FROM 3 TO 9", -1, nullptr);
ws_hide_walker(_priestWalkerMach);
_priestTurningStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 360, 305, 100, 2048, false, triggerMachineByHashCallback, "Priest Turning State Machine");
sendWSMessage_10000(1, _priestTurningStateMach, _priestTurnsFrom3To9Series, 1, 37, 683, _priestTurnsFrom3To9Series, 37, 37, 0);
break;
case 683:
terminateMachine(_priestTurningStateMach);
_priestTurningStateMach = nullptr;
series_unload(_priestTurnsFrom3To9Series);
ws_unhide_walker(_priestWalkerMach);
ws_demand_facing(_priestWalkerMach, 9);
kernel_timing_trigger(1, 684, nullptr);
break;
case 684:
gameSetScale(369, 326, 100, 99);
sendWSMessage_10000(_priestWalkerMach, 289, 305, 9, 687, 1);
gameSetScale(369, 326, 47, 38);
break;
case 687:
_ripleyShould = 16;
_field18_triggerNum = kernel_trigger_create(688);
break;
case 688:
_field2C = 1;
killPriestWalkerMach();
kernel_timing_trigger(5, 689, nullptr);
break;
case 689:
if (_ripDeltaMachineStateMach) {
kernel_timing_trigger(10, 689, nullptr);
} else {
ws_walk(_G(my_walker), 486, 367, nullptr, 691, 4, true);
}
break;
case 691:
_fieldD8_facing = 1;
_fieldC8_trigger = kernel_trigger_create(692);
break;
case 692:
DisposePath(_mcMach->walkPath);
_mcMach->walkPath = CreateCustomPath(526, 360, -1);
ws_custom_walk(_mcMach, 8, 693, true);
break;
case 693:
ws_walk(_G(my_walker), 486, 367, nullptr, 694, 2, true);
break;
case 694:
_meiShould = 5;
_meiMachineFlag = true;
_field108 = 1;
kernel_timing_trigger(1, 574, nullptr);
_fieldBC_trigger = kernel_trigger_create(695);
break;
case 695:
kernel_timing_trigger(1, 725, nullptr);
break;
case 696:
kernel_timing_trigger(1, 675, nullptr);
break;
case 697:
_meiShould = 13;
digi_play("204M03", 1, 255, 699, -1);
break;
case 699:
kernel_timing_trigger(1, 700, nullptr);
break;
case 700:
digi_play("204R04", 1, 255, 701, -1);
break;
case 701:
_fieldD8_facing = 1;
_fieldC8_trigger = kernel_trigger_create(702);
break;
case 702:
DisposePath(_mcMach->walkPath);
_meiMachineFlag = true;
_fieldE4_walkerDestX = 555;
_mcMach->walkPath = CreateCustomPath(555, 323, -1);
ws_custom_walk(_mcMach, 10, 703, true);
break;
case 703:
kernel_timing_trigger(1, 630, nullptr);
midi_fade_volume(0, 120);
kernel_timing_trigger(120, 1995, nullptr);
_meiMachineFlag = true;
_fieldE0_x = 555;
deleteMeiCheiHotspot();
addMovingMeiHotspot();
player_set_commands_allowed(true);
break;
case 708:
player_set_commands_allowed(false);
ws_walk(_G(my_walker), 1580, 342, nullptr, 709, 9, true);
break;
case 709:
kernel_timing_trigger(1, 578, nullptr);
player_set_commands_allowed(true);
break;
case 710:
pal_fade_init(_G(master_palette), 21, 255, 0, 15, 711);
break;
case 712:
series_unload(S2_MEI_NORMAL_DIRS[4]);
series_unload(S2_MEI_NORMAL_DIRS[3]);
series_unload(S2_MEI_NORMAL_DIRS[2]);
series_unload(S2_MEI_NORMAL_DIRS[1]);
series_unload(S2_MEI_NORMAL_DIRS[0]);
series_unload(S2_MEI_SHADOW_DIRS[4]);
series_unload(S2_MEI_SHADOW_DIRS[3]);
series_unload(S2_MEI_SHADOW_DIRS[2]);
series_unload(S2_MEI_SHADOW_DIRS[1]);
series_unload(S2_MEI_SHADOW_DIRS[0]);
break;
case 713:
series_unload(ROOM204_NORMAL_DIRS[0]);
series_unload(ROOM204_SHADOW_DIRS[0]);
break;
case 714:
digi_preload("204R03C", -1);
_204pu05Mach = series_stream("204PU05", 5, 0, 716);
series_stream_break_on_frame(_204pu05Mach, 9, 715);
break;
case 715:
digi_play("204R03C", 1, 255, -1, -1);
break;
case 716:
series_stream("PRIEST BOWS", 7, 0, 681);
digi_unload("204R03C");
break;
case 719:
digi_preload("0507p02a", 204);
_ripleyShould = 19;
digi_play(conv_sound_to_play(), 1, 255, 720, -1);
break;
case 720:
_ripleyShould = 16;
_204pu05Mach = series_stream("204PU04", 3, 0, 722);
series_stream_break_on_frame(_204pu05Mach, 6, 721);
break;
case 721:
digi_play("0507p02a", 1, 255, -1, 204);
break;
case 722:
series_stream("PRIEST REACTS", 7, 0, 723);
break;
case 723:
digi_unload("0507p02a");
conv_resume(conv_get_handle());
break;
case 725:
digi_play("204R37", 1, 255, 726, -1);
break;
case 726:
_meiShould = 13;
digi_play("204M22", 1, 255, 727, -1);
break;
case 727:
_meiShould = 5;
digi_play("204R38", 1, 255, 728, -1);
break;
case 728:
_meiShould = 13;
digi_play("204M23", 1, 255, 729, -1);
break;
case 729:
_meiShould = 5;
digi_play("204R39", 1, 255, 730, -1);
break;
case 730:
kernel_timing_trigger(1, 696, nullptr);
break;
case 1995:
midi_stop();
break;
default:
break;
}
}
void Room204::syncGame(Common::Serializer &s) {
s.syncAsSint32LE(_dword1A189C);
s.syncAsSint32LE(_ripleyShould);
s.syncAsSint32LE(_ripleyMode);
s.syncAsSint32LE(_meiMode);
s.syncAsSint32LE(_meiShould);
s.syncAsSint32LE(_field18_triggerNum);
s.syncAsSint32LE(_field24_triggerNum);
s.syncAsSint32LE(_field28_triggerNum);
s.syncAsSint32LE(_field2C);
s.syncAsSint32LE(_field34_x);
s.syncAsSint32LE(_field38_y);
s.syncAsSint32LE(_field3C_facing);
s.syncAsSint32LE(_field40);
s.syncAsSint32LE(_field44_triggerNum);
s.syncAsSint32LE(_field48_triggerNum);
s.syncAsSint32LE(_ripBangsBongSeries);
s.syncAsSint32LE(_fieldBC_trigger);
s.syncAsSint32LE(_fieldC0_trigger);
s.syncAsSint32LE(_fieldC4);
s.syncAsSint32LE(_fieldC8_trigger);
s.syncAsSint32LE(_fieldCC_trigger);
s.syncAsSint32LE(_fieldD8_facing);
s.syncAsSint32LE(_fieldE0_x);
s.syncAsSint32LE(_fieldE4_walkerDestX);
s.syncAsSint32LE(_fieldEC);
s.syncAsSint32LE(_fieldF0);
s.syncAsSint32LE(_fieldF4);
s.syncAsSint32LE(_fieldF8);
s.syncAsSint32LE(_fieldFC_infoX);
s.syncAsSint32LE(_field100_infoY);
s.syncAsSint32LE(_field104);
s.syncAsSint32LE(_field108);
s.syncAsSint32LE(_field10C_x);
s.syncAsSint32LE(_field110_y);
s.syncAsSint32LE(_field114_facing);
s.syncAsSint32LE(_field118_scale);
s.syncAsSint32LE(_field11C_depth);
s.syncAsSint32LE(_field124);
s.syncAsSint32LE(_field128);
s.syncAsSint32LE(_field12C_triggerNum);
s.syncAsSint32LE(_field130);
s.syncAsSint32LE(_field134);
s.syncAsSint32LE(_field138);
s.syncAsSint32LE(_field13C_triggerNum);
s.syncAsSint32LE(_field140);
s.syncAsSint32LE(_field144_triggerNum);
s.syncAsSint32LE(_field16C);
s.syncAsSint32LE(_field180);
s.syncAsSint32LE(_field184);
s.syncAsSint32LE(_field188);
s.syncAsByte(_meiPresent);
}
void Room204::initWalkerSeries() {
ws_walk_load_walker_series(S2_MEI_NORMAL_DIRS, S8_SHADOW_NAMES2, false);
ws_walk_load_walker_series(S2_MEI_SHADOW_DIRS, S8_SHADOW_NAMES1, false);
}
void Room204::addMovingMeiHotspot() {
HotSpotRec *spot = hotspot_new(_fieldE4_walkerDestX - 10, 273, _fieldE4_walkerDestX + 10, 323);
hotspot_newVerb(spot, "TALK TO");
hotspot_newVocab(spot, "MEI CHEN");
spot->cursor_number = 7;
spot->feet_x = _fieldE4_walkerDestX + 20;
spot->feet_y = 333;
spot->facing = 10;
_G(currentSceneDef).hotspots = hotspot_add(_G(currentSceneDef).hotspots, spot, true);
}
void Room204::deleteMalletHotspot() {
for (HotSpotRec *spot = _G(currentSceneDef).hotspots; spot != nullptr; spot = spot->next) {
if (scumm_stricmp(spot->vocab, "MALLET")) {
_G(currentSceneDef).hotspots = hotspot_delete_record(_G(currentSceneDef).hotspots, spot);
break;
}
}
}
void Room204::addLookMalletHotspot() {
HotSpotRec *spot = hotspot_new(460, 287, 470, 299);
hotspot_newVerb(spot, "LOOK AT");
hotspot_newVocab(spot, "MALLET");
spot->cursor_number = 6;
spot->feet_x = 473;
spot->feet_y = 331;
spot->facing = 11;
_G(currentSceneDef).hotspots = hotspot_add(_G(currentSceneDef).hotspots, spot, true);
}
void Room204::killMcMach() {
sendWSMessage_60000(_mcMach);
_mcMach = nullptr;
kernel_timing_trigger(1, 712, nullptr);
}
void Room204::initPriestWalker() {
_field138 = 1;
_field134 = 1;
_field13C_triggerNum = -1;
_field140 = 0;
_field144_triggerNum = -1;
_priestTurningStateMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 360, 305, 100, 2048, false, triggerMachineByHashCallback, "Young Priest State Machine");
_priestWalkerSeries = series_load("PRIEST WALKER", -1, nullptr);
sendWSMessage_10000(1, _priestTurningStateMach, _priestWalkerSeries, 2, 2, 603, _priestWalkerSeries, 2, 2, 0);
_field138 = 1;
}
void Room204::setWalkerDestX() {
player_update_info(_G(my_walker), &_G(player_info));
ws_get_walker_info(_mcMach, &_fieldFC_infoX, &_field100_infoY, &_G(player_info).scale, &_G(player_info).depth, &_G(player_info).facing);
if (_field104) {
return;
}
if (_G(player_info).x > 0 && _G(player_info).x <= 639) {
_fieldE4_walkerDestX = 555;
_meiMachineFlag = true;
}
if (_G(player_info).x >= 640 && _G(player_info).x <= 959) {
_fieldE4_walkerDestX = 800;
_meiMachineFlag = true;
}
if (_G(player_info).x >= 960 && _G(player_info).x <= 1279) {
_fieldE4_walkerDestX = 1245;
_meiMachineFlag = false;
}
if (_G(player_info).x >= 1280) {
_fieldE4_walkerDestX = 1494;
_meiMachineFlag = false;
}
}
void Room204::killPriestWalkerMach() {
sendWSMessage_60000(_priestWalkerMach);
_priestWalkerMach = nullptr;
kernel_timing_trigger(1, 713, nullptr);
}
void Room204::deleteMeiCheiHotspot() {
for (HotSpotRec *hs = _G(currentSceneDef).hotspots; hs; hs = hs->next) {
if (!strcmp(hs->vocab, "MEI CHEN")) {
_G(currentSceneDef).hotspots = hotspot_delete_record(_G(currentSceneDef).hotspots, hs);
break;
}
}
}
void Room204::conv204a() {
const int32 node = conv_current_node();
const int32 entry = conv_current_entry();
const int32 who = conv_whos_talking();
if (node == 20)
_checkNode20Fl = true;
else if (node == 10 || node == 11)
_checkNode10Fl = true;
if (_G(kernel).trigger == 1) {
if (who == 1) {
_ripleyShould = 16;
} else if (who <= 0) {
_field134 = 1;
if (node == 10 && entry == 1)
_checkNode10NegWhoEntry1Fl = true;
if (node == 11 && entry == 0)
_checkNode11NegWhoEntry0Fl = true;
}
conv_resume(conv_get_handle());
return;
}
if (who <= 0)
_field134 = 2;
else if (who != 1) {
if (node == 5 && entry == 2) {
_G(flags)[V285] = 1;
}
if ((node == 2 && entry == 0) || (node == 11 && entry == 0) || (node == 15 && entry == 0) || (node == 14 && entry == 3) || (node == 20 && entry == 3)) {
_ripleyShould = 22;
return;
}
if (node == 17 && entry == 1) {
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 719, nullptr);
return;
}
_ripleyShould = 19;
}
const char *sound = conv_sound_to_play();
if (sound)
digi_play(sound, 1, 255, 1, -1);
else
conv_resume(conv_get_handle());
}
void Room204::handleRipBangsBong() {
switch (_G(kernel).trigger) {
case -1:
case 666:
player_set_commands_allowed(false);
_ripBangsBongSeries = series_load("RIP BANGS GONG", -1, nullptr);
ws_walk(_G(my_walker), 510, 325, nullptr, 2, 9, true);
break;
case 2:
_ripleyShould = 8;
_field18_triggerNum = kernel_trigger_create(3);
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(2, 570, nullptr);
break;
case 3:
_ripleyShould = 9;
_field24_triggerNum = kernel_trigger_create(4);
break;
case 4:
digi_play("204_S03", 1, 255, -1, -1);
_ripleyShould = 10;
_field18_triggerNum = kernel_trigger_create(5);
break;
case 5:
_field2C = 1;
kernel_timing_trigger(1, 6, nullptr);
break;
case 6:
if (_ripDeltaMachineStateMach)
kernel_timing_trigger(5, 6, nullptr);
else {
series_unload(_ripBangsBongSeries);
_G(kernel).trigger_mode = KT_DAEMON;
_field40 = 1;
kernel_timing_trigger(1, 633, nullptr);
}
break;
default:
break;
}
}
void Room204::gameSetScale(int32 frontY, int32 backY, int32 frontS, int32 backS) {
_G(currentSceneDef).front_y = frontY;
_G(currentSceneDef).back_y = backY;
_G(currentSceneDef).front_scale = frontS;
_G(currentSceneDef).back_scale = backS;
player_inform_walker_new_scale(frontY, backY, frontS, backS);
}
} // namespace Rooms
} // namespace Riddle
} // namespace M4