aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek
diff options
context:
space:
mode:
Diffstat (limited to 'engines/startrek')
-rw-r--r--engines/startrek/awaymission.cpp2
-rw-r--r--engines/startrek/awaymission.h7
-rw-r--r--engines/startrek/room.h51
-rw-r--r--engines/startrek/rooms/function_map.h74
-rw-r--r--engines/startrek/rooms/mudd0.cpp9
-rw-r--r--engines/startrek/rooms/mudd1.cpp4
-rw-r--r--engines/startrek/rooms/mudd3.cpp9
-rw-r--r--engines/startrek/rooms/mudd4.cpp540
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h187
10 files changed, 869 insertions, 16 deletions
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index fd1f61f6be..0ba73e8f00 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(2);
}
void StarTrekEngine::runAwayMission() {
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index eaae68bb17..7097f449c9 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -203,12 +203,14 @@ struct AwayMission {
// True if you've combined the lense + degrimer and fired it off, discovering
// it's a weapon
bool discoveredLenseAndDegrimerFunction; // 0x3c
- byte torpedoStatus; // 0x3d
+ int16 torpedoStatus; // 0x3d
bool muddCurrentlyInsane; // 0x3f
bool muddVisitedDatabaseRoom; // 0x40
bool accessedAlienDatabase; // 0x41
- bool tookRepairToolFromDatabaseRoom; // 0x42
+ bool tookRepairTool; // 0x42
bool gotPointsForDownloadingData; // 0x43
+ bool contactedEnterpriseFirstTime; // 0x44
+ bool viewScreenEnabled; // 0x45
bool gotMemoryDisk; // 0x48
bool gotLense; // 0x49
bool gotDegrimer; // 0x4a
@@ -220,6 +222,7 @@ struct AwayMission {
bool enteredRoom0ForFirstTime; // 0x54
bool gotPointsForLoadingTorpedo; // 0x55
bool gotPointsForPressingRedButton; // 0x56
+ bool gotPointsForEnablingViewscreen; // 0x57
bool enteredRoom1ForFirstTime; // 0x58
bool field58; // 0x58
int16 missionScore; // 0x5a
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 9eea5d1ac2..81f98321ea 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -1294,6 +1294,53 @@ public:
// MUDD4
void mudd4Tick1();
+ void mudd4UseCommunicator();
+ void mudd4Timer2Expired();
+ void mudd4Timer3Expired();
+ void mudd4UseSpockOnLeftConsole();
+ void mudd4UseSpockOnRightConsole();
+ void mudd4UseSpockOnConsole();
+ void mudd4SpockReachedChair();
+ void mudd4SpockSatInChair();
+ void mudd4ShowLeftConsoleMenu();
+ void mudd4SpockUsedSensors();
+ void mudd4SpockUsedEngineering();
+ void mudd4SpockUsedNavigation();
+ void mudd4FinishedWalking3();
+ void mudd4UseKirkOnRightConsole();
+ void mudd4UseKirkOnLeftConsole();
+ void mudd4UseKirkOnConsole();
+ void mudd4KirkReachedRightConsole();
+ void mudd4KirkSatInChair();
+ void mudd4ShowRightConsoleMenu();
+ void mudd4KirkUsedViewScreen();
+ void mudd4Timer1Expired();
+ void mudd4KirkUsedCommunications();
+ void mudd4TalkWithMuddAtMissionEnd();
+ void mudd4KirkReachedPositionToTalkToMudd();
+ void mudd4UseMccoyOnConsole();
+ void mudd4UseRedshirtOnConsole();
+ void mudd4UseSTricorderOnRepairTool();
+ void mudd4UseSTricorderOnConsole();
+ void mudd4UseSTricorderOnViewscreen();
+ void mudd4UseMedkit();
+ void mudd4GetRepairTool();
+ void mudd4ReachedRepairTool();
+ void mudd4PickedUpRepairTool();
+ void mudd4LookAtConsole();
+ void mudd4LookAtViewscreen();
+ void mudd4LookAtKirk();
+ void mudd4LookAtSpock();
+ void mudd4LookAtMccoy();
+ void mudd4LookAtRedshirt();
+ void mudd4LookAtRepairTool();
+ void mudd4TalkToKirk();
+ void mudd4TalkToSpock();
+ void mudd4TalkToMccoy();
+ void mudd4TalkToRedshirt();
+ void mudd4WalkToEastDoor();
+ void mudd4WalkToWestDoor();
+ void mudd4TouchedHotspot0();
// MUDD5
void mudd5Tick1();
@@ -1411,6 +1458,10 @@ private:
bool suggestedUsingTricorders; // 0xca
bool tricordersUnavailable; // 0xcb
+ // mudd4
+ bool usingLeftConsole; // 0xca
+ bool kirkUsingRightConsole; // 0xcb
+
// common
byte walkingToDoor;
} mudd;
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 89b03975f7..2f729b5d39 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1615,7 +1615,81 @@ RoomAction mudd3ActionList[] = {
RoomAction mudd4ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::mudd4Tick1 },
+ { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd4UseCommunicator },
+ { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd4Timer2Expired },
+ { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd4Timer3Expired },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::mudd4UseSpockOnLeftConsole },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::mudd4UseSpockOnLeftConsole },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x23, 0), &Room::mudd4UseSpockOnRightConsole },
+ { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::mudd4SpockReachedChair },
+ { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd4SpockSatInChair },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd4SpockUsedSensors },
+ { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::mudd4SpockUsedEngineering },
+ { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::mudd4SpockUsedNavigation },
+ { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd4FinishedWalking3 },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::mudd4UseKirkOnRightConsole },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x23, 0), &Room::mudd4UseKirkOnRightConsole },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::mudd4UseKirkOnLeftConsole },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd4KirkReachedRightConsole },
+ { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::mudd4KirkSatInChair },
+ { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::mudd4KirkUsedViewScreen },
+ { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd4Timer1Expired },
+ { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::mudd4KirkUsedCommunications },
+ { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::mudd4KirkReachedPositionToTalkToMudd },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::mudd4UseMccoyOnConsole },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x22, 0), &Room::mudd4UseMccoyOnConsole },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x23, 0), &Room::mudd4UseMccoyOnConsole },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::mudd4UseRedshirtOnConsole },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::mudd4UseRedshirtOnConsole },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x23, 0), &Room::mudd4UseRedshirtOnConsole },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 10, 0), &Room::mudd4UseSTricorderOnRepairTool },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd4UseSTricorderOnConsole },
+
+ // ENHANCEMENT: Allow scanning the console to work when scanning the specific stations
+ // as well
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd4UseSTricorderOnConsole },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::mudd4UseSTricorderOnConsole },
+
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd4UseSTricorderOnViewscreen },
+
+ // ENHANCEMENT: Allow scanning the viewscreen when it's on, not just when off
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::mudd4UseSTricorderOnViewscreen },
+
+ // Common code
+ { 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_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd4UseMedkit },
+ { Action(ACTION_GET, 10, 0, 0), &Room::mudd4GetRepairTool },
+ { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::mudd4ReachedRepairTool },
+ { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::mudd4PickedUpRepairTool },
+
+ { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd4LookAtConsole },
+ // ENHANCEMENT: Allow look action work with the specific stations as well
+ { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd4LookAtConsole },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd4LookAtConsole },
+
+ { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd4LookAtViewscreen },
+ // ENHANCEMENT: Allow look action work when viewscreen is on, not just when off
+ { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd4LookAtViewscreen },
+
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd4LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd4LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd4LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd4LookAtRedshirt },
+ { Action(ACTION_LOOK, 10, 0, 0), &Room::mudd4LookAtRepairTool },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd4TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd4TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd4TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd4TalkToRedshirt },
+ { Action(ACTION_WALK, 0x24, 0, 0), &Room::mudd4WalkToEastDoor },
+ { Action(ACTION_WALK, 0x25, 0, 0), &Room::mudd4WalkToWestDoor },
+ { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd4TouchedHotspot0 },
+ // TODO: remainder? something about losing atmosphere?
};
+
RoomAction mudd5ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::mudd5Tick1 },
};
diff --git a/engines/startrek/rooms/mudd0.cpp b/engines/startrek/rooms/mudd0.cpp
index 381a07a14b..dbb1c999f6 100644
--- a/engines/startrek/rooms/mudd0.cpp
+++ b/engines/startrek/rooms/mudd0.cpp
@@ -165,7 +165,8 @@ void Room::mudd0UseLenseOnDegrimer() {
_vm->_awayMission.mudd.missionScore++;
showText(TX_MUD0N011);
- // Identical (?) audio files: TX_MUD0N011, TX_MUD1N013, TX_MUD2N010, TX_MUD3N016
+ // TODO: Identical (?) audio files: TX_MUD0N011, TX_MUD1N013, TX_MUD2N010, TX_MUD3N016,
+ // TX_MUD4009
}
@@ -175,6 +176,7 @@ void Room::mudd0UseAlienDevice() {
13, // MUDD1
11, // MUDD2
11, // MUDD3
+ 9, // MUDD4
};
_vm->_awayMission.disableInput = true;
@@ -192,13 +194,14 @@ void Room::mudd0FiredAlienDevice() {
_vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction = true;
_vm->_awayMission.mudd.missionScore += 5;
showText(TX_SPEAKER_KIRK, TX_MUD0_002);
- // Identical (?) audio files: TX_MUD0_002, TX_MUD1_002, TX_MUD2_002
+ // TODO: Identical (?) audio files: TX_MUD0_002, TX_MUD1_002, TX_MUD2_002
}
}
void Room::mudd0UseDegrimer() {
- // Identical (?) audio files: TX_MUD0N002, TX_MUD1N004, TX_MUD2N001, TX_MUD3N001...
+ // TODO: Identical (?) audio files: TX_MUD0N002, TX_MUD1N004, TX_MUD2N001,
+ // TX_MUD3N001, TX_MUD4N002
showText(TX_MUD0N002);
}
diff --git a/engines/startrek/rooms/mudd1.cpp b/engines/startrek/rooms/mudd1.cpp
index 074b4bf1f7..a2baf71eb6 100644
--- a/engines/startrek/rooms/mudd1.cpp
+++ b/engines/startrek/rooms/mudd1.cpp
@@ -165,7 +165,7 @@ void Room::mudd1SpockPressedRedButton() {
switch (choice) {
case 0:
- _vm->_awayMission.mudd.torpedoStatus = false;
+ _vm->_awayMission.mudd.torpedoStatus = 0;
// ENHANCEMENT: Original text was just "(Spock raises eyebrow)" without any audio.
// This changes it to a narration to make it flow better.
@@ -177,7 +177,7 @@ void Room::mudd1SpockPressedRedButton() {
// fall through
case 2:
- _vm->_awayMission.mudd.torpedoStatus = true;
+ _vm->_awayMission.mudd.torpedoStatus = 1;
showText(TX_SPEAKER_UHURA, TX_STATICU1);
break;
}
diff --git a/engines/startrek/rooms/mudd3.cpp b/engines/startrek/rooms/mudd3.cpp
index 1eed3de931..b0bc5a3e9e 100644
--- a/engines/startrek/rooms/mudd3.cpp
+++ b/engines/startrek/rooms/mudd3.cpp
@@ -36,6 +36,9 @@
namespace StarTrek {
+// BUG-ish: trying to scan the sphere while someone is behind it causes it to scan that
+// object instead.
+
void Room::mudd3Tick1() {
playVoc("MUD3LOOP");
@@ -45,7 +48,7 @@ void Room::mudd3Tick1() {
loadActorAnim(OBJECT_9, "s4lbpb", 0xa2, 0x9f);
// FIXME: is this supposed to be in this if statement?
- if (!_vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom)
+ if (!_vm->_awayMission.mudd.tookRepairTool)
loadActorAnim(OBJECT_REPAIR_TOOL, "s4lbdv", 0xb7, 0xa8);
}
@@ -292,7 +295,7 @@ void Room::mudd3UseMemoryDiskOnSphere() {
void Room::mudd3GetRepairTool() {
- if (_vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom)
+ if (_vm->_awayMission.mudd.tookRepairTool)
showText(TX_MUD3N018); // NOTE: unused, since the object disappears, can't be selected again
else {
_vm->_awayMission.disableInput = true;
@@ -309,7 +312,7 @@ void Room::mudd3ReachedRepairTool() {
void Room::mudd3PickedUpRepairTool() {
_vm->_awayMission.disableInput = false;
loadActorStandAnim(OBJECT_REPAIR_TOOL);
- _vm->_awayMission.mudd.tookRepairToolFromDatabaseRoom = true;
+ _vm->_awayMission.mudd.tookRepairTool = true;
_vm->_awayMission.mudd.missionScore++;
giveItem(OBJECT_IDOOVER);
}
diff --git a/engines/startrek/rooms/mudd4.cpp b/engines/startrek/rooms/mudd4.cpp
index f6a0e55c2d..502a65047a 100644
--- a/engines/startrek/rooms/mudd4.cpp
+++ b/engines/startrek/rooms/mudd4.cpp
@@ -22,13 +22,549 @@
#include "startrek/room.h"
-#define OBJECT_DOOR1 8
+#define OBJECT_VIEWSCREEN 8
+#define OBJECT_ALIENDV 9
+#define OBJECT_REPAIR_TOOL 10
+#define OBJECT_11 11
-#define HOTSPOT_CONSOLE 0x20
+#define HOTSPOT_SCREEN 0x20
+#define HOTSPOT_CONSOLE 0x21
+#define HOTSPOT_LEFT_CONSOLE 0x22
+#define HOTSPOT_RIGHT_CONSOLE 0x23
+#define HOTSPOT_EAST_DOOR 0x24
+#define HOTSPOT_WEST_DOOR 0x25
namespace StarTrek {
void Room::mudd4Tick1() {
+ playVoc("MUD4LOOP");
+
+ if (!_vm->_awayMission.mudd.tookRepairTool)
+ loadActorAnim(OBJECT_REPAIR_TOOL, "s4crdv", 0xc9, 0x8e);
+
+ if (_vm->_awayMission.mudd.viewScreenEnabled)
+ loadActorAnim(OBJECT_VIEWSCREEN, "s4crvo", 0xa5, 0x76);
+}
+
+void Room::mudd4UseCommunicator() {
+ showText(TX_SPEAKER_KIRK, TX_MUD4_018);
+ showText(TX_SPEAKER_UHURA, TX_STATICU1);
+}
+
+void Room::mudd4Timer2Expired() { // TODO: better name
+ playSoundEffectIndex(SND_07);
+}
+
+void Room::mudd4Timer3Expired() { // TODO: better name
+ playSoundEffectIndex(SND_TRANSENE);
+}
+
+void Room::mudd4UseSpockOnLeftConsole() {
+ _roomVar.mudd.usingLeftConsole = true;
+ mudd4UseSpockOnConsole();
+}
+
+void Room::mudd4UseSpockOnRightConsole() {
+ _roomVar.mudd.usingLeftConsole = false;
+ mudd4UseSpockOnConsole();
+}
+
+void Room::mudd4UseSpockOnConsole() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ loadActorStandAnim(OBJECT_SPOCK);
+
+ if (_vm->_awayMission.mudd.translatedAlienLanguage) {
+ if (!_roomVar.mudd.usingLeftConsole)
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_057);
+ } else if (_vm->_awayMission.mudd.discoveredBase3System) {
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_062);
+ } else {
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_061);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_013);
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_062);
+ showText(TX_SPEAKER_MCCOY, TX_MUD4_048);
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_059);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_031);
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_060);
+
+ if (!_vm->_awayMission.mudd.discoveredBase3System) {
+ _vm->_awayMission.mudd.discoveredBase3System = true;
+ _vm->_awayMission.mudd.missionScore++;
+ }
+ }
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ walkCrewmanC(OBJECT_SPOCK, 0x6d, 0x9a, &Room::mudd4SpockReachedChair);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::mudd4SpockReachedChair() {
+ if (_roomVar.mudd.usingLeftConsole && _vm->_awayMission.mudd.translatedAlienLanguage)
+ loadActorAnimC(OBJECT_SPOCK, "s4crss", -1, -1, &Room::mudd4SpockSatInChair);
+ else
+ _vm->_awayMission.disableInput = false;
+}
+
+void Room::mudd4SpockSatInChair() {
+ loadActorAnim2(OBJECT_SPOCK, "s4crsr", 0x55, 0x98);
+
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_058);
+ mudd4ShowLeftConsoleMenu();
+}
+
+void Room::mudd4ShowLeftConsoleMenu() {
+ const TextRef choices[] = {
+ TX_SPEAKER_SPOCK,
+ TX_MUD4_038,
+ TX_MUD4_039,
+ TX_MUD4_040,
+ TX_MUD4_041,
+ TX_BLANK
+ };
+
+ int choice = showText(choices);
+
+ switch (choice) {
+ case 0: // Sensors
+ loadActorAnimC(OBJECT_SPOCK, "s4crsr", 0x55, 0x98, &Room::mudd4SpockUsedSensors);
+ _vm->_awayMission.timers[2] = 5;
+ break;
+
+ case 1: // Navigation
+ loadActorAnimC(OBJECT_SPOCK, "s4crsl", 0x55, 0x98, &Room::mudd4SpockUsedNavigation);
+ _vm->_awayMission.timers[2] = 5;
+ break;
+
+ case 2: // Engineering
+ loadActorAnimC(OBJECT_SPOCK, "s4crsr", 0x55, 0x98, &Room::mudd4SpockUsedEngineering);
+ _vm->_awayMission.timers[2] = 5;
+ break;
+
+ case 3: // Done
+ _vm->_awayMission.disableInput = false;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ walkCrewman(OBJECT_SPOCK, 0x69, 0xb7);
+ break;
+ }
+}
+
+void Room::mudd4SpockUsedSensors() {
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_053);
+ mudd4ShowLeftConsoleMenu();
+}
+
+void Room::mudd4SpockUsedEngineering() {
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_056);
+ mudd4ShowLeftConsoleMenu();
+}
+
+void Room::mudd4SpockUsedNavigation() {
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_055);
+ mudd4ShowLeftConsoleMenu();
+}
+
+void Room::mudd4FinishedWalking3() { // Spock reaches console after attempting to use Kirk on one
+ _vm->_awayMission.disableInput = false;
+ mudd4UseSpockOnLeftConsole();
+}
+
+void Room::mudd4UseKirkOnRightConsole() {
+ _roomVar.mudd.kirkUsingRightConsole = true;
+ mudd4UseKirkOnConsole();
+}
+
+void Room::mudd4UseKirkOnLeftConsole() {
+ _roomVar.mudd.kirkUsingRightConsole = false;
+ mudd4UseKirkOnConsole();
+}
+
+void Room::mudd4UseKirkOnConsole() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ loadActorStandAnim(OBJECT_KIRK);
+
+ if (!_vm->_awayMission.mudd.translatedAlienLanguage) {
+ showText(TX_SPEAKER_KIRK, TX_MUD4_006);
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ walkCrewmanC(OBJECT_SPOCK, 0x6d, 0x9a, &Room::mudd4FinishedWalking3);
+ _vm->_awayMission.disableInput = true;
+ }
+ else {
+ if (!_roomVar.mudd.kirkUsingRightConsole)
+ showText(TX_SPEAKER_KIRK, TX_MUD4_049);
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewmanC(OBJECT_KIRK, 0x7e, 0x98, &Room::mudd4KirkReachedRightConsole);
+ _vm->_awayMission.disableInput = true;
+ }
+}
+
+void Room::mudd4KirkReachedRightConsole() {
+ if (_roomVar.mudd.kirkUsingRightConsole && _vm->_awayMission.mudd.translatedAlienLanguage)
+ loadActorAnimC(OBJECT_KIRK, "s4crks", -1, -1, &Room::mudd4KirkSatInChair);
+ else
+ _vm->_awayMission.disableInput = false;
+}
+
+void Room::mudd4KirkSatInChair() {
+ loadActorAnim2(OBJECT_KIRK, "s4crkl", 0x94, 0x98);
+ _vm->_awayMission.timers[2] = 5;
+ _vm->_awayMission.disableInput = false;
+
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_052); // NOTE: why is Spock talking here?
+
+ mudd4ShowRightConsoleMenu();
+}
+
+void Room::mudd4ShowRightConsoleMenu() {
+ const TextRef choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD4_002,
+ TX_MUD4_007,
+ TX_MUD4_003, // BUGFIX: this used Spock's voice instead of Kirk's in original
+ TX_BLANK
+ };
+
+ int choice = showText(choices);
+
+ switch (choice) {
+ case 0: // Communications
+ _vm->_awayMission.disableInput = true;
+ loadActorAnimC(OBJECT_KIRK, "s4crkr", 0x94, 0x98, &Room::mudd4KirkUsedCommunications);
+ break;
+
+ case 1: // View Screen
+ _vm->_awayMission.disableInput = true;
+ loadActorAnimC(OBJECT_KIRK, "s4crkl", 0x94, 0x98, &Room::mudd4KirkUsedViewScreen);
+ break;
+
+ case 2: // Done
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewman(OBJECT_KIRK, 0x83, 0xb6);
+ break;
+ }
+}
+
+void Room::mudd4KirkUsedViewScreen() {
+ if (!_vm->_awayMission.mudd.viewScreenEnabled) {
+ _vm->_awayMission.mudd.viewScreenEnabled = true;
+ playVoc("SE2BIGAS");
+ loadActorAnim(OBJECT_VIEWSCREEN, "s4crvs", 0xa5, 0x76);
+ _vm->_awayMission.timers[3] = 5;
+ _vm->_awayMission.timers[1] = 50;
+ if (!_vm->_awayMission.mudd.gotPointsForEnablingViewscreen) {
+ _vm->_awayMission.mudd.gotPointsForEnablingViewscreen = true;
+ _vm->_awayMission.mudd.missionScore++;
+ }
+ }
+ else {
+ _vm->_awayMission.mudd.viewScreenEnabled = false;
+ loadActorAnim(OBJECT_VIEWSCREEN, "s4crvf", 0xa5, 0x76);
+ _vm->_awayMission.timers[3] = 5;
+ _vm->_awayMission.timers[1] = 30;
+ }
+}
+
+void Room::mudd4Timer1Expired() {
+ _vm->_awayMission.disableInput = false;
+ if (_vm->_awayMission.mudd.viewScreenEnabled)
+ showText(TX_SPEAKER_KIRK, TX_MUD4_004);
+ mudd4ShowRightConsoleMenu();
+}
+
+void Room::mudd4KirkUsedCommunications() {
+ _vm->_awayMission.disableInput = false;
+ if (!_vm->_awayMission.mudd.knowAboutTorpedo) {
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_054);
+ mudd4ShowRightConsoleMenu();
+ } else {
+ if (!_vm->_awayMission.mudd.contactedEnterpriseFirstTime) {
+ _vm->_awayMission.mudd.missionScore++;
+ showText(TX_SPEAKER_KIRK, TX_MUD4_025);
+ showText(TX_SPEAKER_SCOTT, TX_MUD4_S02);
+
+ if (_vm->_awayMission.mudd.torpedoStatus == 1)
+ showText(TX_SPEAKER_KIRK, TX_MUD4_027);
+ else
+ showText(TX_SPEAKER_KIRK, TX_MUD4_028);
+
+ showText(TX_SPEAKER_SCOTT, TX_MUD4_S04);
+
+ const TextRef choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD4_024,
+ TX_MUD4_033,
+ TX_MUD4_022, // ENHANCEMENT: This line was recorded twice (MUD4_022 and MUD4_023). It's used twice, so, might as well make use of the second recording.
+ TX_BLANK
+ };
+
+ int choice = showText(choices);
+
+ if (choice == 1) {
+ endMission(_vm->_awayMission.mudd.missionScore, 0x1b, _vm->_awayMission.mudd.torpedoStatus);
+ } else if (choice == 0) {
+ _vm->_awayMission.mudd.contactedEnterpriseFirstTime = true;
+ } else { // choice == 2
+ mudd4TalkWithMuddAtMissionEnd();
+ }
+ } else {
+ const TextRef choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD4_019,
+ TX_MUD4_A29,
+ TX_MUD4_023,
+ TX_BLANK
+ };
+
+ showText(TX_SPEAKER_KIRK, TX_MUD4_020);
+ showText(TX_SPEAKER_SCOTT, TX_MUD4_S03);
+ int choice = showText(choices);
+
+ if (choice == 1) {
+ endMission(_vm->_awayMission.mudd.missionScore, 0x1b, _vm->_awayMission.mudd.torpedoStatus);
+ } else if (choice == 2) {
+ mudd4TalkWithMuddAtMissionEnd();
+ }
+ }
+ }
+}
+
+void Room::mudd4TalkWithMuddAtMissionEnd() {
+ if (_vm->_awayMission.mudd.muddCurrentlyInsane)
+ return;
+ else {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_E;
+ walkCrewmanC(OBJECT_KIRK, 0x83, 0xb4, &Room::mudd4KirkReachedPositionToTalkToMudd);
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_E;
+ walkCrewman(OBJECT_SPOCK, 0x69, 0xb7);
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_N;
+ loadActorStandAnim(OBJECT_MCCOY);
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_E;
+ loadActorStandAnim(OBJECT_REDSHIRT);
+
+ playMidiMusicTracks(3);
+ loadActorAnim(OBJECT_11, "s4crhw", 0x13f, 0xc7);
+ }
+}
+
+void Room::mudd4KirkReachedPositionToTalkToMudd() {
+ _vm->_awayMission.disableInput = false;
+
+ if (_vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction
+ || _vm->_awayMission.mudd.gaveMuddDatabaseAccess
+ || _vm->_awayMission.mudd.databaseDestroyed
+ || !_vm->_awayMission.mudd.accessedAlienDatabase) { // NOTE: why this last line? Test this...
+ const int choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD4_009,
+ TX_MUD4_016,
+ TX_BLANK
+ };
+
+ showText(TX_SPEAKER_MUDD, TX_MUD4_066);
+ int choice = showText(choices);
+
+ if (choice == 1) {
+ // Copy of code at very bottom of function
+ showText(TX_SPEAKER_MUDD, TX_MUD4_074);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_017);
+ showText(TX_SPEAKER_MUDD, TX_MUD4_072);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_008);
+ showText(TX_SPEAKER_MUDD, TX_MUD4_068);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_032);
+
+ endMission(_vm->_awayMission.mudd.missionScore, 0x1b, _vm->_awayMission.mudd.torpedoStatus);
+ } else {
+ // Threaten to arrest Mudd.
+ if (_vm->_awayMission.mudd.gaveMuddDatabaseAccess || _vm->_awayMission.mudd.databaseDestroyed)
+ showText(TX_SPEAKER_KIRK, TX_MUD4_034);
+ if (_vm->_awayMission.mudd.discoveredLenseAndDegrimerFunction)
+ showText(TX_SPEAKER_KIRK, TX_MUD4_037);
+
+ showText(TX_SPEAKER_KIRK, TX_MUD4_026);
+
+ if (_vm->_awayMission.mudd.gaveMuddDatabaseAccess && _vm->_awayMission.mudd.databaseDestroyed) {
+ // NOTE: This combination is probably impossible, making this unused?
+ // (Either you give Mudd access to the database, or he destroys it.)
+
+ // Mudd offers to copy the lost data to the enterprise computer.
+ showText(TX_SPEAKER_MUDD, TX_MUD4_071);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_036);
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_029);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_030);
+ }
+ else {
+ // Mudd is forced to agree to give samples to a university.
+ showText(TX_SPEAKER_MUDD, TX_MUD4_064);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_012);
+ showText(TX_SPEAKER_MUDD, TX_MUD4_070);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_010);
+ showText(TX_SPEAKER_MUDD, TX_MUD4_067);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_011);
+
+ _vm->_awayMission.mudd.missionScore += 4;
+ playMidiMusicTracks(30);
+
+ showText(TX_SPEAKER_MUDD, TX_MUD4_073);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_035);
+ }
+ showText(TX_SPEAKER_MUDD, TX_MUD4_069);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_001);
+
+ endMission(_vm->_awayMission.mudd.missionScore, 0x1b, _vm->_awayMission.mudd.torpedoStatus);
+ }
+ }
+ else {
+ const int choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_MUD4_014,
+ TX_MUD4_021,
+ TX_BLANK
+ };
+
+ showText(TX_SPEAKER_MUDD, TX_MUD4_065);
+ int choice = showText(choices);
+
+ if (choice == 1) {
+ showText(TX_SPEAKER_MUDD, TX_MUD4_074);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_017);
+ }
+ showText(TX_SPEAKER_MUDD, TX_MUD4_072);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_008);
+ showText(TX_SPEAKER_MUDD, TX_MUD4_068);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_032);
+
+ endMission(_vm->_awayMission.mudd.missionScore, 0x1b, _vm->_awayMission.mudd.torpedoStatus);
+ }
+}
+
+void Room::mudd4UseMccoyOnConsole() {
+ // NOTE: This audio was recorded twice (TX_MUD4_045, and TX_MUD4_044 which is unused)
+ showText(TX_SPEAKER_MCCOY, TX_MUD4_045);
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_N;
+ walkCrewman(OBJECT_MCCOY, 0x7d, 0xc3);
+}
+
+void Room::mudd4UseRedshirtOnConsole() {
+ // Floppy version shows two different pieces of text here, but in the CD version,
+ // there's no difference
+ if (!_vm->_awayMission.mudd.translatedAlienLanguage)
+ showText(TX_SPEAKER_BUCHERT, TX_MUD4_075);
+ else
+ showText(TX_SPEAKER_BUCHERT, TX_MUD4_075);
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_N;
+ walkCrewman(OBJECT_REDSHIRT, 0x2a, 0xbb);
+}
+
+void Room::mudd4UseSTricorderOnRepairTool() {
+ spockScan(DIR_E, TX_MUD4_051, false);
+}
+
+void Room::mudd4UseSTricorderOnConsole() {
+ spockScan(DIR_N, TX_MUD4_042, false);
+}
+
+void Room::mudd4UseSTricorderOnViewscreen() {
+ spockScan(DIR_N, TX_MUD4_050, false);
+}
+
+void Room::mudd4UseMedkit() {
+ showText(TX_SPEAKER_MCCOY, TX_MUD4_043);
+}
+
+void Room::mudd4GetRepairTool() {
+ if (_vm->_awayMission.mudd.tookRepairTool)
+ showText(TX_MUD4N012); // NOTE: unused, since the object disappears, can't be selected again
+ else {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewmanC(OBJECT_KIRK, 0xcb, 0x9e, &Room::mudd4ReachedRepairTool);
+ }
+}
+
+void Room::mudd4ReachedRepairTool() {
+ loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::mudd4PickedUpRepairTool);
+}
+
+void Room::mudd4PickedUpRepairTool() {
+ _vm->_awayMission.disableInput = false;
+ loadActorStandAnim(OBJECT_REPAIR_TOOL);
+ _vm->_awayMission.mudd.tookRepairTool = true;
+ _vm->_awayMission.mudd.missionScore++;
+ giveItem(OBJECT_IDOOVER);
+}
+
+void Room::mudd4LookAtConsole() {
+ showText(TX_MUD4N000);
+}
+
+void Room::mudd4LookAtViewscreen() {
+ if (_vm->_awayMission.mudd.viewScreenEnabled)
+ showText(TX_MUD4N008);
+ else
+ showText(TX_MUD4N013);
+}
+
+void Room::mudd4LookAtKirk() {
+ showText(TX_MUD4N003);
+}
+
+void Room::mudd4LookAtSpock() {
+ showText(TX_MUD4N006);
+}
+
+void Room::mudd4LookAtMccoy() {
+ showText(TX_MUD4N001);
+}
+
+void Room::mudd4LookAtRedshirt() {
+ showText(TX_MUD4N004);
+}
+
+void Room::mudd4LookAtRepairTool() {
+ showText(TX_MUD4N011);
+}
+
+void Room::mudd4TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_MUD4_005);
+}
+
+void Room::mudd4TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_MUD4_063);
+ showText(TX_SPEAKER_KIRK, TX_MUD4_015);
+ showText(TX_SPEAKER_MCCOY, TX_MUD4_047);
+}
+
+void Room::mudd4TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_MUD4_046);
+}
+
+void Room::mudd4TalkToRedshirt() {
+ showText(TX_SPEAKER_BUCHERT, TX_MUD4_076);
+}
+
+void Room::mudd4WalkToEastDoor() {
+ _roomVar.mudd.walkingToDoor = true;
+ _vm->_awayMission.disableInput = true;
+ walkCrewman(OBJECT_KIRK, 0xf0, 0xc7);
+}
+
+void Room::mudd4WalkToWestDoor() {
+ _roomVar.mudd.walkingToDoor = true;
+ _vm->_awayMission.disableInput = true;
+ walkCrewman(OBJECT_KIRK, 0x50, 0xc7);
+}
+
+void Room::mudd4TouchedHotspot0() { // Trigger door sound
+ if (_roomVar.mudd.walkingToDoor)
+ playVoc("SMADOOR3");
}
}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index beb18e7a8d..48f8879c99 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 = 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 546a7cf005..0ecac514d3 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -1435,7 +1435,99 @@ enum GameStringIDs {
TX_MUD3C001,
+ TX_MUD4_001,
+ TX_MUD4_002,
+ TX_MUD4_003,
+ TX_MUD4_004,
+ TX_MUD4_005,
+ TX_MUD4_006,
+ TX_MUD4_007,
+ TX_MUD4_008,
+ TX_MUD4_009,
+ TX_MUD4_010,
+ TX_MUD4_011,
+ TX_MUD4_012,
+ TX_MUD4_013,
+ TX_MUD4_014,
+ TX_MUD4_015,
+ TX_MUD4_016,
+ TX_MUD4_017,
TX_MUD4_018,
+ TX_MUD4_019,
+ TX_MUD4_020,
+ TX_MUD4_021,
+ TX_MUD4_022,
+ TX_MUD4_023,
+ TX_MUD4_024,
+ TX_MUD4_025,
+ TX_MUD4_026,
+ TX_MUD4_027,
+ TX_MUD4_028,
+ TX_MUD4_029,
+ TX_MUD4_030,
+ TX_MUD4_031,
+ TX_MUD4_032,
+ TX_MUD4_033,
+ TX_MUD4_034,
+ TX_MUD4_035,
+ TX_MUD4_036,
+ TX_MUD4_037,
+ TX_MUD4_038,
+ TX_MUD4_039,
+ TX_MUD4_040,
+ TX_MUD4_041,
+ TX_MUD4_042,
+ TX_MUD4_043,
+ // UNUSED
+ TX_MUD4_045,
+ TX_MUD4_046,
+ TX_MUD4_047,
+ TX_MUD4_048,
+ TX_MUD4_049,
+ TX_MUD4_050,
+ TX_MUD4_051,
+ TX_MUD4_052,
+ TX_MUD4_053,
+ TX_MUD4_054,
+ TX_MUD4_055,
+ TX_MUD4_056,
+ TX_MUD4_057,
+ TX_MUD4_058,
+ TX_MUD4_059,
+ TX_MUD4_060,
+ TX_MUD4_061,
+ TX_MUD4_062,
+ TX_MUD4_063,
+ TX_MUD4_064,
+ TX_MUD4_065,
+ TX_MUD4_066,
+ TX_MUD4_067,
+ TX_MUD4_068,
+ TX_MUD4_069,
+ TX_MUD4_070,
+ TX_MUD4_071,
+ TX_MUD4_072,
+ TX_MUD4_073,
+ TX_MUD4_074,
+ TX_MUD4_075,
+ TX_MUD4_076,
+ TX_MUD4_A29,
+ TX_MUD4_S02,
+ TX_MUD4_S03,
+ TX_MUD4_S04,
+ TX_MUD4N000,
+ TX_MUD4N001,
+ TX_MUD4N002,
+ TX_MUD4N003,
+ TX_MUD4N004,
+ TX_MUD4N005,
+ TX_MUD4N006,
+ TX_MUD4N007,
+ TX_MUD4N008,
+ TX_MUD4N009,
+ TX_MUD4N011,
+ TX_MUD4N012,
+ TX_MUD4N013,
TX_SIN3_012,
@@ -2668,7 +2760,7 @@ const char * const g_gameStrings[] = {
"#MUD2\\MUD2_006#Harry, when did you become a comedian? ",
"#MUD2\\MUD2_007#I can't think of anything we did that was THAT bad. ",
"#MUD2\\MUD2_008#There's not much I wouldn't do to not have to deal with Mudd. ",
- "#MUD2\\MUD2_009#Kirk to Enterprise...",
+ "#MUD2\\MUD2_009#Kirk to Enterprise ... Kirk to Enterprise.", // TYPO
"#MUD2\\MUD2_010#Sometimes I wish I had become an archeology professor instead of a Starfleet Captain. ",
"#MUD2\\MUD2_011#Sorry if I was bothering you. I was just silently cursing the day I met Harry Mudd. ",
"#MUD2\\MUD2_012#All yours now, Doctor McCoy.",
@@ -2819,7 +2911,98 @@ const char * const g_gameStrings[] = {
"(Raises eyebrow)", // Custom
- "#MUD4\\MUD4_018#Kirk to Enterprise ... Kirk to Enterprise.",
+ "#MUD4\\MUD4_001#Bring us home, Mr. Scott.",
+ "#MUD4\\MUD4_002#<<Communications>>",
+ "#MUD4\\MUD4_003#<<Done>>",
+ "#MUD4\\MUD4_004#I guess the universe looks about like it did the last time we saw it.",
+ "#MUD4\\MUD4_005#I'm speechless, Mr. Spock. Words cannot adequately describe this place. ",
+ "#MUD4\\MUD4_006#Mr. Spock, come take a look at this. This is evidently the main bridge. What do you make of it?",
+ "#MUD4\\MUD4_007#<<View Screen>>",
+ "#MUD4\\MUD4_008#Did you know Stella's still looking for you? What's it worth to you for me not to tell her where to find you, Harry?", // TYPO
+ "#MUD4\\MUD4_009#Don't rush off, Harry. There's still a few things we need to discuss.",
+ "#MUD4\\MUD4_010#Five of each.",
+ "#MUD4\\MUD4_011#Five. Remember, I could confiscate your entire stock as illegal goods. You might get it back through the courts... in a few years.",
+ "#MUD4\\MUD4_012#For free?",
+ "#MUD4\\MUD4_013#Go on, Mr. Spock.",
+ "#MUD4\\MUD4_014#I was sure you wouldn't miss them, Harry. The Patent Authority wants these properly registered and I'm sure you want to do the right thing.",
+ "#MUD4\\MUD4_015#In spite of Harry Mudd... ",
+ "#MUD4\\MUD4_016#In such a hurry? And Stella said she was dropping everything to meet you here.",
+ "#MUD4\\MUD4_017#Just like you were kidding about this ship registered as a worthless derelict. You are going to change that, aren't you? Matter of fact, I think it would be just the thing for you to turn it over lock stock and barrel to the Kornephorous University.",
+ "#MUD4\\MUD4_018#Kirk to Enterprise ... Kirk to Enterprise.", // TYPO: used in MUD4 and LOVE mission; the text was different in LOVE, not matching with audio.
+ "#MUD4\\MUD4_019#Later, Mr. Scott.",
+ "#MUD4\\MUD4_020#New developments, Mr. Scott?",
+ "#MUD4\\MUD4_021#No, Harry, we're going to let you keep them to sell to the Elasi at incredible profits, so they can use them against Federation authorites.",
+ "#MUD4\\MUD4_022#No, I need to have a word with Harry Mudd before we go.",
+ "#MUD4\\MUD4_023#No, I need to have a word with Harry Mudd before we go.",
+ "#MUD4\\MUD4_024#No, we want to look around some more. We'll call you on this channel when we're ready.",
+ "#MUD4\\MUD4_025#Scotty! Report!",
+ "#MUD4\\MUD4_026#Tell me why I shouldn't arrest you on the spot, just on general principles?",
+ "#MUD4\\MUD4_027#The local star seems to be acting up. Will there be a problem with the transporter? I want you to beam up the landing party, and I also want you to lock onto and beam aboard an alien mechanism we came across.",
+ "#MUD4\\MUD4_028#The local star seems to be acting up. Will there be a problem with the transporter?",
+ "#MUD4\\MUD4_029#I would suggest, Captain, we take him up on his offer.",
+ "#MUD4\\MUD4_030#Very well, Harry. You're off scot free... this time. But if you don't upload that data immediately, your measly little scoutship will be experiencing some difficulties maintaining flight capabilities.",
+ "#MUD4\\MUD4_031#What else can you determine at this stage, Mr. Spock?",
+ "#MUD4\\MUD4_032#When we meet, Harry, it always means trouble.",
+ "#MUD4\\MUD4_033#Yes, bring us home, Mr. Scott.",
+ "#MUD4\\MUD4_034#You destroyed the only known records of a lost race. That's a punishable offense.",
+ "#MUD4\\MUD4_035#You have no idea what a great bargain it is, Mudd.",
+ "#MUD4\\MUD4_036#You made a backup?",
+ "#MUD4\\MUD4_037#You were selling high-technology weapons to terrorists and known criminals.",
+ "#MUD4\\MUD4_038#<<Sensors>>",
+ "#MUD4\\MUD4_039#<<Navigation>>",
+ "#MUD4\\MUD4_040#<<Engineering>>",
+ "#MUD4\\MUD4_041#<<Done>>",
+ "#MUD4\\MUD4_042#Evidently the aliens' bridge, their centralized control. A closer look may provide more information.",
+ "#MUD4\\MUD4_043#Everyone is healthy, Jim, there's no need for the medical kit here.",
+ "#MUD4\\MUD4_045#I can't make anything of these controls.",
+ "#MUD4\\MUD4_046#To boldly go, where no man has gone before... we're here, Jim. ",
+ "#MUD4\\MUD4_047#Speak of the devil, where is that little angel? ",
+ "#MUD4\\MUD4_048#This shouldn't be surprising -- after all, there are two stations.",
+ "#MUD4\\MUD4_049#I think this is the secondary station.",
+ "#MUD4\\MUD4_050#It appears to be a view screen much like the one on board the Enterprise.",
+ "#MUD4\\MUD4_051#It is a multi-bit, compact doover with its own dracktar traction unit and clamp kit.",
+ "#MUD4\\MUD4_052#Thanks to the library computer data, limited though it is, these primary controls give me access to...",
+ "#MUD4\\MUD4_053#The Enterprise is in combat with a number of Elasi pirate ships half a parsec toward the neutron star sector. I read debris identifiable with the pirates, but they continue to harass the Enterprise.",
+ "#MUD4\\MUD4_054#The Enterprise is out of range for this equipment, under the conditions of static created by the neutron star.",
+ "#MUD4\\MUD4_055#The computer reports this ship is incapable of navigating anywhere at all without major repairs. We are definitely dead in space until the Enterprise returns, Captain.",
+ "#MUD4\\MUD4_056#The engine pods are damaged but still generating power, Captain.",
+ "#MUD4\\MUD4_057#This appears to be the primary control panel. Perhaps you would be better equipped to man this station, Captain.",
+ "#MUD4\\MUD4_058#This is the secondary station. With the limited understanding we now have of the library computer data, these controls can now be activated. Available are... ",
+ "#MUD4\\MUD4_059#That may be, Doctor, but if you will recall, all the Enterprise's different stations link into the same computer network bank and...",
+ "#MUD4\\MUD4_060#These people have a fixation for the number six, and even divisors and multiplicands thereof: threes and twelves in particular. I believe this may be the necessary first clue to understanding the aliens.",
+ "#MUD4\\MUD4_061#This is clearly the control center for the ship, Captain. I cannot deduce much information, but I do observe two things.",
+ "#MUD4\\MUD4_062#This station definitely is configured differently from the one beside me.",
+ "#MUD4\\MUD4_063#We have done quite well so far, Captain. ",
+ "#MUD4\\MUD4_064#Because I am going to turn over a selection of samples to the Kornephorous Life Sciences University?",
+ "#MUD4\\MUD4_065#Captain Kirk! I seem to be missing a Miracle De-Grimer! Surely you're not stooping to thievery, are you, Captain?",
+ "#MUD4\\MUD4_066#Captain Kirk! I was hoping to see you. I'm leaving soon and wanted to say thanks for the escort. Ta-ta, and I hope we never have to cross paths again, Captain.",
+ "#MUD4\\MUD4_067#Captain!! Two.",
+ "#MUD4\\MUD4_068#Consider it done. You have my word, Captain. Now I'm going to pick up just a few things. Insignificant things, really! Then I'll be gone. Farewell, Captain! May your path be always trouble-free, until we meet again.",
+ "#MUD4\\MUD4_069#I understand. No problem. Adieu, Captain!",
+ "#MUD4\\MUD4_070#Uh... of course. One of everything I've found here.",
+ "#MUD4\\MUD4_071#Well, Captain, I did manage to take a download of the computer before I accidentally damaged it. If you'll just let me go back to my ship, I can upload it to the Enterprise's computers from there.",
+ "#MUD4\\MUD4_072#What! Where's the profit in that, Captain?",
+ "#MUD4\\MUD4_073#You drive a hard bargain, Captain. It's a deal.",
+ "#MUD4\\MUD4_074#You're. Kidding. Are you kidding, Captain?",
+ "#MUD4\\MUD4_075#I don't believe this is the weapons center, Captain. There appears to be one, but it's evidently located elsewhere on the ship. I can't make anything more of these controls.",
+ "#MUD4\\MUD4_076#This may have been their bridge, but this sure doesn't look like the Enterprise. ",
+ "#MUD4\\MUD4_A29#Very well, bring us home, Mr. Scott.",
+ "#MUD4\\MUD4_S02#The Elasi pirates have been driven off, Captain. We have damage, and injuries among the crew. We just arrived back here a few minutes ago, and we've been trying to raise you on the communicators.",
+ "#MUD4\\MUD4_S03#The neutron star is causing more and more problems, Captain. I would recommend beaming over at your earliest possible convenience.",
+ "#MUD4\\MUD4_S04#We can do it, Captain, no problem. At least right now, but the situation is only going to get worse. Are you ready to beam over now?",
+ "#MUD4\\MUD4N000#A control console from which operators run the ship.",
+ "#MUD4\\MUD4N001#Dr. McCoy is still frowning. ",
+ "#MUD4\\MUD4N002#Dust and grease lifts off the surface, leaving this item clean as new.",
+ "#MUD4\\MUD4N003#James T. Kirk, Captain of the USS Enterprise. ",
+ "#MUD4\\MUD4N004#Lieutenant Buchert looks intensely at these controls, and suppresses a childlike impulse to touch them. ",
+ "#MUD4\\MUD4N005#Life support fails completely and you fall unconscious.",
+ "#MUD4\\MUD4N006#Mr. Spock, Vulcan's finest contribution to Starfleet. ",
+ "#MUD4\\MUD4N007#The atmosphere in the ship has dropped below the level needed to sustain life. You drop to unconsciousness and slowly die.",
+ "#MUD4\\MUD4N008#The starfield is the same one you saw from the bridge of the Enterprise, with the binary stars swinging majestically past each other.",
+ "#MUD4\\MUD4N009#These two things fit together like they were made for each other.",
+ "#MUD4\\MUD4N011#This appears to be some sort of engineering instrument. ",
+ "#MUD4\\MUD4N012#You already have a doover.",
+ "#MUD4\\MUD4N013#You see a plain grey screen.",
"#SIN3\\SIN3_012#Can't say I like the decor.",