aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMatthew Stewart2018-06-22 01:40:53 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit43a0a574ff72c88a4f659f8fd5482a33bcaac8cb (patch)
tree4e548733cc24259212562336b565b2f9fae05dc4 /engines
parent08ead492d8ff338a469ca92881919d8ff22e12b3 (diff)
downloadscummvm-rg350-43a0a574ff72c88a4f659f8fd5482a33bcaac8cb.tar.gz
scummvm-rg350-43a0a574ff72c88a4f659f8fd5482a33bcaac8cb.tar.bz2
scummvm-rg350-43a0a574ff72c88a4f659f8fd5482a33bcaac8cb.zip
STARTREK: LOVE4
Diffstat (limited to 'engines')
-rw-r--r--engines/startrek/awaymission.cpp2
-rw-r--r--engines/startrek/awaymission.h4
-rw-r--r--engines/startrek/room.h46
-rw-r--r--engines/startrek/rooms/function_map.h54
-rw-r--r--engines/startrek/rooms/love3.cpp7
-rw-r--r--engines/startrek/rooms/love4.cpp265
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h87
8 files changed, 456 insertions, 11 deletions
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index 48c474ee85..01520fa200 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(1);
+ initAwayCrewPositions(0);
}
void StarTrekEngine::runAwayMission() {
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index f1a7e77a65..13d8c83eea 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -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;
};
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 59b37e6f0d..0a3a0e2ddd 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -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;
};
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 8c8df3794f..22cecb68fc 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -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[] = {
diff --git a/engines/startrek/rooms/love3.cpp b/engines/startrek/rooms/love3.cpp
index 4e73ed8245..0ac288548e 100644
--- a/engines/startrek/rooms/love3.cpp
+++ b/engines/startrek/rooms/love3.cpp
@@ -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);
diff --git a/engines/startrek/rooms/love4.cpp b/engines/startrek/rooms/love4.cpp
index ec82191a6d..63d1d9d654 100644
--- a/engines/startrek/rooms/love4.cpp
+++ b/engines/startrek/rooms/love4.cpp
@@ -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);
}
}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 2960ff1637..e239806c67 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 = 3;
+ _roomIndexToLoad = 4;
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 53062fbe7b..a72c25310e 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -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.",
};
}