/* 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 = 7) { _lighter = series_show("608LITER", 0xf00, 16); } else { hotspot_set_active("LIGHTER", false); } if (!inv_object_is_here("DRIFTWOOD STUMP")) { hotspot_set_active("DRIFTWOOD STUMP ", false); hotspot_set_active("DRIFTWOOD STUMP ", false); } else if (_G(flags)[V186]) { hotspot_set_active("DRIFTWOOD STUMP ", false); } else { _stump = series_show("608ST_UP", 0x400, 16); hotspot_set_active("DRIFTWOOD STUMP ", false); } if (!inv_object_is_here("POLE")) { hotspot_set_active("POLE", false); hotspot_set_active("POLE ", false); } else if (_G(flags)[V186]) { hotspot_set_active("POLE", false); } else { _pole = series_show("608POLE", 0x400, 16); hotspot_set_active("POLE ", false); } if (inv_object_is_here("DRIFTWOOD PUFFIN")) { _puffin = series_show("608PUFIN", 0x400, 16); } else { hotspot_set_active("DRIFTWOOD PUFFIN", false); } switch (_G(flags)[V186]) { case 0: hotspot_set_active("hole in hillside", false); _end1 = series_show("608START", 0xf00, 16); hotspot_set_active("STATUE ", false); digi_preload("608_s01"); digi_preload("608_s01a"); break; case 1: hotspot_set_active("hole in hillside", false); _end1 = series_show("608END", 0xf00, 16); hotspot_set_active("STATUE", false); hotspot_set_active("stone", false); digi_preload("950_s37"); break; case 2: hotspot_set_active("hole in hillside", true); _end1 = series_show("608END", 0xf00, 16); _end2 = series_show("608END2", 0xe00, 16); hotspot_set_active("STATUE", false); hotspot_set_active("stone", false); hotspot_set_active("old woman", false); default: break; } if (_G(flags)[V203] == 2) { _tt01 = series_load("608TT01"); _rp01 = series_load("608RP01"); player_set_commands_allowed(false); _G(player).disable_hyperwalk = true; ws_demand_location(_G(my_walker), -30, 345, 1); ws_walk(_G(my_walker), 43, 345, nullptr, 18, 3); ws_walk_load_walker_series(TT_NORMAL_DIRS, TT_NORMAL_NAMES); ws_walk_load_shadow_series(TT_SHADOW_DIRS, TT_SHADOW_NAMES); _tt = triggerMachineByHash_3000(8, 9, *TT_NORMAL_DIRS, *TT_SHADOW_DIRS, -30, 324, 3, triggerMachineByHashCallback3000, "tt walker"); sendWSMessage_10000(_tt, 105, 324, 5, 20, 1); } else if (_G(flags)[V203] == 6) { _tt02 = series_load("608TT02"); _tt03 = series_load("608TT03"); _tt05 = series_load("608TT05"); _ripHandChin = series_load("RIP TREK HAND CHIN POS3"); _ripTalker = series_load("RIP TREK TALKER POS3"); _all5a = series_load("608all5a"); _loop0 = series_load("608loop0"); _loop1 = series_load("608loop1"); player_set_commands_allowed(false); _G(player).disable_hyperwalk = true; ws_demand_location(_G(my_walker), -30, 345, 1); kernel_timing_trigger(1, 698); ws_walk_load_walker_series(TT_NORMAL_DIRS, TT_NORMAL_NAMES); ws_walk_load_shadow_series(TT_SHADOW_DIRS, TT_SHADOW_NAMES); _tt = triggerMachineByHash_3000(8, 9, *TT_NORMAL_DIRS, *TT_SHADOW_DIRS, -30, 324, 3, triggerMachineByHashCallback3000, "tt walker"); sendWSMessage_10000(_tt, 103, 318, 3, 700, 1); } switch (_G(game).previous_room) { case KERNEL_RESTORING_GAME: digi_preload("950_s28b"); break; case 603: digi_preload("950_s28b"); digi_stop(3); digi_unload("950_s28a"); break; case 605: digi_preload("950_s28b"); digi_stop(3); digi_unload("950_s28"); if (_G(flags)[V203] != 2) { player_set_commands_allowed(false); ws_demand_location(_G(my_walker), -30, 345, 3); ws_walk(_G(my_walker), 43, 345, nullptr, 1, 3); } break; default: digi_preload("950_s28b"); break; } series_play("608surf", 0xf00, 0, -1, 15, -1, 100, 0, 0, 0, -1); digi_play_loop("950_s28b", 3, 90); } void Room608::daemon() { int frame; switch (_G(kernel).trigger) { case 1: player_set_commands_allowed(true); break; case 18: player_update_info(); ws_hide_walker(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip talker"); sendWSMessage_10000(1, _ripley, _rp01, 1, 13, -1, _rp01, 20, 20, 0); break; case 20: player_update_info(_tt, &_G(player_info)); ws_hide_walker(_tt); _ttShadow = series_show("tt walker shadow 5", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); _ttTalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "tt talker"); sendWSMessage_10000(1, _ttTalker, _tt01, 63, 54, 22, _tt01, 54, 54, 0); break; case 22: sendWSMessage_10000(1, _ttTalker, _tt01, 40, 45, -1, _tt01, 46, 53, 4); sendWSMessage_1a0000(_ttTalker, 11); digi_play("608t01", 1, 255, 23); break; case 23: sendWSMessage_10000(1, _ttTalker, _tt01, 45, 40, 26, _tt01, 40, 40, 0); break; case 26: sendWSMessage_10000(1, _ttTalker, _tt01, 9, 39, -1, _tt01, 39, 39, 0); sendWSMessage_190000(_ttTalker, 7); digi_play("608t01a", 1, 255, 30); break; case 30: sendWSMessage_10000(1, _ripley, _rp01, 20, 20, -1, _rp01, 20, 23, 1); sendWSMessage_1a0000(_ripley, 11); digi_play("608r01", 1, 255, 34); break; case 34: sendWSMessage_10000(1, _ripley, _rp01, 20, 20, -1, _rp01, 20, 20, 0); sendWSMessage_10000(1, _ttTalker, _tt01, 40, 45, -1, _tt01, 46, 53, 4); sendWSMessage_1a0000(_ttTalker, 11); digi_play("608t02", 1, 255, 39); kernel_timing_trigger(60, 35); break; case 35: sendWSMessage_10000(1, _ripley, _rp01, 14, 19, 36, _rp01, 20, 20, 0); break; case 36: sendWSMessage_10000(1, _ripley, _rp01, 14, 19, 37, _rp01, 20, 20, 0); break; case 37: kernel_timing_trigger(60, 38); break; case 38: sendWSMessage_10000(1, _ripley, _rp01, 24, 61, 40, _rp01, 20, 20, 0); sendWSMessage_190000(_ripley, 6); break; case 39: sendWSMessage_10000(1, _ripley, _rp01, 20, 20, -1, _rp01, 20, 23, 1); sendWSMessage_1a0000(_ripley, 11); sendWSMessage_10000(1, _ttTalker, _tt01, 46, 46, -1, _tt01, 46, 46, 0); digi_play("608r02", 1, 255, 42); break; case 40: kernel_timing_trigger(120, 41); break; case 41: sendWSMessage_10000(1, _ripley, _rp01, 61, 24, -1, _rp01, 20, 20, 0); sendWSMessage_190000(_ripley, 6); break; case 42: sendWSMessage_10000(1, _ripley, _rp01, 20, 20, -1, _rp01, 20, 20, 0); sendWSMessage_10000(1, _ttTalker, _tt01, 46, 46, -1, _tt01, 46, 53, 4); sendWSMessage_1a0000(_ttTalker, 11); digi_play("608t03", 1, 255, 49); kernel_timing_trigger(60, 43); break; case 43: sendWSMessage_10000(1, _ripley, _rp01, 24, 39, 44, _rp01, 20, 20, 0); sendWSMessage_190000(_ripley, 6); break; case 44: sendWSMessage_10000(1, _ripley, _rp01, 24, 39, 45, _rp01, 20, 20, 0); sendWSMessage_190000(_ripley, 6); break; case 45: kernel_timing_trigger(60, 46); break; case 46: sendWSMessage_10000(1, _ripley, _rp01, 14, 14, -1, _rp01, 14, 19, 4); sendWSMessage_1a0000(_ripley, 11); kernel_timing_trigger(180, 47); break; case 47: sendWSMessage_10000(1, _ripley, _rp01, 20, 20, -1, _rp01, 20, 20, 4); break; case 49: sendWSMessage_10000(1, _ttTalker, _tt01, 45, 40, 50, _tt01, 40, 40, 0); break; case 50: sendWSMessage_10000(1, _ttTalker, _tt01, 54, 63, 55, _tt01, 63, 63, 0); break; case 55: terminateMachineAndNull(_ttTalker); ws_unhide_walker(_tt); terminateMachineAndNull(_ttShadow); sendWSMessage_10000(_tt, -30, 324, 9, 60, 1); _G(flags)[V203] = 3; break; case 57: sendWSMessage_10000(1, _ripley, _rp01, 82, 71, 61, _rp01, 71, 71, 0); digi_play("608r03", 1); _G(flags)[V203] = 4; break; case 60: sendWSMessage_60000(_tt); sendWSMessage_10000(1, _ripley, _rp01, 62, 82, 57, _rp01, 82, 82, 0); break; case 61: series_unload(200); series_unload(201); series_unload(202); series_unload(203); series_unload(204); series_unload(211); series_unload(212); series_unload(213); series_unload(214); series_unload(_tt01); series_unload(_rp01); terminateMachineAndNull(_ripley); terminateMachineAndNull(_shadow); ws_unhide_walker(); _G(player).disable_hyperwalk = false; player_set_commands_allowed(true); break; case 200: kernel_trigger_dispatchx(kernel_trigger_create(201)); break; case 201: switch (_oldMode) { case 0: switch (_oldShould) { case 0: sendWSMessage_10000(1, _ol, _old1, 1, 1, 200, _old1, 1, 1, 0); break; case 1: if (imath_ranged_rand(10, 30) <= ++_ctr1) { _ctr1 = 0; if (imath_ranged_rand(1, 2) == 1) { sendWSMessage_10000(1, _ol, _old1, 1, 1, 200, _old1, 1, 1, 0); break; } else { sendWSMessage_10000(1, _ol, _old1, 1, 3, 200, _old1, 3, 3, 0); _oldMode = 2; } } else { kernel_timing_trigger(10, 200); } break; case 8: case 9: case 10: case 11: sendWSMessage_10000(1, _ol, _old2, 1, 38, 200, _old2, 38, 38, 0); _oldMode = 8; break; case 13: player_update_info(); ws_hide_walker(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); sendWSMessage_10000(1, _ol, _old5, 1, 40, 250, _old5, 40, 40, 0); break; case 14: player_update_info(); ws_hide_walker(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); sendWSMessage_10000(1, _ol, _old5, 1, 40, 202, _old5, 40, 40, 0); break; case 15: player_update_info(); ws_hide_walker(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); sendWSMessage_10000(1, _ol, _old5, 1, 40, 280, _old5, 40, 40, 0); break; case 16: player_update_info(); ws_hide_walker(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); sendWSMessage_10000(1, _ol, _old5, 1, 40, 270, _old5, 40, 40, 0); break; default: sendWSMessage_10000(1, _ol, _old1, 1, 3, 200, _old1, 3, 3, 0); _oldMode = 2; break; } break; case 2: switch (_oldShould) { case 1: if (imath_ranged_rand(10, 30) <= ++_ctr1) { _ctr1 = 0; switch (imath_ranged_rand(1, 3)) { case 1: sendWSMessage_10000(1, _ol, _old1, 3, 3, 200, _old1, 3, 3, 0); break; case 2: sendWSMessage_10000(1, _ol, _old1, 3, 1, 200, _old1, 1, 1, 0); sendWSMessage_190000(_ol, 7); _oldMode = 0; break; case 3: sendWSMessage_10000(1, _ol, _old1, 4, 5, 200, _old1, 5, 5, 0); sendWSMessage_190000(_ol, 7); _oldMode = 3; break; default: break; } } else { kernel_timing_trigger(10, 200); } break; case 5: case 6: case 7: case 12: sendWSMessage_10000(1, _ol, _old1, 4, 5, 200, _old1, 5, 5, 0); sendWSMessage_190000(_ol, 7); _oldMode = 3; break; default: sendWSMessage_10000(1, _ol, _old1, 3, 1, 200, _old1, 1, 1, 0); sendWSMessage_190000(_ol, 7); _oldMode = 0; break; } break; case 3: switch (_oldShould) { case 1: if (imath_ranged_rand(10, 30) <= ++_ctr1) { _ctr1 = 0; switch (imath_ranged_rand(1, 3)) { case 1: sendWSMessage_10000(1, _ol, _old1, 5, 5, 200, _old1, 5, 5, 0); break; case 2: sendWSMessage_10000(1, _ol, _old1, 5, 4, 200, _old1, 3, 3, 0); _oldMode = 2; sendWSMessage_190000(_ol, 7); break; case 3: sendWSMessage_10000(1, _ol, _old1, 6, 7, 200, _old1, 7, 7, 0); sendWSMessage_190000(_ol, 7); _oldMode = 4; break; default: break; } } else { kernel_timing_trigger(10, 200); } break; case 5: case 6: case 7: case 12: sendWSMessage_10000(1, _ol, _old1, 6, 7, 200, _old1, 7, 7, 0); sendWSMessage_190000(_ol, 7); _oldMode = 4; break; default: sendWSMessage_10000(1, _ol, _old1, 5, 4, 200, _old1, 3, 3, 0); sendWSMessage_190000(_ol, 7); _oldMode = 2; break; } break; case 4: switch (_oldShould) { case 1: if (imath_ranged_rand(10, 30) <= ++_ctr1) { _ctr1 = 0; if (imath_ranged_rand(1, 2) == 1) { sendWSMessage_10000(1, _ol, _old1, 7, 7, 200, _old1, 7, 7, 0); } else { sendWSMessage_10000(1, _ol, _old1, 7, 6, 200, _old1, 5, 5, 0); sendWSMessage_190000(_ol, 7); _oldMode = 3; } } else { kernel_timing_trigger(10, 200); } break; case 7: case 12: sendWSMessage_10000(1, _ol, _old1, 8, 14, 200, _old1, 26, 26, 0); _oldMode = 6; break; default: sendWSMessage_10000(1, _ol, _old1, 7, 6, 200, _old1, 5, 5, 0); _oldMode = 3; break; } break; case 6: switch (_oldShould) { case 5: sendWSMessage_10000(1, _ol, _old1, 26, 26, -1, _old1, 26, 42, 4); sendWSMessage_1a0000(_ol, 11); break; case 6: sendWSMessage_10000(1, _ol, _old1, 26, 26, 200, _old1, 26, 26, 0); break; case 7: sendWSMessage_10000(1, _ol, _old1, 61, 74, 200, _old1, 74, 74, 0); _oldMode = 7; _oldShould = 5; break; case 12: sendWSMessage_10000(1, _ol, _old1, 15, 28, 200, _old1, 26, 26, 0); _oldShould = 5; break; default: sendWSMessage_10000(1, _ol, _old1, 14, 8, 200, _old1, 7, 7, 0); _oldMode = 4; break; } break; case 7: switch (_oldShould) { case 7: sendWSMessage_10000(1, _ol, _old1, 74, 74, 200, _old1, 74, 74, 0); break; default: sendWSMessage_10000(1, _ol, _old1, 74, 61, 200, _old1, 26, 26, 0); _oldMode = 6; break; } break; case 8: switch (_oldShould) { case 8: sendWSMessage_10000(1, _ol, _old2, 38, 38, 200, _old2, 38, 38, 0); break; case 9: sendWSMessage_10000(1, _ol, _old2, 39, 39, -1, _old2, 39, 48, 4); sendWSMessage_1a0000(_ol, 15); break; case 10: case 11: sendWSMessage_10000(1, _ol, _old2, 49, 57, 200, _old2, 57, 57, 0); _oldMode = 11; break; default: sendWSMessage_10000(1, _ol, _old2, 38, 1, 200, _old1, 1, 1, 0); _oldMode = 0; break; } break; case 11: switch (_oldShould) { case 10: sendWSMessage_10000(1, _ol, _old2, 57, 49, 200, _old2, 38, 38, 0); _oldMode = 8; _oldShould = 8; break; case 11: sendWSMessage_10000(1, _ol, _old2, 57, 57, 200, _old2, 57, 57, 0); break; default: sendWSMessage_10000(1, _ol, _old2, 57, 49, 200, _old2, 38, 38, 0); _oldMode = 8; break; } break; default: break; } break; case 202: sendWSMessage_10000(1, _ol, _old5a, 1, 8, 205, _old5a, 8, 8, 0); break; case 205: sendWSMessage_10000(1, _ol, _old5a, 9, 19, 208, _old5a, 19, 19, 0); inv_move_object("OBSIDIAN DISK", 608); break; case 208: sendWSMessage_10000(1, _ol, _old5a, 16, 19, -1, _old5a, 16, 19, 1); digi_play("608o06", 1, 255, 211); break; case 211: sendWSMessage_10000(1, _ol, _old5a, 20, 22, -1, _old5a, 20, 22, 1); digi_play("608r43", 1, 255, 213); break; case 213: sendWSMessage_10000(1, _ol, _old5a, 16, 19, -1, _old5a, 16, 19, 1); digi_play("608o07", 1, 255, 216); break; case 216: sendWSMessage_10000(1, _ol, _old5a, 23, 54, -1, _old5a, 54, 54, 1); sendWSMessage_190000(_ol, 8); digi_play("608o08", 1, 255, 220); break; case 220: sendWSMessage_10000(1, _ol, _old5, 40, 1, 225, _old1, 1, 1, 0); break; case 225: sendWSMessage_10000(1, _ol, _old1, 1, 1, 200, _old1, 1, 1, 0); _oldMode = 0; _oldShould = 1; _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip talker"); sendWSMessage_10000(1, _ol2, _old5f, 1, 1, -1, _old5f, 1, 4, 1); sendWSMessage_1a0000(_ol2, 11); digi_play("608r44", 1, 255, 226); break; case 226: case 268: terminateMachineAndNull(_ol2); terminateMachineAndNull(_shadow); ws_unhide_walker(); player_set_commands_allowed(true); break; case 250: sendWSMessage_10000(1, _ol, _old5b, 1, 11, 254, _old5b, 11, 11, 0); break; case 254: sendWSMessage_10000(1, _ol, _old5b, 12, 49, -1, _old5b, 50, 53, 1); sendWSMessage_1a0000(_ol, 11); inv_move_object("CLOCK FACING", 608); digi_play("608o06", 1, 255, 256); break; case 256: digi_play("608r43", 1, 255, 260); break; case 260: digi_play("608o07", 1, 255, 263); break; case 263: digi_play("608o08", 1, 255, 265); break; case 265: sendWSMessage_10000(1, _ol, _old5, 40, 1, 267, _old1, 1, 1, 0); break; case 267: sendWSMessage_10000(1, _ol, _old1, 1, 1, 200, _old1, 1, 1, 0); _oldMode = 0; _oldShould = 1; _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip talker"); sendWSMessage_10000(1, _ol2, _old5f, 1, 1, -1, _old5f, 1, 4, 1); sendWSMessage_1a0000(_ol2, 11); digi_play("608r44", 1, 255, 268); break; case 270: sendWSMessage_10000(1, _ol, _old5d, 1, 11, 272, _old5d, 11, 11, 1); break; case 272: sendWSMessage_10000(1, _ol, _old5d, 11, 23, -1, _old5d, 24, 30, 4); sendWSMessage_1a0000(_ol, 11); inv_move_object("CLOCK FACING", 608); digi_play("608o09", 1, 255, 275); break; case 275: digi_play("608o09a", 1, 255, 277); break; case 277: sendWSMessage_10000(1, _ol, _old5d, 39, 45, 500, _old5d, 45, 45, 4); digi_play("608r46", 1); break; case 280: sendWSMessage_10000(1, _ol, _old5c, 1, 13, 282, _old5c, 13, 13, 1); break; case 282: sendWSMessage_10000(1, _ol, _old5c, 14, 27, -1, _old5c, 28, 32, 4); sendWSMessage_1a0000(_ol, 11); inv_move_object("OBSIDIAN DISK", 608); digi_play("608o09", 1, 255, 285); break; case 285: digi_play("608o09a", 1, 255, 287); break; case 287: sendWSMessage_10000(1, _ol, _old5c, 33, 47, -1, _old5c, 47, 47, 4); digi_play("608r46", 1, 255, 500); break; case 300: kernel_trigger_dispatchx(kernel_trigger_create(301)); break; case 301: if (!_ripleyMode) { switch (_ripleyShould) { case 0: sendWSMessage_10000(1, _ripley, _rp09, 23, 23, 300, _rp09, 23, 23, 0); break; case 1: frame = imath_ranged_rand(23, 25); sendWSMessage_10000(1, _ripley, _rp09, frame, frame, 300, _rp09, frame, frame, 0); sendWSMessage_190000(_ripley, 13); sendWSMessage_1a0000(_ripley, 13); break; case 2: sendWSMessage_10000(1, _ripley, _rp09, 23, 1, 302, _rp09, 1, 1, 0); break; case 3: sendWSMessage_10000(1, _ripley, _rp09, 23, 1, 305, _rp09, 1, 1, 0); break; case 4: sendWSMessage_10000(1, _ripley, _rp09, 23, 1, 306, _rp09, 1, 1, 0); break; case 5: sendWSMessage_10000(1, _ripley, _rp09, 23, 1, 307, _rp09, 1, 1, 0); break; case 6: sendWSMessage_10000(1, _ripley, _rp09, 23, 1, 308, _rp09, 1, 1, 0); break; default: break; } } break; case 302: terminateMachineAndNull(_shadow); terminateMachineAndNull(_ripley); ws_unhide_walker(); player_set_commands_allowed(true); break; case 305: terminateMachineAndNull(_shadow); terminateMachineAndNull(_ripley); ws_unhide_walker(); _oldShould = 14; break; case 306: terminateMachineAndNull(_shadow); terminateMachineAndNull(_ripley); ws_unhide_walker(); _oldShould = 13; break; case 307: terminateMachineAndNull(_shadow); terminateMachineAndNull(_ripley); ws_unhide_walker(); _oldShould = 15; break; case 308: terminateMachineAndNull(_shadow); terminateMachineAndNull(_ripley); ws_unhide_walker(); _oldShould = 16; break; case 500: terminateMachineAndNull(_ol); _ol = triggerMachineByHash_3000(8, 15, *NORMAL_DIRS1, *SHADOW_DIRS1, 499, 318, 9, triggerMachineByHashCallback3000, "ow walker"); sendWSMessage_10000(_ol, 487, 290, 11, -1, 1); kernel_timing_trigger(60, 501); ws_unhide_walker(); break; case 501: ws_walk(_G(my_walker), 465, 284, nullptr, 503, 1); break; case 503: sendWSMessage_60000(_ol); ws_hide_walker(); ws_hide_walker(_ol); digi_preload("608o10"); digi_preload("608r47"); digi_preload("608o11"); digi_preload("608r48"); digi_preload("608o12"); digi_preload("608o13"); digi_preload("608r49"); digi_preload("608o14"); digi_preload("608_s04"); digi_preload("608_s04a"); digi_preload("608_s05"); digi_preload("608_s05a"); digi_preload("608o19"); kernel_load_variant("608lock0"); _ol2 = series_stream("608all0", 5, 0x600, 530); series_stream_break_on_frame(_ol2, 3, 504); break; case 504: series_stream_break_on_frame(_ol2, 49, 505); digi_play("608o10", 1, 255, 507); break; case 505: series_set_frame_rate(_ol2, 240); series_stream_break_on_frame(_ol2, 50, 506); break; case 506: series_set_frame_rate(_ol2, 7); series_stream_break_on_frame(_ol2, 53, 508); break; case 507: series_set_frame_rate(_ol2, 13); digi_play("608r47", 1); break; case 508: series_stream_break_on_frame(_ol2, 137, 509); digi_play("608o11", 1); break; case 509: series_stream_break_on_frame(_ol2, 150, 559); digi_play("608_s05", 2); break; case 511: series_stream_break_on_frame(_ol2, 256, 512); digi_play("608_s04", 2); break; case 512: series_stream_break_on_frame(_ol2, 270, 513); digi_play("608_s04a", 2); break; case 513: series_stream_break_on_frame(_ol2, 274, 514); break; case 514: series_set_frame_rate(_ol2, 300); kernel_timing_trigger(60, 555); series_stream_break_on_frame(_ol2, 275, 515); break; case 515: series_set_frame_rate(_ol2, 7); series_stream_break_on_frame(_ol2, 290, 516); break; case 516: series_stream_break_on_frame(_ol2, 330, 558); digi_play("608_s05a", 2); break; case 517: series_stream_break_on_frame(_ol2, 367, 519); break; case 519: series_stream_break_on_frame(_ol2, 409, 521); break; case 521: series_stream_break_on_frame(_ol2, 429, 524); digi_play("608r49", 1); break; case 524: series_stream_break_on_frame(_ol2, 483, 525); digi_play("608o14", 1); break; case 525: series_stream_break_on_frame(_ol2, 487, 560); digi_play("608_s05", 2); break; case 527: digi_play("608_s05a", 2); break; case 530: digi_unload("608o10"); digi_unload("608r47"); digi_unload("608o11"); digi_unload("608r48"); digi_unload("608o12"); digi_unload("608o13"); digi_unload("608r49"); digi_unload("608o14"); digi_unload("608_s04"); digi_unload("608_s04a"); digi_unload("608_s05"); digi_unload("608_s05a"); digi_unload("608o19"); hotspot_set_active("hole in hillside", true); _ripHandTalk3 = series_load("RIP TREK HAND TALK POS3"); _end2 = series_show("608END2", 0xe00, 16); ws_unhide_walker(); ws_demand_location(_G(my_walker), 494, 276, 3); sendWSMessage_10000(_G(my_walker), 524, 296, 9, 532, 1); _ol = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x200, false, triggerMachineByHashCallback, "ol"); sendWSMessage_10000(1, _ol, _old8, 1, 1, -1, _old8, 1, 1, 1); break; case 532: sendWSMessage_10000(1, _ol, _old8, 1, 11, 534, _old8, 12, 17, 1); sendWSMessage_1a0000(_ol, 11); break; case 534: digi_play("608o15", 1, 255, 536); break; case 536: sendWSMessage_10000(1, _ol, _old8, 48, 46, 538, _old8, 47, 50, 1); sendWSMessage_1a0000(_ol, 11); break; case 538: digi_play("608o15a", 1, 255, 540); break; case 540: sendWSMessage_10000(1, _ol, _old8, 47, 47, -1, _old8, 47, 47, 1); setGlobals1(_ripHandTalk3, 1, 16, 16, 16); sendWSMessage_110000(546); digi_play("608r50", 1, 255, 544); break; case 543: sendWSMessage_10000(1, _ol, _old8, 26, 45, 545, _old8, 45, 45, 1); break; case 544: sendWSMessage_10000(1, _ol, _old8, 47, 50, -1, _old8, 47, 50, 1); digi_play("608o16", 1, 255, 543); break; case 545: sendWSMessage_10000(1, _ol, _old8, 51, 72, 548, _old8, 72, 72, 1); break; case 546: sendWSMessage_150000(-1); break; case 548: terminateMachineAndNull(_ol); _ol = triggerMachineByHash_3000(8, 15, *NORMAL_DIRS1, *SHADOW_DIRS1, 487, 293, 9, triggerMachineByHashCallback3000, "ow walker"); sendWSMessage_10000(_ol, 417, 295, 9, 549, 0); kernel_timing_trigger(300, 551); midi_play("eastiswo", 255, true, -1, 949); _G(player).disable_hyperwalk = true; break; case 549: sendWSMessage_10000(_ol, 150, 330, 9, 550, 0); break; case 550: hotspot_set_active("old woman", false); sendWSMessage_10000(_ol, -30, 324, 9, 552, 1); player_set_commands_allowed(true); break; case 551: sendWSMessage_10000(_G(my_walker), 503, 296, 9, -1, 1); digi_play("608r51", 1); _G(flags)[V186] = 2; break; case 552: sendWSMessage_60000(_ol); midi_fade_volume(0, 120); kernel_timing_trigger(120, 553); _G(player).disable_hyperwalk = false; break; case 553: midi_stop(); break; case 555: digi_play("608r48", 1); break; case 558: series_stream_break_on_frame(_ol2, 343, 517); digi_play("608o13", 1); break; case 559: series_stream_break_on_frame(_ol2, 216, 511); digi_play("950_s37", 1); break; case 560: series_stream_break_on_frame(_ol2, 572, 570); digi_play("950_s37", 2); break; case 570: series_stream_break_on_frame(_ol2, 639, 527); digi_play("608o19", 1); break; case 698: kernel_timing_trigger(60, 699); break; case 699: ws_walk(_G(my_walker), 43, 345, nullptr, -1, 3); break; case 700: player_update_info(_tt, &_G(player_info)); ws_hide_walker(_tt); _ttShadow = series_show("tt walker shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); _ttTalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "tt walker"); sendWSMessage_10000(1, _ttTalker, _tt02, 1, 11, 703, _tt02, 11, 11, 0); break; case 703: sendWSMessage_10000(1, _ttTalker, _tt02, 12, 12, -1, _tt02, 12, 34, 4); sendWSMessage_1a0000(_ttTalker, 13); digi_play("608t04", 1, 255, 704); break; case 704: sendWSMessage_10000(1, _ttTalker, _tt02, 12, 12, -1, _tt02, 12, 12, 4); kernel_timing_trigger(60, 706); break; case 706: sendWSMessage_10000(1, _ttTalker, _tt02, 35, 35, -1, _tt02, 35, 51, 4); sendWSMessage_1a0000(_ttTalker, 13); digi_play("608t05", 1, 255, 708); break; case 708: sendWSMessage_10000(1, _ttTalker, _tt02, 51, 51, -1, _tt02, 51, 51, 0); kernel_timing_trigger(20, 709); break; case 709: setGlobals1(_ripHandChin, 1, 14, 14, 14); sendWSMessage_110000(713); digi_play("608r53", 1); break; case 713: sendWSMessage_10000(1, _ttTalker, _tt02, 55, 64, 714, _tt02, 64, 64, 0); digi_play("608r53a", 1); kernel_timing_trigger(60, 717); break; case 714: terminateMachineAndNull(_ttTalker); ws_unhide_walker(_tt); terminateMachineAndNull(_ttShadow); sendWSMessage_10000(_tt, 238, 322, 3, 715, 0); break; case 715: sendWSMessage_10000(_tt, 459, 277, 3, -1, 1); break; case 717: sendWSMessage_140000(718); break; case 718: sendWSMessage_10000(_G(my_walker), 248, 328, 3, 719, 0); break; case 719: sendWSMessage_10000(_G(my_walker), 466, 292, 3, 721, 1); break; case 721: ws_hide_walker(_tt); series_unload(200); series_unload(201); series_unload(203); series_unload(204); _ttTalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0xd00, false, triggerMachineByHashCallback, "tt walker"); sendWSMessage_10000(1, _ttTalker, _tt03, 1, 60, -1, _tt03, 60, 60, 0); digi_play("608t06", 1, 255, 726); break; case 726: sendWSMessage_10000(_G(my_walker), 495, 277, 9, 729, 1); digi_play("608r54", 1); break; case 729: terminateMachineAndNull(_ttTalker); ws_hide_walker(); digi_preload("950_s37"); digi_preload("608r55"); digi_preload("604_s01"); digi_preload("608t08"); digi_preload("608_s11"); digi_preload("608_s05"); digi_preload("608_s05a"); digi_preload("608_s09"); digi_preload("608_s10"); digi_preload("608_s07"); digi_preload("608t07"); digi_preload("608_s06"); digi_preload("608r56"); _ol2 = series_stream("608all5", 5, 0x600, 750); series_stream_break_on_frame(_ol2, 21, 783); series_set_frame_rate(_ol2, 10); break; case 731: series_stream_break_on_frame(_ol2, 45, 787); digi_play("608r55", 1); break; case 733: series_stream_break_on_frame(_ol2, 64, 734); digi_play("608t08", 1); break; case 734: series_set_frame_rate(_ol2, 7); series_stream_break_on_frame(_ol2, 107, 792); break; case 735: series_stream_break_on_frame(_ol2, 177, 782); break; case 736: series_stream_break_on_frame(_ol2, 193, 739); digi_play("608_s06", 2); break; case 739: series_stream_break_on_frame(_ol2, 290, 747); digi_play("608r56", 2); break; case 747: ws_unhide_walker(); ws_demand_location(_G(my_walker), 461, 293, 3); sendWSMessage_10000(_G(my_walker), 432, 297, 3, 738, 1); break; case 750: _lighter = series_show("608LITER", 0xf00, 16); hotspot_set_active("LIGHTER", true); ws_hide_walker(); digi_unload("950_s37"); digi_unload("608r55"); digi_unload("604_s01"); digi_unload("608t08"); digi_unload("608_s11"); digi_unload("608_s05"); digi_unload("608_s05a"); digi_unload("608_s09"); digi_unload("608_s10"); digi_unload("608_s07"); digi_unload("608t07"); digi_unload("608_s06"); digi_unload("608r56"); series_unload(_tt02); series_unload(_tt03); series_unload(_ripHandChin); series_unload(_ripTalker); series_load(TT_NORMAL_NAMES[0], TT_NORMAL_DIRS[0]); series_load(TT_NORMAL_NAMES[1], TT_NORMAL_DIRS[1]); series_load(TT_NORMAL_NAMES[3], TT_NORMAL_DIRS[3]); series_load(TT_NORMAL_NAMES[4], TT_NORMAL_DIRS[4]); ws_hide_walker(_tt); _ttTalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "tt walker"); sendWSMessage_10000(1, _ttTalker, _all5a, 1, 1, -1, _all5a, 1, 6, 4); digi_play("608r58", 2, 255, 752); break; case 752: sendWSMessage_10000(1, _ttTalker, _all5a, 7, 7, -1, _all5a, 7, 12, 4); digi_play("608t10", 2, 255, 755); break; case 755: sendWSMessage_10000(1, _ttTalker, _all5a, 1, 1, -1, _all5a, 1, 6, 4); digi_play("608r59", 2, 255, 758); break; case 758: sendWSMessage_10000(1, _ttTalker, _all5a, 7, 7, -1, _all5a, 7, 12, 4); digi_play("608t11", 2, 255, 760); break; case 760: sendWSMessage_10000(1, _ttTalker, _all5a, 13, 50, 763, _all5a, 50, 50, 4); break; case 763: inv_give_to_player("STICK AND SHELL MAP"); inv_give_to_player("WHALE BONE HORN"); kernel_examine_inventory_object("PING STICK AND SHELL MAP", 5, 1, 350, 224, 764); break; case 764: kernel_timing_trigger(1, 765); break; case 765: kernel_examine_inventory_object("PING WHALE BONE HORN", 5, 1, 350, 224, 766); break; case 766: terminateMachineAndNull(_ttTalker); _ttTalker = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "tt talker"); sendWSMessage_10000(1, _ttTalker, _loop0, 1, 1, -1, _loop0, 1, 6, 4); _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip talker"); sendWSMessage_10000(1, _ripley, _loop1, 1, 1, -1, _loop1, 1, 1, 0); digi_play("608t11a", 2, 255, 767); break; case 767: sendWSMessage_10000(1, _ttTalker, _loop0, 1, 1, -1, _loop0, 1, 6, 4); digi_play("608t12", 2, 255, 768); break; case 768: sendWSMessage_10000(1, _ttTalker, _loop0, 1, 1, -1, _loop0, 1, 1, 0); sendWSMessage_10000(1, _ripley, _loop1, 1, 1, -1, _loop1, 1, 11, 0); digi_play("608r60", 2, 255, 769); break; case 769: terminateMachineAndNull(_ripley); ws_unhide_walker(); sendWSMessage_10000(1, _ttTalker, _tt05, 1, 23, 770, _tt05, 23, 23, 1); digi_play("608t13", 2, 255, 771); break; case 770: sendWSMessage_10000(1, _ttTalker, _tt05, 23, 1, 773, _tt05, 1, 1, 1); break; case 771: midi_play("thelook", 255, false, -1, 949); break; case 773: terminateMachineAndNull(_ttTalker); ws_unhide_walker(_tt); ws_demand_location(_tt, 480, 294, 9); sendWSMessage_10000(_tt, 415, 287, 9, 775, 0); break; case 775: sendWSMessage_10000(_tt, 239, 325, 9, 778, 0); _G(player).disable_hyperwalk = true; player_set_commands_allowed(true); _G(flags)[V203] = 7; break; case 778: sendWSMessage_10000(_tt, -30, 325, 9, 779, 1); break; case 779: _G(player).disable_hyperwalk = false; break; case 780: digi_play("608_s09", 2); series_stream_break_on_frame(_ol2, 160, 781); break; case 781: digi_play("608_s10", 2); series_stream_break_on_frame(_ol2, 171, 735); break; case 782: series_stream_break_on_frame(_ol2, 184, 736); digi_play("608_s07", 1); break; case 783: series_stream_break_on_frame(_ol2, 34, 731); digi_play("950_s37", 2); break; case 784: series_stream_break_on_frame(_ol2, 135, 785); digi_play("608_s05", 2); break; case 785: series_stream_break_on_frame(_ol2, 154, 780); digi_play("608_s05a", 2); break; case 787: series_stream_break_on_frame(_ol2, 53, 733); digi_play("604_s01", 2); break; case 792: series_stream_break_on_frame(_ol2, 120, 784); digi_play("608_s11", 2); break; default: break; } } void Room608::pre_parser() { const bool takeFlag = player_said("take"); const bool useFlag = player_said_any("push", "pull", "gear", "open", "close"); if (player_said("HORN/PULL CORD", "WATER") && !_G(flags)[V009]) _G(player).resetWalk(); if (player_said("POLE", "DRIFTWOOD STUMP ") && inv_player_has("POLE")) _G(player).resetWalk(); if (useFlag && HERE("POLE")) _G(player).resetWalk(); if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && inv_player_has("DRIFTWOOD STUMP")) _G(player).resetWalk(); if (takeFlag && HAS("POLE")) _G(player).resetWalk(); } void Room608::parser() { const bool lookFlag = player_said_any("look", "look at"); const bool talkFlag = player_said_any("talk", "talk to"); const bool takeFlag = player_said("take"); const bool useFlag = player_said_any("push", "pull", "gear", "open", "close"); if (player_said("conv608a")) { conv608a(); } else if (_G(kernel).trigger == 747) { _oldShould = 1; _ripleyShould = 2; } else if (talkFlag && player_said("old woman")) { if (_G(flags)[V013]) { digi_play(_G(flags)[V203] > 2 ? "608r04" : "608r35", 1); } else { if (_G(flags)[V203] >= 2 || !_G(flags)[V034]) { player_set_commands_allowed(false); _G(flags)[V034] = 1; player_update_info(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); ws_hide_walker(); _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip"); _G(kernel).trigger_mode = KT_DAEMON; sendWSMessage_10000(1, _ripley, _rp09, 1, 23, 300, _rp09, 23, 23, 0); _G(kernel).trigger_mode = KT_PARSE; _ripleyMode = 0; _ripleyShould = 0; _oldShould = 6; conv_load("conv608a", 10, 10, 747); conv_export_value_curr(_G(flags)[V203] >= 3 ? 1 : 0, 0); conv_play(); } else { digi_play("608r35", 1); } } } else if (takeFlag && player_said("DRIFTWOOD STUMP") && takeStump1()) { // No implementation } else if (takeFlag && player_said("DRIFTWOOD PUFFIN") && takePuffin()) { // No implementation } else if (player_said("DRIFTWOOD STUMP", "LARGE HOLE") && stumpHole()) { // No implementation } else if (takeFlag && player_said("DRIFTWOOD STUMP ") && takeStump2()) { // No implementation } else if (takeFlag && player_said("LIGHTER") && takeLighter()) { // No implementation } else if (player_said("HORN/PULL CORD/WATER", "WATER")) { digi_play("608r72", 1); } else if (player_said("DRIFTWOOD STUMP") && player_said_any("STATUE", "STATUE ")) { digi_play("com019", 1); } else if (player_said("HORN/PULL CORD", "WATER") && hornCordWater()) { // No implementation } else if (player_said("POLE", "DRIFTWOOD STUMP ") && inv_player_has("POLE")) { switch (_G(kernel).trigger) { case -1: ws_walk(_G(my_walker), 453, 311, nullptr, 1, 1); break; case 1: player_set_commands_allowed(false); player_update_info(); ws_hide_walker(); kernel_load_variant("608lock2"); digi_preload("608_s03"); _shadow5 = series_show("safari shadow 1", _G(player_info).depth, 16, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); _horn = series_load("608rp03"); _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "ol"); sendWSMessage_10000(1, _ol2, _horn, 1, 24, 2, _horn, 24, 24, 0); break; case 2: sendWSMessage_10000(1, _ol2, _horn, 25, 39, 3, _horn, 39, 39, 0); digi_play("608_s03", 2); break; case 3: digi_stop(2); digi_unload("608_s03"); terminateMachineAndNull(_ol2); series_unload(_horn); terminateMachineAndNull(_shadow5); _pole = series_show("608POLE", 0x400, 16); hotspot_set_active("POLE", true); ws_unhide_walker(); inv_move_object("POLE", 608); player_set_commands_allowed(true); break; default: break; } } else if (takeFlag && player_said("POLE") && !inv_player_has("POLE")) { switch (_G(kernel).trigger) { case -1: ws_walk(_G(my_walker), 453, 311, nullptr, 1, 1); break; case 1: player_set_commands_allowed(false); player_update_info(); ws_hide_walker(); kernel_load_variant("608lock1"); terminateMachineAndNull(_pole); _shadow5 = series_show("safari shadow 1", _G(player_info).depth, 16, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); _horn = series_load("608rp03"); _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "ol"); sendWSMessage_10000(1, _ol2, _horn, 39, 1, 2, _horn, 1, 1, 0); break; case 2: terminateMachineAndNull(_ol2); series_unload(_horn); terminateMachineAndNull(_shadow5); hotspot_set_active("POLE", false); ws_unhide_walker(); inv_give_to_player("POLE"); player_set_commands_allowed(true); break; default: break; } } else if (useFlag && HERE("POLE")) { usePole(); } else if (player_said_any("lung", "prostate")) { switch (_G(kernel).trigger) { case 1: player_set_commands_allowed(false); player_update_info(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); ws_hide_walker(); _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip"); _G(kernel).trigger_mode = KT_DAEMON; sendWSMessage_10000(1, _ripley, _rp09, 1, 23, 300, _rp09, 23, 23, 0); _G(kernel).trigger_mode = KT_PARSE; _ripleyMode = 0; _ripleyShould = 1; _oldShould = 6; digi_play("608r70", 1, 255, 2); break; case 2: _oldShould = 5; _ripleyShould = 0; digi_play("608o18", 1, 255, 3); break; case 3: _oldShould = 6; kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE); _ripleyShould = 1; digi_play("608r71", 1, 255, 5); break; case 5: _ripleyShould = player_said("lung") ? 3 : 4; break; default: break; } } else if (player_said("obsidian disk", "old woman") && !inv_object_is_here("CLOCK FACING")) { if (_G(flags)[V186]) { Common::strcpy_s(_G(player).verb, "lung"); kernel_timing_trigger(1, 1); } else { digi_play(_G(flags)[V010] ? "608r04a" : "608r35a", 1); } } else if (player_said("clock facing", "old woman") && !inv_object_is_here("OBSIDIAN DISK")) { if (_G(flags)[V186]) { Common::strcpy_s(_G(player).verb, "prostate"); kernel_timing_trigger(1, 1); } else { digi_play(_G(flags)[V010] ? "608r04a" : "608r35a", 1); } } else if (player_said_any("bowels", "scrotum")) { switch (_G(kernel).trigger) { case 1: player_set_commands_allowed(false); player_update_info(); _shadow = series_show("safari shadow 3", 0xf00, 0, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info).y); ws_hide_walker(); _ripley = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "rip"); _G(kernel).trigger_mode = KT_DAEMON; sendWSMessage_10000(1, _ripley, _rp09, 1, 23, 300, _rp09, 23, 23, 0); _G(kernel).trigger_mode = KT_PARSE; _ripleyMode = 0; _ripleyShould = 1; _oldShould = 6; digi_play("608r67", 1, 255, 2); break; case 2: _oldShould = 5; _ripleyShould = 0; digi_play("608o17", 1, 255, 3); break; case 3: _oldShould = 6; kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE); _ripleyShould = 1; digi_play("608r68", 1, 255, 5); break; case 5: _ripleyShould = player_said("bowels") ? 5 : 6; break; default: break; } } else if (player_said("obsidian disk", "old woman") && inv_object_is_here("CLOCK FACING")) { Common::strcpy_s(_G(player).verb, "bowels"); kernel_timing_trigger(1, 1); } else if (player_said("clock facing", "old woman") && inv_object_is_here("OBSIDIAN DISK")) { Common::strcpy_s(_G(player).verb, "bowels"); kernel_timing_trigger(1, 1); } else if (lookFlag && player_said("statue")) { digi_play(_G(flags)[V203] > 1 ? "608r05" : "608r36", 1); } else if (lookFlag && player_said("statue ")) { digi_play(_G(flags)[V203] == 1 ? "608r38" : "608r52", 1); } else if (lookFlag && player_said("stone")) { digi_play(_G(flags)[V186] ? "608r39" : "608r06", 1); } else if (lookFlag && player_said("base")) { digi_play("608r07", 1); } else if (lookFlag && player_said("small hole")) { digi_play("608r09", 1); } else if (lookFlag && player_said("lava")) { digi_play("608r08", 1); } else if (lookFlag && player_said("crevice")) { digi_play("608r09", 1); } else if (lookFlag && player_said("large hole")) { digi_play(inv_object_is_here("DRIFTWOOD STUMP") ? "608r40" : "608r10", 1); } else if (lookFlag && player_said(" ")) { digi_play("608r11", 1); } else if (lookFlag && HERE("DRIFTWOOD PUFFIN") && lookPuffin()) { // No implementation } else if (player_said("left")) { switch (_G(kernel).trigger) { case -1: player_set_commands_allowed(false); disable_player_commands_and_fade_init(1); break; case 1: digi_stop(1); adv_kill_digi_between_rooms(false); digi_play_loop("950_s28b", 3, 90); _G(game).setRoom(605); break; default: break; } } else if (lookFlag && player_said("DRIFTWOOD STUMP") && inv_object_in_scene("DRIFTWOOD STUMP", 600)) { digi_play("608r13", 1); } else if (lookFlag && player_said("DRIFTWOOD STUMP ")) { digi_play("608r76", 1); } else if (lookFlag && player_said("DRIFTWOOD STUMP ")) { digi_play("608r41", 1); } else if (lookFlag && player_said("water")) { digi_play("608r73", 1); } else if (player_said("POLE", "STATUE") || player_said("POLE", "STATUE ")) { digi_play("608r77", 1); } else if (lookFlag && player_said("old woman")) { if (_G(flags)[V203] > 2) { if (++_G(flags)[V181] > 3) _G(flags)[V181] = 3; switch (_G(flags)[V181]) { case 1: digi_play("608r14", 1); break; case 2: digi_play("608r14a", 1); break; case 3: digi_play("608r14b", 1); break; default: break; } } else { digi_play("608r37", 1); } } else if (lookFlag && HERE("LIGHTER")) { digi_play("608r66", 1); } else if (lookFlag && player_said("hole in hillside")) { digi_play("608r51a", 1); } else if (player_said("WHALE BONE HORN", "WATER")) { digi_play("608r64", 1); } else if (player_said("OBSIDIAN DISK", "STATUE") || player_said("OBSIDIAN DISK", "STATUE ") || player_said("CLOCK FACING", "STATUE") || player_said("CLOCK FACING", "STATUE ")) { digi_play("com146", 1, 255, -1, 997); } else if (takeFlag && player_said("pole ")) { digi_play("608r18", 1); } else if (takeFlag && player_said("stone")) { digi_play("608r63", 1); } else if (lookFlag && HERE("pole")) { digi_play("608r75", 1); } else if (lookFlag && HERE("pole ")) { digi_play("608r42", 1); } else if (takeFlag && player_said("driftwood stump ")) { digi_play("608r19", 1); } else { return; } _G(player).command_ready = false; } void Room608::conv608a() { const char *sound = conv_sound_to_play(); const int who = conv_whos_talking(); const int node = conv_current_node(); const int entry = conv_current_entry(); if (_G(kernel).trigger == 1) { if (who <= 0) { _oldShould = 6; kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE); } else if (who == 1) { _ripleyShould = 0; } conv_resume(); } else if (sound) { if (who <= 0) { if (node == 4 && entry == 0) midi_play("eastiswo", 255, false, -1, 949); if ((node == 2 && entry == 1) || (node == 3 && entry == 2)) _oldShould = 7; else if ((node == 2 && entry == 0) || (node == 3 && entry == 1)) _oldShould = 12; else _oldShould = 5; } else if (who == 1) { if (node == 4) _G(flags)[V013] = 1; if (!(node == 5 && entry == 3)) _ripleyShould = 1; } digi_play(sound, 1, 255, 1); } else { conv_resume(); } } bool Room608::takeStump1() { switch (_G(kernel).trigger) { case -1: if (inv_object_in_scene("DRIFTWOOD STUMP", 600)) { player_set_commands_allowed(false); _ripLowReach = series_load("RIP LOW REACH POS1"); setGlobals1(_ripLowReach, 1, 10, 10, 10); sendWSMessage_110000(2); } break; case 2: hotspot_set_active("DRIFTWOOD STUMP", false); inv_give_to_player("DRIFTWOOD STUMP"); kernel_examine_inventory_object("PING DRIFTWOOD STUMP", 5, 1, 230, 244, 3); terminateMachineAndNull(_stump); break; case 3: sendWSMessage_140000(5); break; case 5: series_unload(_ripLowReach); player_set_commands_allowed(true); break; default: return false; } return true; } bool Room608::takePuffin() { switch (_G(kernel).trigger) { case -1: if (inv_object_is_here("DRIFTWOOD PUFFIN")) { player_set_commands_allowed(false); _ripLowReach2 = series_load("RIP TREK LOW REACH POS2"); setGlobals1(_ripLowReach2, 1, 16, 16, 16); sendWSMessage_110000(2); } break; case 2: hotspot_set_active("DRIFTWOOD PUFFIN", false); inv_give_to_player("DRIFTWOOD PUFFIN"); kernel_examine_inventory_object("PING DRIFTWOOD PUFFIN", 5, 1, 142, 239, 3); terminateMachineAndNull(_puffin); break; case 3: sendWSMessage_140000(5); break; case 5: series_unload(_ripLowReach2); player_set_commands_allowed(true); break; default: return false; } return true; } bool Room608::stumpHole() { switch (_G(kernel).trigger) { case -1: if (inv_player_has("DRIFTWOOD STUMP")) { ws_walk(_G(my_walker), 474, 309, nullptr, 1, 2); return true; } break; case 1: player_set_commands_allowed(false); _ripLowReach = series_load("RIP LOW REACH POS1"); setGlobals1(_ripLowReach, 1, 10, 10, 10); sendWSMessage_110000(2); return true; case 2: hotspot_set_active("DRIFTWOOD STUMP ", true); inv_move_object("DRIFTWOOD STUMP", 608); _stump = series_show("608ST_UP", 0x400, 16); sendWSMessage_140000(5); digi_play("608_s02", 2); return true; case 5: series_unload(_ripLowReach); player_set_commands_allowed(true); return true; default: break; } return false; } bool Room608::takeStump2() { if (inv_object_is_here("POLE")) { digi_play("608r74", 1); } else { switch (_G(kernel).trigger) { case -1: ws_walk(_G(my_walker), 474, 309, nullptr, 1, 2); break; case 1: player_set_commands_allowed(false); _ripLowReach = series_load("RIP LOW REACH POS1"); setGlobals1(_ripLowReach, 1, 10, 10, 10); sendWSMessage_110000(2); break; case 2: hotspot_set_active("DRIFTWOOD STUMP ", false); terminateMachineAndNull(_stump); inv_give_to_player("DRIFTWOOD STUMP"); sendWSMessage_140000(5); break; case 5: series_unload(_ripLowReach); player_set_commands_allowed(true); break; default: return false; } } return true; } bool Room608::takeLighter() { switch (_G(kernel).trigger) { case -1: if (inv_object_is_here("LIGHTER")) { player_set_commands_allowed(false); _ripLowReach = series_load("RIP LOW REACH POS1"); setGlobals1(_ripLowReach, 1, 16, 16, 16); sendWSMessage_110000(2); return true; } break; case 2: hotspot_set_active("LIGHTER", false); inv_give_to_player("LIGHTER"); kernel_examine_inventory_object("PING LIGHTER", 5, 1, 455, 250, 3); terminateMachineAndNull(_lighter); return true; case 3: sendWSMessage_140000(5); return true; case 5: series_unload(_ripLowReach); player_set_commands_allowed(true); return true; default: break; } return false; } bool Room608::hornCordWater() { if (_G(flags)[V193]) { digi_play("com118", 1); return true; } else { switch (_G(kernel).trigger) { case -1: ws_walk(_G(my_walker), 64, 354, nullptr, 1, 7); return true; case 1: player_set_commands_allowed(false); player_update_info(); ws_hide_walker(); digi_preload("608_s08"); _shadow5 = series_show("safari shadow 5", _G(player_info).depth, 144, -1, -1, 0, _G(player_info).scale, _G(player_info).x, _G(player_info.y)); _horn = series_load("608horn"); _ol2 = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x100, false, triggerMachineByHashCallback, "ol"); sendWSMessage_10000(1, _ol2, _horn, 1, 16, 2, _horn, 16, 16, 0); return true; case 2: sendWSMessage_10000(1, _ol2, _horn, 17, 37, 3, _horn, 37, 37, 0); digi_play("608_s08", 2); return true; case 3: inv_give_to_player("HORN/PULL CORD/WATER"); inv_move_object("HORN/PULL CORD", NOWHERE); kernel_examine_inventory_object("PING HORN/PULL CORD/WATER", 5, 1, 42, 239, 4); return true; case 4: digi_unload("608_s08"); terminateMachineAndNull(_ol2); series_unload(_horn); terminateMachineAndNull(_shadow5); ws_unhide_walker(); _G(flags)[V009] = 1; player_set_commands_allowed(true); digi_play("608r65", 1); return true; default: break; } return false; } } bool Room608::lookPuffin() { switch (_G(kernel).trigger) { case -1: if (_G(flags)[V187]) { digi_play("608r12", 1); } else { player_set_commands_allowed(false); digi_play("608r12", 1, 255, 1); } return true; case 1: _G(flags)[V187] = 1; player_set_commands_allowed(true); digi_play("608r12a", 1); return true; default: break; } return false; } void Room608::usePole() { switch (_G(kernel).trigger) { case -1: ws_walk(_G(my_walker), 453, 311, nullptr, 1, 1); break; case 1: player_set_commands_allowed(false); player_update_info(); ws_hide_walker(); kernel_load_variant("608lock1"); digi_preload("950_s37"); digi_preload("950_s37a"); _ol2 = series_stream("608rp04", 5, 0x300, 10); series_stream_break_on_frame(_ol2, 25, 3); break; case 3: series_stream_break_on_frame(_ol2, 33, 30); digi_play("950_s37", 2); break; case 4: series_stream_break_on_frame(_ol2, 76, 5); digi_play("950_s37a", 2); break; case 5: series_stream_break_on_frame(_ol2, 77, 7); digi_play("950_s37", 2); break; case 7: terminateMachineAndNull(_end1); terminateMachineAndNull(_pole); terminateMachineAndNull(_stump); _oldShould = 8; digi_play("608_s01a", 1); break; case 10: digi_unload("950_s37"); digi_unload("950_s37a"); _G(flags)[V186] = 1; _end1 = series_show("608END", 0xf00, 16); hotspot_set_active("STATUE", false); hotspot_set_active("STATUE ", true); hotspot_set_active("DRIFTWOOD STUMP ", false); hotspot_set_active("DRIFTWOOD STUMP ", true); hotspot_set_active("POLE", false); hotspot_set_active("POLE ", true); hotspot_set_active("stone", false); ws_unhide_walker(); player_update_info(); ws_walk(_G(my_walker), _G(player_info).x + 1, _G(player_info).y, nullptr, 12, 4); break; case 12: _ripLHandTalk = series_load("RIP TREK L HAND TALK POS4"); setGlobals1(_ripLHandTalk, 1, 6, 6, 7, 1, 6, 1, 1, 1); digi_play("608r15", 1, 255, 15); break; case 15: sendWSMessage_120000(2); _oldShould = 10; digi_play("608o01", 1, 255, 18); break; case 18: // FIXME: GLB_TEMP_2 is used by player walker to set current frame. // But it's been send to an invalid value by a sendWSMessage_10000 // call for animating old lady. Is something supposed to set a value? // For now, do a dummy ws_walk to reset internal states player_update_info(); ws_walk(_G(my_walker), _G(player_info).x, _G(player_info).y, nullptr, -1, 4); sendWSMessage_110000(2); digi_play("608r16", 1, 255, 20); break; case 20: sendWSMessage_140000(-1); _oldShould = 9; digi_play("608o02", 1, 255, 22); break; case 22: _oldShould = 1; kernel_timing_trigger(1, 200, KT_DAEMON, KT_PARSE); kernel_timing_trigger(100, 25); break; case 25: player_set_commands_allowed(true); digi_play("608r17", 1); break; case 30: series_stream_break_on_frame(_ol2, 44, 4); digi_play("608_s01", 1); break; default: break; } } void Room608::syncGame(Common::Serializer &s) { s.syncAsUint32LE(_ripleyShould); s.syncAsUint32LE(_ripleyMode); s.syncAsUint32LE(_oldMode); s.syncAsUint32LE(_oldShould); } } // namespace Rooms } // namespace Riddle } // namespace M4