aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/rooms
diff options
context:
space:
mode:
authorMatthew Stewart2018-08-04 03:39:11 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commita089dc23f7fa76cec77f235efa9262413ea7cd78 (patch)
tree0a778915ca00a285b08d932cd690f83b888331d9 /engines/startrek/rooms
parentd672fb6a3d1d78284f224cfe4ea1c755168be858 (diff)
downloadscummvm-rg350-a089dc23f7fa76cec77f235efa9262413ea7cd78.tar.gz
scummvm-rg350-a089dc23f7fa76cec77f235efa9262413ea7cd78.tar.bz2
scummvm-rg350-a089dc23f7fa76cec77f235efa9262413ea7cd78.zip
STARTREK: VENG2
Diffstat (limited to 'engines/startrek/rooms')
-rw-r--r--engines/startrek/rooms/veng0.cpp2
-rw-r--r--engines/startrek/rooms/veng2.cpp871
2 files changed, 869 insertions, 4 deletions
diff --git a/engines/startrek/rooms/veng0.cpp b/engines/startrek/rooms/veng0.cpp
index c29033655c..0e7b544cc8 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 2e00f0a884..d473e588ac 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);
}
}