/* 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 0 && _G(kernel).trigger < 9) { switch (_G(kernel).trigger) { case 1: ws_walk(_G(my_walker), 456, 366, nullptr, 2, 2, true); break; case 2: player_set_commands_allowed(false); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip trek low reach pos2", -1, nullptr); player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 2", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840); series_ranged_play_xy("rip trek low reach pos2", 1, 0, 0, 15, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 512, 5, 3, false); break; case 3: player_update_info(); _ripTrekLowReachMach = series_ranged_play_xy("rip trek low reach pos2", -1, 2, 15, 15, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 512, 300, -1, false); inv_give_to_player("REBUS AMULET"); hotspot_set_active(_G(currentSceneDef).hotspots, "REBUS AMULET", false); if (_G(flags)[V063] == 0) { kernel_examine_inventory_object("ping REBUS AMULET", _G(master_palette), 5, 1, 387, 250, 4, "207R04", -1); } else { kernel_examine_inventory_object("ping REBUS AMULET", _G(master_palette), 5, 1, 387, 250, 4, nullptr, -1); } terminateMachine(_rebusAmuletMach); break; case 4: terminateMachine(_ripTrekLowReachMach); player_update_info(); series_ranged_play_xy("rip trek low reach pos2", 1, 2, 0, 15, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 512, 5, 5, false); break; case 5: ws_unhide_walker(); terminateMachine(_safariShadow3Mach); ws_walk(_G(my_walker), 418, 345, nullptr, 6, 2, true); break; case 6: ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip trek low reach pos2", -1, nullptr); player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 2", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840); series_ranged_play_xy("rip trek low reach pos2", 1, 0, 0, 15, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 512, 5, 7, false); digi_play("207r35", 1); break; case 7: _oneFrameMoneySpriteMach = series_show_sprite("one frame money sprite", 0, 3840); player_update_info(); series_ranged_play_xy("rip trek low reach pos2", 1, 2, 0, 15, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 512, 5, 8, false); break; case 8: terminateMachine(_safariShadow3Mach); ws_unhide_walker(); series_unload(_ripTrekLowReacherPos1Series); player_set_commands_allowed(true); break; default: break; } } else if (takeFlag && player_said("REBUS AMULET") && _G(flags)[V061] == 0 && inv_object_is_here("REBUS AMULET")) { digi_play("207r35a", 1); } else if (_G(kernel).trigger == 666) { digi_unload("ripwhis"); } else if ((takeFlag || useFlag) && player_said("wheel")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); digi_preload("207_s04", -1); digi_preload("207_s03", -1); digi_preload("ripwhis", -1); ws_hide_walker(_G(my_walker)); terminateMachine(_wheelMach); hotspot_set_active(_G(currentSceneDef).hotspots, "WHEEL", false); _G(flags)[V058] = 1; hotspot_set_active(_G(currentSceneDef).hotspots, "METAL RIM", true); hotspot_set_active(_G(currentSceneDef).hotspots, "SEVEN SPOKES", true); hotspot_set_active(_G(currentSceneDef).hotspots, "WOODEN RIM", true); _dropsWheelMach = series_stream("drops wheel", 5, 1, 3); series_stream_break_on_frame(_dropsWheelMach, 22, 4); break; case 1: series_stream_break_on_frame(_dropsWheelMach, 84, 3); digi_play("207_s04", 1, 255, 2, -1); break; case 2: digi_play("ripwhis", 1, 255, 666, -1); break; case 3: ws_unhide_walker(); player_update_info(); ws_demand_location(_G(my_walker), 5 + _G(player_info).x, 20 + _G(player_info).y); _metalRimMach = series_show_sprite("metal rim", 0, 3840); _sevenSpokesMach = series_show_sprite("SEVEN spokes", 0, 3840); series_show_sprite("wooden rim", 0, 3840); digi_unload("207_s04"); digi_unload("207_s03"); player_set_commands_allowed(true); break; case 4: series_stream_break_on_frame(_dropsWheelMach, 46, 1); digi_play("207_s03", 2); break; default: break; } } else if (takeFlag && player_said("PIPES")) { _G(flags)[V036] = 1; if (_G(flags)[V061] != 0 && inv_object_is_here("LEAD PIPE")) { digi_play("207r36", 1); } else { switch (_G(kernel).trigger) { case -1: case 1: if (inv_object_is_here("LEAD PIPE") || _pipeFlag) { ws_walk(_G(my_walker), 279, 346, nullptr, 2, 7, true); _ripForegroundFl = true; } break; case 2: player_set_commands_allowed(false); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip trek low reacher pos5", -1, nullptr); player_update_info(); series_play("rip trek low reacher pos5", 512, 128, 3, 3, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 15); _safariShadow3Mach = series_place_sprite("safari shadow 5", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840); break; case 3: player_update_info(); _ripTrekLowReacherPos5Mach = series_play("rip trek low reacher pos5", 512, 128, -1, 300, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 15, 15); if (!_pipeFlag) { inv_give_to_player("LEAD PIPE"); kernel_examine_inventory_object("ping LEAD PIPE", _G(master_palette), 5, 1, 179, 250, 4, nullptr, -1); terminateMachine(_leadPipeMach2); } else { inv_move_object("LEAD PIPE", 207); hotspot_set_active_xy(_G(currentSceneDef).hotspots, "PIPES", 277, 359, true); _leadPipeMach2 = series_show_sprite("lead pipe", 0, 3840); kernel_timing_trigger(1, 4, nullptr); digi_play("207_s02", 2); } break; case 4: terminateMachine(_ripTrekLowReacherPos5Mach); player_update_info(); series_play("rip trek low reacher pos5", 512, 130, 5, 3, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 15); digi_play("207_s01", 2); break; case 5: ws_unhide_walker(); terminateMachine(_safariShadow3Mach); series_unload(_ripTrekLowReacherPos1Series); if (!_pipeFlag) { hotspot_set_active(_G(currentSceneDef).hotspots, "PEASANT", false); _peasantShould = 3; _digiName = "207p01"; _digiTriggerNum = 6; } else { _peasantShould = 3; _digiName = "207p01a"; _digiTriggerNum = 7; } _nextTriggerMode = KT_PARSE; break; case 6: _peasantShould = 2; player_set_commands_allowed(true); _guardComingDelay = 0; _peasantShoutingFl = true; _G(kernel).trigger_mode = KT_DAEMON; kernel_timing_trigger(60, 40, nullptr); break; case 7: _pipeFlag = false; _peasantShould = 0; _commandNotAllowedFl = true; _G(flags)[V043] = 1; break; default: break; } } } else if (takeFlag && player_said("METAL RIM")) { _G(flags)[V036] = 1; if (_G(flags)[V061] != 0) { digi_play("207r29", 1); } else { switch (_G(kernel).trigger) { case -1: if (inv_object_is_here("METAL RIM") || _pipeFlag) { player_set_commands_allowed(false); player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 1", 0, _G(player_info).x, _G(player_info).y, -_G(player_info).scale, 3840); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip low reach pos1", -1, nullptr); player_update_info(); series_play("rip low reach pos1", 512, 128, 1, 5, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 14); _ripForegroundFl = false; } break; case 1: player_update_info(); _ripTrekLowReacherPos5Mach = series_play("rip low reach pos1", 512, 128, -1, 300, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 14, 14); if (!_pipeFlag) { inv_give_to_player("METAL RIM"); kernel_examine_inventory_object("PING METAL RIM", _G(master_palette), 5, 1, 245, 244, 2, nullptr, -1); terminateMachine(_metalRimMach); } else { inv_move_object("METAL RIM", 207); hotspot_set_active(_G(currentSceneDef).hotspots, "METAL RIM", true); _metalRimMach = series_show_sprite("metal rim", 0, 3840); digi_play("207_s01", 2); kernel_timing_trigger(1, 2, nullptr); } break; case 2: terminateMachine(_ripTrekLowReacherPos5Mach); player_update_info(); series_play("rip low reach pos1", 512, 130, 3, 5, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 14); digi_play("207_s06", 2); break; case 3: ws_unhide_walker(); terminateMachine(_safariShadow3Mach); series_unload(_ripTrekLowReacherPos1Series); if (_pipeFlag) { _peasantShould = 3; _digiName = "207p01a"; _digiTriggerNum = 5; _nextTriggerMode = KT_PARSE; } else if (_G(flags)[V061] != 0) { player_set_commands_allowed(true); } else { hotspot_set_active(_G(currentSceneDef).hotspots, "PEASANT", false); _peasantShould = 3; _digiName = "207p01"; _digiTriggerNum = 4; _nextTriggerMode = KT_PARSE; } break; case 4: hotspot_set_active(_G(currentSceneDef).hotspots, "METAL RIM", false); _peasantShould = 2; player_set_commands_allowed(true); _guardComingDelay = 0; _peasantShoutingFl = true; _G(kernel).trigger_mode = KT_DAEMON; kernel_timing_trigger(60, 40, nullptr); break; case 5: _pipeFlag = false; _peasantShould = 0; _commandNotAllowedFl = true; _G(flags)[V043] = 1; break; default: break; } } } else if (takeFlag && player_said("SEVEN SPOKES")) { switch (_G(kernel).trigger) { case -1: if (inv_object_is_here("SEVEN SPOKES")) { player_set_commands_allowed(false); player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 1", 0, _G(player_info).x, _G(player_info).y, -_G(player_info).scale, 3840); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip low reach pos1", -1, nullptr); player_update_info(); series_play("rip low reach pos1", 512, 128, 1, 5, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 14); } break; case 1: player_update_info(); _ripTrekLowReacherPos5Mach = series_play("rip low reach pos1", 512, 130, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 14, 14); inv_give_to_player("SEVEN SPOKES"); kernel_examine_inventory_object("ping SEVEN SPOKES", _G(master_palette), 5, 1, 241, 217, 2, nullptr, -1); terminateMachine(_sevenSpokesMach); break; case 2: terminateMachine(_ripTrekLowReacherPos5Mach); player_update_info(); series_play("rip low reach pos1", 512, 130, 3, 5, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y, 0, 14); digi_play("207_s05", 2); break; case 3: ws_unhide_walker(); terminateMachine(_safariShadow3Mach); series_unload(_ripTrekLowReacherPos1Series); hotspot_set_active(_G(currentSceneDef).hotspots, "SEVEN SPOKES", false); player_set_commands_allowed(true); break; default: break; } } else if (!_pipeFlag && lookFlag && player_said("REBUS AMULET") && !inv_object_is_here("REBUS AMULET")) { if (_G(flags)[V074] == 0) { _G(flags)[V074] = 1; digi_play("207r04", 1); } else digi_play("207r04a", 1); } else if (!_pipeFlag && lookFlag && player_said("junkpile")) { if (_G(flags)[V061] == 0 && _G(flags)[V063] == 0) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 3", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3849); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip trek arms x pos3", -1, nullptr); _ripHeadDownTalkOffTd33Series2 = series_load("rip head down talk off td33", -1, nullptr); _digi207r04PlayedFl = false; player_update_info(); _ripTrekLowReachMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 1024, false, triggerMachineByHashCallback, "rip exchange goods"); sendWSMessage_10000(1, _ripTrekLowReachMach, _ripTrekLowReacherPos1Series, 1, 15, 1, _ripTrekLowReacherPos1Series, 1, 1, 0); break; case 1: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 1, 3, 2, _ripHeadDownTalkOffTd33Series2, 3, 3, 0); break; case 2: if (_G(flags)[V036] == 0) digi_play("207r03b", 1, 255, 8, -1); else digi_play("207r03", 1, 255, 3, -1); sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 3, -1, _ripHeadDownTalkOffTd33Series2, 3, 3, 0); break; case 3: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 3, -1, _ripHeadDownTalkOffTd33Series2, 3, 5, 1); digi_play("207r03a", 1, 255, 4, -1); break; case 4: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 3, -1, _ripHeadDownTalkOffTd33Series2, 3, 3, 1); _peasantShould = 6; break; case 5: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 1, 6, _ripTrekLowReacherPos1Series, 15, 15, 0); break; case 6: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripTrekLowReacherPos1Series, 15, 1, 7, _ripTrekLowReacherPos1Series, 1, 1, 0); break; case 7: terminateMachine(_ripTrekLowReachMach); terminateMachine(_safariShadow3Mach); series_unload(_ripHeadDownTalkOffTd33Series2); series_unload(_ripTrekLowReacherPos1Series); ws_unhide_walker(); player_set_commands_allowed(true); _G(flags)[V043] = 1; _G(flags)[V063] = 1; if (inv_object_is_here("REBUS AMULET")) hotspot_set_active(_G(currentSceneDef).hotspots, "REBUS AMULET", true); break; case 8: digi_play("207r34", 1, 255, 3, -1); break; default: break; } } else if (_G(flags)[V063] == 0) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _digi207r04PlayedFl = false; player_update_info(); _safariShadow3Mach = series_place_sprite("safari shadow 3", 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 3840); ws_hide_walker(_G(my_walker)); _ripTrekLowReacherPos1Series = series_load("rip trek arms x pos3", -1, nullptr); _ripHeadDownTalkOffTd33Series2 = series_load("rip head down talk off td33", -1, nullptr); player_update_info(); _ripTrekLowReachMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, _G(player_info).x, _G(player_info).y, _G(player_info).scale, 1024, false, triggerMachineByHashCallback, "rip exchange goods"); sendWSMessage_10000(1, _ripTrekLowReachMach, _ripTrekLowReacherPos1Series, 1, 15, 1, _ripTrekLowReacherPos1Series, 1, 1, 0); break; case 1: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 1, 3, 2, _ripHeadDownTalkOffTd33Series2, 3, 3, 0); break; case 2: digi_play("207r03b", 1, 255, 3, -1); sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 3, -1, _ripHeadDownTalkOffTd33Series2, 3, 3, 0); break; case 3: if (inv_object_is_here("REBUS AMULET")) { digi_play("207r34", 1, 255, 4, -1); } else { kernel_timing_trigger(1, 4, nullptr); } break; case 4: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripHeadDownTalkOffTd33Series2, 3, 1, 5, _ripHeadDownTalkOffTd33Series2, 15, 15, 0); break; case 5: sendWSMessage_10000(1, _ripTrekLowReachMach, _ripTrekLowReacherPos1Series, 15, 1, 6, _ripTrekLowReacherPos1Series, 1, 1, 0); break; case 6: terminateMachine(_ripTrekLowReachMach); terminateMachine(_safariShadow3Mach); series_unload(_ripHeadDownTalkOffTd33Series2); series_unload(_ripTrekLowReacherPos1Series); ws_unhide_walker(); player_set_commands_allowed(true); _G(flags)[V063] = 1; if (inv_object_is_here("REBUS AMULET")) { hotspot_set_active(_G(currentSceneDef).hotspots, "REBUS AMULET", true); } break; default: break; } } else { digi_play("207r03b", 1); } } else if (player_said("exit")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); disable_player_commands_and_fade_init(1); break; case 1: _G(game).setRoom(203); break; default: break; } } else if (lookFlag && player_said("peasant")) { if (_G(flags)[V062] == 0) { digi_play("207r01", 1); _G(flags)[V062] = 1; } else { digi_play("207r02", 1); } } else if (lookFlag && player_said("SEVEN SPOKES") && inv_object_is_here("SEVEN SPOKES")) { digi_play("207r08", 1); } else if (lookFlag && player_said("METAL RIM") && inv_object_is_here("METAL RIM")) { digi_play("207r21", 1); } else if (useFlag && (player_said("window") || player_said("door"))) { digi_play("207r33", 1); } else if (takeFlag && player_said("wooden rim")) { digi_play("207r25", 1); } else if (takeFlag && player_said("wheel")) { digi_play("207r26", 1); } else if (takeFlag && player_said("woodpile")) { digi_play("207r40", 1); } else if (takeFlag && player_said("vase")) { digi_play("207r27", 1); } else if (takeFlag && player_said("anvil")) { digi_play("207r28", 1); } else if (takeFlag && player_said("cart")) { digi_play("207r29", 1); } else if (takeFlag && player_said("sign")) { digi_play("207r30", 1); } else if (takeFlag && player_said("jars")) { digi_play("207r31", 1); } else if (takeFlag && player_said("vise")) { digi_play("207r32", 1); } else if (player_said("SOLDIER'S HELMET", "PEASANT")) { digi_play("203r64", 1); } else if (lookFlag && _G(walker).ripley_said(SAID)) { // No implementation } else if (inv_player_has(_G(player).verb) && player_said("peasant")) { digi_play("203r50", 1); } else if (lookFlag && player_said(" ")) { if (_G(flags)[V054] == 0) digi_play("207r23a", 1); else digi_play("207r23", 1); } else if (!player_said("xxx")) { return; } _G(player).command_ready = false; } void Room207::daemon() { switch (_G(kernel).trigger) { case 1: switch (imath_ranged_rand(1, 3)) { case 1: digi_play("950_s02", 3, 30, -1, -1); kernel_timing_trigger(1500, 1, nullptr); break; case 2: digi_play("950_s03", 3, 30, -1, -1); kernel_timing_trigger(1020, 1, nullptr); break; case 3: digi_play("950_s04", 3, 30, -1, -1); kernel_timing_trigger(540, 1, nullptr); break; default: break; } break; case 10: sendWSMessage_60000(_ppWalkerMach); series_play_xy("shadow pesky from 9 to squat", 1, 0, 514, 367, 97, 0, 5, -1); series_play_xy("peasant 3 to squat", 1, 0, 514, 367, 97, 0, 5, 11); break; case 11: series_play_xy("shadow pesky rock loop", -1, 0, 514, 367, 97, 3849, 300, -1); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 20, 101, _peskyRockLoopSeries, 20, 20, 0); player_set_commands_allowed(true); _peasantMode = 0; _peasantShould = 0; break; case 20: if (!_fieldC6 && _fieldC2 == 0 && _dispatchTriggerNum != -1) { kernel_trigger_dispatchx(_dispatchTriggerNum); _dispatchTriggerNum = -1; if (_hiddenWalkerFl) { ws_unhide_walker(); _hiddenWalkerFl = false; } if (_fieldA4) { sendWSMessage_80000(_ripInConvMach); _fieldA4 = false; } } kernel_timing_trigger(1, 21, nullptr); break; case 21: if (_fieldC6) break; switch (_fieldC2) { case 0: sendWSMessage_10000(1, _ripInConvMach, _ripHeadDownTalkOffTd33Series, 3, 3, 20, _ripHeadDownTalkOffTd33Series, 3, 3, 0); break; case 1: _G(kernel).trigger_mode = KT_PARSE; conv_load("conv203d", 10, 10, 747); conv_set_shading(65); conv_export_value_curr(_G(flags)[V054], 0); if (inv_player_has("REBUS AMULET")) conv_export_value_curr(0, 1); else conv_export_value_curr(_G(flags)[V063], 1); conv_export_value_curr(1, 2); conv_export_value_curr(_G(flags)[V073], 3); conv_export_value_curr(_G(flags)[V043], 5); conv_play(); _fieldC2 = 0; _G(kernel).trigger_mode = KT_DAEMON; kernel_timing_trigger(1, 20, nullptr); break; case 2: { const int32 rnd = imath_ranged_rand(3, 5); sendWSMessage_10000(1, _ripInConvMach, _ripHeadDownTalkOffTd33Series, rnd, rnd, 20, _ripHeadDownTalkOffTd33Series, rnd, rnd, 0); } break; case 3: sendWSMessage_10000(1, _ripInConvMach, _ripHeadDownTalkOffTd33Series, 3, 3, 24, _ripHeadDownTalkOffTd33Series, 3, 3, 0); break; default: break; } break; case 22: terminateMachine(_ripInConvMach); terminateMachine(_safariShadow3Mach); series_unload(_ripHeadDownTalkOffTd33Series); series_unload(_ripTrekArmsXPos3Series); ws_unhide_walker(); player_set_commands_allowed(true); break; case 23: sendWSMessage_10000(1, _ripInConvMach, _ripHeadDownTalkOffTd33Series, 1, 3, 20, _ripHeadDownTalkOffTd33Series, 3, 3, 0); break; case 24: sendWSMessage_10000(1, _ripInConvMach, _ripTrekArmsXPos3Series, 15, 1, 22, _ripTrekArmsXPos3Series, 1, 1, 0); break; case 40: if (_peasantShoutingFl) { ++_guardComingDelay; if (_guardComingDelay < 20) { kernel_timing_trigger(60, 40, nullptr); } else { other_save_game_for_resurrection(); disable_player_commands_and_fade_init(749); _G(flags)[V067] = 1; } } break; case 50: player_set_commands_allowed(true); break; case 100: if (_peasantMode != 0 || _peasantShould != 0 || _dispatchTriggerNum == -1) { kernel_trigger_dispatchx(kernel_trigger_create(101)); break; } kernel_trigger_dispatchx(_dispatchTriggerNum); _dispatchTriggerNum = -1; if (_hiddenWalkerFl) { ws_unhide_walker(); _hiddenWalkerFl = false; } kernel_trigger_dispatchx(kernel_trigger_create(101)); break; case 101: switch (_peasantMode) { case 2: if (_peasantShould == 2) { if (_commandNotAllowedFl) { _commandNotAllowedFl =false; player_set_commands_allowed(true); } ++_field8A; if (imath_ranged_rand(15, 40) < _field8A) { _fieldAE_rnd = imath_ranged_rand(1, 3); _field8A = 0; } if (_ripForegroundFl) { switch (_fieldAE_rnd) { case 1: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 19, 19, 100, _peskyPointsRipForegroundSeries, 19, 19, 0); break; case 2: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 20, 20, 100, _peskyPointsRipForegroundSeries, 20, 20, 0); break; case 3: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 21, 21, 100, _peskyPointsRipForegroundSeries, 21, 21, 0); break; default: break; } } else { switch (_fieldAE_rnd) { case 1: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 19, 19, 100, _peskyPointsRipBackgroundSeries, 19, 19, 0); break; case 2: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 20, 20, 100, _peskyPointsRipBackgroundSeries, 20, 20, 0); break; case 3: sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 21, 21, 100, _peskyPointsRipBackgroundSeries, 21, 21, 0); break; default: break; } } } else if (_peasantShould == 3) { if (_ripForegroundFl) sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 17, 17, 100, _peskyPointsRipForegroundSeries, 17, 17, 1); else sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 17, 17, 100, _peskyPointsRipBackgroundSeries, 17, 17, 1); _peasantMode = 3; } else { // _peasantShould != 2 && _peasantShould != 3 if (_ripForegroundFl) sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 18, 1, 115, _peskyRockLoopSeries, 1, 1, 0); else sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 18, 1, 118, _peskyRockLoopSeries, 1, 1, 0); _peasantMode = 0; hotspot_set_active(_G(currentSceneDef).hotspots, "PEASANT", true); } break; case 3: if (_peasantShould == 3) { if (_digiName) { _G(kernel).trigger_mode = _nextTriggerMode; digi_play(_digiName, 1, 255, _digiTriggerNum, 203); _digiName = nullptr; _nextTriggerMode = KT_DAEMON; _G(kernel).trigger_mode = KT_DAEMON; _pipeFlag = true; } const int32 rnd = imath_ranged_rand(17, 21); if (_ripForegroundFl) { sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, rnd, rnd, 100, _peskyPointsRipForegroundSeries, rnd, rnd, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, rnd, rnd, 100, _peskyPointsRipBackgroundSeries, rnd, rnd, 0); } sendWSMessage_190000(_ppSquatMach, 13); sendWSMessage_1a0000(_ppSquatMach, 13); } else { if (_ripForegroundFl) { sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipForegroundSeries, 17, 17, 100, _peskyPointsRipForegroundSeries, 17, 17, 1); } else { sendWSMessage_10000(1, _ppSquatMach, _peskyPointsRipBackgroundSeries, 17, 17, 100, _peskyPointsRipBackgroundSeries, 17, 17, 1); } _peasantMode = 2; } break; case 6: if (_peasantShould == 6) { if (_digi207r04PlayedFl) { if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 52, 1, 104, _withoutAmuletSeries, 1, 1, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 52, 1, 104, _ppShowsAmuletTakesMoneySeries, 1, 1, 0); } } else { digi_play("207r04", 1, 255, 100, -1); _digi207r04PlayedFl = true; } } else { if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 52, 1, 100, _withoutAmuletSeries, 1, 1, 1); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 52, 1, 100, _ppShowsAmuletTakesMoneySeries, 1, 1, 1); } _peasantMode = 0; } break; case 7: if (_peasantShould == 7) { if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 52, 52, -1, _withoutAmuletSeries, 52, 52, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 52, 52, -1, _ppShowsAmuletTakesMoneySeries, 52, 52, 0); } _peasantMode = 8; inv_give_to_player("REBUS AMULET"); hotspot_set_active(_G(currentSceneDef).hotspots, "REBUS AMULET", false); kernel_examine_inventory_object("ping rebus amulet", _G(master_palette), 5, 1, 329, 250, 103, nullptr, -1); } break; case 8: if (_peasantShould == 8) { if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 52, 52, 100, _withoutAmuletSeries, 52, 52, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 52, 52, 100, _ppShowsAmuletTakesMoneySeries, 52, 52, 0); } } break; case 9: if (_peasantShould == 9) { if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 16, 16, -1, _withoutAmuletSeries, 16, 16, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 16, 16, -1, _ppShowsAmuletTakesMoneySeries, 16, 16, 0); } kernel_timing_trigger(60, 100, nullptr); _peasantMode = 10; } break; case 10: if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 16, 1, 100, _withoutAmuletSeries, 1, 1, 0); _peasantMode = 11; } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 16, 1, 100, _ppShowsAmuletTakesMoneySeries, 1, 1, 0); _peasantMode = 11; } break; case 11: terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); _G(kernel).trigger_mode = KT_PARSE; kernel_timing_trigger(1, 4, nullptr); _peasantMode = 0; _peasantShould = 0; break; case 12: terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); if (inv_object_is_here("REBUS AMULET")) _rebusAmuletMach = series_show_sprite("rebus amulet", 0, 3840); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); _peasantMode = 0; _peasantShould = 0; break; case 14: switch (_peasantShould) { case 6: terminateMachine(_rebusAmuletMach); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 16, 52, 106, _withoutAmuletSeries, 52, 52, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 16, 52, 106, _ppShowsAmuletTakesMoneySeries, 52, 52, 0); } break; case 14: if (inv_player_has("REBUS AMULET")) { const int32 rnd = imath_ranged_rand(75, 77); sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, rnd, rnd, 100, _withoutAmuletSeries, rnd, rnd, 0); } else { const int32 rnd = imath_ranged_rand(75, 77); sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, rnd, rnd, 100, _ppShowsAmuletTakesMoneySeries, rnd, rnd, 0); } break; case 15: if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 75, 75, 100, _withoutAmuletSeries, 75, 75, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 75, 75, 100, _ppShowsAmuletTakesMoneySeries, 75, 75, 0); } break; default: if (inv_player_has("REBUS AMULET")) sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 14, 1, 105, _withoutAmuletSeries, 1, 1, 0); else sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 14, 1, 105, _ppShowsAmuletTakesMoneySeries, 1, 1, 0); break; } break; // case 14 case 16: if (_peasantShould == 16) { kernel_timing_trigger(30, 100, nullptr); } else { digi_play("203p01", 1); sendWSMessage_10000(1, _ppSquatMach, _peskyBegLoopSeries, 15, 1, 111, _peskyBegLoopSeries, 1, 1, 0); } break; default: if (_peasantMode <= 0) { if (_peasantShould == 6) { terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 3840, false, triggerMachineByHashCallback, "pp squat"); terminateMachine(_rebusAmuletMach); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 1, 52, 100, _withoutAmuletSeries, 52, 52, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 1, 52, 100, _ppShowsAmuletTakesMoneySeries, 52, 52, 0); } _peasantMode = 6; } else if (_peasantShould == 7) { terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 3840, false, triggerMachineByHashCallback, "pp squat"); terminateMachine(_rebusAmuletMach); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 1, 52, 100, _withoutAmuletSeries, 52, 52, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 1, 52, 100, _ppShowsAmuletTakesMoneySeries, 52, 52, 0); } _peasantMode = 7; } else if (_peasantShould == 9) { terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 3840, false, triggerMachineByHashCallback, "pp squat"); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 1, 16, 100, _withoutAmuletSeries, 16, 16, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 1, 16, 100, _ppShowsAmuletTakesMoneySeries, 16, 16, 0); } _peasantMode = 9; } else if (_peasantShould == 13) { terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 3840, false, triggerMachineByHashCallback, "pp squat"); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 1, 14, 100, _withoutAmuletSeries, 14, 14, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 1, 14, 100, _ppShowsAmuletTakesMoneySeries, 14, 14, 0); } _peasantShould = 15; _peasantMode = 14; } else if (_peasantShould == 16) { terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); sendWSMessage_10000(1, _ppSquatMach, _peskyBegLoopSeries, 1, 15, 110, _peskyBegLoopSeries, 15, 15, 0); _peasantMode = 16; } else if (_peasantShould <= 0) { if (_commandNotAllowedFl) { _commandNotAllowedFl = false; player_set_commands_allowed(true); } if (_digiName) { _G(kernel).trigger_mode = _nextTriggerMode; digi_play(_digiName, 1, 255, _digiTriggerNum, 203); _digiName = nullptr; _nextTriggerMode = KT_DAEMON; _G(kernel).trigger_mode = KT_DAEMON; } if (imath_ranged_rand(1, 2) == 1) { sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 10, 100, _peskyRockLoopSeries, 10, 10, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 11, 20, 100, _peskyRockLoopSeries, 20, 20, 0); } } else { int32 series; if (_ripForegroundFl) { series = _peskyPointsRipForegroundSeries = series_load("pesky points at rip foreground", -1, nullptr); } else { series = _peskyPointsRipBackgroundSeries = series_load("pesky points at rip background", -1, nullptr); } sendWSMessage_10000(1, _ppSquatMach, series, 1, 21, 100, series, 21, 21, 1); _peasantMode = 2; } } break; } break; case 102: _peasantShould = 2; _peasantMode = 2; player_set_commands_allowed(true); _pipeFlag = true; kernel_timing_trigger(1, 100, nullptr); _guardComingDelay = 0; _peasantShoutingFl = true; kernel_timing_trigger(60, 40, nullptr); break; case 103: Common::strcpy_s(_G(player).verb, "give"); Common::strcpy_s(_G(player).noun, "money"); if (inv_player_has("REBUS AMULET")) { sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 53, 74, 100, _withoutAmuletSeries, 74, 74, 0); } else { sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 53, 74, 100, _ppShowsAmuletTakesMoneySeries, 74, 74, 0); } _peasantMode = 12; _commandNotAllowedFl = true; _G(kernel).trigger_mode = KT_PARSE; kernel_timing_trigger(1,4,nullptr); break; case 104: _peasantMode = 12; _G(kernel).trigger_mode = KT_PARSE; kernel_timing_trigger(30, 5, nullptr); _G(kernel).trigger_mode = KT_DAEMON; kernel_timing_trigger(1, 100, nullptr); break; case 105: terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); _peasantMode = 0; break; case 106: kernel_timing_trigger(150, 107, nullptr); break; case 107: if (inv_player_has("REBUS AMULET")) sendWSMessage_10000(1, _ppSquatMach, _withoutAmuletSeries, 52, 1, 108, _withoutAmuletSeries, 1, 1, 0); else sendWSMessage_10000(1, _ppSquatMach, _ppShowsAmuletTakesMoneySeries, 52, 1, 108, _ppShowsAmuletTakesMoneySeries, 1, 1, 0); _peasantShould = 0; _peasantMode = 0; break; case 108: terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); _rebusAmuletMach = series_show_sprite("rebus amulet", 0, 3840); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); _peasantMode = 0; _fieldC2 = 3; _commandNotAllowedFl = false; _node1Entry2Fl = false; break; case 110: Common::strcpy_s(_G(player).verb, "handout"); kernel_timing_trigger(1, 100, nullptr); _G(kernel).trigger_mode = KT_PARSE; kernel_timing_trigger(1, 3, nullptr); break; case 111: terminateMachine(_ppSquatMach); _ppSquatMach = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 514, 367, 97, 3840, false, triggerMachineByHashCallback, "pp squat"); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); _peasantMode = 0; _commandNotAllowedFl = true; break; case 115: kernel_timing_trigger(1, 116, nullptr); break; case 116: series_unload(_peskyPointsRipForegroundSeries); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); break; case 118: kernel_timing_trigger(1, 119, nullptr); break; case 119: series_unload(_peskyPointsRipBackgroundSeries); sendWSMessage_10000(1, _ppSquatMach, _peskyRockLoopSeries, 1, 1, 100, _peskyRockLoopSeries, 1, 1, 0); break; case 749: _G(game).setRoom(203); break; default: break; } } void Room207::convHandler() { const int32 who = conv_whos_talking(); if (_G(kernel).trigger == 1) { if (who <= 0) _peasantShould = 15; else if (who == 1) _fieldC2 = 0; } else { if (who <= 0) _peasantShould = 14; else if (who == 1) { _fieldC2 = 2; if (conv_current_node() == 1 && conv_current_entry() == 2) _node1Entry2Fl = true; } if (conv_sound_to_play() != nullptr) { digi_play(conv_sound_to_play(), 1, 255, 1, 203); return; } } conv_resume(conv_get_handle()); } void Room207::syncGame(Common::Serializer &s) { s.syncAsByte(_pipeFlag); s.syncAsByte(_commandNotAllowedFl); s.syncAsByte(_ripForegroundFl); s.syncAsSint32LE(_peasantMode); s.syncAsSint32LE(_peasantShould); s.syncAsSint32LE(_field8A); s.syncAsSint32LE(_fieldAE_rnd); } } // namespace Rooms } // namespace Riddle } // namespace M4