aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek
diff options
context:
space:
mode:
authorMatthew Stewart2018-08-03 20:16:12 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commita5d7b8620652f2ce2c28128996d756ba26296cf5 (patch)
tree3eaebb52828e7ceb2bcf52363910a5fed77a1d4c /engines/startrek
parentbd1b9f66cb7073a0548d67bca3f41dbb21606a69 (diff)
downloadscummvm-rg350-a5d7b8620652f2ce2c28128996d756ba26296cf5.tar.gz
scummvm-rg350-a5d7b8620652f2ce2c28128996d756ba26296cf5.tar.bz2
scummvm-rg350-a5d7b8620652f2ce2c28128996d756ba26296cf5.zip
STARTREK: VENG1
Diffstat (limited to 'engines/startrek')
-rw-r--r--engines/startrek/awaymission.h6
-rw-r--r--engines/startrek/menu.cpp6
-rw-r--r--engines/startrek/room.h50
-rw-r--r--engines/startrek/rooms/veng1.cpp381
-rw-r--r--engines/startrek/text.cpp47
-rw-r--r--engines/startrek/text.h47
6 files changed, 532 insertions, 5 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 0a19632b03..2bf92e16e6 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -632,6 +632,12 @@ struct AwayMission {
byte beamState; // 0x35
bool field36; // 0x36
+ bool openedPanel; // 0x37
+ bool clearedPanelDebris; // 0x38
+ bool removedPanelDebris; // 0x39
+ bool oilInHypo; // 0x3a
+ bool loosenedDebrisWithOil; // 0x3b
+ bool tookMolecularSaw; // 0x60
bool field68; // 0x68
bool field6b; // 0x6b
bool field6c; // 0x6c
diff --git a/engines/startrek/menu.cpp b/engines/startrek/menu.cpp
index 72730fdc1e..0ef16592d3 100644
--- a/engines/startrek/menu.cpp
+++ b/engines/startrek/menu.cpp
@@ -1091,7 +1091,7 @@ void StarTrekEngine::showRepublicMap(int16 arg0, int16 turbolift) {
switch (event.type) {
case TREKEVENT_TICK:
_frameIndex++;
- // sub_12fff();
+ // sub_12fff(); // TODO
_gfx->drawAllSprites();
break;
@@ -1101,10 +1101,10 @@ lclick:
if (clickedArea == 0) {
} else if (clickedArea == 6) {
Common::String text = "#GENE\\GENE_F14#Turbolift access is blocked by an extremely high radiation level.";
- showTextbox("", text, 50, 50, TEXTCOLOR_YELLOW, 0);
+ showTextbox("Mr. Spock", text, 50, 50, TEXTCOLOR_YELLOW, 0); // ENHANCEMENT: Speaker is Spock
} else if (clickedArea == 7) {
Common::String text = "#GENE\\GENE_F15#This turbolift cannot reach that area of the ship.";
- showTextbox("", text, 50, 50, TEXTCOLOR_YELLOW, 0);
+ showTextbox("Mr. Spock", text, 50, 50, TEXTCOLOR_YELLOW, 0); // ENHANCEMENT: Speaker is Spock
} else
exitLoop = true;
break;
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 9712ee97f4..2ab1f2be0a 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -2480,6 +2480,50 @@ public:
// VENG1
void veng1Tick1();
+ void veng1WalkToDoor();
+ void veng1TouchedHotspot0();
+ void veng1ReachedDoor();
+ void veng1TouchedTurbolift();
+ void veng1LookAtDeadGuy();
+ void veng1UseSTricorderOnVent();
+ void veng1LookAtPanel();
+ void veng1LookAtDoor();
+ void veng1LookAtSaw();
+ void veng1LookAtDebris();
+ void veng1LookAtKirk();
+ void veng1LookAtMccoy();
+ void veng1LookAtSpock();
+ void veng1LookAtRedshirt();
+ void veng1LookAnywhere();
+ void veng1TalkToKirk();
+ void veng1TalkToSpock();
+ void veng1TalkToMccoy();
+ void veng1TalkToRedshirt();
+ void veng1UsePhaserOnDoor();
+ void veng1UsePhaserOnPanel();
+ void veng1UseSTricorderOnSaw();
+ void veng1UseSTricorderOnDoor();
+ void veng1UseSTricorderOnPanel();
+ void veng1GetPanel();
+ void veng1KirkReachedPanel();
+ void veng1KirkAccessedPanel();
+ void veng1UseSawOnPanel();
+ void veng1UseSawOnDoor();
+ void veng1UseDrillOnDebris();
+ void veng1UseSawOnDebris();
+ void veng1UseDrillOnPanel();
+ void veng1KirkReachedPanelToDrill();
+ void veng1KirkDoneDrillingPanel();
+ void veng1UseHypoOnDebris();
+ void veng1KirkReachedDebris();
+ void veng1KirkUsedHypoOnDebris();
+ void veng1GetSaw();
+ void veng1ReachedSaw();
+ void veng1PickedUpSaw();
+ void veng1GetDebris();
+ void veng1ReachedDebrisToGet();
+ void veng1TriedToGetDebris();
+ void veng1UseMccoyOnDeadGuy();
// VENG2
void veng2Tick1();
@@ -2815,6 +2859,12 @@ public:
}
} sins;
+ struct {
+ // veng1
+ byte doorOpenCounter; // 0xca
+ bool walkingToDoor; // 0xcb
+ } veng;
+
} _roomVar;
};
diff --git a/engines/startrek/rooms/veng1.cpp b/engines/startrek/rooms/veng1.cpp
index a7e89ddf11..994453bdbd 100644
--- a/engines/startrek/rooms/veng1.cpp
+++ b/engines/startrek/rooms/veng1.cpp
@@ -22,20 +22,399 @@
#include "startrek/room.h"
+// OBJECT_DEBRIS, OBJECT_PANEL, and HOTSPOT_PANEL are all just about the same thing, in
+// different contexts. It's OBJECT_PANEL before being opened, OBJECT_DEBRIS after being
+// opened, and OBJECT_PANEL again after clearing the debris. Confusingly, HOTSPOT_PANEL is
+// always selectable if you click the top or right edge of the panel, but one of the other
+// objects always seems to be on top of it.
+
#define OBJECT_DOOR 8
+#define OBJECT_DEBRIS 9
+#define OBJECT_SAW 10
+#define OBJECT_DEAD_GUY 11
+#define OBJECT_PANEL 12 // Closed panel
-#define HOTSPOT_20 0x20
+#define HOTSPOT_DOOR 0x20
+#define HOTSPOT_PANEL 0x21 // Opened panel
+#define HOTSPOT_VENT 0x22
namespace StarTrek {
extern const RoomAction veng1ActionList[] = {
{ {ACTION_TICK, 1, 0, 0}, &Room::veng1Tick1 },
+
+ { {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::veng1WalkToDoor },
+ { {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::veng1WalkToDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::veng1TouchedHotspot0 },
+ { {ACTION_DONE_WALK, 2, 0, 0}, &Room::veng1ReachedDoor },
+ { {ACTION_DONE_ANIM, 1, 0, 0}, &Room::veng1ReachedDoor },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::veng1TouchedTurbolift },
+
+ { {ACTION_LOOK, OBJECT_DEAD_GUY, 0, 0}, &Room::veng1LookAtDeadGuy },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_VENT, 0}, &Room::veng1UseSTricorderOnVent },
+ { {ACTION_LOOK, HOTSPOT_VENT, 0, 0}, &Room::veng1UseSTricorderOnVent },
+
+ { {ACTION_LOOK, OBJECT_PANEL, 0, 0}, &Room::veng1LookAtPanel },
+ { {ACTION_LOOK, HOTSPOT_PANEL, 0, 0}, &Room::veng1LookAtPanel },
+ { {ACTION_LOOK, OBJECT_DOOR, 0, 0}, &Room::veng1LookAtDoor },
+ { {ACTION_LOOK, HOTSPOT_DOOR, 0, 0}, &Room::veng1LookAtDoor },
+ { {ACTION_LOOK, OBJECT_SAW, 0, 0}, &Room::veng1LookAtSaw },
+ { {ACTION_LOOK, OBJECT_DEBRIS, 0, 0}, &Room::veng1LookAtDebris },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::veng1LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::veng1LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::veng1LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::veng1LookAtRedshirt },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::veng1LookAnywhere },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::veng1TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::veng1TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::veng1TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::veng1TalkToRedshirt },
+
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_DOOR, 0}, &Room::veng1UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_DOOR, 0}, &Room::veng1UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_DOOR, 0}, &Room::veng1UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_DOOR, 0}, &Room::veng1UsePhaserOnDoor },
+
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_PANEL, 0}, &Room::veng1UsePhaserOnPanel },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_PANEL, 0}, &Room::veng1UsePhaserOnPanel }, // BUGFIX: IPHASERK, not IPHASERS again
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_DEBRIS, 0}, &Room::veng1UsePhaserOnPanel },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_DEBRIS, 0}, &Room::veng1UsePhaserOnPanel },
+ { {ACTION_USE, OBJECT_IPHASERS, HOTSPOT_PANEL, 0}, &Room::veng1UsePhaserOnPanel },
+ { {ACTION_USE, OBJECT_IPHASERK, HOTSPOT_PANEL, 0}, &Room::veng1UsePhaserOnPanel },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_SAW, 0}, &Room::veng1UseSTricorderOnSaw },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DOOR, 0}, &Room::veng1UseSTricorderOnDoor },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_DOOR, 0}, &Room::veng1UseSTricorderOnDoor },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_PANEL, 0}, &Room::veng1UseSTricorderOnPanel },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_DEBRIS, 0}, &Room::veng1UseSTricorderOnPanel },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_PANEL, 0}, &Room::veng1UseSTricorderOnPanel },
+
+ { {ACTION_GET, OBJECT_PANEL, 0, 0}, &Room::veng1GetPanel },
+ { {ACTION_USE, OBJECT_KIRK, OBJECT_PANEL, 0}, &Room::veng1GetPanel },
+ { {ACTION_DONE_WALK, 9, 0, 0}, &Room::veng1KirkReachedPanel },
+ { {ACTION_DONE_ANIM, 10, 0, 0}, &Room::veng1KirkAccessedPanel },
+
+ { {ACTION_USE, OBJECT_ILMD, HOTSPOT_PANEL, 0}, &Room::veng1UseSawOnPanel },
+ { {ACTION_USE, OBJECT_ILMD, OBJECT_DOOR, 0}, &Room::veng1UseSawOnDoor },
+ { {ACTION_USE, OBJECT_ILMD, HOTSPOT_DOOR, 0}, &Room::veng1UseSawOnDoor },
+ { {ACTION_USE, OBJECT_IDRILL, OBJECT_DEBRIS, 0}, &Room::veng1UseDrillOnDebris },
+ { {ACTION_USE, OBJECT_ILMD, OBJECT_DEBRIS, 0}, &Room::veng1UseSawOnDebris },
+
+ { {ACTION_USE, OBJECT_IDRILL, OBJECT_PANEL, 0}, &Room::veng1UseDrillOnPanel },
+ { {ACTION_DONE_WALK, 5, 0, 0}, &Room::veng1KirkReachedPanelToDrill },
+ { {ACTION_DONE_ANIM, 6, 0, 0}, &Room::veng1KirkDoneDrillingPanel },
+ { {ACTION_USE, OBJECT_IHYPO, OBJECT_DEBRIS, 0}, &Room::veng1UseHypoOnDebris },
+ { {ACTION_DONE_WALK, 7, 0, 0}, &Room::veng1KirkReachedDebris },
+ { {ACTION_DONE_ANIM, 8, 0, 0}, &Room::veng1KirkUsedHypoOnDebris },
+
+ { {ACTION_GET, OBJECT_SAW, 0, 0}, &Room::veng1GetSaw },
+ { {ACTION_DONE_WALK, 3, 0, 0}, &Room::veng1ReachedSaw },
+ { {ACTION_DONE_ANIM, 4, 0, 0}, &Room::veng1PickedUpSaw },
+ { {ACTION_GET, OBJECT_DEBRIS, 0, 0}, &Room::veng1GetDebris },
+ { {ACTION_DONE_WALK, 11, 0, 0}, &Room::veng1ReachedDebrisToGet },
+ { {ACTION_DONE_ANIM, 12, 0, 0}, &Room::veng1TriedToGetDebris },
+
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0}, &Room::veng1UseMccoyOnDeadGuy },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::veng1UseMccoyOnDeadGuy },
+ { {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0}, &Room::veng1UseMccoyOnDeadGuy },
};
extern const int veng1NumActions = ARRAYSIZE(veng1ActionList);
void Room::veng1Tick1() {
+ playVoc("VEN1LOOP");
+ loadActorAnim2(OBJECT_DOOR, "s7r1d1c", 0xa1, 0x7e);
+ loadActorAnim2(OBJECT_DEAD_GUY, "s7r1c1", 0x103, 0xa2);
+
+ if (!_awayMission->veng.tookMolecularSaw)
+ loadActorAnim2(OBJECT_SAW, "s7r1md", 0x3d, 0x9f);
+
+ loadActorAnim2(OBJECT_PANEL, "s7r1p1", 0xd1, 0x6a);
+
+ if (_awayMission->veng.openedPanel) {
+ loadActorAnim2(OBJECT_DEBRIS, "s7r1p2", 0xd1, 0x6a);
+ loadActorStandAnim(OBJECT_PANEL);
+ }
+
+ if (_awayMission->veng.removedPanelDebris) {
+ loadActorAnim2(OBJECT_PANEL, "s7r1p3", 0xd1, 0x6a);
+ loadActorStandAnim(OBJECT_DEBRIS);
+ }
+}
+
+void Room::veng1WalkToDoor() {
+ if (_awayMission->veng.removedPanelDebris) {
+ _awayMission->disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0xa0, 0x82, &Room::veng1ReachedDoor);
+ _roomVar.veng.walkingToDoor = true;
+ _awayMission->crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ } else
+ showText(TX_VEN1N007);
+}
+
+void Room::veng1TouchedHotspot0() {
+ if (_roomVar.veng.walkingToDoor) {
+ loadActorAnimC(OBJECT_DOOR, "s7r1d1", 0xa1, 0x7e, &Room::veng1ReachedDoor);
+ loadActorAnim2(OBJECT_PANEL, "s7r1g1", 0xd8, 0x79);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+void Room::veng1ReachedDoor() {
+ if (++_roomVar.veng.doorOpenCounter == 2)
+ loadRoomIndex(2, 1);
+}
+
+void Room::veng1TouchedTurbolift() {
+ playSoundEffectIndex(SND_DOOR1);
+ showRepublicMap(1, 0);
+}
+
+void Room::veng1LookAtDeadGuy() {
+ showText(TX_VEN4N014);
+}
+
+void Room::veng1UseSTricorderOnVent() {
+ spockScan(DIR_W, TX_VEN1_011);
+}
+
+void Room::veng1LookAtPanel() {
+ if (!_awayMission->veng.openedPanel)
+ showText(TX_VEN1N022);
+ else if (!_awayMission->veng.removedPanelDebris)
+ showText(TX_VEN1N019);
+ else
+ showText(TX_VEN1N010);
+}
+
+void Room::veng1LookAtDoor() {
+ showText(TX_VEN1N021);
+}
+
+void Room::veng1LookAtSaw() {
+ showText(TX_VEN1N001);
+}
+
+void Room::veng1LookAtDebris() {
+ showText(TX_VEN1N000);
+}
+
+void Room::veng1LookAtKirk() {
+ showText(TX_VEN1N002);
+}
+
+void Room::veng1LookAtMccoy() {
+ showText(TX_VEN1N004);
+}
+
+void Room::veng1LookAtSpock() {
+ showText(TX_VEN1N003);
+}
+
+void Room::veng1LookAtRedshirt() {
+ showText(TX_VEN1N005);
+}
+
+void Room::veng1LookAnywhere() {
+ showText(TX_VEN1N020);
+}
+
+void Room::veng1TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_VEN1_001);
+}
+
+void Room::veng1TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_VEN1_013);
+ showText(TX_SPEAKER_MCCOY, TX_VEN1_005);
+}
+
+void Room::veng1TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_VEN1_004);
+ showText(TX_SPEAKER_KIRK, TX_VEN1_002);
+}
+
+void Room::veng1TalkToRedshirt() {
+ showText(TX_SPEAKER_KIJE, TX_VEN1_016);
+}
+
+void Room::veng1UsePhaserOnDoor() {
+ showText(TX_SPEAKER_KIJE, TX_VEN1_015);
+}
+
+void Room::veng1UsePhaserOnPanel() {
+ showText(TX_SPEAKER_SPOCK, TX_VEN1_008);
+}
+
+void Room::veng1UseSTricorderOnSaw() {
+ spockScan(DIR_W, TX_VEN1_012);
+}
+
+void Room::veng1UseSTricorderOnDoor() {
+ if (_awayMission->veng.removedPanelDebris)
+ spockScan(DIR_N, TX_VEN1_009);
+ else
+ spockScan(DIR_N, TX_VEN1_007);
+}
+
+void Room::veng1UseSTricorderOnPanel() {
+ if (!_awayMission->veng.clearedPanelDebris)
+ spockScan(DIR_E, TX_VEN1_014);
+ else if (!_awayMission->veng.removedPanelDebris)
+ spockScan(DIR_E, TX_VEN1_006);
+ else
+ spockScan(DIR_E, TX_VEN1_010);
+}
+
+void Room::veng1GetPanel() {
+ walkCrewmanC(OBJECT_KIRK, 0xd3, 0x84, &Room::veng1KirkReachedPanel);
+ _awayMission->disableInput = true;
+}
+
+void Room::veng1KirkReachedPanel() {
+ loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng1KirkAccessedPanel);
+}
+
+void Room::veng1KirkAccessedPanel() {
+ _awayMission->disableInput = false;
+
+ if (!_awayMission->veng.clearedPanelDebris) {
+ showText(TX_VEN1N016);
+ } else if (!_awayMission->veng.openedPanel) {
+ _awayMission->veng.openedPanel = true;
+ showText(TX_VEN1N017);
+ loadActorAnim2(OBJECT_DEBRIS, "s7r1p2", 0xd1, 0x6a);
+ loadActorStandAnim(OBJECT_PANEL);
+ } else
+ showText(TX_VEN1_F33);
+
+ walkCrewman(OBJECT_KIRK, 0xc9, 0x98);
+}
+
+void Room::veng1UseSawOnPanel() {
+ showText(TX_VEN1N013);
+}
+
+void Room::veng1UseSawOnDoor() {
+ showText(TX_VEN1N014);
+}
+
+void Room::veng1UseDrillOnDebris() {
+ showText(TX_VEN1N009);
+}
+
+void Room::veng1UseSawOnDebris() {
+ showText(TX_VEN1N018);
+}
+
+void Room::veng1UseDrillOnPanel() {
+ _awayMission->disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0xd3, 0x84, &Room::veng1KirkReachedPanelToDrill);
+}
+
+void Room::veng1KirkReachedPanelToDrill() {
+ loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng1KirkDoneDrillingPanel);
+ playVoc("MADR7E2A");
+}
+
+void Room::veng1KirkDoneDrillingPanel() {
+ walkCrewman(OBJECT_KIRK, 0xc9, 0x98);
+ _awayMission->disableInput = false;
+ if (!_awayMission->veng.clearedPanelDebris) {
+ _awayMission->veng.clearedPanelDebris = true;
+ showText(TX_VEN1N008);
+ }
+}
+
+void Room::veng1UseHypoOnDebris() {
+ _awayMission->disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0xd3, 0x84, &Room::veng1KirkReachedDebris);
+}
+
+void Room::veng1KirkReachedDebris() {
+ loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng1KirkUsedHypoOnDebris);
+}
+
+void Room::veng1KirkUsedHypoOnDebris() {
+ walkCrewman(OBJECT_KIRK, 0xc9, 0x98);
+ _awayMission->disableInput = false;
+
+ if (!_awayMission->veng.oilInHypo)
+ showText(TX_VEN1N012);
+ else {
+ _awayMission->veng.loosenedDebrisWithOil = true;
+ showText(TX_VEN1N015);
+ }
+}
+
+void Room::veng1GetSaw() {
+ _awayMission->disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0x32, 0xa4, &Room::veng1ReachedSaw);
+}
+
+void Room::veng1ReachedSaw() {
+ loadActorAnimC(OBJECT_KIRK, "kuseln", -1, -1, &Room::veng1PickedUpSaw);
+}
+
+void Room::veng1PickedUpSaw() {
+ loadActorStandAnim(OBJECT_SAW);
+ showText(TX_VEN1N023);
+ giveItem(OBJECT_ILMD);
+
+ _awayMission->veng.tookMolecularSaw = true;
+ _awayMission->disableInput = false;
+}
+
+void Room::veng1GetDebris() {
+ _awayMission->disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0xd3, 0x84, &Room::veng1ReachedDebrisToGet);
+}
+
+void Room::veng1ReachedDebrisToGet() {
+ loadActorAnimC(OBJECT_KIRK, "kusemn", -1, -1, &Room::veng1TriedToGetDebris);
+}
+
+void Room::veng1TriedToGetDebris() {
+ walkCrewman(OBJECT_KIRK, 0xc9, 0x98);
+ _awayMission->disableInput = false;
+
+ if (!_awayMission->veng.loosenedDebrisWithOil)
+ showText(TX_VEN1N006);
+ else {
+ loadActorStandAnim(OBJECT_DEBRIS);
+ loadActorAnim2(OBJECT_PANEL, "s7r1p3", 0xd1, 0x6a);
+ showText(TX_VEN1N011);
+ _awayMission->veng.removedPanelDebris = true;
+ }
+}
+
+void Room::veng1UseMccoyOnDeadGuy() {
+ int val = getRandomWordInRange(0, 5);
+
+ switch (val) {
+ case 0:
+ // NOTE: The exact text differs from the text used in DEM3. But, in order for this
+ // text indexing scheme to work, two rooms can't use the same audio with different
+ // text. Original was "He's dead, jim." instead of "He's dead, Jim...".
+ showText(TX_SPEAKER_MCCOY, TX_DEM3_019);
+ break;
+
+ case 1:
+ showText(TX_SPEAKER_MCCOY, TX_VEN4_016);
+ break;
+
+ case 2:
+ case 3:
+ showText(TX_SPEAKER_MCCOY, TX_G_014);
+ break;
+
+ case 4:
+ case 5:
+ showText(TX_SPEAKER_MCCOY, TX_VEN0_016);
+ break;
+ }
}
}
diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp
index 5dfda3b02a..8282565745 100644
--- a/engines/startrek/text.cpp
+++ b/engines/startrek/text.cpp
@@ -68,6 +68,7 @@ extern const char *const g_gameStrings[] = {
"#BRID\\BRIDU146#Nothing to report, Captain.",
+ "#GENE\\G_014#This person's dead, Jim.",
"#GENE\\G_024#Fascinating.",
"#GENE\\G_043#Ouch! Watch it with that thing!",
@@ -2684,7 +2685,7 @@ extern const char *const g_gameStrings[] = {
"#VEN0\\VEN0_013#Captain, these phasers are not configured for fine cutting. We could cause extensive damage.",
"#VEN0\\VEN0_014#What kind of a butcher would do this sort of thing?",
"#VEN0\\VEN0_015#I'm a doctor, not a civil engineer!",
- "#VEN0\\VEN0_016#They are dead, Jim. All of them.",
+ "#VEN0\\VEN0_016#They're dead, Jim. All of them.", // TYPO
"#VEN0\\VEN0_017#Jim, don't forget, there's another survivor on board. We've got to find him!",
"#VEN0\\VEN0_018#My God, Jim. What kind of butcher would do something like this?",
"#VEN0\\VEN0_019#Punctured lung, nerve damage, brain damage, fractured arm and ribs; it's a miracle he lasted as long as he did. He's not coming back, Jim.",
@@ -2733,13 +2734,57 @@ extern const char *const g_gameStrings[] = {
"#VEN0\\VEN0N019#You pick up the beam. It's a little heavy, but you manage it.",
+ "#VEN1\\VEN1_001#I wonder if anything will be working in Auxilary Control.",
+ "#VEN1\\VEN1_002#You'll get your chance, Bones. I promise.",
+ "#VEN1\\VEN1_004#I'd like to meet the people responsible for this and give them a piece of my mind.",
+ "#VEN1\\VEN1_005#Too bad you can't say the same for the crew.",
+ "#VEN1\\VEN1_006#Initial scans show that the gear mechanism is currently jammed with metallic debris.",
+ "#VEN1\\VEN1_007#Readings of the door indicate a jam in the gear mechanism.",
+ "#VEN1\\VEN1_008#That may not be wise, Captain. It could damage the entire door assembly in its weakened condition.",
+ "#VEN1\\VEN1_009#The gear mechanism is now cleared.",
+ "#VEN1\\VEN1_010#The gears are moving freely and are completely operative.",
+ "#VEN1\\VEN1_011#The vent is far too small for any one of us to fit through. It is also blocked point three meters inside the duct.",
+ "#VEN1\\VEN1_012#This is a molecular saw, Captain. It is used for precision cutting. My tricorder reads that the power cells are fully charged.",
+ "#VEN1\\VEN1_013#The Starfleet Engineers did their work well Captain. A surprising amount of the ship is intact.",
+ "#VEN1\\VEN1_014#Tricorder indicates that the panel is currently sealed by Federation standard molecular bonding cement.",
+ "#VEN1\\VEN1_015#From my lessons at the Academy, sir, we were told that a standard issue Federation phaser does not have enough power to cut through a security door such as this one.",
+ "#VEN1\\VEN1_016#I'm not in a talking mood right now, sir.",
+ "#VEN1\\VEN1_F33#The panel is open.",
+ "#VEN1\\VEN1N000#A knot of debris is jamming the gear mechanism.",
+ "#VEN1\\VEN1N001#A Molecular Saw. The 23rd century equivalent of a hacksaw.",
+ "#VEN1\\VEN1N002#Captain Kirk hopes that he will never see the day when the Enterprise is this badly battered.",
+ "#VEN1\\VEN1N003#Irritated by the emotions of the humans that are accompanying him, Spock does his best to keep his mind on the problems at hand.",
+ "#VEN1\\VEN1N004#Leonard McCoy wishes he were back on the Enterprise.",
+ "#VEN1\\VEN1N005#Kije wishes that everyone would stop fidgeting. It's making him nervous.",
+ "#VEN1\\VEN1N006#The debris is jammed in too tight.",
+ "#VEN1\\VEN1N007#The door is jammed shut.",
+ "#VEN1\\VEN1N008#The drill easily breaks through the seal of the panel.",
+ "#VEN1\\VEN1N009#The drill is not powerful enough to cut through the debris.",
+ "#VEN1\\VEN1N010#The gear mechanism for the door is now fully functional.",
+ "#VEN1\\VEN1N011#The gears are completely cleared of debris.",
+ "#VEN1\\VEN1N012#The Hypo is empty.",
+ "#VEN1\\VEN1N013#The molecular saw is much too large for the panel.",
+ "#VEN1\\VEN1N014#The molecular saw will not penetrate a security door.",
+ "#VEN1\\VEN1N015#The oil seeps into and loosens the debris.",
+ "#VEN1\\VEN1N016#The panel has been fastened shut with some kind of sealant.",
+ "#VEN1\\VEN1N017#The panel opens easily.",
+ "#VEN1\\VEN1N018#The saw is too bulky to reach the jammed debris.",
+ "#VEN1\\VEN1N019#There appears to be debris jammed in the gear mechanism.",
+ "#VEN1\\VEN1N020#This corridor leads to auxiliary control. It is a real mess.",
+ "#VEN1\\VEN1N021#This door leads to auxiliary control.",
+ "#VEN1\\VEN1N022#This is the maintenance panel for the auxiliary control room door.",
+ "#VEN1\\VEN1N023#You retrieve the molecular saw.",
+
+
"#VEN2\\VEN2_028#Yes, Uhura. Just wanted a status report. Kirk out.",
"#VEN2\\VEN2_066#They are jamming all frequencies, Captain. We will not be able to contact the Enterprise.",
"#VEN2\\VEN2_098#What are you stalling for? Lower your shields.",
"#VEN2\\VEN2U093#Enterprise here. We're still tracking the distress call. Are you all right, Sir?",
+ "#VEN4\\VEN4_016#There's nothing more I can do.", // TYPO
"#VEN4\\VEN4N010#This is an empty hypodermic injector.",
+ "#VEN4\\VEN4N014#Yet another crewman of the Republic whose life was unfairly abbreviated.",
"#VEN6\\VEN6N007#The hypo is now filled with multipurpose oil.",
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index dca9713a27..682ee5f12f 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -126,6 +126,7 @@ enum GameStringIDs {
TX_BRIDU146,
+ TX_G_014,
TX_G_024,
TX_G_043,
@@ -2841,13 +2842,59 @@ enum GameStringIDs {
// UNUSED: VEN0_F15
+ TX_VEN1_001,
+ TX_VEN1_002,
+ // UNUSED
+ TX_VEN1_004,
+ TX_VEN1_005,
+ TX_VEN1_006,
+ TX_VEN1_007,
+ TX_VEN1_008,
+ TX_VEN1_009,
+ TX_VEN1_010,
+ TX_VEN1_011,
+ TX_VEN1_012,
+ TX_VEN1_013,
+ TX_VEN1_014,
+ TX_VEN1_015,
+ TX_VEN1_016,
+ TX_VEN1_F33,
+ TX_VEN1N000,
+ TX_VEN1N001,
+ TX_VEN1N002,
+ TX_VEN1N003,
+ TX_VEN1N004,
+ TX_VEN1N005,
+ TX_VEN1N006,
+ TX_VEN1N007,
+ TX_VEN1N008,
+ TX_VEN1N009,
+ TX_VEN1N010,
+ TX_VEN1N011,
+ TX_VEN1N012,
+ TX_VEN1N013,
+ TX_VEN1N014,
+ TX_VEN1N015,
+ TX_VEN1N016,
+ TX_VEN1N017,
+ TX_VEN1N018,
+ TX_VEN1N019,
+ TX_VEN1N020,
+ TX_VEN1N021,
+ TX_VEN1N022,
+ TX_VEN1N023,
+ // UNUSED: VEN1NA18 (variant of VEN1N018)
+
+
TX_VEN2_028,
TX_VEN2_066,
TX_VEN2_098,
TX_VEN2U093,
+ TX_VEN4_016,
TX_VEN4N010,
+ TX_VEN4N014,
TX_VEN6N007,