aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/awaymission.cpp2
-rw-r--r--engines/startrek/awaymission.h7
-rw-r--r--engines/startrek/room.h32
-rw-r--r--engines/startrek/rooms/function_map.h49
-rw-r--r--engines/startrek/rooms/mudd0.cpp7
-rw-r--r--engines/startrek/rooms/mudd5.cpp227
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h110
8 files changed, 422 insertions, 14 deletions
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index 0ba73e8f00..e11cae9d98 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(2);
+ initAwayCrewPositions(0);
}
void StarTrekEngine::runAwayMission() {
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 7097f449c9..25a5c1fe0f 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -203,14 +203,17 @@ struct AwayMission {
// True if you've combined the lense + degrimer and fired it off, discovering
// it's a weapon
bool discoveredLenseAndDegrimerFunction; // 0x3c
+
int16 torpedoStatus; // 0x3d
- bool muddCurrentlyInsane; // 0x3f
+ bool muddCurrentlyInsane; // 0x3f (TODO: rename)
bool muddVisitedDatabaseRoom; // 0x40
bool accessedAlienDatabase; // 0x41
bool tookRepairTool; // 0x42
bool gotPointsForDownloadingData; // 0x43
bool contactedEnterpriseFirstTime; // 0x44
bool viewScreenEnabled; // 0x45
+ bool lifeSupportMalfunctioning; // 0x46
+ byte numTimesEnteredRoom5; // 0x47
bool gotMemoryDisk; // 0x48
bool gotLense; // 0x49
bool gotDegrimer; // 0x4a
@@ -224,7 +227,7 @@ struct AwayMission {
bool gotPointsForPressingRedButton; // 0x56
bool gotPointsForEnablingViewscreen; // 0x57
bool enteredRoom1ForFirstTime; // 0x58
- bool field58; // 0x58
+ bool repairedLifeSupportGenerator; // 0x59
int16 missionScore; // 0x5a
} mudd;
};
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 81f98321ea..849fb503ab 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -1344,6 +1344,38 @@ public:
// MUDD5
void mudd5Tick1();
+ void mudd5Timer1Expired();
+ void mudd5Timer2Expired();
+ void mudd5UseCommunicator();
+ void mudd5UseSTricorderAnywhere();
+ void mudd5UseSTricorderOnEngine();
+ void mudd5UseSTricorderOnCrane();
+ void mudd5UseSTricorderOnHatch();
+ void mudd5UseSTricorderOnLifeSupportGenerator();
+ void mudd5UseStunPhaserOnHatch();
+ void mudd5UseKillPhaserOnHatch();
+ void mudd5UseAnythingOnLifeSupportGenerator();
+ void mudd5UseDooverOnLifeSupportGenerator();
+ void mudd5KirkReachedLifeSupportGenerator();
+ void mudd5KirkTimer4Expired();
+ void mudd5KirkRepairedLifeSupportGenerator();
+ void mudd5KirkTimer3Expired();
+ void mudd5LookAtHatch();
+ void mudd5LookAtLifeSupportGenerator();
+ void mudd5TouchedHotspot0();
+ void mudd5WalkToDoor();
+ void mudd5LookAtKirk();
+ void mudd5LookAtSpock();
+ void mudd5LookAtMccoy();
+ void mudd5LookAtRedshirt();
+ void mudd5LookAtDoor();
+ void mudd5LookAtCrane();
+ void mudd5LookAtEngine();
+ void mudd5TalkToKirk();
+ void mudd5TalkToSpock();
+ void mudd5TalkToMccoy();
+ void mudd5TalkToRedshirt();
+ void mudd5UseMedkit();
// MUDDA
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 2f729b5d39..a6930ea69d 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1414,7 +1414,7 @@ RoomAction mudd0ActionList[] = {
{ Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd0UseSTricorderOnDegrimerBox },
{ Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::mudd0UseMTricorderOnLense },
- // TODO: move these to common code
+ // Common code (next 4 lines)
{ Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
{ Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
{ Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::mudd0FiredAlienDevice },
@@ -1459,7 +1459,7 @@ RoomAction mudd1ActionList[] = {
{ Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd1SpockReachedRedButton },
{ Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::mudd1SpockPressedRedButton },
- // Common code
+ // Common code (next 4 lines)
{ Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::mudd0UseDegrimer },
{ Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
{ Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
@@ -1517,7 +1517,7 @@ RoomAction mudd2ActionList[] = {
{ Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::mudd2MccoyPickedUpCapsules },
{ Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd2UseCommunicator },
- // Common code
+ // Common code (next 4 lines)
{ Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::mudd0UseDegrimer },
{ Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
{ Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
@@ -1585,7 +1585,7 @@ RoomAction mudd3ActionList[] = {
{ Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::mudd3Timer4Expired },
{ Action(ACTION_USE, OBJECT_IDISKS, 0x21, 0), &Room::mudd3UseMemoryDiskOnSphere },
- // Common code
+ // Common code (next 4 lines)
{ Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::mudd0UseDegrimer },
{ Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
{ Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
@@ -1655,7 +1655,7 @@ RoomAction mudd4ActionList[] = {
// ENHANCEMENT: Allow scanning the viewscreen when it's on, not just when off
{ Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::mudd4UseSTricorderOnViewscreen },
- // Common code
+ // Common code (next 4 lines)
{ Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
{ Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
{ Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::mudd0FiredAlienDevice },
@@ -1692,6 +1692,45 @@ RoomAction mudd4ActionList[] = {
RoomAction mudd5ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::mudd5Tick1 },
+ { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd5Timer1Expired },
+ { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd5Timer2Expired },
+ { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd5UseCommunicator },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::mudd5UseSTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd5UseSTricorderOnEngine },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd5UseSTricorderOnCrane },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd5UseSTricorderOnHatch },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::mudd5UseSTricorderOnLifeSupportGenerator },
+ { Action(ACTION_USE, OBJECT_IPHASERS, 0x20, 0), &Room::mudd5UseStunPhaserOnHatch },
+ { Action(ACTION_USE, OBJECT_IPHASERK, 0x20, 0), &Room::mudd5UseKillPhaserOnHatch },
+ { Action(ACTION_USE, -1, 9, 0), &Room::mudd5UseAnythingOnLifeSupportGenerator },
+ { Action(ACTION_USE, OBJECT_IDOOVER, 9, 0), &Room::mudd5UseDooverOnLifeSupportGenerator },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd5KirkReachedLifeSupportGenerator },
+ { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::mudd5KirkTimer4Expired },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd5KirkRepairedLifeSupportGenerator },
+ { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd5KirkTimer3Expired },
+
+ // Common code (next 4 lines)
+ { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::mudd0UseLenseOnDegrimer },
+ { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::mudd0UseAlienDevice },
+ { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::mudd0FiredAlienDevice },
+ { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::mudd0UseDegrimer },
+
+ { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd5LookAtHatch },
+ { Action(ACTION_LOOK, 9, 0, 0), &Room::mudd5LookAtLifeSupportGenerator },
+ { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd5TouchedHotspot0 },
+ { Action(ACTION_WALK, 0x22, 0, 0), &Room::mudd5WalkToDoor },
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd5LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd5LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd5LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd5LookAtRedshirt },
+ { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd5LookAtDoor },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd5LookAtCrane },
+ { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd5LookAtEngine },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd5TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd5TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd5TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd5TalkToRedshirt },
+ { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd5UseMedkit },
};
}
diff --git a/engines/startrek/rooms/mudd0.cpp b/engines/startrek/rooms/mudd0.cpp
index dbb1c999f6..c4960312f2 100644
--- a/engines/startrek/rooms/mudd0.cpp
+++ b/engines/startrek/rooms/mudd0.cpp
@@ -166,7 +166,7 @@ void Room::mudd0UseLenseOnDegrimer() {
_vm->_awayMission.mudd.missionScore++;
showText(TX_MUD0N011);
// TODO: Identical (?) audio files: TX_MUD0N011, TX_MUD1N013, TX_MUD2N010, TX_MUD3N016,
- // TX_MUD4009
+ // TX_MUD4009, TX_MUD5N009
}
@@ -177,6 +177,7 @@ void Room::mudd0UseAlienDevice() {
11, // MUDD2
11, // MUDD3
9, // MUDD4
+ 11 // MUDD5
};
_vm->_awayMission.disableInput = true;
@@ -192,7 +193,7 @@ void Room::mudd0FiredAlienDevice() {
_vm->_awayMission.disableInput = false;
if (!_vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction) {
_vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction = true;
- _vm->_awayMission.mudd.missionScore += 5;
+ _vm->_awayMission.mudd.missionScore += 5; // BUGFIX: didn't happen if done in MUDD5
showText(TX_SPEAKER_KIRK, TX_MUD0_002);
// TODO: Identical (?) audio files: TX_MUD0_002, TX_MUD1_002, TX_MUD2_002
}
@@ -201,7 +202,7 @@ void Room::mudd0FiredAlienDevice() {
void Room::mudd0UseDegrimer() {
// TODO: Identical (?) audio files: TX_MUD0N002, TX_MUD1N004, TX_MUD2N001,
- // TX_MUD3N001, TX_MUD4N002
+ // TX_MUD3N001, TX_MUD4N002, TX_MUD5_001
showText(TX_MUD0N002);
}
diff --git a/engines/startrek/rooms/mudd5.cpp b/engines/startrek/rooms/mudd5.cpp
index 30ddc9879c..f5b6bf90b2 100644
--- a/engines/startrek/rooms/mudd5.cpp
+++ b/engines/startrek/rooms/mudd5.cpp
@@ -22,13 +22,236 @@
#include "startrek/room.h"
-#define OBJECT_DOOR1 8
+#define OBJECT_MUDD 8
+#define OBJECT_LIFE_SUPPORT_GENERATOR 9
+#define OBJECT_DOOR 10
+#define OBJECT_ALIENDV 11
-#define HOTSPOT_CONSOLE 0x20
+#define HOTSPOT_HATCH 0x20
+#define HOTSPOT_ENGINE 0x21
+#define HOTSPOT_DOOR 0x22
+#define HOTSPOT_CRANE 0x23
+
+const int16 GENERATOR_X = 0x54;
+const int16 GENERATOR_Y = 0xb0;
namespace StarTrek {
void Room::mudd5Tick1() {
+ playVoc("MUD5LOOP");
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_E;
+ if (_vm->_awayMission.mudd.lifeSupportMalfunctioning) {
+ playMidiMusicTracks(19);
+ loadActorAnim(OBJECT_LIFE_SUPPORT_GENERATOR, "s4epls", GENERATOR_X, GENERATOR_Y);
+ } else {
+ loadActorAnim(OBJECT_LIFE_SUPPORT_GENERATOR, "s4eplo", GENERATOR_X, GENERATOR_Y);
+ _vm->_awayMission.mudd.numTimesEnteredRoom5++;
+ // BUG: this event can become permanently unavailable? (test)
+ if (_vm->_awayMission.mudd.numTimesEnteredRoom5 == 2 && !_vm->_awayMission.mudd.muddCurrentlyInsane && !_vm->_awayMission.mudd.repairedLifeSupportGenerator) {
+ _vm->_awayMission.mudd.muddCurrentlyInsane = true;
+ _vm->_awayMission.mudd.numTimesEnteredRoom5 = 1;
+ _vm->_awayMission.disableInput = 2;
+ playMidiMusicTracks(3);
+ loadActorAnim(OBJECT_MUDD, "s4ephh", 0x0e, 0xa7);
+ _vm->_awayMission.timers[1] = 112;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_W;
+ }
+ }
+}
+
+void Room::mudd5Timer1Expired() { // Mudd enters room through hatch
+ const int choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD5_006,
+ TX_MUD5_010,
+ TX_BLANK
+ };
+
+ showText(TX_SPEAKER_MUDD, TX_MUD5_034);
+ showText(choices);
+ showText(TX_SPEAKER_MUDD, TX_MUD5_037);
+
+ loadActorAnim2(OBJECT_MUDD, "s4ephc");
+ _vm->_awayMission.timers[2] = 140;
+}
+
+void Room::mudd5Timer2Expired() { // Life-support generator starts acting up
+ _vm->_awayMission.disableInput = false;
+ _vm->_awayMission.mudd.lifeSupportMalfunctioning = true;
+ playMidiMusicTracks(19);
+ loadActorAnim(OBJECT_LIFE_SUPPORT_GENERATOR, "s4epls", GENERATOR_X, GENERATOR_Y);
+}
+
+void Room::mudd5UseCommunicator() {
+ showText(TX_SPEAKER_KIRK, TX_MUD5_003);
+ showText(TX_SPEAKER_UHURA, TX_STATICU1);
+}
+
+void Room::mudd5UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_MUD5_022, false);
+}
+
+void Room::mudd5UseSTricorderOnEngine() {
+ spockScan(DIR_E, TX_MUD5_011, false);
+}
+
+void Room::mudd5UseSTricorderOnCrane() {
+ spockScan(DIR_S, TX_MUD5_023, false);
+}
+
+void Room::mudd5UseSTricorderOnHatch() {
+ spockScan(DIR_W, TX_MUD5_024, false);
+ showText(TX_SPEAKER_KIRK, TX_MUD5_001);
+}
+
+void Room::mudd5UseSTricorderOnLifeSupportGenerator() {
+ if (_vm->_awayMission.mudd.lifeSupportMalfunctioning)
+ spockScan(DIR_W, TX_MUD5_019, false);
+ else
+ spockScan(DIR_W, TX_MUD5_021, false);
+}
+
+void Room::mudd5UseStunPhaserOnHatch() {
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_025);
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_015);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_030);
+}
+
+void Room::mudd5UseKillPhaserOnHatch() {
+ showText(TX_SPEAKER_BUCHERT, TX_MUD5_039);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_027);
+}
+
+void Room::mudd5UseAnythingOnLifeSupportGenerator() {
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_014); // BUGFIX: speaker is McCoy, not none
+}
+
+
+void Room::mudd5UseDooverOnLifeSupportGenerator() {
+ if (_vm->_awayMission.mudd.lifeSupportMalfunctioning) {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewmanC(OBJECT_KIRK, 0x57, 0xb4, &Room::mudd5KirkReachedLifeSupportGenerator);
+ } else
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_014); // BUGFIX: speaker is McCoy, not none
+}
+
+void Room::mudd5KirkReachedLifeSupportGenerator() {
+ loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::mudd5KirkRepairedLifeSupportGenerator);
+ _vm->_awayMission.timers[4] = 20;
+}
+
+void Room::mudd5KirkTimer4Expired() {
+ playMidiMusicTracks(-1);
+ loadActorAnim2(OBJECT_LIFE_SUPPORT_GENERATOR, "s4eplo");
+ _vm->_awayMission.mudd.repairedLifeSupportGenerator = true;
+ _vm->_awayMission.mudd.missionScore += 2;
+}
+
+void Room::mudd5KirkRepairedLifeSupportGenerator() {
+ showText(TX_SPEAKER_KIRK, TX_MUD5_007);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_028);
+
+ _vm->_awayMission.mudd.lifeSupportMalfunctioning = false;
+ _vm->_awayMission.mudd.muddCurrentlyInsane = false;
+ playMidiMusicTracks(3);
+ loadActorAnim(OBJECT_MUDD, "s4ephh", 0x0e, 0xa7);
+ _vm->_awayMission.disableInput = true;
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_W;
+ loadActorStandAnim(OBJECT_KIRK);
+
+ _vm->_awayMission.timers[3] = 110;
+}
+
+void Room::mudd5KirkTimer3Expired() { // Mudd popped back in after repairing generator
+ showText(TX_SPEAKER_MUDD, TX_MUD5_035);
+ showText(TX_SPEAKER_KIRK, TX_MUD5_005);
+ showText(TX_SPEAKER_MUDD, TX_MUD5_036);
+
+ loadActorAnim2(OBJECT_MUDD, "s4ephc");
+ _vm->_awayMission.disableInput = false;
+}
+
+void Room::mudd5LookAtHatch() {
+ showText(TX_MUD5N011);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_031);
+ showText(TX_SPEAKER_KIRK, TX_MUD5_009);
+}
+
+void Room::mudd5LookAtLifeSupportGenerator() {
+ if (_vm->_awayMission.mudd.lifeSupportMalfunctioning)
+ showText(TX_MUD5N008);
+ else {
+ showText(TX_MUD5N012);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_026);
+ }
+}
+
+void Room::mudd5TouchedHotspot0() { // Triggers door
+ if (_roomVar.mudd.walkingToDoor) {
+ playVoc("SMADOOR3");
+ loadActorAnim(OBJECT_DOOR, "s4epdo", 0x85, 0x74);
+ }
+}
+
+void Room::mudd5WalkToDoor() {
+ _roomVar.mudd.walkingToDoor = true;
+ _vm->_awayMission.disableInput = true;
+ walkCrewman(OBJECT_KIRK, 0x85, 0x74);
+}
+
+void Room::mudd5LookAtKirk() {
+ showText(TX_MUD5N002);
+}
+
+void Room::mudd5LookAtSpock() {
+ showText(TX_MUD5N005);
+}
+
+void Room::mudd5LookAtMccoy() {
+ showText(TX_MUD5N004);
+}
+
+void Room::mudd5LookAtRedshirt() {
+ showText(TX_MUD5N003);
+}
+
+void Room::mudd5LookAtDoor() {
+ showText(TX_MUD5N010);
+}
+
+void Room::mudd5LookAtCrane() {
+ showText(TX_MUD5N000);
+}
+
+void Room::mudd5LookAtEngine() {
+ showText(TX_MUD5N006);
+}
+
+void Room::mudd5TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_MUD5_002);
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_032);
+}
+
+void Room::mudd5TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_MUD5_033);
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_016);
+}
+
+void Room::mudd5TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_017);
+ showText(TX_SPEAKER_KIRK, TX_MUD5_004);
+}
+
+void Room::mudd5TalkToRedshirt() {
+ showText(TX_SPEAKER_BUCHERT, TX_MUD5_040);
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_018);
+}
+
+void Room::mudd5UseMedkit() {
+ showText(TX_SPEAKER_MCCOY, TX_MUD5_012);
}
}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index d829dd98c9..44c7aea742 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 = "MUDD";
- _roomIndexToLoad = 4;
+ _roomIndexToLoad = 5;
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 0ecac514d3..4811da9017 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -1530,6 +1530,62 @@ enum GameStringIDs {
TX_MUD4N013,
+ TX_MUD5_001,
+ TX_MUD5_002,
+ TX_MUD5_003,
+ TX_MUD5_004,
+ TX_MUD5_005,
+ TX_MUD5_006,
+ TX_MUD5_007,
+ // UNUSED
+ TX_MUD5_009,
+ TX_MUD5_010,
+ TX_MUD5_011,
+ TX_MUD5_012,
+ TX_MUD5_013,
+ TX_MUD5_014,
+ TX_MUD5_015,
+ TX_MUD5_016,
+ TX_MUD5_017,
+ TX_MUD5_018,
+ TX_MUD5_019,
+ TX_MUD5_020,
+ TX_MUD5_021,
+ TX_MUD5_022,
+ TX_MUD5_023,
+ TX_MUD5_024,
+ TX_MUD5_025,
+ TX_MUD5_026,
+ TX_MUD5_027,
+ TX_MUD5_028,
+ // MISSING
+ TX_MUD5_030,
+ TX_MUD5_031,
+ TX_MUD5_032,
+ TX_MUD5_033,
+ TX_MUD5_034,
+ TX_MUD5_035,
+ TX_MUD5_036,
+ TX_MUD5_037,
+ TX_MUD5_038,
+ TX_MUD5_039,
+ TX_MUD5_040,
+ TX_MUD5N000,
+ TX_MUD5N001,
+ TX_MUD5N002,
+ TX_MUD5N003,
+ TX_MUD5N004,
+ TX_MUD5N005,
+ TX_MUD5N006,
+ TX_MUD5N007,
+ TX_MUD5N008,
+ TX_MUD5N009,
+ TX_MUD5N010,
+ TX_MUD5N011,
+ TX_MUD5N012,
+ TX_MUD5N105,
+
+
TX_SIN3_012,
@@ -3005,6 +3061,60 @@ const char * const g_gameStrings[] = {
"#MUD4\\MUD4N013#You see a plain grey screen.",
+ "#MUD5\\MUD5_001#I suspect that's a blessing in disguise, Mr. Spock!",
+ "#MUD5\\MUD5_002#Just think of it, Spock. An advanced civilization, with powerful technology and nearly unlimited knowledge, and yet all of that didn't save them. ",
+ "#MUD5\\MUD5_003#Kirk to Enterprise...",
+ "#MUD5\\MUD5_004#Let's hope there isn't too much for you to do back at the Enterprise. ",
+ "#MUD5\\MUD5_005#Mudd! I oughta...",
+ "#MUD5\\MUD5_006#No, Harry, but I figure it's probably where you'll find your lost marbles.",
+ "#MUD5\\MUD5_007#That was a close one. Too close! If I ever get my hands on that no good Mudd I'll...",
+ "#MUD5\\MUD5_009#Will wonders never cease.",
+ "#MUD5\\MUD5_010#Yes, I've got it but you can't have it.",
+ "#MUD5\\MUD5_011#An unusual matter-anti-matter engine, reminiscent of the designs created by the hoopooin of Seginus IV.",
+ "#MUD5\\MUD5_012#Everyone is healthy, Jim, there's no need for the medical kit here.",
+ "#MUD5\\MUD5_013#Our lives won't be worth a plugged nickel if we don't get that makeshift life support generator back in working order!",
+ "#MUD5\\MUD5_014#This life support generator is an unreliable model at the best of times. Tinkering with it is a gamble with your life!",
+ "#MUD5\\MUD5_015#Do you really think there's anything on Mudd's ship we need, Captain? I don't.",
+ "#MUD5\\MUD5_016#Spock! Meaningless conversation is one of life's great pleasures. ",
+ "#MUD5\\MUD5_017#Well Jim, as long as we don't strangle Harry Mudd, I can't see very much for me to do on this mission. ",
+ "#MUD5\\MUD5_018#You know, lieutenant, they say if you can't say anything good about a person, you shouldn't say anything at all. In that case, I've got a lot I shouldn't say about Harry Mudd. ",
+ "#MUD5\\MUD5_019#The life support generator is malfunctioning. Repairs must be made soon or the atmosphere will fall below the level required to sustain us, Captain.",
+ "#MUD5\\MUD5_020#The life support system must be repaired soon. Readings indicate the environment is dropping quickly.",
+ "#MUD5\\MUD5_021#This \"Sav-a-Ship\" life support generator has seen a great deal of use. It was never a reliable model, being prone to breakdown without warning. It is, however, properly connected, with warning alarms for temperature, atmosphere, and radiation.",
+ "#MUD5\\MUD5_022#This room appears to have been the alien ship's engine pod. A ship-to-ship access hatch and a temporary life support generator are evidently recent additions.",
+ "#MUD5\\MUD5_023#This seems to be a crane of some sort, Captain. Currently, no power is running to it.",
+ "#MUD5\\MUD5_024#As one would expect, Mr. Mudd has sealed the hatch with his personal code. We cannot enter his ship, Captain.",
+ "#MUD5\\MUD5_025#Captain, the Gomuchi-Grindrod Salvage Hatch is designed to withstand low power phaser blasts. However, I would not trust the integrity of the ship's hull were we to increase phaser power to open this hatch.",
+ "#MUD5\\MUD5_026#Evidently Mr. Mudd was unwilling to pay the price for a reliable salvage model.",
+ "#MUD5\\MUD5_027#I doubt there's anything on Mudd's ship we require, Captain.",
+ "#MUD5\\MUD5_028#I would not suggest we take the time to seek him. This emergency could occur again. I would suggest we hasten our departure.", // TYPO
+ "#MUD5\\MUD5_030#In this case, I agree with the good doctor.",
+ "#MUD5\\MUD5_031#It appears that Harry Mudd managed to emplace this access hatch without significantly damaging the alien ship.",
+ "#MUD5\\MUD5_032#It is a sobering thought, Captain. ",
+ "#MUD5\\MUD5_033#Unlike humans, I do not decrease my efficiency with meaningless dialogue. ",
+ "#MUD5\\MUD5_034#Captain, you wouldn't have seen my Multipurpose Doover anywhere? I need to, uh, fix something.",
+ "#MUD5\\MUD5_035#Oh! Was there a problem?",
+ "#MUD5\\MUD5_036#Sorry, no time to chat. I'm a busy man you know.",
+ "#MUD5\\MUD5_037#You really can be a headache, Captain. Maybe I can find a spare somewhere else. Good lu...I mean goodbye.",
+ "#MUD5\\MUD5_038#Captain, I'm not feeling well. Without life support, we can't remain here much longer.",
+ "#MUD5\\MUD5_039#Captain, I don't think we can open this hatch with phasers, and still depend on the integrity of the ship's hull to hold atmosphere.",
+ "#MUD5\\MUD5_040#When we get back to the Enterprise, you're going to have to tell me everything you know about this Mudd guy. ",
+ "#MUD5\\MUD5N000#A large claw-like device hangs from the ceiling.",
+ "#MUD5\\MUD5N001#Dust and grease lifts off the surface, leaving this item clean as new.",
+ "#MUD5\\MUD5N002#James T. Kirk. Exploring the unknown is one of the few pleasures that the burden of command allows him. ",
+ "#MUD5\\MUD5N003#Lieutenant Buchert watches and says nothing. He's the strong, silent type. ",
+ "#MUD5\\MUD5N004#McCoy glances back and forth, looking for a sign of Harry Mudd. ",
+ "#MUD5\\MUD5N005#Spock continues to examine the equipment with a scientist's eye. ",
+ "#MUD5\\MUD5N006#Tall, transparent columns run through the ceiling. Energy crackles in between the duo-decahedrons inside them.",
+ "#MUD5\\MUD5N007#The atmosphere in the ship has dropped below the level needed to sustain life. You drop to unconsciousness and slowly die.",
+ "#MUD5\\MUD5N008#There seems to be something wrong with the life support generator.",
+ "#MUD5\\MUD5N009#These two things fit together like they were made for each other.",
+ "#MUD5\\MUD5N010#This door leads back to the main cargo bay.",
+ "#MUD5\\MUD5N011#A salvage lock hatch, a common type used to link a derelict to the ship doing the salvaging.",
+ "#MUD5\\MUD5N012#A \"Sav-a-Ship\" emergency life support generator, generally used for temporary life support during evacuation of small damaged ships.",
+ "#MUD5\\MUD5N105#Life support fails completely and you fall unconscious.",
+
+
"#SIN3\\SIN3_012#Can't say I like the decor.",