aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek
diff options
context:
space:
mode:
authorMatthew Stewart2018-06-24 02:00:14 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commitd8e255e9e7fcd1b91f85ea0a14596d679542fae6 (patch)
tree432d07ab57cbc812ff7e461f6e579d1819b02d92 /engines/startrek
parent958a9065aa07644698215d9aef7f24f501b569a4 (diff)
downloadscummvm-rg350-d8e255e9e7fcd1b91f85ea0a14596d679542fae6.tar.gz
scummvm-rg350-d8e255e9e7fcd1b91f85ea0a14596d679542fae6.tar.bz2
scummvm-rg350-d8e255e9e7fcd1b91f85ea0a14596d679542fae6.zip
STARTREK: Implement synthesizer + bugfixes (LOVE)
Diffstat (limited to 'engines/startrek')
-rw-r--r--engines/startrek/action.h2
-rw-r--r--engines/startrek/awaymission.h9
-rw-r--r--engines/startrek/room.h21
-rw-r--r--engines/startrek/rooms/function_map.h24
-rw-r--r--engines/startrek/rooms/love1.cpp19
-rw-r--r--engines/startrek/rooms/love2.cpp213
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h8
8 files changed, 214 insertions, 84 deletions
diff --git a/engines/startrek/action.h b/engines/startrek/action.h
index 4270eb97ea..6774000771 100644
--- a/engines/startrek/action.h
+++ b/engines/startrek/action.h
@@ -54,6 +54,8 @@ struct Action : Common::Serializable {
byte b2;
byte b3;
+ // Only used with ACTION_CALLBACK.
+ // TODO: Fix serialization. Can this even be serialized?
void (Room::*roomFuncPtr)();
Action() {}
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index fdf46ee65f..8eaabbebc9 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -200,4 +200,13 @@ enum CanisterTypes {
CANTYPE_N2 = 3
};
+// Synthesizer contents for Love's Labor Jeopardized (values for field35)
+enum SynthesizerContent {
+ SYNTHITEM_NONE = 0,
+ SYNTHITEM_PBC = 1,
+ SYNTHITEM_VIRUS_SAMPLE = 2,
+ SYNTHITEM_CURE_SAMPLE = 3,
+ SYNTHITEM_BOTTLE = 9 // Contents of bottle determined by "synthesizerProduct" variable
+};
+
#endif
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 3775974019..f6bfe4254a 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -903,19 +903,22 @@ public:
void love2UseSynthesizer();
void love2SynthesizerDoorClosed();
void love2SynthesizerFinished();
- void love2FinishedAnimation27();
+ void love2ClosedSynthesizerDoorMakingRLG();
+ void love2ClosedSynthesizerDoorMakingCure();
+ void love2CureStartedSynthesizing();
+ void love2CureSynthesized();
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 love2UseVirusSampleOnSynthesizerDoor();
+ void love2KirkReachedSynthesizerWithVirusSample();
+ void love2SynthesizerDoorOpenedWithVirusSample();
+ void love2PutVirusSampleInSynthesizer();
+ void love2UseCureSampleOnSynthesizerDoor();
+ void love2KirkReachedSynthesizerWithCureSample();
+ void love2SynthesizerDoorOpenedWithCureSample();
+ void love2PutCureSampleInSynthesizer();
void love2UseAnythingOnSynthesizerDoor();
void love2UseAnythingOnSynthesizer();
void love2GetCanister();
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 54b1028eda..a28b5b3768 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1009,24 +1009,24 @@ RoomAction love2ActionList[] = {
{ 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_FINISHED_ANIMATION, 27, 0, 0), &Room::love2ClosedSynthesizerDoorMakingRLG },
+ { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::love2ClosedSynthesizerDoorMakingCure },
+ { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::love2CureStartedSynthesizing },
+ { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::love2CureSynthesized },
{ 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_IDISHES, 9, 0), &Room::love2UseVirusSampleOnSynthesizerDoor },
+ { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love2KirkReachedSynthesizerWithVirusSample },
+ { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love2SynthesizerDoorOpenedWithVirusSample },
+ { Action(ACTION_FINISHED_ANIMATION, 20, 0, 0), &Room::love2PutVirusSampleInSynthesizer },
- { 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, OBJECT_ISAMPLE, 9, 0), &Room::love2UseCureSampleOnSynthesizerDoor },
+ { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love2KirkReachedSynthesizerWithCureSample },
+ { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love2SynthesizerDoorOpenedWithCureSample },
+ { Action(ACTION_FINISHED_ANIMATION, 21, 0, 0), &Room::love2PutCureSampleInSynthesizer },
{ Action(ACTION_USE, -1, 9, 0), &Room::love2UseAnythingOnSynthesizerDoor },
{ Action(ACTION_USE, -1, 0x20, 0), &Room::love2UseAnythingOnSynthesizer },
diff --git a/engines/startrek/rooms/love1.cpp b/engines/startrek/rooms/love1.cpp
index 9f4617b8c1..6398b38dc5 100644
--- a/engines/startrek/rooms/love1.cpp
+++ b/engines/startrek/rooms/love1.cpp
@@ -307,8 +307,11 @@ void Room::love1KirkGotCureSample() {
if (_vm->_awayMission.love.chamberHasCure) {
giveItem(OBJECT_ISAMPLE);
showText(TX_LOV1N035);
- }
- else {
+
+ // BUGFIX: after removing the cure, unset this variable.
+ // Otherwise, any normal dish inserted afterward automagically becomes a cure.
+ _vm->_awayMission.love.chamberHasCure = false;
+ } else {
giveItem(OBJECT_IDISHES);
showText(TX_LOV1N006);
}
@@ -420,12 +423,10 @@ void Room::love1MccoyReachedReplicator() {
if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
showText(TX_SPEAKER_MCCOY, TX_LOV1_021);
walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
- }
- else if (!_vm->_awayMission.love.chamberHasDish) {
+ } else if (!_vm->_awayMission.love.chamberHasDish) {
showText(TX_SPEAKER_MCCOY, TX_LOV1_015);
walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
- }
- else
+ } else
loadActorAnim2(OBJECT_MCCOY, "musehn", -1, -1, 13);
}
@@ -435,8 +436,7 @@ void Room::love1MccoyUsedReplicator() {
loadActorAnim2(OBJECT_CHAMBER, "s3r2d6", 0xb4, 0x75, 7);
playSoundEffectIndex(SND_DOOR1);
walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
- }
- else {
+ } else {
showText(TX_SPEAKER_MCCOY, TX_LOV1_019);
walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
}
@@ -641,8 +641,7 @@ void Room::love1CrewmanDiedFromPhaser() {
_vm->_awayMission.disableInput = false;
showText(TX_SPEAKER_FERRIS, TX_LOV1_024);
_vm->_awayMission.redshirtDead = true;
- }
- else {
+ } else {
showText(_roomVar.love1.dyingSpeaker, TX_LOV1_025);
showGameOverMenu();
}
diff --git a/engines/startrek/rooms/love2.cpp b/engines/startrek/rooms/love2.cpp
index 1744b108ba..7ccbfd20cf 100644
--- a/engines/startrek/rooms/love2.cpp
+++ b/engines/startrek/rooms/love2.cpp
@@ -33,7 +33,7 @@
#define OBJECT_ANTIGRAV 14
#define OBJECT_SYNTHESIZER_OUTPUT 15
#define OBJECT_POLYBERYLCARBONATE 16
-#define OBJECT_DISHES 17
+#define OBJECT_VIRUSSAMPLE 17
#define OBJECT_CURESAMPLE 18
#define OBJECT_CURE 19
@@ -104,39 +104,39 @@ void Room::love2Tick1() {
bool valid = true;
switch (_vm->_awayMission.love.field35) {
- case 1:
+ case SYNTHITEM_PBC:
strcpy(_roomVar.love2.d6, "pbcanm");
- _roomVar.love2.d2 = 0x10;
+ _roomVar.love2.d2 = OBJECT_POLYBERYLCARBONATE;
break;
- case 2:
+ case SYNTHITEM_VIRUS_SAMPLE:
strcpy(_roomVar.love2.d6, "dishes");
- _roomVar.love2.d2 = 0x11;
+ _roomVar.love2.d2 = OBJECT_VIRUSSAMPLE;
break;
- case 3:
+ case SYNTHITEM_CURE_SAMPLE:
strcpy(_roomVar.love2.d6, "dishes");
- _roomVar.love2.d2 = 0x12;
+ _roomVar.love2.d2 = OBJECT_CURESAMPLE;
break;
- case 9:
+ case SYNTHITEM_BOTTLE:
switch (_vm->_awayMission.love.synthesizerProduct) {
case 1:
strcpy(_roomVar.love2.d8, "btle1");
- _roomVar.love2.d2 = 0x0f;
+ _roomVar.love2.d2 = OBJECT_SYNTHESIZER_OUTPUT;
break;
case 2:
strcpy(_roomVar.love2.d8, "btle2");
- _roomVar.love2.d2 = 0x0f;
+ _roomVar.love2.d2 = OBJECT_SYNTHESIZER_OUTPUT;
break;
case 3:
strcpy(_roomVar.love2.d8, "btle3");
- _roomVar.love2.d2 = 0x0f;
+ _roomVar.love2.d2 = OBJECT_SYNTHESIZER_OUTPUT;
break;
case 4:
strcpy(_roomVar.love2.d8, "btle4");
- _roomVar.love2.d2 = 0x0f;
+ _roomVar.love2.d2 = OBJECT_SYNTHESIZER_OUTPUT;
break;
default:
strcpy(_roomVar.love2.d8, "cure");
- _roomVar.love2.d2 = 0x13;
+ _roomVar.love2.d2 = OBJECT_CURE;
break;
}
break;
@@ -360,8 +360,7 @@ void Room::love2ChangedGasFeed() {
_vm->_awayMission.love.gasFeedOn = false;
loadActorAnim2(OBJECT_GAS_FEED, "s3r3v2", 0xac, 0x75, 0);
showText(TX_LOV2N007);
- }
- else {
+ } else {
_vm->_awayMission.love.gasFeedOn = true;
loadActorAnim2(OBJECT_GAS_FEED, "s3r3v1", 0xac, 0x75, 0);
showText(TX_LOV2N008);
@@ -428,7 +427,7 @@ void Room::love2ReachedCanisterSlot1ToGet() {
else {
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 15);
// BUGFIX: original game only played this for canister 2
- playVoc("SEPLBAT");
+ playVoc("SE3PLBAT");
}
}
@@ -448,6 +447,8 @@ void Room::love2TookCanister1() {
giveItem(OBJECT_IN2GAS);
break;
}
+
+ _vm->_awayMission.love.canister1 = CANTYPE_NONE;
}
void Room::love2UseAntigravOnCanister2() {
@@ -459,7 +460,7 @@ void Room::love2ReachedCanisterSlot2ToGet() {
showText(TX_SPEAKER_SPOCK, TX_LOV2_025);
else {
loadActorAnim2(OBJECT_KIRK, "kusehn", -1, -1, 16);
- playVoc("SEPLBAT");
+ playVoc("SE3PLBAT");
}
}
@@ -479,6 +480,8 @@ void Room::love2TookCanister2() {
giveItem(OBJECT_IN2GAS);
break;
}
+
+ _vm->_awayMission.love.canister2 = CANTYPE_NONE;
}
void Room::love2UseKirkOnSynthesizer() {
@@ -509,17 +512,14 @@ void Room::love2CrewmanReachedSynthesizer() {
void Room::love2CrewmanUsedSynthesizer() {
if (_vm->_awayMission.love.gasFeedOn) {
love2UseSynthesizer();
- }
- else {
+ } else {
if (_roomVar.love2.cb == 3) {
if (haveItem(OBJECT_IWRENCH)) {
showText(TX_SPEAKER_SPOCK, TX_LOV2_005);
walkCrewman(OBJECT_SPOCK, 0xa8, 0xb7, 16);
- }
- else
+ } else
showText(TX_SPEAKER_SPOCK, TX_LOV2_006);
- }
- else {
+ } else {
_roomVar.love2.cb++;
showText(TX_LOV2N012);
}
@@ -541,30 +541,130 @@ void Room::love2SpockEnabledGasFeeds() {
love2UseSynthesizer();
}
+// Synthesizer takes the input and produces some output
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 {
+ int c1 = _vm->_awayMission.love.canister1;
+ int c2 = _vm->_awayMission.love.canister2;
+ if (c1 > c2) {
+ int tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+
+ if (c1 == CANTYPE_O2 && c2 == CANTYPE_H2) {
+ switch (_vm->_awayMission.love.field35) {
+ case SYNTHITEM_PBC: // Romulan Laughing Gas
+ loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", -1, -1, 27); // -> love2ClosedSynthesizerDoorMakingRLG
+ playSoundEffectIndex(SND_DOOR1);
+ loadActorStandAnim(OBJECT_POLYBERYLCARBONATE);
+ break;
+
+ case SYNTHITEM_VIRUS_SAMPLE: // Wet goo
+ showText(TX_LOV2N051);
+ showText(TX_SPEAKER_KIRK, TX_LOV2_002);
+ loadActorStandAnim(OBJECT_VIRUSSAMPLE);
+ goto closeSynthesizerDoor;
+
+ case SYNTHITEM_CURE_SAMPLE: // Wet goo
+wetGooFailure:
+ showText(TX_LOV2N050);
+ showText(TX_SPEAKER_MCCOY, TX_LOV2_021);
+ loadActorStandAnim(OBJECT_CURESAMPLE);
+ goto closeSynthesizerDoor;
+
+ case SYNTHITEM_BOTTLE: // Nothing happens
+bottleFailure:
+ showText(TX_SPEAKER_SPOCK, TX_LOV2_028);
+ break;
+
+ case SYNTHITEM_NONE: // Water
+ default:
+ _vm->_awayMission.love.synthesizerProduct = BOTTLETYPE_H2O;
+ strcpy(_roomVar.love2.d8, "btle3");
+produceBottle:
+ loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 3); // -> love2SynthesizerDoorClosed
+ playSoundEffectIndex(SND_DOOR1);
+ break;
+
+closeSynthesizerDoor:
+ loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
+ playSoundEffectIndex(SND_DOOR1);
+ _vm->_awayMission.love.field35 = 0;
+ break;
+ }
+ } else if (c1 == CANTYPE_H2 && c2 == CANTYPE_N2) {
+ switch (_vm->_awayMission.love.field35) {
+ case SYNTHITEM_PBC: // Inert matter
+inertMatterFailure:
+ showText(TX_LOV2N049);
+ showText(TX_SPEAKER_SPOCK, TX_LOV2_039); // BUGFIX: original didn't play audio
+ loadActorStandAnim(OBJECT_POLYBERYLCARBONATE);
+ goto closeSynthesizerDoor;
+
+ case SYNTHITEM_VIRUS_SAMPLE: // Colorless goo (with useful information about virus in ammonia)
+ showText(TX_LOV2N048);
+ showText(TX_SPEAKER_SPOCK, TX_LOV2_034); // BUGFIX: original didn't play audio
+ showText(TX_SPEAKER_MCCOY, TX_LOV2_023);
+ loadActorStandAnim(OBJECT_VIRUSSAMPLE);
+ goto closeSynthesizerDoor;
+
+ case SYNTHITEM_CURE_SAMPLE: // Cure
+ loadActorStandAnim(OBJECT_CURESAMPLE);
+ loadActorAnim2(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 8); // -> love2ClosedSynthesizerDoorMakingCure
+ playSoundEffectIndex(SND_DOOR1);
+ break;
+
+ case SYNTHITEM_BOTTLE: // Nothing happens
+ goto bottleFailure;
+
+ case SYNTHITEM_NONE: // Ammonia
+ default:
+ _vm->_awayMission.love.synthesizerProduct = BOTTLETYPE_NH3;
+ strcpy(_roomVar.love2.d8, "btle2");
+ goto produceBottle;
+ }
+ } else if (c1 == CANTYPE_O2 && c2 == CANTYPE_N2) {
+ switch (_vm->_awayMission.love.field35) {
+ case SYNTHITEM_PBC: // Inert matter
+ goto inertMatterFailure;
+
+ case SYNTHITEM_VIRUS_SAMPLE: // Wet goo
+ showText(TX_LOV2N047);
+ showText(TX_SPEAKER_MCCOY, TX_LOV2_017);
+ loadActorStandAnim(OBJECT_VIRUSSAMPLE);
+ goto closeSynthesizerDoor;
+
+ case SYNTHITEM_CURE_SAMPLE: // Wet goo
+ goto wetGooFailure;
+
+ case SYNTHITEM_BOTTLE: // Nothing happens
+ goto bottleFailure;
+
+ case SYNTHITEM_NONE: // Laughing gas
+ default:
+ _vm->_awayMission.love.synthesizerProduct = BOTTLETYPE_N2O;
+ strcpy(_roomVar.love2.d8, "btle1");
+ goto produceBottle;
+ }
+ }
+ } else {
playVoc("EFX24");
showText(TX_LOV2N005);
showText(TX_SPEAKER_MCCOY, TX_LOV2_010);
}
- }
- else {
+ } else {
playVoc("EFX24");
- showText(TX_SPEAKER_SPOCK, TX_LOV2N005);
+ showText(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;
+ loadActorAnim(OBJECT_SYNTHESIZER_OUTPUT, _roomVar.love2.d8, 0x8a, 0x8d, 4); // -> love2SynthesizerFinished
+ _vm->_awayMission.love.field35 = SYNTHITEM_BOTTLE;
}
// Final product of synthesizer is produced
@@ -602,14 +702,27 @@ void Room::love2SynthesizerFinished() {
}
}
-void Room::love2FinishedAnimation27() {
- // TODO: better name
+void Room::love2ClosedSynthesizerDoorMakingRLG() {
_vm->_awayMission.love.synthesizerProduct = BOTTLETYPE_RLG;
strcpy(_roomVar.love2.d8, "btle4");
- loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 3);
+ loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 3); // -> love2SynthesizerDoorClosed
playSoundEffectIndex(SND_DOOR1);
}
+// Synthesizer door closed, using N2 + O2 on cure sample
+void Room::love2ClosedSynthesizerDoorMakingCure() {
+ loadActorAnim2(OBJECT_SYNTHESIZER_DOOR, "s3r3d2", 0x8a, 0x8d, 9); // -> love2CureStartedSynthesizing
+}
+
+void Room::love2CureStartedSynthesizing() {
+ loadActorAnim(OBJECT_CURE, "cure", 0x8a, 0x8b, 10); // -> love2CureSynthesized
+}
+
+void Room::love2CureSynthesized() {
+ showText(TX_LOV2N046);
+ showText(TX_SPEAKER_MCCOY, TX_LOV2_020);
+}
+
// Put polycarbonate in synthesizer
void Room::love2UsePolyberylcarbonateOnSynthesizerDoor() {
@@ -633,17 +746,17 @@ void Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate() {
void Room::love2PutPolyberylcarbonateInSynthesizer() {
loadActorAnim(OBJECT_POLYBERYLCARBONATE, "pbcanm", 0x8a, 0x8b, 0);
loseItem(OBJECT_IPBC);
- _vm->_awayMission.love.field35 = 1;
+ _vm->_awayMission.love.field35 = SYNTHITEM_PBC;
}
// Put dish (virus sample) in synthesizer
-void Room::love2UseDishesOnSynthesizerDoor() {
+void Room::love2UseVirusSampleOnSynthesizerDoor() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 7);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
-void Room::love2KirkReachedSynthesizerWithDishes() {
+void Room::love2KirkReachedSynthesizerWithVirusSample() {
if (_vm->_awayMission.love.field35 != 0)
showText(TX_LOV2N025);
else {
@@ -652,24 +765,24 @@ void Room::love2KirkReachedSynthesizerWithDishes() {
}
}
-void Room::love2SynthesizerDoorOpenedWithDishes() {
+void Room::love2SynthesizerDoorOpenedWithVirusSample() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 20);
}
-void Room::love2PutDishesInSynthesizer() {
- loadActorAnim(OBJECT_DISHES, "dishes", 0x8a, 0x8b, 0);
+void Room::love2PutVirusSampleInSynthesizer() {
+ loadActorAnim(OBJECT_VIRUSSAMPLE, "dishes", 0x8a, 0x8b, 0);
loseItem(OBJECT_IDISHES);
- _vm->_awayMission.love.field35 = 2;
+ _vm->_awayMission.love.field35 = SYNTHITEM_VIRUS_SAMPLE;
}
// Put cure sample in synthesizer
-void Room::love2UseSampleOnSynthesizerDoor() {
+void Room::love2UseCureSampleOnSynthesizerDoor() {
walkCrewman(OBJECT_KIRK, 0x85, 0xad, 8);
_vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
}
-void Room::love2KirkReachedSynthesizerWithSample() {
+void Room::love2KirkReachedSynthesizerWithCureSample() {
if (_vm->_awayMission.love.field35 != 0)
showText(TX_LOV2N025); // BUGFIX: original didn't play audio
else {
@@ -678,14 +791,14 @@ void Room::love2KirkReachedSynthesizerWithSample() {
}
}
-void Room::love2SynthesizerDoorOpenedWithSample() {
+void Room::love2SynthesizerDoorOpenedWithCureSample() {
loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 21);
}
-void Room::love2PutSampleInSynthesizer() {
+void Room::love2PutCureSampleInSynthesizer() {
loadActorAnim(OBJECT_CURESAMPLE, "dishes", 0x8a, 0x8b, 0);
loseItem(OBJECT_ISAMPLE);
- _vm->_awayMission.love.field35 = 3;
+ _vm->_awayMission.love.field35 = SYNTHITEM_CURE_SAMPLE;
}
@@ -753,8 +866,8 @@ void Room::love2ReachedDishes() {
}
void Room::love2GotDishes() {
- loadActorStandAnim(OBJECT_DISHES);
- showText(TX_LOV2N036);
+ loadActorStandAnim(OBJECT_VIRUSSAMPLE);
+ showText(TX_LOV2N036); // FIXME: text doesn't match audio
giveItem(OBJECT_IDISHES);
_vm->_awayMission.love.field35 = 0;
loadActorAnim(OBJECT_SYNTHESIZER_DOOR, "s3r3d5", 0x8a, 0x8d, 0);
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 8d1bcf458f..0296e359d9 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -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];
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index cb407ce08d..7ae6b0be09 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -23,6 +23,10 @@
#ifndef STARTREK_TEXT_H
#define STARTREK_TEXT_H
+
+// In this file, the TYPO tag is used when a typo is fixed in a piece of text, or when
+// text is changed to match the audio.
+
namespace StarTrek {
// Text that's loaded from "GROUND.TXT". First 0x40 pieces of text are for items.
@@ -2044,8 +2048,8 @@ const char * const g_gameStrings[] = {
"#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\\LOV2N036#You retrieve the Oroborus virus culture.", // TYPO
+ "#LOV2\\LOV2N037#You retrieve the Oroborus virus cure sample.", // TYPO
"#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.",