aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/rooms
diff options
context:
space:
mode:
Diffstat (limited to 'engines/startrek/rooms')
-rw-r--r--engines/startrek/rooms/function_map.h138
-rw-r--r--engines/startrek/rooms/love0.cpp2
-rw-r--r--engines/startrek/rooms/love1.cpp661
-rw-r--r--engines/startrek/rooms/love2.cpp35
-rw-r--r--engines/startrek/rooms/love3.cpp35
-rw-r--r--engines/startrek/rooms/love4.cpp35
-rw-r--r--engines/startrek/rooms/love5.cpp35
7 files changed, 940 insertions, 1 deletions
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index dcf8bf3545..a1cb9286cb 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -823,6 +823,144 @@ RoomAction love0ActionList[] = {
// unused, but I'm not sure how it's run.
};
+RoomAction love1ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love1Tick1 },
+
+ { Action(ACTION_WALK, 10, 0, 0), &Room::love1WalkToDoor3 },
+ { Action(ACTION_WALK, 0x26, 0, 0), &Room::love1WalkToDoor3 },
+ { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::love1OpenDoor3 },
+ { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::love1ReachedDoor3 },
+ { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love1ReachedDoor3 },
+
+ { Action(ACTION_WALK, 8, 0, 0), &Room::love1WalkToDoor1 },
+ { Action(ACTION_WALK, 0x27, 0, 0), &Room::love1WalkToDoor1 },
+ { Action(ACTION_TOUCHED_HOTSPOT, 2, 0, 0), &Room::love1OpenDoor1 },
+ { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::love1ReachedDoor1 },
+ { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love1ReachedDoor1 },
+
+ { Action(ACTION_WALK, 9, 0, 0), &Room::love1WalkToDoor2 },
+ { Action(ACTION_WALK, 0x28, 0, 0), &Room::love1WalkToDoor2 },
+ { Action(ACTION_TOUCHED_HOTSPOT, 3, 0, 0), &Room::love1OpenDoor2 },
+ { Action(ACTION_FINISHED_WALKING, 17, 0, 0), &Room::love1ReachedDoor2 },
+ { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love1ReachedDoor2 },
+
+ { Action(ACTION_LOOK, 0x25, 0, 0), &Room::love1LookAtLaser },
+ { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love1LookAtKirk },
+ { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love1LookAtSpock },
+ { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love1LookAtMccoy },
+ { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love1LookAtRedshirt },
+ { Action(ACTION_LOOK, -1, 0, 0), &Room::love1LookAnywhere },
+ { Action(ACTION_LOOK, 15, 0, 0), &Room::love1LookAtNozzle },
+ { Action(ACTION_LOOK, 0x24, 0, 0), &Room::love1LookAtNozzle },
+ { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love1LookAtLadder },
+ { Action(ACTION_LOOK, 9, 0, 0), &Room::love1LookAtDoor1Or2 },
+ { Action(ACTION_LOOK, 8, 0, 0), &Room::love1LookAtDoor1Or2 },
+ { Action(ACTION_LOOK, 10, 0, 0), &Room::love1LookAtDoor3 },
+ { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love1LookAtDistillator },
+ { Action(ACTION_LOOK, 14, 0, 0), &Room::love1LookAtChamber },
+ { Action(ACTION_LOOK, 12, 0, 0), &Room::love1LookAtChamber },
+ { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love1LookAtReplicator },
+ { Action(ACTION_LOOK, 11, 0, 0), &Room::love1LookAtFreezer },
+ { Action(ACTION_LOOK, 0x22, 0, 0), &Room::love1LookAtFreezer },
+ { Action(ACTION_LOOK, OBJECT_IDISHES, 0, 0), &Room::love1LookAtDishes },
+ { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love1TalkToKirk },
+ { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love1TalkToSpock },
+ { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love1TalkToMccoy },
+ { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love1TalkToRedshirt },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_IDISHES, 0), &Room::love1UseMTricorderOnDishes },
+ { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love1UseMTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::love1UseSTricorderOnReplicator },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 12, 0), &Room::love1UseSTricorderOnReplicator },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x25, 0), &Room::love1UseSTricorderOnLaser },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::love1UseSTricorderOnLaser },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::love1UseSTricorderOnFreezer },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love1UseSTricorderAnywhere },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_IDISHES, 0), &Room::love1UseSTricorderOnDishes },
+ { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::love1UseSTricorderOnDistillator },
+ { Action(ACTION_GET, 11, 0, 0), &Room::love1GetFreezer },
+ { Action(ACTION_GET, 0x22, 0, 0), &Room::love1GetFreezer },
+ { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::love1KirkReachedFreezer },
+ { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::love1KirkGotVirusCulture },
+ { Action(ACTION_GET, 14, 0, 0), &Room::love1GetFromChamber },
+ { Action(ACTION_GET, 12, 0, 0), &Room::love1GetFromChamber },
+ { Action(ACTION_GET, 0x23, 0, 0), &Room::love1GetFromChamber },
+ { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love1KirkReachedChamber },
+ { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::love1KirkGotCureSample },
+ { Action(ACTION_GET, 15, 0, 0), &Room::love1GetFromNozzle },
+ { Action(ACTION_GET, 0x24, 0, 0), &Room::love1GetFromNozzle },
+ { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love1KirkReachedNozzleToGet },
+ { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::love1KirkGotBottleFromNozzle },
+ { Action(ACTION_USE, OBJECT_IN2O, 0x24, 0), &Room::love1UseN2OOnNozzle },
+ { Action(ACTION_USE, OBJECT_IH2O, 0x24, 0), &Room::love1UseH2OOnNozzle },
+ { Action(ACTION_USE, OBJECT_INH3, 0x24, 0), &Room::love1UseNH3OnNozzle },
+ { Action(ACTION_USE, OBJECT_IRLG, 0x24, 0), &Room::love1UseRLGOnNozzle },
+ { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love1KirkReachedNozzleToPut },
+ { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::love1KirkPutBottleInNozzle },
+ { Action(ACTION_USE, -1, 0x24, 0), &Room::love1UseAnthingOnNozzle },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x23, 0), &Room::love1UseSpockOnReplicator },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x23, 0), &Room::love1UseRedshirtOnReplicator },
+ { Action(ACTION_USE, OBJECT_MCCOY, 14, 0), &Room::love1UseMccoyOnReplicator },
+ { Action(ACTION_USE, OBJECT_MCCOY, 15, 0), &Room::love1UseMccoyOnReplicator },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x23, 0), &Room::love1UseMccoyOnReplicator },
+ { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love1MccoyReachedReplicator },
+ { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::love1MccoyUsedReplicator },
+ { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love1ChamberClosed },
+ { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::love1ChamberOpened },
+ { Action(ACTION_USE, -1, 12, 0), &Room::love1UseAnythingOnChamber },
+ { Action(ACTION_USE, OBJECT_IDISHES, 12, 0), &Room::love1UseDishesOnChamber },
+ { Action(ACTION_USE, OBJECT_IDISHES, 0x23, 0), &Room::love1UseDishesOnChamber },
+ { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love1KirkReachedChamberToPut },
+ { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love1ChamberOpenedForDish },
+ { Action(ACTION_FINISHED_ANIMATION, 14, 0, 0), &Room::love1KirkPutDishInChamber },
+ { Action(ACTION_USE, OBJECT_IINSULAT, 0x21, 0), &Room::love1UseInsulationOnDistillator },
+ { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love1KirkReachedDistillator },
+ { Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::love1KirkGotPolyberylcarbonate },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::love1UseKirkOnFreezer },
+ { Action(ACTION_USE, OBJECT_KIRK, 11, 0), &Room::love1UseKirkOnFreezer },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::love1UseRedshirtOnFreezer },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 11, 0), &Room::love1UseRedshirtOnFreezer },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::love1UseSpockOnFreezer },
+ { Action(ACTION_USE, OBJECT_SPOCK, 11, 0), &Room::love1UseSpockOnFreezer },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x22, 0), &Room::love1UseMccoyOnFreezer },
+ { Action(ACTION_USE, OBJECT_MCCOY, 11, 0), &Room::love1UseMccoyOnFreezer },
+ { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love1CrewmanReachedFreezer },
+ { Action(ACTION_FINISHED_ANIMATION, 16, 0, 0), &Room::love1CrewmanOpenedOrClosedFreezer },
+ { Action(ACTION_USE, -1, 0x22, 0), &Room::love1UseAnythingOnFreezer },
+ { Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::love1ReachedFreezerWithArbitraryItem },
+ { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::love1FinishedUsingArbitraryItemOnFreezer },
+ { Action(ACTION_USE, -1, 0x23, 0), &Room::love1UseAnythingOnReplicator },
+ { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::love1ReachedReplicatorWithArbitraryItem },
+ { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::love1FinishedUsingArbitraryItemOnReplicator },
+ { Action(ACTION_USE, -1, 0x21, 0), &Room::love1UseAnythingOnDistillator },
+ { Action(ACTION_FINISHED_WALKING, 13, 0, 0), &Room::love1ReachedDistillatorWithArbitraryItem },
+ { Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::love1FinishedUsingArbitraryItemOnDistillator },
+ { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love1UseKirkOnLadder },
+ { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love1UseSpockOnLadder },
+ { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love1UseMccoyOnLadder },
+ { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love1UseRedshirtOnLadder },
+ { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love1CrewmanReachedLadder },
+ { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love1CrewmanDiedFromPhaser },
+ { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love1TouchedHotspot0 },
+ // TODO: common code
+};
+
+RoomAction love2ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love2Tick1 },
+};
+
+RoomAction love3ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love3Tick1 },
+};
+
+RoomAction love4ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love4Tick1 },
+};
+
+RoomAction love5ActionList[] = {
+ { Action(ACTION_TICK, 1, 0, 0), &Room::love5Tick1 },
+};
+
+
}
#endif
diff --git a/engines/startrek/rooms/love0.cpp b/engines/startrek/rooms/love0.cpp
index 7ab161a8c4..e4e3932944 100644
--- a/engines/startrek/rooms/love0.cpp
+++ b/engines/startrek/rooms/love0.cpp
@@ -91,7 +91,7 @@ void Room::love0OpenDoor1() {
void Room::love0ReachedDoor1() {
_roomVar.love0.door1OpenCounter++;
if (_roomVar.love0.door1OpenCounter == 2)
- loadRoomIndex(3, 1);
+ loadRoomIndex(1, 3);
}
void Room::love0LookAtConsole() {
diff --git a/engines/startrek/rooms/love1.cpp b/engines/startrek/rooms/love1.cpp
new file mode 100644
index 0000000000..509f35f882
--- /dev/null
+++ b/engines/startrek/rooms/love1.cpp
@@ -0,0 +1,661 @@
+/* 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_DOOR1 8
+#define OBJECT_DOOR2 9
+#define OBJECT_DOOR3 10
+#define OBJECT_FREEZER 11
+#define OBJECT_CHAMBER 12
+#define OBJECT_PHASERSHOT 13
+#define OBJECT_DISH_IN_CHAMBER 14
+#define OBJECT_BOTTLE 15
+
+#define HOTSPOT_LADDER 0x20
+#define HOTSPOT_DISTILLATOR 0x21
+#define HOTSPOT_FREEZER 0x22
+#define HOTSPOT_REPLICATOR 0x23
+#define HOTSPOT_NOZZLE 0x24
+#define HOTSPOT_LASER 0x25
+#define HOTSPOT_DOOR3 0x26
+#define HOTSPOT_DOOR1 0x27
+#define HOTSPOT_DOOR2 0x28
+
+namespace StarTrek {
+
+void Room::love1Tick1() {
+ playVoc("LOV1LOOP");
+
+ if (_vm->_awayMission.love.freezerOpen)
+ loadActorAnim(OBJECT_FREEZER, "s3r2d4o", 0x67, 0x8d, 0);
+
+ if (_vm->_awayMission.love.chamberHasDish)
+ loadActorAnim(OBJECT_CHAMBER, "s3r2d5o", 0xb4, 0x75, 0);
+ else
+ loadActorAnim(OBJECT_CHAMBER, "s3r2d5c", 0xb4, 0x75, 0);
+
+ if (_vm->_awayMission.love.chamberHasDish)
+ loadActorAnim(OBJECT_DISH_IN_CHAMBER, "dishes", 0xb4, 0x71, 0);
+
+ switch (_vm->_awayMission.love.bottleInNozzle) {
+ case BOTTLETYPE_N2O:
+ strcpy(_roomVar.love1.bottleAnimation, "btle1");
+ _roomVar.love1.itemInNozzle = OBJECT_IN2O;
+ goto common;
+ case BOTTLETYPE_NH3:
+ strcpy(_roomVar.love1.bottleAnimation, "btle2");
+ _roomVar.love1.itemInNozzle = OBJECT_INH3;
+ goto common;
+ case BOTTLETYPE_H2O:
+ strcpy(_roomVar.love1.bottleAnimation, "btle3");
+ _roomVar.love1.itemInNozzle = OBJECT_IH2O;
+ goto common;
+ case BOTTLETYPE_RLG:
+ strcpy(_roomVar.love1.bottleAnimation, "btle4");
+ _roomVar.love1.itemInNozzle = OBJECT_IRLG;
+ goto common;
+
+common:
+ loadActorAnim(OBJECT_BOTTLE, _roomVar.love1.bottleAnimation, 0xa3, 0x72, 0);
+ // fall through
+
+ case BOTTLETYPE_NONE:
+ if (_vm->_awayMission.love.field2c)
+ _vm->_awayMission.timers[0] = getRandomWordInRange(200, 400);
+ break;
+ }
+
+ if (_vm->_awayMission.love.field2d)
+ _vm->_awayMission.timers[1] = getRandomWordInRange(200, 400);
+ _vm->_awayMission.timers[2] = 200;
+
+ loadActorAnim(OBJECT_DOOR3, "s3r2d3a", 0xdb, 0x7e, 0);
+ loadActorAnim(OBJECT_DOOR1, "s3r2d1a", 0, 0, 0);
+ loadActorAnim(OBJECT_DOOR2, "s3r2d2a", 0, 0, 0);
+
+ _roomVar.love1._1d2a = 0x90;
+ _roomVar.love1._1d2b = 0xa7;
+}
+
+void Room::love1WalkToDoor3() {
+ _vm->_awayMission.disableInput = true;
+ _roomVar.love1.walkingToDoor = true;
+ walkCrewman(OBJECT_KIRK, 0xd9, 0x81, 15);
+}
+
+void Room::love1OpenDoor3() {
+ if (_roomVar.love1.walkingToDoor) {
+ loadActorAnim(OBJECT_DOOR3, "s3r2d3", 0xdb, 0x7e, 2);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+// Door 3 opened, or door 3 reached (both must occur before transition happens)
+void Room::love1ReachedDoor3() {
+ _roomVar.love1.door3OpenCounter++;
+ if (_roomVar.love1.door3OpenCounter == 2)
+ loadRoomIndex(3, 1);
+}
+
+void Room::love1WalkToDoor1() {
+ _vm->_awayMission.disableInput = true;
+ _roomVar.love1.walkingToDoor = true;
+ walkCrewman(OBJECT_KIRK, 0x42, 0x97, 16);
+}
+
+void Room::love1OpenDoor1() {
+ if (_roomVar.love1.walkingToDoor) {
+ loadActorAnim(OBJECT_DOOR1, "s3r2d1", 0, 0, 3);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+// Door 1 opened, or door 1 reached
+void Room::love1ReachedDoor1() {
+ _roomVar.love1.door1OpenCounter++;
+ if (_roomVar.love1.door1OpenCounter == 2)
+ loadRoomIndex(0, 2);
+}
+
+void Room::love1WalkToDoor2() {
+ _vm->_awayMission.disableInput = true;
+ _roomVar.love1.walkingToDoor = true;
+ walkCrewman(OBJECT_KIRK, 0x79, 0x85, 17);
+}
+
+void Room::love1OpenDoor2() {
+ if (_roomVar.love1.walkingToDoor) {
+ loadActorAnim(OBJECT_DOOR2, "s3r2d2", 0, 0, 4);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+// Door 2 opened, or door 2 reached
+void Room::love1ReachedDoor2() {
+ _roomVar.love1.door2OpenCounter++;
+ if (_roomVar.love1.door2OpenCounter == 2)
+ loadRoomIndex(2, 0);
+}
+
+void Room::love1LookAtLaser() {
+ showText(TX_LOV1N000);
+}
+
+void Room::love1LookAtKirk() {
+ showText(TX_LOV1N003);
+}
+
+void Room::love1LookAtSpock() {
+ showText(TX_LOV1N004);
+}
+
+void Room::love1LookAtMccoy() {
+ showText(TX_LOV1N001);
+}
+
+void Room::love1LookAtRedshirt() {
+ showText(TX_LOV1N002);
+}
+
+void Room::love1LookAnywhere() {
+ showText(TX_LOV1N019);
+}
+
+void Room::love1LookAtNozzle() {
+ showText(TX_LOV1N022);
+}
+
+void Room::love1LookAtLadder() {
+ showText(TX_LOV1N021);
+}
+
+void Room::love1LookAtDoor1Or2() {
+ showText(TX_LOV1N020);
+}
+
+void Room::love1LookAtDoor3() {
+ showText(TX_LOV1N017);
+}
+
+void Room::love1LookAtDistillator() {
+ showText(TX_LOV1N016);
+}
+
+void Room::love1LookAtChamber() {
+ if (_vm->_awayMission.love.chamberHasCure)
+ showText(TX_LOV1N013);
+ else
+ showText(TX_LOV1N014);
+}
+
+void Room::love1LookAtReplicator() {
+ showText(TX_LOV1N015);
+}
+
+void Room::love1LookAtFreezer() {
+ if (_vm->_awayMission.love.freezerOpen)
+ showText(TX_LOV1N023);
+ else
+ showText(TX_LOV1N018);
+}
+
+void Room::love1LookAtDishes() {
+ showText(TX_LOV1N012);
+}
+
+void Room::love1TalkToKirk() {
+ showText(TX_SPEAKER_KIRK, TX_LOV1_001);
+}
+
+void Room::love1TalkToSpock() {
+ showText(TX_SPEAKER_SPOCK, TX_LOV1_005);
+}
+
+void Room::love1TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_011);
+}
+
+void Room::love1TalkToRedshirt() {
+ showText(TX_SPEAKER_FERRIS, TX_LOV1_027);
+}
+
+void Room::love1UseMTricorderOnDishes() {
+ mccoyScan(DIR_W, TX_LOV1_017, false);
+ // TODO: only works in this room, despite being inventory item?
+}
+
+void Room::love1UseMTricorderAnywhere() {
+ if (_vm->_awayMission.love.knowAboutVirus)
+ mccoyScan(DIR_S, TX_LOV1_009, false);
+ else
+ mccoyScan(DIR_S, TX_LOV1_010, false);
+}
+
+void Room::love1UseSTricorderOnReplicator() {
+ spockScan(DIR_N, TX_LOV1_022, false);
+}
+
+void Room::love1UseSTricorderOnLaser() {
+ spockScan(DIR_E, TX_LOV1_006, false);
+}
+
+void Room::love1UseSTricorderOnFreezer() {
+ spockScan(DIR_W, TX_LOV1_023, false);
+}
+
+void Room::love1UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_LOV1_003, false);
+}
+
+void Room::love1UseSTricorderOnDishes() {
+ spockScan(DIR_W, TX_LOV1_004, false);
+ // TODO: only works in this room, despite being inventory item?
+}
+
+void Room::love1UseSTricorderOnDistillator() {
+ spockScan(DIR_S, TX_LOV1_007, false);
+}
+
+void Room::love1GetFreezer() {
+ walkCrewman(OBJECT_KIRK, 0x71, 0x8e, 14);
+}
+
+void Room::love1KirkReachedFreezer() {
+ if (_vm->_awayMission.love.freezerOpen)
+ loadActorAnim2(OBJECT_KIRK, "kusehw", -1, -1, 9);
+ else
+ showText(TX_LOV1N010);
+}
+
+void Room::love1KirkGotVirusCulture() {
+ giveItem(OBJECT_IDISHES);
+ showText(TX_LOV1N006);
+}
+
+void Room::love1GetFromChamber() {
+ if (!_vm->_awayMission.love.chamberHasDish)
+ showText(TX_LOV1N009);
+ else
+ walkCrewman(OBJECT_KIRK, 0xb5, 0x8c, 8);
+}
+
+void Room::love1KirkReachedChamber() {
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 10);
+}
+
+void Room::love1KirkGotCureSample() {
+ if (_vm->_awayMission.love.chamberHasCure) {
+ giveItem(OBJECT_ISAMPLE);
+ showText(TX_LOV1N035);
+ }
+ else {
+ giveItem(OBJECT_IDISHES);
+ showText(TX_LOV1N006);
+ }
+
+ loadActorStandAnim(OBJECT_DISH_IN_CHAMBER);
+ loadActorAnim2(OBJECT_CHAMBER, "s3r2d6", 0xb4, 0x75, 0);
+ playSoundEffectIndex(SND_DOOR1);
+ _vm->_awayMission.love.chamberHasDish = false;
+}
+
+void Room::love1GetFromNozzle() {
+ walkCrewman(OBJECT_KIRK, 0xa6, 0x90, 2);
+}
+
+void Room::love1KirkReachedNozzleToGet() {
+ if (_vm->_awayMission.love.bottleInNozzle == 0)
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 11);
+ else
+ showText(TX_LOV1N011);
+}
+
+void Room::love1KirkGotBottleFromNozzle() {
+ switch (_vm->_awayMission.love.bottleInNozzle) {
+ case BOTTLETYPE_N2O:
+ giveItem(OBJECT_IN2O);
+ break;
+ case BOTTLETYPE_NH3:
+ giveItem(OBJECT_INH3);
+ break;
+ case BOTTLETYPE_H2O:
+ giveItem(OBJECT_IH2O);
+ break;
+ case BOTTLETYPE_RLG:
+ giveItem(OBJECT_IRLG);
+ break;
+ default:
+ showText(TX_DIALOG_ERROR);
+ break;
+ }
+
+ _vm->_awayMission.love.bottleInNozzle = BOTTLETYPE_NONE;
+ loadActorStandAnim(OBJECT_BOTTLE);
+ showText(TX_LOV1N007);
+ _roomVar.love1.itemInNozzle = 0;
+}
+
+void Room::love1UseN2OOnNozzle() {
+ if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
+ _roomVar.love1.itemInNozzle = OBJECT_IN2O;
+ strcpy(_roomVar.love1.bottleAnimation, "btle1");
+ _vm->_awayMission.love.bottleInNozzle = BOTTLETYPE_N2O;
+ walkCrewman(OBJECT_KIRK, 0xa6, 0x90, 3);
+ }
+}
+
+void Room::love1UseH2OOnNozzle() {
+ if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
+ _roomVar.love1.itemInNozzle = OBJECT_IH2O;
+ strcpy(_roomVar.love1.bottleAnimation, "btle3");
+ _vm->_awayMission.love.bottleInNozzle = BOTTLETYPE_H2O;
+ walkCrewman(OBJECT_KIRK, 0xa6, 0x90, 3);
+ }
+}
+
+void Room::love1UseNH3OnNozzle() {
+ if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
+ _roomVar.love1.itemInNozzle = OBJECT_INH3;
+ strcpy(_roomVar.love1.bottleAnimation, "btle2");
+ _vm->_awayMission.love.bottleInNozzle = BOTTLETYPE_NH3;
+ walkCrewman(OBJECT_KIRK, 0xa6, 0x90, 3);
+ }
+}
+
+void Room::love1UseRLGOnNozzle() {
+ if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
+ _roomVar.love1.itemInNozzle = OBJECT_IRLG;
+ strcpy(_roomVar.love1.bottleAnimation, "btle4");
+ _vm->_awayMission.love.bottleInNozzle = BOTTLETYPE_RLG;
+ walkCrewman(OBJECT_KIRK, 0xa6, 0x90, 3);
+ }
+}
+
+void Room::love1KirkReachedNozzleToPut() {
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 12);
+}
+
+void Room::love1KirkPutBottleInNozzle() {
+ loadActorAnim(OBJECT_BOTTLE, _roomVar.love1.bottleAnimation, 0xa3, 0x72, 0);
+ loseItem(_roomVar.love1.itemInNozzle);
+}
+
+void Room::love1UseAnthingOnNozzle() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_012);
+}
+
+void Room::love1UseSpockOnReplicator() {
+ showText(TX_SPEAKER_SPOCK, TX_LOV1_002);
+}
+
+void Room::love1UseRedshirtOnReplicator() {
+ showText(TX_SPEAKER_FERRIS, TX_LOV1_026);
+}
+
+void Room::love1UseMccoyOnReplicator() {
+ walkCrewman(OBJECT_MCCOY, 0xb1, 0x8c, 4);
+}
+
+void Room::love1MccoyReachedReplicator() {
+ if (_vm->_awayMission.love.bottleInNozzle == BOTTLETYPE_NONE) {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_021);
+ walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
+ }
+ else if (!_vm->_awayMission.love.chamberHasDish) {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_015);
+ walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
+ }
+ else
+ loadActorAnim2(OBJECT_MCCOY, "musehn", -1, -1, 13);
+}
+
+void Room::love1MccoyUsedReplicator() {
+ if (_roomVar.love1.itemInNozzle == OBJECT_INH3) {
+ loadActorStandAnim(OBJECT_DISH_IN_CHAMBER);
+ loadActorAnim2(OBJECT_CHAMBER, "s3r2d6", 0xb4, 0x75, 7);
+ playSoundEffectIndex(SND_DOOR1);
+ walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
+ }
+ else {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_019);
+ walkCrewman(OBJECT_MCCOY, 0xbf, 0x98, 0);
+ }
+}
+
+void Room::love1ChamberClosed() {
+ loadActorAnim2(OBJECT_CHAMBER, "s3r2d5", 0xb4, 0x75, 8);
+ playSoundEffectIndex(SND_DOOR1);
+}
+
+void Room::love1ChamberOpened() {
+ loadActorAnim(OBJECT_DISH_IN_CHAMBER, "dishes", 0xb4, 0x71, 0);
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_018);
+ _vm->_awayMission.love.chamberHasCure = true;
+}
+
+void Room::love1UseAnythingOnChamber() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_013);
+}
+
+void Room::love1UseDishesOnChamber() {
+ walkCrewman(OBJECT_KIRK, 0xb3, 0x8c, 5);
+}
+
+void Room::love1KirkReachedChamberToPut() {
+ if (_vm->_awayMission.love.chamberHasDish)
+ showText(TX_LOV1_014); // TODO: test
+ else {
+ loadActorAnim(OBJECT_CHAMBER, "s3r2d5", 0xb4, 0x75, 1);
+ playSoundEffectIndex(SND_DOOR1);
+ }
+}
+
+void Room::love1ChamberOpenedForDish() {
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 14);
+}
+
+void Room::love1KirkPutDishInChamber() {
+ loadActorAnim(OBJECT_DISH_IN_CHAMBER, "dishes", 0xb4, 0x71, 0);
+ loseItem(OBJECT_IDISHES);
+ _vm->_awayMission.love.chamberHasDish = true;
+}
+
+void Room::love1UseInsulationOnDistillator() {
+ walkCrewman(OBJECT_KIRK, 0xbe, 0xc1, 6);
+}
+
+void Room::love1KirkReachedDistillator() {
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 15);
+ playVoc("LD1PROCE");
+}
+
+void Room::love1KirkGotPolyberylcarbonate() {
+ // Result of using insulation on distillator
+ showText(TX_LOV1N034);
+ if (!_vm->_awayMission.love.gotPolyberylcarbonate) {
+ _vm->_awayMission.love.gotPolyberylcarbonate = true;
+ _vm->_awayMission.love.missionScore++;
+ }
+
+ giveItem(OBJECT_IPBC);
+ loseItem(OBJECT_IINSULAT);
+}
+
+void Room::love1UseKirkOnFreezer() {
+ _roomVar.love1.crewmanUsingFreezerRetY = 0xa0;
+ _roomVar.love1.crewmanUsingFreezerRetX = 0x96;
+ _roomVar.love1.crewmanUsingDevice = OBJECT_KIRK;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x71, 0x8e, 7);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseRedshirtOnFreezer() {
+ _roomVar.love1.crewmanUsingFreezerRetY = 0x89;
+ _roomVar.love1.crewmanUsingFreezerRetX = 0x95;
+ _roomVar.love1.crewmanUsingDevice = OBJECT_REDSHIRT;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x71, 0x8e, 7);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseSpockOnFreezer() {
+ _roomVar.love1.crewmanUsingFreezerRetY = 0xa9;
+ _roomVar.love1.crewmanUsingFreezerRetX = 0x61;
+ _roomVar.love1.crewmanUsingDevice = OBJECT_SPOCK;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x71, 0x8e, 7);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseMccoyOnFreezer() {
+ _roomVar.love1.crewmanUsingFreezerRetY = 0x98;
+ _roomVar.love1.crewmanUsingFreezerRetX = 0xbf;
+ _roomVar.love1.crewmanUsingDevice = OBJECT_MCCOY;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x71, 0x8e, 7);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1CrewmanReachedFreezer() {
+ Common::String useAnim = _vm->getCrewmanAnimFilename(_roomVar.love1.crewmanUsingDevice, "usehw");
+
+ loadActorAnim2(_roomVar.love1.crewmanUsingDevice, useAnim, -1, -1, 16);
+}
+
+void Room::love1CrewmanOpenedOrClosedFreezer() {
+ if (_vm->_awayMission.love.freezerOpen)
+ loadActorAnim(OBJECT_FREEZER, "s3r2d4a", 0x67, 0x8d, 0);
+ else
+ loadActorAnim(OBJECT_FREEZER, "s3r2d4", 0x67, 0x8d, 0);
+
+ playSoundEffectIndex(SND_DOOR1);
+ _vm->_awayMission.love.freezerOpen = !_vm->_awayMission.love.freezerOpen;
+
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, _roomVar.love1.crewmanUsingFreezerRetX, _roomVar.love1.crewmanUsingFreezerRetY, 0);
+ _vm->_awayMission.disableInput = false;
+}
+
+void Room::love1UseAnythingOnFreezer() {
+ walkCrewman(OBJECT_KIRK, 0x6f, 0x8e, 11);
+}
+
+void Room::love1ReachedFreezerWithArbitraryItem() {
+ loadActorAnim2(OBJECT_KIRK, "kusemw", -1, -1, 17);
+}
+
+void Room::love1FinishedUsingArbitraryItemOnFreezer() {
+ showText(TX_LOV1N008);
+}
+
+void Room::love1UseAnythingOnReplicator() {
+ walkCrewman(OBJECT_KIRK, 0xb5, 0x8c, 12);
+}
+
+void Room::love1ReachedReplicatorWithArbitraryItem() {
+ loadActorAnim2(OBJECT_KIRK, "kusemn", -1, -1, 18);
+}
+
+void Room::love1FinishedUsingArbitraryItemOnReplicator() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_016);
+}
+
+void Room::love1UseAnythingOnDistillator() {
+ walkCrewman(OBJECT_KIRK, 0xc2, 0xb2, 13);
+}
+
+void Room::love1ReachedDistillatorWithArbitraryItem() {
+ loadActorAnim2(OBJECT_KIRK, "kuseme", -1, -1, 19);
+}
+
+void Room::love1FinishedUsingArbitraryItemOnDistillator() {
+ showText(TX_SPEAKER_MCCOY, TX_LOV1_008);
+}
+
+void Room::love1UseKirkOnLadder() {
+ _roomVar.love1.crewmanUsingDevice = OBJECT_KIRK;
+ _vm->_awayMission.crewDirectionsAfterWalk[_roomVar.love1.crewmanUsingDevice] = DIR_N;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x102, 0x89, 1);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseSpockOnLadder() {
+ _roomVar.love1.crewmanUsingDevice = OBJECT_SPOCK;
+ _vm->_awayMission.crewDirectionsAfterWalk[_roomVar.love1.crewmanUsingDevice] = DIR_N;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x102, 0x89, 1);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseMccoyOnLadder() {
+ _roomVar.love1.crewmanUsingDevice = OBJECT_MCCOY;
+ _vm->_awayMission.crewDirectionsAfterWalk[_roomVar.love1.crewmanUsingDevice] = DIR_N;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x102, 0x89, 1);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1UseRedshirtOnLadder() {
+ _roomVar.love1.crewmanUsingDevice = OBJECT_REDSHIRT;
+ _vm->_awayMission.crewDirectionsAfterWalk[_roomVar.love1.crewmanUsingDevice] = DIR_N;
+ walkCrewman(_roomVar.love1.crewmanUsingDevice, 0x102, 0x89, 1);
+ _vm->_awayMission.disableInput = true;
+}
+
+void Room::love1CrewmanReachedLadder() {
+ const int32 speakers[] = {
+ TX_SPEAKER_KIRK,
+ TX_SPEAKER_SPOCK,
+ TX_SPEAKER_MCCOY,
+ TX_SPEAKER_FERRIS
+ };
+
+ if (_vm->_awayMission.love.field2b || _vm->_awayMission.love.field41) // Romulans unconscious
+ loadRoomIndex(4, 3);
+ else { // Romulans still conscious, they shoot you
+ loadActorAnim(OBJECT_PHASERSHOT, "s3r2s2", 0xf3, 0x89, 0);
+ playSoundEffectIndex(SND_PHASSHOT);
+
+ Common::String anim = _vm->getCrewmanAnimFilename(_roomVar.love1.crewmanUsingDevice, "killw");
+ loadActorAnim(_roomVar.love1.crewmanUsingDevice, anim, 0x102, 0x89, 6);
+ _roomVar.love1.dyingSpeaker = speakers[_roomVar.love1.crewmanUsingDevice];
+ }
+}
+
+void Room::love1CrewmanDiedFromPhaser() {
+ if (_roomVar.love1.crewmanUsingDevice == OBJECT_REDSHIRT) {
+ _vm->_awayMission.disableInput = false;
+ showText(TX_SPEAKER_FERRIS, TX_LOV1_024);
+ _vm->_awayMission.redshirtDead = true;
+ }
+ else {
+ showText(_roomVar.love1.dyingSpeaker, TX_LOV1_025);
+ showGameOverMenu();
+ }
+}
+
+// Romulans fire a "warning shot" when you go to the right part of the room.
+void Room::love1TouchedHotspot0() {
+ if (_vm->_awayMission.love.field2b || _vm->_awayMission.love.field41)
+ return;
+ loadActorAnim(OBJECT_PHASERSHOT, "s3r2s1", 0xf3, 0x89, 0);
+ playSoundEffectIndex(SND_PHASSHOT);
+ if (!_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_FERRIS, TX_LOV1_028);
+}
+
+}
diff --git a/engines/startrek/rooms/love2.cpp b/engines/startrek/rooms/love2.cpp
new file mode 100644
index 0000000000..43cdd64ecf
--- /dev/null
+++ b/engines/startrek/rooms/love2.cpp
@@ -0,0 +1,35 @@
+/* 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_DOOR1 8
+
+#define HOTSPOT_CONSOLE 0x20
+
+namespace StarTrek {
+
+void Room::love2Tick1() {
+
+}
+
+}
diff --git a/engines/startrek/rooms/love3.cpp b/engines/startrek/rooms/love3.cpp
new file mode 100644
index 0000000000..44203dfa2f
--- /dev/null
+++ b/engines/startrek/rooms/love3.cpp
@@ -0,0 +1,35 @@
+/* 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_DOOR1 8
+
+#define HOTSPOT_CONSOLE 0x20
+
+namespace StarTrek {
+
+void Room::love3Tick1() {
+
+}
+
+}
diff --git a/engines/startrek/rooms/love4.cpp b/engines/startrek/rooms/love4.cpp
new file mode 100644
index 0000000000..ec82191a6d
--- /dev/null
+++ b/engines/startrek/rooms/love4.cpp
@@ -0,0 +1,35 @@
+/* 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_DOOR1 8
+
+#define HOTSPOT_CONSOLE 0x20
+
+namespace StarTrek {
+
+void Room::love4Tick1() {
+
+}
+
+}
diff --git a/engines/startrek/rooms/love5.cpp b/engines/startrek/rooms/love5.cpp
new file mode 100644
index 0000000000..0abeb59f4a
--- /dev/null
+++ b/engines/startrek/rooms/love5.cpp
@@ -0,0 +1,35 @@
+/* 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_DOOR1 8
+
+#define HOTSPOT_CONSOLE 0x20
+
+namespace StarTrek {
+
+void Room::love5Tick1() {
+
+}
+
+}