/* 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; --i) { if (dx >= descArr[i]) break; } } hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN", false); hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false); hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false); hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false); hotspot_set_active(_G(currentSceneDef).hotspots, "MEI CHEN ", false); _guessHotspotName = Common::String("MEI CHEN "); _unkArrayIndex = i; _unkArray[_unkArrayIndex] = 0; _guessX = fullArr[i]; if (ascendingFl) _guessIndex = 11; else _guessIndex = 1; return fullArr[i]; } void Section8Room::preload() { _G(player).walker_type = WALKER_ALT; _G(player).shadow_type = SHADOW_ALT; } void Section8Room::pre_parser() { int16 caty = -1; if (player_said("look") || player_said("look at")) caty = 1; else if (player_said("gear") || player_said("use")) caty = 0; else if (player_said("take")) caty = 2; else if (player_said("talk to")) caty = 3; else if (player_said("go")) caty = 5; if (caty == 0 && (player_said("chariot") || player_said("chariot ") || scumm_strnicmp(_G(player).noun, "1st", 3) == 0 || scumm_strnicmp(_G(player).noun, "2nd", 3) == 0 || scumm_strnicmp(_G(player).noun, "3rd", 3) == 0 || scumm_strnicmp(_G(player).noun, "4th", 3) == 0 || scumm_strnicmp(_G(player).noun, "5th", 3) == 0 || scumm_strnicmp(_G(player).noun, "6th", 3) == 0 || scumm_strnicmp(_G(player).noun, "7th", 3) == 0)) { _G(player).need_to_walk = false; _G(player).ready_to_walk = true; _G(player).waiting_for_walk = false; } if ((caty == 1 && scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) || caty == 5) { _G(player).need_to_walk = false; _G(player).ready_to_walk = true; _G(player).waiting_for_walk = false; } } void Section8Room::parser() { _G(player).command_ready = false; if (scumm_strnicmp(_G(player).noun, "mei chen", 8) && inv_player_has(_G(player).verb)) { digi_play("com017", 1, 255, -1, 997); return; } if (player_said("journal") && !player_said("look at")) { digi_play("com042", 1, 255, -1, 997); return; } int32 caty = -1; if (player_said("look") || player_said("look at")) { caty = 1; } else if (player_said("gear") || player_said("use")) { caty = 0; } else if (player_said("take")) { caty = 2; } else if (player_said("talk to")) { caty = 3; } else if (player_said("walk to") || player_said("spleen")) { caty = 4; } else if (player_said("go")) { caty = 5; } switch (caty) { case -1: _G(player).command_ready = true; break; case 0: if (player_said("chariot") || player_said("chariot ")) { switch (_G(kernel).trigger) { case -1: switch (_currentRoom) { case 804: ws_walk(_G(my_walker), 696, 330, nullptr, 10, 9, true); break; case 814: ws_walk(_G(my_walker), 851, 330, nullptr, 10, 9, true); break; case 824: ws_walk(_G(my_walker), 1627, 318, nullptr, 50, 3, true); break; case 834: digi_play("834r20", 1, 255, -1, -1); break; case 844: ws_walk(_G(my_walker), 1216, 330, nullptr, 10, 9, true); break; default: break; } break; case 10: player_set_commands_allowed(false); ws_hide_walker(_G(my_walker)); switch (_currentRoom) { case 804: _ripAttemptsPush = series_load("rip attempts char push", -1, nullptr); _ripPushMach = series_plain_play("RIP ATTEMPTS CHAR PUSH", 1, 0, 100, 0, 5, 20, true); break; case 814: _ripAttemptsPush = series_load("rip attempts char push", -1, nullptr); _ripPushMach = series_plain_play("rip tries to push cart", 1, 0, 100, 0, 5, 20, true); break; case 844: _ripAttemptsPush = series_load("rip attempts char push", -1, nullptr); _ripPushMach = series_plain_play("844push", 1, 0, 100, 0, 5, 20, true); break; default: break; } break; case 20: kernel_timing_trigger(120, 30, nullptr); digi_play("950_s32", 2, 255, -1, -1); break; case 30: // The original wasn't terminating the machine before starting a new, leading in a double animation during the duration of this second animation. // This call has been added to fix the issue terminateMachine(_ripPushMach); switch (_currentRoom) { case 804: _ripPushMach = series_plain_play("RIP ATTEMPTS CHAR PUSH", 1, 2, 100, 0, 5, 40, true); break; case 814: _ripPushMach = series_plain_play("rip tries to push cart", 1, 2, 100, 0, 5, 40, true); break; case 844: _ripPushMach = series_plain_play("844push", 1, 2, 100, 0, 5, 40, true); break; default: break; } break; case 40: player_set_commands_allowed(true); series_unload(_ripAttemptsPush); digi_play("814R26", 1, 255, -1, -1); terminateMachine(_ripPushMach); ws_unhide_walker(_G(my_walker)); ws_demand_facing(_G(my_walker), 9); break; case 50: player_set_commands_allowed(false); terminateMachine(_824fire1Mach); terminateMachine(_824fire2Mach); series_unload(_ripTakerPos5); series_unload(_824fire2Serie); digi_preload("950_s33", -1); ws_hide_walker(_G(my_walker)); terminateMachine(_ripPushMach); _ripPushMach = series_stream("824rp01", 5, 256, -1); series_stream_break_on_frame(_ripPushMach, 80, 60); digi_play_loop("950_s33", 2, 255, -1, -1); break; case 60: disable_player_commands_and_fade_init(70); break; case 70: _G(flags)[V270] = 805; _G(game).setRoom(805); adv_kill_digi_between_rooms(false); digi_preload("950_s29", -1); digi_play_loop("950_s29", 3, 96, -1, -1); break; default: break; } } // if (player_said("chariot") || player_said("chariot ")) else if (scumm_strnicmp(_G(player).noun, "1st", 3) == 0 || scumm_strnicmp(_G(player).noun, "2nd", 3) == 0 || scumm_strnicmp(_G(player).noun, "3rd", 3) == 0 || scumm_strnicmp(_G(player).noun, "4th", 3) == 0 || scumm_strnicmp(_G(player).noun, "5th", 3) == 0 || scumm_strnicmp(_G(player).noun, "6th", 3) == 0 || scumm_strnicmp(_G(player).noun, "7th", 3) == 0) { _coordArrayId = _G(player).noun[0] - 0x30; // Thus a number between 1 and 7 _G(kernel).trigger_mode = KT_DAEMON; kernel_trigger_dispatchx(kernel_trigger_create(15)); } else if (player_said("horse") || player_said("fallen horse")) { // The original has 2 distinct tests but the same content -> merged digi_play("com069", 1, 255, -1, 997); } else if (player_said("soldier")) digi_play("com070", 1, 255, -1, 997); else if (player_said("soldier ")) { switch (_G(kernel).trigger) { case -1: digi_play("com070", 1, 255, -1, 997); break; case 10: digi_play("com071", 1, 255, -1, 997); break; default: break; } } else if (player_said("lit urn")) digi_play("com072", 1, 255, -1, 997); else if (player_said("unlit urn")) digi_play("com073", 1, 255, -1, 997); else _G(player).command_ready = true; break; // caty case 0 case 1: if (player_said(" ")) digi_play("com059", 1, 255, -1, 997); else if (player_said("wooden beam") && inv_object_in_scene("wooden beam", _currentRoom)) digi_play("844r12", 1, 255, -1, -1); else if (scumm_strnicmp(_G(player).noun, "1st", 3) == 0 || scumm_strnicmp(_G(player).noun, "2nd", 3) == 0 || scumm_strnicmp(_G(player).noun, "3rd", 3) == 0 || scumm_strnicmp(_G(player).noun, "4th", 3) == 0 || scumm_strnicmp(_G(player).noun, "5th", 3) == 0 || scumm_strnicmp(_G(player).noun, "6th", 3) == 0 || scumm_strnicmp(_G(player).noun, "7th", 3) == 0) { switch (_currentRoom) { case 804: case 814: _currentSeriesName = Common::String::format("%dr%02d", _currentRoom, _G(player).noun[0] - 0x2B); break; case 824: case 834: _currentSeriesName = Common::String::format("%dr%02d", _currentRoom, _G(player).noun[0] - 0x2F); break; case 844: _currentSeriesName = Common::String::format("%dr%02d", _currentRoom, _G(player).noun[0] - 0x2E); break; default: break; } digi_play(_currentSeriesName.c_str(), 1, 255, -1, -1); } else if (player_said("lit urn")) digi_play("com060", 1, 255, -1, 997); else if (player_said("unlit urn")) digi_play("com061", 1, 255, -1, 997); else if (player_said("broken beam")) digi_play("804r15", 1, 255, -1, -1); else if (player_said("tipped soldier")) digi_play("com062", 1, 255, -1, 997); else if (player_said("fallen soldier") || player_said("fallen horse")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); player_update_info(_G(my_walker), &_G(player_info)); _savedPlayerInfoFacing = _G(player_info).facing; _rptldSerie = series_load("rptld1a", -1, nullptr); setGlobals3(_rptldSerie, 1, 6); sendWSMessage_3840000(_G(my_walker), 10); break; case 10: if (player_said("fallen soldier")) digi_play("com062", 1, 255, 20, 997); else digi_play("814r18", 1, 255, 20, -1); break; case 20: setGlobals3(_rptldSerie, 6, 1); sendWSMessage_3840000(_G(my_walker), 30); break; case 30: player_set_commands_allowed(true); series_unload(_rptldSerie); ws_demand_facing(_G(my_walker), _savedPlayerInfoFacing); break; default: break; } } // player_said("fallen soldier") || player_said("fallen horse") else if (player_said("mural")) digi_play("com064", 1, 255, -1, 997); else if (player_said("chariot") || player_said("chariot ")) digi_play("com063", 1, 255, -1, 997); else if (player_said("horse")) digi_play("com101", 1, 255, -1, 997); else if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) { if (_G(kernel).trigger == -1) { player_update_info(_G(my_walker), &_G(player_info)); _savedPlayerInfoFacing = _G(player_info).facing; _savedPlayerInfoX = _G(player_info).x; _savedPlayerInfoY = _G(player_info).y; player_update_info(_mcTrekMach, &_G(player_info)); if (_G(player_info).x >= _savedPlayerInfoX) { if (_G(player_info).x - _savedPlayerInfoX <= 30) ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 5, true); else ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 4, true); } else { if (_savedPlayerInfoX - _G(player_info).x <= 30) ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 7, true); else ws_walk(_G(my_walker), _savedPlayerInfoX, _savedPlayerInfoY, nullptr, 10, 8, true); } } else if (_G(kernel).trigger == 10) { digi_play("COM043", 1, 255, -1, 997); } } // if (player_said("horse") && scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) else if (player_said("soldier") || player_said("soldier ")) // The original has two separate checks with the same underlying code => merged digi_play("com074", 1, 255, -1, 997); else _G(player).command_ready = true; break; // caty case 1 case 2: if (player_said("chariot")) { switch (_currentRoom) { case 834: digi_play("834r15", 1, 255, -1, -1); break; case 844: digi_play("814r21", 1, 255, -1, -1); break; default: digi_play("804r20", 1, 255, -1, -1); break; } } // if (player_said("chariot")) else if (player_said("chariot ")) digi_play("814r21", 1, 255, -1, -1); else if (player_said("horse") || player_said("fallen horse")) // The original has two separate checks with the same underlying code => merged digi_play("com065", 1, 255, -1, 997); else if (player_said("soldier") || player_said("soldier ")) // The original has two separate checks with the same underlying code => merged digi_play("com066", 1, 255, -1, 997); else if (player_said("lit urn")) digi_play("com067", 1, 255, -1, 997); else if (player_said("unlit urn")) digi_play("com068", 1, 255, -1, 997); else if (player_said("wooden beam")) { switch (_G(kernel).trigger) { case -1: if (inv_object_in_scene("wooden beam", 844)) { player_set_commands_allowed(false); _ripTrekLowReach = series_load("RIP TREK LOW REACH POS2", -1, nullptr); setGlobals3(_ripTrekLowReach, 1, 16); sendWSMessage_3840000(_G(my_walker), 10); } else _G(player).command_ready = true; break; case 10: inv_give_to_player("WOODEN BEAM"); kernel_examine_inventory_object("PING WOODEN BEAM", _G(master_palette), 5, 1, 410, 250, 20, nullptr, -1); break; case 20: terminateMachine(_844postMach); setGlobals3(_ripTrekLowReach, 16, 1); sendWSMessage_3840000(_G(my_walker), 30); digi_play("844r22", 1, 255, -1, -1); break; case 30: player_set_commands_allowed(true); series_unload(_ripTrekLowReach); hotspot_set_active(_G(currentSceneDef).hotspots, "wooden beam", false); ws_demand_facing(_G(my_walker), 2); break; default: break; } } // if (player_said("wooden beam")) break; // caty case 2 case 3: if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); _ripTakerPos5 = series_load("RIP TALKER POS 5", -1, nullptr); setGlobals1(_ripTakerPos5, 1, 4, 1, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); sendWSMessage_110000(_G(my_walker), -1); _savedRandom = imath_ranged_rand(1, 4); switch (_savedRandom) { case 1: digi_play("com044", 1, 255, 10, 997); break; case 2: digi_play("com045", 1, 255, 10, 997); break; case 3: digi_play("com046", 1, 255, 10, 997); break; default: digi_play("com047", 1, 255, 10, 997); break; } break; case 10: player_set_commands_allowed(true); sendWSMessage_150000(_G(my_walker), -1); series_unload(_ripTakerPos5); _savedRandom = imath_ranged_rand(1, 4); switch (_savedRandom) { case 1: digi_play("com048", 1, 255, -1, 997); break; case 2: digi_play("com049", 1, 255, -1, 997); break; case 3: digi_play("com050", 1, 255, -1, 997); break; default: digi_play("com051", 1, 255, -1, 997); break; } break; default: break; } } // if (scumm_strnicmp(_G(player).noun, "mei chen", 8) == 0) else _G(player).command_ready = true; break; // caty case 3 case 5: switch (_G(kernel).trigger) { case -1: if (player_said("west")) { _savedNextRoom = 803; if (_currentRoom == 804 || _currentRoom == 814 || _currentRoom == 844) ws_walk(_G(my_walker), -10, 325, nullptr, 10, 3, true); else if (_currentRoom == 824) ws_walk(_G(my_walker), -10, 328, nullptr, 10, 3, true); else if (_currentRoom == 834) ws_walk(_G(my_walker), -10, 330, nullptr, 10, 3, true); } else { _savedNextRoom = 805; if (_currentRoom == 804 || _currentRoom == 814 || _currentRoom == 844) ws_walk(_G(my_walker), 1925, 325, nullptr, 10, 3, true); else if (_currentRoom == 824) ws_walk(_G(my_walker), 1925, 328, nullptr, 10, 3, true); else if (_currentRoom == 834) ws_walk(_G(my_walker), 1925, 330, nullptr, 10, 3, true); } break; case 10: player_set_commands_allowed(false); if (_G(flags)[V276] == 0) { setGlobals3(_meiHandsBehindBack, 17, 1); sendWSMessage_3840000(_mcTrekMach, -1); } disable_player_commands_and_fade_init(20); break; case 20: _G(game).setRoom(_savedNextRoom); adv_kill_digi_between_rooms(false); digi_preload("950_s29", -1); digi_play_loop("950_s29", 3, 255, -1, -1); break; default: break; } break; // caty case 5 default: break; } } void Section8Room::daemon() { int32 _greenSoldierCoordX[] = {1815, 1080, 1157, 1241, 1319, 1402, 1478, 1561}; int32 _purpleSoldierCoordX[] = {1561, 874, 949, 1034, 1117, 1198, 1276, 1355}; int32 _yellowSoldierCoordX[] = {1355, 624, 702, 787, 865, 949, 1027, 1110}; int32 _blueSoldierCoordX[] = {1110, 278, 351, 439, 519, 601, 679, 756}; int32 _redSoldierCoordX[] = {756, 1219, 1301, 1383, 1466, 1548, 1626, 1701}; switch (_G(kernel).trigger) { case 1: _byte1A19BC = 1; // Seems to be set once and never accessed otherwise... _field68 = 0; player_set_commands_allowed(true); if (_G(flags)[V276] == 0) { series_unload(S8_SHADOW_DIRS2[0]); series_unload(S8_SHADOW_DIRS2[1]); series_unload(S8_SHADOW_DIRS2[2]); series_unload(S8_SHADOW_DIRS2[3]); series_unload(S8_SHADOW_DIRS2[4]); series_unload(S8_SHADOW_DIRS1[3]); series_unload(S8_SHADOW_DIRS1[4]); _meiHandsBehindBack = series_load("MEI CHIEN HANDS BEHIND BACK", -1, nullptr); setGlobals3(_meiHandsBehindBack, 1, 17); sendWSMessage_3840000(_mcTrekMach, 4); _guessHotspotName = Common::String("MEI CHEN "); _unkArray[_unkArrayIndex] = 0; kernel_timing_trigger(imath_ranged_rand(1200, 1800), 5, nullptr); // CHECKME: CouldMakeMem(); } break; case 2: player_update_info(_mcTrekMach, &_G(player_info)); if (-_G(game_buff_ptr)->x1 < _G(player_info).x) { if (-_G(game_buff_ptr)->x1 + 639 <= _G(player_info).x) { _field68 = 1; series_unload(_meiHandsBehindBack); series_load(S8_SHADOW_NAMES2[0], S8_SHADOW_DIRS2[0], nullptr); series_load(S8_SHADOW_NAMES2[1], S8_SHADOW_DIRS2[1], nullptr); series_load(S8_SHADOW_NAMES2[2], S8_SHADOW_DIRS2[2], nullptr); int32 varX = daemonSub1(_G(player_info).x, true); ws_walk(_mcTrekMach, varX, 400, nullptr, 3, 11, true); } else { kernel_timing_trigger(60, 2, nullptr); } } else { _field68 = 1; series_unload(_meiHandsBehindBack); series_load(S8_SHADOW_NAMES2[0], S8_SHADOW_DIRS2[0]); series_load(S8_SHADOW_NAMES2[1], S8_SHADOW_DIRS2[1]); series_load(S8_SHADOW_NAMES2[2], S8_SHADOW_DIRS2[2]); int32 varX = daemonSub1(_G(player_info).x, false); ws_walk(_mcTrekMach, varX, 400, nullptr, 3, 1, true); } break; case 3: series_unload(S8_SHADOW_DIRS2[0]); series_unload(S8_SHADOW_DIRS2[1]); series_unload(S8_SHADOW_DIRS2[2]); _meiHandsBehindBack = series_load("MEI CHIEN HANDS BEHIND BACK", -1, nullptr); setGlobals3(_meiHandsBehindBack, 1, 17); sendWSMessage_3840000(_mcTrekMach, 4); break; case 4: _field68 = 0; hotspot_set_active(_G(currentSceneDef).hotspots, _guessHotspotName.c_str(), true); kernel_trigger_dispatchx(kernel_trigger_create(2)); break; case 5: if (g_engine->game_camera_panning() || _field68 != 0 || !player_commands_allowed() || !checkStrings()) { kernel_timing_trigger(60, 5, nullptr); } else { player_set_commands_allowed(false); intr_cancel_sentence(); switch (imath_ranged_rand(1, 4)) { case 1: digi_play("950_s15", 2, 255, 6, -1); break; case 2: digi_play("950_s16", 2, 255, 6, -1); break; case 3: digi_play("950_s17", 2, 255, 6, -1); break; default: digi_play("950_s18", 2, 255, 6, -1); break; } } break; case 6: player_update_info(_G(my_walker), &_G(player_info)); switch (_G(player_info).facing) { case 1: case 2: case 3: case 4: ws_walk(_G(my_walker), _G(player_info).x, _G(player_info).y, nullptr, 7, 3, true); _guessFacing = 3; break; case 5: kernel_timing_trigger(30, 7, "phantom reaction"); _guessFacing = 5; break; case 7: kernel_timing_trigger(30, 7, "phantom reaction"); _guessFacing = 7; break; case 8: case 9: case 10: case 11: ws_walk(_G(my_walker), _G(player_info).x, _G(player_info).y, nullptr, 7, 9, true); _guessFacing = 9; break; default: break; } break; case 7: _counter1 = 0; series_unload(_meiHandsBehindBack); _mctdSerie = series_load("mctd82a", -1, nullptr); setGlobals3(_mctdSerie, 1, 22); sendWSMessage_3840000(_mcTrekMach, 11); if (_guessFacing == 3 || _guessFacing == 9) { _ripLooksAround = series_load("RIP POS 3 LOOK AROUND", -1, nullptr); setGlobals3(_ripLooksAround, 1, 20); } else { _ripLooksAround = series_load("RIP LOOKS AROUND IN AWE", -1, nullptr); setGlobals3(_ripLooksAround, 1, 14); } sendWSMessage_3840000(_G(my_walker), 10); _case7RandVal = imath_ranged_rand(1, 4); switch (_case7RandVal) { case 1: digi_play("COM052", 1, 255, 8, 997); break; case 2: digi_play("COM054", 1, 255, 8, 997); break; case 3: digi_play("COM056", 1, 255, 8, 997); break; case 4: digi_play("COM057", 1, 255, 8, 997); break; default: break; } break; case 8: switch (_case7RandVal) { case 1: digi_play("COM053", 1, 255, 1, 997); break; case 3: digi_play("COM055", 1, 255, -1, 997); break; case 4: digi_play("COM058", 1, 255, -1, 997); break; default: break; } break; case 10: kernel_timing_trigger(imath_ranged_rand(90, 120), 12, nullptr); break; case 11: kernel_timing_trigger(imath_ranged_rand(90, 120), 13, nullptr); break; case 12: if (_guessFacing == 3 || _guessFacing == 9) { setGlobals3(_ripLooksAround, 19, 1); } else { setGlobals3(_ripLooksAround, 13, 1); } sendWSMessage_3840000(_G(my_walker), 14); break; case 13: setGlobals3(_mctdSerie, 22, 1); sendWSMessage_3840000(_mcTrekMach, 14); break; case 14: ++_counter1; if (_counter1 == 2) { player_set_commands_allowed(true); ws_demand_facing(_G(my_walker), _guessFacing); series_unload(_ripLooksAround); series_unload(_mctdSerie); _meiHandsBehindBack = series_load("MEI CHIEN HANDS BEHIND BACK", -1, nullptr); // The original was calling setGlobals3 using _mctdSerie, which has just been unloaded // Using the other series (often used with frame 17 in other calls) avoids the crash and improve the animation, // which is a good sign it's what was supposed to be done setGlobals3(_meiHandsBehindBack, 17, 17); sendWSMessage_3840000(_mcTrekMach, -1); kernel_timing_trigger(imath_ranged_rand(7200, 14400), 5, nullptr); } break; case 15: switch (_currentRoom) { case 804: ws_walk(_G(my_walker), _greenSoldierCoordX[_coordArrayId], 321, nullptr, 16, 3, true); break; case 814: ws_walk(_G(my_walker), _purpleSoldierCoordX[_coordArrayId], 321, nullptr, 16, 3, true); break; case 824: ws_walk(_G(my_walker), _yellowSoldierCoordX[_coordArrayId], 321, nullptr, 16, 3, true); break; case 834: ws_walk(_G(my_walker), _blueSoldierCoordX[_coordArrayId], 321, nullptr, 16, 3, true); break; case 844: ws_walk(_G(my_walker), _redSoldierCoordX[_coordArrayId], 321, nullptr, 16, 3, true); break; default: break; } break; case 16: { player_set_commands_allowed(false); ws_hide_walker(_G(my_walker)); int32 retVal = getStatueIndex(_coordArrayId); if (retVal >= 0) terminateMachineAndNull(_machArr[retVal]); getSeriesName(_coordArrayId, true); _dynSerie1 = series_load(_currentSeriesName.c_str(), -1, nullptr); retVal = subCE52E(_coordArrayId); switch (retVal) { case 1: _dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 0, 18, 5, 0, 100, 0, 0, 0, 9); break; case 2: case 3: _dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 0, 17, 5, 0, 100, 0, 0, 0, 9); break; default: _dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 16, 19, 5, 0, 100, 0, 0, 0, -1); break; } } break; case 17: digi_play("950_s31", 2, 255, -1, -1); _dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 16, 19, 5, 0, 100, 0, 0, 10, -1); break; case 18: digi_play("950_s30", 2, 255, -1, -1); _dynSerie1Mach = series_play(_currentSeriesName.c_str(), 766, 16, 19, 5, 0, 100, 0, 0, 10, -1); break; case 19: if (getStatueIndex(_coordArrayId) < 0) { kernel_timing_trigger(120, 20, nullptr); digi_play("950_s32", 2, 255, -1, -1); } else { kernel_timing_trigger(30, 20, nullptr); } break; case 20: terminateMachine(_dynSerie1Mach); series_play(_currentSeriesName.c_str(), 766, 2, 21, 5, 0, 100, 0, 0, 0, -1); switch (subCE52E(_coordArrayId)) { case 1: _G(flags)[V271] = 0; _G(flags)[V272] = 0; break; case 2: _G(flags)[V271] = 1; _G(flags)[V272] = 0; break; case 3: _G(flags)[V271] = 0; _G(flags)[V272] = 1; break; default: break; } break; case 21: { player_set_commands_allowed(true); terminateMachine(_dynSerie1Mach); series_unload(_dynSerie1); ws_unhide_walker(_G(my_walker)); ws_demand_facing(_G(my_walker), 3); int32 retVal = getStatueIndex(_coordArrayId); if (retVal < 0) { digi_play("com066", 1, 255, -1, 997); } else { getSeriesName(_coordArrayId, false); _machArr[retVal] = series_play(_currentSeriesName.c_str(), 768, 16, -1, 0, 0, 100, 0, 0, 0, -1); } } break; default: break; } } } // namespace Rooms } // namespace Riddle } // namespace M4