STARTREK: LOVE4

This commit is contained in:
Matthew Stewart 2018-06-22 01:40:53 -04:00 committed by Eugene Sandulenko
parent 08ead492d8
commit 43a0a574ff
8 changed files with 456 additions and 11 deletions

View File

@ -41,7 +41,7 @@ void StarTrekEngine::initAwayMission() {
_roomIndexToLoad = -1;
// Load crew positions for beaming in
initAwayCrewPositions(1);
initAwayCrewPositions(0);
}
void StarTrekEngine::runAwayMission() {

View File

@ -162,7 +162,8 @@ struct AwayMission {
bool field3c; // 0x3c
bool grateRemoved; // 0x3d
bool insulationOnGround; // 0x3e
bool field3f; // 0x3f
bool visitedRoomWithRomulans; // 0x3f
bool romulansCured; // 0x40
bool romulansUnconsciousFromVirus; // 0x41
bool spockAccessedConsole; // 0x49
bool mccoyAccessedConsole; // 0x4a
@ -171,6 +172,7 @@ struct AwayMission {
bool gotPointsForOpeningGrate; // 0x4d
bool gotPointsForGassingRomulans; // 0x4e
bool gotCure; // 0x4f
bool gotPointsForHydratingRomulans; // 0x51
int16 missionScore; // 0x52
} love;
};

View File

@ -97,10 +97,10 @@ private:
// Interface for room-specific code
void loadActorAnim(int actorIndex, Common::String anim, int16 x, int16 y, uint16 field66); // Cmd 0x00
void loadActorAnim(int actorIndex, Common::String anim, int16 x, int16 y, uint16 field66 = 0); // Cmd 0x00
void loadActorAnimC(int actorIndex, Common::String anim, int16 x, int16 y, void (Room::*funcPtr)());// Cmd 0x00
void loadActorStandAnim(int actorIndex); // Cmd 0x01
void loadActorAnim2(int actorIndex, Common::String anim, int16 x, int16 y, uint16 field66);// Cmd 0x02
void loadActorAnim2(int actorIndex, Common::String anim, int16 x, int16 y, uint16 field66 = 0);// Cmd 0x02
int showRoomSpecificText(const char **textAddr); // (Deprecated, use function below) // Cmd 0x03
int showText(const int *text); // Cmd 0x03
int showText(int speaker, int text); // Cmd 0x03
@ -1014,6 +1014,42 @@ public:
// LOVE4
void love4Tick1();
void love4Tick10();
void love4WalkToDoor();
void love4TouchedHotspot0();
void love4DoorOpenedOrReached();
void love4UseKirkOnLadder();
void love4ReachedLadder();
void love4UseStunPhaserOnRomulan();
void love4LookAnywhere();
void love4LookAtLadder();
void love4LookAtDoor();
void love4LookAtKirk();
void love4LookAtMccoy();
void love4LookAtSpock();
void love4LookAtRedshirt();
void love4LookAtRomulan();
void love4TalkToKirk();
void love4TalkToMccoy();
void love4TalkToRedshirt();
void love4TalkToSpock();
void love4TalkToRomulan();
void love4UseMTricorderOnRomulan();
void love4UseMTricorderAnywhere();
void love4UseSTricorderAnywhere();
void love4UseCureOnRomulan();
void love4MccoyReachedRomulan4();
void love4MccoyCuredRomulan4();
void love4MccoyReachedRomulan3();
void love4MccoyCuredRomulan3();
void love4MccoyReachedRomulan2();
void love4MccoyCuredRomulan2();
void love4MccoyReachedRomulan1();
void love4MccoyCuredRomulan1();
void love4UseWaterOnRomulan();
void love4UseMedkitOnRomulan();
void love4UseCureSampleOnRomulan();
void love4UseAnythingOnRomulan();
// LOVE5
void love5Tick1();
@ -1132,6 +1168,12 @@ private:
byte _188f; // 0x188f
} love3;
struct {
bool gaveWaterToRomulans; // 0xca
byte doorOpenCounter; // 0xcb
bool walkingToDoor; // 0xcc
} love4;
} _roomVar;
};

View File

@ -1141,6 +1141,60 @@ RoomAction love3ActionList[] = {
RoomAction love4ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::love4Tick1 },
{ Action(ACTION_TICK, 10, 0, 0), &Room::love4Tick10 },
{ Action(ACTION_WALK, 8, 0, 0), &Room::love4WalkToDoor },
{ Action(ACTION_WALK, 0x20, 0, 0), &Room::love4WalkToDoor },
{ Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love4TouchedHotspot0 },
{ Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::love4UseKirkOnLadder },
{ Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::love4UseStunPhaserOnRomulan },
{ Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::love4UseStunPhaserOnRomulan },
{ Action(ACTION_USE, OBJECT_IPHASERS, 11, 0), &Room::love4UseStunPhaserOnRomulan },
{ Action(ACTION_USE, OBJECT_IPHASERS, 12, 0), &Room::love4UseStunPhaserOnRomulan },
{ Action(ACTION_LOOK, -1, 0, 0), &Room::love4LookAnywhere },
{ Action(ACTION_LOOK, 0x21, 0, 0), &Room::love4LookAtLadder },
{ Action(ACTION_LOOK, 8, 0, 0), &Room::love4LookAtDoor },
{ Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love4LookAtKirk },
{ Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love4LookAtMccoy },
{ Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love4LookAtSpock },
{ Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love4LookAtRedshirt },
{ Action(ACTION_LOOK, 9, 0, 0), &Room::love4LookAtRomulan },
{ Action(ACTION_LOOK, 10, 0, 0), &Room::love4LookAtRomulan },
{ Action(ACTION_LOOK, 11, 0, 0), &Room::love4LookAtRomulan },
{ Action(ACTION_LOOK, 12, 0, 0), &Room::love4LookAtRomulan },
{ Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love4TalkToKirk },
{ Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love4TalkToMccoy },
{ Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love4TalkToRedshirt },
{ Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love4TalkToSpock },
{ Action(ACTION_TALK, 9, 0, 0), &Room::love4TalkToRomulan },
{ Action(ACTION_TALK, 10, 0, 0), &Room::love4TalkToRomulan },
{ Action(ACTION_TALK, 11, 0, 0), &Room::love4TalkToRomulan },
{ Action(ACTION_TALK, 12, 0, 0), &Room::love4TalkToRomulan },
{ Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::love4UseMTricorderOnRomulan },
{ Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::love4UseMTricorderOnRomulan },
{ Action(ACTION_USE, OBJECT_IMTRICOR, 11, 0), &Room::love4UseMTricorderOnRomulan },
{ Action(ACTION_USE, OBJECT_IMTRICOR, 12, 0), &Room::love4UseMTricorderOnRomulan },
{ Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love4UseMTricorderAnywhere },
{ Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love4UseSTricorderAnywhere },
{ Action(ACTION_USE, OBJECT_ICURE, 9, 0), &Room::love4UseCureOnRomulan },
{ Action(ACTION_USE, OBJECT_ICURE, 10, 0), &Room::love4UseCureOnRomulan },
{ Action(ACTION_USE, OBJECT_ICURE, 11, 0), &Room::love4UseCureOnRomulan },
{ Action(ACTION_USE, OBJECT_ICURE, 12, 0), &Room::love4UseCureOnRomulan },
{ Action(ACTION_USE, OBJECT_IH2O, 9, 0), &Room::love4UseWaterOnRomulan },
{ Action(ACTION_USE, OBJECT_IH2O, 10, 0), &Room::love4UseWaterOnRomulan },
{ Action(ACTION_USE, OBJECT_IH2O, 11, 0), &Room::love4UseWaterOnRomulan },
{ Action(ACTION_USE, OBJECT_IH2O, 12, 0), &Room::love4UseWaterOnRomulan },
{ Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::love4UseMedkitOnRomulan },
{ Action(ACTION_USE, OBJECT_IMEDKIT, 10, 0), &Room::love4UseMedkitOnRomulan },
{ Action(ACTION_USE, OBJECT_IMEDKIT, 11, 0), &Room::love4UseMedkitOnRomulan },
{ Action(ACTION_USE, OBJECT_IMEDKIT, 12, 0), &Room::love4UseMedkitOnRomulan },
{ Action(ACTION_USE, OBJECT_ISAMPLE, 9, 0), &Room::love4UseCureSampleOnRomulan },
{ Action(ACTION_USE, OBJECT_ISAMPLE, 10, 0), &Room::love4UseCureSampleOnRomulan },
{ Action(ACTION_USE, OBJECT_ISAMPLE, 11, 0), &Room::love4UseCureSampleOnRomulan },
{ Action(ACTION_USE, OBJECT_ISAMPLE, 12, 0), &Room::love4UseCureSampleOnRomulan },
{ Action(ACTION_USE, -1, 9, 0), &Room::love4UseAnythingOnRomulan },
{ Action(ACTION_USE, -1, 10, 0), &Room::love4UseAnythingOnRomulan },
{ Action(ACTION_USE, -1, 11, 0), &Room::love4UseAnythingOnRomulan },
{ Action(ACTION_USE, -1, 12, 0), &Room::love4UseAnythingOnRomulan },
};
RoomAction love5ActionList[] = {

View File

@ -61,7 +61,6 @@ void Room::love3Tick1() {
_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;
@ -69,7 +68,7 @@ void Room::love3Tick1() {
}
void Room::love3Tick80() {
if (!_vm->_awayMission.love.field3f && haveItem(OBJECT_IRLG)) {
if (!_vm->_awayMission.love.visitedRoomWithRomulans && haveItem(OBJECT_IRLG)) {
showText(TX_SPEAKER_MCCOY, TX_LOV3_010);
showText(TX_SPEAKER_SPOCK, TX_LOV3_020);
}
@ -145,9 +144,9 @@ void Room::love3TalkToKirk() {
}
void Room::love3TalkToSpock() {
if (_vm->_awayMission.love.field3f)
if (_vm->_awayMission.love.visitedRoomWithRomulans)
showText(TX_SPEAKER_SPOCK, TX_LOV3_003);
if (_vm->_awayMission.love.romulansUnconsciousFromLaughingGas)
else if (_vm->_awayMission.love.romulansUnconsciousFromLaughingGas)
showText(TX_SPEAKER_SPOCK, TX_LOV3_017);
else if (haveItem(OBJECT_IRLG))
showText(TX_SPEAKER_SPOCK, TX_LOV3_004);

View File

@ -22,14 +22,275 @@
#include "startrek/room.h"
#define OBJECT_DOOR1 8
#define OBJECT_DOOR 8
#define OBJECT_ROMULAN_1 9
#define OBJECT_ROMULAN_2 10
#define OBJECT_ROMULAN_3 11
#define OBJECT_ROMULAN_4 12
#define HOTSPOT_CONSOLE 0x20
#define HOTSPOT_DOOR 0x20
#define HOTSPOT_LADDER 0x21
namespace StarTrek {
void Room::love4Tick1() {
playVoc("LOV4LOOP");
if (_vm->_awayMission.love.romulansCured) {
loadActorAnim2(OBJECT_ROMULAN_1, "s3r5r1b", 0x36, 0xb3, 0);
loadActorAnim2(OBJECT_ROMULAN_2, "s3r5r2b", 0xb9, 0xbb, 0);
loadActorAnim2(OBJECT_ROMULAN_3, "s3r5r3b", 0xef, 0xc4, 0);
loadActorAnim2(OBJECT_ROMULAN_4, "s3r5r4b", 0x12a, 0xaa, 0);
}
else {
loadActorAnim2(OBJECT_ROMULAN_1, "s3r5r1a", 0x36, 0xb3, 0);
loadActorAnim2(OBJECT_ROMULAN_2, "s3r5r2a", 0xb9, 0xbb, 0);
loadActorAnim2(OBJECT_ROMULAN_3, "s3r5r3a", 0xef, 0xc4, 0);
loadActorAnim2(OBJECT_ROMULAN_4, "s3r5r4a", 0x12a, 0xaa, 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;
loadActorAnim(OBJECT_DOOR, "s3r5d1a", 0x90, 0x99, 0);
}
void Room::love4Tick10() {
if (!_vm->_awayMission.love.visitedRoomWithRomulans) {
playMidiMusicTracks(1, -1);
_vm->_awayMission.love.visitedRoomWithRomulans = true;
}
}
void Room::love4WalkToDoor() {
_vm->_awayMission.disableInput = true;
_roomVar.love4.walkingToDoor = true;
walkCrewmanC(OBJECT_KIRK, 0x91, 0x9c, &Room::love4DoorOpenedOrReached);
}
// Triggers the door opening
void Room::love4TouchedHotspot0() {
if (_roomVar.love4.walkingToDoor) {
loadActorAnimC(OBJECT_DOOR, "s3r5d1", 0x90, 0x99, &Room::love4DoorOpenedOrReached);
playSoundEffectIndex(SND_DOOR1);
}
}
void Room::love4DoorOpenedOrReached() {
_roomVar.love4.doorOpenCounter++;
if (_roomVar.love4.doorOpenCounter == 2)
loadRoomIndex(5, 1);
}
void Room::love4UseKirkOnLadder() {
walkCrewmanC(OBJECT_KIRK, 0xf6, 0xac, &Room::love4ReachedLadder);
}
void Room::love4ReachedLadder() {
loadRoomIndex(1, 2);
}
void Room::love4UseStunPhaserOnRomulan() {
showText(TX_SPEAKER_MCCOY, TX_LOV4_007);
}
void Room::love4LookAnywhere() {
showText(TX_LOV4N009);
}
void Room::love4LookAtLadder() {
showText(TX_LOV4N010);
}
void Room::love4LookAtDoor() {
showText(TX_LOV4N008);
}
void Room::love4LookAtKirk() {
showText(TX_LOV4N002);
}
void Room::love4LookAtMccoy() {
// BUGFIX: original game plays audio "LOV4/LOV4_025". This is mccoy saying something.
// It doesn't match up with the actual text, which is the narrator saying that mccoy
// is thinking it.
// Not sure if this was an intentional decision, but there is another unused audio
// file which matches with the text more accurately, so I'm using that instead.
showText(TX_LOV4N012);
}
void Room::love4LookAtSpock() {
showText(TX_LOV4N003);
}
void Room::love4LookAtRedshirt() {
showText(TX_LOV4N001);
}
void Room::love4LookAtRomulan() {
if (!_vm->_awayMission.love.romulansCured)
showText(TX_LOV4N006);
else
showText(TX_LOV4N011);
}
void Room::love4TalkToKirk() {
showText(TX_SPEAKER_KIRK, TX_LOV4_005);
showText(TX_SPEAKER_MCCOY, TX_LOV4_024);
showText(TX_SPEAKER_KIRK, TX_LOV4_002);
}
void Room::love4TalkToMccoy() {
if (_vm->_awayMission.love.romulansCured)
showText(TX_SPEAKER_MCCOY, TX_LOV4_022);
else
showText(TX_SPEAKER_MCCOY, TX_LOV4_010);
}
void Room::love4TalkToRedshirt() {
showText(TX_SPEAKER_FERRIS, TX_LOV4_028);
}
void Room::love4TalkToSpock() {
showText(TX_SPEAKER_SPOCK, TX_LOV4_027);
showText(TX_SPEAKER_KIRK, TX_LOV4_003);
}
void Room::love4TalkToRomulan() {
if (_vm->_awayMission.love.romulansCured)
showText(TX_LOV4N007); // BUGFIX: original didn't play audio
}
void Room::love4UseMTricorderOnRomulan() {
if (_vm->_awayMission.love.romulansCured)
mccoyScan(DIR_S, TX_LOV4_018, false);
else
mccoyScan(DIR_S, TX_LOV4_015, false);
}
void Room::love4UseMTricorderAnywhere() {
if (_vm->_awayMission.love.romulansCured)
mccoyScan(DIR_S, TX_LOV4_019, false);
else if (_vm->_awayMission.love.romulansUnconsciousFromLaughingGas)
mccoyScan(DIR_S, TX_LOV4_020, false);
else
mccoyScan(DIR_S, TX_LOV4_021, false);
}
void Room::love4UseSTricorderAnywhere() {
spockScan(DIR_S, TX_LOV4_006, false);
}
// Mccoy walks around to all romulans, giving each the cure
void Room::love4UseCureOnRomulan() {
if (_vm->_awayMission.love.romulansCured)
showText(TX_SPEAKER_MCCOY, TX_LOV4_013);
else {
_vm->_awayMission.love.missionScore += 2;
_vm->_awayMission.love.romulansCured = true;
_vm->_awayMission.disableInput = true;
walkCrewmanC(OBJECT_MCCOY, 0x10e, 0xb1, &Room::love4MccoyReachedRomulan4);
}
}
void Room::love4MccoyReachedRomulan4() {
loadActorAnimC(OBJECT_MCCOY, "museme", -1, -1, &Room::love4MccoyCuredRomulan4);
}
void Room::love4MccoyCuredRomulan4() {
loadActorAnim2(OBJECT_ROMULAN_4, "s3r5r4", 0x12a, 0xaa);
walkCrewmanC(OBJECT_MCCOY, 0xeb, 0xc4, &Room::love4MccoyReachedRomulan3);
}
void Room::love4MccoyReachedRomulan3() {
loadActorAnimC(OBJECT_MCCOY, "musele", -1, -1, &Room::love4MccoyCuredRomulan3);
}
void Room::love4MccoyCuredRomulan3() {
loadActorAnim2(OBJECT_ROMULAN_3, "s3r5r3", 0xef, 0xc4);
walkCrewmanC(OBJECT_MCCOY, 0xb9, 0xc3, &Room::love4MccoyReachedRomulan2);
}
void Room::love4MccoyReachedRomulan2() {
loadActorAnimC(OBJECT_MCCOY, "musemn", -1, -1, &Room::love4MccoyCuredRomulan2);
}
void Room::love4MccoyCuredRomulan2() {
loadActorAnim2(OBJECT_ROMULAN_2, "s3r5r2", 0xb9, 0xbb);
walkCrewmanC(OBJECT_MCCOY, 0x36, 0xba, &Room::love4MccoyReachedRomulan1);
}
void Room::love4MccoyReachedRomulan1() {
loadActorAnimC(OBJECT_MCCOY, "musemn", -1, -1, &Room::love4MccoyCuredRomulan1);
}
void Room::love4MccoyCuredRomulan1() {
loadActorAnim2(OBJECT_ROMULAN_1, "s3r5r1", 0x36, 0xb3, 0);
showText(TX_LOV4N005);
if (!_roomVar.love4.gaveWaterToRomulans)
showText(TX_LOV4_023);
_vm->_awayMission.disableInput = false;
}
void Room::love4UseWaterOnRomulan() {
// BUGFIX: If the romulans are unconscious, you can't use water on them.
// In the original, you could use water on them, but there would be no corresponding
// narration, you'd get no points for it, and you'd lose the water anyway.
if (!_vm->_awayMission.love.romulansCured)
showText(TX_SPEAKER_MCCOY, TX_LOV4_009);
else {
_roomVar.love4.gaveWaterToRomulans = true;
if (_vm->_awayMission.love.romulansCured) {
showText(TX_LOV4N013);
showText(TX_SPEAKER_MCCOY, TX_LOV4_026);
showText(TX_SPEAKER_KIRK, TX_LOV4_001);
if (!_vm->_awayMission.love.gotPointsForHydratingRomulans) {
_vm->_awayMission.love.gotPointsForHydratingRomulans = true;
_vm->_awayMission.love.missionScore += 2;
}
}
loseItem(OBJECT_IH2O);
}
// Note the following unused block of code, an alternative implementation of the
// function? If they succumbed to the virus from taking too long, McCoy doesn't let
// you hydrate them, saying it's dangerous. Otherwise, the romulans get up even
// without receiving the cure. (At least the narration says they do.)
// These events don't make too much sense, probably cut in the original release, but
// they did get voice acted anyway.
if (false) {
if (_vm->_awayMission.love.romulansUnconsciousFromVirus)
showText(TX_SPEAKER_MCCOY, TX_LOV4_009);
else {
showText(TX_LOV4N004);
if (!_vm->_awayMission.redshirtDead) {
showText(TX_SPEAKER_FERRIS, TX_LOV4_029);
showText(TX_SPEAKER_KIRK, TX_LOV4_004);
}
showText(TX_SPEAKER_MCCOY, TX_LOV4_011);
loseItem(OBJECT_IH2O);
}
}
}
void Room::love4UseMedkitOnRomulan() {
showText(TX_SPEAKER_MCCOY, TX_LOV4_012);
}
void Room::love4UseCureSampleOnRomulan() {
showText(TX_SPEAKER_MCCOY, TX_LOV4_014);
}
void Room::love4UseAnythingOnRomulan() {
showText(TX_SPEAKER_MCCOY, TX_LOV4_017);
}
}

View File

@ -84,7 +84,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_textboxHasMultipleChoices = false;
_missionToLoad = "LOVE";
_roomIndexToLoad = 3;
_roomIndexToLoad = 4;
for (int i = 0; i < NUM_OBJECTS; i++)
_itemList[i] = g_itemList[i];

View File

@ -1030,6 +1030,49 @@ enum GameStringIDs {
TX_LOV3NJ32,
TX_LOV4_001,
TX_LOV4_002,
TX_LOV4_003,
TX_LOV4_004,
TX_LOV4_005,
TX_LOV4_006,
TX_LOV4_007,
TX_LOV4_009,
TX_LOV4_010,
TX_LOV4_011,
TX_LOV4_012,
TX_LOV4_013,
TX_LOV4_014,
TX_LOV4_015,
TX_LOV4_016,
TX_LOV4_017,
TX_LOV4_018,
TX_LOV4_019,
TX_LOV4_020,
TX_LOV4_021,
TX_LOV4_022,
TX_LOV4_023,
TX_LOV4_024,
TX_LOV4_025,
TX_LOV4_026,
TX_LOV4_027,
TX_LOV4_028,
TX_LOV4_029,
TX_LOV4N000,
TX_LOV4N001,
TX_LOV4N002,
TX_LOV4N003,
TX_LOV4N004,
TX_LOV4N005,
TX_LOV4N006,
TX_LOV4N007,
TX_LOV4N008,
TX_LOV4N009,
TX_LOV4N010,
TX_LOV4N011,
TX_LOV4N012,
TX_LOV4N013,
TX_END
};
@ -2006,6 +2049,50 @@ const char * const g_gameStrings[] = {
"#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.",
"#LOV4\\LOV4_001#We aren't barbarians, in spite of what some people think.",
"#LOV4\\LOV4_002#Being surrounded by Romulans and not at gun point.",
"#LOV4\\LOV4_003#I know Mr. Spock. But we'll get through this.",
"#LOV4\\LOV4_004#Lt. Ferris, collect their weapons.",
"#LOV4\\LOV4_005#Well, there's a first time for everything.",
"#LOV4\\LOV4_006#Except for the Romulans, I can detect no other lifeforms in this room.",
"#LOV4\\LOV4_007#Are you crazy, Jim! That's not going to help in the least!",
"#LOV4\\LOV4_009#Careful there! They're suffering from dehydration but it's dangerous to give water to someone while they're unconscious. These men need serum or they're going to die!",
"#LOV4\\LOV4_010#Dammit, Jim, I'm a doctor, not a diplomat. I've got to try and save these men.",
"#LOV4\\LOV4_011#Dammit, Jim, these men are sick! They need my help!",
"#LOV4\\LOV4_012#I don't have the proper medicine to cure them, Jim.",
"#LOV4\\LOV4_013#I don't think they need another shot, Jim.",
"#LOV4\\LOV4_014#Jim, we need to synthesize more before we can use it.",
"#LOV4\\LOV4_015#Jim, we've got to help these men before they die.",
"#LOV4\\LOV4_016#Ouch!",
"#LOV4\\LOV4_017#That's not working, Jim.",
"#LOV4\\LOV4_018#The Romulans have been cured of the Oroborus virus, but they are severely dehydrated and need some rest.",
"#LOV4\\LOV4_019#The Romulans have been cured of the Oroborus virus.",
"#LOV4\\LOV4_020#The laughing gas did the trick, Jim, but these Romulans are still very, very sick -- they've only got hours left.",
"#LOV4\\LOV4_021#These Romulans will die soon if we can't cure them.",
"#LOV4\\LOV4_022#They'll be fine now, Jim. They just need some rest.",
"#LOV4\\LOV4_023#They're severely dehydrated, but they'll live. We got to them in time.",
"#LOV4\\LOV4_024#First time for what?",
"#LOV4\\LOV4_025#McCoy thinks to himself: 'Dammit, I'm a doctor, not a diplomat!'",
"#LOV4\\LOV4_026#Take it easy now... You'll feel better in a few minutes. Good thing we had the water available, Jim.",
"#LOV4\\LOV4_027#I have been in more comfortable situations, Captain.",
"#LOV4\\LOV4_028#These Romulans appear to be a negligible threat, sir.",
"#LOV4\\LOV4_029#Freeze, Romulans! You're covered!",
"#LOV4\\LOV4N000#Door Opens.",
"#LOV4\\LOV4N001#Ensign Ferris is looking at the Romulans, in case one of them decides to try something.",
"#LOV4\\LOV4N002#James Kirk views the scene with concern.",
"#LOV4\\LOV4N003#Mr. Spock is his usual stoic self.",
"#LOV4\\LOV4N004#The Romulans come to weakly, reaching for their weapons.",
"#LOV4\\LOV4N005#The Romulans stir weakly, then begin to get up... they've all been cured!",
"#LOV4\\LOV4N006#These Romulans are totally out of it.",
"#LOV4\\LOV4N007#They are in no condition to talk right now.",
"#LOV4\\LOV4N008#This door leads into another section of the base.",
"#LOV4\\LOV4N009#This is the ARK7's crew quarters. There are only Romulans here.",
"#LOV4\\LOV4N010#This ladder leads back to the research lab.",
"#LOV4\\LOV4N011#This Romulan is groggy, but conscious.",
"#LOV4\\LOV4N012#McCoy thinks to himself: 'Dammit, I'm a doctor, not a diplomat!'",
"#LOV4\\LOV4N013#The Romulans drink thirstily and empty the container.",
};
}