STARTREK: Most of LOVE2 done

This commit is contained in:
Matthew Stewart 2018-06-20 05:51:54 -04:00 committed by Eugene Sandulenko
parent 44b0a4c7bb
commit dc1e44efb9
9 changed files with 1248 additions and 10 deletions

View File

@ -41,7 +41,7 @@ void StarTrekEngine::initAwayMission() {
_roomIndexToLoad = -1;
// Load crew positions for beaming in
initAwayCrewPositions(4);
initAwayCrewPositions(0);
}
void StarTrekEngine::runAwayMission() {

View File

@ -149,12 +149,18 @@ struct AwayMission {
bool freezerOpen; // 0x2f
bool chamberHasDish; // 0x30
byte bottleInNozzle; // 0x31
byte field36; // 0x36
byte field37; // 0x37
bool cabinetOpen; // 0x32
bool gasFeedOn; // 0x33
byte synthesizerProduct; // 0x34
byte field35; // 0x35
byte canister1; // 0x36
byte canister2; // 0x37
bool field41; // 0x41
bool spockAccessedConsole; // 0x49
bool mccoyAccessedConsole; // 0x4a
bool gotPolyberylcarbonate; // 0x4b
bool gotTLDH; // 0x4c (Got romulan laughing gas)
bool gotCure; // 0x4f
int16 missionScore; // 0x52
} love;
};
@ -170,4 +176,12 @@ enum BottleTypes {
BOTTLETYPE_RLG = 4 // Romulan Laughing Gas
};
// Canister types for Love's Labor Jeopardized
enum CanisterTypes {
CANTYPE_NONE = 0,
CANTYPE_O2 = 1,
CANTYPE_H2 = 2,
CANTYPE_N2 = 3
};
#endif

View File

@ -347,6 +347,10 @@ void Room::showBitmapFor5Ticks(const Common::String &bmpName, int priority) {
_vm->_gfx->delSprite(&sprite);
}
bool Room::haveItem(int item) {
return _vm->_itemList[item - 0x40].have;
}
Common::Point Room::getActorPos(int actorIndex) {
return _vm->_actorList[actorIndex].pos;
}

View File

@ -112,6 +112,7 @@ private:
void loadMapFile(const Common::String &name); // Cmd 0x09
void showBitmapFor5Ticks(const Common::String &bmpName, int priority); // Cmd 0x0a
// Command 0x0c: "demon6ShowCase"
bool haveItem(int item); // Cmd 0x0b
Common::Point getActorPos(int actorIndex); // Cmd 0x0d
int16 getRandomWordInRange(int start, int end); // Cmd 0x0e
void playSoundEffectIndex(int soundEffect); // Cmd 0x0f
@ -843,6 +844,97 @@ public:
// LOVE2
void love2Tick1();
void love2TouchedWarp1();
void love2Timer3Expired();
void love2WalkToDoor();
void love2TouchedHotspot0();
void love2DoorReachedOrOpened();
void love2LookAtCabinet();
void love2LookAtDoor();
void love2LookAtSynthesizer();
void love2LookAtAnywhere();
void love2LookAtAntigrav();
void love2LookAtMccoy();
void love2LookAtSpock();
void love2LookAtRedshirt();
void love2LookAtKirk();
void love2LookAtArdak();
void love2LookAtChamber();
void love2LookAtCan1();
void love2LookAtCan2();
void love2TalkToKirk();
void love2TalkToSpock();
void love2TalkToMccoy();
void love2TalkToRedshirt();
void love2UseMTricorderAnywhere();
void love2UseSTricorderAnywhere();
void love2UseKirkOnCabinet();
void love2UseSpockOnCabinet();
void love2UseMccoyOnCabinet();
void love2UseRedshirtOnCabinet();
void love2CrewmanReachedCabinet();
void love2CrewmanAccessedCabinet();
void love2CrewmanOpenedOrClosedCabinet();
void love2UseWrenchOnGasFeed();
void love2ReachedGasFeed();
void love2ChangedGasFeed();
void love2UseO2GasOnCanisterSlot();
void love2UseH2GasOnCanisterSlot();
void love2UseN2GasOnCanisterSlot();
void love2ReachedCanisterSlot();
void love2PutCanisterInSlot1();
void love2PutCanisterInSlot2();
void love2UseAntigravOnCanister1();
void love2ReachedCanisterSlot1ToGet();
void love2TookCanister1();
void love2UseAntigravOnCanister2();
void love2ReachedCanisterSlot2ToGet();
void love2TookCanister2();
void love2UseKirkOnSynthesizer();
void love2UseSpockOnSynthesizer();
void love2UseMccoyOnSynthesizer();
void love2UseRedshirtOnSynthesizer();
void love2CrewmanReachedSynthesizer();
void love2CrewmanUsedSynthesizer();
void love2SpockReachedGasFeeds();
void love2SpockEnabledGasFeeds();
void love2UseSynthesizer();
void love2SynthesizerDoorClosed();
void love2SynthesizerFinished();
void love2FinishedAnimation27();
void love2UsePolyberylcarbonateOnSynthesizerDoor();
void love2KirkReachedSynthesizerWithPolyberylcarbonate();
void love2SynthesizerDoorOpenedWithPolyberylcarbonate();
void love2PutPolyberylcarbonateInSynthesizer();
void love2UseDishesOnSynthesizerDoor();
void love2KirkReachedSynthesizerWithDishes();
void love2SynthesizerDoorOpenedWithDishes();
void love2PutDishesInSynthesizer();
void love2UseSampleOnSynthesizerDoor();
void love2KirkReachedSynthesizerWithSample();
void love2SynthesizerDoorOpenedWithSample();
void love2PutSampleInSynthesizer();
void love2UseAnythingOnSynthesizerDoor();
void love2UseAnythingOnSynthesizer();
void love2GetCanister();
void love2GetAntigrav();
void love2ReachedAntigrav();
void love2GotAntigrav();
void love2GetPolyberylcarbonate();
void love2ReachedPolyberylcarbonate();
void love2GotPolyberylcarbonate();
void love2GetDishes();
void love2ReachedDishes();
void love2GotDishes();
void love2GetSample();
void love2ReachedSample();
void love2GotSample();
void love2GetSynthesizerOutput();
void love2ReachedSynthesizerOutput();
void love2GotSynthesizerOutput();
void love2GetCure();
void love2ReachedCure();
void love2GotCure();
// LOVE3
void love3Tick1();
@ -947,6 +1039,21 @@ private:
byte _1d2b; // 0x1d2b
} love1;
struct {
byte canisterType; // 0xca
byte cb; // 0xcb
bool walkingToDoor; // 0xcc
byte doorOpenCounter; // 0xcd
int16 canisterItem; // 0xce
char canisterAnim[10]; // 0xd0
int16 d2; // 0xd2
char d6[10]; // 0xd6
char d8[10]; // 0xd8
byte _2966; // 0x2966
byte _2967; // 0x2967
} love2;
} _roomVar;
};

View File

@ -946,6 +946,119 @@ RoomAction love1ActionList[] = {
RoomAction love2ActionList[] = {
{ Action(ACTION_TICK, 1, 0, 0), &Room::love2Tick1 },
{ Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::love2TouchedWarp1 },
{ Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::love2Timer3Expired },
{ Action(ACTION_WALK, 10, 0, 0), &Room::love2WalkToDoor },
{ Action(ACTION_WALK, 0x22, 0, 0), &Room::love2WalkToDoor },
{ Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love2TouchedHotspot0 },
{ Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::love2DoorReachedOrOpened },
{ Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love2DoorReachedOrOpened },
{ Action(ACTION_LOOK, 8, 0, 0), &Room::love2LookAtCabinet },
{ Action(ACTION_LOOK, 10, 0, 0), &Room::love2LookAtDoor },
{ Action(ACTION_LOOK, 0x20, 0, 0), &Room::love2LookAtSynthesizer },
{ Action(ACTION_LOOK, -1, 0, 0), &Room::love2LookAtAnywhere },
{ Action(ACTION_LOOK, 14, 0, 0), &Room::love2LookAtAntigrav },
{ Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love2LookAtMccoy },
{ Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love2LookAtSpock },
{ Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love2LookAtRedshirt },
{ Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love2LookAtKirk },
{ Action(ACTION_LOOK, 0x21, 0, 0), &Room::love2LookAtArdak },
{ Action(ACTION_LOOK, 15, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 16, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 18, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 19, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 17, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 9, 0, 0), &Room::love2LookAtChamber },
{ Action(ACTION_LOOK, 12, 0, 0), &Room::love2LookAtCan1 },
{ Action(ACTION_LOOK, 13, 0, 0), &Room::love2LookAtCan2 },
{ Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love2TalkToKirk },
{ Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love2TalkToSpock },
{ Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love2TalkToMccoy },
{ Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love2TalkToRedshirt },
{ Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love2UseMTricorderAnywhere },
{ Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love2UseSTricorderAnywhere },
{ Action(ACTION_USE, OBJECT_KIRK, 8, 0), &Room::love2UseKirkOnCabinet },
{ Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::love2UseSpockOnCabinet },
{ Action(ACTION_USE, OBJECT_MCCOY, 8, 0), &Room::love2UseMccoyOnCabinet },
{ Action(ACTION_USE, OBJECT_REDSHIRT, 8, 0), &Room::love2UseRedshirtOnCabinet },
{ Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::love2CrewmanReachedCabinet },
{ Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::love2CrewmanAccessedCabinet },
{ Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love2CrewmanOpenedOrClosedCabinet },
{ Action(ACTION_USE, OBJECT_IWRENCH, 11, 0), &Room::love2UseWrenchOnGasFeed },
{ Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love2ReachedGasFeed },
{ Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::love2ChangedGasFeed },
{ Action(ACTION_USE, OBJECT_IO2GAS, 0x23, 0), &Room::love2UseO2GasOnCanisterSlot },
{ Action(ACTION_USE, OBJECT_IH2GAS, 0x23, 0), &Room::love2UseH2GasOnCanisterSlot },
{ Action(ACTION_USE, OBJECT_IN2GAS, 0x23, 0), &Room::love2UseN2GasOnCanisterSlot },
{ Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love2ReachedCanisterSlot },
{ Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::love2PutCanisterInSlot1 },
{ Action(ACTION_FINISHED_ANIMATION, 14, 0, 0), &Room::love2PutCanisterInSlot2 },
{ Action(ACTION_USE, OBJECT_IANTIGRA, 12, 0), &Room::love2UseAntigravOnCanister1 },
{ Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love2ReachedCanisterSlot1ToGet },
{ Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::love2TookCanister1 },
{ Action(ACTION_USE, OBJECT_IANTIGRA, 13, 0), &Room::love2UseAntigravOnCanister2 },
{ Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love2ReachedCanisterSlot2ToGet },
{ Action(ACTION_FINISHED_ANIMATION, 16, 0, 0), &Room::love2TookCanister2 },
{ Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love2UseKirkOnSynthesizer },
{ Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love2UseSpockOnSynthesizer },
{ Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love2UseMccoyOnSynthesizer },
{ Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love2UseRedshirtOnSynthesizer },
{ Action(ACTION_FINISHED_WALKING, 13, 0, 0), &Room::love2CrewmanReachedSynthesizer },
{ Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::love2CrewmanUsedSynthesizer },
{ Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::love2SpockReachedGasFeeds },
{ Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::love2SpockEnabledGasFeeds },
{ Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love2SynthesizerDoorClosed },
{ Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love2SynthesizerFinished },
{ Action(ACTION_FINISHED_ANIMATION, 27, 0, 0), &Room::love2FinishedAnimation27 },
// TODO: more
{ Action(ACTION_USE, OBJECT_IPBC, 9, 0), &Room::love2UsePolyberylcarbonateOnSynthesizerDoor },
{ Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love2KirkReachedSynthesizerWithPolyberylcarbonate },
{ Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate },
{ Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::love2PutPolyberylcarbonateInSynthesizer },
{ Action(ACTION_USE, OBJECT_IDISHES, 9, 0), &Room::love2UseDishesOnSynthesizerDoor },
{ Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love2KirkReachedSynthesizerWithDishes },
{ Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love2SynthesizerDoorOpenedWithDishes },
{ Action(ACTION_FINISHED_ANIMATION, 20, 0, 0), &Room::love2PutDishesInSynthesizer },
{ Action(ACTION_USE, OBJECT_ISAMPLE, 9, 0), &Room::love2UseSampleOnSynthesizerDoor },
{ Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love2KirkReachedSynthesizerWithSample },
{ Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love2SynthesizerDoorOpenedWithSample },
{ Action(ACTION_FINISHED_ANIMATION, 21, 0, 0), &Room::love2PutSampleInSynthesizer },
{ Action(ACTION_USE, -1, 9, 0), &Room::love2UseAnythingOnSynthesizerDoor },
{ Action(ACTION_USE, -1, 0x20, 0), &Room::love2UseAnythingOnSynthesizer },
{ Action(ACTION_GET, 13, 0, 0), &Room::love2GetCanister },
{ Action(ACTION_GET, 12, 0, 0), &Room::love2GetCanister },
{ Action(ACTION_GET, 14, 0, 0), &Room::love2GetAntigrav },
{ Action(ACTION_FINISHED_WALKING, 9, 0, 0), &Room::love2ReachedAntigrav },
{ Action(ACTION_FINISHED_ANIMATION, 22, 0, 0), &Room::love2GotAntigrav },
{ Action(ACTION_GET, 16, 0, 0), &Room::love2GetPolyberylcarbonate },
{ Action(ACTION_FINISHED_WALKING, 18, 0, 0), &Room::love2ReachedPolyberylcarbonate },
{ Action(ACTION_FINISHED_ANIMATION, 26, 0, 0), &Room::love2GotPolyberylcarbonate },
{ Action(ACTION_GET, 17, 0, 0), &Room::love2GetDishes },
{ Action(ACTION_FINISHED_WALKING, 17, 0, 0), &Room::love2ReachedDishes },
{ Action(ACTION_FINISHED_ANIMATION, 25, 0, 0), &Room::love2GotDishes },
{ Action(ACTION_GET, 18, 0, 0), &Room::love2GetSample },
{ Action(ACTION_FINISHED_WALKING, 19, 0, 0), &Room::love2ReachedSample },
{ Action(ACTION_FINISHED_ANIMATION, 28, 0, 0), &Room::love2GotSample },
{ Action(ACTION_GET, 15, 0, 0), &Room::love2GetSynthesizerOutput },
{ Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::love2ReachedSynthesizerOutput },
{ Action(ACTION_FINISHED_ANIMATION, 23, 0, 0), &Room::love2GotSynthesizerOutput },
// TODO: test these
{ Action(ACTION_GET, 19, 0, 0), &Room::love2GetCure },
{ Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::love2ReachedCure },
{ Action(ACTION_FINISHED_ANIMATION, 24, 0, 0), &Room::love2GotCure },
// TODO: common code
};
RoomAction love3ActionList[] = {

View File

@ -34,8 +34,8 @@ namespace StarTrek {
void Room::love0Tick1() {
if (!_vm->_awayMission.love.alreadyStartedMission) {
_vm->_awayMission.love.field36 = 1;
_vm->_awayMission.love.field37 = 2;
_vm->_awayMission.love.canister1 = CANTYPE_O2;
_vm->_awayMission.love.canister2 = CANTYPE_H2;
_vm->_awayMission.love.alreadyStartedMission = true;
playVoc("LOV0LOOP"); // FIXME: no audio after first entry?
}

View File

@ -20,16 +20,837 @@
*
*/
// BUGFIX: some of the audio filenames in the text were incorrect? (see text.h)
#include "startrek/room.h"
#define OBJECT_DOOR1 8
#define OBJECT_CABINET 8
#define OBJECT_SYNTHESIZER_DOOR 9
#define OBJECT_DOOR 10
#define OBJECT_GAS_FEED 11
#define OBJECT_CAN1 12
#define OBJECT_CAN2 13
#define OBJECT_ANTIGRAV 14
#define OBJECT_SYNTHESIZER_OUTPUT 15
#define OBJECT_POLYBERYLCARBONATE 16
#define OBJECT_DISHES 17
#define OBJECT_CURESAMPLE 18
#define OBJECT_CURE 19
#define HOTSPOT_CONSOLE 0x20
#define HOTSPOT_SYNTHESIZER 0x20
#define HOTSPOT_ARDAK 0x21
#define HOTSPOT_DOOR 0x22
#define HOTSPOT_CANISTER_SLOT 0x23
namespace StarTrek {
void Room::love2Tick1() {
playVoc("LOV2LOOP");
char canName[10];
switch (_vm->_awayMission.love.canister1) {
case CANTYPE_O2:
strcpy(canName, "o2can");
break;
case CANTYPE_H2:
strcpy(canName, "h2can");
break;
case CANTYPE_N2:
strcpy(canName, "n2can");
break;
default:
break;
}
if (_vm->_awayMission.love.canister1 >= 1 && _vm->_awayMission.love.canister1 <= 3)
loadActorAnim(OBJECT_CAN1, canName, 0xa7, 0xae, 0);
switch (_vm->_awayMission.love.canister2) {
case CANTYPE_O2:
strcpy(canName, "o2can");
break;
case CANTYPE_H2:
strcpy(canName, "h2can");
break;
case CANTYPE_N2:
strcpy(canName, "n2can");
break;
default:
break;
}
if (_vm->_awayMission.love.canister2 >= 1 && _vm->_awayMission.love.canister2 <= 3)
loadActorAnim(OBJECT_CAN2, canName, 0xb1, 0xaf, 0);
if (_vm->_awayMission.love.gasFeedOn)
loadActorAnim(OBJECT_GAS_FEED, "s3r3vo", 0xac, 0x75, 0);
else
loadActorAnim(OBJECT_GAS_FEED, "s3r3vc", 0xac, 0x75, 0);
if (_vm->_awayMission.love.cabinetOpen)
loadActorAnim(OBJECT_CABINET, "s3r3d1o", 0x1e, 0xaf, 0);
else
loadActorAnim(OBJECT_CABINET, "s3r3d1c", 0x1e, 0xaf, 0);
if (_vm->_awayMission.love.cabinetOpen && !haveItem(OBJECT_IANTIGRA))
loadActorAnim(OBJECT_ANTIGRAV, "antigr", 0x1f, 0xa7, 0);
if (_vm->_awayMission.love.field35 != 0)
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2o", 0x8a, 0x8d, 0);
else
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2c", 0x8a, 0x8d, 0);
bool valid = true;
switch (_vm->_awayMission.love.field35) {
case 1:
strcpy(_roomVar.love2.d6, "pbcanm");
_roomVar.love2.d2 = 0x10;
break;
case 2:
strcpy(_roomVar.love2.d6, "dishes");
_roomVar.love2.d2 = 0x11;
break;
case 3:
strcpy(_roomVar.love2.d6, "dishes");
_roomVar.love2.d2 = 0x12;
break;
case 9:
switch (_vm->_awayMission.love.synthesizerProduct) {
case 1:
strcpy(_roomVar.love2.d8, "btle1");
_roomVar.love2.d2 = 0x0f;
break;
case 2:
strcpy(_roomVar.love2.d8, "btle2");
_roomVar.love2.d2 = 0x0f;
break;
case 3:
strcpy(_roomVar.love2.d8, "btle3");
_roomVar.love2.d2 = 0x0f;
break;
case 4:
strcpy(_roomVar.love2.d8, "btle4");
_roomVar.love2.d2 = 0x0f;
break;
default:
strcpy(_roomVar.love2.d8, "cure");
_roomVar.love2.d2 = 0x13;
break;
}
break;
default:
valid = false;
break;
}
if (valid) {
if (_vm->_awayMission.love.field35 == 9)
loadActorAnim2(_roomVar.love2.d2, _roomVar.love2.d8, 0x8a, 0x8b, 0);
else
loadActorAnim2(_roomVar.love2.d2, _roomVar.love2.d6, 0x8a, 0x8b, 0);
}
if (_vm->_awayMission.love.field2c)
_vm->_awayMission.timers[0] = getRandomWordInRange(200, 400);
if (_vm->_awayMission.love.field2d)
_vm->_awayMission.timers[1] = getRandomWordInRange(200, 400);
_vm->_awayMission.timers[2] = 200;
loadActorAnim(OBJECT_DOOR, "s3r3d3a", 0x12a, 0xb5, 0);
_roomVar.love2._2966 = 0xc9;
_roomVar.love2._2967 = 0xb7;
}
void Room::love2TouchedWarp1() {
_vm->_awayMission.disableInput = true;
playSoundEffectIndex(SND_DOOR1);
_vm->_awayMission.timers[3] = 10;
}
void Room::love2Timer3Expired() {
loadRoomIndex(0, 0);
}
void Room::love2WalkToDoor() {
_vm->_awayMission.disableInput = true;
_roomVar.love2.walkingToDoor = true;
walkCrewman(OBJECT_KIRK, 0x127, 0xba, 14);
}
// Triggers door opening
void Room::love2TouchedHotspot0() {
if (_roomVar.love2.walkingToDoor) {
loadActorAnim(OBJECT_DOOR, "s3r3d3", 0x12a, 0xb5, 1);
playSoundEffectIndex(SND_DOOR1);
}
}
void Room::love2DoorReachedOrOpened() {
_roomVar.love2.doorOpenCounter++;
if (_roomVar.love2.doorOpenCounter == 2)
loadRoomIndex(1, 1);
}
void Room::love2LookAtCabinet() {
showText(TX_LOV2N027);
}
void Room::love2LookAtDoor() {
showText(TX_LOV2N001);
}
void Room::love2LookAtSynthesizer() {
showText(TX_LOV2N028);
}
void Room::love2LookAtAnywhere() {
showText(TX_LOV2N026);
}
void Room::love2LookAtAntigrav() {
showText(TX_LOV2N006);
}
void Room::love2LookAtMccoy() {
showText(TX_LOV2N011);
}
void Room::love2LookAtSpock() {
showText(TX_LOV2N014);
}
void Room::love2LookAtRedshirt() {
showText(TX_LOV2N010);
}
void Room::love2LookAtKirk() {
showText(TX_LOV2N009);
}
void Room::love2LookAtArdak() {
showText(TX_LOV2N045);
showText(TX_SPEAKER_SPOCK, TX_LOV2_037);
}
void Room::love2LookAtChamber() {
showText(TX_LOV2N029);
showText(TX_SPEAKER_SPOCK, TX_LOV2_035);
showText(TX_SPEAKER_MCCOY, TX_LOV2_019);
showText(TX_SPEAKER_SPOCK, TX_LOV2_033);
showText(TX_SPEAKER_MCCOY, TX_LOV2_016);
}
void Room::love2LookAtCan1() {
switch (_vm->_awayMission.love.canister1) {
case CANTYPE_O2:
showText(TX_LOV2N004);
break;
case CANTYPE_H2:
showText(TX_LOV2N002);
break;
case CANTYPE_N2:
default:
showText(TX_LOV2N003);
break;
}
}
void Room::love2LookAtCan2() {
switch (_vm->_awayMission.love.canister2) {
case CANTYPE_O2:
showText(TX_LOV2N004);
break;
case CANTYPE_H2:
showText(TX_LOV2N002);
break;
case CANTYPE_N2:
default:
showText(TX_LOV2N003);
break;
}
}
void Room::love2TalkToKirk() {
showText(TX_SPEAKER_KIRK, TX_LOV2_001);
}
void Room::love2TalkToSpock() {
showText(TX_SPEAKER_SPOCK, TX_LOV2_029);
}
void Room::love2TalkToMccoy() {
showText(TX_SPEAKER_MCCOY, TX_LOV2_009);
}
void Room::love2TalkToRedshirt() {
showText(TX_SPEAKER_FERRIS, TX_LOV2_041);
}
void Room::love2UseMTricorderAnywhere() {
if (_vm->_awayMission.love.knowAboutVirus)
mccoyScan(DIR_S, TX_LOV2_008, false);
else
// BUGFIX: should be TX_LOV2_012, but the audio file is missing. Using equivalent
// audio from another room.
mccoyScan(DIR_S, TX_LOV1_010, false);
}
void Room::love2UseSTricorderAnywhere() {
spockScan(DIR_S, TX_LOV2_027, false);
}
void Room::love2UseKirkOnCabinet() {
_roomVar.love2.d2 = OBJECT_KIRK;
walkCrewman(OBJECT_KIRK, 0x2b, 0xbb, 12);
}
void Room::love2UseSpockOnCabinet() {
_roomVar.love2.d2 = OBJECT_SPOCK;
walkCrewman(OBJECT_SPOCK, 0x2b, 0xbb, 12);
}
void Room::love2UseMccoyOnCabinet() {
_roomVar.love2.d2 = OBJECT_MCCOY;
walkCrewman(OBJECT_MCCOY, 0x2b, 0xbb, 12);
}
void Room::love2UseRedshirtOnCabinet() {
_roomVar.love2.d2 = OBJECT_REDSHIRT;
walkCrewman(OBJECT_REDSHIRT, 0x2b, 0xbb, 12);
}
void Room::love2CrewmanReachedCabinet() {
Common::String anim = _vm->getCrewmanAnimFilename(_roomVar.love2.d2, "usehw");
loadActorAnim2(_roomVar.love2.d2, anim, -1, -1, 11);
}
void Room::love2CrewmanAccessedCabinet() {
if (_vm->_awayMission.love.cabinetOpen)
loadActorAnim2(OBJECT_CABINET, "s3r3d4", 0x1e, 0xaf, 2);
else
loadActorAnim2(OBJECT_CABINET, "s3r3d1", 0x1e, 0xaf, 2);
playSoundEffectIndex(SND_DOOR1);
if (_vm->_awayMission.love.cabinetOpen)
loadActorStandAnim(OBJECT_ANTIGRAV);
_vm->_awayMission.love.cabinetOpen = !_vm->_awayMission.love.cabinetOpen;
}
void Room::love2CrewmanOpenedOrClosedCabinet() {
if (_vm->_awayMission.love.cabinetOpen && !haveItem(OBJECT_IANTIGRA))
loadActorAnim(OBJECT_ANTIGRAV, "antigr", 0x1f, 0xa7, 0);
}
void Room::love2UseWrenchOnGasFeed() {
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 1);
}
void Room::love2ReachedGasFeed() {
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 12);
playVoc("MUR3E1S");
}
void Room::love2ChangedGasFeed() {
if (_vm->_awayMission.love.gasFeedOn) {
_vm->_awayMission.love.gasFeedOn = false;
loadActorAnim2(OBJECT_GAS_FEED, "s3r3v2", 0xac, 0x75, 0);
showText(TX_LOV2N007);
}
else {
_vm->_awayMission.love.gasFeedOn = true;
loadActorAnim2(OBJECT_GAS_FEED, "s3r3v1", 0xac, 0x75, 0);
showText(TX_LOV2N008);
}
}
void Room::love2UseO2GasOnCanisterSlot() {
_roomVar.love2.canisterType = CANTYPE_O2;
strcpy(_roomVar.love2.canisterAnim, "o2can");
_roomVar.love2.canisterItem = OBJECT_IO2GAS;
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 3);
}
void Room::love2UseH2GasOnCanisterSlot() {
_roomVar.love2.canisterType = CANTYPE_H2;
strcpy(_roomVar.love2.canisterAnim, "h2can");
_roomVar.love2.canisterItem = OBJECT_IH2GAS;
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 3);
}
void Room::love2UseN2GasOnCanisterSlot() {
_roomVar.love2.canisterType = CANTYPE_N2;
strcpy(_roomVar.love2.canisterAnim, "n2can");
_roomVar.love2.canisterItem = OBJECT_IN2GAS;
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 3);
}
void Room::love2ReachedCanisterSlot() {
if (_vm->_awayMission.love.gasFeedOn)
showText(TX_SPEAKER_SPOCK, TX_LOV2_026);
else {
if (_vm->_awayMission.love.canister1 == CANTYPE_NONE)
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 13);
else if (_vm->_awayMission.love.canister2 == CANTYPE_NONE)
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 14);
else
showText(TX_LOV2N024);
}
}
void Room::love2PutCanisterInSlot1() {
playVoc("SE6FOOD");
loadActorAnim(OBJECT_CAN1, _roomVar.love2.canisterAnim, 0xa7, 0xae, 0);
_vm->_awayMission.love.canister1 = _roomVar.love2.canisterType;
showText(TX_LOV2N034);
loseItem(_roomVar.love2.canisterItem);
}
void Room::love2PutCanisterInSlot2() {
playVoc("SE6FOOD");
loadActorAnim(OBJECT_CAN2, _roomVar.love2.canisterAnim, 0xb1, 0xaf, 0);
_vm->_awayMission.love.canister2 = _roomVar.love2.canisterType;
showText(TX_LOV2N035);
loseItem(_roomVar.love2.canisterItem);
}
void Room::love2UseAntigravOnCanister1() {
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 4);
}
void Room::love2ReachedCanisterSlot1ToGet() {
if (_vm->_awayMission.love.gasFeedOn)
showText(TX_SPEAKER_SPOCK, TX_LOV2_025);
else {
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 15);
// BUGFIX: original game only played this for canister 2
playVoc("SEPLBAT");
}
}
void Room::love2TookCanister1() {
showText(TX_LOV2N030);
loadActorStandAnim(OBJECT_CAN1);
switch (_vm->_awayMission.love.canister1) {
case CANTYPE_O2:
giveItem(OBJECT_IO2GAS);
break;
case CANTYPE_H2:
giveItem(OBJECT_IH2GAS);
break;
case CANTYPE_N2:
default:
giveItem(OBJECT_IN2GAS);
break;
}
}
void Room::love2UseAntigravOnCanister2() {
walkCrewman(OBJECT_KIRK, 0xa8, 0xb7, 5);
}
void Room::love2ReachedCanisterSlot2ToGet() {
if (_vm->_awayMission.love.gasFeedOn)
showText(TX_SPEAKER_SPOCK, TX_LOV2_025);
else {
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 16);
playVoc("SEPLBAT");
}
}
void Room::love2TookCanister2() {
showText(TX_LOV2N031);
loadActorStandAnim(OBJECT_CAN2);
switch (_vm->_awayMission.love.canister2) {
case CANTYPE_O2:
giveItem(OBJECT_IO2GAS);
break;
case CANTYPE_H2:
giveItem(OBJECT_IH2GAS);
break;
case CANTYPE_N2:
default:
giveItem(OBJECT_IN2GAS);
break;
}
}
void Room::love2UseKirkOnSynthesizer() {
_roomVar.love2.d2 = OBJECT_KIRK;
walkCrewman(_roomVar.love2.d2, 0x46, 0xae, 13);
}
void Room::love2UseSpockOnSynthesizer() {
_roomVar.love2.d2 = OBJECT_SPOCK;
walkCrewman(_roomVar.love2.d2, 0x46, 0xae, 13);
}
void Room::love2UseMccoyOnSynthesizer() {
_roomVar.love2.d2 = OBJECT_MCCOY;
walkCrewman(_roomVar.love2.d2, 0x46, 0xae, 13);
}
void Room::love2UseRedshirtOnSynthesizer() {
_roomVar.love2.d2 = OBJECT_REDSHIRT;
walkCrewman(_roomVar.love2.d2, 0x46, 0xae, 13);
}
void Room::love2CrewmanReachedSynthesizer() {
Common::String anim = _vm->getCrewmanAnimFilename(_roomVar.love2.d2, "usemn");
loadActorAnim2(_roomVar.love2.d2, anim, -1, -1, 17);
}
void Room::love2CrewmanUsedSynthesizer() {
if (_vm->_awayMission.love.gasFeedOn) {
love2UseSynthesizer();
}
else {
if (_roomVar.love2.cb == 3) {
if (haveItem(OBJECT_IWRENCH)) {
showText(TX_SPEAKER_SPOCK, TX_LOV2_005);
walkCrewman(OBJECT_SPOCK, 0xa8, 0xb7, 16);
}
else
showText(TX_SPEAKER_SPOCK, TX_LOV2_006);
}
else {
_roomVar.love2.cb++;
showText(TX_LOV2N012);
}
}
}
void Room::love2SpockReachedGasFeeds() {
loadActorAnim2(OBJECT_SPOCK, "susehn", -1, -1, 18);
}
void Room::love2SpockEnabledGasFeeds() {
_vm->_awayMission.love.gasFeedOn = true;
loadActorAnim2(OBJECT_GAS_FEED, "s3r3v1", 0xac, 0x75, 0);
showText(TX_LOV2N008);
walkCrewman(OBJECT_SPOCK, 0xc6, 0xbb, 0);
love2UseSynthesizer();
}
void Room::love2UseSynthesizer() {
if (_vm->_awayMission.love.canister1 != 0) {
if (_vm->_awayMission.love.canister2 != 0) {
// TODO
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 3);
playSoundEffectIndex(SND_DOOR1);
}
else {
playVoc("EFX24");
showText(TX_LOV2N005);
showText(TX_SPEAKER_MCCOY, TX_LOV2_010);
}
}
else {
playVoc("EFX24");
showText(TX_SPEAKER_SPOCK, TX_LOV2N005);
showText(TX_SPEAKER_SPOCK, TX_LOV2_024);
}
}
void Room::love2SynthesizerDoorClosed() {
playVoc("LD1SCAN");
loadActorAnim(OBJECT_SYNTHESIZER_OUTPUT, _roomVar.love2.d8, 0x8a, 0x8d, 4);
_vm->_awayMission.love.field35 = 9;
}
// Final product of synthesizer is produced
void Room::love2SynthesizerFinished() {
switch (_vm->_awayMission.love.synthesizerProduct) {
case BOTTLETYPE_N2O:
showText(TX_LOV2N017);
showText(TX_SPEAKER_SPOCK, TX_LOV2_032);
showText(TX_SPEAKER_MCCOY, TX_LOV2_015);
showText(TX_SPEAKER_SPOCK, TX_LOV2_036);
break;
case BOTTLETYPE_NH3:
showText(TX_LOV2N016);
if (!_vm->_awayMission.redshirtDead) {
showText(TX_SPEAKER_FERRIS, TX_LOV2_043);
showText(TX_SPEAKER_KIRK, TX_LOV2_003);
}
break;
case BOTTLETYPE_H2O:
showText(TX_LOV2N018);
showText(TX_SPEAKER_SPOCK, TX_LOV2_004);
break;
case BOTTLETYPE_RLG:
default:
showText(TX_LOV2N019);
showText(TX_SPEAKER_SPOCK, TX_LOV2_031);
showText(TX_SPEAKER_MCCOY, TX_LOV2_018);
showText(TX_SPEAKER_SPOCK, TX_LOV2_030);
showText(TX_SPEAKER_MCCOY, TX_LOV2_022);
showText(TX_SPEAKER_SPOCK, TX_LOV2_038);
break;
}
}
void Room::love2FinishedAnimation27() {
// TODO: better name
_vm->_awayMission.love.synthesizerProduct = BOTTLETYPE_RLG;
strcpy(_roomVar.love2.d8, "btle4");
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 3);
playSoundEffectIndex(SND_DOOR1);
}
// Put polycarbonate in synthesizer
void Room::love2UsePolyberylcarbonateOnSynthesizerDoor() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 6);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2KirkReachedSynthesizerWithPolyberylcarbonate() {
if (_vm->_awayMission.love.field35 != 0)
showText(TX_LOV2N025);
else {
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 5);
playSoundEffectIndex(SND_DOOR1);
}
}
void Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 19);
}
void Room::love2PutPolyberylcarbonateInSynthesizer() {
loadActorAnim(OBJECT_POLYBERYLCARBONATE, "pbcanm", 0x8a, 0x8b, 0);
loseItem(OBJECT_IPBC);
_vm->_awayMission.love.field35 = 1;
}
// Put dish (virus sample) in synthesizer
void Room::love2UseDishesOnSynthesizerDoor() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 7);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2KirkReachedSynthesizerWithDishes() {
if (_vm->_awayMission.love.field35 != 0)
showText(TX_LOV2N025);
else {
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 6);
playSoundEffectIndex(SND_DOOR1);
}
}
void Room::love2SynthesizerDoorOpenedWithDishes() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 20);
}
void Room::love2PutDishesInSynthesizer() {
loadActorAnim(OBJECT_DISHES, "dishes", 0x8a, 0x8b, 0);
loseItem(OBJECT_IDISHES);
_vm->_awayMission.love.field35 = 2;
}
// Put cure sample in synthesizer
void Room::love2UseSampleOnSynthesizerDoor() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 8);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2KirkReachedSynthesizerWithSample() {
if (_vm->_awayMission.love.field35 != 0)
showText(TX_LOV2N025); // BUGFIX: original didn't play audio
else {
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 7);
playSoundEffectIndex(SND_DOOR1);
}
}
void Room::love2SynthesizerDoorOpenedWithSample() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 21);
}
void Room::love2PutSampleInSynthesizer() {
loadActorAnim(OBJECT_CURESAMPLE, "dishes", 0x8a, 0x8b, 0);
loseItem(OBJECT_ISAMPLE);
_vm->_awayMission.love.field35 = 3;
}
void Room::love2UseAnythingOnSynthesizerDoor() {
showText(TX_SPEAKER_MCCOY, TX_LOV2_014);
}
void Room::love2UseAnythingOnSynthesizer() {
showText(TX_SPEAKER_SPOCK, TX_LOV2_007);
}
void Room::love2GetCanister() {
if (_vm->_awayMission.redshirtDead)
showText(TX_SPEAKER_MCCOY, TX_LOV2_011);
else
showText(TX_SPEAKER_FERRIS, TX_LOV2_040);
}
// Get antigrav from cabinet
void Room::love2GetAntigrav() {
walkCrewman(OBJECT_KIRK, 0x37, 0xb4, 9);
}
void Room::love2ReachedAntigrav() {
loadActorAnim2(OBJECT_KIRK, "kusehw", -1, -1, 22);
}
void Room::love2GotAntigrav() {
loadActorStandAnim(OBJECT_ANTIGRAV);
giveItem(OBJECT_IANTIGRA);
showText(TX_LOV2N042);
}
// Get polyberylcarbonate from synthesizer
void Room::love2GetPolyberylcarbonate() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 18);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2ReachedPolyberylcarbonate() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 26);
}
void Room::love2GotPolyberylcarbonate() {
loadActorStandAnim(OBJECT_POLYBERYLCARBONATE);
showText(TX_LOV2N044);
giveItem(OBJECT_IPBC);
_vm->_awayMission.love.field35 = 0;
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
playSoundEffectIndex(SND_DOOR1);
}
// Get virus sample from synthesizer
void Room::love2GetDishes() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 17);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2ReachedDishes() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 25);
}
void Room::love2GotDishes() {
loadActorStandAnim(OBJECT_DISHES);
showText(TX_LOV2N036);
giveItem(OBJECT_IDISHES);
_vm->_awayMission.love.field35 = 0;
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
playSoundEffectIndex(SND_DOOR1);
}
// Get cure sample from synthesizer
void Room::love2GetSample() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 19);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2ReachedSample() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 28);
}
void Room::love2GotSample() {
loadActorStandAnim(OBJECT_CURESAMPLE);
showText(TX_LOV2N037);
giveItem(OBJECT_ISAMPLE);
_vm->_awayMission.love.field35 = 0;
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
playSoundEffectIndex(SND_DOOR1);
}
// Get synthesizer output
void Room::love2GetSynthesizerOutput() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 10);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2ReachedSynthesizerOutput() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 23);
}
void Room::love2GotSynthesizerOutput() {
switch (_vm->_awayMission.love.synthesizerProduct) {
case BOTTLETYPE_N2O:
showText(TX_LOV2N040);
giveItem(OBJECT_IN2O);
break;
case BOTTLETYPE_NH3:
showText(TX_LOV2N039);
giveItem(OBJECT_INH3);
break;
case BOTTLETYPE_H2O:
showText(TX_LOV2N041);
giveItem(OBJECT_IH2O);
break;
case BOTTLETYPE_RLG:
default:
showText(TX_LOV2N038);
if (!_vm->_awayMission.love.gotTLDH) {
_vm->_awayMission.love.gotTLDH = true;
_vm->_awayMission.love.missionScore += 4;
}
giveItem(OBJECT_IRLG);
break;
}
loadActorStandAnim(OBJECT_SYNTHESIZER_OUTPUT);
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
playSoundEffectIndex(SND_DOOR1);
_vm->_awayMission.love.field35 = 0;
_vm->_awayMission.love.synthesizerProduct = 0;
}
// Get the cure
void Room::love2GetCure() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 11);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
void Room::love2ReachedCure() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 24);
}
void Room::love2GotCure() {
if (!_vm->_awayMission.love.gotCure) {
_vm->_awayMission.love.gotCure = true;
_vm->_awayMission.love.missionScore += 5;
}
giveItem(OBJECT_ICURE);
loadActorStandAnim(OBJECT_CURE);
showText(TX_LOV2N043);
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
playSoundEffectIndex(SND_DOOR1);
_vm->_awayMission.love.field35 = 0;
}
}

View File

@ -84,7 +84,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_textboxHasMultipleChoices = false;
_missionToLoad = "LOVE";
_roomIndexToLoad = 0;
_roomIndexToLoad = 2;
for (int i = 0; i < NUM_OBJECTS; i++)
_itemList[i] = g_itemList[i];

View File

@ -796,7 +796,6 @@ enum GameStringIDs {
TX_LOV0N007,
TX_LOV0N008,
TX_LOV0N009,
TX_LOV2N005,
TX_LOV5_015,
TX_LOV5_019,
TX_LOV5_027,
@ -873,6 +872,97 @@ enum GameStringIDs {
TX_LOV1N035,
TX_LOV2_001,
TX_LOV2_002,
TX_LOV2_003,
TX_LOV2_004,
TX_LOV2_005,
TX_LOV2_006,
TX_LOV2_007,
TX_LOV2_008,
TX_LOV2_009,
TX_LOV2_010,
TX_LOV2_011,
TX_LOV2_012,
TX_LOV2_014,
TX_LOV2_015,
TX_LOV2_016,
TX_LOV2_017,
TX_LOV2_018,
TX_LOV2_019,
TX_LOV2_020,
TX_LOV2_021,
TX_LOV2_022,
TX_LOV2_023,
TX_LOV2_024,
TX_LOV2_025,
TX_LOV2_026,
TX_LOV2_027,
TX_LOV2_028,
TX_LOV2_029,
TX_LOV2_030,
TX_LOV2_031,
TX_LOV2_032,
TX_LOV2_033,
TX_LOV2_034,
TX_LOV2_035,
TX_LOV2_036,
TX_LOV2_037,
TX_LOV2_038,
TX_LOV2_039,
TX_LOV2_040,
TX_LOV2_041,
TX_LOV2_043,
TX_LOV2N000,
TX_LOV2N001,
TX_LOV2N002,
TX_LOV2N003,
TX_LOV2N004,
TX_LOV2N005,
TX_LOV2N006,
TX_LOV2N007,
TX_LOV2N008,
TX_LOV2N009,
TX_LOV2N010,
TX_LOV2N011,
TX_LOV2N012,
TX_LOV2N013,
TX_LOV2N014,
TX_LOV2N015,
TX_LOV2N016,
TX_LOV2N017,
TX_LOV2N018,
TX_LOV2N019,
TX_LOV2N024,
TX_LOV2N025,
TX_LOV2N026,
TX_LOV2N027,
TX_LOV2N028,
TX_LOV2N029,
TX_LOV2N030,
TX_LOV2N031,
TX_LOV2N033,
TX_LOV2N034,
TX_LOV2N035,
TX_LOV2N036,
TX_LOV2N037,
TX_LOV2N038,
TX_LOV2N039,
TX_LOV2N040,
TX_LOV2N041,
TX_LOV2N042,
TX_LOV2N043,
TX_LOV2N044,
TX_LOV2N045,
TX_LOV2N046,
TX_LOV2N047,
TX_LOV2N048,
TX_LOV2N049,
TX_LOV2N050,
TX_LOV2N051,
TX_END
};
@ -1616,7 +1706,6 @@ const char * const g_gameStrings[] = {
"#LOV0\\LOV0N007#This is a heavily secured door, leading to another section of the station. Its access code has been breached.",
"#LOV0\\LOV0N008#This is a standard door, leading to another room on this deck.",
"#LOV0\\LOV0N009#You are on the bridge of the ARK7.",
"#LOV2\\LOV2N005#A loud hissing fills the room.",
"#LOV5\\LOV5_015#He's already cured, Jim.",
"#LOV5\\LOV5_019#I don't have the proper medicine to cure him, Jim.",
"#LOV5\\LOV5_027#Finally, a human response!",
@ -1691,6 +1780,96 @@ const char * const g_gameStrings[] = {
"#LOV1\\LOV1N023#This refrigerator has a number of specimen dishes inside.",
"#LOV1\\LOV1N034#You have distilled a quantity of Polyberylcarbonate.",
"#LOV1\\LOV1N035#You retrieve the Oroborus cure sample.",
"#LOV2\\LOV2_001#Well, gentlemen, I believe this equipment may be of some use.",
"#LOV2\\LOV2_002#I think we can call that one a failure, Bones.",
"#LOV2\\LOV2_003#I think we can set this aside and not worry about it.",
"#LOV2\\LOV2_004#A clean drink of water, but I don't see its application in the context of our difficulties, Captain.",
"#LOV2\\LOV2_005#Captain, I see the problem: the gas feeds are turned off. If you'll permit me...",
"#LOV2\\LOV2_006#Captain, I see the problem: the gas feeds are turned off.",
"#LOV2\\LOV2_007#Fascinating, Captain, but it doesn't appear to get us any closer to our goal.",
"#LOV2\\LOV2_008#Except for the Oroborus virus, I'm not picking up anything unusual.",
"#LOV2\\LOV2_009#Go bother Spock. This is the kind of place he likes.",
"#LOV2\\LOV2_010#I think I'll stick to combining two gases in future experiments. That's how the machine's designed, after all.",
"#LOV2\\LOV2_011#I wouldn't try to lift that. You might hurt yourself.",
"#LOV2\\LOV2_012#I'm picking up some strange, airborne virus. I can't identify it without more information.", // BUG: audio file missing
"#LOV2\\LOV2_014#That's not the right material to put in there, Jim.",
"#LOV2\\LOV2_015#Do you mean to say it's undignified, Spock?",
"#LOV2\\LOV2_016#I rest my case.",
"#LOV2\\LOV2_017#I think I'd have more luck hypergrowing the virus in the presence of a limited quantity of gas.",
"#LOV2\\LOV2_018#It doesn't affect Vulcans, of course.",
"#LOV2\\LOV2_019#Next he'll tell us the DNA molecule is simple!",
"#LOV2\\LOV2_020#That's it, Jim. We've got enough serum here to cure everybody on the station!",
"#LOV2\\LOV2_021#We must be doing something wrong, Jim.",
"#LOV2\\LOV2_022#Why that's just dandy! Vulcan laughing gas!",
"#LOV2\\LOV2_023#You're wrong, Spock. Look... the virus culture has been eliminated. That's why it's clear. It'd be more useful for me to see how the virus might grow in the presence of a limited quantity of ammonia gas.",
"#LOV2\\LOV2_024#I recommend we follow the design specifications of the machine. Two gas tanks should always be attached before activating it.",
"#LOV2\\LOV2_025#I would not recommend removing the canister without turning off the valve.",
"#LOV2\\LOV2_026#It would be very dangerous to place the tanks without first turning off the valve.",
"#LOV2\\LOV2_027#Nothing unusual is detected.",
"#LOV2\\LOV2_028#The machine does not seem to be able to process that particular item.",
"#LOV2\\LOV2_029#This is an outstanding facility, Captain.",
"#LOV2\\LOV2_030#Actually, Doctor, both Romulans and Vulcans suffer its effects.",
"#LOV2\\LOV2_031#An unusual compound, Captain. It can induce laughter and feelings of exhiliration in some, much the way nitrous oxide affects humans.",
"#LOV2\\LOV2_032#Be careful with that canister, Captain. I think you would not care to fall under the effects of laughing gas in these straits.",
"#LOV2\\LOV2_033#Compared to many molecular models, it is, Doctor.",
"#LOV2\\LOV2_034#I don't think that's useful in your experiment, Doctor.", // TYPO (in audio filename)
"#LOV2\\LOV2_035#In principle, Captain, this device is quite simple. When this chamber is empty and gas tanks are attached, it will combine the gases to make new compounds. If chemicals are placed in the chamber, the machine will combine them with the gases to create new materials.",
"#LOV2\\LOV2_036#It is, at the least, inappropriate for a starship crew on duty, Doctor.",
"#LOV2\\LOV2_037#It would take us several hours to get this machine working, Captain. I do not believe we will need it. The synthesis chamber should be able to give us what we need.",
"#LOV2\\LOV2_038#Please, Doctor. This is not a laughing matter.",
"#LOV2\\LOV2_039#This does not appear to provide us with anything useful.", // TYPO (in audio filename)
"#LOV2\\LOV2_040#The can looks much too heavy to carry, sir.",
"#LOV2\\LOV2_041#This room is very defensible, Captain -- if things get nasty, we may want to retreat to here.",
"#LOV2\\LOV2_043#I hope you don't want me to swab the deck with that, Captain.",
"#LOV2\\LOV2N000#You already have the ?.",
"#LOV2\\LOV2N001#A door.",
"#LOV2\\LOV2N002#A gas tank marked 'H2'.", // TYPO
"#LOV2\\LOV2N003#A gas tank marked 'N2',", // TYPO
"#LOV2\\LOV2N004#A gas tank marked 'O2'.", // TYPO
"#LOV2\\LOV2N005#A loud hissing fills the room.",
"#LOV2\\LOV2N006#A small field-effect anti-gravity unit, useful for moving things too heavy to lift and carry by muscle alone.",
"#LOV2\\LOV2N007#Gas feed is off.",
"#LOV2\\LOV2N008#Gas feed is on.",
"#LOV2\\LOV2N009#James Tiberius Kirk.",
"#LOV2\\LOV2N010#Lt. Ferris is carefully watching the hallway.", // TYPO
"#LOV2\\LOV2N011#McCoy is fidgeting around.",
"#LOV2\\LOV2N012#Nothing Happens.",
"#LOV2\\LOV2N013#Nothing happens.",
"#LOV2\\LOV2N014#Spock is analyzing the surroundings.",
"#LOV2\\LOV2N015#The item is much soggier than it used to be, but otherwise undamaged.",
"#LOV2\\LOV2N016#The machine synthesizes a liter of ammonia.",
"#LOV2\\LOV2N017#The machine synthesizes a liter of nitrous oxide.",
"#LOV2\\LOV2N018#The machine synthesizes a liter of pure water.",
"#LOV2\\LOV2N019#The machine synthesizes one liter of TLTDH gas.",
"#LOV2\\LOV2N024#There is no room for another canister.",
"#LOV2\\LOV2N025#There is something already in the chamber.",
"#LOV2\\LOV2N026#This is a science lab.",
"#LOV2\\LOV2N027#This is a storage cabinet.",
"#LOV2\\LOV2N028#This is a synthesizer, used to combine and replicate chemicals and form new compounds. This particular model has twin gas feeds.",
"#LOV2\\LOV2N029#This is the door to the synthesis chamber.",
"#LOV2\\LOV2N030#You attach the antigrav unit to the gas tank. It can be moved freely.",
"#LOV2\\LOV2N031#You attach the antigrav unit to the gas tank. It can be moved freely.",
"#LOV2\\LOV2N033#You have synthesized one liter of Romulan Laughing Gas.",
"#LOV2\\LOV2N034#You install the gas tank to the synthesizer's feed lines.",
"#LOV2\\LOV2N035#You install the gas tank to the synthesizer's feed lines.",
"#LOV2\\LOV2N036#Oroborus virus culture taken.",
"#LOV2\\LOV2N037#Oroborus virus cure sample taken.",
"#LOV2\\LOV2N038#You take a one litre container of TLTDH gas.",
"#LOV2\\LOV2N039#You take a one litre container of Ammonia.",
"#LOV2\\LOV2N040#You take a one litre container of Nitrous Oxide.",
"#LOV2\\LOV2N041#You take a one litre container of pure water.",
"#LOV2\\LOV2N042#You take the antigrav unit.",
"#LOV2\\LOV2N043#You take the hypo with Oroborus toxin cure.",
"#LOV2\\LOV2N044#You take the Polyberylcarbonate.",
"#LOV2\\LOV2N045#An Ardak 1000, the last word in molecular replication, one of the most advanced pieces of scientific equipment ever constructed.",
"#LOV2\\LOV2N046#The machine synthesizes a quantity serum in a hypo.",
"#LOV2\\LOV2N047#The machine synthesizes a quantity of bubbling grey goo.",
"#LOV2\\LOV2N048#The machine synthesizes a quantity of colorless goo.",
"#LOV2\\LOV2N049#The machine synthesizes a quantity of inert matter.",
"#LOV2\\LOV2N050#The machine synthesizes a quantity of wet grey goo.",
"#LOV2\\LOV2N051#The machine synthesizes a quantity of wet grey goo.",
};
}