aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Stewart2018-07-06 23:54:00 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit3cccf651791fee66e7ad1d6fd1f9927d73d26b06 (patch)
treea6b3e9a2637386dd81a4fc7599c7fbd60eabf253
parent0f3efc0e55d07fe77f5defb5b40053c1b403694f (diff)
downloadscummvm-rg350-3cccf651791fee66e7ad1d6fd1f9927d73d26b06.tar.gz
scummvm-rg350-3cccf651791fee66e7ad1d6fd1f9927d73d26b06.tar.bz2
scummvm-rg350-3cccf651791fee66e7ad1d6fd1f9927d73d26b06.zip
STARTREK: TRIAL1
-rw-r--r--engines/startrek/awaymission.h17
-rw-r--r--engines/startrek/room.cpp4
-rw-r--r--engines/startrek/room.h84
-rw-r--r--engines/startrek/rooms/trial0.cpp6
-rw-r--r--engines/startrek/rooms/trial1.cpp683
-rw-r--r--engines/startrek/text.h184
6 files changed, 973 insertions, 5 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 4af027015b..d64de68c1b 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -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;
};
};
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index dd53b47d38..ebd3074e5f 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -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_";
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 94a1ea6f54..e3c0a96f89 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -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();
diff --git a/engines/startrek/rooms/trial0.cpp b/engines/startrek/rooms/trial0.cpp
index a6a2741945..6d042bd5ff 100644
--- a/engines/startrek/rooms/trial0.cpp
+++ b/engines/startrek/rooms/trial0.cpp
@@ -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);
}
diff --git a/engines/startrek/rooms/trial1.cpp b/engines/startrek/rooms/trial1.cpp
index 2df16b84af..e33c54d4ef 100644
--- a/engines/startrek/rooms/trial1.cpp
+++ b/engines/startrek/rooms/trial1.cpp
@@ -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);
}
}
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index 3570863f47..766e6e6eb5 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -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.",