From 93ca6a7b489fc1f382f963f09e291497b4aa8ece Mon Sep 17 00:00:00 2001 From: Matthew Stewart Date: Fri, 27 Jul 2018 23:27:43 -0400 Subject: STARTREK: SINS2 --- engines/startrek/awaymission.h | 8 +- engines/startrek/room.h | 38 +++++ engines/startrek/rooms/sins0.cpp | 4 +- engines/startrek/rooms/sins1.cpp | 20 +-- engines/startrek/rooms/sins2.cpp | 300 ++++++++++++++++++++++++++++++++++++++- engines/startrek/text.cpp | 66 +++++++++ engines/startrek/text.h | 71 +++++++++ 7 files changed, 489 insertions(+), 18 deletions(-) diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h index ad3206f255..16473d9f8a 100644 --- a/engines/startrek/awaymission.h +++ b/engines/startrek/awaymission.h @@ -524,12 +524,14 @@ struct AwayMission { byte field32; // 0x32 bool field33; // 0x33 bool doorLaserFiredOnce; // 0x34 + bool gotPointsForAccessingTerminal; // 0x35 byte field39; // 0x39 - bool openedDoor; // 0x3d - bool field3e; // 0x3e + bool openedOuterDoor; // 0x3d + bool openedInnerDoor; // 0x3e bool enteredRoom0FirstTime; // 0x42 bool scottyInformedKirkAboutVirus; // 0x43 - bool field44; // 0x44 + bool enteredRoom2FirstTime; // 0x44 + bool field46; // 0x46 bool gotPointsForScanningStatue; // 0x48 bool enteredRoom1FirstTime; // 0x50 int16 missionScore; // 0x52 diff --git a/engines/startrek/room.h b/engines/startrek/room.h index 53c0b07f04..581f9aa361 100644 --- a/engines/startrek/room.h +++ b/engines/startrek/room.h @@ -2228,6 +2228,44 @@ public: // SINS2 void sins2Tick1(); + void sins2UsePhaserOnDoor(); + void sins2UseSTricorderAnywhere(); + void sins2UseKirkOnTerminal(); + void sins2UseSpockOnTerminal(); + void sins2SpockReachedTerminal(); + void sins2SpockUsedTerminal(); + void sins2UseMccoyOnTerminal(); + void sins2UseRedshirtOnTerminal(); + void sins2UseSTricorderOnTerminal(); + void sins2UseSTricorderOnKeypad(); + void sins2UseSTricorderOnDoor(); + void sins2UseKirkOnKeypad(); + void sins2UseSpockOnKeypad(); + void sins2SpockReachedKeypad(); + void sins2EnteredCorrectCode(); + void sins2EnteredIncorrectCode(); + void sins2DoorFinishedOpening(); + void sins2Tick40(); + void sins2LookAnywhere(); + void sins2LookAtOpenDoor(); + void sins2LookAtTerminal(); + void sins2LookAtKeypad(); + void sins2LookAtKirk(); + void sins2LookAtSpock(); + void sins2LookAtMccoy(); + void sins2LookAtRedshirt(); + void sins2TalkToKirk(); + void sins2TalkToSpock(); + void sins2TalkToMccoy(); + void sins2TalkToRedshirt(); + void sins2LookAtDoor(); + void sins2UseSpockOnDoor(); + void sins2UseCommunicator(); + void sins2UseMedkitOnCrewman(); + void sins2UseMTricorderOnCrewman(); + void sins2UseMccoyOnKeypad(); + void sins2UseRedshirtOnKeypad(); + void sins2WalkToDoor(); // SINS3 void sins3Tick1(); diff --git a/engines/startrek/rooms/sins0.cpp b/engines/startrek/rooms/sins0.cpp index 7fb4f08e32..04a931d562 100644 --- a/engines/startrek/rooms/sins0.cpp +++ b/engines/startrek/rooms/sins0.cpp @@ -84,9 +84,9 @@ void Room::sins0Tick1() { if (!_awayMission->sins.enteredRoom0FirstTime) _awayMission->disableInput = 2; - if (_awayMission->sins.field3e) + if (_awayMission->sins.openedInnerDoor) loadActorAnim2(OBJECT_DOOR, "s0dr2", 0, 0); - if (_awayMission->sins.openedDoor) + else if (_awayMission->sins.openedOuterDoor) loadActorAnim2(OBJECT_DOOR, "s0dr1", 0, 0); playMidiMusicTracks(MIDITRACK_27, -3); diff --git a/engines/startrek/rooms/sins1.cpp b/engines/startrek/rooms/sins1.cpp index 76a959f513..356a99c429 100644 --- a/engines/startrek/rooms/sins1.cpp +++ b/engines/startrek/rooms/sins1.cpp @@ -96,13 +96,13 @@ void Room::sins1Tick1() { // BUGFIX: Set this to 2, not 1 (disable input even after walking animation is done) _awayMission->disableInput = 2; - if (_awayMission->sins.openedDoor) { + if (_awayMission->sins.openedOuterDoor) { loadActorAnim2(OBJECT_DOOR, "s1dro", 0, 0); loadMapFile("sins12"); } else loadMapFile("sins1"); - if (_awayMission->sins.field3e) + if (_awayMission->sins.openedInnerDoor) loadActorAnim2(OBJECT_DOOR, "s1ndro", 0, 0); _awayMission->sins.field32 = 1; @@ -153,7 +153,7 @@ void Room::sins1UseSTricorderOnLock() { } void Room::sins1UseSTricorderOnDoor() { - if (!_awayMission->sins.openedDoor) + if (!_awayMission->sins.openedOuterDoor) spockScan(DIR_N, TX_SIN1_019); } @@ -173,24 +173,24 @@ void Room::sins1UseRockOnDoor() { } void Room::sins1UseRedshirtOnKeypad() { - if (!_awayMission->sins.openedDoor) + if (!_awayMission->sins.openedOuterDoor) showText(TX_SPEAKER_MOSHER, TX_SIN1_028); } void Room::sins1UseMccoyOnKeypad() { - if (!_awayMission->sins.openedDoor) + if (!_awayMission->sins.openedOuterDoor) showText(TX_SPEAKER_MCCOY, TX_SIN1_012); } void Room::sins1UseKirkOnKeypad() { - if (!_awayMission->sins.openedDoor) { + if (!_awayMission->sins.openedOuterDoor) { showText(TX_SPEAKER_KIRK, TX_SIN1_001); sins1UseSpockOnKeypad(); } } void Room::sins1UseSpockOnKeypad() { - if (!_awayMission->sins.openedDoor) { + if (!_awayMission->sins.openedOuterDoor) { _awayMission->crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N; walkCrewmanC(OBJECT_SPOCK, 0xfd, 0xad, &Room::sins1SpockReachedKeypad); } @@ -221,7 +221,7 @@ void Room::sins1SpockReachedKeypad() { void Room::sins1EnteredCorrectCode() { _awayMission->crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; walkCrewman(OBJECT_SPOCK, 0xf3, 0xad); - _awayMission->sins.openedDoor = true; + _awayMission->sins.openedOuterDoor = true; loadMapFile("sins12"); loadActorAnimC(OBJECT_DOOR, "s1door", 0, 0, &Room::sins1DoorDoneOpening); playVoc("HUGEDOO2"); @@ -318,7 +318,7 @@ void Room::sins1LookAtLens() { } void Room::sins1UseCommunicator() { - if (!_awayMission->sins.field44) { + if (!_awayMission->sins.enteredRoom2FirstTime) { showText(TX_SPEAKER_KIRK, TX_SIN1_008); showText(TX_SPEAKER_SCOTT, TX_SIN1_S51); showText(TX_SPEAKER_KIRK, TX_SIN1_002); @@ -337,7 +337,7 @@ void Room::sins1UseMTricorderOnCrewman() { } void Room::sins1WalkToDoor() { - if (_awayMission->sins.openedDoor) + if (_awayMission->sins.openedOuterDoor) walkCrewman(OBJECT_KIRK, 0x98, 0x9e, 5); // NOTE: Callback 5 not defined } diff --git a/engines/startrek/rooms/sins2.cpp b/engines/startrek/rooms/sins2.cpp index 976814acab..42102230ff 100644 --- a/engines/startrek/rooms/sins2.cpp +++ b/engines/startrek/rooms/sins2.cpp @@ -22,20 +22,314 @@ #include "startrek/room.h" -#define OBJECT_8 8 +#define OBJECT_DOOR 8 -#define HOTSPOT_20 0x20 +#define HOTSPOT_TERMINAL 0x20 +#define HOTSPOT_DOOR 0x21 +#define HOTSPOT_KEYPAD 0x22 namespace StarTrek { extern const RoomAction sins2ActionList[] = { - { {ACTION_TICK, 1, 0, 0}, &Room::sins2Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::sins2Tick1 }, + { {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_DOOR, 0}, &Room::sins2UsePhaserOnDoor }, + { {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_DOOR, 0}, &Room::sins2UsePhaserOnDoor }, + { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::sins2UseSTricorderAnywhere }, + + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_TERMINAL, 0}, &Room::sins2UseKirkOnTerminal }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_TERMINAL, 0}, &Room::sins2UseSpockOnTerminal }, + { {ACTION_DONE_WALK, 5, 0, 0}, &Room::sins2SpockReachedTerminal }, + { {ACTION_DONE_ANIM, 6, 0, 0}, &Room::sins2SpockUsedTerminal }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_TERMINAL, 0}, &Room::sins2UseMccoyOnTerminal }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_TERMINAL, 0}, &Room::sins2UseRedshirtOnTerminal }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_TERMINAL, 0}, &Room::sins2UseSTricorderOnTerminal }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_KEYPAD, 0}, &Room::sins2UseSTricorderOnKeypad }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DOOR, 0}, &Room::sins2UseSTricorderOnDoor }, + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_KEYPAD, 0}, &Room::sins2UseKirkOnKeypad }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_KEYPAD, 0}, &Room::sins2UseSpockOnKeypad }, + { {ACTION_DONE_WALK, 2, 0, 0}, &Room::sins2SpockReachedKeypad }, + { {ACTION_DONE_ANIM, 3, 0, 0}, &Room::sins2EnteredCorrectCode }, + { {ACTION_DONE_ANIM, 4, 0, 0}, &Room::sins2EnteredIncorrectCode }, + { {ACTION_DONE_ANIM, 1, 0, 0}, &Room::sins2DoorFinishedOpening }, + + { {ACTION_TICK, 40, 0, 0}, &Room::sins2Tick40 }, + { {ACTION_LOOK, 0xff, 0, 0}, &Room::sins2LookAnywhere }, + { {ACTION_LOOK, OBJECT_DOOR, 0, 0}, &Room::sins2LookAtOpenDoor }, + { {ACTION_LOOK, HOTSPOT_TERMINAL, 0, 0}, &Room::sins2LookAtTerminal }, + { {ACTION_LOOK, HOTSPOT_KEYPAD, 0, 0}, &Room::sins2LookAtKeypad }, + { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::sins2LookAtKirk }, + { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::sins2LookAtSpock }, + { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::sins2LookAtMccoy }, + { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::sins2LookAtRedshirt }, + { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::sins2TalkToKirk }, + { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::sins2TalkToSpock }, + { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::sins2TalkToMccoy }, + { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::sins2TalkToRedshirt }, + { {ACTION_LOOK, HOTSPOT_DOOR, 0, 0}, &Room::sins2LookAtDoor }, + + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_DOOR, 0}, &Room::sins2UseSpockOnDoor }, + { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::sins2UseCommunicator }, + { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_KIRK, 0}, &Room::sins2UseMedkitOnCrewman }, + { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::sins2UseMedkitOnCrewman }, + { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_MCCOY, 0}, &Room::sins2UseMedkitOnCrewman }, + { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_REDSHIRT, 0}, &Room::sins2UseMedkitOnCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::sins2UseMTricorderOnCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::sins2UseMTricorderOnCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::sins2UseMTricorderOnCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::sins2UseMTricorderOnCrewman }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_KEYPAD, 0}, &Room::sins2UseMccoyOnKeypad }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_KEYPAD, 0}, &Room::sins2UseRedshirtOnKeypad }, + + { {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::sins2WalkToDoor }, + { {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::sins2WalkToDoor }, }; extern const int sins2NumActions = sizeof(sins2ActionList) / sizeof(RoomAction); void Room::sins2Tick1() { + playVoc("SIN2LOOP"); + playMidiMusicTracks(MIDITRACK_27, -3); + + if (!_awayMission->sins.enteredRoom2FirstTime) + _awayMission->disableInput = 2; + + if (_awayMission->sins.openedInnerDoor) { + // NOTE: callback is never called, since animation never finishes? + loadActorAnimC(OBJECT_DOOR, "s2dro", 0, 0, &Room::sins2DoorFinishedOpening); + loadMapFile("sins22"); + } else { + loadMapFile("sins2"); + } +} + +void Room::sins2UsePhaserOnDoor() { + showText(TX_SPEAKER_SPOCK, TX_SIN2_025); +} + +void Room::sins2UseSTricorderAnywhere() { + spockScan(DIR_S, TX_SIN2_026); +} + +void Room::sins2UseKirkOnTerminal() { + showText(TX_SPEAKER_KIRK, TX_SIN2_002); + sins2UseSpockOnTerminal(); +} + +void Room::sins2UseSpockOnTerminal() { + _awayMission->crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W; + walkCrewmanC(OBJECT_SPOCK, 0x5f, 0xa7, &Room::sins2SpockReachedTerminal); +} + +void Room::sins2SpockReachedTerminal() { + playVoc("EFX14S"); + loadActorAnimC(OBJECT_SPOCK, "susehw", -1, -1, &Room::sins2SpockUsedTerminal); +} + +void Room::sins2SpockUsedTerminal() { + showText(TX_SPEAKER_SPOCK, TX_SIN2_042); + showText(TX_SPEAKER_SPOCK, TX_SIN2_044); + + if (!_awayMission->sins.gotPointsForAccessingTerminal) { + _awayMission->sins.missionScore += 2; + _awayMission->sins.gotPointsForAccessingTerminal = true; + } + + showText(TX_SPEAKER_MCCOY, TX_SIN2_015); + showText(TX_SPEAKER_SPOCK, TX_SIN2_032); + showText(TX_SPEAKER_MOSHER, TX_SIN2_050); + showText(TX_SPEAKER_SPOCK, TX_SIN2_035); + showText(TX_SPEAKER_SPOCK, TX_SIN2_043); + showText(TX_SPEAKER_SPOCK, TX_SIN2_041); + showText(TX_SPEAKER_SPOCK, TX_SIN2_040); + showText(TX_SPEAKER_MCCOY, TX_SIN2_021); + showText(TX_SPEAKER_SPOCK, TX_SIN2_034); + showText(TX_SPEAKER_SPOCK, TX_SIN2_031); + showText(TX_SPEAKER_SPOCK, TX_SIN2_038); + showText(TX_SPEAKER_MCCOY, TX_SIN2_020); + showText(TX_SPEAKER_SPOCK, TX_SIN2_033); + showText(TX_SPEAKER_KIRK, TX_SIN2_007); + showText(TX_SPEAKER_SPOCK, TX_SIN2_037); + showText(TX_SPEAKER_MCCOY, TX_SIN2_022); + showText(TX_SPEAKER_SPOCK, TX_SIN2_029); +} + +void Room::sins2UseMccoyOnTerminal() { + showText(TX_SPEAKER_MCCOY, TX_SIN2_012); +} + +void Room::sins2UseRedshirtOnTerminal() { + showText(TX_SPEAKER_MOSHER, TX_SIN2_045); +} + +void Room::sins2UseSTricorderOnTerminal() { + spockScan(DIR_W, TX_SIN2_009); +} + +void Room::sins2UseSTricorderOnKeypad() { + spockScan(DIR_N, TX_SIN2_028); +} + +void Room::sins2UseSTricorderOnDoor() { + spockScan(DIR_N, TX_SIN2_027); +} + +void Room::sins2UseKirkOnKeypad() { + if (!_awayMission->sins.openedInnerDoor) { + showText(TX_SPEAKER_KIRK, TX_SIN2_001); + sins2UseSpockOnKeypad(); + } +} + +void Room::sins2UseSpockOnKeypad() { + if (!_awayMission->sins.openedInnerDoor) { + walkCrewmanC(OBJECT_SPOCK, 0xc3, 0x9b, &Room::sins2SpockReachedKeypad); + } +} + +void Room::sins2SpockReachedKeypad() { + const char *codes[] = { + "122", nullptr + }; + + int ans = showCodeInputBox(codes); + + if (ans == -1) { // ENHANCEMENT: if nothing was entered, do nothing. + } else if (ans == 1) { + playVoc("EFX28S"); + loadActorAnimC(OBJECT_SPOCK, "susehe", -1, -1, &Room::sins2EnteredCorrectCode); + } else { // Incorrect answer + playVoc("EFX28S"); + loadActorAnimC(OBJECT_SPOCK, "susehe", -1, -1, &Room::sins2EnteredIncorrectCode); + } +} + +void Room::sins2EnteredCorrectCode() { + _awayMission->sins.openedInnerDoor = true; + loadMapFile("sins22"); + playVoc("BIGDOOR3"); + loadActorAnimC(OBJECT_DOOR, "s2door", 0, 0, &Room::sins2DoorFinishedOpening); +} + +void Room::sins2EnteredIncorrectCode() { + showText(TX_SPEAKER_SPOCK, TX_SIN2_024); // BUGFIX: Speaker is spock, not "none" +} + +void Room::sins2DoorFinishedOpening() { + showText(TX_SPEAKER_SPOCK, TX_SIN2_010); +} + +void Room::sins2Tick40() { + if (!_awayMission->sins.enteredRoom2FirstTime) { + _awayMission->disableInput = false; + + showText(TX_SPEAKER_KIRK, TX_SIN2_005); + showText(TX_SPEAKER_SCOTT, TX_SIN2_S05); + showText(TX_SPEAKER_UHURA, TX_SIN2U085); + showText(TX_SPEAKER_KIRK, TX_SIN2_008); + showText(TX_SPEAKER_UHURA, TX_SIN2U097); + showText(TX_SPEAKER_MCCOY, TX_SIN2_F26); + showText(TX_SPEAKER_UHURA, TX_SIN2U096); + showText(TX_SPEAKER_MCCOY, TX_SIN2_019); + showText(TX_SPEAKER_KIRK, TX_SIN2_004); + + _awayMission->sins.enteredRoom2FirstTime = true; + } +} + +void Room::sins2LookAnywhere() { + showText(TX_SIN2N006); +} + +void Room::sins2LookAtOpenDoor() { + showText(TX_SIN2N007); +} + +void Room::sins2LookAtTerminal() { + showText(TX_SIN2N000); +} + +void Room::sins2LookAtKeypad() { + showText(TX_SIN2N001); +} + +void Room::sins2LookAtKirk() { + showText(TX_SIN2N003); +} + +void Room::sins2LookAtSpock() { + showText(TX_SIN2N005); +} + +void Room::sins2LookAtMccoy() { + showText(TX_SIN2N004); +} + +void Room::sins2LookAtRedshirt() { + showText(TX_SIN2N002); +} + +void Room::sins2TalkToKirk() { + showText(TX_SPEAKER_KIRK, TX_SIN2_003); +} + +void Room::sins2TalkToSpock() { + showText(TX_SPEAKER_SPOCK, TX_SIN2_039); + showText(TX_SPEAKER_MCCOY, TX_SIN2_016); +} + +void Room::sins2TalkToMccoy() { + showText(TX_SPEAKER_MCCOY, TX_SIN2_023); + showText(TX_SPEAKER_MOSHER, TX_SIN2_049); +} + +void Room::sins2TalkToRedshirt() { + showText(TX_SPEAKER_MOSHER, TX_SIN2_047); +} + +void Room::sins2LookAtDoor() { + if (!_awayMission->sins.openedInnerDoor) + showText(TX_SIN2N008); +} + +void Room::sins2UseSpockOnDoor() { + if (!_awayMission->sins.openedInnerDoor) { + showText(TX_SPEAKER_SPOCK, TX_SIN2_F12); + showText(TX_SPEAKER_MOSHER, TX_SIN2_048); + showText(TX_SPEAKER_SPOCK, TX_SIN2_030); + } +} + +void Room::sins2UseCommunicator() { + if (!_awayMission->sins.field46) { + showText(TX_SPEAKER_KIRK, TX_SIN2_006); + showText(TX_SPEAKER_SCOTT, TX_SIN2_S16); + showText(TX_SPEAKER_MCCOY, TX_SIN2_017); + } else + showText(TX_SPEAKER_UHURA, TX_SIN1U070); +} + +void Room::sins2UseMedkitOnCrewman() { + showText(TX_SPEAKER_MCCOY, TX_SIN2_014); +} + +void Room::sins2UseMTricorderOnCrewman() { + mccoyScan(DIR_S, TX_SIN3_008); // BUGFIX: original game had wrong audio file path +} + +void Room::sins2UseMccoyOnKeypad() { + if (!_awayMission->sins.openedInnerDoor) + showText(TX_SPEAKER_MCCOY, TX_SIN2_013); +} + +void Room::sins2UseRedshirtOnKeypad() { + if (!_awayMission->sins.openedInnerDoor) + showText(TX_SPEAKER_MOSHER, TX_SIN2_046); +} + +void Room::sins2WalkToDoor() { + if (_awayMission->sins.openedInnerDoor) + walkCrewman(OBJECT_KIRK, 0x9c, 0x8b); } } diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp index 676279443a..ec1963d539 100644 --- a/engines/startrek/text.cpp +++ b/engines/startrek/text.cpp @@ -2433,6 +2433,72 @@ extern const char *const g_gameStrings[] = { "#SIN1\\SIN1U070#Nothing new to report Captain.", + "#SIN2\\SIN2_001#Spock, see what you can do with that lock.", + "#SIN2\\SIN2_002#Spock, see what you can do with this.", + "#SIN2\\SIN2_003#The Lucrs did not seem to have a problem with security.", + "#SIN2\\SIN2_004#Keep working at it, Uhura. Kirk out.", + "#SIN2\\SIN2_005#Report, Scotty. How are things going?", + "#SIN2\\SIN2_006#Scotty, any progress on the phasers?", + "#SIN2\\SIN2_007#Spock is right, Bones. Spock, what are the chances that we could decode the transmission and send a stop code to the base?", + "#SIN2\\SIN2_008#Well done, Uhura.", + "#SIN2\\SIN2_009#A computer terminal, Captain. It uses the lucr alphabet. I think I can decipher it.", + "#SIN2\\SIN2_010#Fascinating. If the Federation language studies were correct, the ideograph for the word \"Scythe\" in the Lucrs language is the 17th symbol in their alphabet. That corresponds with 122 in base 3.", + "#SIN2\\SIN2_012#Damn it Jim, I'm a surgeon not a alien computer science specialist.", + "#SIN2\\SIN2_013#I think Spock would have a better chance at cracking that, Jim.", + "#SIN2\\SIN2_014#We're safe from the cosmic radiation, Jim.", + "#SIN2\\SIN2_015#22%? That's very low -- hardly something to brag about.", + "#SIN2\\SIN2_016#At least we won't have to worry about suffocating.", + "#SIN2\\SIN2_017#By then, Proxtrey could be a dead planet.", + "#SIN2\\SIN2_019#Finally, someone who appreciates me!", + "#SIN2\\SIN2_020#Jim, let's return to the ship and blast this place to destroy its weapons.", + "#SIN2\\SIN2_021#So why has the base been activated again?", + "#SIN2\\SIN2_022#Spock!", + "#SIN2\\SIN2_023#This place does seem to provide protection against cosmic rays.", + "#SIN2\\SIN2_024#That did not work, Captain. It is probable this lock also uses a number of some significance.", + "#SIN2\\SIN2_025#The door will easily withstand our phasers, Captain.", + "#SIN2\\SIN2_026#The interior of the security lock is unremarkable and well preserved.", + "#SIN2\\SIN2_027#This door is similar to the one on the outside of the securelock except that it has not weathered over the years. Electrical panels indicate the keypad on the right controls the door.", + "#SIN2\\SIN2_028#This keypad is fully functional and controls the door. Its entry code is in base three.", + "#SIN2\\SIN2_029#1.327 million to one, provided the archaeological studies about Lucrs languages are correct. Our other option is to get into this base and see if we can bring the computers down.", + "#SIN2\\SIN2_030#Actually, Ensign, they differ from your culture only in that their language was explicit in their expressions of dominance and submission, rather than implied.", + "#SIN2\\SIN2_031#Because it does not recognize them, it assumes the Sofs are still active.", + "#SIN2\\SIN2_032#Doctor, in base 3, 22/100 is equivalent to 8 out of 9 or 88%. I would think that quite satisfactory given this base's probable mission of destroying the Sof forces on Proxtrey.", + "#SIN2\\SIN2_033#Doctor, this moon is a god to the people down there. If we destroy it we will violate the Prime Directive.", + "#SIN2\\SIN2_034#Given the damage to the moon, its slow rotation and orbit, it has never realized the war is over. On this pass, for the first time, it has detected radio-wave transmissions from Proxtrey.", + "#SIN2\\SIN2_035#If the Lucrs built this base with a clock that told the time by measuring the moon's rotational speed or the gravitational forces generated by Proxtrey and the sun, the computer may have calculated only a week of time has passed since its first action. I might be able to learn more with another look at the console.", + "#SIN2\\SIN2_037#In Trinary or Decimal?", + "#SIN2\\SIN2_038#Its transmission to the planet, I would assume, was some sort of a check beacon to see if it should continue its mission.", + "#SIN2\\SIN2_039#My tricorder is picking up large supplies of frozen oxygen, nitrogen, and carbon dioxide beneath the surface. Enough to last many centuries.", + "#SIN2\\SIN2_040#One Sof strike did, in fact, hit the moon and deflected it from its orbit. It has been dormant since then.", + "#SIN2\\SIN2_041#The Sofs managed to infiltrate the base. however, their actions triggered Scythe's auto-attack mechanisms, and initiated a holocaust that nearly annihilated the planet. ", + "#SIN2\\SIN2_042#The console reports the following: ", + "#SIN2\\SIN2_043#There is a substantial amount of data here, but in summary, Scythe was created by the Lucrs as a launching platform for missiles to keep the Sofs subjugated to their influence.", + "#SIN2\\SIN2_044#Welcome to Orbital Missile Base. Codename: Scythe. This base has been operational for the past week. It has completed 1 successful fire mission. Estimation of success is at 22/100.", + "#SIN2\\SIN2_045#I think Mr. Spock would have a better idea of how to operate that, Captain.", + "#SIN2\\SIN2_046#I'm just a security officer, Sir.", + "#SIN2\\SIN2_047#We appear to be in some type of Security Lock. No defensive systems are apparent here, but considering the size of the doors, they probably don't need them!", + "#SIN2\\SIN2_048#Dominance seemed to be very important to these people. No wonder the Lucr were so war-like.", + "#SIN2\\SIN2_049#I don't see why they bothered putting an atmosphere here, Captain. There hasn't even been bacteria here in centuries, let alone humanoids.", + "#SIN2\\SIN2_050#It says the base has been operational for a week, but this has been here for a thousand years.", + "#SIN2\\SIN2_F12#This says: \"Dominant People only to dominate things beyond >, 054; uhura voice substitute) + TX_SIN2_F12, + TX_SIN2_F26, + TX_SIN2_S05, + TX_SIN2_S16, + TX_SIN2N000, + TX_SIN2N001, + TX_SIN2N002, + TX_SIN2N003, + TX_SIN2N004, + TX_SIN2N005, + TX_SIN2N006, + TX_SIN2N007, + TX_SIN2N008, + TX_SIN2U085, + TX_SIN2U096, + TX_SIN2U097, + // UNUSED: sin2_b35.voc (same as 036) + + + TX_SIN3_008, TX_SIN3_012, -- cgit v1.2.3