From a636aacf5161161180bd948c7f72bc8acd0113db Mon Sep 17 00:00:00 2001 From: Matthew Stewart Date: Thu, 28 Jun 2018 23:17:09 -0400 Subject: STARTREK: MUDD4 --- engines/startrek/awaymission.cpp | 2 +- engines/startrek/awaymission.h | 7 +- engines/startrek/room.h | 51 ++++ engines/startrek/rooms/function_map.h | 74 +++++ engines/startrek/rooms/mudd0.cpp | 9 +- engines/startrek/rooms/mudd1.cpp | 4 +- engines/startrek/rooms/mudd3.cpp | 9 +- engines/startrek/rooms/mudd4.cpp | 540 +++++++++++++++++++++++++++++++++- engines/startrek/startrek.cpp | 2 +- engines/startrek/text.h | 187 +++++++++++- 10 files changed, 869 insertions(+), 16 deletions(-) (limited to 'engines/startrek') 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#<>", + "#MUD4\\MUD4_003#<>", + "#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#<>", + "#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#<>", + "#MUD4\\MUD4_039#<>", + "#MUD4\\MUD4_040#<>", + "#MUD4\\MUD4_041#<>", + "#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.", -- cgit v1.2.3