diff options
author | Matthew Stewart | 2018-06-22 01:40:53 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | 43a0a574ff72c88a4f659f8fd5482a33bcaac8cb (patch) | |
tree | 4e548733cc24259212562336b565b2f9fae05dc4 /engines | |
parent | 08ead492d8ff338a469ca92881919d8ff22e12b3 (diff) | |
download | scummvm-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.cpp | 2 | ||||
-rw-r--r-- | engines/startrek/awaymission.h | 4 | ||||
-rw-r--r-- | engines/startrek/room.h | 46 | ||||
-rw-r--r-- | engines/startrek/rooms/function_map.h | 54 | ||||
-rw-r--r-- | engines/startrek/rooms/love3.cpp | 7 | ||||
-rw-r--r-- | engines/startrek/rooms/love4.cpp | 265 | ||||
-rw-r--r-- | engines/startrek/startrek.cpp | 2 | ||||
-rw-r--r-- | engines/startrek/text.h | 87 |
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.", }; } |