/* 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 . * */ #include "startrek/room.h" #define OBJECT_CABLE_1 8 #define OBJECT_CABLE_2 9 #define OBJECT_JUNCTION_BOX 10 #define OBJECT_JOURNAL 11 #define OBJECT_DOOR 12 #define OBJECT_DEAD_GUY 13 #define OBJECT_IMPULSE_ENGINES 14 #define OBJECT_CABINET 15 #define HOTSPOT_LEFT_PORT 0x20 #define HOTSPOT_RIGHT_PORT 0x21 #define HOTSPOT_OIL_CANISTER 0x22 #define HOTSPOT_CABINET 0x23 #define HOTSPOT_RIGHT_CONSOLE 0x24 // Fusion mixture regulator #define HOTSPOT_IMPULSE_ENGINES 0x25 #define HOTSPOT_LEFT_CONSOLE 0x26 // Impulse engine control #define HOTSPOT_DOOR 0x27 namespace StarTrek { extern const RoomAction veng6ActionList[] = { { {ACTION_TICK, 1, 0, 0, 0}, &Room::veng6Tick1 }, { {ACTION_WALK, OBJECT_DOOR, 0, 0, 0}, &Room::veng6WalkToDoor }, { {ACTION_WALK, HOTSPOT_DOOR, 0, 0, 0}, &Room::veng6WalkToDoor }, { {ACTION_DONE_WALK, 2, 0, 0, 0}, &Room::veng6ReachedDoor }, { {ACTION_DONE_ANIM, 1, 0, 0, 0}, &Room::veng6DoorOpened }, { {ACTION_LOOK, HOTSPOT_LEFT_PORT, 0, 0, 0}, &Room::veng6LookAtLeftPort }, { {ACTION_LOOK, HOTSPOT_RIGHT_PORT, 0, 0, 0}, &Room::veng6LookAtRightPort }, { {ACTION_LOOK, OBJECT_DOOR, 0, 0, 0}, &Room::veng6LookAtDoor }, { {ACTION_LOOK, HOTSPOT_DOOR, 0, 0, 0}, &Room::veng6LookAtDoor }, { {ACTION_LOOK, HOTSPOT_OIL_CANISTER, 0, 0, 0}, &Room::veng6LookAtOilCanister }, { {ACTION_LOOK, OBJECT_CABINET, 0, 0, 0}, &Room::veng6LookAtCabinet }, { {ACTION_LOOK, HOTSPOT_CABINET, 0, 0, 0}, &Room::veng6LookAtCabinet }, { {ACTION_LOOK, OBJECT_CABLE_2, 0, 0, 0}, &Room::veng6LookAtCable }, { {ACTION_LOOK, OBJECT_CABLE_1, 0, 0, 0}, &Room::veng6LookAtCable }, { {ACTION_LOOK, HOTSPOT_RIGHT_CONSOLE, 0, 0, 0}, &Room::veng6LookAtRightConsole }, { {ACTION_LOOK, OBJECT_IMPULSE_ENGINES, 0, 0, 0}, &Room::veng6LookAtImpulseEngines }, { {ACTION_LOOK, HOTSPOT_IMPULSE_ENGINES, 0, 0, 0}, &Room::veng6LookAtImpulseEngines }, { {ACTION_LOOK, HOTSPOT_LEFT_CONSOLE, 0, 0, 0}, &Room::veng6LookAtLeftConsole }, { {ACTION_LOOK, OBJECT_JUNCTION_BOX, 0, 0, 0}, &Room::veng6LookAtJunctionBox }, { {ACTION_LOOK, OBJECT_JOURNAL, 0, 0, 0}, &Room::veng6LookAtJournal }, { {ACTION_LOOK, OBJECT_KIRK, 0, 0, 0}, &Room::veng6LookAtKirk }, { {ACTION_LOOK, OBJECT_SPOCK, 0, 0, 0}, &Room::veng6LookAtSpock }, { {ACTION_LOOK, OBJECT_MCCOY, 0, 0, 0}, &Room::veng6LookAtMccoy }, { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0, 0}, &Room::veng6LookAtRedshirt }, { {ACTION_LOOK, OBJECT_DEAD_GUY, 0, 0, 0}, &Room::veng6LookAtDeadGuy }, { {ACTION_LOOK, 0xff, 0, 0, 0}, &Room::veng6LookAnywhere }, { {ACTION_TALK, OBJECT_KIRK, 0, 0, 0}, &Room::veng6TalkToKirk }, { {ACTION_TALK, OBJECT_SPOCK, 0, 0, 0}, &Room::veng6TalkToSpock }, { {ACTION_TALK, OBJECT_MCCOY, 0, 0, 0}, &Room::veng6TalkToMccoy }, { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0, 0}, &Room::veng6TalkToRedshirt }, { {ACTION_USE, OBJECT_ICABLE1, HOTSPOT_LEFT_PORT, 0, 0}, &Room::veng6UseCable1OnLeftPort }, { {ACTION_USE, OBJECT_ICABLE1, HOTSPOT_LEFT_CONSOLE, 0, 0}, &Room::veng6UseCable1OnLeftPort }, { {ACTION_USE, OBJECT_ICABLE2, HOTSPOT_LEFT_PORT, 0, 0}, &Room::veng6UseCable2OnLeftPort }, { {ACTION_USE, OBJECT_ICABLE2, HOTSPOT_LEFT_CONSOLE, 0, 0}, &Room::veng6UseCable2OnLeftPort }, { {ACTION_DONE_WALK, 3, 0, 0, 0}, &Room::veng6KirkOrSpockReachedLeftPort }, { {ACTION_DONE_WALK, 4, 0, 0, 0}, &Room::veng6KirkOrSpockReachedLeftPort }, { {ACTION_DONE_ANIM, 5, 0, 0, 0}, &Room::veng6AttachedLeftCable }, { {ACTION_USE, OBJECT_ICABLE1, HOTSPOT_RIGHT_PORT, 0, 0}, &Room::veng6UseCable1OnRightPort }, { {ACTION_USE, OBJECT_ICABLE1, HOTSPOT_RIGHT_CONSOLE, 0, 0}, &Room::veng6UseCable1OnRightPort }, { {ACTION_USE, OBJECT_ICABLE2, HOTSPOT_RIGHT_PORT, 0, 0}, &Room::veng6UseCable2OnRightPort }, { {ACTION_USE, OBJECT_ICABLE2, HOTSPOT_RIGHT_CONSOLE, 0, 0}, &Room::veng6UseCable2OnRightPort }, { {ACTION_DONE_WALK, 6, 0, 0, 0}, &Room::veng6KirkOrSpockReachedRightPort }, { {ACTION_DONE_WALK, 7, 0, 0, 0}, &Room::veng6KirkOrSpockReachedRightPort }, { {ACTION_DONE_ANIM, 8, 0, 0, 0}, &Room::veng6AttachedRightCable }, { {ACTION_USE, OBJECT_SPOCK, OBJECT_JUNCTION_BOX, 0, 0}, &Room::veng6UseCrewmanOnJunctionBox }, { {ACTION_USE, OBJECT_MCCOY, OBJECT_JUNCTION_BOX, 0, 0}, &Room::veng6UseCrewmanOnJunctionBox }, { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_JUNCTION_BOX, 0, 0}, &Room::veng6UseCrewmanOnJunctionBox }, { {ACTION_USE, OBJECT_KIRK, OBJECT_JUNCTION_BOX, 0, 0}, &Room::veng6UseCrewmanOnJunctionBox }, { {ACTION_DONE_WALK, 9, 0, 0, 0}, &Room::veng6SpockReachedJunctionBox }, { {ACTION_DONE_ANIM, 10, 0, 0, 0}, &Room::veng6SpockAdjustedJunctionBox }, { {ACTION_USE, OBJECT_IHYPO, HOTSPOT_OIL_CANISTER, 0, 0}, &Room::veng6UseHypoOnOilCanister }, { {ACTION_DONE_WALK, 13, 0, 0, 0}, &Room::veng6ReachedOilCanister }, { {ACTION_DONE_ANIM, 14, 0, 0, 0}, &Room::veng6FilledHypoWithOil }, { {ACTION_USE, OBJECT_KIRK, OBJECT_CABINET, 0, 0}, &Room::veng6UseCabinet }, { {ACTION_DONE_WALK, 15, 0, 0, 0}, &Room::veng6ReachedCabinet }, { {ACTION_DONE_ANIM, 16, 0, 0, 0}, &Room::veng6OpenedOrClosedCabinet }, { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_IMPULSE_ENGINES, 0, 0}, &Room::veng6UseSTricorderOnImpulseEngines }, { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_RIGHT_CONSOLE, 0, 0}, &Room::veng6UseSTricorderOnRightConsole }, { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_JUNCTION_BOX, 0, 0}, &Room::veng6UseSTricorderOnJunctionBox }, { {ACTION_USE, OBJECT_IFUSION, HOTSPOT_LEFT_CONSOLE, 0, 0}, &Room::veng6UsePowerPackOnLeftConsole }, { {ACTION_GET, OBJECT_JUNCTION_BOX, 0, 0, 0}, &Room::veng6GetJunctionBox }, { {ACTION_GET, HOTSPOT_OIL_CANISTER, 0, 0, 0}, &Room::veng6GetOilCanister }, { {ACTION_GET, OBJECT_JOURNAL, 0, 0, 0}, &Room::veng6GetEngineeringJournal }, { {ACTION_DONE_WALK, 11, 0, 0, 0}, &Room::veng6ReachedEngineeringJournal }, { {ACTION_DONE_ANIM, 12, 0, 0, 0}, &Room::veng6TookEngineeringJournal }, // Common code { {ACTION_TICK, 0xff, 0xff, 0xff, 0}, &Room::vengaTick }, { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0, 0}, &Room::vengaUsePhaserAnywhere }, { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0, 0}, &Room::vengaUsePhaserAnywhere }, { {ACTION_LOOK, OBJECT_IHYPO, 0, 0, 0}, &Room::vengaLookAtHypo }, { {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0, 0}, &Room::vengaUseCommunicator }, { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0, 0}, &Room::vengaUseMccoyOnDeadGuy }, { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0, 0}, &Room::vengaUseMccoyOnDeadGuy }, { {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0, 0}, &Room::vengaUseMccoyOnDeadGuy }, // ENHANCEMENT { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMPULSE_ENGINES, 0, 0}, &Room::veng6UseSTricorderOnImpulseEngines }, { {ACTION_LIST_END, 0, 0, 0, 0}, nullptr } }; enum veng6TextIds { TX_SPEAKER_KIRK, TX_SPEAKER_MCCOY, TX_SPEAKER_SPOCK, TX_SPEAKER_KIJE, TX_SPEAKER_COMPUTER, TX_BRIDU146, TX_COMPA185, TX_DEM3_019, TX_MUD1N014, TX_MUD4_018, TX_VEN0N016, TX_VEN0_016, TX_VEN2U093, TX_VEN2_028, TX_VEN2_066, TX_VEN2_098, TX_VEN4N010, TX_VEN4_016, TX_VEN5N007, TX_VEN6N000, TX_VEN6N001, TX_VEN6N002, TX_VEN6N003, TX_VEN6N005, TX_VEN6N006, TX_VEN6N007, TX_VEN6N008, TX_VEN6N009, TX_VEN6N010, TX_VEN6N011, TX_VEN6N012, TX_VEN6N013, TX_VEN6N015, TX_VEN6N016, TX_VEN6N017, TX_VEN6N018, TX_VEN6N019, TX_VEN6N020, TX_VEN6N022, TX_VEN6N024, TX_VEN6N025, TX_VEN6_001, TX_VEN6_002, TX_VEN6_003, TX_VEN6_005, TX_VEN6_006, TX_VEN6_007, TX_VEN6_008, TX_VEN6_009, TX_VEN6_010, TX_VEN6_011, TX_VEN6_012, TX_VEN6_013, TX_VEN6_014, TX_VEN6_015, TX_VEN6_016, TX_VEN6_017, TX_VEN6_018, TX_VEN6_019, TX_VEN6_020, TX_VEN6_021, TX_VEN6_022, TX_VEN6_023, TX_VENA_F32, TX_VENA_F34, TX_VENA_F40 }; // TODO: Finish floppy offsets extern const RoomTextOffsets veng6TextOffsets[] = { { TX_SPEAKER_KIRK, 8894, 0, 0, 0 }, { TX_SPEAKER_MCCOY, 8905, 0, 0, 0 }, { TX_SPEAKER_SPOCK, 8915, 0, 0, 0 }, { TX_SPEAKER_KIJE, 8925, 0, 0, 0 }, { TX_SPEAKER_COMPUTER, 8937, 0, 0, 0 }, { TX_BRIDU146, 7831, 0, 0, 0 }, { TX_COMPA185, 4008, 0, 0, 0 }, { TX_DEM3_019, 8315, 0, 0, 0 }, { TX_MUD1N014, 6550, 0, 0, 0 }, { TX_MUD4_018, 7762, 0, 0, 0 }, //{ TX_MUD4_018, 7895, 0, 0, 0 }, // Skip duplicate text { TX_VEN0N016, 2156, 0, 0, 0 }, { TX_VEN0_016, 8552, 0, 0, 0 }, //{ TX_VEN0_016, 8611, 0, 0, 0 }, // Skip duplicate text { TX_VEN2U093, 7963, 0, 0, 0 }, { TX_VEN2_028, 8070, 0, 0, 0 }, { TX_VEN2_066, 8148, 0, 0, 0 }, { TX_VEN2_098, 6958, 0, 0, 0 }, { TX_VEN4N010, 7612, 0, 0, 0 }, { TX_VEN4_016, 8366, 0, 0, 0 }, { TX_VEN5N007, 775, 0, 0, 0 }, { TX_VEN6N000, 2099, 0, 0, 0 }, { TX_VEN6N001, 1781, 0, 0, 0 }, { TX_VEN6N002, 1999, 0, 0, 0 }, { TX_VEN6N003, 1873, 0, 0, 0 }, { TX_VEN6N005, 5276, 0, 0, 0 }, { TX_VEN6N006, 4887, 0, 0, 0 }, { TX_VEN6N007, 4998, 0, 0, 0 }, { TX_VEN6N007, 7677, 0, 0, 0 }, { TX_VEN6N008, 6615, 0, 0, 0 }, { TX_VEN6N009, 1334, 0, 0, 0 }, { TX_VEN6N010, 1253, 0, 0, 0 }, { TX_VEN6N011, 845, 0, 0, 0 }, { TX_VEN6N012, 1425, 0, 0, 0 }, { TX_VEN6N013, 1052, 0, 0, 0 }, { TX_VEN6N015, 976, 0, 0, 0 }, { TX_VEN6N016, 8975, 0, 0, 0 }, { TX_VEN6N018, 9063, 0, 0, 0 }, { TX_VEN6N017, 1139, 0, 0, 0 }, { TX_VEN6N019, 2207, 0, 0, 0 }, { TX_VEN6N020, 3318, 0, 0, 0 }, { TX_VEN6N022, 3710, 0, 0, 0 }, { TX_VEN6N024, 6803, 0, 0, 0 }, { TX_VEN6N025, 1536, 0, 0, 0 }, { TX_VEN6_001, 5699, 0, 0, 0 }, { TX_VEN6_002, 4457, 0, 0, 0 }, { TX_VEN6_003, 4062, 0, 0, 0 }, { TX_VEN6_005, 2298, 0, 0, 0 }, { TX_VEN6_006, 6407, 0, 0, 0 }, { TX_VEN6_007, 5830, 0, 0, 0 }, { TX_VEN6_008, 2674, 0, 0, 0 }, { TX_VEN6_009, 2457, 0, 0, 0 }, { TX_VEN6_010, 5433, 0, 0, 0 }, { TX_VEN6_011, 4737, 0, 0, 0 }, { TX_VEN6_012, 3881, 0, 0, 0 }, { TX_VEN6_013, 5972, 0, 0, 0 }, { TX_VEN6_014, 2534, 0, 0, 0 }, { TX_VEN6_015, 6196, 0, 0, 0 }, { TX_VEN6_016, 4297, 0, 0, 0 }, { TX_VEN6_017, 4105, 0, 0, 0 }, { TX_VEN6_018, 2781, 0, 0, 0 }, { TX_VEN6_019, 4596, 0, 0, 0 }, { TX_VEN6_020, 5500, 0, 0, 0 }, { TX_VEN6_021, 1616, 0, 0, 0 }, { TX_VEN6_022, 9197, 0, 0, 0 }, { TX_VEN6_023, 2954, 0, 0, 0 }, { TX_VENA_F32, 7188, 0, 0, 0 }, { TX_VENA_F34, 7458, 0, 0, 0 }, { TX_VENA_F40, 7053, 0, 0, 0 }, { -1, 0, 0, 0, 0 } }; extern const RoomText veng6Texts[] = { { -1, Common::UNK_LANG, "" } }; #define DOOR_X 0x13e #define DOOR_Y 0xa8 #define CABLE_1_X 0x5d #define CABLE_1_Y 0x95 #define CABLE_2_X 0x107 #define CABLE_2_Y 0x94 #define IMPULSE_ENGINE_X 0x9e #define IMPULSE_ENGINE_Y 0x59 #define CABINET_X 0x19 #define CABINET_Y 0x86 void Room::veng6Tick1() { loadActorAnim(OBJECT_DOOR, "s7r6d1c", DOOR_X, DOOR_Y); loadActorAnim(OBJECT_DEAD_GUY, "s7r6c1", 0x82, 0x5c); loadActorAnim(OBJECT_JUNCTION_BOX, "s7r6j1", 0x9a, 0xaf); if (_awayMission->veng.junctionCablesConnected & 1) loadActorAnim(OBJECT_CABLE_1, "s7r6cl", CABLE_1_X, CABLE_1_Y); if (_awayMission->veng.junctionCablesConnected & 2) loadActorAnim(OBJECT_CABLE_2, "s7r6cr", CABLE_2_X, CABLE_2_Y); if (_awayMission->veng.impulseEnginesOn) { loadActorAnim(OBJECT_IMPULSE_ENGINES, "s7r6i1", IMPULSE_ENGINE_X, IMPULSE_ENGINE_Y); // FIXME: doesn't loop playVoc("VEN6LON"); } else playVoc("VEN6LOFF"); if (!_awayMission->veng.tookEngineeringJournal) loadActorAnim(OBJECT_JOURNAL, "s7r6ej", 0x24, 0x82); loadActorAnim(OBJECT_CABINET, "s7r6p1c", CABINET_X, CABINET_Y); if (_awayMission->veng.engineeringCabinetOpen) loadActorAnim(OBJECT_CABINET, "s7r6p1o", CABINET_X, CABINET_Y); } void Room::veng6WalkToDoor() { walkCrewmanC(OBJECT_KIRK, 0x120, 0xad, &Room::veng6ReachedDoor); } void Room::veng6ReachedDoor() { _awayMission->disableInput = true; playSoundEffectIndex(kSfxDoor); loadActorAnimC(OBJECT_DOOR, "s7r6d1", DOOR_X, DOOR_Y, &Room::veng6DoorOpened); } void Room::veng6DoorOpened() { walkCrewman(OBJECT_KIRK, 0x136, 0xaa); } void Room::veng6LookAtLeftPort() { showDescription(TX_VEN6N018); } void Room::veng6LookAtRightPort() { showDescription(TX_VEN6N016); } void Room::veng6LookAtDoor() { showDescription(TX_VEN5N007); } void Room::veng6LookAtOilCanister() { showDescription(TX_VEN6N011); } void Room::veng6LookAtCabinet() { showDescription(TX_VEN6N015); } void Room::veng6LookAtCable() { showDescription(TX_VEN6N013); } void Room::veng6LookAtRightConsole() { showDescription(TX_VEN6N017); } void Room::veng6LookAtImpulseEngines() { showDescription(TX_VEN6N010); } void Room::veng6LookAtLeftConsole() { showDescription(TX_VEN6N009); } void Room::veng6LookAtJunctionBox() { showDescription(TX_VEN6N012); } void Room::veng6LookAtJournal() { showDescription(TX_VEN6N025); showText(TX_SPEAKER_SPOCK, TX_VEN6_021); } void Room::veng6LookAtKirk() { showDescription(TX_VEN6N001); } void Room::veng6LookAtSpock() { showDescription(TX_VEN6N003); } void Room::veng6LookAtMccoy() { showDescription(TX_VEN6N002); } void Room::veng6LookAtRedshirt() { showDescription(TX_VEN6N000); } void Room::veng6LookAtDeadGuy() { showDescription(TX_VEN0N016); } void Room::veng6LookAnywhere() { showDescription(TX_VEN6N019); } void Room::veng6TalkToKirk() { showText(TX_SPEAKER_KIRK, TX_VEN6_005); showText(TX_SPEAKER_MCCOY, TX_VEN6_009); } void Room::veng6TalkToSpock() { showText(TX_SPEAKER_SPOCK, TX_VEN6_014); } void Room::veng6TalkToMccoy() { showText(TX_SPEAKER_MCCOY, TX_VEN6_008); showText(TX_SPEAKER_SPOCK, TX_VEN6_018); } void Room::veng6TalkToRedshirt() { showText(TX_SPEAKER_KIJE, TX_VEN6_023); } void Room::veng6UseCable1OnLeftPort() { veng6UseCableOnLeftPort(OBJECT_ICABLE1); } void Room::veng6UseCable2OnLeftPort() { veng6UseCableOnLeftPort(OBJECT_ICABLE2); } void Room::veng6UseCableOnLeftPort(byte cable) { _roomVar.veng.cableInUse = cable; if (!(_awayMission->veng.junctionCablesConnected & 1)) { _awayMission->disableInput = true; walkCrewmanC(OBJECT_SPOCK, 0x91, 0xb4, &Room::veng6KirkOrSpockReachedLeftPort); walkCrewmanC(OBJECT_KIRK, 0x5c, 0xa0, &Room::veng6KirkOrSpockReachedLeftPort); } } void Room::veng6KirkOrSpockReachedLeftPort() { if (++_roomVar.veng.kirkAndSpockReadyToAttachLeftCable == 2) { loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::veng6AttachedLeftCable); loadActorAnim(OBJECT_SPOCK, "suseln"); playVoc("EFX4"); } } void Room::veng6AttachedLeftCable() { loadActorAnim(OBJECT_CABLE_1, "s7r6cl", CABLE_1_X, CABLE_1_Y); showDescription(TX_VEN6N020); _awayMission->veng.junctionCablesConnected |= 1; loseItem(_roomVar.veng.cableInUse); _awayMission->disableInput = false; } void Room::veng6UseCable1OnRightPort() { veng6UseCableOnRightPort(OBJECT_ICABLE1); } void Room::veng6UseCable2OnRightPort() { veng6UseCableOnRightPort(OBJECT_ICABLE2); } void Room::veng6UseCableOnRightPort(byte cable) { _roomVar.veng.cableInUse = cable; if (!(_awayMission->veng.junctionCablesConnected & 2)) { _awayMission->disableInput = true; walkCrewmanC(OBJECT_SPOCK, 0xac, 0xb4, &Room::veng6KirkOrSpockReachedRightPort); walkCrewmanC(OBJECT_KIRK, 0x107, 0xa0, &Room::veng6KirkOrSpockReachedRightPort); } } void Room::veng6KirkOrSpockReachedRightPort() { if (++_roomVar.veng.kirkAndSpockReadyToAttachRightCable == 2) { loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::veng6AttachedRightCable); loadActorAnim(OBJECT_SPOCK, "suseln"); playVoc("EFX4"); } } void Room::veng6AttachedRightCable() { loadActorAnim(OBJECT_CABLE_2, "s7r6cr", CABLE_2_X, CABLE_2_Y); showDescription(TX_VEN6N022); _awayMission->veng.junctionCablesConnected |= 2; loseItem(_roomVar.veng.cableInUse); _awayMission->disableInput = false; } void Room::veng6UseCrewmanOnJunctionBox() { if (_awayMission->veng.impulseEnginesOn) showText(TX_SPEAKER_SPOCK, TX_VEN6_012); else if ((_awayMission->veng.junctionCablesConnected & 3) == 3) { showText(TX_SPEAKER_COMPUTER, TX_COMPA185); showText(TX_SPEAKER_KIRK, TX_VEN6_003); if (!_awayMission->veng.readEngineeringJournal) showText(TX_SPEAKER_SPOCK, TX_VEN6_017); else { showText(TX_SPEAKER_SPOCK, TX_VEN6_016); showText(TX_SPEAKER_KIRK, TX_VEN6_002); walkCrewmanC(OBJECT_SPOCK, 0x99, 0xb4, &Room::veng6SpockReachedJunctionBox); } } else showText(TX_SPEAKER_SPOCK, TX_VEN6_011); } void Room::veng6SpockReachedJunctionBox() { loadActorAnimC(OBJECT_SPOCK, "suseln", -1, -1, &Room::veng6SpockAdjustedJunctionBox); } void Room::veng6SpockAdjustedJunctionBox() { showText(TX_SPEAKER_SPOCK, TX_VEN6_019); loadActorAnim(OBJECT_IMPULSE_ENGINES, "s7r6i1", IMPULSE_ENGINE_X, IMPULSE_ENGINE_Y); _awayMission->veng.impulseEnginesOn = true; stopAllVocSounds(); playVoc("VEN6LON"); } void Room::veng6UseHypoOnOilCanister() { if (_awayMission->veng.oilInHypo) showDescription(TX_VEN6N006); else { _awayMission->disableInput = true; walkCrewmanC(OBJECT_KIRK, 0x3c, 0x9e, &Room::veng6ReachedOilCanister); } } void Room::veng6ReachedOilCanister() { loadActorAnimC(OBJECT_KIRK, "kusehw", -1, -1, &Room::veng6FilledHypoWithOil); } void Room::veng6FilledHypoWithOil() { _awayMission->disableInput = false; showDescription(TX_VEN6N007); _awayMission->veng.oilInHypo = true; } void Room::veng6UseCabinet() { _awayMission->disableInput = true; walkCrewmanC(OBJECT_KIRK, 0x36, 0x9f, &Room::veng6ReachedCabinet); } void Room::veng6ReachedCabinet() { loadActorAnimC(OBJECT_KIRK, "kusehw", -1, -1, &Room::veng6OpenedOrClosedCabinet); } void Room::veng6OpenedOrClosedCabinet() { _awayMission->disableInput = false; if (_awayMission->veng.engineeringCabinetOpen) { loadActorAnim(OBJECT_CABINET, "s7r6p2", CABINET_X, CABINET_Y); playSoundEffectIndex(kSfxDoor); _awayMission->veng.engineeringCabinetOpen = false; } else { loadActorAnim(OBJECT_CABINET, "s7r6p1", CABINET_X, CABINET_Y); playSoundEffectIndex(kSfxDoor); _awayMission->veng.engineeringCabinetOpen = true; if (!_awayMission->veng.tookEngineeringJournal) showDescription(TX_VEN6N005); } } void Room::veng6UseSTricorderOnImpulseEngines() { if (_awayMission->veng.impulseEnginesOn) spockScan(DIR_S, TX_SPEAKER_SPOCK, TX_VEN6_010); else { spockScan(DIR_S, TX_SPEAKER_SPOCK, TX_VEN6_020); showText(TX_SPEAKER_KIRK, TX_VEN6_001); showText(TX_SPEAKER_SPOCK, TX_VEN6_022); } } void Room::veng6UseSTricorderOnRightConsole() { if (_awayMission->veng.impulseEnginesOn) spockScan(DIR_S, TX_SPEAKER_SPOCK, TX_VEN6_013); else spockScan(DIR_S, TX_SPEAKER_SPOCK, TX_VEN6_007); } void Room::veng6UseSTricorderOnJunctionBox() { spockScan(DIR_S, TX_SPEAKER_SPOCK, TX_VEN6_015); } void Room::veng6UsePowerPackOnLeftConsole() { showText(TX_SPEAKER_SPOCK, TX_VEN6_006); } void Room::veng6GetJunctionBox() { showDescription(TX_MUD1N014); } void Room::veng6GetOilCanister() { showDescription(TX_VEN6N008); } void Room::veng6GetEngineeringJournal() { _awayMission->disableInput = true; walkCrewmanC(OBJECT_KIRK, 0x36, 0x9f, &Room::veng6ReachedEngineeringJournal); } void Room::veng6ReachedEngineeringJournal() { loadActorAnimC(OBJECT_KIRK, "kusemw", -1, -1, &Room::veng6TookEngineeringJournal); } void Room::veng6TookEngineeringJournal() { loadActorStandAnim(OBJECT_JOURNAL); _awayMission->disableInput = false; showDescription(TX_VEN6N024); _awayMission->veng.tookEngineeringJournal = true; giveItem(OBJECT_ITECH); } }