aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/awaymission.cpp2
-rw-r--r--engines/startrek/awaymission.h9
-rw-r--r--engines/startrek/room.h42
-rw-r--r--engines/startrek/rooms/function_map.h38
-rw-r--r--engines/startrek/rooms/love1.cpp4
-rw-r--r--engines/startrek/rooms/love3.cpp245
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h136
8 files changed, 471 insertions, 7 deletions
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index 83e16c9ac3..1526e6a182 100644
--- a/engines/startrek/awaymission.cpp
+++ b/engines/startrek/awaymission.cpp
@@ -41,7 +41,7 @@ void StarTrekEngine::initAwayMission() {
_roomIndexToLoad = -1;
// Load crew positions for beaming in
- initAwayCrewPositions(0);
+ initAwayCrewPositions(1);
}
void StarTrekEngine::runAwayMission() {
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 9114bb9edf..c827d7a1cb 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -142,7 +142,7 @@ struct AwayMission {
struct {
bool alreadyStartedMission; // 0x29
bool knowAboutVirus; // 0x2a
- bool field2b; // 0x2b
+ bool putLaughingGasInVent; // 0x2b
bool field2c; // 0x2c
bool field2d; // 0x2d
bool chamberHasCure; // 0x2e
@@ -155,6 +155,13 @@ struct AwayMission {
byte field35; // 0x35
byte canister1; // 0x36
byte canister2; // 0x37
+ bool servicePanelOpen; // 0x38
+ bool gasTankUnscrewed; // 0x39
+ bool wrenchTaken; // 0x3a
+ bool tookN2TankFromServicePanel; // 0x3b
+ bool grateRemoved; // 0x3d
+ bool field3e; // 0x3e
+ bool field3f; // 0x3f
bool field41; // 0x41
bool spockAccessedConsole; // 0x49
bool mccoyAccessedConsole; // 0x4a
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 371d57fd19..3ab458a84a 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -938,6 +938,42 @@ public:
// LOVE3
void love3Tick1();
+ void love3Tick80();
+ void love3TouchedWarp1();
+ void love3Timer3Expired();
+ void love3LookAtServicePanel();
+ void love3LookAtMonitor();
+ void love3LookAtWrench();
+ void love3LookAtKirk();
+ void love3LookAtMccoy();
+ void love3LookAtSpock();
+ void love3LookAtRedshirt();
+ void love3LookAnywhere();
+ void love3LookAtShaft();
+ void love3LookAtPanel();
+ void love3LookAtGasTank();
+ void love3LookAtTurbines();
+ void love3TalkToKirk();
+ void love3TalkToSpock();
+ void love3TalkToMccoy();
+ void love3TalkToRedshirt();
+ void love3UseMTricorderAnywhere();
+ void love3UseSTricorderOnTurbines();
+ void love3UseSTricorderOnInsulation();
+ void love3UseSTricorderAnywhere();
+ void love3UseKirkOnServicePanel();
+ void love3UseSpockOnServicePanel();
+ void love3UseMccoyOnServicePanel();
+ void love3UseRedshirtOnServicePanel();
+ void love3CrewmanReachedServicePanel();
+ void love3OpenedOrClosedServicePanel();
+ void love3UseWrenchOnGasTank();
+ void love3ReachedGasTankToUnscrew();
+ void love3ScrewedOrUnscrewedGasTank();
+ void love3UseWrenchOnO2OrH2Gas();
+ void love3UseWrenchOnN2Gas();
+ void love3ReachedGasTankToPutDown();
+ void love3PutN2TankBack();
// LOVE4
void love4Tick1();
@@ -1053,6 +1089,12 @@ private:
byte _2967; // 0x2967
} love2;
+ struct {
+ byte activeCrewman;
+ byte _188e; // 0x188e
+ byte _188f; // 0x188f
+ } love3;
+
} _roomVar;
};
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index b16dbff5f8..dab82aaac5 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1063,6 +1063,44 @@ RoomAction love2ActionList[] = {
RoomAction love3ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::love3Tick1 },
+ { Action(ACTION_TICK, 80, 0, 0), &Room::love3Tick80 },
+ { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::love3TouchedWarp1 },
+ { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::love3Timer3Expired },
+ { Action(ACTION_LOOK, 8, 0, 0), &Room::love3LookAtServicePanel },
+ { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love3LookAtMonitor },
+ { Action(ACTION_LOOK, 10, 0, 0), &Room::love3LookAtWrench },
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love3LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love3LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love3LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love3LookAtRedshirt },
+ { Action(ACTION_LOOK, -1, 0, 0), &Room::love3LookAnywhere },
+ { Action(ACTION_LOOK, 0x22, 0, 0), &Room::love3LookAtShaft },
+ { Action(ACTION_LOOK, 9, 0, 0), &Room::love3LookAtPanel },
+ { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love3LookAtPanel },
+ { Action(ACTION_LOOK, 12, 0, 0), &Room::love3LookAtGasTank },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love3LookAtTurbines },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love3TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love3TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love3TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love3TalkToRedshirt },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love3UseMTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::love3UseSTricorderOnTurbines },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::love3UseSTricorderOnInsulation },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love3UseSTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_KIRK, 8, 0), &Room::love3UseKirkOnServicePanel },
+ { Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::love3UseSpockOnServicePanel },
+ { Action(ACTION_USE, OBJECT_MCCOY, 8, 0), &Room::love3UseMccoyOnServicePanel },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 8, 0), &Room::love3UseRedshirtOnServicePanel },
+ { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love3CrewmanReachedServicePanel },
+ { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love3OpenedOrClosedServicePanel },
+ { Action(ACTION_USE, OBJECT_IWRENCH, 12, 0), &Room::love3UseWrenchOnGasTank },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love3ReachedGasTankToUnscrew },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love3ScrewedOrUnscrewedGasTank },
+ { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IO2GAS, 0), &Room::love3UseWrenchOnO2OrH2Gas },
+ { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IH2GAS, 0), &Room::love3UseWrenchOnO2OrH2Gas },
+ { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IN2GAS, 0), &Room::love3UseWrenchOnN2Gas },
+ { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::love3ReachedGasTankToPutDown },
+ { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love3PutN2TankBack },
};
RoomAction love4ActionList[] = {
diff --git a/engines/startrek/rooms/love1.cpp b/engines/startrek/rooms/love1.cpp
index 509f35f882..d2ffe2143c 100644
--- a/engines/startrek/rooms/love1.cpp
+++ b/engines/startrek/rooms/love1.cpp
@@ -624,7 +624,7 @@ void Room::love1CrewmanReachedLadder() {
TX_SPEAKER_FERRIS
};
- if (_vm->_awayMission.love.field2b || _vm->_awayMission.love.field41) // Romulans unconscious
+ if (_vm->_awayMission.love.putLaughingGasInVent || _vm->_awayMission.love.field41) // Romulans unconscious
loadRoomIndex(4, 3);
else { // Romulans still conscious, they shoot you
loadActorAnim(OBJECT_PHASERSHOT, "s3r2s2", 0xf3, 0x89, 0);
@@ -650,7 +650,7 @@ void Room::love1CrewmanDiedFromPhaser() {
// Romulans fire a "warning shot" when you go to the right part of the room.
void Room::love1TouchedHotspot0() {
- if (_vm->_awayMission.love.field2b || _vm->_awayMission.love.field41)
+ if (_vm->_awayMission.love.putLaughingGasInVent || _vm->_awayMission.love.field41)
return;
loadActorAnim(OBJECT_PHASERSHOT, "s3r2s1", 0xf3, 0x89, 0);
playSoundEffectIndex(SND_PHASSHOT);
diff --git a/engines/startrek/rooms/love3.cpp b/engines/startrek/rooms/love3.cpp
index 44203dfa2f..149c53c824 100644
--- a/engines/startrek/rooms/love3.cpp
+++ b/engines/startrek/rooms/love3.cpp
@@ -22,14 +22,255 @@
#include "startrek/room.h"
-#define OBJECT_DOOR1 8
+#define OBJECT_SERVICE_PANEL 8
+#define OBJECT_INSULATION 9
+#define OBJECT_WRENCH 10
+#define OBJECT_GRATE 11
+#define OBJECT_GAS_TANK 12
-#define HOTSPOT_CONSOLE 0x20
+#define HOTSPOT_INSULATION 0x20
+#define HOTSPOT_MONITOR 0x21
+#define HOTSPOT_SHAFT 0x22
+#define HOTSPOT_TURBINES 0x23
namespace StarTrek {
void Room::love3Tick1() {
+ playVoc("LOV3LOOP");
+ if (!_vm->_awayMission.love.wrenchTaken)
+ loadActorAnim(OBJECT_WRENCH, "wrench", 0x10a, 0xb6, 0);
+
+ if (_vm->_awayMission.love.grateRemoved)
+ loadActorAnim(OBJECT_GRATE, "s3r4g3", 0, 0, 0);
+ else
+ loadActorAnim(OBJECT_GRATE, "s3r4g1", 0x116, 0x8f, 0);
+
+ if (_vm->_awayMission.love.field3e)
+ loadActorAnim(OBJECT_INSULATION, "s3r4p2", 0, 0, 0);
+
+ if (!_vm->_awayMission.love.tookN2TankFromServicePanel)
+ loadActorAnim(OBJECT_GAS_TANK, "r4n2", 0, 0, 0);
+
+ if (_vm->_awayMission.love.servicePanelOpen)
+ loadActorAnim(OBJECT_SERVICE_PANEL, "s3r4d1a", 1, 0, 0);
+ else
+ loadActorAnim(OBJECT_SERVICE_PANEL, "s3r4d2", 1, 0, 0);
+
+ if (_vm->_awayMission.love.field2c)
+ _vm->_awayMission.timers[0] = getRandomWordInRange(200, 400);
+ if (_vm->_awayMission.love.field2d)
+ _vm->_awayMission.timers[1] = getRandomWordInRange(200, 400);
+
+ _vm->_awayMission.timers[2] = 200;
+
+ _roomVar.love3._188e = 0xb4;
+ _roomVar.love3._188f = 0xb7;
+}
+
+void Room::love3Tick80() {
+ if (!_vm->_awayMission.love.field3f && haveItem(OBJECT_IRLG)) {
+ showText(TX_SPEAKER_MCCOY, TX_LOV3_010);
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_020);
+ }
+}
+
+void Room::love3TouchedWarp1() {
+ _vm->_awayMission.disableInput = true;
+ playSoundEffectIndex(SND_DOOR1);
+ _vm->_awayMission.timers[3] = 10;
+}
+
+void Room::love3Timer3Expired() {
+ loadRoomIndex(1, 0);
+}
+
+void Room::love3LookAtServicePanel() {
+ showText(TX_LOV3NA20);
+}
+
+void Room::love3LookAtMonitor() {
+ showText(TX_LOV3N000); // BUGFIX: original didn't play the audio
+}
+
+void Room::love3LookAtWrench() {
+ showText(TX_LOV3N002);
+}
+
+void Room::love3LookAtKirk() {
+ showText(TX_LOV3N003);
+}
+
+void Room::love3LookAtMccoy() {
+ showText(TX_LOV3N005);
+}
+
+void Room::love3LookAtSpock() {
+ showText(TX_LOV3N008);
+}
+
+void Room::love3LookAtRedshirt() {
+ showText(TX_LOV3N004);
+}
+
+void Room::love3LookAnywhere() {
+ showText(TX_LOV3NA23);
+}
+
+void Room::love3LookAtShaft() {
+ showText(TX_LOV3N019);
+}
+
+void Room::love3LookAtPanel() {
+ if (_vm->_awayMission.love.field3e)
+ showText(TX_LOV3N017);
+ else
+ showText(TX_LOV3NA22);
+}
+
+void Room::love3LookAtGasTank() {
+ showText(TX_LOV3N006);
+}
+
+void Room::love3LookAtTurbines() {
+ showText(TX_LOV3N026);
+ showText(TX_SPEAKER_MCCOY, TX_LOV3_009);
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_019);
+ if (!_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_FERRIS, TX_LOV3_026);
+}
+
+void Room::love3TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_LOV3_001);
+}
+
+void Room::love3TalkToSpock() {
+ if (_vm->_awayMission.love.field3f)
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_003);
+ if (_vm->_awayMission.love.putLaughingGasInVent)
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_017);
+ else if (haveItem(OBJECT_IRLG))
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_004);
+ else
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_003);
+}
+
+void Room::love3TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV3_008);
+}
+
+void Room::love3TalkToRedshirt() {
+ showText(TX_SPEAKER_FERRIS, TX_LOV3_024);
+}
+
+void Room::love3UseMTricorderAnywhere() {
+ if (_vm->_awayMission.love.knowAboutVirus)
+ mccoyScan(DIR_S, TX_LOV3_005, false);
+ else
+ mccoyScan(DIR_S, TX_LOV3_006, false);
+}
+
+void Room::love3UseSTricorderOnTurbines() {
+ spockScan(DIR_N, TX_LOV3_014, false);
+}
+
+void Room::love3UseSTricorderOnInsulation() {
+ if (_vm->_awayMission.love.field3e)
+ spockScan(DIR_W, TX_LOV3_002, false);
+}
+
+void Room::love3UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_LOV3_013, false);
+}
+
+void Room::love3UseKirkOnServicePanel() {
+ _roomVar.love3.activeCrewman = OBJECT_KIRK;
+ walkCrewman(_roomVar.love3.activeCrewman, 0x104, 0xae, 1);
+}
+
+void Room::love3UseSpockOnServicePanel() {
+ _roomVar.love3.activeCrewman = OBJECT_SPOCK;
+ walkCrewman(_roomVar.love3.activeCrewman, 0x104, 0xae, 1);
+}
+
+void Room::love3UseMccoyOnServicePanel() {
+ _roomVar.love3.activeCrewman = OBJECT_MCCOY;
+ walkCrewman(_roomVar.love3.activeCrewman, 0x104, 0xae, 1);
+}
+
+void Room::love3UseRedshirtOnServicePanel() {
+ _roomVar.love3.activeCrewman = OBJECT_REDSHIRT;
+ walkCrewman(_roomVar.love3.activeCrewman, 0x104, 0xae, 1);
+}
+
+void Room::love3CrewmanReachedServicePanel() {
+ Common::String anim = _vm->getCrewmanAnimFilename(_roomVar.love3.activeCrewman, "usehe");
+ loadActorAnim2(_roomVar.love3.activeCrewman, anim, -1, -1, 1);
+}
+
+void Room::love3OpenedOrClosedServicePanel() {
+ if (_vm->_awayMission.love.servicePanelOpen)
+ loadActorAnim2(OBJECT_SERVICE_PANEL, "s3r4d1b", 1, 0, 0);
+ else
+ loadActorAnim2(OBJECT_SERVICE_PANEL, "s3r4d1", 1, 0, 0);
+
+ playVoc("SMADOOR1");
+ _vm->_awayMission.love.servicePanelOpen = !_vm->_awayMission.love.servicePanelOpen;
+
+ if (_vm->_awayMission.love.servicePanelOpen) {
+ if (_vm->_awayMission.love.tookN2TankFromServicePanel)
+ showText(TX_LOV3N023);
+ else
+ showText(TX_LOV3N022);
+ }
+ else
+ showText(TX_LOV3N020);
+}
+
+// Use wrench on gas tank, to screw or unscrew it in position
+void Room::love3UseWrenchOnGasTank() {
+ walkCrewman(OBJECT_KIRK, 0x10e, 0xae, 2);
+}
+
+void Room::love3ReachedGasTankToUnscrew() {
+ loadActorAnim2(OBJECT_KIRK, "kusehe", -1, -1, 2);
+ playVoc("MUR3E1S");
+}
+
+void Room::love3ScrewedOrUnscrewedGasTank() {
+ if (!_vm->_awayMission.love.gasTankUnscrewed) {
+ showText(TX_LOV3N012);
+ if (!_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_FERRIS, TX_LOV3_022);
+ _vm->_awayMission.love.gasTankUnscrewed = true;
+ }
+ else {
+ showText(TX_LOV3N015);
+ _vm->_awayMission.love.gasTankUnscrewed = false;
+ }
+}
+
+
+void Room::love3UseWrenchOnO2OrH2Gas() {
+ showText(TX_SPEAKER_SPOCK, TX_LOV3_016);
+}
+
+
+// Use wrench on N2 gas = putting it from the inventory back to the service panel
+void Room::love3UseWrenchOnN2Gas() {
+ walkCrewman(OBJECT_KIRK, 0x10e, 0xae, 15);
+}
+
+void Room::love3ReachedGasTankToPutDown() {
+ loadActorAnim2(OBJECT_KIRK, "kusehe", -1, -1, 3);
+ playVoc("MUR3E1S");
+}
+
+void Room::love3PutN2TankBack() {
+ showText(TX_LOV3N013);
+ _vm->_awayMission.love.tookN2TankFromServicePanel = false;
+ loseItem(OBJECT_IN2GAS);
+ loadActorAnim(OBJECT_GAS_TANK, "r4n2", 0, 0, 0);
}
}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 26c8c54393..16c5d206d1 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -84,7 +84,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_textboxHasMultipleChoices = false;
_missionToLoad = "LOVE";
- _roomIndexToLoad = 2;
+ _roomIndexToLoad = 3;
for (int i = 0; i < NUM_OBJECTS; i++)
_itemList[i] = g_itemList[i];
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index b6b1c0d1f8..53062fbe7b 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -962,6 +962,74 @@ enum GameStringIDs {
TX_LOV2N051,
+ TX_LOV3_001,
+ TX_LOV3_002,
+ TX_LOV3_003,
+ TX_LOV3_004,
+ TX_LOV3_005,
+ TX_LOV3_006,
+ TX_LOV3_007,
+ TX_LOV3_008,
+ TX_LOV3_009,
+ TX_LOV3_010,
+ TX_LOV3_011,
+ TX_LOV3_012,
+ TX_LOV3_013,
+ TX_LOV3_014,
+ TX_LOV3_015,
+ TX_LOV3_016,
+ TX_LOV3_017,
+ TX_LOV3_018,
+ TX_LOV3_019,
+ TX_LOV3_020,
+ TX_LOV3_021,
+ TX_LOV3_022,
+ TX_LOV3_023,
+ TX_LOV3_024,
+ TX_LOV3_025,
+ TX_LOV3_026,
+ TX_LOV3N000,
+ TX_LOV3N001,
+ TX_LOV3N002,
+ TX_LOV3N003,
+ TX_LOV3N004,
+ TX_LOV3N005,
+ TX_LOV3N006,
+ TX_LOV3N007,
+ TX_LOV3N008,
+ TX_LOV3N009,
+ TX_LOV3N010,
+ TX_LOV3N011,
+ TX_LOV3N012,
+ TX_LOV3N013,
+ TX_LOV3N014,
+ TX_LOV3N015,
+ TX_LOV3N016,
+ TX_LOV3N017,
+ TX_LOV3N018,
+ TX_LOV3N019,
+ TX_LOV3N020,
+ TX_LOV3N021,
+ TX_LOV3N022,
+ TX_LOV3N023,
+ TX_LOV3N024,
+ TX_LOV3N025,
+ TX_LOV3N026,
+ TX_LOV3N027,
+ TX_LOV3N028,
+ TX_LOV3N029,
+ TX_LOV3N030,
+ TX_LOV3N031,
+ TX_LOV3N032,
+ TX_LOV3NA08,
+ TX_LOV3NA09,
+ TX_LOV3NA20,
+ TX_LOV3NA21,
+ TX_LOV3NA22,
+ TX_LOV3NA23,
+ TX_LOV3NJ32,
+
+
TX_END
};
@@ -1870,6 +1938,74 @@ const char * const g_gameStrings[] = {
"#LOV2\\LOV2N049#The machine synthesizes a quantity of inert matter.",
"#LOV2\\LOV2N050#The machine synthesizes a quantity of wet grey goo.",
"#LOV2\\LOV2N051#The machine synthesizes a quantity of wet grey goo.",
+
+
+ "#LOV3\\LOV3_001#At least all this equipment appears to be operating.",
+ "#LOV3\\LOV3_002#A prime source of raw material for TLDTH gas.",
+ "#LOV3\\LOV3_003#Captain, the fusion reactor doesn't seem to have been tampered with. I suggest we leave the controls as they are.",
+ "#LOV3\\LOV3_004#Captain, we can introduce the Romulan Laughing Gas into the station's ventilation system from here.",
+ "#LOV3\\LOV3_005#Except for the Oroborus virus, I'm not picking up anything unusual.",
+ "#LOV3\\LOV3_006#I'm picking up some strange, airborne virus. I can't identify it without more information.",
+ "#LOV3\\LOV3_007#Ouch!",
+ "#LOV3\\LOV3_008#Ah. The station's fusion reactor. Very nice. What are we going to tour next, the ventilation system?",
+ "#LOV3\\LOV3_009#I didn't realize that they used these old fusion reactors anymore.",
+ "#LOV3\\LOV3_010#I don't suppose you'd enjoy the psychological release of a few good belly laughs, Spock? We could open the canister right here, if you like.",
+ "#LOV3\\LOV3_011#I think one application of gas is sufficient, Captain.",
+ "#LOV3\\LOV3_012#Nitrous oxide affects humans, but not Romulans. However, a similar effect can be produced by the gas TLTDH.",
+ "#LOV3\\LOV3_013#Nothing unusual is detected.",
+ "#LOV3\\LOV3_014#The fusion reactor is functioning at peak efficiency. There is no need to tamper with its current operation.",
+ "#LOV3\\LOV3_015#The unit cannot lift something fastened to the body of the station, Captain. The tank must be detached first.",
+ "#LOV3\\LOV3_016#This is not wise, Captain. I don't believe we can safely substitute a different gas in this location.",
+ "#LOV3\\LOV3_017#We should now be able to proceed safely to the lower level.",
+ "#LOV3\\LOV3_018#Captain, the instruments are far too delicate for such abuse. We may set off a chain reaction that would destroy the entire space station.",
+ "#LOV3\\LOV3_019#Actually, doctor, as Mr. Scott would tell you, the Cochrane-500 is renowned for its reliability and perfectly suited for a station of this size.",
+ "#LOV3\\LOV3_020#I would strongly recommend against it, Doctor.",
+ "#LOV3\\LOV3_021#Good thing the person who designed these stations built in safeguards against an accidental spill!",
+ "#LOV3\\LOV3_022#I guess this made it easier to replace the tank every so often, eh Captain?",
+ "#LOV3\\LOV3_023#It doesn't sound like it subdued them, Captain. If anything, it just made them angry.",
+ "#LOV3\\LOV3_024#Sir, I'll watch the door so we don't get cornered.",
+ "#LOV3\\LOV3_025#It sure beats hauling it around on our backs, sir.",
+ "#LOV3\\LOV3_026#Hey, this thing's real old, isn't it?",
+ "#LOV3\\LOV3N000#All readings are normal.", // TYPO: audio filename was wrong
+ "#LOV3\\LOV3N001#Cursing and coughing echo up the air shaft.",
+ "#LOV3\\LOV3N002#It's a standard adjustable metric socket wrench.",
+ "#LOV3\\LOV3N003#Kirk is looking closely at the equipment.",
+ "#LOV3\\LOV3N004#Lt. Ferris is carefully watching the hallway",
+ "#LOV3\\LOV3N005#McCoy is fidgeting around.",
+ "#LOV3\\LOV3N006#N gas tank.", // FIXME: N2 (with superscript)
+ "#LOV3\\LOV3N007#The tank is too heavy to move by muscle alone.",
+ "#LOV3\\LOV3N008#Spock is analyzing the surroundings.",
+ "#LOV3\\LOV3N009#The air vent becomes wet.",
+ "#LOV3\\LOV3N010#The antigrav unit hums and emits the stink of ozone before it failsafes.",
+ "#LOV3\\LOV3N011#The shaft is too small to crawl through.",
+ "#LOV3\\LOV3N012#The tank detaches easily.",
+ "#LOV3\\LOV3N013#The tank fits into place and is easy to reattach.",
+ "#LOV3\\LOV3N014#The tank is large and heavy, with its feed lines firmly attached.",
+ "#LOV3\\LOV3N015#The tank is now firmly attached to its feed lines.",
+ "#LOV3\\LOV3N016#The vent is now open. It leads to the lower deck.",
+ "#LOV3\\LOV3N017#There is a pile of stripped insulation that fell out of the Engineering access panel.",
+ "#LOV3\\LOV3N018#There seems to be no effect.",
+ "#LOV3\\LOV3N019#This is a screen and filter for the ventilation shaft.",
+ "#LOV3\\LOV3N020#The panel closes.",
+ "#LOV3\\LOV3N021#The panel is open. You see vast quantities of dust and stripped insulation from wiring repairs made to the console in the past.",
+ "#LOV3\\LOV3N022#The panel opens. You see a gas tank labeled N, with its feed lines running deeper into the wall.", // FIXME: N2 (with superscript)
+ "#LOV3\\LOV3N023#The panel opens.",
+ "#LOV3\\LOV3N024#This is the engineering room. All appears normal.",
+ "#LOV3\\LOV3N025#This vent is currently closed.",
+ "#LOV3\\LOV3N026#Turbines of a Cochrane-500 Class Fusion drive, manufactured over a century ago on Alpha Centuri.",
+ "#LOV3\\LOV3N027#You already have some insulation.",
+ "#LOV3\\LOV3N028#You already have the wrench.",
+ "#LOV3\\LOV3N029#You grab a handful of insulation.",
+ "#LOV3\\LOV3N030#You need something to pry this open.",
+ "#LOV3\\LOV3N031#You pick up a large wrench.",
+ "#LOV3\\LOV3N032#You replace the air vent cover.",
+ "#LOV3\\LOV3NA08#With a hiss, the Romulan Laughing Gas billows down the vent. Things are strangely quiet below.",
+ "#LOV3\\LOV3NA09#With a hiss, the Romulan Laughing Gas billows down the vent. You hear the muffled sounds through the vent of hearty Romulan laughter, followed by the dull thud of bodies hitting the deck.",
+ "#LOV3\\LOV3NA20#This is a service access panel, permitting used-up or worn materials to be replaced.",
+ "#LOV3\\LOV3NA21#This is a vent shaft that leads to the lower level.",
+ "#LOV3\\LOV3NA22#This is an engineering access panel, allowing repairs to be made to the interior wiring in the equipment.",
+ "#LOV3\\LOV3NA23#This is the engineering center for the ARK7 space station.",
+ "#LOV3\\LOV3NJ32#You attach the antigrav unit to the gas tank. It can be moved freely.",
};
}