From a089dc23f7fa76cec77f235efa9262413ea7cd78 Mon Sep 17 00:00:00 2001 From: Matthew Stewart Date: Sat, 4 Aug 2018 03:39:11 -0400 Subject: [PATCH] STARTREK: VENG2 --- engines/startrek/awaymission.h | 35 +- engines/startrek/room.h | 68 +++ engines/startrek/rooms/veng0.cpp | 2 +- engines/startrek/rooms/veng2.cpp | 871 ++++++++++++++++++++++++++++++- engines/startrek/text.cpp | 166 +++++- engines/startrek/text.h | 174 ++++++ 6 files changed, 1310 insertions(+), 6 deletions(-) diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h index 2bf92e16e612..286300d3840a 100644 --- a/engines/startrek/awaymission.h +++ b/engines/startrek/awaymission.h @@ -621,10 +621,11 @@ struct AwayMission { struct { bool enteredRoom0FirstTime; // 0x2d + int16 missionScore; // 0x2e bool bridgeCrewmanDead; // 0x30 bool scannedCaptainsChair; // 0x31 bool scannedComputerBank; // 0x32 - bool field34; // 0x34 + bool impulseEnginesOn; // 0x34 // 0: beam still in place // 1: used saw on beam @@ -637,8 +638,40 @@ struct AwayMission { bool removedPanelDebris; // 0x39 bool oilInHypo; // 0x3a bool loosenedDebrisWithOil; // 0x3b + + // 0: no power allocated + // 1: power to weapons + // 2: power to shields + // 3: power to transporter + byte poweredSystem; // 0x3c + + // 0: no tricorders plugged in + // 1: med tricorder plugged in + // 2: sci tricorder plugged in + // 3: both plugged in + byte tricordersPluggedIntoComputer; // 0x3d + + byte captainsLogIndex; // 0x3e + bool elasiShieldsDown; // 0x40 + bool torpedoLoaded; // 0x41 + bool firedTorpedo; // 0x42 + bool elasiShipDecloaked; // 0x43 + bool countdownStarted; // 0x44 + bool toldElasiToBeamOver; // 0x45 + bool scannedMainComputer; // 0x46 + bool elasiHailedRepublic; // 0x47 + bool tookRecordDeckFromAuxilaryControl; // 0x48 + int16 field49; // 0x49 + int16 field4b; // 0x4b + int16 field4d; // 0x4d + int16 field51; // 0x51 + bool havePowerPack; // 0x5a bool tookMolecularSaw; // 0x60 + bool readEngineeringJournal; // 0x61 + bool examinedTorpedoControl; // 0x66 bool field68; // 0x68 + bool field69; // 0x69 + bool readAllLogs; // 0x6a bool field6b; // 0x6b bool field6c; // 0x6c } veng; diff --git a/engines/startrek/room.h b/engines/startrek/room.h index 2ab1f2be0a5f..41b7d9b49a55 100644 --- a/engines/startrek/room.h +++ b/engines/startrek/room.h @@ -2524,9 +2524,74 @@ class Room { void veng1ReachedDebrisToGet(); void veng1TriedToGetDebris(); void veng1UseMccoyOnDeadGuy(); + // TODO: common code // VENG2 void veng2Tick1(); + void veng2Timer0Expired(); + void veng2ElasiShipDecloaked(); + void veng2Timer2Expired(); + void veng2TouchedDoor(); + void veng2LookAtViewscreen(); + void veng2LookAtMiddleConsole(); + void veng2LookAtDamageDisplay(); + void veng2LookAtSTricorder(); + void veng2LookAtMTricorder(); + void veng2LookAtTorpedoButton(); + void veng2LookAtTorpedoControl(); + void veng2LookAtImpulseConsole(); + void veng2LookAtMainComputer(); + void veng2LookAtRecordDeck(); + void veng2LookAtDeckIOConsole(); + void veng2LookAtKirk(); + void veng2LookAtSpock(); + void veng2LookAtMccoy(); + void veng2LookAtRedshirt(); + void veng2LookAnywhere(); + void veng2TalkToKirk(); + void veng2TalkToSpock(); + void veng2TalkToMccoy(); + void veng2TalkToRedshirt(); + void veng2UseTechJournalOnDeckIOConsole(); + void veng2ReachedDeckIOWithTechJournal(); + void veng2DoneReadingTechJournal(); + void veng2UseLogOnDeckIOConsole(); + void veng2ReachedDeckIOWithLog(); + void veng2LoadedLog(); + void veng2UseCommunicator(); + void veng2UseKirkOnTorpedoButton(); + void veng2UseKirkReachedTorpedoButton(); + void veng2KirkFiredTorpedo(); + void veng2TorpedoStruckElasiShip(); + void veng2ElasiRetreated(); + void veng2CrewmanInPositionToBeamOut(); + void veng2UseSTricorderOnTorpedoButton(); + void veng2UseSTricorderOnMiddleConsole(); + void veng2UseSTricorderOnTorpedoControl(); + void veng2UseImpulseConsole(); + void veng2SpockReachedImpulseConsole(); + void veng2SpockUsedImpulseConsole(); + void veng2UseMainComputer(); + void veng2UseSTricorderOnMainComputer(); + void veng2SpockReachedMainComputerToPutTricorder(); + void veng2AttachedSTricorderToComputer(); + void veng2UseMTricorderOnMainComputer(); + void veng2MccoyReachedMainComputerToPutTricorder(); + void veng2AttachedMTricorderToComputer(); + void veng2BothTricordersPluggedIn(); + void veng2UseSTricorderOnDeckIOConsole(); + void veng2UseSTricorderOnImpulseConsole(); + void veng2UseFusionPackOnMainComputer(); + void veng2GetLogDeck(); + void veng2ReachedLogDeck(); + void veng2PickedUpLogDeck(); + void veng2GetSTricorder(); + void veng2ReachedSTricorderToGet(); + void veng2PickedUpSTricorder(); + void veng2GetMTricorder(); + void veng2ReachedMTricorderToGet(); + void veng2PickedUpMTricorder(); + // TODO: common code // VENG3 void veng3Tick1(); @@ -2863,6 +2928,9 @@ class Room { // veng1 byte doorOpenCounter; // 0xca bool walkingToDoor; // 0xcb + + // veng2 + byte numCrewmenReadyToBeamOut; // 0xca } veng; } _roomVar; diff --git a/engines/startrek/rooms/veng0.cpp b/engines/startrek/rooms/veng0.cpp index c29033655c38..0e7b544cc86d 100644 --- a/engines/startrek/rooms/veng0.cpp +++ b/engines/startrek/rooms/veng0.cpp @@ -175,7 +175,7 @@ void Room::veng0UseSTricorderOnChair() { } void Room::veng0UseSTricorderAnywhere() { - if (!_awayMission->veng.field34) + if (!_awayMission->veng.impulseEnginesOn) spockScan(DIR_S, TX_VEN0_027); } diff --git a/engines/startrek/rooms/veng2.cpp b/engines/startrek/rooms/veng2.cpp index 2e00f0a88419..d473e588ac13 100644 --- a/engines/startrek/rooms/veng2.cpp +++ b/engines/startrek/rooms/veng2.cpp @@ -22,20 +22,885 @@ #include "startrek/room.h" -#define OBJECT_DOOR 8 +// This room is confusing, because it has two hotspots directly adjacent to each other +// that deal with torpedos, but they act differently. -#define HOTSPOT_20 0x20 +// BUG: It's possible to swap from having shields up to some other system, by first +// putting shields up, then swapping to another system in the few seconds before the Elasi +// hail the ship. + +// BUG: Once you have permission to power down the shields, attempting to power on the +// transporter gives you text along the lines of "the elasi would detect us lowering the +// shields" (even after lowering the shields). + +#define OBJECT_DECK 8 +#define OBJECT_STRICORDER 9 +#define OBJECT_MTRICORDER 10 +#define OBJECT_VIEWSCREEN 11 +#define OBJECT_DAMAGE_DISPLAY_1 12 +#define OBJECT_MAIN_COMPUTER 13 +#define OBJECT_TORPEDO_BUTTON 14 +#define OBJECT_IMPULSE_CONSOLE 15 +#define OBJECT_MIDDLE_CONSOLE 16 +#define OBJECT_RIGHT_COMPUTER_PANEL 17 +#define OBJECT_DECK_IO_CONSOLE 18 +#define OBJECT_CEILING_PANEL 19 +#define OBJECT_LEFT_COMPUTER_PANEL 20 +#define OBJECT_DAMAGE_DISPLAY_2 21 + +#define HOTSPOT_TORPEDO_BUTTON 0x20 +#define HOTSPOT_TORPEDO_CONTROL 0x21 +#define HOTSPOT_DECK_IO_SLOT 0x22 +#define HOTSPOT_IMPULSE_CONSOLE 0x23 +#define HOTSPOT_MAIN_COMPUTER 0x24 +#define HOTSPOT_DECK_IO_CONSOLE 0x25 +#define HOTSPOT_MIDDLE_CONSOLE 0x26 +#define HOTSPOT_VIEWSCREEN 0x27 +#define HOTSPOT_DAMAGE_DISPLAY 0x28 namespace StarTrek { extern const RoomAction veng2ActionList[] = { - { {ACTION_TICK, 1, 0, 0}, &Room::veng2Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::veng2Tick1 }, + { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::veng2Timer0Expired }, + { {ACTION_TICK, 40, 0, 0}, &Room::veng2Timer0Expired }, + { {ACTION_DONE_ANIM, 5, 0, 0}, &Room::veng2ElasiShipDecloaked }, + { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::veng2Timer2Expired }, + { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::veng2TouchedDoor }, + + { {ACTION_LOOK, OBJECT_VIEWSCREEN, 0, 0}, &Room::veng2LookAtViewscreen }, + { {ACTION_LOOK, HOTSPOT_VIEWSCREEN, 0, 0}, &Room::veng2LookAtViewscreen }, + { {ACTION_LOOK, OBJECT_MIDDLE_CONSOLE, 0, 0}, &Room::veng2LookAtMiddleConsole }, + { {ACTION_LOOK, HOTSPOT_MIDDLE_CONSOLE, 0, 0}, &Room::veng2LookAtMiddleConsole }, + { {ACTION_LOOK, OBJECT_DAMAGE_DISPLAY_1, 0, 0}, &Room::veng2LookAtDamageDisplay }, + { {ACTION_LOOK, OBJECT_DAMAGE_DISPLAY_2, 0, 0}, &Room::veng2LookAtDamageDisplay }, + { {ACTION_LOOK, HOTSPOT_DAMAGE_DISPLAY, 0, 0}, &Room::veng2LookAtDamageDisplay }, + { {ACTION_LOOK, OBJECT_STRICORDER, 0, 0}, &Room::veng2LookAtSTricorder }, + { {ACTION_LOOK, OBJECT_MTRICORDER, 0, 0}, &Room::veng2LookAtMTricorder }, + { {ACTION_LOOK, OBJECT_TORPEDO_BUTTON, 0, 0}, &Room::veng2LookAtTorpedoButton }, + { {ACTION_LOOK, HOTSPOT_TORPEDO_BUTTON, 0, 0}, &Room::veng2LookAtTorpedoButton }, + { {ACTION_LOOK, HOTSPOT_TORPEDO_CONTROL, 0, 0}, &Room::veng2LookAtTorpedoControl }, + { {ACTION_LOOK, OBJECT_IMPULSE_CONSOLE, 0, 0}, &Room::veng2LookAtImpulseConsole }, + { {ACTION_LOOK, HOTSPOT_IMPULSE_CONSOLE, 0, 0}, &Room::veng2LookAtImpulseConsole }, + { {ACTION_LOOK, OBJECT_MAIN_COMPUTER, 0, 0}, &Room::veng2LookAtMainComputer }, + { {ACTION_LOOK, HOTSPOT_MAIN_COMPUTER, 0, 0}, &Room::veng2LookAtMainComputer }, + { {ACTION_LOOK, OBJECT_DECK, 0, 0}, &Room::veng2LookAtRecordDeck }, + { {ACTION_LOOK, OBJECT_DECK_IO_CONSOLE, 0, 0}, &Room::veng2LookAtDeckIOConsole }, + { {ACTION_LOOK, HOTSPOT_DECK_IO_CONSOLE, 0, 0}, &Room::veng2LookAtDeckIOConsole }, + { {ACTION_LOOK, HOTSPOT_DECK_IO_SLOT, 0, 0}, &Room::veng2LookAtDeckIOConsole }, + { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::veng2LookAtKirk }, + { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::veng2LookAtSpock }, + { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::veng2LookAtMccoy }, + { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::veng2LookAtRedshirt }, + { {ACTION_LOOK, 0xff, 0, 0}, &Room::veng2LookAnywhere }, + { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::veng2TalkToKirk }, + { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::veng2TalkToSpock }, + { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::veng2TalkToMccoy }, + { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::veng2TalkToRedshirt }, + + { {ACTION_USE, OBJECT_ITECH, OBJECT_DECK_IO_CONSOLE, 0}, &Room::veng2UseTechJournalOnDeckIOConsole }, + { {ACTION_USE, OBJECT_ITECH, HOTSPOT_DECK_IO_CONSOLE, 0}, &Room::veng2UseTechJournalOnDeckIOConsole }, + { {ACTION_USE, OBJECT_ITECH, HOTSPOT_DECK_IO_SLOT, 0}, &Room::veng2UseTechJournalOnDeckIOConsole }, + { {ACTION_DONE_WALK, 22, 0, 0}, &Room::veng2ReachedDeckIOWithTechJournal }, + { {ACTION_DONE_ANIM, 23, 0, 0}, &Room::veng2DoneReadingTechJournal }, + { {ACTION_USE, OBJECT_IDECK, OBJECT_DECK_IO_CONSOLE, 0}, &Room::veng2UseLogOnDeckIOConsole }, + { {ACTION_USE, OBJECT_IDECK, HOTSPOT_DECK_IO_CONSOLE, 0}, &Room::veng2UseLogOnDeckIOConsole }, + { {ACTION_USE, OBJECT_IDECK, HOTSPOT_DECK_IO_SLOT, 0}, &Room::veng2UseLogOnDeckIOConsole }, + { {ACTION_DONE_WALK, 24, 0, 0}, &Room::veng2ReachedDeckIOWithLog }, + { {ACTION_DONE_ANIM, 25, 0, 0}, &Room::veng2LoadedLog }, + { {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::veng2UseCommunicator }, + + { {ACTION_USE, OBJECT_KIRK, OBJECT_TORPEDO_BUTTON, 0}, &Room::veng2UseKirkOnTorpedoButton }, + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_TORPEDO_BUTTON, 0}, &Room::veng2UseKirkOnTorpedoButton }, + { {ACTION_DONE_WALK, 18, 0, 0}, &Room::veng2UseKirkReachedTorpedoButton }, + { {ACTION_DONE_ANIM, 19, 0, 0}, &Room::veng2KirkFiredTorpedo }, + { {ACTION_DONE_ANIM, 7, 0, 0}, &Room::veng2TorpedoStruckElasiShip }, + { {ACTION_DONE_ANIM, 6, 0, 0}, &Room::veng2ElasiRetreated }, + { {ACTION_DONE_WALK, 1, 0, 0}, &Room::veng2CrewmanInPositionToBeamOut }, + { {ACTION_DONE_WALK, 2, 0, 0}, &Room::veng2CrewmanInPositionToBeamOut }, + { {ACTION_DONE_WALK, 3, 0, 0}, &Room::veng2CrewmanInPositionToBeamOut }, + { {ACTION_DONE_WALK, 4, 0, 0}, &Room::veng2CrewmanInPositionToBeamOut }, + + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_TORPEDO_BUTTON, 0}, &Room::veng2UseSTricorderOnTorpedoButton }, // FIXME: hotspots? + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_MIDDLE_CONSOLE, 0}, &Room::veng2UseSTricorderOnMiddleConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_MIDDLE_CONSOLE, 0}, &Room::veng2UseSTricorderOnMiddleConsole }, + + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_TORPEDO_CONTROL, 0}, &Room::veng2UseSTricorderOnTorpedoControl }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_TORPEDO_CONTROL, 0}, &Room::veng2UseSTricorderOnTorpedoControl }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_TORPEDO_CONTROL, 0}, &Room::veng2UseSTricorderOnTorpedoControl }, + + { {ACTION_USE, OBJECT_KIRK, OBJECT_IMPULSE_CONSOLE, 0}, &Room::veng2UseImpulseConsole }, + { {ACTION_USE, OBJECT_SPOCK, OBJECT_IMPULSE_CONSOLE, 0}, &Room::veng2UseImpulseConsole }, + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_IMPULSE_CONSOLE, 0}, &Room::veng2UseImpulseConsole }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_IMPULSE_CONSOLE, 0}, &Room::veng2UseImpulseConsole }, + { {ACTION_DONE_WALK, 20, 0, 0}, &Room::veng2SpockReachedImpulseConsole }, + { {ACTION_DONE_ANIM, 21, 0, 0}, &Room::veng2SpockUsedImpulseConsole }, + + { {ACTION_USE, OBJECT_KIRK, OBJECT_MAIN_COMPUTER, 0}, &Room::veng2UseMainComputer }, + { {ACTION_USE, OBJECT_SPOCK, OBJECT_MAIN_COMPUTER, 0}, &Room::veng2UseMainComputer }, + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_MAIN_COMPUTER, 0}, &Room::veng2UseMainComputer }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_MAIN_COMPUTER, 0}, &Room::veng2UseMainComputer }, + + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_MAIN_COMPUTER, 0}, &Room::veng2UseSTricorderOnMainComputer }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_MAIN_COMPUTER, 0}, &Room::veng2UseSTricorderOnMainComputer }, + { {ACTION_DONE_WALK, 10, 0, 0}, &Room::veng2SpockReachedMainComputerToPutTricorder }, + { {ACTION_DONE_ANIM, 11, 0, 0}, &Room::veng2AttachedSTricorderToComputer }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MAIN_COMPUTER, 0}, &Room::veng2UseMTricorderOnMainComputer }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_MAIN_COMPUTER, 0}, &Room::veng2UseMTricorderOnMainComputer }, + { {ACTION_DONE_WALK, 12, 0, 0}, &Room::veng2MccoyReachedMainComputerToPutTricorder }, + { {ACTION_DONE_ANIM, 13, 0, 0}, &Room::veng2AttachedMTricorderToComputer }, + + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_DECK_IO_CONSOLE, 0}, &Room::veng2UseSTricorderOnDeckIOConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DECK_IO_SLOT, 0}, &Room::veng2UseSTricorderOnDeckIOConsole }, + + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMPULSE_CONSOLE, 0}, &Room::veng2UseSTricorderOnImpulseConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_IMPULSE_CONSOLE, 0}, &Room::veng2UseSTricorderOnImpulseConsole }, + { {ACTION_USE, OBJECT_IFUSION, HOTSPOT_MAIN_COMPUTER, 0}, &Room::veng2UseFusionPackOnMainComputer }, + { {ACTION_USE, OBJECT_IFUSION, OBJECT_MAIN_COMPUTER, 0}, &Room::veng2UseFusionPackOnMainComputer }, + + { {ACTION_GET, OBJECT_DECK, 0, 0}, &Room::veng2GetLogDeck }, + { {ACTION_DONE_WALK, 8, 0, 0}, &Room::veng2ReachedLogDeck }, + { {ACTION_DONE_ANIM, 9, 0, 0}, &Room::veng2PickedUpLogDeck }, + + { {ACTION_GET, OBJECT_STRICORDER, 0, 0}, &Room::veng2GetSTricorder }, + { {ACTION_DONE_WALK, 14, 0, 0}, &Room::veng2ReachedSTricorderToGet }, + { {ACTION_DONE_ANIM, 15, 0, 0}, &Room::veng2PickedUpSTricorder }, + { {ACTION_GET, OBJECT_MTRICORDER, 0, 0}, &Room::veng2GetMTricorder }, + { {ACTION_DONE_WALK, 16, 0, 0}, &Room::veng2ReachedMTricorderToGet }, + { {ACTION_DONE_ANIM, 17, 0, 0}, &Room::veng2PickedUpMTricorder }, + + // ENHANCEMENTs + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_TORPEDO_CONTROL, 0}, &Room::veng2UseKirkOnTorpedoButton }, + // TODO: uncomment +// { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DECK_IO_CONSOLE, 0}, &Room::veng2UseSTricorderOnDeckIOConsole }, }; extern const int veng2NumActions = ARRAYSIZE(veng2ActionList); +#define STRICORDER_POS_X 0x45 +#define STRICORDER_POS_Y 0x71 + +#define MTRICORDER_POS_X 0x55 +#define MTRICORDER_POS_Y 0x67 + +#define MAIN_COMPUTER_X 0x4f +#define MAIN_COMPUTER_Y 0x71 + +#define VIEWSCREEN_X 0x9e +#define VIEWSCREEN_Y 0x63 + +#define DAMAGE_DISPLAY_1_X 0xfa +#define DAMAGE_DISPLAY_1_Y 0x64 + +#define TORPEDO_BUTTON_X 0x97 +#define TORPEDO_BUTTON_Y 0x74 + + void Room::veng2Tick1() { + if (!_awayMission->veng.tookRecordDeckFromAuxilaryControl) + loadActorAnim2(OBJECT_DECK, "s7r2d1", 0xee, 0x8c); + + if (!haveItem(OBJECT_ISTRICOR)) + loadActorAnim2(OBJECT_STRICORDER, "s7r2t1", STRICORDER_POS_X, STRICORDER_POS_Y); + + if (!haveItem(OBJECT_IMTRICOR)) + loadActorAnim2(OBJECT_MTRICORDER, "s7r2t2", MTRICORDER_POS_X, MTRICORDER_POS_Y); + + if (_awayMission->veng.tricordersPluggedIntoComputer == 3) + loadActorAnim2(OBJECT_MAIN_COMPUTER, "s7r2t3", MAIN_COMPUTER_X, MAIN_COMPUTER_Y); + + if (_awayMission->veng.elasiShipDecloaked) + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y); + + if (_awayMission->veng.poweredSystem == 2) + loadActorAnim2(OBJECT_DAMAGE_DISPLAY_1, "s7r2sh2", DAMAGE_DISPLAY_1_X, DAMAGE_DISPLAY_1_Y); + + loadActorAnim2(OBJECT_TORPEDO_BUTTON, "s7r2pl", TORPEDO_BUTTON_X, TORPEDO_BUTTON_Y); + if (_awayMission->veng.torpedoLoaded) + loadActorAnim2(OBJECT_TORPEDO_BUTTON, "s7r2pm", TORPEDO_BUTTON_X, TORPEDO_BUTTON_Y); + + if (!_awayMission->veng.impulseEnginesOn) { + loadActorAnim2(OBJECT_IMPULSE_CONSOLE, "s7r2o1", 0x0b, 0x87); + loadActorAnim2(OBJECT_LEFT_COMPUTER_PANEL, "s7r2o2", 0x36, 0x63); + loadActorAnim2(OBJECT_RIGHT_COMPUTER_PANEL, "s7r2o3", 0x58, 0x5f); + loadActorAnim2(OBJECT_MIDDLE_CONSOLE, "s7r2o4", 0x9e, 0x7b); + loadActorAnim2(OBJECT_DAMAGE_DISPLAY_2, "s7r2o5", 0x112, 0x66); + loadActorAnim2(OBJECT_DECK_IO_CONSOLE, "s7r2o6", 0x131, 0x86); + loadActorAnim2(OBJECT_CEILING_PANEL, "s7r2o7", 0x9b, 0x14); + + // FIXME: this doesn't loop + playVoc("VEN2LOFF"); + } else + playVoc("VEN2LON"); +} + +void Room::veng2Timer0Expired() { // Elasi decloak if they haven't already + if (_awayMission->veng.tricordersPluggedIntoComputer == 3 && _awayMission->veng.impulseEnginesOn) { + if (!_awayMission->veng.elasiShipDecloaked) { + _awayMission->veng.elasiShipDecloaked = true; + playVoc("UNCLOAK"); + loadActorAnimC(OBJECT_VIEWSCREEN, "s7r2u1", VIEWSCREEN_X, VIEWSCREEN_Y, &Room::veng2ElasiShipDecloaked); + _awayMission->disableInput = true; + } else if (!_awayMission->veng.elasiHailedRepublic && _awayMission->veng.poweredSystem == 2) + _awayMission->timers[2] = 45; // Timer until Elasi hail + } +} + +void Room::veng2ElasiShipDecloaked() { + _awayMission->disableInput = false; + + showText(TX_SPEAKER_KIJE, TX_VEN2_093); + showText(TX_SPEAKER_KIRK, TX_VEN2_019); + showText(TX_SPEAKER_SPOCK, TX_VEN2_076); + showText(TX_SPEAKER_MCCOY, TX_VEN2_042); + if (_awayMission->veng.poweredSystem != 2) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_032); + _awayMission->veng.field49 = 1800; + } else + veng2Timer2Expired(); +} + +void Room::veng2Timer2Expired() { // Elasi hail the Enterprise if they haven't already + if (_awayMission->veng.elasiHailedRepublic) + return; + _awayMission->veng.elasiHailedRepublic = true; + + showText(TX_SPEAKER_SPOCK, TX_VEN2_073); + showText(TX_SPEAKER_KIRK, TX_VEN2_016); + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2p1", VIEWSCREEN_X, VIEWSCREEN_Y); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_109); + showText(TX_SPEAKER_KIRK, TX_VEN2_027); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_113); + showText(TX_SPEAKER_KIRK, TX_VEN2_010); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_103); + showText(TX_SPEAKER_KIRK, TX_VEN2_006); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_111); + showText(TX_SPEAKER_KIRK, TX_VEN2_020); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_112); + + const TextRef choices[] = { + TX_SPEAKER_KIRK, + TX_VEN2_012, TX_VEN2_011, + TX_BLANK + }; + + int choice = showText(choices); + + if (choice == 0) { + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_099); + showText(TX_SPEAKER_KIRK, TX_VEN2_008); + } + + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_105); + showText(TX_SPEAKER_KIRK, TX_VEN2_021); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_102); + showText(TX_SPEAKER_SPOCK, TX_VEN2_072); + showText(TX_SPEAKER_MCCOY, TX_VEN2_044); + showText(TX_SPEAKER_KIRK, TX_VEN2_022); + + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y); + _awayMission->veng.field4b = 27000; + _awayMission->veng.countdownStarted = true; +} + +void Room::veng2TouchedDoor() { + playSoundEffectIndex(SND_DOOR1); + _awayMission->rdfStillDoDefaultAction = true; +} + +void Room::veng2LookAtViewscreen() { + if (!_awayMission->veng.elasiShipDecloaked) + showText(TX_VEN2N022); + else + showText(TX_VEN2N002); +} + +void Room::veng2LookAtMiddleConsole() { + showText(TX_VEN2N030); +} + +void Room::veng2LookAtDamageDisplay() { + if (!_awayMission->veng.impulseEnginesOn) + showText(TX_VEN2N035); + else + showText(TX_VEN2N032); + + // NOTE: There were originally 2 more cases, where "poweredSystem == 2" or otherwise. For + // the case where poweredSystem == 2, it played TX_VEN2N032, but with mismatching text. +} + +void Room::veng2LookAtSTricorder() { + showText(TX_VEN2N027); +} + +void Room::veng2LookAtMTricorder() { + showText(TX_VEN2N024); +} + +void Room::veng2LookAtTorpedoButton() { + showText(TX_VEN2N033); +} + +// TODO: Consider merging "veng2LookAtTorpedoButton" with "veng2LookAtTorpedoControl" +// (and the same for use actions) +void Room::veng2LookAtTorpedoControl() { + showText(TX_VEN2N033); + + if (!_awayMission->veng.impulseEnginesOn) + showText(TX_VEN2N001); // Unused, since it can't be selected when impulse is off? + else if (!_awayMission->veng.torpedoLoaded) { + showText(TX_VEN2N000); + if (!_awayMission->veng.elasiShipDecloaked) + showText(TX_SPEAKER_SPOCK, TX_VEN2_036); + else + showText(TX_SPEAKER_SPOCK, TX_VEN2_037); + _awayMission->veng.examinedTorpedoControl = true; + } else if (!_awayMission->veng.firedTorpedo) + showText(TX_VEN2N021); + else + showText(TX_VEN2N020); // Unused, since after firing the torpedo, the mission ends +} + +void Room::veng2LookAtImpulseConsole() { + showText(TX_VEN2N034); + + if (!_awayMission->veng.impulseEnginesOn) + showText(TX_VEN2N008); + else if (_awayMission->veng.tricordersPluggedIntoComputer != 3) + showText(TX_VEN2N009); + else if (_awayMission->veng.poweredSystem == 0) + showText(TX_VEN2N009); + else if (_awayMission->veng.poweredSystem == 1) + showText(TX_VEN2N007); + else if (_awayMission->veng.poweredSystem == 2) + showText(TX_VEN2N005); + else + showText(TX_VEN2N006); +} + +void Room::veng2LookAtMainComputer() { + if (_awayMission->veng.tricordersPluggedIntoComputer == 0) + showText(TX_VEN2N003); + else if (_awayMission->veng.tricordersPluggedIntoComputer == 1) // Med tricorder plugged in + showText(TX_VEN2N023); + else if (_awayMission->veng.tricordersPluggedIntoComputer == 2) // Sci tricorder plugged in + showText(TX_VEN2N027); + else // Both + showText(TX_VEN2N025); +} + +void Room::veng2LookAtRecordDeck() { + showText(TX_VEN2N029); +} + +void Room::veng2LookAtDeckIOConsole() { + showText(TX_VEN2N031); +} + +void Room::veng2LookAtKirk() { + showText(TX_VEN2N010); +} + +void Room::veng2LookAtSpock() { + showText(TX_VEN2N019); +} + +void Room::veng2LookAtMccoy() { + showText(TX_VEN2N012); +} + +void Room::veng2LookAtRedshirt() { + showText(TX_VEN2N004); +} + +void Room::veng2LookAnywhere() { + showText(TX_VEN2N035); +} + +void Room::veng2TalkToKirk() { + if (_awayMission->veng.countdownStarted) + showText(TX_SPEAKER_KIRK, TX_VEN2_004); + else + showText(TX_SPEAKER_KIRK, TX_VEN2_005); +} + +void Room::veng2TalkToSpock() { + if (_awayMission->veng.countdownStarted) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_075); + showText(TX_SPEAKER_KIRK, TX_VEN2_009); + } else + showText(TX_SPEAKER_SPOCK, TX_VEN4_017); +} + +void Room::veng2TalkToMccoy() { + if (_awayMission->veng.countdownStarted) { + showText(TX_SPEAKER_MCCOY, TX_VEN2_041); + showText(TX_SPEAKER_KIRK, TX_VEN2_007); + } else + showText(TX_SPEAKER_MCCOY, TX_VEN2_039); +} + +void Room::veng2TalkToRedshirt() { + if (_awayMission->veng.countdownStarted) { + showText(TX_SPEAKER_KIJE, TX_VEN2_094); + showText(TX_SPEAKER_SPOCK, TX_VEN2_078); + } else + showText(TX_SPEAKER_KIJE, TX_VEN2_086); +} + +void Room::veng2UseTechJournalOnDeckIOConsole() { + if (_awayMission->veng.readEngineeringJournal) + showText(TX_SPEAKER_SPOCK, TX_VEN2_046); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x112, 0x98, &Room::veng2ReachedDeckIOWithTechJournal); + } +} + +void Room::veng2ReachedDeckIOWithTechJournal() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2DoneReadingTechJournal); +} + +void Room::veng2DoneReadingTechJournal() { + _awayMission->disableInput = false; + showText(TX_SPEAKER_SPOCK, TX_VEN2_070); + showText(TX_SPEAKER_MCCOY, TX_VEN2_043); + showText(TX_SPEAKER_KIRK, TX_VEN2_017); + showText(TX_SPEAKER_SPOCK, TX_VEN2_081); + _awayMission->veng.readEngineeringJournal = true; +} + +void Room::veng2UseLogOnDeckIOConsole() { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_KIRK, 0x112, 0x98, &Room::veng2ReachedDeckIOWithLog); +} + +void Room::veng2ReachedDeckIOWithLog() { + loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng2LoadedLog); +} + +void Room::veng2LoadedLog() { + playVoc("COMPUTER"); + _awayMission->disableInput = false; + _awayMission->veng.captainsLogIndex++; + + if (_awayMission->veng.captainsLogIndex == 1) + showText(TX_SPEAKER_PATTERSON, TX_VEN2_082); + else if (_awayMission->veng.captainsLogIndex == 2) + showText(TX_SPEAKER_PATTERSON, TX_VEN2_083); + else if (_awayMission->veng.captainsLogIndex == 3) + showText(TX_SPEAKER_PATTERSON, TX_VEN2_084); + else if (_awayMission->veng.captainsLogIndex == 4) { + showText(TX_SPEAKER_ANDRADE, TX_VEN2_097); + _awayMission->veng.readAllLogs = true; + showText(TX_SPEAKER_SPOCK, TX_VEN2_061); + } else + showText(TX_SPEAKER_SPOCK, TX_VEN2_061); +} + +void Room::veng2UseCommunicator() { + if (_awayMission->veng.toldElasiToBeamOver) + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_098); + else if (_awayMission->veng.countdownStarted) { + const TextRef choices[] = { + TX_SPEAKER_KIRK, + TX_VEN2_HAIL_ELASI, TX_VEN2_HAIL_ENT, TX_VEN2_CANCEL, + TX_BLANK + }; + int choice = showText(choices); + + if (choice == 0) { // Hail Elasi + if (!_awayMission->veng.torpedoLoaded) + showText(TX_SPEAKER_MCCOY, TX_VEN2_040); + else { + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2p1", VIEWSCREEN_X, VIEWSCREEN_Y); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_108); + + const TextRef choices2[] = { + TX_SPEAKER_KIRK, + TX_VEN2_015, TX_VEN2_029, + TX_BLANK + }; + choice = showText(choices2); + + if (choice == 0) { // "We don't have it yet" + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_100); + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y); + } else { // "You'll have to beam over" + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_114); + showText(TX_SPEAKER_KIRK, TX_VEN2_025); + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y); + _awayMission->veng.field4d = 1800; + _awayMission->veng.toldElasiToBeamOver = true; + } + } + } else if (choice == 1) // Hail enterprise + showText(TX_SPEAKER_SPOCK, TX_VEN2_066); + } else if (_awayMission->veng.elasiShipDecloaked) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_066); + } else { + showText(TX_SPEAKER_KIRK, TX_MUD4_018); + showText(TX_SPEAKER_UHURA, TX_VEN2U093); + showText(TX_SPEAKER_KIRK, TX_VEN2_028); + } +} + +void Room::veng2UseKirkOnTorpedoButton() { + if (_awayMission->veng.poweredSystem != 1) + showText(TX_VEN2N028); + else if (!_awayMission->veng.torpedoLoaded) + showText(TX_SPEAKER_SPOCK, TX_VEN2_058); + else if (!_awayMission->veng.elasiShieldsDown) + showText(TX_SPEAKER_SPOCK, TX_VEN2_054); // Probably unused; weapons can't be powered while elasi shields are up? + else { // Fire on the defenseless Elasi + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_KIRK, 0x90, 0x95, &Room::veng2UseKirkReachedTorpedoButton); + _awayMission->crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N; + } +} + +void Room::veng2UseKirkReachedTorpedoButton() { + loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng2KirkFiredTorpedo); +} + +void Room::veng2KirkFiredTorpedo() { + playVoc("DBLWHAM2"); + loadActorAnimC(OBJECT_VIEWSCREEN, "s7r2ph", 0, 0, &Room::veng2TorpedoStruckElasiShip); +} + +void Room::veng2TorpedoStruckElasiShip() { + loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2p1", VIEWSCREEN_X, VIEWSCREEN_Y); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_104); + showText(TX_SPEAKER_ELASI_WEAPONS_MASTER, TX_VEN2_F29); + showText(TX_SPEAKER_ELASI_CREWMAN, TX_VEN2_F28); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_101); + showText(TX_SPEAKER_KIRK, TX_VEN2_014); + showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_106); + loadActorAnimC(OBJECT_VIEWSCREEN, "s7r2rc", 0, 0, &Room::veng2ElasiRetreated); +} + +void Room::veng2ElasiRetreated() { + showText(TX_SPEAKER_UHURA, TX_VEN2U094); + showText(TX_SPEAKER_KIRK, TX_VEN2_026); + showText(TX_SPEAKER_CHEKOV, TX_VEN2_115); + showText(TX_SPEAKER_KIRK, TX_VEN2_013); + showText(TX_SPEAKER_SCOTT, TX_VEN2_S09); + _awayMission->veng.firedTorpedo = true; + + walkCrewmanC(OBJECT_KIRK, 0xec, 0x9d, &Room::veng2CrewmanInPositionToBeamOut); + walkCrewmanC(OBJECT_SPOCK, 0xd5, 0x96, &Room::veng2CrewmanInPositionToBeamOut); + walkCrewmanC(OBJECT_MCCOY, 0x101, 0x95, &Room::veng2CrewmanInPositionToBeamOut); + walkCrewmanC(OBJECT_REDSHIRT, 0xec, 0x8c, &Room::veng2CrewmanInPositionToBeamOut); +} + +void Room::veng2CrewmanInPositionToBeamOut() { + if (++_roomVar.veng.numCrewmenReadyToBeamOut == 4) { + _awayMission->veng.missionScore = 16; + if (_awayMission->veng.field68) + _awayMission->veng.missionScore += 1; + if (_awayMission->veng.field69) + _awayMission->veng.missionScore += 1; + if (_awayMission->veng.readAllLogs) + _awayMission->veng.missionScore += 1; + if (_awayMission->veng.field6b) + _awayMission->veng.missionScore += 1; + if (_awayMission->veng.field6c) + _awayMission->veng.missionScore += 1; + + endMission(_awayMission->veng.missionScore, 21, 0); + } +} + +void Room::veng2UseSTricorderOnTorpedoButton() { + spockScan(DIR_N, TX_VEN2_F35); // ENHANCEMENT: Use spockScan (don't just show text) +} + +void Room::veng2UseSTricorderOnMiddleConsole() { + spockScan(DIR_N, -1); + showText(TX_VEN2N030); // This is a narration, not Spock speaking +} + +void Room::veng2UseSTricorderOnTorpedoControl() { + showText(TX_SPEAKER_KIRK, TX_VEN2_001); + spockScan(DIR_N, -1); // FIXME: delete this since Spock might not have his tricorder? + + if (_awayMission->veng.poweredSystem != 1) { // No power to weapons + if (!_awayMission->veng.scannedMainComputer) + showText(TX_SPEAKER_SPOCK, TX_VEN2_062); + else + showText(TX_SPEAKER_SPOCK, TX_VEN2_064); + } else if (_awayMission->veng.tricordersPluggedIntoComputer != 3) + showText(TX_SPEAKER_SPOCK, TX_VEN2_055); + else if (_awayMission->veng.poweredSystem != 1) // Unused, since the same condition was above + showText(TX_SPEAKER_SPOCK, TX_VEN2_065); + else if (!_awayMission->veng.torpedoLoaded) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_068); + if (!_awayMission->veng.elasiShipDecloaked) + showText(TX_SPEAKER_SPOCK, TX_VEN2_036); + else + showText(TX_SPEAKER_SPOCK, TX_VEN2_037); + _awayMission->veng.examinedTorpedoControl = true; + // TODO: consider making it easier to trigger the above flag? (using spock on it + // won't work once the elasi are there, since you can't power the system; you need + // to look at it instead.) + } else + showText(TX_SPEAKER_SPOCK, TX_VEN2_050); +} + +void Room::veng2UseImpulseConsole() { + if (!_awayMission->veng.impulseEnginesOn) { + showText(TX_SPEAKER_KIRK, TX_VEN2_003); + showText(TX_SPEAKER_SPOCK, TX_VEN2_063); + } else if (_awayMission->veng.tricordersPluggedIntoComputer != 3) { + showText(TX_SPEAKER_KIRK, TX_VEN2_003); + showText(TX_SPEAKER_SPOCK, TX_VEN2_057); + } else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x22, 0x9b, &Room::veng2SpockReachedImpulseConsole); + } +} + +void Room::veng2SpockReachedImpulseConsole() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2SpockUsedImpulseConsole); +} + +void Room::veng2SpockUsedImpulseConsole() { + _awayMission->disableInput = false; + showText(TX_SPEAKER_SPOCK, TX_VEN2_069); + + // Choose where to transfer power + const TextRef choices[] = { + TX_NULL, + TX_VEN2_WEA, TX_VEN2_SHI, TX_VEN2_TRA, + TX_BLANK + }; + int choice = showText(choices); + + if (choice == 0) { // Weapons + if (_awayMission->veng.toldElasiToBeamOver) { +powerWeapons: + if (_awayMission->veng.poweredSystem == 2) { + playVoc("LD6BMOFF"); + loadActorAnim2(OBJECT_DAMAGE_DISPLAY_1, "s7r2sh3", DAMAGE_DISPLAY_1_X, DAMAGE_DISPLAY_1_Y); + } + _awayMission->veng.poweredSystem = 1; + showText(TX_SPEAKER_KIJE, TX_VEN2_088); + if (_awayMission->veng.toldElasiToBeamOver) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_052); + _awayMission->veng.elasiShieldsDown = true; + _awayMission->veng.field51 = 900; + } + if (_awayMission->veng.elasiShipDecloaked && !_awayMission->veng.elasiHailedRepublic) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_033); + _awayMission->veng.field49 = 1800; + } + } else if (_awayMission->veng.countdownStarted) + showText(TX_SPEAKER_SPOCK, TX_VEN2_035); + else if (_awayMission->veng.poweredSystem == 1) // Weapons already powered + showText(TX_SPEAKER_KIJE, TX_VEN2_091); + else + goto powerWeapons; + } else if (choice == 1) { // Shields + if (_awayMission->veng.poweredSystem == 2) // Shields already powered + showText(TX_SPEAKER_KIJE, TX_VEN2_089); + else if (_awayMission->veng.toldElasiToBeamOver) + showText(TX_SPEAKER_KIJE, TX_VEN2_085); + else { + loadActorAnim2(OBJECT_DAMAGE_DISPLAY_1, "s7r2sh", DAMAGE_DISPLAY_1_X, DAMAGE_DISPLAY_1_Y); + _awayMission->veng.poweredSystem = 2; + if (_awayMission->veng.elasiShipDecloaked) + _awayMission->timers[2] = 45; // Timer until the elasi hail the ship + showText(TX_SPEAKER_KIJE, TX_VEN2_092); + } + } else if (choice == 2) { // Transporter + if (_awayMission->veng.countdownStarted) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_034); + if (_awayMission->veng.havePowerPack) { + showText(TX_SPEAKER_KIRK, TX_VEN2_018); + showText(TX_SPEAKER_SPOCK, TX_VEN2_077); + } + } else if (_awayMission->veng.poweredSystem == 3) // Transporter already powered + showText(TX_SPEAKER_KIJE, TX_VEN2_090); // BUGFIX: audio didn't play properly + else { + if (_awayMission->veng.poweredSystem == 2) { + playVoc("LD6BMOFF"); // ENHANCEMENT: make this consistent with the weapons code + loadActorAnim2(OBJECT_DAMAGE_DISPLAY_1, "s7r2sh3", DAMAGE_DISPLAY_1_X, DAMAGE_DISPLAY_1_Y); + } + _awayMission->veng.poweredSystem = 3; + showText(TX_SPEAKER_KIJE, TX_VEN2_087); + if (_awayMission->veng.elasiShipDecloaked && !_awayMission->veng.elasiHailedRepublic) { + showText(TX_SPEAKER_SPOCK, TX_VEN2_071); + _awayMission->veng.field49 = 1800; + } + } + } + +} + +void Room::veng2UseMainComputer() { + showText(TX_SPEAKER_KIRK, TX_VEN2_002); + if (_awayMission->veng.tricordersPluggedIntoComputer != 3) { + spockScan(DIR_W, TX_VEN2_079); + showText(TX_SPEAKER_KIRK, TX_VEN2_024); + showText(TX_SPEAKER_SPOCK, TX_VEN2_080); + showText(TX_SPEAKER_MCCOY, TX_VEN2_045); + showText(TX_SPEAKER_SPOCK, TX_VEN2_074); + showText(TX_SPEAKER_KIJE, TX_VEN2_096); + _awayMission->veng.scannedMainComputer = true; + } else + showText(TX_SPEAKER_SPOCK, TX_VEN2_059); +} + +void Room::veng2UseSTricorderOnMainComputer() { + if (!_awayMission->veng.scannedMainComputer) + veng2UseMainComputer(); + else if (!_awayMission->veng.impulseEnginesOn) + showText(TX_SPEAKER_SPOCK, TX_VEN2_031); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x52, 0x84, &Room::veng2SpockReachedMainComputerToPutTricorder); + } +} + +void Room::veng2SpockReachedMainComputerToPutTricorder() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2AttachedSTricorderToComputer); +} + +void Room::veng2AttachedSTricorderToComputer() { + playVoc("MUR4E1"); + _awayMission->disableInput = false; + if (_awayMission->veng.tricordersPluggedIntoComputer != 1) // Mccoy's isn't in yet + _awayMission->veng.tricordersPluggedIntoComputer = 2; + else { + _awayMission->veng.tricordersPluggedIntoComputer = 3; + _awayMission->timers[0] = 40; // Timer until Elasi appear + } + + loseItem(OBJECT_ISTRICOR); + loadActorAnim2(OBJECT_STRICORDER, "s7r2t1", STRICORDER_POS_X, STRICORDER_POS_Y); + + showText(TX_VEN2N017); + + walkCrewman(OBJECT_SPOCK, 0x5f, 0xaa); + if (_awayMission->veng.tricordersPluggedIntoComputer == 3) // Both tricorders plugged in + veng2BothTricordersPluggedIn(); +} + +void Room::veng2UseMTricorderOnMainComputer() { + if (!_awayMission->veng.impulseEnginesOn) + showText(TX_SPEAKER_MCCOY, TX_VEN2_038); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x52, 0x84, &Room::veng2MccoyReachedMainComputerToPutTricorder); + } +} + +void Room::veng2MccoyReachedMainComputerToPutTricorder() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2AttachedMTricorderToComputer); +} + +void Room::veng2AttachedMTricorderToComputer() { + playVoc("MUR4E1"); + _awayMission->disableInput = false; + if (_awayMission->veng.tricordersPluggedIntoComputer != 2) // Spock's isn't in yet + _awayMission->veng.tricordersPluggedIntoComputer = 1; + else { + _awayMission->veng.tricordersPluggedIntoComputer = 3; + _awayMission->timers[0] = 40; // Timer until Elasi appear + } + + loseItem(OBJECT_IMTRICOR); + loadActorAnim2(OBJECT_MTRICORDER, "s7r2t2", MTRICORDER_POS_X, MTRICORDER_POS_Y); + + showText(TX_VEN2N016); + + walkCrewman(OBJECT_SPOCK, 0x5f, 0xaa); + if (_awayMission->veng.tricordersPluggedIntoComputer == 3) // Both tricorders plugged in + veng2BothTricordersPluggedIn(); +} + +void Room::veng2BothTricordersPluggedIn() { + loadActorAnim2(OBJECT_MAIN_COMPUTER, "s7r2t3", MAIN_COMPUTER_X, MAIN_COMPUTER_Y); + showText(TX_SPEAKER_SPOCK, TX_VEN2_030); +} + +void Room::veng2UseSTricorderOnDeckIOConsole() { + spockScan(DIR_E, TX_VEN2_067); +} + +void Room::veng2UseSTricorderOnImpulseConsole() { + if (!_awayMission->veng.impulseEnginesOn) + spockScan(DIR_W, TX_VEN2_056); + else + spockScan(DIR_W, TX_VEN2_051); +} + +void Room::veng2UseFusionPackOnMainComputer() { + showText(TX_SPEAKER_SPOCK, TX_VEN2_060); +} + +void Room::veng2GetLogDeck() { + walkCrewmanC(OBJECT_KIRK, 0xe7, 0x93, &Room::veng2ReachedLogDeck); + _awayMission->disableInput = true; +} + +void Room::veng2ReachedLogDeck() { + loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::veng2PickedUpLogDeck); +} + +void Room::veng2PickedUpLogDeck() { + loadActorStandAnim(OBJECT_DECK); + _awayMission->disableInput = false; + _awayMission->veng.tookRecordDeckFromAuxilaryControl = true; + showText(TX_VEN2N039); + giveItem(OBJECT_IDECK); +} + +void Room::veng2GetSTricorder() { + if (_awayMission->veng.countdownStarted) + showText(TX_SPEAKER_SPOCK, TX_VEN2_047); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x52, 0x84, &Room::veng2ReachedSTricorderToGet); + } +} + +void Room::veng2ReachedSTricorderToGet() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2PickedUpSTricorder); +} + +void Room::veng2PickedUpSTricorder() { + _awayMission->disableInput = false; + _awayMission->veng.tricordersPluggedIntoComputer &= ~2; + giveItem(OBJECT_ISTRICOR); + loadActorStandAnim(OBJECT_STRICORDER); + loadActorStandAnim(OBJECT_MAIN_COMPUTER); + walkCrewman(OBJECT_SPOCK, 0x5f, 0xaa); + showText(TX_VEN2N015); +} + +void Room::veng2GetMTricorder() { + if (_awayMission->veng.countdownStarted) + showText(TX_SPEAKER_SPOCK, TX_VEN2_047); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_SPOCK, 0x52, 0x84, &Room::veng2ReachedMTricorderToGet); + } +} + +void Room::veng2ReachedMTricorderToGet() { + loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng2PickedUpMTricorder); +} + +void Room::veng2PickedUpMTricorder() { + _awayMission->disableInput = false; + _awayMission->veng.tricordersPluggedIntoComputer &= ~1; + giveItem(OBJECT_IMTRICOR); + loadActorStandAnim(OBJECT_MTRICORDER); + loadActorStandAnim(OBJECT_MAIN_COMPUTER); + walkCrewman(OBJECT_SPOCK, 0x5f, 0xaa); + showText(TX_VEN2N013); } } diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp index 8282565745cd..c5f2e4716bbb 100644 --- a/engines/startrek/text.cpp +++ b/engines/startrek/text.cpp @@ -65,6 +65,10 @@ extern const char *const g_gameStrings[] = { "Ensign Kije", "*Capt. Patterson*", + "*Commander Andrade*", + "Elasi Captain", + "Elasi Weapons Master", + "Elasi Crewman", "#BRID\\BRIDU146#Nothing to report, Captain.", @@ -2776,13 +2780,173 @@ extern const char *const g_gameStrings[] = { "#VEN1\\VEN1N023#You retrieve the molecular saw.", - "#VEN2\\VEN2_028#Yes, Uhura. Just wanted a status report. Kirk out.", + "#VEN2\\VEN2_001#Mr. Spock, what is the condition of the fire control system?", + "#VEN2\\VEN2_002#Mr. Spock, what is the status of the ship's computer?", + "#VEN2\\VEN2_003#Spock, what is the situation with the impulse engines?", + "#VEN2\\VEN2_004#We don't have much time for talk. The Elasi are known for their punctuality.", + "#VEN2\\VEN2_005#What a mess. I wonder what we can do to fix this.", + "#VEN2\\VEN2_006#I assume, since you haven't blasted us to bits, you want something.", + "#VEN2\\VEN2_007#I don't know, Bones.", + "#VEN2\\VEN2_008#I see your point.", + "#VEN2\\VEN2_009#I'm not one to overlook strategic implications, Mr. Spock, but we can save that for another time.", + "#VEN2\\VEN2_010#It was a setup?!", + "#VEN2\\VEN2_011#It will take time. The controls are smashed, and the main computer's badly damaged. It will take hours to get power to the computer banks.", + "#VEN2\\VEN2_012#Just try and get it. You can't threaten me!", + "#VEN2\\VEN2_013#No, Ensign. It looks like the Elasi have been doing some business with them. Scotty, beam us back. We need to find that ship that attacked the Republic.", + "#VEN2\\VEN2_014#Not too soon, I hope.", + "#VEN2\\VEN2_015#Not yet. We're having trouble accessing all the data files.", + "#VEN2\\VEN2_016#Put it on Screen, Spock.", + "#VEN2\\VEN2_017#Spock, just tell me if they will help.", + "#VEN2\\VEN2_018#Spock, what about the Fusion Power Pack? Could we use it to power the transporter?", + "#VEN2\\VEN2_019#That ship was cloaked!", + "#VEN2\\VEN2_020#The Masada, I presume. You want the locations of all your imprisoned comrades?", + "#VEN2\\VEN2_021#The Republic will fall apart if you fire on us. Then you'll never get the data.", + "#VEN2\\VEN2_022#Thirty minutes, then. Kirk out.", + "#VEN2\\VEN2_023#Umm, well...", + "#VEN2\\VEN2_024#We don't have several days, Mr. Spock.", + "#VEN2\\VEN2_025#We'll comply. Kirk out.", + "#VEN2\\VEN2_026#We're fine, lieutenant.", + "#VEN2\\VEN2_027#What do you want?", + "#VEN2\\VEN2_028#Yes, Uhura, Just wanted a status report. Kirk out.", + "#VEN2\\VEN2_029#Yes, we have. You'll have to beam over and get it, though. The computer's subspace transmitter is out.", + "#VEN2\\VEN2_030#Both Tricorders are rigged into the main computer's central processing unit. We now have enough computational power to control a single ship's system.", + "#VEN2\\VEN2_031#Captain, I recommend we wait until we have restored power before I hook up the tricorders to the main computer. We may need them in engineering first.", + "#VEN2\\VEN2_032#Captain, I suggest we try to raise the shields.", + "#VEN2\\VEN2_033#Captain, I suggest we try to raise the shields.", + "#VEN2\\VEN2_034#Captain, the elasi can surely detect the lowering of our shields. They will undoubtedly try to board us if we lower them.", + "#VEN2\\VEN2_035#Captain, the elasi can surely detect the lowering of our shields. They will undoubtedly try to board us if we lower them.", + "#VEN2\\VEN2_036#Captain, the torpedo loading system is malfunctioning. To clear it, we will have to physically examine the mechanism. Currently, all turbolift access to the torpedo bay is blocked by a hull breach. Fortunately, it is highly unlikely that we will need this ship's weapons systems.", + "#VEN2\\VEN2_037#Captain, the torpedo loading system is malfunctioning. To clear it, we will have to physically examine the mechanism. Currently, all turbolift access to the torpedo bay is blocked by a hull breach. It is imperative that we get the weapons on-line.", + "#VEN2\\VEN2_038#I'm a doctor, not a computer scientist!", + "#VEN2\\VEN2_039#I'm glad this isn't the Enterprise.", + "#VEN2\\VEN2_040#Jim, since we do not have what they want, I don't think it is a good idea to contact them until we are able to defend ourselves.", + "#VEN2\\VEN2_041#Cloaked Elasi. I wonder who the old friend they mentioned is?", + "#VEN2\\VEN2_042#Is that all you can say?", + "#VEN2\\VEN2_043#Jim, do we really need a lesson in starship engineering?", + "#VEN2\\VEN2_044#Shut up, Spock!", + "#VEN2\\VEN2_045#That's just great, Spock. We don't exactly carry an M-5 computer in our inventory.", + "#VEN2\\VEN2_046#I have memorized all pertinent data, Captain. there is no need to reexamine the journals.", + "#VEN2\\VEN2_047#It would not be prudent to remove the tricorder at this time, Captain. Doing so will cause the shields to shut down and allow the elasi to beam a boarding party over.", + "#VEN2\\VEN2_048#Lowering shields and allocating power to photon torpedo systems. Torpedo is loaded and ready.", + "#VEN2\\VEN2_050#Photon torpedoes are loaded and ready to be fired.", // TYPO + "#VEN2\\VEN2_051#Power is available, but the main computer is too badly damaged to actively control the power circuits.", + "#VEN2\\VEN2_052#Sensors indicate that the Elasi Ship has lowered its shields. I suggest we prepare your surprise soon, Captain. They will beam over any moment.", + "#VEN2\\VEN2_053#That would be unwise, Captain. I thought our plan was to surprise the Elasi.", + "#VEN2\\VEN2_054#The elasi ship's shield are still raised, captain. A single photon hit will have a negligible effect on the ship.", + "#VEN2\\VEN2_055#The impulse engines are back on-line, but we have no way of directing power to the weapons system.", + "#VEN2\\VEN2_056#The impulse power allocation controls are functional, but there is no power available, Captain.", + "#VEN2\\VEN2_057#The main computer is too badly damaged to actively control the power circuits.", + "#VEN2\\VEN2_058#The torpedo warning systems are showing a malfunction in the torpedo loading bay.", + "#VEN2\\VEN2_059#The tricorders are currently operating at 12.69 percent less than normal computing efficiency.", + "#VEN2\\VEN2_060#The unit doesn't generate enough power to run any of the major systems. Main or Auxiliary power is required for that, Captain.", + "#VEN2\\VEN2_061#There are no more log decks, Captain.", + "#VEN2\\VEN2_062#There currently is no power being allocated to the weapons system. Even if there were a power source, the damage to the main computer is enough to prevent power allocation to that system.", + "#VEN2\\VEN2_063#There is currently no power to be allocated from the engines.", + "#VEN2\\VEN2_064#There is no power allocated to the weapons system, Captain.", + "#VEN2\\VEN2_065#There is no power allocated to the weapons system.", "#VEN2\\VEN2_066#They are jamming all frequencies, Captain. We will not be able to contact the Enterprise.", + "#VEN2\\VEN2_067#This input/output slot for the record decks is still functional, Captain.", + "#VEN2\\VEN2_068#Weapons control is functioning properly, however, there appears to be a jam in the primary loading mechanism.", + "#VEN2\\VEN2_069#With impulse power online and the tricorders performing computer control, I can divert power to...", + "#VEN2\\VEN2_070#Captain, I have examined the Engineering Journals. According to chapter eighteen, we can run...", + "#VEN2\\VEN2_071#Captain, I suggest we try to raise the shields.", + "#VEN2\\VEN2_072#Captain, the main computer is far beyond...", + "#VEN2\\VEN2_073#Captain, we are being hailed by the Elasi Captain.", + "#VEN2\\VEN2_074#Correct, Doctor. However, there may be another alternative. Linked tricorders, along with the circuits in the data reader, should have the processing power necessary to control a single starship system.", + "#VEN2\\VEN2_075#Fascinating. A cloaked Elasi.", + "#VEN2\\VEN2_076#Fascinating.", + "#VEN2\\VEN2_077#I believe so, Captain. It would require a connection to the transporter circuits in the main control console.", + "#VEN2\\VEN2_078#That is beyond the Elasi's capabilities, Ensign.", + "#VEN2\\VEN2_079#There is extensive damage to the main processing unit of the ship's computer. It will take several days at a starbase to repair.", + "#VEN2\\VEN2_080#Unless we can find a suitable computational alternative, there will be no way to control the ship's systems.", + "#VEN2\\VEN2_081#Why, yes, Captain.", + "#VEN2\\VEN2_082#Captain's log, stardate 6087.6. The Republic is currently approaching the Vardaine system. Sensors have detected unusual energy fluctuations near one of the Vardainian moons. Starfleet has ordered us to investigate.", + "#VEN2\\VEN2_083#Captain's log, stardate 6087.8. We are under attack by two unidentified ships. I don't know how they could have approached undetected. They must have some kind of cloaking device, although there are no reports of Romulans in this sector.", + "#VEN2\\VEN2_084#Captain's log, stardate 6088.1. We have successfully driven off our assailants. Major damage has been sustained by our warp engines. Communications has reported that U.S.S. Enterprise is in sector. I requested Mr. Scott's assistance in repairing damage to the Republic. With luck, we will be fully operational in a couple of days.", + "#VEN2\\VEN2_085#Captain, the Elasi will surely fire upon us if we raise our shields.", + "#VEN2\\VEN2_086#If there's anything I can do, sir, just ask.", + "#VEN2\\VEN2_087#Power allocated to transporter systems, sir.", + "#VEN2\\VEN2_088#Power allocated to weapons systems, Captain.", + "#VEN2\\VEN2_089#Power has already been allocated to the shields, sir.", + "#VEN2\\VEN2_090#Power has already been allocated to the transporter systems, Captain.", + "#VEN2\\VEN2_091#Power has already been allocated to the weapons, Sir.", + "#VEN2\\VEN2_092#Shields are up, sir.", + "#VEN2\\VEN2_093#Captain, Look! An Elasi ship!", + "#VEN2\\VEN2_094#Captain, do you suppose the Elasi might have used cloaking technology to project a false image, of a ship the Republic would trust?", + "#VEN2\\VEN2_096#Thank goodness for parallel processing. I don't know what computers could do without it.", + "#VEN2\\VEN2_097#Captain's log, stardate 6088.5. First Officer Andrade commanding. The Enterprise has unexplicably opened fire upon us. Captain Patterson has been mortally wounded. We have sustained major damage to all systems. Impulse power is out. We cannot understand why...", "#VEN2\\VEN2_098#What are you stalling for? Lower your shields.", + "#VEN2\\VEN2_099#Can't threaten you?! As you said, I can blow you to bits!", + "#VEN2\\VEN2_100#You better step on it, Kirk! You only have a few minutes left!", + "#VEN2\\VEN2_101#Activate cloaking device! Kirk, until we meet again.", + "#VEN2\\VEN2_102#All right, Kirk. We'll do it your way. I would rather not kill you. Besides, there's an old friend that wants to meet you. I give you thirty minutes. And remember, no tricks.", + "#VEN2\\VEN2_103#I can see why they made you Captain!", + "#VEN2\\VEN2_104#Kirk! I should have known you'd try something underhanded like this. Weaponsmaster, fire all weapons on the Republic!", + "#VEN2\\VEN2_105#Maybe I should just pump a few torpedoes into your shields and check it out for myself.", + "#VEN2\\VEN2_106#Watch yourself, Captain. It may be sooner than you realize.", + "#VEN2\\VEN2_107#We finally meet in person, Captain Kirk. So where is the data I requested?", + "#VEN2\\VEN2_108#Well, Captain Kirk, I trust you and your valiant crew have retrieved the data I requested?", + "#VEN2\\VEN2_109#Well, if it isn't Captain Kirk. Fancy meeting you out here all alone in such a shabby starship.", + "#VEN2\\VEN2_110#What? You mean you were deliberately wasting my time? Guards, take them back to the ship! I'll think of a suitable punishment for them later.", + "#VEN2\\VEN2_111#Why, yes I do. It seems you failed to give one of my associates some rather important information.", + "#VEN2\\VEN2_112#Yes, Kirk. The Republic's computers will have the data just as your Enterprise would. I give you one minute to comply.", + "#VEN2\\VEN2_113#You should be more civil considering your Enterprise is far away on a mercy mission helping that poor trader.", + "#VEN2\\VEN2_114#How convenient, Kirk. We'll beam over, but no tricks. My sensors read that only your shields have power. Lower them now!", + "#VEN2\\VEN2_115#Sir, we picked up another ship nearby and we came as fast as we could. It appeared to cloak. Were you attacked by Romulans?", + "#VEN2\\VEN2_ELA#Contact Elasi Ship.", + "#VEN2\\VEN2_ENT#Contact Enterprise.", + "#VEN2\\VEN2_F28#Captain, the Enterprise is coming on high speed approach!", + "#VEN2\\VEN2_F29#We can't, Captain. All weapons systems off-line!", + "#VEN2\\VEN2_F35#This is the photon torpedo launching control.", + "#VEN2\\VEN2_S09#Aye, Captain.", + "#VEN2\\VEN2_SHI#Shields", + "#VEN2\\VEN2_TRA#Transporter Circuits", + "#VEN2\\VEN2_WEA#Weapons", + "#VEN2\\VEN2N000#A red flashing light is currently indicating a jam in the torpedo loading mechanism.", + "#VEN2\\VEN2N001#All indicators are dead.", + "#VEN2\\VEN2N002#An Elasi frigate is visible on the viewscreen. Though silent now, you know it is ready to attack at a moment's notice.", + "#VEN2\\VEN2N003#Damage from the battle has disabled the ship's main computer.", + "#VEN2\\VEN2N004#Ensign Kije doesn't see the need for a security escort.", + "#VEN2\\VEN2N005#Indicators currently show all power diverted to the shields.", + "#VEN2\\VEN2N006#Indicators currently show all power diverted to transporter systems.", + "#VEN2\\VEN2N007#Indicators currently show all power diverted to weapons control.", + "#VEN2\\VEN2N008#Indicators currently show no power output from the impulse engines.", + "#VEN2\\VEN2N009#Indicators show impulse power online, but no power allocated to any systems.", + "#VEN2\\VEN2N010#Kirk is dismayed by the damage that was done to Auxiliary Control.", + "#VEN2\\VEN2N011#McCoy is fidgeting around.", + "#VEN2\\VEN2N012#McCoy wishes that Mr. Scott were here.", + "#VEN2\\VEN2N013#Medical Tricorder taken.", + "#VEN2\\VEN2N015#Science Tricorder taken.", + "#VEN2\\VEN2N016#Spock crudely attaches the medical tricorder to the computer console.", + "#VEN2\\VEN2N017#Spock crudely attaches the science tricorder to the computer console.", + "#VEN2\\VEN2N018#Spock is analyzing the surroundings.", + "#VEN2\\VEN2N019#Spock wishes that Mr. Scott were here.", + "#VEN2\\VEN2N020#Status indicator show that the torpedo tubes are currently empty.", + "#VEN2\\VEN2N021#Status indicators show that photon torpedo number one and is loaded and ready to be fired.", + "#VEN2\\VEN2N022#The auxiliary control room viewscreen is still operating. It is displaying a view of empty space.", + "#VEN2\\VEN2N023#The medical tricorder is crudely wired into the computer console.", + "#VEN2\\VEN2N024#The medical tricorder is currently wired into the computer console.", + "#VEN2\\VEN2N025#The science and medical tricorders are jury-rigged to the remains of the Republic computer system.", + "#VEN2\\VEN2N027#The science tricorder is currently wired into the computer console.", + "#VEN2\\VEN2N028#There is no response.", + "#VEN2\\VEN2N029#These are Federation standard record decks.", + "#VEN2\\VEN2N030#These are the auxiliary helm and navigation controls for the Republic. Though they are intact, the ship is in no condition to move under her own power.", + "#VEN2\\VEN2N031#This is a standard input/output slot for record decks.", + "#VEN2\\VEN2N032#This is the auxiliary ship damage display. Red flashing damage indicators dominate its surface.", + "#VEN2\\VEN2N033#This is the fire control for the photon torpedoes. ", + "#VEN2\\VEN2N034#This is the impulse power allocation control.", + "#VEN2\\VEN2N035#This is the Republic's Auxiliary Control Room. It appears to be in better shape than the main bridge.", + "#VEN2\\VEN2N038#You are in a typical starship corridor.", + "#VEN2\\VEN2N039#You take the record decks.", "#VEN2\\VEN2U093#Enterprise here. We're still tracking the distress call. Are you all right, Sir?", + "#VEN2\\VEN2U094#Enterprise to Captain Kirk. Are you safe, sir?", + "Hail Elasi", + "Hail Enterprise", + "cancel", "#VEN4\\VEN4_016#There's nothing more I can do.", // TYPO + "#VEN4\\VEN4_017#I believe nothing needs to be said, Captain.", "#VEN4\\VEN4N010#This is an empty hypodermic injector.", "#VEN4\\VEN4N014#Yet another crewman of the Republic whose life was unfairly abbreviated.", diff --git a/engines/startrek/text.h b/engines/startrek/text.h index 682ee5f12f0b..0b26bd061e7e 100644 --- a/engines/startrek/text.h +++ b/engines/startrek/text.h @@ -123,6 +123,10 @@ enum GameStringIDs { TX_SPEAKER_KIJE, TX_SPEAKER_PATTERSON, + TX_SPEAKER_ANDRADE, + TX_SPEAKER_ELASI_CAPTAIN, + TX_SPEAKER_ELASI_WEAPONS_MASTER, + TX_SPEAKER_ELASI_CREWMAN, TX_BRIDU146, @@ -2886,13 +2890,183 @@ enum GameStringIDs { // UNUSED: VEN1NA18 (variant of VEN1N018) + TX_VEN2_001, + TX_VEN2_002, + TX_VEN2_003, + TX_VEN2_004, + TX_VEN2_005, + TX_VEN2_006, + TX_VEN2_007, + TX_VEN2_008, + TX_VEN2_009, + TX_VEN2_010, + TX_VEN2_011, + TX_VEN2_012, + TX_VEN2_013, + TX_VEN2_014, + TX_VEN2_015, + TX_VEN2_016, + TX_VEN2_017, + TX_VEN2_018, + TX_VEN2_019, + TX_VEN2_020, + TX_VEN2_021, + TX_VEN2_022, + TX_VEN2_023, // UNUSED + TX_VEN2_024, + TX_VEN2_025, + TX_VEN2_026, + TX_VEN2_027, TX_VEN2_028, + TX_VEN2_029, + TX_VEN2_030, + TX_VEN2_031, + TX_VEN2_032, + TX_VEN2_033, + TX_VEN2_034, + TX_VEN2_035, + TX_VEN2_036, + TX_VEN2_037, + TX_VEN2_038, + TX_VEN2_039, + TX_VEN2_040, + TX_VEN2_041, + TX_VEN2_042, + TX_VEN2_043, + TX_VEN2_044, + TX_VEN2_045, + TX_VEN2_046, + TX_VEN2_047, + TX_VEN2_048, // UNUSED + // UNUSED + TX_VEN2_050, // UNUSED + TX_VEN2_051, + TX_VEN2_052, + TX_VEN2_053, // UNUSED + TX_VEN2_054, + TX_VEN2_055, + TX_VEN2_056, + TX_VEN2_057, + TX_VEN2_058, + TX_VEN2_059, + TX_VEN2_060, + TX_VEN2_061, + TX_VEN2_062, + TX_VEN2_063, + TX_VEN2_064, + TX_VEN2_065, TX_VEN2_066, + TX_VEN2_067, + TX_VEN2_068, + TX_VEN2_069, + TX_VEN2_070, + TX_VEN2_071, + TX_VEN2_072, + TX_VEN2_073, + TX_VEN2_074, + TX_VEN2_075, + TX_VEN2_076, // UNUSED + TX_VEN2_077, + TX_VEN2_078, + TX_VEN2_079, + TX_VEN2_080, + TX_VEN2_081, + TX_VEN2_082, + TX_VEN2_083, + TX_VEN2_084, + TX_VEN2_085, + TX_VEN2_086, + TX_VEN2_087, + TX_VEN2_088, + TX_VEN2_089, + TX_VEN2_090, + TX_VEN2_091, + TX_VEN2_092, + TX_VEN2_093, + TX_VEN2_094, + // UNUSED + TX_VEN2_096, + TX_VEN2_097, TX_VEN2_098, + TX_VEN2_099, + TX_VEN2_100, + TX_VEN2_101, + TX_VEN2_102, + TX_VEN2_103, + TX_VEN2_104, + TX_VEN2_105, + TX_VEN2_106, + TX_VEN2_107, // UNUSED + TX_VEN2_108, + TX_VEN2_109, + TX_VEN2_110, // UNUSED + TX_VEN2_111, + TX_VEN2_112, + TX_VEN2_113, + TX_VEN2_114, + TX_VEN2_115, + // UNUSED (116 -> 117; uhura voice substitute) + TX_VEN2_ELA, // UNUSED + TX_VEN2_ENT, // UNUSED + TX_VEN2_F28, + TX_VEN2_F29, + TX_VEN2_F35, + // UNUSED: VEN2L062, VEN2L063 (someone's voice substitute?) + TX_VEN2_S09, + TX_VEN2_SHI, + TX_VEN2_TRA, + TX_VEN2_WEA, + TX_VEN2N000, + TX_VEN2N001, + TX_VEN2N002, + TX_VEN2N003, + TX_VEN2N004, + TX_VEN2N005, + TX_VEN2N006, + TX_VEN2N007, + TX_VEN2N008, + TX_VEN2N009, + TX_VEN2N010, + TX_VEN2N011, // UNUSED + TX_VEN2N012, + TX_VEN2N013, + // MISSING + TX_VEN2N015, + TX_VEN2N016, + TX_VEN2N017, + TX_VEN2N018, // UNUSED + TX_VEN2N019, + TX_VEN2N020, + TX_VEN2N021, + TX_VEN2N022, + TX_VEN2N023, + TX_VEN2N024, + TX_VEN2N025, + // UNUSED + TX_VEN2N027, + TX_VEN2N028, + TX_VEN2N029, + TX_VEN2N030, + TX_VEN2N031, + TX_VEN2N032, + TX_VEN2N033, + TX_VEN2N034, + TX_VEN2N035, + // UNUSED: 036, 037 + TX_VEN2N038, // UNUSED + TX_VEN2N039, + // UNUSED: N040 -> N043 (options for a menu?) + // UNUSED: VEN2NA25 (Alternate for VEN2N025) + // UNUSED: VEN2S072 (similar to VEN2_027) TX_VEN2U093, + TX_VEN2U094, + TX_VEN2_HAIL_ELASI, // Custom named text + TX_VEN2_HAIL_ENT, + TX_VEN2_CANCEL, TX_VEN4_016, + TX_VEN4_017, TX_VEN4N010, TX_VEN4N014,