aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek
diff options
context:
space:
mode:
authorMatthew Stewart2018-06-09 21:08:25 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit0c28fd964e5aab156539d6ff64b82aa06cb22aef (patch)
treef76bdb8771a61299f629bb06aa5d1f4d96fcc579 /engines/startrek
parentad76c744afc777c2e602fb2f3646ef7b93925db2 (diff)
downloadscummvm-rg350-0c28fd964e5aab156539d6ff64b82aa06cb22aef.tar.gz
scummvm-rg350-0c28fd964e5aab156539d6ff64b82aa06cb22aef.tar.bz2
scummvm-rg350-0c28fd964e5aab156539d6ff64b82aa06cb22aef.zip
STARTREK: TUG1
Diffstat (limited to 'engines/startrek')
-rw-r--r--engines/startrek/awaymission.h2
-rw-r--r--engines/startrek/module.mk1
-rw-r--r--engines/startrek/room.cpp4
-rw-r--r--engines/startrek/room.h48
-rw-r--r--engines/startrek/rooms/function_map.h67
-rw-r--r--engines/startrek/rooms/tug0.cpp4
-rw-r--r--engines/startrek/rooms/tug1.cpp311
-rw-r--r--engines/startrek/text.h72
8 files changed, 507 insertions, 2 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index bf97739f3a..d91ad46c77 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -101,10 +101,12 @@ struct AwayMission {
int16 field2b; // 0x2b
int16 field2d; // 0x2d;
bool engineerConscious; // 0x30
+ bool gotJunkPile; // 0x3f
bool gotTransmogrifier; // 0x43
bool transporterRepaired; // 0x44
bool spockExaminedTransporter; // 0x45
bool usedTransmogrifierOnTransporter; // 0x46
+ bool forceFieldDown; // 0x47
bool haveBomb; // 0x49
} tug;
};
diff --git a/engines/startrek/module.mk b/engines/startrek/module.mk
index 36aff9e691..fd3f80a747 100644
--- a/engines/startrek/module.mk
+++ b/engines/startrek/module.mk
@@ -27,6 +27,7 @@ MODULE_OBJS = \
rooms/demon5.o \
rooms/demon6.o \
rooms/tug0.o \
+ rooms/tug1.o \
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index b66764f6cd..4f960fb2cb 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -69,6 +69,10 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
_roomActionList = tug0ActionList;
_numRoomActions = sizeof(tug0ActionList) / sizeof(RoomAction);
}
+ else if (name == "TUG1") {
+ _roomActionList = tug1ActionList;
+ _numRoomActions = sizeof(tug1ActionList) / sizeof(RoomAction);
+ }
else {
warning("Room \"%s\" unimplemented", name.c_str());
_numRoomActions = 0;
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 84b1b69e13..943ed901eb 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -535,6 +535,54 @@ public:
void tug0UseSTricorderAnywhere();
void tug0UseMTricorderAnywhere();
+ // TUG1
+ void tug1Tick1();
+ void tug1UseSTricorderOnAnything();
+ void tug1LookAtBridgeDoor();
+ void tug1UseSTricorderOnBridgeDoor();
+ void tug1UsePhaserOnBridgeDoor();
+ void tug1KirkReachedFiringPosition();
+ void tug1KirkPulledOutPhaser();
+ void tug1KirkFinishedFiringPhaser();
+ void tug1TalkToSpock();
+ void tug1UseSTricorderOnJunkPile();
+ void tug1LookAtJunkPile();
+ void tug1GetJunkPile();
+ void tug1KirkReachedJunkPile();
+ void tug1KirkFinishedTakingJunkPile();
+ void tug1UsePhaserOnWelder();
+ void tug1UseWelderOnWireScraps();
+ void tug1UseWelderOnMetalScraps();
+ void tug1UseCombBitOnTransmogrifier();
+ void tug1UsePhaserWelderOnBridgeDoor();
+ void tug1UsePhaserWelderOnBridgeDoorInLeftSpot();
+ void tug1KirkReachedBridgeDoorWithWelder();
+ void tug1KirkFinishedUsingWelder();
+ void tug1KirkReachedBridgeDoorWithWelderInLeftSpot();
+ void tug1KirkFinishedUsingWelderInLeftSpot();
+ void tug1LookAnywhere();
+ void tug1LookAtMccoy();
+ void tug1LookAtSpock();
+ void tug1LookAtRedshirt();
+ void tug1TalkToMccoy();
+ void tug1TalkToRedshirt();
+ void tug1LookAtTerminal();
+ void tug1LookAtDebris();
+ void tug1LookAtBrigDoor();
+ void tug1UseSTricorderOnBrigDoor();
+ void tug1TalkToKirk();
+ void tug1UseCommunicator();
+ void tug1WalkToBridgeDoor();
+ void tug1KirkReachedBridgeDoor();
+ void tug1BridgeDoorOpened();
+ void tug1WalkToBrigDoor();
+ void tug1UseMTricorderAnywhere();
+ void tug1UseMTricorderOnBridgeDoor();
+ void tug1UseMTricorderOnBrigDoor();
+ void tug1UseSpockOnBridgeDoor();
+ void tug1UseRedshirtOnBridgeDoor();
+ void tug1UseMedkitOnBridgeDoor();
+
private:
// Room-specific variables. This is memset'ed to 0 when the room is initialized.
union {
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 1b52b0537f..7ea01393c8 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -544,8 +544,8 @@ RoomAction tug0ActionList[] = {
{ Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0), &Room::tug0UsePhaserOnWelder },
{ Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0), &Room::tug0UsePhaserOnWelder },
- { Action(ACTION_USE, OBJECT_IPWE, OBJECT_IWIRSCRP, 0), &Room::tug0UseWelderOnWireScraps },
- { Action(ACTION_USE, OBJECT_IPWE, OBJECT_IJNKMETL, 0), &Room::tug0UseWelderOnMetalScraps },
+ { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0), &Room::tug0UseWelderOnWireScraps },
+ { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0), &Room::tug0UseWelderOnMetalScraps },
{ Action(ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0), &Room::tug0UseCombBitOnTransmogrifier },
{ Action(ACTION_USE, OBJECT_SPOCK, 11, 0), &Room::tug0UseTransporter },
@@ -589,6 +589,69 @@ RoomAction tug0ActionList[] = {
{ Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::tug0UseMTricorderAnywhere },
};
+
+// TUG1
+RoomAction tug1ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::tug1Tick1 },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::tug1UseSTricorderOnAnything },
+ { Action(ACTION_LOOK, 0x21, 0, 0), &Room::tug1LookAtBridgeDoor },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::tug1UseSTricorderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IPHASERS, 0x21, 0), &Room::tug1UsePhaserOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IPHASERK, 0x21, 0), &Room::tug1UsePhaserOnBridgeDoor },
+ { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::tug1KirkReachedFiringPosition },
+ { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::tug1KirkPulledOutPhaser },
+ { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::tug1KirkFinishedFiringPhaser },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::tug1TalkToSpock },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::tug1UseSTricorderOnJunkPile },
+ { Action(ACTION_LOOK, 8, 0, 0), &Room::tug1LookAtJunkPile },
+ { Action(ACTION_GET, 8, 0, 0), &Room::tug1GetJunkPile },
+ { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::tug1KirkReachedJunkPile },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::tug1KirkFinishedTakingJunkPile },
+ { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0), &Room::tug1UsePhaserOnWelder },
+ { Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0), &Room::tug1UsePhaserOnWelder },
+ { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0), &Room::tug1UseWelderOnWireScraps },
+ { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0), &Room::tug1UseWelderOnMetalScraps },
+ { Action(ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0), &Room::tug1UseCombBitOnTransmogrifier },
+ { Action(ACTION_USE, OBJECT_IPWF, 0x22, 0), &Room::tug1UsePhaserWelderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IPWF, 0x21, 0), &Room::tug1UsePhaserWelderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IPWF, 0x20, 0), &Room::tug1UsePhaserWelderOnBridgeDoorInLeftSpot },
+ { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::tug1KirkReachedBridgeDoorWithWelder },
+ { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug1KirkFinishedUsingWelder },
+ { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::tug1KirkReachedBridgeDoorWithWelderInLeftSpot },
+ { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::tug1KirkFinishedUsingWelderInLeftSpot },
+ { Action(ACTION_LOOK, -1, 0, 0), &Room::tug1LookAnywhere },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::tug1LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::tug1LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::tug1LookAtRedshirt },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::tug1TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::tug1TalkToRedshirt },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::tug1LookAtTerminal },
+ { Action(ACTION_LOOK, 0x24, 0, 0), &Room::tug1LookAtDebris },
+ { Action(ACTION_LOOK, 0x25, 0, 0), &Room::tug1LookAtBrigDoor },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::tug1UseSTricorderOnBrigDoor },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::tug1TalkToKirk },
+ { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::tug1UseCommunicator },
+ { Action(ACTION_WALK, 0x21, 0, 0), &Room::tug1WalkToBridgeDoor },
+ { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::tug1KirkReachedBridgeDoor },
+ { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::tug1BridgeDoorOpened },
+ { Action(ACTION_WALK, 0x25, 0, 0), &Room::tug1WalkToBrigDoor },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::tug1UseMTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::tug1UseMTricorderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, 0x20, 0), &Room::tug1UseMTricorderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, 0x22, 0), &Room::tug1UseMTricorderOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, 0x25, 0), &Room::tug1UseMTricorderOnBrigDoor },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::tug1UseSpockOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::tug1UseSpockOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::tug1UseSpockOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::tug1UseRedshirtOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::tug1UseRedshirtOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::tug1UseRedshirtOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMEDKIT, 0x20, 0), &Room::tug1UseMedkitOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMEDKIT, 0x21, 0), &Room::tug1UseMedkitOnBridgeDoor },
+ { Action(ACTION_USE, OBJECT_IMEDKIT, 0x22, 0), &Room::tug1UseMedkitOnBridgeDoor },
+
+};
+
}
#endif
diff --git a/engines/startrek/rooms/tug0.cpp b/engines/startrek/rooms/tug0.cpp
index 016bbbbef2..e90544d57e 100644
--- a/engines/startrek/rooms/tug0.cpp
+++ b/engines/startrek/rooms/tug0.cpp
@@ -212,6 +212,10 @@ void Room::tug0UsePhaserOnWelder() {
loseItem(OBJECT_IPWE);
giveItem(OBJECT_IPWF);
showText(TX_TUG0N006);
+
+ // BUGFIX: this following line didn't exist, despite it existing in TUG1; meaning this
+ // was supposed to give points, but it only did in a specific room.
+ _vm->_awayMission.tug.missionScore += 3;
}
void Room::tug0UseWelderOnWireScraps() {
diff --git a/engines/startrek/rooms/tug1.cpp b/engines/startrek/rooms/tug1.cpp
new file mode 100644
index 0000000000..467d496646
--- /dev/null
+++ b/engines/startrek/rooms/tug1.cpp
@@ -0,0 +1,311 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "startrek/room.h"
+
+namespace StarTrek {
+
+#define OBJECT_JUNKPILE 8
+#define OBJECT_PHASERSHOT 9
+
+#define HOTSPOT_BRIDGEDOOR 0x21
+#define HOTSPOT_BRIDGEARCH 0x22
+#define HOTSPOT_TERMINAL 0x23
+#define HOTSPOT_DEBRIS 0x24
+#define HOTSPOT_BRIGDOOR 0x25
+
+void Room::tug1Tick1() {
+ playVoc("TUG1LOOP");
+
+ if (!_vm->_awayMission.tug.gotJunkPile)
+ loadActorAnim2(OBJECT_JUNKPILE, "jnkpil", 0xfd, 0xa0, 0);
+}
+
+void Room::tug1UseSTricorderOnAnything() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ loadActorAnim2(OBJECT_SPOCK, "sscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_014);
+
+ // NOTE: this action has a second implementation (which is never called). It displayed
+ // TX_TUG1_006. Was this meant to be displayed after the force field is down?
+}
+
+void Room::tug1LookAtBridgeDoor() {
+ if (_vm->_awayMission.tug.forceFieldDown)
+ return;
+ showText(TX_TUG1N005);
+}
+
+void Room::tug1UseSTricorderOnBridgeDoor() {
+ if (_vm->_awayMission.tug.forceFieldDown)
+ return;
+
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ loadActorAnim2(OBJECT_SPOCK, "sscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_002);
+}
+
+void Room::tug1UsePhaserOnBridgeDoor() {
+ if (_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_TUG1N007);
+ else {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewman(OBJECT_KIRK, 0xbe, 0x78, 3);
+ }
+}
+
+void Room::tug1KirkReachedFiringPosition() {
+ loadActorAnim2(OBJECT_KIRK, "kfiren", -1, -1, 4);
+}
+
+void Room::tug1KirkPulledOutPhaser() {
+ loadActorAnim2(OBJECT_PHASERSHOT, "t1phas", 0, 0, 5);
+ playSoundEffectIndex(SND_PHASSHOT);
+}
+
+void Room::tug1KirkFinishedFiringPhaser() {
+ _vm->_awayMission.disableInput = false;
+ loadActorStandAnim(OBJECT_KIRK);
+ loadActorStandAnim(OBJECT_PHASERSHOT);
+}
+
+void Room::tug1TalkToSpock() {
+ if (!_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_010);
+}
+
+void Room::tug1UseSTricorderOnJunkPile() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ loadActorAnim2(OBJECT_SPOCK, "sscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_009);
+}
+
+void Room::tug1LookAtJunkPile() {
+ showText(TX_TUG1N000);
+}
+
+void Room::tug1GetJunkPile() {
+ walkCrewman(OBJECT_KIRK, 0xe1, 0xaa, 1);
+}
+
+void Room::tug1KirkReachedJunkPile() {
+ loadActorAnim2(OBJECT_KIRK, "kpicke", 0xe1, 0xaa, 2);
+}
+
+void Room::tug1KirkFinishedTakingJunkPile() {
+ _vm->_awayMission.tug.gotJunkPile = true;
+ giveItem(OBJECT_IDEADPH);
+ giveItem(OBJECT_IPWE);
+ _vm->_awayMission.tug.missionScore++;
+ giveItem(OBJECT_IWIRSCRP);
+ giveItem(OBJECT_IJNKMETL);
+
+ loadActorStandAnim(OBJECT_JUNKPILE);
+ loadActorStandAnim(OBJECT_KIRK);
+}
+
+void Room::tug1UsePhaserOnWelder() {
+ loseItem(OBJECT_IPWE);
+ giveItem(OBJECT_IPWF);
+ showText(TX_TUG1N004);
+
+ _vm->_awayMission.tug.missionScore += 3;
+}
+
+void Room::tug1UseWelderOnWireScraps() {
+ showText(TX_TUG1N009);
+ loseItem(OBJECT_IWIRSCRP);
+}
+
+void Room::tug1UseWelderOnMetalScraps() {
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_012);
+ loseItem(OBJECT_IJNKMETL);
+ giveItem(OBJECT_ICOMBBIT);
+}
+
+void Room::tug1UseCombBitOnTransmogrifier() {
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_017);
+ loseItem(OBJECT_ICOMBBIT);
+ loseItem(OBJECT_IRT);
+ giveItem(OBJECT_IRTWB);
+}
+
+void Room::tug1UsePhaserWelderOnBridgeDoor() {
+ if (_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_TUG1N008);
+ else {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewman(OBJECT_KIRK, 0xc2, 0x6a, 6);
+ }
+}
+
+void Room::tug1UsePhaserWelderOnBridgeDoorInLeftSpot() {
+ if (_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_TUG1N007);
+ else {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewman(OBJECT_KIRK, 0xb1, 0x6a, 8);
+ }
+}
+
+void Room::tug1KirkReachedBridgeDoorWithWelder() {
+ playVoc("MUR4E9S");
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 0);
+ loadActorAnim2(OBJECT_PHASERSHOT, "t1weld", 0, 0, 7);
+}
+
+void Room::tug1KirkFinishedUsingWelder() {
+ loadActorStandAnim(OBJECT_PHASERSHOT);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_016);
+ _vm->_awayMission.disableInput = false;
+}
+
+void Room::tug1KirkReachedBridgeDoorWithWelderInLeftSpot() {
+ playVoc("MUR4E9S");
+ loadActorAnim2(OBJECT_KIRK, "kuseln", -1, -1, 0);
+ loadActorAnim2(OBJECT_PHASERSHOT, "t1weld", 0, 0, 9);
+}
+
+void Room::tug1KirkFinishedUsingWelderInLeftSpot() {
+ loadActorStandAnim(OBJECT_PHASERSHOT);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_015);
+ _vm->_awayMission.tug.forceFieldDown = true;
+ _vm->_awayMission.disableInput = false;
+ _vm->_awayMission.tug.missionScore++;
+}
+
+void Room::tug1LookAnywhere() {
+ showText(TX_TUG1N013);
+}
+
+void Room::tug1LookAtMccoy() {
+ showText(TX_TUG1N003);
+}
+
+void Room::tug1LookAtSpock() {
+ showText(TX_TUG1N006);
+}
+
+void Room::tug1LookAtRedshirt() {
+ showText(TX_TUG1N002);
+}
+
+void Room::tug1TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_SIN3_012); // NOTE: uses "SIN3" text?
+}
+
+void Room::tug1TalkToRedshirt() {
+ showText(TX_SPEAKER_CHRISTENSEN, TX_TUG1L005);
+}
+
+void Room::tug1LookAtTerminal() {
+ showText(TX_TUG1N010);
+}
+
+void Room::tug1LookAtDebris() {
+ showText(TX_TUG1N011);
+}
+
+void Room::tug1LookAtBrigDoor() {
+ showText(TX_TUG1N001);
+}
+
+void Room::tug1UseSTricorderOnBrigDoor() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+ loadActorAnim2(OBJECT_SPOCK, "sscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_018);
+}
+
+void Room::tug1TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_TUG1_001);
+ showText(TX_SPEAKER_MCCOY, TX_TUG1_008);
+}
+
+// FIXME: not working
+void Room::tug1UseCommunicator() {
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_011);
+}
+
+void Room::tug1WalkToBridgeDoor() {
+ if (!_vm->_awayMission.tug.forceFieldDown)
+ return;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewman(OBJECT_KIRK, 0xc2, 0x6e, 10);
+}
+
+void Room::tug1KirkReachedBridgeDoor() {
+ _vm->_awayMission.disableInput = true;
+ loadActorAnim2(OBJECT_PHASERSHOT, "h1do", 0, 0, 11);
+}
+
+void Room::tug1BridgeDoorOpened() {
+ walkCrewman(OBJECT_KIRK, 0xc2, 0x63, 0);
+}
+
+void Room::tug1WalkToBrigDoor() {
+ walkCrewman(OBJECT_KIRK, 0xe9, 0x81, 0);
+}
+
+void Room::tug1UseMTricorderAnywhere() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_N;
+ loadActorAnim2(OBJECT_MCCOY, "mscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_MCCOY, TX_TUG1_003);
+}
+
+void Room::tug1UseMTricorderOnBridgeDoor() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_N;
+ loadActorAnim2(OBJECT_MCCOY, "mscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_MCCOY, TX_TUG1_007);
+}
+
+void Room::tug1UseMTricorderOnBrigDoor() {
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_N;
+ loadActorAnim2(OBJECT_MCCOY, "mscann", -1, -1, 0);
+ playSoundEffectIndex(SND_TRICORDER);
+ showText(TX_SPEAKER_MCCOY, TX_TUG1_005);
+}
+
+void Room::tug1UseSpockOnBridgeDoor() {
+ if (!_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_SPEAKER_SPOCK, TX_TUG1_013);
+}
+
+void Room::tug1UseRedshirtOnBridgeDoor() {
+ if (!_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_SPEAKER_CHRISTENSEN, TX_TUG1L000);
+}
+
+void Room::tug1UseMedkitOnBridgeDoor() {
+ if (!_vm->_awayMission.tug.forceFieldDown)
+ showText(TX_SPEAKER_MCCOY, TX_TUG1_004);
+}
+
+}
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index dba4babb7d..2dc686a6dc 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -533,6 +533,42 @@ enum GameStringIDs {
TX_TUG0N014,
+ TX_SIN3_012,
+ TX_TUG1_001,
+ TX_TUG1_002,
+ TX_TUG1_003,
+ TX_TUG1_004,
+ TX_TUG1_005,
+ TX_TUG1_006,
+ TX_TUG1_007,
+ TX_TUG1_008,
+ TX_TUG1_009,
+ TX_TUG1_010,
+ TX_TUG1_011,
+ TX_TUG1_012,
+ TX_TUG1_013,
+ TX_TUG1_014,
+ TX_TUG1_015,
+ TX_TUG1_016,
+ TX_TUG1_017,
+ TX_TUG1_018,
+ TX_TUG1L000,
+ TX_TUG1L005,
+ TX_TUG1N000,
+ TX_TUG1N001,
+ TX_TUG1N002,
+ TX_TUG1N003,
+ TX_TUG1N004,
+ TX_TUG1N005,
+ TX_TUG1N006,
+ TX_TUG1N007,
+ TX_TUG1N008,
+ TX_TUG1N009,
+ TX_TUG1N010,
+ TX_TUG1N011,
+ TX_TUG1N013,
+
+
TX_END
};
@@ -1042,6 +1078,42 @@ const char * const g_gameStrings[] = {
"#TUG0\\TUG0N012#These transporter controls are now operational. They are set for just inside the bridge door.",
"#TUG0\\TUG0N013#This is the main transporter pad of the Masada.",
"#TUG0\\TUG0N014#This man was obviously the transporter engineer. He is unconscious, but alive.",
+
+
+ "#SIN3\\SIN3_012#Can't say I like the decor.", // FIXME
+ "#TUG1\\TUG1_001#This is a mess now, isn't it?",
+ "#TUG1\\TUG1_002#A forcefield of unusual configurations has been erected in front of the doorway which leads into the bridge. I don't think it would be healthy to approach too closely, Captain.",
+ "#TUG1\\TUG1_003#I'm getting life readings both on the bridge and in the brig, Jim.",
+ "#TUG1\\TUG1_004#Jim, I can only perform medical miracles not engineering ones.",
+ "#TUG1\\TUG1_005#Jim, I'm picking up 11 life forms in the brig. That accounts for over half the crew. I don't like what that indicates.",
+ "#TUG1\\TUG1_006#Nothing unusual is detected.",
+ "#TUG1\\TUG1_007#The force field is interfering too much to get an accurate reading, Jim",
+ "#TUG1\\TUG1_008#My daddy would have sent me to bed without supper if I'd done something like this.",
+ "#TUG1\\TUG1_009#Five phasers without power packs, a drained phaser welder, insulation and bits of wire, and droplets of cooled molten metal.",
+ "#TUG1\\TUG1_010#I don't think we can bring down that forcefield, Captain. If we could, though, it might be less risky than trying to transport onto the bridge.",
+ "#TUG1\\TUG1_011#I strongly recommend that we keep our silence, Captain. The Elasi are quite capable of tracing any communication from within this vessel.",
+ "#TUG1\\TUG1_012#I think that does it -- a Comb Bit for the transmogrifier. Now I can continue repairs on the transporter controls. ",
+ "#TUG1\\TUG1_013#If we could find a point to interrupt the flow of power to the field we could gain access to the bridge, Captain.",
+ "#TUG1\\TUG1_014#Strong electromagnetic readings come from the doorway at the far end of the hallway.",
+ "#TUG1\\TUG1_015#That did it. The field is deactivated, Captain.",
+ "#TUG1\\TUG1_016#The field is absorbing the energy.",
+ "#TUG1\\TUG1_017#he parts fit together satisfactorily.",
+ "#TUG1\\TUG1_018#Tricorder readings indicate an indeterminate number of people in the brig. At least 2 are armed with phasers. I recommend caution when entering.",
+ "#TUG1\\TUG1L000#I doubt that our phasers could get through that, Captain.",
+ "#TUG1\\TUG1L005#This corridor provides access to the transporter room, Captain. It is secure.",
+ "#TUG1\\TUG1N000#A tangle of mangled equipment, reduced to junk. There are the remains of five phasers without power packs, a drained phaser welder, and scraps of wire and uncertain bits of metal junk.",
+ "#TUG1\\TUG1N001#According to the deckplans of this class of Starship, this is the entrance to the ship's brig.",
+ "#TUG1\\TUG1N002#Lt. Christensen is carefully watching the hallway",
+ "#TUG1\\TUG1N003#McCoy is fidgeting around.",
+ "#TUG1\\TUG1N004#Phaser Welder is now charged.",
+ "#TUG1\\TUG1N005#Some kind of forcefield appears to cover the door. ",
+ "#TUG1\\TUG1N006#Spock is analyzing the surroundings.",
+ "#TUG1\\TUG1N007#The field has already been deactivated.",
+ "#TUG1\\TUG1N008#The field has already been deactivated",
+ "#TUG1\\TUG1N009#The wire scraps are too small, they melt instead of fusing together, and you're left with nothing. ",
+ "#TUG1\\TUG1N010#This viewscreen/ communication terminal has been damaged beyond repair.",
+ "#TUG1\\TUG1N011#Twisted debris has been scattered along the side of the corridor.",
+ "#TUG1\\TUG1N013#You are in a typical starship corridor.",
};
}