diff options
author | Matthew Stewart | 2018-06-24 02:00:14 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | d8e255e9e7fcd1b91f85ea0a14596d679542fae6 (patch) | |
tree | 432d07ab57cbc812ff7e461f6e579d1819b02d92 /engines/startrek | |
parent | 958a9065aa07644698215d9aef7f24f501b569a4 (diff) | |
download | scummvm-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.h | 2 | ||||
-rw-r--r-- | engines/startrek/awaymission.h | 9 | ||||
-rw-r--r-- | engines/startrek/room.h | 21 | ||||
-rw-r--r-- | engines/startrek/rooms/function_map.h | 24 | ||||
-rw-r--r-- | engines/startrek/rooms/love1.cpp | 19 | ||||
-rw-r--r-- | engines/startrek/rooms/love2.cpp | 213 | ||||
-rw-r--r-- | engines/startrek/startrek.cpp | 2 | ||||
-rw-r--r-- | engines/startrek/text.h | 8 |
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.", |