2208 lines
54 KiB
C++
2208 lines
54 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/ },.
|
|
*
|
|
*/
|
|
|
|
#include "m4/riddle/rooms/section6/room608.h"
|
|
#include "m4/riddle/rooms/section6/section6.h"
|
|
#include "m4/graphics/gr_series.h"
|
|
#include "m4/riddle/vars.h"
|
|
#include "m4/adv_r/adv_file.h"
|
|
|
|
namespace M4 {
|
|
namespace Riddle {
|
|
namespace Rooms {
|
|
|
|
static const int16 NORMAL_DIRS1[] = { 220, 221, -1 };
|
|
static const char *NORMAL_NAMES1[] = { "oldwk1", "oldwk3" };
|
|
static const int16 SHADOW_DIRS1[] = { 230, 231, -1 };
|
|
static const char *SHADOW_NAMES1[] = { "tt walker shadow 1", "oldwk3s" };
|
|
|
|
|
|
void Room608::init() {
|
|
if (_G(flags)[V186] != 2) {
|
|
_rp09 = series_load("608rp09");
|
|
|
|
if (!inv_object_is_here("POLE") || _G(flags)[V186])
|
|
kernel_load_variant("608lock1");
|
|
else
|
|
kernel_load_variant("608lock2");
|
|
|
|
_old1 = series_load("608old01");
|
|
_old2 = series_load("608old02");
|
|
_old5 = series_load("608old05");
|
|
_old8 = series_load("608old08");
|
|
_old5a = series_load("608old5a");
|
|
_old5b = series_load("608old5b");
|
|
_old5c = series_load("608old5c");
|
|
_old5d = series_load("608old5d");
|
|
_old5f = series_load("608old5f");
|
|
|
|
ws_walk_load_walker_series(NORMAL_DIRS1, NORMAL_NAMES1);
|
|
ws_walk_load_shadow_series(SHADOW_DIRS1, SHADOW_NAMES1);
|
|
_ol = TriggerMachineByHash(1, 1, 0, 0, 0, 0, 0, 0, 100, 0x200, false,
|
|
triggerMachineByHashCallback, "ol");
|
|
sendWSMessage_10000(1, _ol, _old1, 1, 1, 200, _old1, 1, 1, 0);
|
|
_ctr1 = 0;
|
|
_oldMode = 0;
|
|
_oldShould = 0;
|
|
}
|
|
|
|
if (inv_object_in_scene("DRIFTWOOD STUMP", 600)) {
|
|
_stump = series_show("608ST_DN", 0xf00, 16);
|
|
hotspot_set_active("DRIFTWOOD STUMP ", false);
|
|
} else {
|
|
hotspot_set_active("DRIFTWOOD STUMP", false);
|
|
}
|
|
|
|
if (inv_object_is_here("LIGHTER") && _G(flags)[V203] >= 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
|