aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Stewart2018-06-15 02:35:36 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commitefda57c114ecbf62b4d5b76c12e648837d814cdb (patch)
tree440424ac9cc14c9182067d03de9e3a7415aa530b
parent6e322ebfc5279ee16076b07b82a1dc2c44122b26 (diff)
downloadscummvm-rg350-efda57c114ecbf62b4d5b76c12e648837d814cdb.tar.gz
scummvm-rg350-efda57c114ecbf62b4d5b76c12e648837d814cdb.tar.bz2
scummvm-rg350-efda57c114ecbf62b4d5b76c12e648837d814cdb.zip
STARTREK: LOVE0 (start of 3rd mission)
-rw-r--r--engines/startrek/action.h2
-rw-r--r--engines/startrek/awaymission.h13
-rw-r--r--engines/startrek/module.mk1
-rw-r--r--engines/startrek/room.cpp23
-rw-r--r--engines/startrek/room.h55
-rw-r--r--engines/startrek/rooms/function_map.h43
-rw-r--r--engines/startrek/rooms/love0.cpp274
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h212
9 files changed, 614 insertions, 11 deletions
diff --git a/engines/startrek/action.h b/engines/startrek/action.h
index 15d3ea11f7..af27177963 100644
--- a/engines/startrek/action.h
+++ b/engines/startrek/action.h
@@ -35,7 +35,7 @@ enum Acton {
ACTION_TALK = 5,
ACTION_TOUCHED_WARP = 6,
- ACTION_TOUCHED_HOTSPOT = 7, // Doors? (Or just hotspots activated by Kirk moving there?)
+ ACTION_TOUCHED_HOTSPOT = 7, // Second kind of "hotspot" only relevant when an object touches them
ACTION_TIMER_EXPIRED = 8,
ACTION_FINISHED_ANIMATION = 10,
ACTION_FINISHED_WALKING = 12,
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index b649477b96..3fca387850 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -137,6 +137,19 @@ struct AwayMission {
bool talkedToBrigCrewman; // 0x5f
} tug;
+
+ // Love's Labor Jeopardized
+ struct {
+ bool alreadyStartedMission; // 0x29
+ bool knowAboutVirus; // 0x2a
+ bool field2c; // 0x2c
+ bool field2d; // 0x2d
+ byte field36; // 0x36
+ byte field37; // 0x37
+ bool spockAccessedConsole; // 0x49
+ bool mccoyAccessedConsole; // 0x4a
+ int16 missionScore; // 0x52
+ } love;
};
};
// Size: 0x129 bytes
diff --git a/engines/startrek/module.mk b/engines/startrek/module.mk
index acf696fbbb..85a31df800 100644
--- a/engines/startrek/module.mk
+++ b/engines/startrek/module.mk
@@ -30,6 +30,7 @@ MODULE_OBJS = \
rooms/tug1.o \
rooms/tug2.o \
rooms/tug3.o \
+ rooms/love0.o \
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 844b8c3c7e..245edb707b 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -81,6 +81,10 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
_roomActionList = tug3ActionList;
_numRoomActions = sizeof(tug3ActionList) / sizeof(RoomAction);
}
+ else if (name == "LOVE0") {
+ _roomActionList = love0ActionList;
+ _numRoomActions = sizeof(love0ActionList) / sizeof(RoomAction);
+ }
else {
warning("Room \"%s\" unimplemented", name.c_str());
_numRoomActions = 0;
@@ -327,6 +331,13 @@ Common::Point Room::getActorPos(int actorIndex) {
return _vm->_actorList[actorIndex].pos;
}
+/**
+ * Returns a word in range [start, end] (that's inclusive).
+ */
+int16 Room::getRandomWordInRange(int start, int end) {
+ return _vm->getRandomWord() % (end - start + 1) + start;
+}
+
void Room::playSoundEffectIndex(int soundEffect) {
_vm->playSoundEffectIndex(soundEffect);
}
@@ -368,23 +379,27 @@ void Room::playVoc(Common::String filename) {
_vm->_sound->playVoc(filename);
}
-void Room::spockScan(int direction, int text) {
+void Room::spockScan(int direction, int text, bool changeDirection) {
const char *dirs = "nsew";
Common::String anim = "sscan_";
anim.setChar(dirs[direction], 5);
- _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = direction;
+ if (changeDirection) // Check whether he should turn back to original direction after scanning
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = direction;
+
loadActorAnim2(OBJECT_SPOCK, anim, -1, -1, 0);
playSoundEffectIndex(SND_TRICORDER);
showText(TX_SPEAKER_SPOCK, text);
}
-void Room::mccoyScan(int direction, int text) {
+void Room::mccoyScan(int direction, int text, bool changeDirection) {
const char *dirs = "nsew";
Common::String anim = "mscan_";
anim.setChar(dirs[direction], 5);
- _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = direction;
+ if (changeDirection)
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = direction;
+
loadActorAnim2(OBJECT_MCCOY, anim, -1, -1, 0);
playSoundEffectIndex(SND_TRICORDER);
showText(TX_SPEAKER_MCCOY, text);
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 1127de8cd5..660af0f23f 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -113,6 +113,7 @@ private:
void showBitmapFor5Ticks(const Common::String &bmpName, int priority); // Cmd 0x0a
// Command 0x0c: "demon6ShowCase"
Common::Point getActorPos(int actorIndex); // Cmd 0x0d
+ int16 getRandomWordInRange(int start, int end); // Cmd 0x0e
void playSoundEffectIndex(int soundEffect); // Cmd 0x0f
void playMidiMusicTracks(int startTrack, int loopTrack); // Cmd 0x10
void endMission(int16 score, int16 arg2, int16 arg3); // Cmd 0x11
@@ -120,8 +121,8 @@ private:
void playVoc(Common::String filename); // Cmd 0x15
// Helper functions for repetitive stuff
- void spockScan(int direction, int text);
- void mccoyScan(int direction, int text);
+ void spockScan(int direction, int text, bool changeDirection = true);
+ void mccoyScan(int direction, int text, bool changeDirection = true);
// Room-specific code
public:
@@ -710,6 +711,41 @@ public:
void tug3EndMission();
void tug3SecurityTeamBeamedIn();
+ // LOVE0
+ void love0Tick1();
+ void love0Tick10();
+ void love0WalkToDoor2();
+ void love0OpenDoor2();
+ void love0ReachedDoor2();
+ void love0WalkToDoor1();
+ void love0OpenDoor1();
+ void love0ReachedDoor1();
+ void love0LookAtConsole();
+ void love0LookAtViewscreen();
+ void love0LookAnywhere();
+ void love0LookAtDoor1();
+ void love0LookAtDoor2();
+ void love0LookAtKirk();
+ void love0LookAtMccoy();
+ void love0LookAtSpock();
+ void love0LookAtRedshirt();
+ void love0TalkToKirk();
+ void love0TalkToMccoy();
+ void love0TalkToSpock();
+ void love0TalkToRedshirt();
+ void love0UseMTricorderAnywhere();
+ void love0UseSTricorderOnConsole();
+ void love0UseSTricorderAnywhere();
+ void love0UseKirkOnConsole();
+ void love0UseRedshirtOnConsole();
+ void love0UseSpockOnConsole();
+ void love0SpockReachedConsole();
+ void love0SpockAccessedConsole();
+ void love0UseMccoyOnConsole();
+ void love0MccoyReachedConsole();
+ void love0MccoyAccessedConsole();
+ void love0InteractWithConsole();
+
private:
// Room-specific variables. This is memset'ed to 0 when the room is initialized.
union {
@@ -773,6 +809,21 @@ private:
byte shootKirkOverride; // 0x1ec4
} tug2;
+ struct {
+ bool heardSummaryOfVirus; // 0xda
+ byte door2OpenCounter; // 0xdc
+ byte door1OpenCounter; // 0xdd
+ byte _de; // 0xde
+
+ int16 consoleCrewman; // 0xe3
+ char consoleAnimation[10]; // 0xe5
+ int32 consoleSpeaker; // 0xe7
+ int32 consoleText; // 0xe9
+
+ byte _8ab; // 0x8ab
+ byte _8ac; // 0x8ac
+ } love0;
+
} _roomVar;
};
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 0eb8d97afa..dcf8bf3545 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -744,7 +744,6 @@ RoomAction tug2ActionList[] = {
{ Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::tug2UsePhaserAnywhere },
};
-
RoomAction tug3ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::tug3Tick1 },
{ Action(ACTION_TICK, 40, 0, 0), &Room::tug3Tick40 },
@@ -782,6 +781,48 @@ RoomAction tug3ActionList[] = {
{ Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug3SecurityTeamBeamedIn },
};
+
+RoomAction love0ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love0Tick1 },
+ { Action(ACTION_TICK, 10, 0, 0), &Room::love0Tick10 },
+ { Action(ACTION_WALK, 0x21, 0, 0), &Room::love0WalkToDoor2 },
+ { Action(ACTION_WALK, 9, 0, 0), &Room::love0WalkToDoor2 },
+ { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love0OpenDoor2 },
+ { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love0ReachedDoor2 },
+ { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love0ReachedDoor2 },
+ { Action(ACTION_WALK, 0x22, 0, 0), &Room::love0WalkToDoor1 },
+ { Action(ACTION_WALK, 8, 0, 0), &Room::love0WalkToDoor1 },
+ { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::love0OpenDoor1 },
+ { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love0ReachedDoor1 },
+ { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love0ReachedDoor1 },
+ { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love0LookAtConsole },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love0LookAtViewscreen },
+ { Action(ACTION_LOOK, -1, 0, 0), &Room::love0LookAnywhere },
+ { Action(ACTION_LOOK, 8, 0, 0), &Room::love0LookAtDoor1 },
+ { Action(ACTION_LOOK, 9, 0, 0), &Room::love0LookAtDoor2 },
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love0LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love0LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love0LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love0LookAtRedshirt },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love0TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love0TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love0TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love0TalkToRedshirt },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love0UseMTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::love0UseSTricorderOnConsole },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love0UseSTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love0UseKirkOnConsole },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love0UseRedshirtOnConsole },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love0UseSpockOnConsole },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love0SpockReachedConsole },
+ { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love0SpockAccessedConsole },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love0UseMccoyOnConsole },
+ { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love0MccoyReachedConsole },
+ { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love0MccoyAccessedConsole },
+ // TODO: there's a lot of "extra" stuff at the end of the file. I don't think it's
+ // unused, but I'm not sure how it's run.
+};
+
}
#endif
diff --git a/engines/startrek/rooms/love0.cpp b/engines/startrek/rooms/love0.cpp
new file mode 100644
index 0000000000..7ab161a8c4
--- /dev/null
+++ b/engines/startrek/rooms/love0.cpp
@@ -0,0 +1,274 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "startrek/room.h"
+
+#define OBJECT_DOOR1 8
+#define OBJECT_DOOR2 9
+
+#define HOTSPOT_CONSOLE 0x20
+#define HOTSPOT_DOOR2 0x21
+#define HOTSPOT_DOOR1 0x22
+#define HOTSPOT_VIEWSCREEN 0x23
+
+namespace StarTrek {
+
+void Room::love0Tick1() {
+ if (!_vm->_awayMission.love.alreadyStartedMission) {
+ _vm->_awayMission.love.field36 = 1;
+ _vm->_awayMission.love.field37 = 2;
+ _vm->_awayMission.love.alreadyStartedMission = true;
+ playVoc("LOV0LOOP"); // FIXME: no audio after first entry?
+ }
+
+ 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_DOOR2, "s3r0d2a", 0xe6, 0x80, 0);
+ loadActorAnim(OBJECT_DOOR1, "s3r0d1a", 0x123, 0x8d, 0);
+ _roomVar.love0._8ab = 0xf4;
+ _roomVar.love0._8ac = 0x8f;
+}
+
+void Room::love0Tick10() {
+}
+
+void Room::love0WalkToDoor2() {
+ _vm->_awayMission.disableInput = true;
+ _roomVar.love0._de = 2;
+ walkCrewman(OBJECT_KIRK, 0xe6, 0x81, 4);
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+}
+
+void Room::love0OpenDoor2() {
+ if (_roomVar.love0._de == 2) {
+ loadActorAnim(OBJECT_DOOR2, "s3r0d2", 0xe6, 0x80, 3);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+void Room::love0ReachedDoor2() {
+ _roomVar.love0.door2OpenCounter++;
+ if (_roomVar.love0.door2OpenCounter == 2)
+ loadRoomIndex(2, 1);
+}
+
+void Room::love0WalkToDoor1() {
+ _vm->_awayMission.disableInput = true;
+ _roomVar.love0._de = 1;
+ walkCrewman(OBJECT_KIRK, 0x125, 0x8d, 5);
+}
+
+void Room::love0OpenDoor1() {
+ if (_roomVar.love0._de == 1) {
+ loadActorAnim(OBJECT_DOOR1, "s3r0d1", 0x123, 0x8d, 4);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+void Room::love0ReachedDoor1() {
+ _roomVar.love0.door1OpenCounter++;
+ if (_roomVar.love0.door1OpenCounter == 2)
+ loadRoomIndex(3, 1);
+}
+
+void Room::love0LookAtConsole() {
+ showText(TX_LOV0N006);
+}
+
+void Room::love0LookAtViewscreen() {
+ showText(TX_LOV0N000);
+}
+
+void Room::love0LookAnywhere() {
+ showText(TX_LOV0N009);
+}
+
+void Room::love0LookAtDoor1() {
+ showText(TX_LOV0N008);
+}
+
+void Room::love0LookAtDoor2() {
+ showText(TX_LOV0N007);
+}
+
+void Room::love0LookAtKirk() {
+ showText(TX_LOV0N002);
+}
+
+void Room::love0LookAtMccoy() {
+ showText(TX_LOV0N004);
+}
+
+void Room::love0LookAtSpock() {
+ showText(TX_LOV0N005);
+}
+
+void Room::love0LookAtRedshirt() {
+ showText(TX_LOV0N003);
+}
+
+void Room::love0TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_LOV0_003);
+}
+
+void Room::love0TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV0_007);
+}
+
+void Room::love0TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_LOV0_027);
+}
+
+void Room::love0TalkToRedshirt() {
+ showText(TX_SPEAKER_FERRIS, TX_LOV0_038);
+}
+
+void Room::love0UseMTricorderAnywhere() {
+ if (_vm->_awayMission.love.knowAboutVirus)
+ mccoyScan(DIR_N, TX_LOV0_008, false);
+ else
+ mccoyScan(DIR_N, TX_LOV0_006, false);
+}
+
+void Room::love0UseSTricorderOnConsole() {
+ spockScan(DIR_N, TX_LOV0_031, false);
+}
+
+void Room::love0UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_LOV0_028, false);
+}
+
+void Room::love0UseKirkOnConsole() {
+ showText(TX_SPEAKER_KIRK, TX_LOV0_002);
+ love0UseSpockOnConsole();
+}
+
+void Room::love0UseRedshirtOnConsole() {
+ showText(TX_SPEAKER_FERRIS, TX_LOV0_036);
+}
+
+void Room::love0UseSpockOnConsole() {
+ _roomVar.love0.consoleCrewman = OBJECT_SPOCK;
+ _roomVar.love0.consoleSpeaker = TX_SPEAKER_SPOCK;
+ _roomVar.love0.consoleText = TX_LOV0_005;
+ strcpy(_roomVar.love0.consoleAnimation, "susemn");
+
+ walkCrewman(_roomVar.love0.consoleCrewman, 0x9a, 0x9a, 2);
+ if (!_vm->_awayMission.love.spockAccessedConsole) {
+ _vm->_awayMission.love.spockAccessedConsole = true;
+ _vm->_awayMission.love.missionScore += 4;
+ }
+}
+
+void Room::love0SpockReachedConsole() {
+ loadActorAnim2(_roomVar.love0.consoleCrewman, _roomVar.love0.consoleAnimation, -1, -1, 5);
+}
+
+void Room::love0SpockAccessedConsole() {
+ playVoc("V6KIRKTY");
+ if (_vm->_awayMission.love.knowAboutVirus)
+ love0InteractWithConsole();
+ else {
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU188);
+ showText(_roomVar.love0.consoleSpeaker, _roomVar.love0.consoleText);
+ _roomVar.love0.heardSummaryOfVirus = true;
+ }
+}
+
+void Room::love0UseMccoyOnConsole() {
+ walkCrewman(OBJECT_MCCOY, 0x78, 0x98, 3);
+}
+
+void Room::love0MccoyReachedConsole() {
+ loadActorAnim2(OBJECT_MCCOY, "musemw", -1, -1, 6);
+}
+
+void Room::love0MccoyAccessedConsole() {
+ playVoc("V6KIRKTY");
+ if (!_vm->_awayMission.love.mccoyAccessedConsole) {
+ _vm->_awayMission.love.mccoyAccessedConsole = true;
+ _vm->_awayMission.love.missionScore += 2;
+ }
+
+ if (_vm->_awayMission.love.knowAboutVirus)
+ love0InteractWithConsole();
+ else {
+ if (!_roomVar.love0.heardSummaryOfVirus) {
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU188);
+ _roomVar.love0.heardSummaryOfVirus = true;
+ }
+ showText(TX_SPEAKER_MCCOY, TX_LOV0_024);
+ showText(TX_SPEAKER_SPOCK, TX_LOV0_035);
+ showText(TX_SPEAKER_MCCOY, TX_LOV0_023);
+ showText(TX_SPEAKER_KIRK, TX_LOV0_004);
+ showText(TX_SPEAKER_MCCOY, TX_LOV0_009);
+ _vm->_awayMission.love.knowAboutVirus = true;
+ }
+}
+
+// Interact with computer console, by selecting topics for the computer to talk about
+void Room::love0InteractWithConsole() {
+ const int choices[] = {
+ TX_SPEAKER_COMPUTER,
+ TX_COMPA190,
+ TX_COMPA193,
+ TX_COMPA189,
+ TX_COMPA186,
+ TX_COMPA187,
+ TX_COMPA191,
+ TX_BLANK
+ };
+
+ while (true) {
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU192);
+ int choice = showText(choices);
+
+ switch (choice) {
+ case 0:
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU190);
+ break;
+ case 1:
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU193);
+ break;
+ case 2:
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU189);
+ break;
+ case 3:
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU186);
+ break;
+ case 4:
+ showText(TX_SPEAKER_COMPUTER, TX_COMPU187);
+ break;
+ case 5:
+ return;
+ default:
+ showText(TX_DIALOG_ERROR);
+ break;
+ }
+ }
+}
+
+}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 7b3f4284af..4fd6b404ae 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -83,7 +83,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_textboxVar6 = 0;
_textboxHasMultipleChoices = false;
- _missionToLoad = "TUG";
+ _missionToLoad = "LOVE";
_roomIndexToLoad = 0;
for (int i = 0; i < NUM_OBJECTS; i++)
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index 1a9e18280e..c71dcb7981 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -67,7 +67,6 @@ enum GameStringIDs {
TX_SPEAKER_UHURA,
TX_SPEAKER_SCOTT,
TX_SPEAKER_SULU,
- TX_SPEAKER_SHIPS_COMPUTER,
TX_SPEAKER_EVERTS,
TX_SPEAKER_ANGIVEN,
@@ -79,6 +78,7 @@ enum GameStringIDs {
TX_SPEAKER_ROBERTS,
TX_SPEAKER_GRISNASH,
TX_SPEAKER_NAUIAN,
+ TX_SPEAKER_SHIPS_COMPUTER,
TX_SPEAKER_CHRISTENSEN,
TX_SPEAKER_SIMPSON,
@@ -87,6 +87,9 @@ enum GameStringIDs {
TX_SPEAKER_ELASI_CERETH,
TX_SPEAKER_MASADA_CREWMAN,
+ TX_SPEAKER_FERRIS,
+ TX_SPEAKER_COMPUTER,
+
TX_DEM0_001,
TX_DEM0_002,
TX_DEM0_003,
@@ -713,6 +716,107 @@ enum GameStringIDs {
TX_TUG3N008,
+ TX_BRIDU146,
+ TX_COMPA186,
+ TX_COMPA187,
+ TX_COMPA189,
+ TX_COMPA190,
+ TX_COMPA191,
+ TX_COMPA193,
+ TX_COMPU186,
+ TX_COMPU187,
+ TX_COMPU188,
+ TX_COMPU189,
+ TX_COMPU190,
+ TX_COMPU192,
+ TX_COMPU193,
+ TX_GENER004,
+ TX_LOV0_001,
+ TX_LOV0_002,
+ TX_LOV0_003,
+ TX_LOV0_004,
+ TX_LOV0_005,
+ TX_LOV0_006,
+ TX_LOV0_007,
+ TX_LOV0_008,
+ TX_LOV0_009,
+ TX_LOV0_010,
+ TX_LOV0_011,
+ TX_LOV0_012,
+ TX_LOV0_013,
+ TX_LOV0_014,
+ TX_LOV0_015,
+ TX_LOV0_016,
+ TX_LOV0_017,
+ TX_LOV0_019,
+ TX_LOV0_020,
+ TX_LOV0_021,
+ TX_LOV0_022,
+ TX_LOV0_023,
+ TX_LOV0_024,
+ TX_LOV0_025,
+ TX_LOV0_026,
+ TX_LOV0_027,
+ TX_LOV0_028,
+ TX_LOV0_029,
+ TX_LOV0_030,
+ TX_LOV0_031,
+ TX_LOV0_033,
+ TX_LOV0_035,
+ TX_LOV0_036,
+ TX_LOV0_037,
+ TX_LOV0_038,
+ TX_LOV0_039,
+ TX_LOV0_040,
+ TX_LOV0_041,
+ TX_LOV0_042,
+ TX_LOV0_043,
+ TX_LOV0_045,
+ TX_LOV0_046,
+ TX_LOV0_047,
+ TX_LOV0_048,
+ TX_LOV0_049,
+ TX_LOV0_050,
+ TX_LOV0_101,
+ TX_LOV0_102,
+ TX_LOV0_103,
+ TX_LOV0_104,
+ TX_LOV0_105,
+ TX_LOV0_106,
+ TX_LOV0_107,
+ TX_LOV0_124,
+ TX_LOV0N000,
+ TX_LOV0N001,
+ TX_LOV0N002,
+ TX_LOV0N003,
+ TX_LOV0N004,
+ TX_LOV0N005,
+ TX_LOV0N006,
+ TX_LOV0N007,
+ TX_LOV0N008,
+ TX_LOV0N009,
+ TX_LOV2N005,
+ TX_LOV5_015,
+ TX_LOV5_019,
+ TX_LOV5_027,
+ TX_LOV5_030,
+ TX_LOV5_038,
+ TX_LOVA_100,
+ TX_LOVA_F01,
+ TX_LOVA_F02,
+ TX_LOVA_F03,
+ TX_LOVA_F04,
+ TX_LOVA_F07,
+ TX_LOVA_F08,
+ TX_LOVA_F10,
+ TX_LOVA_F54,
+ TX_LOVA_F55,
+ TX_MUD2_040,
+ TX_MUD4_018,
+ TX_spokcoff,
+ TX_VENA_F41,
+
+
TX_END
};
@@ -727,7 +831,6 @@ const char * const g_gameStrings[] = {
"Lt. Uhura",
"Mr. Scott",
"Mr. Sulu",
- "Ship's Computer",
"Ensign Everts",
"Prel. Angiven",
@@ -739,6 +842,7 @@ const char * const g_gameStrings[] = {
"Brother Roberts",
"Brother Grisnash",
"Nauian",
+ "Ship's Computer",
"Lt. Christensen",
"Crewman Simpson",
@@ -747,6 +851,9 @@ const char * const g_gameStrings[] = {
"Elasi Cereth",
"Masada Crewman",
+ "Lt. Ferris",
+ "Computer",
+
"#DEM0\\DEM0_001#Doctor, you need to investigate the possibility of disease, mental or physical, among these people, before we go chasing up the mountains. Prelate Angiven, may we see those who have encountered the demons?",
"#DEM0\\DEM0_002#Aside from seeing demons, has any hard data been collected? Any evidence I could see?",
"#DEM0\\DEM0_003#Been seeing ghosts and bogeymen eh? I find that a little hard to believe.",
@@ -1371,6 +1478,107 @@ const char * const g_gameStrings[] = {
"#TUG3\\TUG3N006#The Masada goes down in a fireball over Beta Myamid, with you on it. Better luck next season.",
"#TUG3\\TUG3N007#This is a standard Starfleet bridge, perhaps not as impressive as the one on the Enterprise. There are quite a few pirates here.",
"#TUG3\\TUG3N008#You carefully eye the chief lieutenant of the Elasi Clan, Elasi Cereth.",
+
+
+ "#BRID\\BRIDU146#Nothing to report, Captain.",
+ "#COMP\\COMPA186#Ammonia",
+ "#COMP\\COMPA187#Di-hydrogen Oxide",
+ "#COMP\\COMPA189#Nitrous Oxide",
+ "#COMP\\COMPA190#Oroborus Virus",
+ "#COMP\\COMPA191#Exit Database",
+ "#COMP\\COMPA193#TLTDH Gas",
+ "#COMP\\COMPU186#Ammonia: a colorless pungent compound NH3, a common byproduct of metabolism in carbon-based lifeforms. Liquid or gaseous at 1 atm. Compounds widely used in agricultural, medical and industrial applications.",
+ "#COMP\\COMPU187#Di-hydrogen Oxide: a colorless, tasteless, nonflammable compound HO- water. Liquid, solid, or gaseous at 1 atm. Temperature scales defined in most humanoid cultures by state-shift of pure water.",
+ "#COMP\\COMPU188#Dr. Marcus' Log, Supplemental: Continued testing of the Oroborus Virus confirms its potential harmful effects on Romulan/Vulcan humanoids. As soon as the spill has been cleaned up, we will sterilize both labs and purge the circulation system to make sure no traces of the virus will remain viable. Then all research files must be erased -- we must leave no chance that this terrible accident will ever be repeated.",
+ "#COMP\\COMPU189#Nitrous Oxide: a colorless nonflammable compound NO, gaseous at 1 atm and temperatures within the human norm. Early anesthetic among humans, in whom it produces laughter, feelings of exhiliration, euphoria; sometimes leading to unconsciousness.",
+ "#COMP\\COMPU190#Oroborus virus: Atypical growth patterns for L-Type virus. Opportunistic pneumococcal mimic affecting Romulo-Vulcan genotype. Etiology: contact or airborne vector with alveoli microcollapse involvement immediately upon exposure. Tissue dehydration follows pneumal flooding. Mortality: 0.6 in 1.0 stardates, 1.0 within 2.0 stardates Treatment: none. Named for the mythic worldsnake that swallows its own tail.",
+ "#COMP\\COMPU192#Please select subject file...",
+ "#COMP\\COMPU193#TLTDH gas: The chemical compound tantalum bi-lithium thalo-dihydroxide. Colorless, odorless, nonflammable gaseous at 1 atm and temperatures within the human norm. Early anesthetic among Vulcans and Romulans, in whom it produces laughter, feelings of exhiliration, euphoria; sometimes leading to unconsciousness. In post-industrial/pre-spaceflight era, a social problem evolved when crude TLTDH became popular to \"cook up\" from non-conductive tantalo-lithial compounds commonly used as electrical insulation.",
+ "#GENE\\GENER004#Game Over",
+ "#LOV0\\LOV0_001#A medical data file is attached -- your bailiwick, Bones.",
+ "#LOV0\\LOV0_002#Spock, check out the station's computer and see what you can dig up.",
+ "#LOV0\\LOV0_003#Strange that the bridge is empty. Stay sharp everyone. The station's computer system might give us some answers.",
+ "#LOV0\\LOV0_004#Gentlemen, I think we have more pressing problems.",
+ "#LOV0\\LOV0_005#Doctor, you may be interested in the medical data file appended to the log.",
+ "#LOV0\\LOV0_006#I'm picking up some strange, airborne virus. I can't identify it without more information.",
+ "#LOV0\\LOV0_007#Nice view of the Romulan ship. How comforting.",
+ "#LOV0\\LOV0_008#Except for the Oroborus virus, I'm not picking up anything unusual.",
+ "#LOV0\\LOV0_009#Jim, there is an appended medical database online. Also, it would be useful for me to experiment on how the virus grows in the presence of different gases. I'm sure the station has the necessary equipment.",
+ "#LOV0\\LOV0_010#Ouch!",
+ "#LOV0\\LOV0_011#Hee hee hee hee...",
+ "#LOV0\\LOV0_012#I think we're all feeling just woooonderful!",
+ "#LOV0\\LOV0_013#I'm a little teapot short and stout...",
+ "#LOV0\\LOV0_014#I'm floating up and up and up...",
+ "#LOV0\\LOV0_015#I'm so happy, I want to hug the world!",
+ "#LOV0\\LOV0_016#Ooka! Ooka! Ooka!",
+ "#LOV0\\LOV0_017#Row, row, row, your boat. Aww, come on Spock.",
+ "#LOV0\\LOV0_019#Spock, ol' buddy, ol' friend, you look soo funny standing there!",
+ "#LOV0\\LOV0_020#The hills are alive... With the sounds of...",
+ "#LOV0\\LOV0_021#The moon in June's a boon to tunes... er, something like that.",
+ "#LOV0\\LOV0_022#This is how I want to feel all the time!",
+ "#LOV0\\LOV0_023#Now listen here, you pointy-eared...",
+ "#LOV0\\LOV0_024#Now that's interesting -- there's more here. All of Dr. Marcus' research data on the Oroborous virus. Let me see...virus growth patterns, pneumonococcal mimic affecting Romulo-Vulcan genotype ... alveoli involvement in-- Boy, Jim, this bug works fast!",
+ "#LOV0\\LOV0_025#How many Admirals does it take to wire in a logic transmogrifier?",
+ "#LOV0\\LOV0_026#I don't believe you'd behave like this if you could avoid it.",
+ "#LOV0\\LOV0_027#Nothing unusual here, Captain, though the station's computer may be able to tell us something.",
+ "#LOV0\\LOV0_028#Nothing unusual is detected.",
+ "#LOV0\\LOV0_029#Please, gentlemen, try to control yourselves",
+ "#LOV0\\LOV0_030#That is not logical, Captain.",
+ "#LOV0\\LOV0_031#The main computer banks of the Ark7. It looks like someone has recently been rummaging through the main data banks.",
+ "#LOV0\\LOV0_033#Try taking deep breaths to clear your heads.",
+ "#LOV0\\LOV0_035#Is this really the time to catch up on your reading, Doctor?",
+ "#LOV0\\LOV0_036#I think Mr. Spock would be more qualified in examining the station's computer.",
+ "#LOV0\\LOV0_037#A detailed data file is with the log. Do you want to look at it, Doctor McCoy?",
+ "#LOV0\\LOV0_038#This is a very dangerous situation, sir. We should proceed with caution.",
+ "#LOV0\\LOV0_039#Hee hee hee hee...",
+ "#LOV0\\LOV0_040#I think we're all feeling just woooonderful!",
+ "#LOV0\\LOV0_041#I'm a little teapot short and stout...",
+ "#LOV0\\LOV0_042#I'm floating up and up and up...",
+ "#LOV0\\LOV0_043#I'm so happy, I want to hug the world!",
+ "#LOV0\\LOV0_045#Ooka! Ooka! Ooka!",
+ "#LOV0\\LOV0_046#Row, row, row, your boat. Aww, come on Spock.",
+ "#LOV0\\LOV0_047#Spock, ol' buddy, ol' friend, you look soo funny standing there!",
+ "#LOV0\\LOV0_048#The hills are alive... With the sounds of...",
+ "#LOV0\\LOV0_049#The moon in June's a boon to tunes... er, something like that.",
+ "#LOV0\\LOV0_050#This is how I want to feel all the time!",
+ "#LOV0\\LOV0_101#Fascinating. I am experiencing an urge to laugh.",
+ "#LOV0\\LOV0_102#I am a Vulcan. I must resist these unchecked emotions.",
+ "#LOV0\\LOV0_103#Logic...What happened to my logic?",
+ "#LOV0\\LOV0_104#Jim, is this how you feel on shore leave?",
+ "#LOV0\\LOV0_105#I remember my mother trying to tell me jokes when I was a child. Now, I finally understand them.",
+ "#LOV0\\LOV0_106#Romulan laughing gas. My father would never approve.",
+ "#LOV0\\LOV0_107#Why do they call you \"Bones\", doctor?",
+ "#LOV0\\LOV0_124#I'm trying to be patient, Captain.",
+ "#LOV0\\LOV0N000#A Romulan bird of prey hovers menacingly on the view screen.",
+ "#LOV0\\LOV0N001#It is bolted down and cannot be moved.",
+ "#LOV0\\LOV0N002#James Kirk watches the Romulan ship with concern.",
+ "#LOV0\\LOV0N003#Lt. Ferris watches the exits carefully.",
+ "#LOV0\\LOV0N004#McCoy is fidgeting around.",
+ "#LOV0\\LOV0N005#Spock is analyzing the surroundings.",
+ "#LOV0\\LOV0N006#This computer terminal is linked into the station's main computer. It is currently running an open file of log programs.",
+ "#LOV0\\LOV0N007#This is a heavily secured door, leading to another section of the station. Its access code has been breached.",
+ "#LOV0\\LOV0N008#This is a standard door, leading to another room on this deck.",
+ "#LOV0\\LOV0N009#You are on the bridge of the ARK7.",
+ "#LOV2\\LOV2N005#A loud hissing fills the room.",
+ "#LOV5\\LOV5_015#He's already cured, Jim.",
+ "#LOV5\\LOV5_019#I don't have the proper medicine to cure him, Jim.",
+ "#LOV5\\LOV5_027#Finally, a human response!",
+ "#LOV5\\LOV5_030#There. You're now cured.",
+ "#LOV5\\LOV5_038#Thank you, Doctor.",
+ "#LOVA\\LOVA_100#He's dead, Jim.",
+ "#LOVA\\LOVA_F01#He's been cured of the Oroborus virus.",
+ "#LOVA\\LOVA_F02#I'm picking up some kind of virus. I can't identify it without more information.",
+ "#LOVA\\LOVA_F03#He's infected with the virus, Jim.",
+ "#LOVA\\LOVA_F04#The virus affects the Romulan-Vulcan genotype, Jim.",
+ "#LOVA\\LOVA_F07#All lifesigns are normal.",
+ "#LOVA\\LOVA_F08#It's what I was afraid of, Jim. I think spock is getting worse.",
+ "#LOVA\\LOVA_F10#He has weak vital signs.",
+ "#LOVA\\LOVA_F54#The virus has spread to me, Captain.Isuggestyouconcentrateyoureffortsonthe",
+ "#LOVA\\LOVA_F55#Jim, we need to sysnthesize more to make the serum before we can use it.",
+ "#MUD2\\MUD2_040#You look troubled, Captain.",
+ "#MUD4\\MUD4_018#Kirk to Enterprise ... Kirk to Enterprise.",
+ "#sfx\\spokcoff#cough... cough...",
+ "#VENA\\VENA_F41#Kirk out.",
};
}