aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/awaymission.h6
-rw-r--r--engines/startrek/module.mk6
-rw-r--r--engines/startrek/room.cpp6
-rw-r--r--engines/startrek/room.h52
-rw-r--r--engines/startrek/rooms/feather6.cpp1
-rw-r--r--engines/startrek/rooms/function_map.h5
-rw-r--r--engines/startrek/rooms/trial0.cpp330
-rw-r--r--engines/startrek/rooms/trial1.cpp37
-rw-r--r--engines/startrek/rooms/trial2.cpp37
-rw-r--r--engines/startrek/rooms/trial3.cpp37
-rw-r--r--engines/startrek/rooms/trial4.cpp37
-rw-r--r--engines/startrek/rooms/trial5.cpp37
-rw-r--r--engines/startrek/startrek.cpp2
-rw-r--r--engines/startrek/text.h171
14 files changed, 763 insertions, 1 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index d38fde4bbf..4af027015b 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -262,6 +262,12 @@ struct AwayMission {
bool showedSnakeToTlaoxac; // 0x35
int16 missionScore; // 0x36
} feather;
+
+ struct {
+ int16 field29; // 0x29
+ int16 field2b; // 0x2b
+ int16 missionScore; // 0x5f
+ } trial;
};
};
// Size: 0x129 bytes
diff --git a/engines/startrek/module.mk b/engines/startrek/module.mk
index 5022abe7c5..b0f103468b 100644
--- a/engines/startrek/module.mk
+++ b/engines/startrek/module.mk
@@ -52,6 +52,12 @@ MODULE_OBJS = \
rooms/feather5.o \
rooms/feather6.o \
rooms/feather7.o \
+ rooms/trial0.o \
+ rooms/trial1.o \
+ rooms/trial2.o \
+ rooms/trial3.o \
+ rooms/trial4.o \
+ rooms/trial5.o \
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index e3717abd8d..dd53b47d38 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -87,6 +87,12 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
ADD_ROOM(feather5);
ADD_ROOM(feather6);
ADD_ROOM(feather7);
+ ADD_ROOM(trial0);
+ ADD_ROOM(trial1);
+ ADD_ROOM(trial2);
+ ADD_ROOM(trial3);
+ ADD_ROOM(trial4);
+ ADD_ROOM(trial5);
if (_roomActionList == nullptr) {
warning("Room \"%s\" unimplemented", name.c_str());
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 58cd6f4e5a..94a1ea6f54 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -1716,6 +1716,58 @@ public:
void feather7KirkSatDown();
void feather7ReadyToBeamOut();
+
+ // TRIAL0
+ void trial0Tick1();
+ void trial0Tick40();
+ void trial0Timer0Expired();
+ void trial0WalkToRoomCenter();
+ void trial0ReachedRoomCenter();
+ void trial0LookAtWindow();
+ void trial0LookAtVlict();
+ void trial0LookAtGuard();
+ void trial0LookAtBench();
+ void trial0LookAtSeal();
+ void trial0LookAtKirk();
+ void trial0LookAtSpock();
+ void trial0LookAtMccoy();
+ void trial0LookAtRedshirt();
+ void trial0LookAtQuetzecoatl();
+ void trial0TalkToVlict();
+ void trial0TalkToGuard();
+ void trial0TalkToQuetzecoatl();
+ void trial0TalkToMccoy();
+ void trial0TalkToSpock();
+ void trial0TalkToRedshirt();
+ void trial0UsePhaserOrRock();
+ void trial0UseSnakeOnVlict();
+ void trial0UseSnakeOnGuard();
+ void trial0UseMTricorderOnQuetzecoatl();
+ void trial0UseMTricorderOnVlict();
+ void trial0UseMTricorderAnywhere();
+ void trial0UseSTricorderOnWindow();
+ void trial0UseSTricorderAnywhere();
+ void trial0UseCommunicator();
+ void trial0UseCrewmanOnKlingon();
+ void trial0UseMccoyOnVlict();
+ void trial0UseMccoyOnGuard();
+ void trial0UseMedkitAnywhere();
+
+ // TRIAL1
+ void trial1Tick1();
+
+ // TRIAL2
+ void trial2Tick1();
+
+ // TRIAL3
+ void trial3Tick1();
+
+ // TRIAL4
+ void trial4Tick1();
+
+ // TRIAL5
+ void trial5Tick1();
+
private:
// Room-specific variables. This is memset'ed to 0 when the room is initialized.
union {
diff --git a/engines/startrek/rooms/feather6.cpp b/engines/startrek/rooms/feather6.cpp
index c75781402c..5b86a146b8 100644
--- a/engines/startrek/rooms/feather6.cpp
+++ b/engines/startrek/rooms/feather6.cpp
@@ -203,6 +203,7 @@ void Room::feather6UseKnifeAnywhere() {
}
void Room::feather6UseKnifeOnMccoy() {
+ // BUG: Stragey could be dead...
showText(TX_SPEAKER_STRAGEY, TX_FEA6_039); // BUGFIX: Speaker is Stragey (not Spock)
}
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index a00aa5603f..c83dc99700 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1785,6 +1785,11 @@ extern const int feather1NumActions, feather2NumActions, feather3NumA
extern const RoomAction feather5ActionList[], feather6ActionList[], feather7ActionList[];
extern const int feather5NumActions, feather6NumActions, feather7NumActions;
+extern const RoomAction trial0ActionList[], trial1ActionList[], trial2ActionList[], trial3ActionList[];
+extern const int trial0NumActions, trial1NumActions, trial2NumActions, trial3NumActions;
+extern const RoomAction trial4ActionList[], trial5ActionList[];
+extern const int trial4NumActions, trial5NumActions;
+
}
#endif
diff --git a/engines/startrek/rooms/trial0.cpp b/engines/startrek/rooms/trial0.cpp
new file mode 100644
index 0000000000..a6a2741945
--- /dev/null
+++ b/engines/startrek/rooms/trial0.cpp
@@ -0,0 +1,330 @@
+/* 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"
+
+#define OBJECT_VLICT 8
+#define OBJECT_GUARD 9
+#define OBJECT_QUETZECOATL 10
+
+#define HOTSPOT_BENCH 0x23
+#define HOTSPOT_WINDOW 0x25
+#define HOTSPOT_CENTER 0x26
+
+namespace StarTrek {
+
+extern const RoomAction trial0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial0Tick1 },
+ { {ACTION_TICK, 40, 0, 0}, &Room::trial0Tick40 },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::trial0Timer0Expired },
+
+ { {ACTION_WALK, HOTSPOT_CENTER, 0, 0}, &Room::trial0WalkToRoomCenter },
+ { {ACTION_DONE_WALK, 1, 0, 0}, &Room::trial0ReachedRoomCenter },
+
+ { {ACTION_LOOK, HOTSPOT_WINDOW, 0, 0}, &Room::trial0LookAtWindow },
+ { {ACTION_LOOK, OBJECT_VLICT, 0, 0}, &Room::trial0LookAtVlict },
+ { {ACTION_LOOK, OBJECT_GUARD, 0, 0}, &Room::trial0LookAtGuard },
+ { {ACTION_LOOK, HOTSPOT_BENCH, 0, 0}, &Room::trial0LookAtBench },
+ { {ACTION_LOOK, HOTSPOT_CENTER, 0, 0}, &Room::trial0LookAtSeal },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::trial0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::trial0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::trial0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::trial0LookAtRedshirt },
+ { {ACTION_LOOK, OBJECT_QUETZECOATL, 0, 0}, &Room::trial0LookAtQuetzecoatl },
+ { {ACTION_TALK, OBJECT_VLICT, 0, 0}, &Room::trial0TalkToVlict },
+ { {ACTION_TALK, OBJECT_GUARD, 0, 0}, &Room::trial0TalkToGuard },
+ { {ACTION_TALK, OBJECT_QUETZECOATL, 0, 0}, &Room::trial0TalkToQuetzecoatl },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::trial0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::trial0TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::trial0TalkToRedshirt },
+
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::trial0UsePhaserOrRock },
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::trial0UsePhaserOrRock },
+ { {ACTION_USE, OBJECT_IROCK, 0xff, 0}, &Room::trial0UsePhaserOrRock },
+ { {ACTION_USE, OBJECT_ISNAKE, OBJECT_VLICT, 0}, &Room::trial0UseSnakeOnVlict },
+ { {ACTION_USE, OBJECT_ISNAKE, OBJECT_GUARD, 0}, &Room::trial0UseSnakeOnGuard },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_QUETZECOATL, 0}, &Room::trial0UseMTricorderOnQuetzecoatl },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_VLICT, 0}, &Room::trial0UseMTricorderOnVlict },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::trial0UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_WINDOW, 0}, &Room::trial0UseSTricorderOnWindow },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::trial0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::trial0UseCommunicator },
+
+ { {ACTION_USE, OBJECT_SPOCK, OBJECT_GUARD, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_KIRK, OBJECT_GUARD, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_GUARD, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_SPOCK, OBJECT_VLICT, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_KIRK, OBJECT_VLICT, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_VLICT, 0}, &Room::trial0UseCrewmanOnKlingon },
+ { {ACTION_USE, OBJECT_MCCOY, OBJECT_VLICT, 0}, &Room::trial0UseMccoyOnVlict },
+ { {ACTION_USE, OBJECT_MCCOY, OBJECT_GUARD, 0}, &Room::trial0UseMccoyOnGuard },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::trial0UseMedkitAnywhere },
+};
+
+extern const int trial0NumActions = sizeof(trial0ActionList) / sizeof(RoomAction);
+
+
+void Room::trial0Tick1() {
+ playVoc("TRI0LOOP");
+ _vm->_awayMission.timers[0] = getRandomWordInRange(180, 600);
+ _vm->_awayMission.trial.field2b = 0x1d;
+ loadActorAnim2(OBJECT_VLICT, "vlict1", 0x9f, 0x48);
+ loadActorAnim2(OBJECT_GUARD, "kgstnd", 0xdc, 0x6a);
+ loadActorAnim2(OBJECT_QUETZECOATL, "qteleg", 0x10e, 0xaa);
+}
+
+void Room::trial0Tick40() {
+ showText(TX_SPEAKER_VLICT, TX_TRI0_058);
+}
+
+void Room::trial0Timer0Expired() { // Doesn't do anything?
+ _vm->_awayMission.timers[0] = getRandomWordInRange(180, 600);
+}
+
+void Room::trial0WalkToRoomCenter() {
+ _vm->_awayMission.disableInput = true;
+ _vm->_awayMission.crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_N;
+ walkCrewmanC(OBJECT_KIRK, 0xa0, 0xaa, &Room::trial0ReachedRoomCenter);
+}
+
+void Room::trial0ReachedRoomCenter() {
+ bool gaveUp = false;
+
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_VLICT, TX_TRI0_053);
+
+ const TextRef choices1[] = {
+ TX_SPEAKER_KIRK,
+ TX_TRI0_019, TX_TRI0_016, TX_TRI0_021,
+ TX_BLANK
+ };
+ showText(choices1);
+
+ showText(TX_SPEAKER_VLICT, TX_TRI0_054);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_004);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_047);
+
+ const TextRef choices2[] = {
+ TX_SPEAKER_KIRK,
+ TX_TRI0_011, TX_TRI0_018, TX_TRI0_015,
+ TX_BLANK
+ };
+ int choice = showText(choices2);
+
+ if (choice == 0) { // Kirk intervenes as a warrior
+ showText(TX_SPEAKER_VLICT, TX_TRI0_043);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_002);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_056);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_061);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_001);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_060);
+ _vm->_awayMission.disableInput = true;
+ loadRoomIndex(1, 4);
+ } else if (choice == 1) { // "This trial is a mockery"
+ showText(TX_SPEAKER_VLICT, TX_TRI0_048);
+ showText(TX_SPEAKER_QUETZECOATL, TX_TRI0_041);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_050);
+ showText(TX_SPEAKER_QUETZECOATL, TX_TRI0_039);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_059);
+ showText(TX_SPEAKER_QUETZECOATL, TX_TRI0_040);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_046);
+
+ const TextRef choices3[] = {
+ TX_SPEAKER_KIRK,
+ TX_TRI0_023, TX_TRI0_006, TX_TRI0_010,
+ TX_BLANK
+ };
+ choice = showText(choices3);
+
+ if (choice == 0 || choice == 1) {
+ showText(TX_SPEAKER_VLICT, TX_TRI0_052);
+
+ const TextRef choices4[] = {
+ TX_SPEAKER_KIRK,
+ TX_TRI0_017, TX_TRI0_020, TX_TRI0_008,
+ TX_BLANK
+ };
+ choice = showText(choices4);
+
+ if (choice == 0 || choice == 1) {
+ showText(TX_SPEAKER_VLICT, TX_TRI0_057);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_003);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_051);
+
+ const TextRef choices5[] = {
+ TX_SPEAKER_KIRK,
+ TX_TRI0_009, TX_TRI0_014, TX_TRI0_013,
+ TX_BLANK
+ };
+ choice = showText(choices5);
+
+ if (choice == 0 || choice == 1) {
+ showText(TX_SPEAKER_VLICT, TX_TRI0_055);
+ _vm->_awayMission.disableInput = true;
+ loadRoomIndex(1, 4);
+ } else { // choice == 2
+ showText(TX_SPEAKER_VLICT, TX_TRI0_045);
+ _vm->_awayMission.disableInput = true;
+ loadRoomIndex(1, 4);
+ }
+ } else // choice == 2
+ gaveUp = true;
+ } else // choice == 2
+ gaveUp = true;
+ } else // choice == 2
+ gaveUp = true;
+
+ if (gaveUp) {
+ playMidiMusicTracks(2, -1);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_049);
+ showText(TX_SPEAKER_VLICT, TX_TRI0_044);
+ _vm->_awayMission.trial.missionScore = 0;
+
+ // FIXME: Are these parameters in the right order?
+ endMission(_vm->_awayMission.trial.field29, _vm->_awayMission.trial.field2b, 0);
+ }
+}
+
+void Room::trial0LookAtWindow() {
+ showText(TX_TRI0N007);
+}
+
+void Room::trial0LookAtVlict() {
+ showText(TX_TRI0N001);
+}
+
+void Room::trial0LookAtGuard() {
+ showText(TX_TRI0N000);
+}
+
+void Room::trial0LookAtBench() {
+ showText(TX_TRI0N006);
+}
+
+void Room::trial0LookAtSeal() {
+ showText(TX_TRI0N008);
+}
+
+void Room::trial0LookAtKirk() {
+ showText(TX_TRI0N004);
+}
+
+void Room::trial0LookAtSpock() {
+ showText(TX_TRI0N005);
+}
+
+void Room::trial0LookAtMccoy() {
+ showText(TX_TRI0N002);
+}
+
+void Room::trial0LookAtRedshirt() {
+ showText(TX_TRI0N003);
+}
+
+void Room::trial0LookAtQuetzecoatl() {
+ showText(TX_TRI0N009);
+}
+
+void Room::trial0TalkToVlict() {
+ showText(TX_SPEAKER_VLICT, TX_TRI0_062);
+}
+
+void Room::trial0TalkToGuard() {
+ showText(TX_SPEAKER_KLINGON_GUARD, TX_TRI0_F24);
+ showText(TX_SPEAKER_BENNIE, TX_TRI0_065);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_007);
+ showText(TX_SPEAKER_BENNIE, TX_TRI0_064);
+ showText(TX_SPEAKER_KIRK, TX_TRI0_022);
+ showText(TX_SPEAKER_BENNIE, TX_TRI0_066);
+}
+
+void Room::trial0TalkToQuetzecoatl() {
+ showText(TX_SPEAKER_QUETZECOATL, TX_TRI0_042);
+}
+
+void Room::trial0TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_TRI0_031);
+}
+
+void Room::trial0TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_TRI0_025);
+}
+
+void Room::trial0TalkToRedshirt() {
+ showText(TX_SPEAKER_BENNIE, TX_TRI0_063);
+}
+
+void Room::trial0UsePhaserOrRock() {
+ showText(TX_SPEAKER_SPOCK, TX_TRI0_026);
+ showText(TX_SPEAKER_MCCOY, TX_TRI0_036);
+}
+
+void Room::trial0UseSnakeOnVlict() {
+ showText(TX_SPEAKER_VLICT, TX_TRI4_076);
+}
+
+void Room::trial0UseSnakeOnGuard() {
+ showText(TX_SPEAKER_KLINGON_GUARD, TX_TRI0_F24);
+}
+
+void Room::trial0UseMTricorderOnQuetzecoatl() {
+ mccoyScan(DIR_S, TX_TRI0_029, true);
+}
+
+void Room::trial0UseMTricorderOnVlict() {
+ mccoyScan(DIR_S, TX_TRI0_030, true);
+}
+
+void Room::trial0UseMTricorderAnywhere() {
+ mccoyScan(DIR_S, TX_TRI0_035, true);
+}
+
+void Room::trial0UseSTricorderOnWindow() {
+ spockScan(DIR_S, TX_TRI0_037, true);
+}
+
+void Room::trial0UseSTricorderAnywhere() {
+ // ENHANCEMENT: Originally didn't play tricorder sound, etc
+ spockScan(DIR_S, TX_TRI0_038, true);
+}
+
+void Room::trial0UseCommunicator() {
+ showText(TX_SPEAKER_UHURA, TX_TRI0U075);
+}
+
+void Room::trial0UseCrewmanOnKlingon() {
+ showText(TX_SPEAKER_SPOCK, TX_TRI0_024);
+}
+
+void Room::trial0UseMccoyOnVlict() {
+ showText(TX_SPEAKER_MCCOY, TX_TRI0_027);
+}
+
+void Room::trial0UseMccoyOnGuard() {
+ showText(TX_SPEAKER_MCCOY, TX_TRI0_028);
+}
+
+void Room::trial0UseMedkitAnywhere() {
+ showText(TX_SPEAKER_MCCOY, TX_TRI0_034);
+}
+
+}
diff --git a/engines/startrek/rooms/trial1.cpp b/engines/startrek/rooms/trial1.cpp
new file mode 100644
index 0000000000..2df16b84af
--- /dev/null
+++ b/engines/startrek/rooms/trial1.cpp
@@ -0,0 +1,37 @@
+/* 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 {
+
+extern const RoomAction trial1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial1Tick1 },
+};
+
+extern const int trial1NumActions = sizeof(trial1ActionList) / sizeof(RoomAction);
+
+
+void Room::trial1Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/trial2.cpp b/engines/startrek/rooms/trial2.cpp
new file mode 100644
index 0000000000..1bcec41f11
--- /dev/null
+++ b/engines/startrek/rooms/trial2.cpp
@@ -0,0 +1,37 @@
+/* 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 {
+
+extern const RoomAction trial2ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial2Tick1 },
+};
+
+extern const int trial2NumActions = sizeof(trial2ActionList) / sizeof(RoomAction);
+
+
+void Room::trial2Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/trial3.cpp b/engines/startrek/rooms/trial3.cpp
new file mode 100644
index 0000000000..afbb1eee6e
--- /dev/null
+++ b/engines/startrek/rooms/trial3.cpp
@@ -0,0 +1,37 @@
+/* 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 {
+
+extern const RoomAction trial3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial3Tick1 },
+};
+
+extern const int trial3NumActions = sizeof(trial3ActionList) / sizeof(RoomAction);
+
+
+void Room::trial3Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/trial4.cpp b/engines/startrek/rooms/trial4.cpp
new file mode 100644
index 0000000000..39869aa577
--- /dev/null
+++ b/engines/startrek/rooms/trial4.cpp
@@ -0,0 +1,37 @@
+/* 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 {
+
+extern const RoomAction trial4ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial4Tick1 },
+};
+
+extern const int trial4NumActions = sizeof(trial4ActionList) / sizeof(RoomAction);
+
+
+void Room::trial4Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/trial5.cpp b/engines/startrek/rooms/trial5.cpp
new file mode 100644
index 0000000000..c2f7298d9e
--- /dev/null
+++ b/engines/startrek/rooms/trial5.cpp
@@ -0,0 +1,37 @@
+/* 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 {
+
+extern const RoomAction trial5ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::trial5Tick1 },
+};
+
+extern const int trial5NumActions = sizeof(trial5ActionList) / sizeof(RoomAction);
+
+
+void Room::trial5Tick1() {
+}
+
+}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 876c1f6389..fe496d22bd 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -83,7 +83,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_textboxVar6 = 0;
_textboxHasMultipleChoices = false;
- _missionToLoad = "FEATHER";
+ _missionToLoad = "TRIAL";
_roomIndexToLoad = 0;
for (int i = 0; i < NUM_OBJECTS; i++)
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index f669819d33..3570863f47 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -107,6 +107,10 @@ enum GameStringIDs {
TX_SPEAKER_QUETZECOATL,
TX_SPEAKER_TLAOXAC,
+ TX_SPEAKER_BENNIE,
+ TX_SPEAKER_VLICT,
+ TX_SPEAKER_KLINGON_GUARD,
+
TX_BRIDU146,
TX_G_024,
@@ -1984,6 +1988,89 @@ enum GameStringIDs {
TX_FEA7_030,
+ TX_TRI0_001,
+ TX_TRI0_002,
+ TX_TRI0_003,
+ TX_TRI0_004,
+ // MISSING
+ TX_TRI0_006,
+ TX_TRI0_007,
+ TX_TRI0_008,
+ TX_TRI0_009,
+ TX_TRI0_010,
+ TX_TRI0_011,
+ // UNUSED
+ TX_TRI0_013,
+ TX_TRI0_014,
+ TX_TRI0_015,
+ TX_TRI0_016,
+ TX_TRI0_017,
+ TX_TRI0_018,
+ TX_TRI0_019,
+ TX_TRI0_020,
+ TX_TRI0_021,
+ TX_TRI0_022,
+ TX_TRI0_023,
+ TX_TRI0_024,
+ TX_TRI0_025,
+ TX_TRI0_026,
+ TX_TRI0_027,
+ TX_TRI0_028,
+ TX_TRI0_029,
+ TX_TRI0_030,
+ TX_TRI0_031,
+ // UNUSED
+ TX_TRI0_034,
+ TX_TRI0_035,
+ TX_TRI0_036,
+ TX_TRI0_037,
+ TX_TRI0_038,
+ TX_TRI0_039,
+ TX_TRI0_040,
+ TX_TRI0_041,
+ TX_TRI0_042,
+ TX_TRI0_043,
+ TX_TRI0_044,
+ TX_TRI0_045,
+ TX_TRI0_046,
+ TX_TRI0_047,
+ TX_TRI0_048,
+ TX_TRI0_049,
+ TX_TRI0_050,
+ TX_TRI0_051,
+ TX_TRI0_052,
+ TX_TRI0_053,
+ TX_TRI0_054,
+ TX_TRI0_055,
+ TX_TRI0_056,
+ TX_TRI0_057,
+ TX_TRI0_058,
+ TX_TRI0_059,
+ TX_TRI0_060,
+ TX_TRI0_061,
+ TX_TRI0_062,
+ TX_TRI0_063,
+ TX_TRI0_064,
+ TX_TRI0_065,
+ TX_TRI0_066,
+ // UNUSED (067)
+ TX_TRI0_F24,
+ TX_TRI0N000,
+ TX_TRI0N001,
+ TX_TRI0N002,
+ TX_TRI0N003,
+ TX_TRI0N004,
+ TX_TRI0N005,
+ TX_TRI0N006,
+ TX_TRI0N007,
+ TX_TRI0N008,
+ TX_TRI0N009,
+ TX_TRI0U075,
+
+
+ TX_TRI4_076,
+
+
TX_SIN3_012,
@@ -1997,6 +2084,7 @@ enum GameStringIDs {
TX_END
};
+// TODO: Move this out of the header file. It's inflating the executable size.
const char * const g_gameStrings[] = {
nullptr,
"",
@@ -2042,6 +2130,10 @@ const char * const g_gameStrings[] = {
"Quetzecoatl",
"Tlaoxac",
+ "Ensign Bennie",
+ "Vlict",
+ "Klingon Guard",
+
"#BRID\\BRIDU146#Nothing to report, Captain.",
"#GENE\\G_024#Fascinating.",
@@ -3901,6 +3993,85 @@ const char * const g_gameStrings[] = {
"#FEA7\\FEA7_030#Your harshness is unwarranted, but I sense truth in this. Perhaps this is what happened to my children on the Klingon world of Hrakkour, which would explain why they are searching for me. I have clearly abused the power that was given me long ago.",
+ "#TRI0\\TRI0_001#I want your word of honor, Vlict, that Quetzecoatl will not be harmed while we take these tests.",
+ "#TRI0\\TRI0_002#I've faced Klingons, both in personal and ship-to-ship combat. Your own records will confirm this. If I'm not worthy of their honors, why didn't they kill me?",
+ "#TRI0\\TRI0_003#Then the Klingon Empire is wrong.",
+ "#TRI0\\TRI0_004#Those are serious charges, Vlict. Should he not be tried by a Klingon High Court?",
+ "#TRI0\\TRI0_006#By our standards, he would rank among the greatest heroes of the Federation: Gandhi, Surak, M'lelto-jhi, Shanarda. We will not abandon him.",
+ "#TRI0\\TRI0_007#Ensign!",
+ "#TRI0\\TRI0_008#Fine. Can we get this over with? I've got shore leave scheduled on Ryza next week.",
+ "#TRI0\\TRI0_009#Give me an opportunity. If I succeed, Quetzecoatl goes free.",
+ "#TRI0\\TRI0_010#Guess I can't argue with you. Pleasant conquests, admiral.",
+ "#TRI0\\TRI0_011#I'm a warrior, Vlict! I hereby intervene for him and demand the honors and responsibilities of a warrior's trial!",
+ "#TRI0\\TRI0_013#I'm James T. Kirk. I'm more worthy than you'll ever be, and I have girlfriends on fifty planets who will vouch for that!",
+ "#TRI0\\TRI0_014#If it means that I can prevent you from murdering an ancient and blameless creature, yes. And I'm prepared to back it up.",
+ "#TRI0\\TRI0_015#Oh well. I'm afraid you're on your own, Quetzecoatl.",
+ "#TRI0\\TRI0_016#Stick around, Vlict. There are more surprises awaiting you.",
+ "#TRI0\\TRI0_017#Then a Klingon can thrive on the conflict between his inner nature and his philosophy. Clearly, the people of Hrakkour did that.",
+ "#TRI0\\TRI0_018#Then this trial is a mockery for the entire galaxy to see!",
+ "#TRI0\\TRI0_019#There's nothing less appealing than a gloating Klingon, Vlict. Let's get this trial under way.",
+ "#TRI0\\TRI0_020#This is a matter for a philosophical debate, not a trial! The state has no right to interfere in a person's conscience.",
+ "#TRI0\\TRI0_021#Why does every Klingon tell me they expected to meet me in battle? You really have a one-track mind!",
+ "#TRI0\\TRI0_022#You will act with the discipline of a Federation officer, Ensign, or you will return to the Enterprise. Do I make myself clear?",
+ "#TRI0\\TRI0_023#You're going to kill this old man because he encouraged non-violence? The Federation cannot accept this.",
+ "#TRI0\\TRI0_024#Any hostile action here may result in the destruction of the Enterprise.",
+ "#TRI0\\TRI0_025#Captain, I estimate the odds of this court acquitting Quetzecoatl at 0.086 percent.",
+ "#TRI0\\TRI0_026#Captain, may I remind you that we are deep in Klingon space? If we attack them here, they may respond by destroying the Enterprise.",
+ "#TRI0\\TRI0_027#Damn it Jim, I'm a doctor not a arbitrator.",
+ "#TRI0\\TRI0_028#Damn it, Jim! I use my hands to save lives not take them.",
+ "#TRI0\\TRI0_029#He's still weak from the operation.",
+ "#TRI0\\TRI0_030#One healthy adult klingon male.",
+ "#TRI0\\TRI0_031#I've got nothing to say to you, Jim.",
+ "#TRI0\\TRI0_034#Nobody needs healing, Jim, but you will if they harm my patient.",
+ "#TRI0\\TRI0_035#Nothing of interest.",
+ "#TRI0\\TRI0_036#Don't be a fool, Jim! We can't risk the Enterprise! We've already signed one person's death warrant!", // TYPO
+ "#TRI0\\TRI0_037#Low level radiation, within safety limits. But you wouldn't want to spend more than a few days here.",
+ "#TRI0\\TRI0_038#Nothing of interest.",
+ "#TRI0\\TRI0_039#Children should not even play at war. To prepare them to kill is barbaric.",
+ "#TRI0\\TRI0_040#I have failed. Death is what I deserve.",
+ "#TRI0\\TRI0_041#I offered them insights into the philosophy of peace and cooperation. They chose to follow it of their own free will.",
+ "#TRI0\\TRI0_042#I'm frightened, Captain, but if I am to die, then I shall die well.",
+ "#TRI0\\TRI0_043#A Federation officer, claiming the rights of a Klingon warrior? How dare you insult me, Kirk!",
+ "#TRI0\\TRI0_044#As for you Kirk, I expected a more forceful response. I had heard you were a worthy opponent. Instead, I see a cringing coward. Leave this place, Kirk. You dishonor it.",
+ "#TRI0\\TRI0_045#Ha! Ha! You have never encountered Klingon women, Captain. But that was the response of a true warrior. You have earned my respect. I shall give you and your companions a chance to defend the traitor.",
+ "#TRI0\\TRI0_046#He has admitted guilt. You have surrendered him to Klingon law. Can you deny that this was a fair trial?",
+ "#TRI0\\TRI0_047#He has not demonstrated honor, Kirk! Only a proven warrior may be tried in High Court! Principles of honor are not applicable to his defense!",
+ "#TRI0\\TRI0_048#How typical of the Federation, to judge every other species as morally inferior. Your rhetoric is not welcome here!",
+ "#TRI0\\TRI0_049#I hereby sentence K'etz'coatl to a coward's death.",
+ "#TRI0\\TRI0_050#K'etz'koatl, you encouraged the colony to destroy its weapons. You even encouraged them to hold their children from our traditional military ceremonies.",
+ "#TRI0\\TRI0_051#Only the greatest warriors of old could say such a thing and expect to live! Do you think yourself worthy enough to walk in their footsteps?",
+ "#TRI0\\TRI0_052#Pacifism is utterly alien to our people. It would be as though he preached a doctrine of suicide in direct contradiction of the will to live. Honorable men thrive in war and conflict -- cowards seek to avoid conflict.",
+ "#TRI0\\TRI0_053#So Kirk, we finally meet. I had thought it would be in battle, but the universe holds many surprises.",
+ "#TRI0\\TRI0_054#So be it. This begins the trial of the entity K'etz'koatl, who is charged with impersonating a klingon, stirring dissent, encouraging cowardice, and treason in the highest degree.",
+ "#TRI0\\TRI0_055#Stories of your impudence are not exaggerated. You shall have your chance. It is a pity we will not meet again, Captain.",
+ "#TRI0\\TRI0_056#That oversight, Kirk, is easily rectified.",
+ "#TRI0\\TRI0_057#The Klingon Empire will not tolerate dissent.",
+ "#TRI0\\TRI0_058#The prisoner and his witnesses will stand forth, so the trial may begin!",
+ "#TRI0\\TRI0_059#To counsel it is to counsel cowardice. To counsel it is to abandon all honor! This is treason, for all to see! The penalty for treason in this system is death! Do you accept your sentence?",
+ "#TRI0\\TRI0_060#Very well. You have my word. Captain Kallarax, transport them to the Test of Life.",
+ "#TRI0\\TRI0_061#You and your three companions may face the tests that we set for the defender. Then we shall see if you are as worthy as a Klingon!",
+ "#TRI0\\TRI0_062#You will not speak unless the court requests it, Kirk!",
+ "#TRI0\\TRI0_063#Awaiting your orders, sir!",
+ "#TRI0\\TRI0_064#But I did, sir. Lieutenant Hildebrandt is a third dan in karate. Toughest fighter I've ever known...",
+ "#TRI0\\TRI0_065#Who are you calling a weakling? I've had tougher girlfriends than you, pal!",
+ "#TRI0\\TRI0_066#Yes sir.",
+ "#TRI0\\TRI0_F24#How amusing. Federation weaklings.",
+ "#TRI0\\TRI0N000#A Klingon guard. A big Klingon guard. A big Klingon guard with his disruptor ready to fire on anyone who gives him trouble.",
+ "#TRI0\\TRI0N001#Admiral Vlict, commander of the Klingon flagship K'lirta.",
+ "#TRI0\\TRI0N002#Dr. McCoy glares angrily at Kirk. It is obvious he does not like seeing his patient handed over to the Klingons.",
+ "#TRI0\\TRI0N003#Ensign Bennie stares around the Klingon court, distrusting everything he sees.",
+ "#TRI0\\TRI0N004#James T. Kirk, trapped in a situation he cannot win, forced to watch a travesty of justice... or is he?",
+ "#TRI0\\TRI0N005#Mr. Spock looks stoically at the klingon bench. Expecting to win this case would be illogical.",
+ "#TRI0\\TRI0N006#This bench is marked with the symbol of the Klingon Court of High Justice, the two Triangles of Words and Blood, linked together.",
+ "#TRI0\\TRI0N007#This city was destroyed by heavy bombardment and intense doses of neutrino rays that killed all known forms of life on this planet.",
+ "#TRI0\\TRI0N008#This is the famous seal of the Klingon Empire.",
+ "#TRI0\\TRI0N009#Your new found friend looks rather frightened right now, and you don't blame him.",
+ "#TRI0\\TRI0U075#Uhura here. Captain, there's a force field over the planet. We will not be able to beam you aboard.",
+
+
+ "#TRI4\\TRI4_076#You humans have an excellent imagination, but a poor grasp of reality.",
+
+
"#SIN3\\SIN3_012#Can't say I like the decor.",