STARTREK: TRIAL1

This commit is contained in:
Matthew Stewart 2018-07-06 23:54:00 -04:00 committed by Eugene Sandulenko
parent 0f3efc0e55
commit 3cccf65179
6 changed files with 973 additions and 5 deletions

View File

@ -264,9 +264,22 @@ struct AwayMission {
} feather;
struct {
int16 field29; // 0x29
int16 missionScore; // 0x29
int16 field2b; // 0x2b
int16 missionScore; // 0x5f
bool entityDefeated; // 0x31: Used iron rod on the energy being
bool doorOpen; // 0x32
bool scannedLock; // 0x33
// 0: Don't know the door code yet
// 2: Will just open the door when the keypad is used
// 5: Will activate the unknown program when the keypad is used
byte doorCodeBehaviour; // 0x34
bool forceFieldDown; // 0x5d
bool uhuraAnalyzedCode; // 0x5e
int16 field5f; // 0x5f
bool gotPointsForGettingRod; // 0x61
bool gotPointsForCoatingRodWithIron; // 0x62
} trial;
};
};

View File

@ -466,6 +466,10 @@ void Room::playVoc(Common::String filename) {
_vm->_sound->playVoc(filename);
}
void Room::stopAllVocSounds() {
_vm->_sound->stopAllVocSounds();
}
void Room::spockScan(int direction, TextRef text, bool changeDirection) {
const char *dirs = "nsew";
Common::String anim = "sscan_";

View File

@ -133,6 +133,7 @@ private:
void endMission(int16 score, int16 arg2, int16 arg3); // Cmd 0x11
void showGameOverMenu(); // Cmd 0x12
void playVoc(Common::String filename); // Cmd 0x15
void stopAllVocSounds(); // Cmd 0x17
// Helper functions for repetitive stuff.
@ -1755,6 +1756,89 @@ public:
// TRIAL1
void trial1Tick1();
void trial1Tick50();
void trial1DoorOpened();
void trial1TouchedHotspot0();
void trial1KirkDied();
void trial1TouchedHotspot1();
void trial1GetRod();
void trial1ReachedRod();
void trial1PickedUpRod();
void trial1LookAtKirk();
void trial1LookAtSpock();
void trial1LookAtMccoy();
void trial1LookAtRedshirt();
void trial1LookAtWall();
void trial1LookAtFloor();
void trial1LookAtRods();
void trial1LookAtDoor();
void trial1LookAtLock();
void trial1LookAtEntity();
void trial1LookAtMoltenRock();
void trial1TalkToKirk();
void trial1TalkToSpock();
void trial1TalkToMccoy();
void trial1TalkToRedshirt();
void trial1TalkToEntity();
void trial1UsePhaserOnCrewman();
void trial1UsePhaserOnEntity();
void trial1UsePhaserOnWall();
void trial1UseStunPhaserOnFloor();
void trial1ReachedFloorToUseStunPhaser();
void trial1DoneShootingFloorWithStunPhaser();
void trial1UseKillPhaserOnFloor();
void trial1ReachedFloorToUseKillPhaser();
void trial1DoneShootingFloorWithKillPhaser();
void trial1UsePhaserOnRod();
void trial1UsePhaserOnDoor();
void trial1UsePhaserOnLock();
void trial1UseMTricorderOnKirk();
void trial1UseMTricorderOnSpock();
void trial1UseMTricorderOnMccoy();
void trial1UseMTricorderOnRedshirt();
void trial1UseMTricorderOnEntity();
void trial1UseSTricorderOnWall();
void trial1UseSTricorderOnEntity();
void trial1UseSTricorderOnRods();
void trial1UseSTricorderOnFloor();
void trial1UseSTricorderOnDoor();
void trial1UseSTricorderOnLock();
void trial1UseCommunicator();
void trial1UseMccoyOnEntity();
void trial1UseMccoyOnLock();
void trial1UseMccoyOnFloor();
void trial1UseSpockOnEntity();
void trial1UseSpockOnLock();
void trial1SpockReachedKeypad();
void trial1SpockUsedKeypad();
void trial1SpockReachedKeypadWithExtraProgram();
void trial1SpockUsedKeypadWithExtraProgram();
void trial1UseSpockOnFloor();
void trial1UseRedshirtOnEntity();
void trial1UseRedshirtOnLock();
void trial1RedshirtReachedKeypad();
void trial1RedshirtUsedKeypad();
void trial1RedshirtReachedKeypadWithExtraProgram();
void trial1RedshirtUsedKeypadWithExtraProgram();
void trial1UseRedshirtOnFloor();
void trial1UseRodOnMccoy();
void trial1UseRodOnSpock();
void trial1UseRodOnRedshirt();
void trial1UseRodOnFloorOrWall();
void trial1UseWoodRodOnEntity();
void trial1ReachedPositionToThrowWoodRod();
void trial1DoneThrowingWoodRod();
void trial1UseWoodRodOnLock();
void trial1UseWoodRodOnMoltenRock();
void trial1ReachedMoltenRock();
void trial1DoneCoatingWoodRod();
void trial1UseIronRodOnEntity();
void trial1ReachedPositionToThrowIronRod();
void trial1DoneThrowingIronRod();
void trial1UseIronRodOnLock();
void trial1GetThrownIronRod();
void trial1WalkToDoor();
void trial1UseMedkit();
// TRIAL2
void trial2Tick1();

View File

@ -197,10 +197,10 @@ void Room::trial0ReachedRoomCenter() {
playMidiMusicTracks(2, -1);
showText(TX_SPEAKER_VLICT, TX_TRI0_049);
showText(TX_SPEAKER_VLICT, TX_TRI0_044);
_vm->_awayMission.trial.missionScore = 0;
_vm->_awayMission.trial.field5f = 0;
// FIXME: Are these parameters in the right order?
endMission(_vm->_awayMission.trial.field29, _vm->_awayMission.trial.field2b, 0);
endMission(_vm->_awayMission.trial.missionScore, _vm->_awayMission.trial.field2b, 0);
}
}
@ -279,10 +279,12 @@ void Room::trial0UsePhaserOrRock() {
}
void Room::trial0UseSnakeOnVlict() {
// Unused, since the snake item doesn't carry over to the courtroom
showText(TX_SPEAKER_VLICT, TX_TRI4_076);
}
void Room::trial0UseSnakeOnGuard() {
// Unused, since the snake item doesn't carry over to the courtroom
showText(TX_SPEAKER_KLINGON_GUARD, TX_TRI0_F24);
}

View File

@ -22,16 +22,697 @@
#include "startrek/room.h"
#define OBJECT_ENTITY 8
#define OBJECT_MOLTEN_ROCK 9
#define OBJECT_DOOR 10
#define OBJECT_THROWN_IRON_ROD 11
#define HOTSPOT_DOOR 0x20
#define HOTSPOT_LOCK 0x21
#define HOTSPOT_RODS 0x22
#define HOTSPOT_WALL 0x23
#define HOTSPOT_FLOOR 0x24
namespace StarTrek {
extern const RoomAction trial1ActionList[] = {
{ {ACTION_TICK, 1, 0, 0}, &Room::trial1Tick1 },
{ {ACTION_TICK, 1, 0, 0}, &Room::trial1Tick1 },
{ {ACTION_TICK, 50, 0, 0}, &Room::trial1Tick50 },
{ {ACTION_DONE_ANIM, 9, 0, 0}, &Room::trial1DoorOpened },
{ {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::trial1TouchedHotspot0 },
{ {ACTION_DONE_ANIM, 1, 0, 0}, &Room::trial1KirkDied },
{ {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::trial1TouchedHotspot1 },
{ {ACTION_GET, HOTSPOT_RODS, 0, 0}, &Room::trial1GetRod },
{ {ACTION_DONE_WALK, 4, 0, 0}, &Room::trial1ReachedRod },
{ {ACTION_DONE_ANIM, 5, 0, 0}, &Room::trial1PickedUpRod },
{ {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::trial1LookAtKirk },
{ {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::trial1LookAtSpock },
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::trial1LookAtMccoy },
{ {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::trial1LookAtRedshirt },
{ {ACTION_LOOK, HOTSPOT_WALL, 0, 0}, &Room::trial1LookAtWall },
{ {ACTION_LOOK, HOTSPOT_FLOOR, 0, 0}, &Room::trial1LookAtFloor },
{ {ACTION_LOOK, HOTSPOT_RODS, 0, 0}, &Room::trial1LookAtRods },
{ {ACTION_LOOK, HOTSPOT_DOOR, 0, 0}, &Room::trial1LookAtDoor },
{ {ACTION_LOOK, HOTSPOT_LOCK, 0, 0}, &Room::trial1LookAtLock },
{ {ACTION_LOOK, OBJECT_ENTITY, 0, 0}, &Room::trial1LookAtEntity },
{ {ACTION_LOOK, OBJECT_MOLTEN_ROCK, 0, 0}, &Room::trial1LookAtMoltenRock },
{ {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::trial1TalkToKirk },
{ {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::trial1TalkToSpock },
{ {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::trial1TalkToMccoy },
{ {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::trial1TalkToRedshirt },
{ {ACTION_TALK, OBJECT_ENTITY, 0, 0}, &Room::trial1TalkToEntity },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_KIRK, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_KIRK, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_SPOCK, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_SPOCK, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_MCCOY, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_REDSHIRT, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_REDSHIRT, 0}, &Room::trial1UsePhaserOnCrewman },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_ENTITY, 0}, &Room::trial1UsePhaserOnEntity },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_ENTITY, 0}, &Room::trial1UsePhaserOnEntity },
{ {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_WALL, 0}, &Room::trial1UsePhaserOnWall },
{ {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_WALL, 0}, &Room::trial1UsePhaserOnWall },
{ {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_FLOOR, 0}, &Room::trial1UseStunPhaserOnFloor },
{ {ACTION_DONE_WALK, 12, 0, 0}, &Room::trial1ReachedFloorToUseStunPhaser },
{ {ACTION_DONE_ANIM, 13, 0, 0}, &Room::trial1DoneShootingFloorWithStunPhaser },
{ {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_FLOOR, 0}, &Room::trial1UseKillPhaserOnFloor },
{ {ACTION_DONE_WALK, 14, 0, 0}, &Room::trial1ReachedFloorToUseKillPhaser },
{ {ACTION_DONE_ANIM, 15, 0, 0}, &Room::trial1DoneShootingFloorWithKillPhaser },
{ {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_RODS, 0}, &Room::trial1UsePhaserOnRod },
{ {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_RODS, 0}, &Room::trial1UsePhaserOnRod },
{ {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_DOOR, 0}, &Room::trial1UsePhaserOnDoor },
{ {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_DOOR, 0}, &Room::trial1UsePhaserOnDoor },
{ {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_LOCK, 0}, &Room::trial1UsePhaserOnLock },
{ {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_LOCK, 0}, &Room::trial1UsePhaserOnLock },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::trial1UseMTricorderOnKirk },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::trial1UseMTricorderOnSpock },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::trial1UseMTricorderOnMccoy },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::trial1UseMTricorderOnRedshirt },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_ENTITY, 0}, &Room::trial1UseMTricorderOnEntity },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_WALL, 0}, &Room::trial1UseSTricorderOnWall },
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_ENTITY, 0}, &Room::trial1UseSTricorderOnEntity },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_RODS, 0}, &Room::trial1UseSTricorderOnRods },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_FLOOR, 0}, &Room::trial1UseSTricorderOnFloor },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DOOR, 0}, &Room::trial1UseSTricorderOnDoor },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_LOCK, 0}, &Room::trial1UseSTricorderOnLock },
{ {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::trial1UseCommunicator },
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_ENTITY, 0}, &Room::trial1UseMccoyOnEntity },
{ {ACTION_USE, OBJECT_MCCOY, HOTSPOT_LOCK, 0}, &Room::trial1UseMccoyOnLock },
{ {ACTION_USE, OBJECT_MCCOY, HOTSPOT_FLOOR, 0}, &Room::trial1UseMccoyOnFloor },
{ {ACTION_USE, OBJECT_SPOCK, OBJECT_ENTITY, 0}, &Room::trial1UseSpockOnEntity },
{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_LOCK, 0}, &Room::trial1UseSpockOnLock },
{ {ACTION_DONE_WALK, 18, 0, 0}, &Room::trial1SpockReachedKeypad },
{ {ACTION_DONE_ANIM, 19, 0, 0}, &Room::trial1SpockUsedKeypad },
{ {ACTION_DONE_WALK, 20, 0, 0}, &Room::trial1SpockReachedKeypadWithExtraProgram },
{ {ACTION_DONE_ANIM, 21, 0, 0}, &Room::trial1SpockUsedKeypadWithExtraProgram },
{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_FLOOR, 0}, &Room::trial1UseSpockOnFloor },
{ {ACTION_USE, OBJECT_REDSHIRT, OBJECT_ENTITY, 0}, &Room::trial1UseRedshirtOnEntity },
{ {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_LOCK, 0}, &Room::trial1UseRedshirtOnLock },
{ {ACTION_DONE_WALK, 24, 0, 0}, &Room::trial1RedshirtReachedKeypad },
{ {ACTION_DONE_ANIM, 25, 0, 0}, &Room::trial1RedshirtUsedKeypad },
{ {ACTION_DONE_WALK, 26, 0, 0}, &Room::trial1RedshirtReachedKeypadWithExtraProgram },
{ {ACTION_DONE_ANIM, 27, 0, 0}, &Room::trial1RedshirtUsedKeypadWithExtraProgram },
{ {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_FLOOR, 0}, &Room::trial1UseRedshirtOnFloor },
{ {ACTION_USE, OBJECT_IWROD, OBJECT_MCCOY, 0}, &Room::trial1UseRodOnMccoy },
{ {ACTION_USE, OBJECT_IWROD, OBJECT_SPOCK, 0}, &Room::trial1UseRodOnSpock },
{ {ACTION_USE, OBJECT_IWROD, OBJECT_REDSHIRT, 0}, &Room::trial1UseRodOnRedshirt },
{ {ACTION_USE, OBJECT_IWROD, HOTSPOT_FLOOR, 0}, &Room::trial1UseRodOnFloorOrWall },
{ {ACTION_USE, OBJECT_IWROD, HOTSPOT_WALL, 0}, &Room::trial1UseRodOnFloorOrWall },
{ {ACTION_USE, OBJECT_IWROD, OBJECT_ENTITY, 0}, &Room::trial1UseWoodRodOnEntity },
{ {ACTION_DONE_WALK, 10, 0, 0}, &Room::trial1ReachedPositionToThrowWoodRod },
{ {ACTION_DONE_ANIM, 6, 0, 0}, &Room::trial1DoneThrowingWoodRod },
{ {ACTION_USE, OBJECT_IWROD, HOTSPOT_LOCK, 0}, &Room::trial1UseWoodRodOnLock },
{ {ACTION_USE, OBJECT_IWROD, OBJECT_MOLTEN_ROCK, 0}, &Room::trial1UseWoodRodOnMoltenRock },
{ {ACTION_DONE_WALK, 16, 0, 0}, &Room::trial1ReachedMoltenRock },
{ {ACTION_DONE_ANIM, 17, 0, 0}, &Room::trial1DoneCoatingWoodRod },
{ {ACTION_USE, OBJECT_IIROD, OBJECT_MCCOY, 0}, &Room::trial1UseRodOnMccoy },
{ {ACTION_USE, OBJECT_IIROD, OBJECT_SPOCK, 0}, &Room::trial1UseRodOnSpock },
{ {ACTION_USE, OBJECT_IIROD, OBJECT_REDSHIRT, 0}, &Room::trial1UseRodOnRedshirt },
{ {ACTION_USE, OBJECT_IIROD, HOTSPOT_FLOOR, 0}, &Room::trial1UseRodOnFloorOrWall },
{ {ACTION_USE, OBJECT_IIROD, HOTSPOT_WALL, 0}, &Room::trial1UseRodOnFloorOrWall },
{ {ACTION_USE, OBJECT_IIROD, OBJECT_ENTITY, 0}, &Room::trial1UseIronRodOnEntity },
{ {ACTION_DONE_WALK, 11, 0, 0}, &Room::trial1ReachedPositionToThrowIronRod },
{ {ACTION_DONE_ANIM, 7, 0, 0}, &Room::trial1DoneThrowingIronRod },
{ {ACTION_USE, OBJECT_IIROD, HOTSPOT_LOCK, 0}, &Room::trial1UseIronRodOnLock },
{ {ACTION_GET, OBJECT_THROWN_IRON_ROD, 0, 0}, &Room::trial1GetThrownIronRod },
{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::trial1WalkToDoor },
{ {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::trial1UseMedkit },
// ENHANCEMENT: Implement actions for the door object, not just the hotspot
{ {ACTION_LOOK, OBJECT_DOOR, 0, 0}, &Room::trial1LookAtDoor },
{ {ACTION_USE, OBJECT_IPHASERS, OBJECT_DOOR, 0}, &Room::trial1UsePhaserOnDoor },
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_DOOR, 0}, &Room::trial1UsePhaserOnDoor },
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_DOOR, 0}, &Room::trial1UseSTricorderOnDoor },
{ {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::trial1WalkToDoor },
};
extern const int trial1NumActions = sizeof(trial1ActionList) / sizeof(RoomAction);
void Room::trial1Tick1() {
if (!_vm->_awayMission.trial.doorOpen) {
_vm->_awayMission.disableInput = 2;
loadActorAnim2(OBJECT_DOOR, "t1drc");
}
if (!_vm->_awayMission.trial.entityDefeated) {
loadActorAnim2(OBJECT_ENTITY, "ec", 0x5f, 0xb1, 3); // No callback defined
playVoc("TRI1LOOP");
}
}
void Room::trial1Tick50() {
if (!_vm->_awayMission.trial.doorOpen)
_vm->_awayMission.disableInput = false;
if (!_vm->_awayMission.trial.entityDefeated) {
showText(TX_SPEAKER_BENNIE, TX_TRI1_056);
showText(TX_SPEAKER_SPOCK, TX_TRI1_047);
showText(TX_SPEAKER_MCCOY, TX_TRI1_032);
showText(TX_SPEAKER_KIRK, TX_TRI1_007);
showText(TX_SPEAKER_BENNIE, TX_TRI1_057);
showText(TX_SPEAKER_KIRK, TX_TRI1_010);
showText(TX_SPEAKER_BENNIE, TX_TRI1_055);
}
}
void Room::trial1DoorOpened() { // Called after Spock opens the door
_vm->_awayMission.trial.doorOpen = true;
loadActorStandAnim(OBJECT_DOOR);
}
void Room::trial1TouchedHotspot0() { // Kirk touched the energy thing
if (!_vm->_awayMission.trial.entityDefeated) {
// BUGFIX: Disable input, otherwise you can cancel the death
_vm->_awayMission.disableInput = true;
loadActorAnimC(OBJECT_KIRK, "kkills", -1, -1, &Room::trial1KirkDied);
}
}
void Room::trial1KirkDied() {
showGameOverMenu();
}
void Room::trial1TouchedHotspot1() { // Entered the door
if (_vm->_awayMission.trial.doorOpen) {
_vm->_awayMission.disableInput = true;
loadRoomIndex(2, 2);
}
}
void Room::trial1GetRod() {
_vm->_awayMission.disableInput = true;
walkCrewmanC(OBJECT_KIRK, 0xe9, 0xa9, &Room::trial1ReachedRod);
}
void Room::trial1ReachedRod() {
loadActorAnimC(OBJECT_KIRK, "t1pkup", 0xe9, 0xa9, &Room::trial1PickedUpRod);
giveItem(OBJECT_IWROD);
if (!_vm->_awayMission.trial.gotPointsForGettingRod) {
_vm->_awayMission.trial.gotPointsForGettingRod = true;
_vm->_awayMission.trial.missionScore += 1;
}
}
void Room::trial1PickedUpRod() {
_vm->_awayMission.disableInput = false;
}
void Room::trial1LookAtKirk() {
showText(TX_TRI1N003);
}
void Room::trial1LookAtSpock() {
showText(TX_TRI1N017);
}
void Room::trial1LookAtMccoy() {
showText(TX_TRI1N016);
}
void Room::trial1LookAtRedshirt() {
showText(TX_TRI1N015);
}
void Room::trial1LookAtWall() {
showText(TX_TRI1N011);
}
void Room::trial1LookAtFloor() {
showText(TX_TRI1N006);
}
void Room::trial1LookAtRods() {
showText(TX_TRI1N009);
}
void Room::trial1LookAtDoor() {
showText(TX_TRI1N001);
}
void Room::trial1LookAtLock() {
showText(TX_TRI1N002);
}
void Room::trial1LookAtEntity() {
showText(TX_TRI1N000);
}
void Room::trial1LookAtMoltenRock() {
showText(TX_TRI1N007);
}
void Room::trial1TalkToKirk() {
showText(TX_SPEAKER_KIRK, TX_TRI1_J00);
}
void Room::trial1TalkToSpock() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_046);
showText(TX_SPEAKER_MCCOY, TX_TRI1_034);
}
void Room::trial1TalkToMccoy() {
showText(TX_SPEAKER_MCCOY, TX_TRI1_019);
}
void Room::trial1TalkToRedshirt() {
showText(TX_SPEAKER_BENNIE, TX_TRI1_053);
}
void Room::trial1TalkToEntity() {
showText(TX_SPEAKER_ENTITY, TX_TRI1C001);
}
void Room::trial1UsePhaserOnCrewman() {
showText(TX_SPEAKER_BENNIE, TX_TRI1_048);
}
void Room::trial1UsePhaserOnEntity() {
showText(TX_TRI1N004);
}
void Room::trial1UsePhaserOnWall() {
showText(TX_TRI1N008);
}
void Room::trial1UseStunPhaserOnFloor() {
_vm->_awayMission.disableInput = true;
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_E;
walkCrewmanC(OBJECT_KIRK, 0xca, 0xbc, &Room::trial1ReachedFloorToUseStunPhaser);
}
void Room::trial1ReachedFloorToUseStunPhaser() {
playSoundEffectIndex(SND_PHASSHOT);
loadActorAnimC(OBJECT_KIRK, "t1mlts", 0xca, 0xbc, &Room::trial1DoneShootingFloorWithStunPhaser);
}
void Room::trial1DoneShootingFloorWithStunPhaser() {
_vm->_awayMission.disableInput = false;
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_E;
loadActorStandAnim(OBJECT_KIRK);
}
void Room::trial1UseKillPhaserOnFloor() {
_vm->_awayMission.disableInput = true;
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_E;
walkCrewmanC(OBJECT_KIRK, 0xca, 0xbc, &Room::trial1ReachedFloorToUseKillPhaser);
}
void Room::trial1ReachedFloorToUseKillPhaser() {
playSoundEffectIndex(SND_PHASSHOT);
loadActorAnimC(OBJECT_KIRK, "t1mltk", 0xca, 0xbc, &Room::trial1DoneShootingFloorWithKillPhaser);
}
void Room::trial1DoneShootingFloorWithKillPhaser() {
showText(TX_TRI1N014);
loadActorAnim2(OBJECT_MOLTEN_ROCK, "t1mltd", 0xca, 0xbc);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_E;
loadActorStandAnim(OBJECT_KIRK);
// BUG: Infinite score mechanism
_vm->_awayMission.trial.missionScore += 1;
_vm->_awayMission.disableInput = false;
}
void Room::trial1UsePhaserOnRod() {
showText(TX_TRI1N012);
}
void Room::trial1UsePhaserOnDoor() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_040);
}
void Room::trial1UsePhaserOnLock() {
showText(TX_SPEAKER_MCCOY, TX_TRI1_021);
}
void Room::trial1UseMTricorderOnKirk() {
mccoyScan(DIR_S, TX_TRI1_024, true);
}
void Room::trial1UseMTricorderOnSpock() {
// ENHANCEMENT: Original didn't play tricorder sound, etc
mccoyScan(DIR_S, TX_TRI1_025, true);
}
void Room::trial1UseMTricorderOnMccoy() {
mccoyScan(DIR_S, TX_TRI1_022, true);
}
void Room::trial1UseMTricorderOnRedshirt() {
mccoyScan(DIR_S, TX_TRI1_023, true);
}
void Room::trial1UseMTricorderOnEntity() {
mccoyScan(DIR_S, TX_TRI1_017, true);
}
void Room::trial1UseSTricorderOnWall() {
spockScan(DIR_S, TX_TRI1_043, true);
}
void Room::trial1UseSTricorderOnEntity() {
spockScan(DIR_S, TX_TRI1_012, true);
// BUG: infinite score mechanism
_vm->_awayMission.trial.missionScore += 1;
}
void Room::trial1UseSTricorderOnRods() {
spockScan(DIR_S, TX_TRI1_041, true);
}
void Room::trial1UseSTricorderOnFloor() {
spockScan(DIR_S, TX_TRI1_042, true);
// BUG: infinite score mechanism
_vm->_awayMission.trial.missionScore += 1;
}
void Room::trial1UseSTricorderOnDoor() {
spockScan(DIR_S, TX_TRI1_013, true);
}
void Room::trial1UseSTricorderOnLock() {
spockScan(DIR_S, TX_TRI1_014, true);
if (!_vm->_awayMission.trial.scannedLock) {
_vm->_awayMission.trial.scannedLock = true;
// BUGFIX: Moved this into the if statement (used to be an infinite score mechanism)
_vm->_awayMission.trial.missionScore += 1;
}
}
void Room::trial1UseCommunicator() {
if (_vm->_awayMission.trial.forceFieldDown) {
showText(TX_SPEAKER_UHURA, TX_TRI1U090);
const TextRef choices[] = {
TX_SPEAKER_KIRK,
TX_TRI1_005, TX_TRI1_004, TX_TRI1_009,
TX_BLANK
};
int choice = showText(choices);
if (choice == 0) { // "Beam us back to the enterprise"
_vm->_awayMission.trial.field5f = 1;
endMission(1, 1, 1);
} else if (choice == 1) { // "Beam us to Vlict's position"
showText(TX_SPEAKER_UHURA, TX_TRI1U080);
_vm->_awayMission.disableInput = true;
loadRoomIndex(4, 4);
} // Else don't transport anywhere
} else { // Force field still up
if (_vm->_awayMission.trial.uhuraAnalyzedCode)
showText(TX_SPEAKER_UHURA, TX_TRI1U068);
else {
showText(TX_SPEAKER_UHURA, TX_TRI1U086);
showText(TX_SPEAKER_UHURA, TX_TRI1U106);
showText(TX_SPEAKER_UHURA, TX_TRI1U098);
if (_vm->_awayMission.trial.scannedLock) {
showText(TX_SPEAKER_KIRK, TX_TRI1_011);
showText(TX_SPEAKER_UHURA, TX_TRI1U101);
const TextRef choices[] = {
TX_SPEAKER_KIRK,
TX_TRI1_006, TX_TRI1_002,
TX_BLANK
};
int choice = showText(choices);
if (choice == 0) { // Don't analyze the anomolous program
showText(TX_SPEAKER_UHURA, TX_TRI1U079);
_vm->_awayMission.trial.doorCodeBehaviour = 2;
_vm->_awayMission.trial.uhuraAnalyzedCode = true;
_vm->_awayMission.trial.missionScore += 1;
} else { // Analyze the anomolous program
showText(TX_SPEAKER_UHURA, TX_TRI1U102);
const TextRef choices2[] = {
TX_SPEAKER_KIRK,
TX_TRI1_003, TX_TRI1_008,
TX_BLANK
};
choice = showText(choices2);
if (choice == 0) { // Activate the program
showText(TX_SPEAKER_UHURA, TX_TRI1U095);
_vm->_awayMission.trial.doorCodeBehaviour = 5;
_vm->_awayMission.trial.uhuraAnalyzedCode = true;
_vm->_awayMission.trial.missionScore += 3;
} else { // Don't activate, only open the door
showText(TX_SPEAKER_UHURA, TX_TRI1U079);
_vm->_awayMission.trial.doorCodeBehaviour = 2;
_vm->_awayMission.trial.uhuraAnalyzedCode = true;
_vm->_awayMission.trial.missionScore += 1;
}
}
}
}
}
}
void Room::trial1UseMccoyOnEntity() {
showText(TX_SPEAKER_MCCOY, TX_TRI1_016);
}
void Room::trial1UseMccoyOnLock() {
if (!_vm->_awayMission.trial.entityDefeated)
showText(TX_SPEAKER_MCCOY, TX_TRI1_018);
else if (_vm->_awayMission.trial.doorCodeBehaviour == 0)
showText(TX_SPEAKER_MCCOY, TX_TRI1_020);
else
showText(TX_SPEAKER_MCCOY, TX_TRI1_029);
}
void Room::trial1UseMccoyOnFloor() {
showText(TX_SPEAKER_MCCOY, TX_TRI1_031);
}
void Room::trial1UseSpockOnEntity() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_039);
}
void Room::trial1UseSpockOnLock() {
if (_vm->_awayMission.trial.doorOpen)
showText(TX_SPEAKER_SPOCK, TX_TRI1_038);
else if (!_vm->_awayMission.trial.entityDefeated)
showText(TX_SPEAKER_SPOCK, TX_TRI1_036);
else if (_vm->_awayMission.trial.doorCodeBehaviour == 0)
showText(TX_SPEAKER_SPOCK, TX_TRI1_044);
else if (_vm->_awayMission.trial.doorCodeBehaviour == 2)
walkCrewmanC(OBJECT_SPOCK, 0x1f, 0xb8, &Room::trial1SpockReachedKeypad);
else
walkCrewmanC(OBJECT_SPOCK, 0x1f, 0xb8, &Room::trial1SpockReachedKeypadWithExtraProgram);
}
void Room::trial1SpockReachedKeypad() { // Spock opens the door
playSoundEffectIndex(SND_07);
loadActorAnimC(OBJECT_SPOCK, "susemw", -1, -1, &Room::trial1SpockUsedKeypad);
}
void Room::trial1SpockUsedKeypad() {
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W;
loadActorStandAnim(OBJECT_SPOCK);
playSoundEffectIndex(SND_DOOR1);
loadActorAnimC(OBJECT_DOOR, "t1drco", -1, -1, &Room::trial1DoorOpened);
_vm->_awayMission.trial.doorOpen = true;
}
void Room::trial1SpockReachedKeypadWithExtraProgram() { // Spock activates the unknown program
playSoundEffectIndex(SND_07);
loadActorAnimC(OBJECT_SPOCK, "susemw", -1, -1, &Room::trial1SpockUsedKeypadWithExtraProgram);
}
void Room::trial1SpockUsedKeypadWithExtraProgram() {
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_W;
loadActorStandAnim(OBJECT_SPOCK);
_vm->_awayMission.disableInput = true;
loadRoomIndex(5, 5);
}
void Room::trial1UseSpockOnFloor() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_035);
}
void Room::trial1UseRedshirtOnEntity() {
showText(TX_SPEAKER_BENNIE, TX_TRI1_050);
}
void Room::trial1UseRedshirtOnLock() {
if (_vm->_awayMission.trial.doorOpen)
return;
else if (!_vm->_awayMission.trial.entityDefeated)
showText(TX_SPEAKER_BENNIE, TX_TRI1_051);
else if (_vm->_awayMission.trial.doorCodeBehaviour == 0)
showText(TX_SPEAKER_BENNIE, TX_TRI1_054);
else if (_vm->_awayMission.trial.doorCodeBehaviour == 2)
walkCrewmanC(OBJECT_REDSHIRT, 0x1f, 0xb8, &Room::trial1RedshirtReachedKeypad);
else
walkCrewmanC(OBJECT_REDSHIRT, 0x1f, 0xb8, &Room::trial1RedshirtReachedKeypadWithExtraProgram);
}
void Room::trial1RedshirtReachedKeypad() { // Redshirt opens the lock
playSoundEffectIndex(SND_07);
loadActorAnimC(OBJECT_REDSHIRT, "rusemw", -1, -1, &Room::trial1RedshirtUsedKeypad);
}
void Room::trial1RedshirtUsedKeypad() {
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W;
loadActorStandAnim(OBJECT_REDSHIRT);
playSoundEffectIndex(SND_DOOR1);
loadActorAnimC(OBJECT_DOOR, "t1drco", -1, -1, &Room::trial1DoorOpened);
_vm->_awayMission.trial.doorOpen = true;
}
void Room::trial1RedshirtReachedKeypadWithExtraProgram() {
playSoundEffectIndex(SND_07);
loadActorAnimC(OBJECT_REDSHIRT, "rusemw", -1, -1, &Room::trial1RedshirtUsedKeypadWithExtraProgram);
}
void Room::trial1RedshirtUsedKeypadWithExtraProgram() {
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_W;
loadActorStandAnim(OBJECT_REDSHIRT);
_vm->_awayMission.disableInput = true;
loadRoomIndex(5, 5);
}
void Room::trial1UseRedshirtOnFloor() {
showText(TX_SPEAKER_BENNIE, TX_TRI1_049);
}
void Room::trial1UseRodOnMccoy() {
// ENHANCEMENT: This was originally only voiced with the wooden rod, not the iron rod.
// (This applies to the Spock and Redshirt functions below, too.)
showText(TX_SPEAKER_MCCOY, TX_TRI1_027);
}
void Room::trial1UseRodOnSpock() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_037);
}
void Room::trial1UseRodOnRedshirt() {
showText(TX_SPEAKER_BENNIE, TX_TRI1_052);
}
void Room::trial1UseRodOnFloorOrWall() {
showText(TX_TRI1C002);
}
void Room::trial1UseWoodRodOnEntity() {
_vm->_awayMission.disableInput = true;
walkCrewmanC(OBJECT_KIRK, 0xe9, 0xad, &Room::trial1ReachedPositionToThrowWoodRod);
loseItem(OBJECT_IWROD);
}
void Room::trial1ReachedPositionToThrowWoodRod() {
loadActorAnimC(OBJECT_KIRK, "kthrwr", 0xe9, 0xad, &Room::trial1DoneThrowingWoodRod);
}
void Room::trial1DoneThrowingWoodRod() {
_vm->_awayMission.disableInput = false;
}
void Room::trial1UseWoodRodOnLock() {
showText(TX_TRI1N005);
}
void Room::trial1UseWoodRodOnMoltenRock() {
_vm->_awayMission.disableInput = true;
walkCrewmanC(OBJECT_KIRK, 0xe4, 0xc4, &Room::trial1ReachedMoltenRock);
}
void Room::trial1ReachedMoltenRock() {
loadActorAnimC(OBJECT_KIRK, "t1dip", 0xe4, 0xc4, &Room::trial1DoneCoatingWoodRod);
}
void Room::trial1DoneCoatingWoodRod() {
_vm->_awayMission.disableInput = false;
showText(TX_TRI1N013);
loseItem(OBJECT_IWROD);
giveItem(OBJECT_IIROD);
if (!_vm->_awayMission.trial.gotPointsForCoatingRodWithIron) {
_vm->_awayMission.trial.gotPointsForCoatingRodWithIron = true;
_vm->_awayMission.trial.missionScore += 1;
}
}
void Room::trial1UseIronRodOnEntity() {
_vm->_awayMission.disableInput = true;
walkCrewmanC(OBJECT_KIRK, 0xe9, 0xac, &Room::trial1ReachedPositionToThrowIronRod);
_vm->_awayMission.trial.entityDefeated = true;
loseItem(OBJECT_IIROD);
}
void Room::trial1ReachedPositionToThrowIronRod() {
loadActorAnimC(OBJECT_KIRK, "kthri", 0xe9, 0xac, &Room::trial1DoneThrowingIronRod);
loadActorStandAnim(OBJECT_ENTITY);
}
void Room::trial1DoneThrowingIronRod() {
loadActorAnim(OBJECT_THROWN_IRON_ROD, "t1irod", 0xe9, 0xac, 8); // No callback defined
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_W;
loadActorStandAnim(OBJECT_KIRK);
_vm->_awayMission.disableInput = false;
stopAllVocSounds();
showText(TX_SPEAKER_SPOCK, TX_TRI1_045);
showText(TX_SPEAKER_MCCOY, TX_TRI1_033);
_vm->_awayMission.trial.missionScore += 1;
}
void Room::trial1UseIronRodOnLock() {
showText(TX_TRI1N004);
}
void Room::trial1GetThrownIronRod() {
showText(TX_SPEAKER_SPOCK, TX_TRI1_015);
}
void Room::trial1WalkToDoor() {
if (_vm->_awayMission.trial.doorOpen)
walkCrewman(OBJECT_KIRK, 0x1a, 0xac, 28);
}
void Room::trial1UseMedkit() {
showText(TX_SPEAKER_MCCOY, TX_TRI1_026);
}
}

View File

@ -110,6 +110,7 @@ enum GameStringIDs {
TX_SPEAKER_BENNIE,
TX_SPEAKER_VLICT,
TX_SPEAKER_KLINGON_GUARD,
TX_SPEAKER_ENTITY,
TX_BRIDU146,
@ -2068,6 +2069,101 @@ enum GameStringIDs {
TX_TRI0U075,
// UNUSED (001)
TX_TRI1_002,
TX_TRI1_003,
TX_TRI1_004,
TX_TRI1_005,
TX_TRI1_006,
TX_TRI1_007,
TX_TRI1_008,
TX_TRI1_009,
TX_TRI1_010,
TX_TRI1_011,
TX_TRI1_012,
TX_TRI1_013,
TX_TRI1_014,
TX_TRI1_015,
TX_TRI1_016,
TX_TRI1_017,
TX_TRI1_018,
TX_TRI1_019,
TX_TRI1_020,
TX_TRI1_021,
TX_TRI1_022,
TX_TRI1_023,
TX_TRI1_024,
TX_TRI1_025,
TX_TRI1_026,
TX_TRI1_027,
// UNUSED
TX_TRI1_029,
TX_TRI1_030,
TX_TRI1_031,
TX_TRI1_032,
TX_TRI1_033,
TX_TRI1_034,
TX_TRI1_035,
TX_TRI1_036,
TX_TRI1_037,
TX_TRI1_038,
TX_TRI1_039,
TX_TRI1_040,
TX_TRI1_041,
TX_TRI1_042,
TX_TRI1_043,
TX_TRI1_044,
TX_TRI1_045,
TX_TRI1_046,
TX_TRI1_047,
TX_TRI1_048,
TX_TRI1_049,
TX_TRI1_050,
TX_TRI1_051,
TX_TRI1_052,
TX_TRI1_053,
TX_TRI1_054,
TX_TRI1_055,
TX_TRI1_056,
TX_TRI1_057,
// UNUSED (058 -> 066)
TX_TRI1_J00,
TX_TRI1N000,
TX_TRI1N001,
TX_TRI1N002,
TX_TRI1N003,
TX_TRI1N004,
TX_TRI1N005,
TX_TRI1N006,
TX_TRI1N007,
TX_TRI1N008,
TX_TRI1N009,
// UNUSED
TX_TRI1N011,
TX_TRI1N012,
TX_TRI1N013,
TX_TRI1N014,
TX_TRI1N015,
TX_TRI1N016,
TX_TRI1N017,
// UNUSED (018 -> 019)
TX_TRI1U068,
TX_TRI1U079,
TX_TRI1U080,
TX_TRI1U086,
TX_TRI1U090,
TX_TRI1U095,
TX_TRI1U098,
TX_TRI1U101,
TX_TRI1U102,
TX_TRI1U106,
// UNUSED: TRI1UO68 (that's 'O', not '0'); same as TRI1U068 but before the voice
// filter on the communicator is applied?
// There are also TRI3 audio files in the TRI1 folder?
TX_TRI1C001, // Custom
TX_TRI1C002,
TX_TRI4_076,
@ -2133,6 +2229,7 @@ const char * const g_gameStrings[] = {
"Ensign Bennie",
"Vlict",
"Klingon Guard",
"Entity",
"#BRID\\BRIDU146#Nothing to report, Captain.",
@ -4069,6 +4166,93 @@ const char * const g_gameStrings[] = {
"#TRI0\\TRI0U075#Uhura here. Captain, there's a force field over the planet. We will not be able to beam you aboard.",
"#TRI1\\TRI1_002#Affirmative, Uhura.",
"#TRI1\\TRI1_003#Affirmative.",
"#TRI1\\TRI1_004#Beam us to Vlict's position.",
"#TRI1\\TRI1_005#Beam us back to the Enterprise. Kirk out.",
"#TRI1\\TRI1_006#I want that door open.",
"#TRI1\\TRI1_007#I somehow doubt that Vlict intends for us to survive this, whatever the outcome. We're the only thing that stands between him and the killing of Quetzecoatl that he can justify.",
"#TRI1\\TRI1_008#Negative. Transmit the door entry code only.",
"#TRI1\\TRI1_009#Negative.",
"#TRI1\\TRI1_010#That's not true, Ensign. However, I suspect that Vlict's attack on Hrakkour exceeded his orders. He needs Quetzecoatl as a scapegoat, and he needs a fair trial to avoid an inquiry of his own actions.",
"#TRI1\\TRI1_011#Uhura, prepare to receive a tricorder message. There is a door with an entry coder here; try to analyze the circuits and let the main computer crack the code.",
"#TRI1\\TRI1_012#This creature is composed of electrical fields. I would not recommend approaching it. A metal projectile might disrupt its fields and render it harmless.",
"#TRI1\\TRI1_013#A Klingon entry door, slightly antiquated.",
"#TRI1\\TRI1_014#An entry coder for the door, keyed to a number sequence. The tricorder is unable to determine the code, but can scan the mechanism.",
"#TRI1\\TRI1_015#Captain, I would strongly recommend against disturbing the rod. It could result in awakening the creature or possibly electrocuting you.",
"#TRI1\\TRI1_016#Do you know what ten million volts can do to a man? It can ruin his whole damn day.",
"#TRI1\\TRI1_017#Does not register as a known life form.",
"#TRI1\\TRI1_018#Find someone else to be a volunteer. I've retired.",
"#TRI1\\TRI1_019#How could you do it, Jim? I spent hours trying to save his life, and you just gave him away in seconds to the Klingons!",
"#TRI1\\TRI1_020#I don't know the code.",
"#TRI1\\TRI1_021#Jim! Are you mad? that's our only way out!",
"#TRI1\\TRI1_022#One Male Human, average physical condition.",
"#TRI1\\TRI1_023#He's a Male Human, excellent physical condition.",
"#TRI1\\TRI1_024#Male Human, good physical condition.",
"#TRI1\\TRI1_025#Male Human-Vulcan hybrid. Excellent physical condition.",
"#TRI1\\TRI1_026#Nobody needs healing, Jim, but you will if they harm my patient.",
"#TRI1\\TRI1_027#Ouch!",
"#TRI1\\TRI1_029#This is not in my field of expertise.",
"#TRI1\\TRI1_030#This is not in my field of expertise.",
"#TRI1\\TRI1_031#What the blazes do you want me to do on a rock?",
"#TRI1\\TRI1_032#A test of courage? That is the Klingon way.",
"#TRI1\\TRI1_033#I'll bet it'll be mad.",
"#TRI1\\TRI1_034#Shut up Spock!",
"#TRI1\\TRI1_035#I do not understand the desired course of action.",
"#TRI1\\TRI1_036#If you will observe the position of the creature, Captain, I think that you will find that it prevents access to the keypad.",
"#TRI1\\TRI1_037#Ouch!",
"#TRI1\\TRI1_038#The door is already open Captain.",
"#TRI1\\TRI1_039#The odds of surviving contact with the creature are too small to calculate.",
"#TRI1\\TRI1_040#There is a high probability that shooting the door would be hasardous to our wellbeing.",
"#TRI1\\TRI1_041#These wooden rods are support beams that were not placed.",
"#TRI1\\TRI1_042#This rock has a high iron content.",
"#TRI1\\TRI1_043#This wall was carved from the natural rock.",
"#TRI1\\TRI1_044#We do not know the code, Captain.",
"#TRI1\\TRI1_045#As I suspected, Captain. The creature is in stasis. It should awaken in 3.48 days.",
"#TRI1\\TRI1_046#Captain, I have calculated the odds of surviving this at...",
"#TRI1\\TRI1_047#Not much is known about Hrakkour, Ensign. This would appear to be some sort of a mining installation; that creature might be a native lifeform.",
"#TRI1\\TRI1_048#Captain, my instructor at the Academy always told me that if you don't know what you're going to do with a phaser, you shouldn't draw it.",
"#TRI1\\TRI1_049#Do you want me to arrest it, interrogate it, or beat it up, Captain?",
"#TRI1\\TRI1_050#I refuse, Captain, on the grounds that it might eliminate me.",
"#TRI1\\TRI1_051#I refuse, Captain, on the grounds that it might eliminate me.",
"#TRI1\\TRI1_052#Ouch!",
"#TRI1\\TRI1_053#You handled those Klingons well, sir. We've got them on the run now.",
"#TRI1\\TRI1_054#You want me to smash it? But that's our only way out of here.",
"#TRI1\\TRI1_055#And our deaths will be the only way he can get it. Great.",
"#TRI1\\TRI1_056#What is this place?",
"#TRI1\\TRI1_057#Why should he worry about justification, Captain? He's a Klingon. Murder is as natural to them as breathing!",
"#TRI1\\TRI1_J00#Why do I have the feeling that I'm about to have a bad day?",
"#TRI1\\TRI1N000#A field of static lightning. It seems to be moving in a purposeful manner.",
"#TRI1\\TRI1N001#A slightly antiquated Klingon door, opened by a keycode entry.",
"#TRI1\\TRI1N002#A slightly antiquated Klingon lock-mechanism.",
"#TRI1\\TRI1N003#James T. Kirk, hero of the galaxy!",
"#TRI1\\TRI1N004#No effect.",
"#TRI1\\TRI1N005#No effect.",
"#TRI1\\TRI1N006#The floor is incomplete, made of unrefined, natural rock.",
"#TRI1\\TRI1N007#The melted rock is cooling, but still remains in a molten state.",
"#TRI1\\TRI1N008#The wall is resistant to phaser fire.",
"#TRI1\\TRI1N009#These wooden rods are support beams that were not placed.",
"#TRI1\\TRI1N011#This section of wall was carved by some sort of plasma field.",
"#TRI1\\TRI1N012#You burn one of the rods.",
"#TRI1\\TRI1N013#You coat the rod with molten iron. It hardens quickly.",
"#TRI1\\TRI1N014#You melt some of the rock.",
"#TRI1\\TRI1N015#Your ever dependable crewman, Ensign Bennie.",
"#TRI1\\TRI1N016#Your ever emotional friend, Dr. McCoy.",
"#TRI1\\TRI1N017#Your ever logical friend, Spock.",
"#TRI1\\TRI1U068#Nothing else to report Captain.",
"#TRI1\\TRI1U079#Affirmative sir. We will transmit code when you activate the keycode. Uhura out.",
"#TRI1\\TRI1U080#Affirmative, sir.",
"#TRI1\\TRI1U086#Captain, there is a force field between us and the planet.",
"#TRI1\\TRI1U090#Do you wish to be beamed up now Captain?",
"#TRI1\\TRI1U095#Good luck, Captain.",
"#TRI1\\TRI1U098#Keep us informed, we'll help you all we can. We can analyze any data you gather through the main computer.",
"#TRI1\\TRI1U101#Scan complete. Main computer has the code. We also read an anomaly. Something else has tapped into the keycode. Shall I analyze?",
"#TRI1\\TRI1U102#Sir, we have a secondary code that is nested in the Klingon program. Computer is unable to analyze its function. Shall we broadcast it to you when you activate the keypad?",
"#TRI1\\TRI1U106#We have your position at approximately thirty meters beneath the surface of Hrakkour, in what appears to be the ruins of an archeological dig.",
"Zzzt! Sptttz! Zzzt! Tttt!",
"Clunk.",
"#TRI4\\TRI4_076#You humans have an excellent imagination, but a poor grasp of reality.",