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

1245 lines
39 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/section8/room801.h"
#include "m4/riddle/rooms/section8/section8.h"
#include "m4/graphics/gr_series.h"
#include "m4/riddle/vars.h"
namespace M4 {
namespace Riddle {
namespace Rooms {
static const char *const SAID[][2] = {
{ "farmer", "801r10" },
{ "rice paddies", "801r11" },
{ "root cellar", "801r29" },
{ "root cellar ", "801r29" },
{ "root cellar ", "801r14" },
{ "garden fence", "801r17" },
{ "earthen jugs", "801r18" },
{ nullptr, nullptr }
};
void Room801::preload() {
mouse_show();
if (!_G(flags)[V260])
interface_show();
LoadWSAssets("OTHER SCRIPT", _G(master_palette));
_G(player).walker_type = WALKER_ALT;
_G(player).shadow_type = SHADOW_ALT;
}
void Room801::init() {
if (!player_been_here(201) && !player_been_here(801)) {
inv_give_to_player("CHINESE YUAN");
}
digi_preload("801_s02", -1);
digi_play_loop("801_s02", 3, 100, -1, -1);
_farmerDisplacementSeries = series_load("farmer displacement", -1, nullptr);
_farmerTalkLoopSeries = series_load("farmer talk loop", -1, nullptr);
_farmerGiveTakeBowSeries = series_load("farmer give take bow", -1, nullptr);
_meiPrattleLoopSeries = series_load("mei prattle loop", -1, nullptr);
_ripKneelPotterySeries = series_load("rip kneel to pottery", -1, nullptr);
_ripEntersRootCellarSeries = series_load("rip enters root cellar", -1, nullptr);
_ripTrekHeadTurnSeries = series_load("rip trek head turn pos5", -1, nullptr);
_rptmr15Series = series_load("rptmr15", -1, nullptr);
_ripTrekHandOnChinSeries = series_load("rip trek hand on chin pos2", -1, nullptr);
_ripTrekHandsBehBackSeries = series_load("rip trek hands beh back pos1", -1, nullptr);
_ripTrekNodPos4Series = series_load("rip trek nod pos4", -1, nullptr);
_ripLooksLRDownSeries = series_load("rip looks l r down", -1, nullptr);
series_load("SAFARI SHADOW 5", -1, nullptr);
_mtcsh1Series = series_load("MCTSH1", -1, nullptr);
_farmerDisplacementMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1024, false, triggerMachineByHashCallback, "farmer displacement");
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerDisplacementSeries, 1, 14, 0, _farmerDisplacementSeries, 14, 14, 0);
_farmerShadowMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 151, 317, 100, 1280, false, triggerMachineByHashCallback, "farmer shadow");
sendWSMessage_10000(1, _farmerShadowMach, _mtcsh1Series, 1, 1, -1, _mtcsh1Series, 1, 1, 0);
if (inv_player_has("farmer's shovel"))
hotspot_set_active(_G(currentSceneDef).hotspots, "farmer's shovel", false);
else {
_shovelSeries = series_load("801 SHOVEL ", -1, nullptr);
_shovelMach = series_place_sprite("801 SHOVEL ", 0, 0, 0, 100, 1024);
}
if (_G(game).previous_room == 850) {
_G(flags)[V250] = 0;
_G(flags)[V251] = 0;
_G(flags)[kTerracottaSoldiers] = 0;
_G(flags)[V273] = 0;
_cellarOpenFl = false;
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
_cellarDoorClosedSeries = series_load("CELLAR DOOR CLOSED", -1, nullptr);
_cellarDoorClosedMach = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
_G(player).disable_hyperwalk = true;
player_set_commands_allowed(false);
_G(kernel).call_daemon_every_loop = true;
ws_demand_facing(_G(my_walker), 3);
ws_demand_location(_G(my_walker), 20, 270);
_farmerEarthquakeGestureSeries = series_load("farmer earthquake gesture", -1, nullptr);
_ripLooksToZeroSeries = series_load("rip looks to zero", -1, nullptr);
_meiLookToZeroSeries = series_load("mei looks to zero", -1, nullptr);
_farmerLooksToZeroSeries = series_load("farmer looks to zero", -1, nullptr);
_planeShadowSeries = series_load("shadow of de plane", -1, nullptr);
ws_walk_load_shadow_series(S8_SHADOW_DIRS1, S8_SHADOW_NAMES1);
ws_walk_load_walker_series(S8_SHADOW_DIRS2, S8_SHADOW_NAMES2);
_mcTrekMach = triggerMachineByHash_3000(8, 4, *S8_SHADOW_DIRS2, *S8_SHADOW_DIRS1,
20, 310, 3, triggerMachineByHashCallback3000, "mc_trek");
kernel_timing_trigger(60, 1, nullptr);
} else if (_G(game).previous_room == KERNEL_RESTORING_GAME) {
if (_cellarOpenFl) {
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
_cellarDoorOpenSeries = series_load("CELLAR DOOR OPEN", -1, nullptr);
_cellarDoorOpenMach = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
} else {
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
_cellarDoorClosedSeries = series_load("CELLAR DOOR CLOSED", -1, nullptr);
_cellarDoorClosedMach = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
}
_mcTrekMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1280, false, triggerMachineByHashCallback, "mc talk frames");
_safariShadow5Mach = series_show("SAFARI SHADOW 5", 1280, 16, -1, -1, 0, 50, 124, 304);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 0, _meiPrattleLoopSeries, 42, 42, 0);
} else {
ws_demand_facing(_G(my_walker), 8);
ws_demand_location(_G(my_walker), 525, 301);
_ripReturnsFromRootCellarSeries = series_load("rip returns from root cellar", -1, nullptr);
_cellarOpenFl = true;
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
_cellarDoorOpenSeries = series_load("CELLAR DOOR OPEN", -1, nullptr);
_cellarDoorOpenMach = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
kernel_timing_trigger(10, 7, nullptr);
}
}
void Room801::pre_parser() {
const bool lookFl = player_said_any("look", "look at");
if (lookFl && player_said("farm")) {
digi_play("801R23", 1, 255, -1, -1);
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
if (lookFl && player_said(" ")) {
_G(player).need_to_walk = false;
_G(player).ready_to_walk = true;
_G(player).waiting_for_walk = false;
}
}
void Room801::parser() {
const bool lookFl = player_said_any("look", "look at");
const bool talkFl = player_said_any("talk", "talk to");
const bool gearFl = player_said("gear");
const bool takeFl = player_said("take");
const bool goFl = player_said("go");
if (player_said("conv801a"))
room801_conv801a();
else if (_G(kernel).trigger == 747) {
_ripleyShould = 4;
_meiShould = 8;
_farmerShould = 5;
conv_shutdown();
player_set_commands_allowed(true);
} // if (_G(kernel).trigger == 747)
else if (lookFl && _G(walker).ripley_said(SAID)) {
// Nothing, though it's important to keep it because of the digi_play call in ripley_said (+ the cascade of checks)
}
else if (lookFl && player_said("house")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
setGlobals1(_ripTrekHandOnChinSeries, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 0, 16, 16, 16, 16, 0);
sendWSMessage_110000(_G(my_walker), 4);
digi_play("801R12", 1, 255, 1, -1);
break;
case 1:
sendWSMessage_140000(_G(my_walker), 2);
break;
case 2:
player_set_commands_allowed(true);
break;
default:
break;
}
} // if (lookFl && player_said("house"))
else if (lookFl && player_said("mount li")) {
switch (_G(kernel).trigger) {
case -1:
if (_G(flags)[V250]) {
digi_play("801R13A", 1, 255, 0);
} else {
player_set_commands_allowed(false);
setGlobals1(_ripTrekHandsBehBackSeries, 1, 11, 11, 11, 0, 11, 1, 1, 1, 0, 1, 1, 1, 1, 0, 11, 11, 11, 11, 0);
sendWSMessage_110000(_G(my_walker), 4);
digi_play("801R13", 1, 255, 1, -1);
_G(flags)[V250] = 1;
}
break;
case 1:
sendWSMessage_140000(_G(my_walker), 2);
break;
case 2:
player_set_commands_allowed(true);
break;
default:
break;
}
} // if (lookFl && player_said("mount li"))
else if (lookFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
setGlobals1(_ripLooksLRDownSeries, 1, 4, 4, 4, 0, 4, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
sendWSMessage_110000(_G(my_walker), 1);
break;
case 1:
if (_G(flags)[kRiceSackMoved]) {
digi_play("801R15A", 1, 255, 2, -1);
} else {
digi_play("801R15", 1, 255, 2, -1);
}
break;
case 2:
sendWSMessage_140000(_G(my_walker), 3);
break;
case 3:
player_set_commands_allowed(true);
break;
default:
break;
}
}
else if (lookFl && player_said("garden")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
setGlobals1(_ripTrekNodPos4Series, 1, 3, 3, 3, 0, 3, 1, 1, 1, 0, 1, 1, 1, 1, 0, 3, 3, 3, 3, 0);
sendWSMessage_110000(_G(my_walker), 1);
digi_play("801R16", 1, 255, 2, -1);
break;
case 2:
sendWSMessage_140000(_G(my_walker), 3);
break;
case 3:
player_set_commands_allowed(true);
break;
default:
break;
}
}
else if (lookFl && player_said("pottery")) {
switch (_G(kernel).trigger) {
case -1:
if (_G(flags)[kTerracottaSoldiers]) {
digi_play("801r22", 1);
} else {
player_set_commands_allowed(false);
ws_hide_walker();
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 0x100,
false, triggerMachineByHashCallback, "rip kneel to pottery");
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 1, 3, 1,
_ripKneelPotterySeries, 3, 3, 0);
digi_play("801r19", 1, 255, 1);
}
break;
case 1:
if (_counter == 0)
++_counter;
else
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 3, 42, 2,
_ripKneelPotterySeries, 42, 42, 0);
break;
case 2:
_counter = 0;
digi_play("801r20", 1, 255, 3, -1);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 40, 3,
_meiPrattleLoopSeries, 40, 40, 0);
break;
case 3:
if (_counter == 0)
++_counter;
else {
_counter = 0;
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 42, 26, 4,
_ripKneelPotterySeries, 26, 26, 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 37, 40, 4,
_meiPrattleLoopSeries, 37, 40, 1);
digi_play("801m10", 1, 255, 4, -1);
}
break;
case 4:
if (_counter < 2)
++_counter;
else {
_counter = 0;
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 40, 40, 5,
_meiPrattleLoopSeries, 40, 40, 0);
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 26, 42, 5,
_ripKneelPotterySeries, 42, 42, 0);
}
break;
case 5:
if (_counter < 1)
++_counter;
else {
_counter = 0;
digi_play("801r21", 1, 255, 6, -1);
}
break;
case 6:
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 42, 26, 7,
_ripKneelPotterySeries, 26, 26, 0);
break;
case 7:
sendWSMessage_10000(1, _ripAnimationMach, _ripKneelPotterySeries, 26, 1, 8,
_ripKneelPotterySeries, 1, 1, 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 37, 40, 9,
_meiPrattleLoopSeries, 37, 40, 1);
digi_play("801m11", 1, 255, 9, -1);
break;
case 8:
terminateMachine(_ripAnimationMach);
_ripAnimationMach = nullptr;
ws_unhide_walker(_G(my_walker));
break;
case 9:
if (_counter == 1)
++_counter;
else {
_counter = 0;
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 40, 31, 10,
_meiPrattleLoopSeries, 31, 31, 0);
}
break;
case 10:
_G(flags)[kTerracottaSoldiers] = 1;
player_set_commands_allowed(true);
break;
default:
break;
}
}
else if (lookFl && player_said("mei chen")) {
digi_play("COM043", 1, 255, -1, 997);
}
else if (lookFl && player_said("farm")) {
; // I bet there was something at some point, but it's really empty now
}
else if (gearFl && player_said("MATCH")) {
digi_play("801R09", 1, 255, -1, -1);
}
else if (player_said("US DOLLARS", "FARMER")) {
if (_G(flags)[V273]) {
digi_play("801r43b", 1, 255, -1, -1);
} else {
digi_play("801r43c", 1, 255, -1, -1);
_G(flags)[V273] = 1;
}
}
else if (player_said("CHINESE YUAN", "FARMER")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
setGlobals1(_ripTrekHeadTurnSeries, 1, 1, 1, 1, 0, 1, 7, 5, 7, 1, 7, 1, 1, 1, 0, 7, 7, 7, 7, 0);
sendWSMessage_110000(_G(my_walker), 1);
break;
case 1:
digi_play("801r27", 1, 255, 3, -1);
kernel_timing_trigger(430, 2, nullptr);
break;
case 2:
sendWSMessage_120000(_G(my_walker), 0);
break;
case 3:
sendWSMessage_130000(_G(my_walker), 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 55, 0, _meiPrattleLoopSeries, 53, 55, 1);
digi_play("801m12", 1, 255, 4, -1);
break;
case 4:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 55, 55, 0, _meiPrattleLoopSeries, 55, 55, 0);
digi_play("801f06", 1, 255, 5, -1);
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 1, 0, _farmerTalkLoopSeries, 1, 3, 4);
break;
case 5:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 1, 0, _farmerTalkLoopSeries, 1, 1, 0);
sendWSMessage_150000(_G(my_walker), 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 40, 6, _meiPrattleLoopSeries, 40, 40, 0);
break;
case 6:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 40, 41, 0, _meiPrattleLoopSeries, 39, 41, 4);
digi_play("801m13", 1, 255, 7, -1);
break;
case 7:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 41, 31, 0, _meiPrattleLoopSeries, 31, 31, 0);
setGlobals1(_rptmr15Series, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
sendWSMessage_110000(_G(my_walker), 9);
kernel_timing_trigger(50, 8, nullptr);
inv_move_object("CHINESE YUAN", 801);
digi_play("801r28", 1, 255, 9, -1);
break;
case 8:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerGiveTakeBowSeries, 71, 110, 10, _farmerTalkLoopSeries, 110, 110, 0);
break;
case 9:
sendWSMessage_120000(_G(my_walker), 0);
break;
case 10:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 1, 0, _farmerTalkLoopSeries, 1, 1, 0);
sendWSMessage_150000(_G(my_walker), 12);
break;
case 12:
player_update_info(_G(my_walker), &_G(player_info));
ws_walk(_G(my_walker), _G(player_info).x + 8, _G(player_info).y + 6, nullptr, 13, 5);
break;
case 13:
hotspot_set_active(_G(currentSceneDef).hotspots, "farmer's shovel", false);
setGlobals1(_rptmr15Series, 1, 16, 16, 16, 0, 16, 1, 1, 1, 0, 1, 1, 1, 1, 1, 16, 16, 16, 16, 0);
sendWSMessage_110000(_G(my_walker), 16);
break;
case 16:
kernel_examine_inventory_object("PING FARMER'S SHOVEL", _G(master_palette), 5, 1, 110, 250, 17, nullptr, -1);
terminateMachine(_shovelMach);
inv_give_to_player("farmer's shovel");
break;
case 17:
sendWSMessage_140000(_G(my_walker), 18);
break;
case 18:
series_unload(_shovelSeries);
player_set_commands_allowed(true);
break;
default:
break;
}
}
// This blocks is when opening the cellar door
else if (gearFl && player_said("root cellar ")) {
switch (_G(kernel).trigger) {
case -1:
if (!_cellarOpenFl) {
player_set_commands_allowed(false);
ws_hide_walker();
terminateMachine(_cellarDoorClosedMach);
_farmerShould = series_load("RIP OPENS CELLAR", -1, nullptr);
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, false, triggerMachineByHashCallback, "rip opens cellar");
sendWSMessage_10000(1, _ripAnimationMach, _farmerShould, 1, 28, 10, _farmerShould, 28, 28, 0);
}
break;
case 1:
_cellarOpenFl = true;
terminateMachine(_ripAnimationMach);
series_unload(_farmerShould);
_cellarDoorOpenMach = series_place_sprite("CELLAR DOOR OPEN", 0, 0, -53, 100, 1024);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", true);
ws_unhide_walker(_G(my_walker));
player_set_commands_allowed(true);
break;
case 10:
sendWSMessage_10000(1, _ripAnimationMach, _farmerShould, 29, 45, 11, _farmerShould, 45, 45, 0);
digi_play("801_s03", 2, 255, -1, -1);
break;
case 11:
sendWSMessage_10000(1, _ripAnimationMach, _farmerShould, 46, 56, 1, _farmerShould, 56, 56, 0);
digi_stop(1);
break;
default:
break;
}
}
else if (gearFl && player_said("root cellar ")) {
// Not the same as the previous one : there's one space instead of two at the end
// This blocks is when closing the cellar door which was previously opened
switch (_G(kernel).trigger) {
case -1:
if (_cellarOpenFl) {
player_set_commands_allowed(false);
ws_hide_walker(_G(my_walker));
terminateMachine(_cellarDoorOpenMach);
_ripClosesCellarSeries = series_load("RIP CLOSES CELLAR", -1, nullptr);
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 256, false, triggerMachineByHashCallback, "rip closes cellar");
sendWSMessage_10000(1, _ripAnimationMach, _ripClosesCellarSeries, 1, 19, 10, _ripClosesCellarSeries, 34, 34, 0);
}
break;
case 1:
_cellarOpenFl = false;
terminateMachine(_ripAnimationMach);
ws_unhide_walker(_G(my_walker));
digi_stop(1);
series_unload(_ripClosesCellarSeries);
_cellarDoorClosedMach = series_place_sprite("CELLAR DOOR CLOSED", 0, 0, -53, 100, 1280);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", true);
hotspot_set_active(_G(currentSceneDef).hotspots, "root cellar ", false);
hotspot_set_active(_G(currentSceneDef).hotspots, "ROOT CELLAR", false);
player_set_commands_allowed(true);
break;
case 10:
sendWSMessage_10000(1, _ripAnimationMach, _ripClosesCellarSeries, 20, 34, 1, _ripClosesCellarSeries, 34, 34, 0);
digi_play("801_s04", 2, 255, -1, -1);
break;
default:
break;
}
}
else if ((gearFl || takeFl) && player_said("mei chen")) {
digi_play("com013", 1, 255, -1, 997);
}
else if (talkFl && player_said("farmer")) {
if (_G(flags)[kTerracottaSoldiers] || _G(flags)[kRiceSackMoved] || _G(flags)[kOpenedHoleInWall]) {
ws_hide_walker(_G(my_walker));
player_set_commands_allowed(false);
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 167, 303, 49, 1280, true, triggerMachineByHashCallback, "rip talking to farmer");
sendWSMessage_10000(1, _ripAnimationMach, _ripTrekHeadTurnSeries, 1, 1, -1, _ripTrekHeadTurnSeries, 1, 1, 0);
_safariShadow5Mach2 = series_show("SAFARI SHADOW 5", 1280, 144, -1, -1, 0, 48, 167, 303);
_ripleyMode = 1;
_ripleyShould = 1;
_meiMode = 1;
_meiShould = 1;
_farmerMode = 1;
_farmerShould = 1;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(1, 300, nullptr);
kernel_timing_trigger(1, 200, nullptr);
kernel_timing_trigger(1, 400, nullptr);
_G(kernel).trigger_mode = KT_PARSE;
conv_load("conv801a", 10, 10, 747);
conv_set_shading(65);
conv_export_value(conv_get_handle(), _G(flags)[kTerracottaSoldiers], 0);
conv_export_value(conv_get_handle(), _G(flags)[kOpenedHoleInWall], 1);
conv_export_value(conv_get_handle(), _G(flags)[kRiceSackMoved], 2);
conv_play(conv_get_handle());
} else {
digi_play("801r06", 1, 255, -1, -1);
}
}
else if (talkFl && player_said("mei chen")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
setGlobals1(_ripTrekHeadTurnSeries, 1, 4, 5, 7, 1, 4, 4, 4, 4, 1, 4, 1, 1, 1, 0, 4, 1, 1, 1, 0);
sendWSMessage_110000(_G(my_walker), 1);
break;
case 1:
switch (imath_ranged_rand(1, 4)) {
case 1:
digi_play("com034", 1, 255, 2, 997);
break;
case 2:
digi_play("com035", 1, 255, 2, 997);
break;
case 3:
digi_play("com036", 1, 255, 2, 997);
break;
case 4:
digi_play("com037", 1, 255, 2, 997);
break;
default:
break;
}
break;
case 2:
sendWSMessage_120000(_G(my_walker), 4);
break;
case 4:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 40, 5, _meiPrattleLoopSeries, 40, 40, 0);
break;
case 5:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 40, 41, 0, _meiPrattleLoopSeries, 40, 41, 4);
switch (imath_ranged_rand(1, 3)) {
case 1:
digi_play("com039", 1, 255, 6, 997);
break;
case 2:
digi_play("com040", 1, 255, 6, 997);
break;
case 3:
digi_play("com041", 1, 255, 6, 997);
break;
default:
break;
}
break;
case 6:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 41, 31, 7, _meiPrattleLoopSeries, 31, 31, 0);
sendWSMessage_130000(_G(my_walker), 0);
break;
case 7:
sendWSMessage_150000(_G(my_walker), 0);
player_set_commands_allowed(true);
break;
default:
break;
}
}
else if (gearFl && player_said("farmer")) {
digi_play("com017", 1, 255, -1, 997);
}
else if (takeFl && player_said("pottery")) {
if (_G(flags)[V251]) {
digi_play("801r25", 1, 255, -1, -1);
} else {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
digi_play("801r25", 1, 255, 1, -1);
break;
case 1:
digi_play("801r25a", 1, 255, 2, -1);
break;
case 2:
player_set_commands_allowed(true);
_G(flags)[V251] = 1;
default:
break;
}
}
}
else if (goFl && player_said("root cellar")) {
switch (_G(kernel).trigger) {
case -1:
player_set_commands_allowed(false);
ws_hide_walker(_G(my_walker));
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 256, false, triggerMachineByHashCallback, "rip enters cellar");
sendWSMessage_10000(1, _ripAnimationMach, _ripEntersRootCellarSeries, 1, 14, 5, _ripEntersRootCellarSeries, 15, 19, 0);
break;
case 5:
disable_player_commands_and_fade_init(6);
break;
case 6:
terminateMachine(_ripAnimationMach);
ws_unhide_walker(_G(my_walker));
adv_kill_digi_between_rooms(false);
digi_play_loop("801_s02", 3, 35, -1, -1);
_G(game).setRoom(802);
break;
default:
break;
}
}
else if (takeFl && player_said("farmer's shovel") && !inv_player_has("farmer's shovel")) {
digi_play("801r26", 1, 255, -1, -1);
}
else if (player_said("journal") && !takeFl && !lookFl && !gearFl) {
digi_play("com042", 1, 255, -1, 997);
} else
return;
_G(player).command_ready = false;
}
void Room801::daemon() {
switch (_G(kernel).trigger) {
case 1:
sendWSMessage_10000(_mcTrekMach, 124, 304, 4, 11, 1);
ws_walk(_G(my_walker), 172, 302, nullptr, 10, 7, true);
break;
case 2:
terminateMachine(_planeShadowMach);
series_unload(_planeShadowSeries);
_unkFlag1 = true;
kernel_timing_trigger(70, 31, nullptr);
break;
case 4:
// nothing
break;
case 5:
sendWSMessage_150000(_G(my_walker), -1);
_G(player).disable_hyperwalk = false;
_G(kernel).call_daemon_every_loop = false;
player_set_commands_allowed(true);
break;
case 6:
case 7:
player_set_commands_allowed(false);
ws_hide_walker(_G(my_walker));
_mcTrekMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1280, false, triggerMachineByHashCallback, "mc talk frames");
_safariShadow5Mach = series_show("SAFARI SHADOW 5", 1280, 16, -1, -1, 0, 50, 124, 304);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 0, _meiPrattleLoopSeries, 42, 42, 0);
if (_G(flags)[V260]) {
kernel_timing_trigger(30, 81, nullptr);
} else {
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0, false, triggerMachineByHashCallback, "rip returns from cellar");
sendWSMessage_10000(1, _ripAnimationMach, _ripReturnsFromRootCellarSeries, 1, 22, 8, _ripReturnsFromRootCellarSeries, 22, 22, 0);
}
break;
case 8:
terminateMachine(_ripAnimationMach);
ws_unhide_walker(_G(my_walker));
series_unload(_ripReturnsFromRootCellarSeries);
player_set_commands_allowed(true);
break;
case 9:
mouse_lock_sprite(5);
conv_resume(conv_get_handle());
break;
case 10:
terminateMachine(_farmerDisplacementMach);
_planeShadowMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 2048, false, triggerMachineByHashCallback, "shadow of de plane");
_farmerDisplacementMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1024, false, triggerMachineByHashCallback, "farmer looks to zero");
_ripAnimationMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 1536, false, triggerMachineByHashCallback, "rip looks to zero");
sendWSMessage_10000(1, _planeShadowMach, _planeShadowSeries, 1, 47, 2, _planeShadowSeries, 47, 47, 0);
_unkFlag1 = false;
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerLooksToZeroSeries, 1, 48, 12, _farmerLooksToZeroSeries, 48, 48, 0);
_unkFlag2 = false;
sendWSMessage_10000(1, _mcTrekMach, _meiLookToZeroSeries, 1, 18, 0, _meiLookToZeroSeries, 18, 18, 0);
ws_hide_walker(_G(my_walker));
sendWSMessage_10000(1, _ripAnimationMach, _ripLooksToZeroSeries, 1, 13, 51, _ripLooksToZeroSeries, 13, 13, 0);
_safariShadow5Mach2 = series_show("SAFARI SHADOW 5", 1280, 144, -1, -1, 0, 48, 172, 302);
break;
case 11:
digi_play("801_s01", 2, 255, -1, -1);
sendWSMessage_60000(_mcTrekMach);
_mcTrekMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1280, false, triggerMachineByHashCallback, "mei chen looks to zero");
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 1, 7, 0, _meiPrattleLoopSeries, 7, 7, 0);
_safariShadow5Mach = series_show("SAFARI SHADOW 5", 1280, 16, -1, -1, 0, 50, 124, 304);
break;
case 12:
_unkFlag2 = true;
break;
case 13:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 4, 1, 0, _farmerTalkLoopSeries, 1, 1, 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 0, _meiPrattleLoopSeries, 42, 55, 4);
digi_play("801m02", 1, 255, 35, -1);
break;
case 14:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerEarthquakeGestureSeries, 1, 20, 15,
_farmerEarthquakeGestureSeries, 20, 20, 0);
digi_play("801f02a", 1, 255, 16, -1);
break;
case 15:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerEarthquakeGestureSeries, 20, 1, 12, _farmerTalkLoopSeries, 1, 1, 0);
break;
case 16:
if (_unkFlag2) {
_unkFlag2 = false;
_ripTrekHeadTurnSeries = series_load("RIP TREK HEAD TURN POS5", -1, nullptr);
setGlobals1(_ripTrekHeadTurnSeries, 1, 7, 5, 7, 1, 7, 1, 1, 1, 0, 1, 1, 1, 1, 0, 7, 7, 7, 7, 0);
sendWSMessage_110000(_G(my_walker), 4);
digi_play("801r02", 1, 255, 53, -1);
} else {
kernel_timing_trigger(15, 16, nullptr);
}
break;
case 17:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerEarthquakeGestureSeries, 20, 1, 18, _farmerEarthquakeGestureSeries, 1, 1, 0);
break;
case 18:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 37, 0, _meiPrattleLoopSeries, 37, 41, 4);
digi_play("801m04", 1, 255, 41, -1);
break;
case 19:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerDisplacementSeries, 1, 1, 0, _farmerDisplacementSeries, 1, 1, 0);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 37, 0, _meiPrattleLoopSeries, 37, 41, 4);
digi_play("801m06", 1, 255, 43, -1);
break;
case 31:
sendWSMessage_10000(1, _mcTrekMach, _meiLookToZeroSeries, 18, 1, 32, _meiLookToZeroSeries, 1, 1, 0);
sendWSMessage_10000(1, _ripAnimationMach, _ripLooksToZeroSeries, 13, 1, 52, _ripLooksToZeroSeries, 1, 1, 0);
break;
case 32:
_unkFlag3 = true;
break;
case 33:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 17, 8, 49, _meiPrattleLoopSeries, 8, 8, 0);
break;
case 34:
if (_unkFlag3) {
_unkFlag3 = false;
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 0, _meiPrattleLoopSeries, 42, 42, 0);
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 4, 0, _farmerTalkLoopSeries, 5, 7, 4);
digi_play("801f01", 1, 255, 13, -1);
} else {
kernel_timing_trigger(15, 34, nullptr);
}
break;
case 35:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 0, _meiPrattleLoopSeries, 42, 42, 0);
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 4, 0, _farmerTalkLoopSeries, 5, 7, 4);
digi_play("801f02", 1, 255, 14, -1);
break;
case 36:
if (_unkFlag3) {
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, -1, _meiPrattleLoopSeries, 42, 42, 0);
} else {
kernel_timing_trigger(15, 36, nullptr);
}
break;
case 37:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 83, 64, 38, _meiPrattleLoopSeries, 64, 64, 0);
kernel_timing_trigger(0, 39, nullptr);
break;
case 38:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 64, 56, 32, _meiPrattleLoopSeries, 56, 56, 0);
break;
case 39:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerEarthquakeGestureSeries, 1, 20, 17, _farmerEarthquakeGestureSeries, 20, 20, 0);
break;
case 41:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 37, 37, 0, _meiPrattleLoopSeries, 37, 37, 0);
sendWSMessage_110000(_G(my_walker), 4);
digi_play("801r03", 1, 255, 54, -1);
break;
case 42:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 41, 31, 0, _meiPrattleLoopSeries, 31, 31, 0);
digi_play("801r04", 1, 255, 55, -1);
break;
case 43:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 41, 31, 0, _meiPrattleLoopSeries, 42, 42, 0);
_ripTrekHandsHipPos5Series = series_load("RIP TREK HANDS HIP POS5", -1, nullptr);
sendWSMessage_110000(_G(my_walker), -1);
digi_play("801r05", 1, 255, 56, -1);
break;
case 48:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 56, 83, 37, _meiPrattleLoopSeries, 83, 83, 0);
break;
case 49:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 18, 30, 50, _meiPrattleLoopSeries, 30, 30, 0);
break;
case 50:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 30, 18, 32, _meiPrattleLoopSeries, 42, 55, 4);
break;
case 51:
digi_play("801r01", 1, 255, -1, -1);
break;
case 52:
if (_unkFlag2 && _unkFlag1 && _unkFlag3) {
terminateMachine(_mcTrekMach);
terminateMachine(_farmerDisplacementMach);
terminateMachine(_ripAnimationMach);
terminateMachine(_safariShadow5Mach2);
ws_unhide_walker(_G(my_walker));
series_unload(_farmerLooksToZeroSeries);
series_unload(_meiLookToZeroSeries);
series_unload(_ripLooksToZeroSeries);
_farmerDisplacementMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1024, false, triggerMachineByHashCallback, "farmer talk frames");
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 1, 0, _farmerTalkLoopSeries, 1, 1, 0);
_mcTrekMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, -53, 100, 1280, false, triggerMachineByHashCallback, "mc talk frames");
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 8, 17, 33, _meiPrattleLoopSeries, 17, 17, 0);
_ripTrekHatTipPos5Series = series_load("RIP TREK HAT TIP POS5", -1, nullptr);
kernel_timing_trigger(210, 62, nullptr);
digi_play("801m01", 1, 255, 34, -1);
_unkFlag1 = false;
_unkFlag2 = false;
_unkFlag3 = false;
} else {
kernel_timing_trigger(15, 52, nullptr);
}
break;
case 53:
sendWSMessage_120000(_G(my_walker), -1);
kernel_timing_trigger(330, 48, nullptr);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 37, 0, _meiPrattleLoopSeries, 37, 41, 4);
digi_play("801m03", 1, 255, 36, -1);
break;
case 54:
sendWSMessage_120000(_G(my_walker), -1);
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 37, 37, 0, _meiPrattleLoopSeries, 37, 41, 4);
digi_play("801m05", 1, 255, 42, -1);
break;
case 55:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 4, 0, _farmerTalkLoopSeries, 5, 7, 4);
digi_play("801f03", 1, 255, 19, -1);
break;
case 56:
sendWSMessage_120000(_G(my_walker), 5);
break;
case 60:
sendWSMessage_140000(_G(my_walker), 63);
break;
case 61:
sendWSMessage_150000(_G(my_walker), -1);
break;
case 62:
setGlobals1(_ripTrekHatTipPos5Series, 1, 12, 12, 12, 0, 12, 1, 1, 1, 0, 1, 12, 12, 12, 0, 12, 12, 12, 12, 0);
sendWSMessage_110000(_G(my_walker), 60);
break;
case 63:
series_unload(_ripTrekHatTipPos5Series);
break;
case 81:
digi_play("801R30", 1, 255, 82, 801);
break;
case 82:
disable_player_commands_and_fade_init(83);
break;
case 83:
_G(game).setRoom(852);
break;
case 200:
switch (_meiMode) {
case 1:
switch (_meiShould) {
case 1:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, -1, _meiPrattleLoopSeries, 42, 42, 0);
kernel_timing_trigger(60, 200, nullptr);
break;
case 2:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 31, 37, 200, _meiPrattleLoopSeries, 37, 41, 4);
_meiMode = 2;
break;
case 3:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 200, _meiPrattleLoopSeries, 42, 55, 4);
_meiMode = 3;
break;
case 4:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 56, 84, 200, _meiPrattleLoopSeries, 84, 84, 0);
_meiMode = 4;
break;
case 8:
_meiMode = 8;
break;
default:
break;
}
break;
case 2:
switch (_meiShould) {
case 1:
case 3:
case 4:
case 8:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 37, 31, 200, _meiPrattleLoopSeries, 42, 42, 0);
_meiMode = 1;
break;
case 2:
kernel_timing_trigger(30, 200, nullptr);
break;
default:
break;
}
break;
case 3:
switch (_meiShould) {
case 1:
case 2:
case 4:
case 8:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 42, 42, 200, _meiPrattleLoopSeries, 42, 42, 0);
_meiMode = 1;
break;
case 3:
kernel_timing_trigger(30, 200, nullptr);
break;
default:
break;
}
break;
case 4:
switch (_meiShould) {
case 4:
_meiShould = 1;
// Fallthrough
case 1:
case 2:
case 3:
case 8:
sendWSMessage_10000(1, _mcTrekMach, _meiPrattleLoopSeries, 84, 56, 200, _meiPrattleLoopSeries, 42, 42, 0);
_meiMode = 1;
break;
default:
break;
}
break;
default:
break;
}
break;
case 300:
switch (_ripleyMode) {
case 1:
switch (_ripleyShould) {
case 1:
sendWSMessage_10000(1, _ripAnimationMach, _ripTrekHeadTurnSeries, 1, 1, -1, _ripTrekHeadTurnSeries, 1, 1, 0);
kernel_timing_trigger(60, 300, nullptr);
break;
case 2:
sendWSMessage_10000(1, _ripAnimationMach, _ripTrekHeadTurnSeries, 1, 4, 300, _ripTrekHeadTurnSeries, 5, 7, 4);
_ripleyMode = 2;
break;
case 3:
sendWSMessage_10000(1, _ripAnimationMach, _rptmr15Series, 1, 16, 300, _rptmr15Series, 16, 16, 0);
_ripleyMode = 3;
break;
case 4:
terminateMachine(_ripAnimationMach);
terminateMachine(_safariShadow5Mach2);
ws_unhide_walker(_G(my_walker));
_ripleyMode = 4;
break;
default:
break;
}
break;
case 2:
switch (_ripleyShould) {
case 1:
case 3:
case 4:
sendWSMessage_10000(1, _ripAnimationMach, _ripTrekHeadTurnSeries, 4, 1, 300, _ripTrekHeadTurnSeries, 1, 1, 0);
_ripleyMode = 1;
break;
case 2:
kernel_timing_trigger(30, 300, nullptr);
break;
default:
break;
}
break;
case 3:
switch (_ripleyShould) {
case 3:
_ripleyShould = 1;
// Fallthrough
case 1:
case 2:
case 4:
sendWSMessage_10000(1, _ripAnimationMach, _rptmr15Series, 16, 1, 300, _rptmr15Series, 1, 1, 0);
mouse_lock_sprite(false);
kernel_examine_inventory_object("PING MATCH", _G(master_palette), 5, 1, 110, 220, 9, "801R44", -1);
_ripleyMode = 1;
default:
break;
}
break;
default:
break;
}
break;
case 310:
player_set_commands_allowed(true);
_ripleyShould = 3;
break;
case 400:
if (_farmerShould == 5)
_farmerMode = 5;
switch (_farmerMode) {
case 1:
switch (_farmerShould) {
case 1:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerDisplacementSeries, 14, 14, -1, _farmerDisplacementSeries, 14, 14, 0);
kernel_timing_trigger(60, 400, nullptr);
break;
case 2:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 1, 4, 400, _farmerTalkLoopSeries, 5, 7, 4);
_farmerMode = 2;
break;
case 3:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerGiveTakeBowSeries, 69, 110, 400, _farmerDisplacementSeries, 14, 14, 0);
_farmerShould = 1;
break;
case 4:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerGiveTakeBowSeries, 2, 68, 400, _farmerDisplacementSeries, 14, 14, 0);
_farmerShould = 1;
break;
case 5:
_farmerMode = 5;
break;
default:
break;
}
break;
case 2:
switch (_farmerShould) {
case 1:
case 4:
case 5:
sendWSMessage_10000(1, _farmerDisplacementMach, _farmerTalkLoopSeries, 4, 1, 400, _farmerDisplacementSeries, 14, 14, 0);
_farmerMode = 1;
break;
case 2:
kernel_timing_trigger(30, 400, nullptr);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
break;
}
}
void Room801::syncGame(Common::Serializer &s) {
s.syncAsByte(_cellarOpenFl);
}
void Room801::room801_conv801a() {
const int32 entry = conv_current_entry();
const int32 node = conv_current_node();
if (_G(kernel).trigger == 1) {
const int32 who = conv_whos_talking();
if (who <= 0) {
_meiShould = 1;
_farmerShould = 1;
if (node == 3 && entry == 0) {
inv_give_to_player("MATCH");
_farmerShould = 4;
_G(kernel).trigger_mode = KT_DAEMON;
kernel_timing_trigger(90, 310, nullptr);
_G(kernel).trigger_mode = KT_PARSE;
return;
}
} else if (who == 1) {
_ripleyShould = 1;
}
conv_resume(conv_get_handle());
return;
}
if (conv_sound_to_play() == nullptr) {
conv_resume(conv_get_handle());
return;
}
const int32 who = conv_whos_talking();
if (who <= 0) {
if ((node == 1 && entry == 0) || (node == 1 && entry == 1) || (node == 1 && entry == 2) || (node == 4 && entry == 2))
_meiShould = 3;
if ((node == 2 && entry == 1) || (node == 2 && entry == 2) || (node == 4 && entry == 1))
_meiShould = 2;
if ((node == 4 && entry == 0) || (node == 2 && entry == 0) || (node == 3 && entry == 0))
_meiShould = 2;
} else if (who == 1) {
if (node != 1 || entry != 3)
_farmerShould = 2;
}
digi_play(conv_sound_to_play(), 1, 255, 1, -1);
}
} // namespace Rooms
} // namespace Riddle
} // namespace M4