aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/awaymission.h10
-rw-r--r--engines/startrek/module.mk6
-rw-r--r--engines/startrek/room.cpp10
-rw-r--r--engines/startrek/room.h45
-rw-r--r--engines/startrek/rooms/function_map.h5
-rw-r--r--engines/startrek/rooms/sins0.cpp246
-rw-r--r--engines/startrek/rooms/sins1.cpp41
-rw-r--r--engines/startrek/rooms/sins2.cpp41
-rw-r--r--engines/startrek/rooms/sins3.cpp41
-rw-r--r--engines/startrek/rooms/sins4.cpp41
-rw-r--r--engines/startrek/rooms/sins5.cpp41
-rw-r--r--engines/startrek/startrek.cpp6
-rw-r--r--engines/startrek/text.h101
13 files changed, 629 insertions, 5 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index a123c09161..8f3e83b2e5 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -518,6 +518,16 @@ struct AwayMission {
ser.syncAsByte(gotPointsForBeamingOut);
}
} trial;
+
+ struct {
+ byte field39; // 0x39
+ bool field3d; // 0x3d
+ bool field3e; // 0x3e
+ bool enteredRoom0FirstTime; // 0x42
+ bool field43; // 0x43
+ bool gotPointsForScanningStatue; // 0x48
+ int16 missionScore; // 0x52
+ } sins;
};
};
// Size: 0x129 bytes
diff --git a/engines/startrek/module.mk b/engines/startrek/module.mk
index 85250e0813..384e07b156 100644
--- a/engines/startrek/module.mk
+++ b/engines/startrek/module.mk
@@ -60,6 +60,12 @@ MODULE_OBJS = \
rooms/trial3.o \
rooms/trial4.o \
rooms/trial5.o \
+ rooms/sins0.o \
+ rooms/sins1.o \
+ rooms/sins2.o \
+ rooms/sins3.o \
+ rooms/sins4.o \
+ rooms/sins5.o \
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 08743f7188..bc2015f5d1 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -93,6 +93,12 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
ADD_ROOM(trial3);
ADD_ROOM(trial4);
ADD_ROOM(trial5);
+ ADD_ROOM(sins0);
+ ADD_ROOM(sins1);
+ ADD_ROOM(sins2);
+ ADD_ROOM(sins3);
+ ADD_ROOM(sins4);
+ ADD_ROOM(sins5);
if (_roomActionList == nullptr) {
warning("Room \"%s\" unimplemented", name.c_str());
@@ -457,6 +463,10 @@ void Room::endMission(int16 score, int16 arg1, int16 arg2) {
_vm->_missionToLoad = "FEATHER";
if (_vm->_missionName == "FEATHER")
_vm->_missionToLoad = "TRIAL";
+ if (_vm->_missionName == "TRIAL")
+ _vm->_missionToLoad = "SINS";
+ if (_vm->_missionName == "SINS")
+ _vm->_missionToLoad = "VENG";
_vm->_roomIndexToLoad = 0;
}
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 9f88f04981..bcccf8fccf 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -2144,6 +2144,51 @@ public:
void trial5UseBlueGem3OnHole3();
void trial5UseMedkitAnywhere();
+
+ // SINS0
+ void sins0Tick1();
+ void sins0LookAnywhere();
+ void sins0LookAtOpenDoor();
+ void sins0LookAtClosedDoor();
+ void sins0TalkToSpock();
+ void sins0TalkToMccoy();
+ void sins0TalkToRedshirt();
+ void sins0LookAtGround();
+ void sins0GetRock();
+ void sins0PickedUpRock();
+ void sins0UseSTricorderAnywhere();
+ void sins0UseSTricorderOnGround();
+ void sins0UseSTricorderOnPlanet();
+ void sins0Tick40();
+ void sins0LookAtStatue();
+ void sins0LookAtPlanet();
+ void sins0LookAtSky();
+ void sins0LookAtKirk();
+ void sins0LookAtSpock();
+ void sins0LookAtMccoy();
+ void sins0LookAtRedshirt();
+ void sins0UseSTricorderOnClosedDoor();
+ void sins0UseSTricorderOnStatue();
+ void sins0UseMedkitOnCrewman();
+ void sins0UseMTricorderOnCrewman();
+ void sins0UseCommunicator();
+ void sins0WalkToDoor();
+
+ // SINS1
+ void sins1Tick1();
+
+ // SINS2
+ void sins2Tick1();
+
+ // SINS3
+ void sins3Tick1();
+
+ // SINS4
+ void sins4Tick1();
+
+ // SINS5
+ void sins5Tick1();
+
public:
// Room-specific variables. This is memset'ed to 0 when the room is initialized.
// NOTE: Any changes here must be reflected in the corresponding serializer functions.
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index c83dc99700..b44fbf1fb7 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1790,6 +1790,11 @@ extern const int trial0NumActions, trial1NumActions, trial2NumActions
extern const RoomAction trial4ActionList[], trial5ActionList[];
extern const int trial4NumActions, trial5NumActions;
+extern const RoomAction sins0ActionList[], sins1ActionList[], sins2ActionList[], sins3ActionList[];
+extern const int sins0NumActions, sins1NumActions, sins2NumActions, sins3NumActions;
+extern const RoomAction sins4ActionList[], sins5ActionList[];
+extern const int sins4NumActions, sins5NumActions;
+
}
#endif
diff --git a/engines/startrek/rooms/sins0.cpp b/engines/startrek/rooms/sins0.cpp
new file mode 100644
index 0000000000..bd93f25033
--- /dev/null
+++ b/engines/startrek/rooms/sins0.cpp
@@ -0,0 +1,246 @@
+/* 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_DOOR 8
+
+#define HOTSPOT_DOOR 0x20
+#define HOTSPOT_GROUND 0x21
+#define HOTSPOT_STATUE 0x22
+#define HOTSPOT_PLANET 0x23
+#define HOTSPOT_SKY 0x24 // Not mapped anywhere?
+
+namespace StarTrek {
+
+extern const RoomAction sins0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins0Tick1 },
+
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::sins0LookAnywhere },
+ { {ACTION_LOOK, OBJECT_DOOR, 0, 0}, &Room::sins0LookAtOpenDoor },
+ { {ACTION_LOOK, HOTSPOT_DOOR, 0, 0}, &Room::sins0LookAtClosedDoor },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::sins0TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::sins0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::sins0TalkToRedshirt },
+ { {ACTION_LOOK, HOTSPOT_GROUND, 0, 0}, &Room::sins0LookAtGround },
+ { {ACTION_GET, HOTSPOT_GROUND, 0, 0}, &Room::sins0GetRock },
+ { {ACTION_DONE_ANIM, 1, 0, 0}, &Room::sins0PickedUpRock },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::sins0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_GROUND, 0}, &Room::sins0UseSTricorderOnGround },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_PLANET, 0}, &Room::sins0UseSTricorderOnPlanet },
+
+ { {ACTION_TICK, 40, 0, 0}, &Room::sins0Tick40 },
+ { {ACTION_LOOK, HOTSPOT_STATUE, 0, 0}, &Room::sins0LookAtStatue },
+ { {ACTION_LOOK, HOTSPOT_PLANET, 0, 0}, &Room::sins0LookAtPlanet },
+ { {ACTION_LOOK, HOTSPOT_SKY, 0, 0}, &Room::sins0LookAtSky },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::sins0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::sins0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::sins0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::sins0LookAtRedshirt },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DOOR, 0}, &Room::sins0UseSTricorderOnClosedDoor },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_STATUE, 0}, &Room::sins0UseSTricorderOnStatue },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_KIRK, 0}, &Room::sins0UseMedkitOnCrewman },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::sins0UseMedkitOnCrewman },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_MCCOY, 0}, &Room::sins0UseMedkitOnCrewman },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_REDSHIRT, 0}, &Room::sins0UseMedkitOnCrewman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::sins0UseMTricorderOnCrewman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::sins0UseMTricorderOnCrewman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::sins0UseMTricorderOnCrewman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::sins0UseMTricorderOnCrewman },
+
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::sins0UseCommunicator },
+ { {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::sins0WalkToDoor },
+ { {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::sins0WalkToDoor },
+};
+
+
+extern const int sins0NumActions = sizeof(sins0ActionList) / sizeof(RoomAction);
+
+
+void Room::sins0Tick1() {
+ playVoc("SIN0LOOP");
+
+ if (!_vm->_awayMission.sins.enteredRoom0FirstTime)
+ _vm->_awayMission.disableInput = 2;
+
+ if (_vm->_awayMission.sins.field3e)
+ loadActorAnim2(OBJECT_DOOR, "s0dr2", 0, 0);
+ if (_vm->_awayMission.sins.field3d)
+ loadActorAnim2(OBJECT_DOOR, "s0dr1", 0, 0);
+
+ playMidiMusicTracks(MIDITRACK_27, -3);
+}
+
+void Room::sins0LookAnywhere() {
+ showText(TX_SIN0N009);
+}
+
+void Room::sins0LookAtOpenDoor() {
+ showText(TX_SIN0N005);
+}
+
+void Room::sins0LookAtClosedDoor() {
+ showText(TX_SIN0N008);
+}
+
+void Room::sins0TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_SIN0_009);
+}
+
+void Room::sins0TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_SIN0_011);
+}
+
+void Room::sins0TalkToRedshirt() {
+ // ENHANCEMENT: This function had two implementations. The first (the originally used
+ // one) is a generic "area is secure" text. In the second (which was unused), he
+ // comments on how the small moon could have an atmosphere. This is more interesting
+ // and relevant, so that implementation is used instead.
+ if (false)
+ showText(TX_SPEAKER_MOSHER, TX_SIN0_024);
+ else {
+ showText(TX_SPEAKER_MOSHER, TX_SIN0_026);
+ showText(TX_SPEAKER_SPOCK, TX_SIN0_022);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_006);
+ }
+}
+
+void Room::sins0LookAtGround() {
+ showText(TX_SIN0N006);
+}
+
+void Room::sins0GetRock() {
+ _vm->_awayMission.disableInput = true;
+ loadActorAnimC(OBJECT_KIRK, "kpickw", -1, -1, &Room::sins0PickedUpRock);
+ _vm->_awayMission.sins.field39 |= 1;
+}
+
+void Room::sins0PickedUpRock() {
+ _vm->_awayMission.disableInput = false;
+ loadActorStandAnim(OBJECT_KIRK);
+ showText(TX_SIN0N010);
+ giveItem(OBJECT_IS8ROCKS);
+}
+
+void Room::sins0UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_SIN0_018);
+}
+
+void Room::sins0UseSTricorderOnGround() {
+ spockScan(DIR_S, TX_SIN0_017);
+ _vm->_awayMission.sins.field39 |= 1;
+}
+
+void Room::sins0UseSTricorderOnPlanet() {
+ spockScan(DIR_S, TX_SIN0_016);
+}
+
+void Room::sins0Tick40() {
+ if (!_vm->_awayMission.sins.enteredRoom0FirstTime) {
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_UHURA, TX_SIN0U082);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_003);
+ showText(TX_SPEAKER_SCOTT, TX_SIN0_S48);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_007);
+ showText(TX_SPEAKER_SCOTT, TX_SIN0_S50);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_005);
+ showText(TX_SPEAKER_SCOTT, TX_SIN0_S49);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_001);
+ _vm->_awayMission.sins.enteredRoom0FirstTime = true;
+ }
+}
+
+void Room::sins0LookAtStatue() {
+ showText(TX_SIN0N011);
+ showText(TX_SPEAKER_MCCOY, TX_SIN0_015);
+ showText(TX_SPEAKER_SPOCK, TX_SIN0_021);
+ showText(TX_SPEAKER_MOSHER, TX_SIN0_027);
+ showText(TX_SPEAKER_MCCOY, TX_SIN0_014);
+}
+
+void Room::sins0LookAtPlanet() {
+ showText(TX_SIN0N007);
+}
+
+void Room::sins0LookAtSky() {
+ // This seems unused, due to HOTSPOT_SKY not being mapped anywhere?
+ showText(TX_SIN0N004);
+}
+
+void Room::sins0LookAtKirk() {
+ showText(TX_SIN0N002);
+}
+
+void Room::sins0LookAtSpock() {
+ showText(TX_SIN0N003);
+}
+
+void Room::sins0LookAtMccoy() {
+ showText(TX_SIN0N000);
+}
+
+void Room::sins0LookAtRedshirt() {
+ showText(TX_SIN0N001);
+}
+
+void Room::sins0UseSTricorderOnClosedDoor() {
+ spockScan(DIR_S, TX_SIN0_019);
+ showText(TX_SPEAKER_MOSHER, TX_SIN0_025);
+ showText(TX_SPEAKER_MCCOY, TX_SIN0_013);
+ showText(TX_SPEAKER_MOSHER, TX_SIN0_028);
+}
+
+void Room::sins0UseSTricorderOnStatue() {
+ spockScan(DIR_S, TX_SIN0_020);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_008);
+ showText(TX_SPEAKER_SPOCK, TX_SIN0_023);
+
+ if (!_vm->_awayMission.sins.gotPointsForScanningStatue) {
+ _vm->_awayMission.sins.gotPointsForScanningStatue = true;
+ _vm->_awayMission.sins.missionScore += 1;
+ }
+}
+
+void Room::sins0UseMedkitOnCrewman() {
+ showText(TX_SPEAKER_MCCOY, TX_SIN0_012);
+}
+
+void Room::sins0UseMTricorderOnCrewman() {
+ mccoyScan(DIR_S, TX_SIN0_010);
+}
+
+void Room::sins0UseCommunicator() {
+ if (!_vm->_awayMission.sins.field43) {
+ showText(TX_SPEAKER_KIRK, TX_SIN0_004);
+ showText(TX_SPEAKER_SCOTT, TX_SIN0_S01);
+ showText(TX_SPEAKER_KIRK, TX_SIN0_002);
+ } else
+ showText(TX_SPEAKER_UHURA, TX_SIN0U069);
+}
+
+void Room::sins0WalkToDoor() {
+ walkCrewman(OBJECT_KIRK, 0x5f, 0x8c);
+}
+
+}
diff --git a/engines/startrek/rooms/sins1.cpp b/engines/startrek/rooms/sins1.cpp
new file mode 100644
index 0000000000..fc7827a142
--- /dev/null
+++ b/engines/startrek/rooms/sins1.cpp
@@ -0,0 +1,41 @@
+/* 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_8 8
+
+#define HOTSPOT_20 0x20
+
+namespace StarTrek {
+
+extern const RoomAction sins1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins1Tick1 },
+};
+
+extern const int sins1NumActions = sizeof(sins1ActionList) / sizeof(RoomAction);
+
+
+void Room::sins1Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/sins2.cpp b/engines/startrek/rooms/sins2.cpp
new file mode 100644
index 0000000000..976814acab
--- /dev/null
+++ b/engines/startrek/rooms/sins2.cpp
@@ -0,0 +1,41 @@
+/* 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_8 8
+
+#define HOTSPOT_20 0x20
+
+namespace StarTrek {
+
+extern const RoomAction sins2ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins2Tick1 },
+};
+
+extern const int sins2NumActions = sizeof(sins2ActionList) / sizeof(RoomAction);
+
+
+void Room::sins2Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/sins3.cpp b/engines/startrek/rooms/sins3.cpp
new file mode 100644
index 0000000000..81795e4c29
--- /dev/null
+++ b/engines/startrek/rooms/sins3.cpp
@@ -0,0 +1,41 @@
+/* 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_8 8
+
+#define HOTSPOT_20 0x20
+
+namespace StarTrek {
+
+extern const RoomAction sins3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins3Tick1 },
+};
+
+extern const int sins3NumActions = sizeof(sins3ActionList) / sizeof(RoomAction);
+
+
+void Room::sins3Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/sins4.cpp b/engines/startrek/rooms/sins4.cpp
new file mode 100644
index 0000000000..05c582021c
--- /dev/null
+++ b/engines/startrek/rooms/sins4.cpp
@@ -0,0 +1,41 @@
+/* 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_8 8
+
+#define HOTSPOT_20 0x20
+
+namespace StarTrek {
+
+extern const RoomAction sins4ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins4Tick1 },
+};
+
+extern const int sins4NumActions = sizeof(sins4ActionList) / sizeof(RoomAction);
+
+
+void Room::sins4Tick1() {
+}
+
+}
diff --git a/engines/startrek/rooms/sins5.cpp b/engines/startrek/rooms/sins5.cpp
new file mode 100644
index 0000000000..49f9784b62
--- /dev/null
+++ b/engines/startrek/rooms/sins5.cpp
@@ -0,0 +1,41 @@
+/* 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_8 8
+
+#define HOTSPOT_20 0x20
+
+namespace StarTrek {
+
+extern const RoomAction sins5ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::sins5Tick1 },
+};
+
+extern const int sins5NumActions = sizeof(sins5ActionList) / sizeof(RoomAction);
+
+
+void Room::sins5Tick1() {
+}
+
+}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 9623ccccc8..f5835d2adb 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -90,7 +90,7 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
_missionToLoad = "DEMON";
_roomIndexToLoad = 0;
- _showSubtitles = true; // TODO: test
+ _showSubtitles = true;
Common::fill(_r3List, _r3List + NUM_SPACE_OBJECTS, (R3 *)nullptr);
Common::fill(_orderedR3List, _orderedR3List + NUM_SPACE_OBJECTS, (R3 *)nullptr);
@@ -901,10 +901,6 @@ void StarTrekEngine::renderBanAboveSprites() {
byte *src = (byte *)surface.getPixels() + offset;
byte *dest = destPixels + offset;
- /*
- _banFiles[i]->seek(_banFileOffsets[i], SEEK_SET);
- renderBan(destPixels, _banFiles[i]);
- */
// This is similar to renderBan(), except it copies pixels from the surface
// above instead of drawing directly to it. (Important since sprites may be
// drawn on top.)
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index e0a0401b99..a7e398fee7 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -120,6 +120,8 @@ enum GameStringIDs {
TX_SPEAKER_LIGHT_OF_KNOWLEDGE,
TX_SPEAKER_LIGHT_OF_TRAVEL,
+ TX_SPEAKER_MOSHER,
+
TX_BRIDU146,
TX_G_024,
@@ -2429,6 +2431,55 @@ enum GameStringIDs {
TX_TRI5N021,
+ TX_SIN0_001,
+ TX_SIN0_002,
+ TX_SIN0_003,
+ TX_SIN0_004,
+ TX_SIN0_005,
+ TX_SIN0_006,
+ TX_SIN0_007,
+ TX_SIN0_008,
+ TX_SIN0_009,
+ TX_SIN0_010,
+ TX_SIN0_011,
+ TX_SIN0_012,
+ TX_SIN0_013,
+ TX_SIN0_014,
+ TX_SIN0_015,
+ TX_SIN0_016,
+ TX_SIN0_017,
+ TX_SIN0_018,
+ TX_SIN0_019,
+ TX_SIN0_020,
+ TX_SIN0_021,
+ TX_SIN0_022,
+ TX_SIN0_023,
+ TX_SIN0_024,
+ TX_SIN0_025,
+ TX_SIN0_026,
+ TX_SIN0_027,
+ TX_SIN0_028,
+ // UNUSED: 029 -> 030
+ TX_SIN0_S01,
+ TX_SIN0_S48,
+ TX_SIN0_S49,
+ TX_SIN0_S50,
+ TX_SIN0N000,
+ TX_SIN0N001,
+ TX_SIN0N002,
+ TX_SIN0N003,
+ TX_SIN0N004,
+ TX_SIN0N005,
+ TX_SIN0N006,
+ TX_SIN0N007,
+ TX_SIN0N008,
+ TX_SIN0N009,
+ TX_SIN0N010,
+ TX_SIN0N011,
+ TX_SIN0U069,
+ TX_SIN0U082,
+
+
TX_SIN3_012,
@@ -2498,6 +2549,8 @@ const char *const g_gameStrings[] = {
"Light of Knowledge",
"Light of Travel",
+ "Ensign Mosher",
+
"#BRID\\BRIDU146#Nothing to report, Captain.",
"#GENE\\G_024#Fascinating.",
@@ -4770,6 +4823,54 @@ const char *const g_gameStrings[] = {
"#TRI5\\TRI5N021#This large gem appears to be an emerald of unusual size. This is obviously artificial.", // TYPO
+ "#SIN0\\SIN0_001#Good Mr. Scott. I'll keep you posted. Kirk out.",
+ "#SIN0\\SIN0_002#Let me know if things change. Kirk out.",
+ "#SIN0\\SIN0_003#Mr. Scott?",
+ "#SIN0\\SIN0_004#Scotty, report on the transporter problem.",
+ "#SIN0\\SIN0_005#That will still give us plenty of time, Scotty.",
+ "#SIN0\\SIN0_006#That's what we're here to find out. The unknown.",
+ "#SIN0\\SIN0_007#We didn't notice anything beaming down.",
+ "#SIN0\\SIN0_008#Which means that this moon might still be inhabited, Mr. Spock.",
+ "#SIN0\\SIN0_009#Aside from the security door on what should be a lifeless planetoid, this place is unremarkable.",
+ "#SIN0\\SIN0_010#It's what I was afraid of, Jim. The thin atmosphere of this moon doesn't provide enough protection from cosmic rays. We shouldn't stay here any more than a few hours.",
+ "#SIN0\\SIN0_011#The atmosphere is breathable, Jim, but hardly nourishing. We should either get inside or go back to the ship.",
+ "#SIN0\\SIN0_012#There's not much I can do for cosmic radiation. It's best if we find some cover indoors.",
+ "#SIN0\\SIN0_013#Do you have Vulcan blood ensign?",
+ "#SIN0\\SIN0_014#I never realized the Orions ever got past decadence... They hadn't the last time I was there.",
+ "#SIN0\\SIN0_015#These stones resemble those on Earth, on Easter Island.",
+ "#SIN0\\SIN0_016#I cannot get readings from this range, Captain. But if we do not hurry there will be nothing left to get a reading on.",
+ "#SIN0\\SIN0_017#The rocks have a high quantity of Tri-Phosphorate Silver in them.",
+ "#SIN0\\SIN0_018#Unremarkable except for low grade power emanations from the door area.",
+ "#SIN0\\SIN0_019#As expected Captain. The source of power emanations lies beyond that door.",
+ "#SIN0\\SIN0_020#Large quantities of atmosphere are being circulated through these rocks. I would guess there are storage units within this satellite which are constantly replacing the atmosphere that is lost because of this moon's weak gravity.",
+ "#SIN0\\SIN0_021#Stone monoliths of faces are a common artistic expression in evolving cultures...",
+ "#SIN0\\SIN0_022#Unknown, ensign.",
+ "#SIN0\\SIN0_023#We have detected no signs of life, Captain, but the possibility does exist.",
+ "#SIN0\\SIN0_024#Area secure, Captain.",
+ "#SIN0\\SIN0_025#A power source that has lasted millenia and endured major catastrophes. That's fascinating, Mr. Spock.",
+ "#SIN0\\SIN0_026#How can there be an atmosphere on a moon of this size?",
+ "#SIN0\\SIN0_027#Like the faces on Vandu II. Even the animal face art of the Orion Post-Decadence Movement is similar.",
+ "#SIN0\\SIN0_028#No, sir.",
+ "#SIN0\\SIN0_S01#No change Captain. Although why it happened is about as clear as a foggy night in Glasgow.",
+ "#SIN0\\SIN0_S48#Aye. We've had some slight problems with the transporters.",
+ "#SIN0\\SIN0_S49#I know. I have the lads in Engineering doing a complete overhaul of the ship's systems.",
+ "#SIN0\\SIN0_S50#Just a glitch in the main transporter program. Mr. Kyle is loading a back-up, and we're performing tests. The transporters will be down for about an hour.",
+ "#SIN0\\SIN0N000#Dr. Leonard McCoy, knowing that they aren't likely to encounter any medical problems, is rather annoyed about being dragged yet again into the transporter.",
+ "#SIN0\\SIN0N001#Ensign Mosher seems to be rather curious about the planet's technology.",
+ "#SIN0\\SIN0N002#James T. Kirk, worried about the safety of the people of Proxtrey.",
+ "#SIN0\\SIN0N003#Mr. Spock looks forward to examining the technology of this ancient culture.",
+ "#SIN0\\SIN0N004#Ten thousand points of light are visible to the naked eye through the thin atmosphere of this moon.",
+ "#SIN0\\SIN0N005#The heavy-duty security door is now open.",
+ "#SIN0\\SIN0N006#There are many rocks here.",
+ "#SIN0\\SIN0N007#This is the planet Proxtrey, currently six hundred thousand kilometers from this moon.",
+ "#SIN0\\SIN0N008#This looks like a heavy-duty security door built into the side of a hill on this moon.",
+ "#SIN0\\SIN0N009#This moon has a thin but breathable atmosphere.",
+ "#SIN0\\SIN0N010#You retrieve a rock.",
+ "#SIN0\\SIN0N011#These stones look like faces.",
+ "#SIN0\\SIN0U069#Nothing new to report Captain.",
+ "#SIN0\\SIN0U082#Captain, Mr. Scott wishes to speak with you.",
+
+
"#SIN3\\SIN3_012#Can't say I like the decor.",