mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-23 19:16:21 +00:00
STARTREK: TRIAL1
This commit is contained in:
parent
0f3efc0e55
commit
3cccf65179
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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_";
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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.",
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user