[Scummvm-git-logs] scummvm master -> de20df5ccc3e7b94e042d0fe9b645b0ae57833c0
bluegr
bluegr at gmail.com
Fri Dec 18 23:51:11 UTC 2020
This automated email contains information about 8 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5e7b556310 STARTREK: Move room action arrays to their respective room
cf559249d5 STARTREK: Add a console command to show the score of all missions
8ff4da8980 StARTREK: Clean up bitmap file name for some animations
5f8675a07d STARTREK: Use Common::String in playTextAudio()
7d454f2221 STARTREK: Change action type to signed
b40f2f31dd STARTREK: Change activeAction to be signed
4a6828f305 STARTREK: Change type in addAction to be signed
de20df5ccc STARTREK: Add some planet data, and add mission performance sequences
Commit: 5e7b556310672055b831c7da42e7a465c5072ac0
https://github.com/scummvm/scummvm/commit/5e7b556310672055b831c7da42e7a465c5072ac0
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:38+02:00
Commit Message:
STARTREK: Move room action arrays to their respective room
All action arrays now end with a terminator entry. The array count has been removed.
Also, fixed a regression when changing missions in endMission().
Changed paths:
engines/startrek/action.h
engines/startrek/room.cpp
engines/startrek/room.h
engines/startrek/rooms/demon0.cpp
engines/startrek/rooms/demon1.cpp
engines/startrek/rooms/demon2.cpp
engines/startrek/rooms/demon3.cpp
engines/startrek/rooms/demon4.cpp
engines/startrek/rooms/demon5.cpp
engines/startrek/rooms/demon6.cpp
engines/startrek/rooms/feather0.cpp
engines/startrek/rooms/feather1.cpp
engines/startrek/rooms/feather2.cpp
engines/startrek/rooms/feather3.cpp
engines/startrek/rooms/feather4.cpp
engines/startrek/rooms/feather5.cpp
engines/startrek/rooms/feather6.cpp
engines/startrek/rooms/feather7.cpp
engines/startrek/rooms/function_map.h
engines/startrek/rooms/love0.cpp
engines/startrek/rooms/love1.cpp
engines/startrek/rooms/love2.cpp
engines/startrek/rooms/love3.cpp
engines/startrek/rooms/love4.cpp
engines/startrek/rooms/love5.cpp
engines/startrek/rooms/mudd0.cpp
engines/startrek/rooms/mudd1.cpp
engines/startrek/rooms/mudd2.cpp
engines/startrek/rooms/mudd3.cpp
engines/startrek/rooms/mudd4.cpp
engines/startrek/rooms/mudd5.cpp
engines/startrek/rooms/sins0.cpp
engines/startrek/rooms/sins1.cpp
engines/startrek/rooms/sins2.cpp
engines/startrek/rooms/sins3.cpp
engines/startrek/rooms/sins4.cpp
engines/startrek/rooms/sins5.cpp
engines/startrek/rooms/trial0.cpp
engines/startrek/rooms/trial1.cpp
engines/startrek/rooms/trial2.cpp
engines/startrek/rooms/trial3.cpp
engines/startrek/rooms/trial4.cpp
engines/startrek/rooms/trial5.cpp
engines/startrek/rooms/tug0.cpp
engines/startrek/rooms/tug1.cpp
engines/startrek/rooms/tug2.cpp
engines/startrek/rooms/tug3.cpp
engines/startrek/rooms/veng0.cpp
engines/startrek/rooms/veng1.cpp
engines/startrek/rooms/veng2.cpp
engines/startrek/rooms/veng3.cpp
engines/startrek/rooms/veng4.cpp
engines/startrek/rooms/veng5.cpp
engines/startrek/rooms/veng6.cpp
engines/startrek/rooms/veng7.cpp
engines/startrek/rooms/veng8.cpp
diff --git a/engines/startrek/action.h b/engines/startrek/action.h
index 73e81d9c6f..a550ee42c6 100644
--- a/engines/startrek/action.h
+++ b/engines/startrek/action.h
@@ -50,11 +50,13 @@ enum ActionTypes {
ACTION_FINISHED_ANIMATION = 10,
ACTION_FINISHED_WALKING = 12,
- ACTION_OPTIONS = 13 // Not really an action, but selectable from action menu
+ ACTION_OPTIONS = 13, // Not really an action, but selectable from action menu
+
+ ACTION_LIST_END = -1
};
struct Action {
- byte type;
+ char type;
byte b1;
byte b2;
byte b3;
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 96beca9bc5..eb453136b6 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -27,19 +27,9 @@
#include "rooms/function_map.h"
-// TODO: Delete this macro, replacing it with the next one.
-// New "[roomName]NumActions" variables need to be made before that.
-#define ADD_ROOM_OLD(ROOM) {\
- if (name.equalsIgnoreCase(#ROOM)) {\
- _roomActionList = ROOM##ActionList;\
- _numRoomActions = ARRAYSIZE(ROOM##ActionList);\
- }\
- }
-
#define ADD_ROOM(ROOM) {\
if (name.equalsIgnoreCase(#ROOM)) {\
_roomActionList = ROOM##ActionList;\
- _numRoomActions = ROOM##NumActions;\
}\
}
@@ -56,30 +46,30 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm), _awayMissi
_roomActionList = nullptr;
- ADD_ROOM_OLD(demon0);
- ADD_ROOM_OLD(demon1);
- ADD_ROOM_OLD(demon2);
- ADD_ROOM_OLD(demon3);
- ADD_ROOM_OLD(demon4);
- ADD_ROOM_OLD(demon5);
- ADD_ROOM_OLD(demon6);
- ADD_ROOM_OLD(tug0);
- ADD_ROOM_OLD(tug1);
- ADD_ROOM_OLD(tug2);
- ADD_ROOM_OLD(tug3);
- ADD_ROOM_OLD(love0);
- ADD_ROOM_OLD(love1);
- ADD_ROOM_OLD(love2);
- ADD_ROOM_OLD(love3);
- ADD_ROOM_OLD(love4);
- ADD_ROOM_OLD(love5);
- ADD_ROOM_OLD(mudd0);
- ADD_ROOM_OLD(mudd1);
- ADD_ROOM_OLD(mudd2);
- ADD_ROOM_OLD(mudd3);
- ADD_ROOM_OLD(mudd4);
- ADD_ROOM_OLD(mudd5);
- ADD_ROOM_OLD(feather0);
+ ADD_ROOM(demon0);
+ ADD_ROOM(demon1);
+ ADD_ROOM(demon2);
+ ADD_ROOM(demon3);
+ ADD_ROOM(demon4);
+ ADD_ROOM(demon5);
+ ADD_ROOM(demon6);
+ ADD_ROOM(tug0);
+ ADD_ROOM(tug1);
+ ADD_ROOM(tug2);
+ ADD_ROOM(tug3);
+ ADD_ROOM(love0);
+ ADD_ROOM(love1);
+ ADD_ROOM(love2);
+ ADD_ROOM(love3);
+ ADD_ROOM(love4);
+ ADD_ROOM(love5);
+ ADD_ROOM(mudd0);
+ ADD_ROOM(mudd1);
+ ADD_ROOM(mudd2);
+ ADD_ROOM(mudd3);
+ ADD_ROOM(mudd4);
+ ADD_ROOM(mudd5);
+ ADD_ROOM(feather0);
ADD_ROOM(feather1);
ADD_ROOM(feather2);
ADD_ROOM(feather3);
@@ -111,7 +101,6 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm), _awayMissi
if (_roomActionList == nullptr) {
warning("Room \"%s\" unimplemented", name.c_str());
- _numRoomActions = 0;
}
bool isDemo = _vm->getFeatures() & GF_DEMO;
@@ -321,9 +310,8 @@ uint16 Room::readRdfWord(int offset) {
bool Room::actionHasCode(const Action &action) {
const RoomAction *roomActionPtr = _roomActionList;
- int n = _numRoomActions;
- while (n-- > 0) {
+ while (roomActionPtr->action.type != ACTION_LIST_END) {
if (action == roomActionPtr->action)
return true;
roomActionPtr++;
@@ -338,9 +326,8 @@ bool Room::actionHasCode(byte type, byte b1, byte b2, byte b3) {
bool Room::handleAction(const Action &action) {
const RoomAction *roomActionPtr = _roomActionList;
- int n = _numRoomActions;
- while (n-- > 0) {
+ while (roomActionPtr->action.type != ACTION_LIST_END) {
if (action == roomActionPtr->action) {
_vm->_awayMission.rdfStillDoDefaultAction = false;
(this->*(roomActionPtr->funcPtr))();
@@ -359,9 +346,8 @@ bool Room::handleAction(byte type, byte b1, byte b2, byte b3) {
bool Room::handleActionWithBitmask(const Action &action) {
const RoomAction *roomActionPtr = _roomActionList;
- int n = _numRoomActions;
- while (n-- > 0) {
+ while (roomActionPtr->action.type != ACTION_LIST_END) {
uint32 bitmask = roomActionPtr->action.getBitmask();
if ((action.toUint32() & bitmask) == (roomActionPtr->action.toUint32() & bitmask)) {
_vm->_awayMission.rdfStillDoDefaultAction = false;
@@ -400,10 +386,12 @@ Common::Point Room::getSpawnPosition(int crewmanIndex) {
// Creates a fatal error on failure.
int Room::findFunctionPointer(int action, void (Room::*funcPtr)()) {
assert(action == ACTION_FINISHED_ANIMATION || action == ACTION_FINISHED_WALKING);
+ const RoomAction *roomActionPtr = _roomActionList;
- for (int i = 0; i < _numRoomActions; i++) {
- if (_roomActionList[i].action.type == action && _roomActionList[i].funcPtr == funcPtr)
- return _roomActionList[i].action.b1;
+ while (roomActionPtr->action.type != ACTION_LIST_END) {
+ if (roomActionPtr->action.type == action && roomActionPtr->funcPtr == funcPtr)
+ return roomActionPtr->action.b1;
+ roomActionPtr++;
}
if (action == ACTION_FINISHED_ANIMATION)
@@ -683,6 +671,7 @@ void Room::endMission(int16 score, int16 arg1, int16 arg2) {
// TODO: This is a stopgap measure (loading the next away mission immediately).
// Replace this with the proper code later.
_vm->_gameMode = GAMEMODE_BEAMDOWN;
+ _vm->_roomIndexToLoad = 0;
const char *missionNames[] = {
"DEMON",
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 233a059ae9..617c522caa 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -169,7 +169,6 @@ private:
AwayMission *_awayMission;
const RoomAction *_roomActionList;
- int _numRoomActions;
Common::HashMap<int, Common::String> _lookMessages;
Common::HashMap<int, Common::String> _lookWithTalkerMessages;
diff --git a/engines/startrek/rooms/demon0.cpp b/engines/startrek/rooms/demon0.cpp
index aa9a3fe57f..8fa1f06fc6 100644
--- a/engines/startrek/rooms/demon0.cpp
+++ b/engines/startrek/rooms/demon0.cpp
@@ -24,6 +24,64 @@
namespace StarTrek {
+extern const RoomAction demon0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon0Tick1 },
+ { {ACTION_TICK, 2, 0, 0}, &Room::demon0Tick2 },
+ { {ACTION_TICK, 60, 0, 0}, &Room::demon0Tick60 },
+ { {ACTION_TICK, 100, 0, 0}, &Room::demon0Tick100 },
+ { {ACTION_TICK, 140, 0, 0}, &Room::demon0Tick140 },
+
+ { {ACTION_TOUCHED_WARP, 0, 0, 0}, &Room::demon0TouchedWarp0 },
+
+ { {ACTION_WALK, 0x27, 0, 0}, &Room::demon0WalkToBottomDoor },
+ { {ACTION_WALK, 9, 0, 0}, &Room::demon0WalkToBottomDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::demon0TouchedHotspot1 },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon0ReachedBottomDoor },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon0ReachedBottomDoor },
+
+ { {ACTION_WALK, 0x26, 0, 0}, &Room::demon0WalkToTopDoor },
+ { {ACTION_WALK, 10, 0, 0}, &Room::demon0WalkToTopDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon0TouchedHotspot0 },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon0ReachedTopDoor },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon0ReachedTopDoor },
+
+ { {ACTION_TALK, 8, 0, 0}, &Room::demon0TalkToPrelate },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon0LookAtPrelate },
+
+ { {ACTION_USE, OBJECT_IPHASERS, 0x23, 0}, &Room::demon0UsePhaserOnSnow },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x23, 0}, &Room::demon0UsePhaserOnSnow },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x25, 0}, &Room::demon0UsePhaserOnSign },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x25, 0}, &Room::demon0UsePhaserOnSign },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::demon0UsePhaserOnShelter },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon0UsePhaserOnPrelate },
+
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon0LookAtSign },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon0LookAtTrees },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon0LookAtTrees },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon0LookAtSnow },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon0LookAnywhere },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon0LookAtBushes },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon0LookAtMcCoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon0LookAtRedShirt },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon0LookAtSpock },
+
+ { {ACTION_LOOK, 9, 0, 0}, &Room::demon0LookAtShelter }, // Door 1
+ { {ACTION_LOOK, 10, 0, 0}, &Room::demon0LookAtShelter }, // Door 2
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon0LookAtShelter }, // Shelter itself
+
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon0TalkToKirk },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon0TalkToRedshirt },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon0TalkToMcCoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon0TalkToSpock },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::demon0UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon0UseMTricorderOnPrelate },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::demon0Tick1() {
playVoc("DEM0LOOP");
loadActorAnim(9, "s0r0d3", 252, 153, 0);
diff --git a/engines/startrek/rooms/demon1.cpp b/engines/startrek/rooms/demon1.cpp
index 0e64e6dff2..1c89e9bc5e 100644
--- a/engines/startrek/rooms/demon1.cpp
+++ b/engines/startrek/rooms/demon1.cpp
@@ -24,6 +24,92 @@
namespace StarTrek {
+extern const RoomAction demon1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon1Tick1 },
+
+ { {ACTION_WALK, 0x25, 0, 0}, &Room::demon1WalkToCave },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon1TouchedTopWarp },
+ { {ACTION_TOUCHED_WARP, 0, 0, 0}, &Room::demon1TouchedTopWarp },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::demon1TouchedBottomWarp },
+
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::demon1Timer2Expired },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon1Timer0Expired },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon1Timer3Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon1Timer1Expired },
+
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon1KlingonFinishedAimingWeapon },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon1KirkShot },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::demon1UsePhaserOnAnything },
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::demon1UsePhaserOnAnything },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon1UsePhaserOnKlingon1 },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon1UsePhaserOnKlingon1 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon1ShootKlingon1 },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::demon1KlingonDropsHand },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::demon1UsePhaserOnKlingon2 },
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::demon1UsePhaserOnKlingon2 },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon1ShootKlingon2 },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::demon1UsePhaserOnKlingon3 },
+ { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::demon1UsePhaserOnKlingon3 },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon1ShootKlingon3 },
+
+ { {ACTION_TIMER_EXPIRED, 6, 0, 0}, &Room::demon1AllKlingonsDead },
+ { {ACTION_TIMER_EXPIRED, 5, 0, 0}, &Room::demon1Timer5Expired },
+
+ { {ACTION_USE, OBJECT_IMTRICOR, 13, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon1UseSTricorderOnTulips },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon1UseSTricorderOnPods },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon1UseSTricorderOnCattails },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon1UseSTricorderOnFerns },
+ { {ACTION_USE, OBJECT_ISTRICOR, 13, 0}, &Room::demon1UseSTricorderOnHand },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon1UseSTricorderOnKlingon1 },
+ { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 },
+ { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_IMEDKIT, 10, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon1UseMTricorderOnKlingon },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 }, // This is redundant
+
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::demon1UseMTricorderOnKirk },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::demon1UseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::demon1UseMTricorderOnRedshirt },
+
+ { {ACTION_GET, 13, 0, 0}, &Room::demon1GetHand },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon1ReachedHand },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::demon1PickedUpHand },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::demon1FinishedGettingHand },
+
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon1LookAtKlingon },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::demon1LookAtKlingon },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::demon1LookAtKlingon },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon1LookAtCattails },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon1LookAtTulips },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon1LookAtPods },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon1LookAtFerns },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon1LookAtStream },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon1LookAtMine },
+ { {ACTION_LOOK, 0x26, 0, 0}, &Room::demon1LookAtMountain },
+ { {ACTION_LOOK, 13, 0, 0}, &Room::demon1LookAtHand },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon1LookAnywhere },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon1LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon1LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon1LookAtMcCoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon1LookAtRedshirt },
+
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon1TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon1TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon1TalkToMcCoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon1TalkToRedshirt },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
// BUG: under certain circumstances, the klingons just stop firing?
void Room::demon1Tick1() {
diff --git a/engines/startrek/rooms/demon2.cpp b/engines/startrek/rooms/demon2.cpp
index fbaca93cce..966ea1d89c 100644
--- a/engines/startrek/rooms/demon2.cpp
+++ b/engines/startrek/rooms/demon2.cpp
@@ -24,6 +24,49 @@
namespace StarTrek {
+extern const RoomAction demon2ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon2Tick1 },
+ { {ACTION_WALK, 0x27, 0, 0}, &Room::demon2WalkToCave },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon2ReachedCave },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::demon2TouchedWarp1 },
+
+ { {ACTION_LOOK, 0x27, 0, 0}, &Room::demon2LookAtCave },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon2LookAtCave },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon2LookAtMountain },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon2LookAtMountain },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon2LookAtBerries },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon2LookAtFern },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon2LookAtMoss },
+ { {ACTION_LOOK, 0x26, 0, 0}, &Room::demon2LookAtLights },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon2LookAtAnything },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon2LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon2LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon2LookAtMcCoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon2LookAtRedshirt },
+
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon2TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon2TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon2TalkToMcCoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon2TalkToRedshirt },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 0x23, 0}, &Room::demon2UsePhaserOnBerries },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x23, 0}, &Room::demon2UsePhaserOnBerries },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon2UseSTricorderOnBerries },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::demon2UseSTricorderOnMoss },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x24, 0}, &Room::demon2UseSTricorderOnFern },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon2UseSTricorderOnCave },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon2UseSTricorderOnCave },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon2UseSTricorderOnCave },
+
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x23, 0}, &Room::demon2UseMTricorderOnBerries },
+ { {ACTION_GET, 0x23, 0, 0}, &Room::demon2GetBerries },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon2ReachedBerries },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon2PickedUpBerries },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::demon2Tick1() {
playVoc("DEM2LOOP");
}
diff --git a/engines/startrek/rooms/demon3.cpp b/engines/startrek/rooms/demon3.cpp
index 9b8b34b3e6..11c270f3cb 100644
--- a/engines/startrek/rooms/demon3.cpp
+++ b/engines/startrek/rooms/demon3.cpp
@@ -24,6 +24,104 @@
namespace StarTrek {
+extern const RoomAction demon3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon3Tick1 },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon3Timer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon3Timer1Expired },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon3Timer3Expired },
+
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon3FinishedAnimation1 },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon3FinishedAnimation2 },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon3FinishedWalking5 },
+
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon3McCoyInFiringPosition },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon3SpockInFiringPosition },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon3RedShirtInFiringPosition },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon3KirkInFiringPosition },
+
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon3FireAtBoulder },
+
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_REDSHIRT, 0}, &Room::demon3UsePhaserOnRedshirt },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_REDSHIRT, 0}, &Room::demon3UsePhaserOnRedshirt },
+
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::demon3UseStunPhaserOnBoulder },
+ { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::demon3UseStunPhaserOnBoulder },
+ { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::demon3UseStunPhaserOnBoulder },
+ { {ACTION_USE, OBJECT_IPHASERS, 12, 0}, &Room::demon3UseStunPhaserOnBoulder },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::demon3UsePhaserOnBoulder1 },
+ { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::demon3UsePhaserOnBoulder2 },
+ { {ACTION_USE, OBJECT_IPHASERK, 11, 0}, &Room::demon3UsePhaserOnBoulder3 },
+ { {ACTION_USE, OBJECT_IPHASERK, 12, 0}, &Room::demon3UsePhaserOnBoulder4 },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 13, 0}, &Room::demon3UseSTricorderOnMiner },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon3UseSTricorderOnPanel },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon3UseSTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon3UseSTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_ISTRICOR, 11, 0}, &Room::demon3UseSTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::demon3UseSTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon3UseMTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon3UseMTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::demon3UseMTricorderOnBoulder },
+ { {ACTION_USE, OBJECT_IMTRICOR, 12, 0}, &Room::demon3UseMTricorderOnBoulder },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::demon3UseRedshirtOnPanel },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::demon3RedshirtReachedPanel },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon3RedshirtUsedPanel },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon3RedshirtElectrocuted },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon3UseSTricorderOnDoor },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon3UseSTricorderOnAnything },
+ { {ACTION_USE, OBJECT_IMTRICOR, 14, 0}, &Room::demon3UseMTricorderOnDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::demon3UseMTricorderOnDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::demon3UseMTricorderOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERS, 14, 0}, &Room::demon3UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERK, 14, 0}, &Room::demon3UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::demon3UsePhaserOnDoor },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x21, 0}, &Room::demon3UsePhaserOnDoor },
+
+ { {ACTION_USE, OBJECT_IHAND, 0x20, 0}, &Room::demon3UseHandOnPanel },
+ { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::demon3KirkReachedHandPanel },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::demon3KirkUsedHandPanel },
+
+ { {ACTION_USE, OBJECT_IMTRICOR, 13, 0}, &Room::demon3UseMTricorderOnMiner },
+ { {ACTION_USE, OBJECT_MCCOY, 13, 0}, &Room::demon3UseMedkitOnMiner },
+ { {ACTION_USE, OBJECT_IMEDKIT, 13, 0}, &Room::demon3UseMedkitOnMiner },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::demon3McCoyReachedMiner },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::demon3McCoyFinishedHealingMiner },
+
+ { {ACTION_GET, 13, 0, 0}, &Room::demon3GetMiner },
+ { {ACTION_TALK, 13, 0, 0}, &Room::demon3TalkToMiner },
+
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon3TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon3TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon3TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon3TalkToRedshirt },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon3LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon3LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon3LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon3LookAtRedshirt },
+
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon3LookAnywhere },
+ { {ACTION_LOOK, 13, 0, 0}, &Room::demon3LookAtMiner },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::demon3LookAtBoulder1 },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::demon3LookAtBoulder2 },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::demon3LookAtBoulder3 },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::demon3LookAtBoulder4 },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon3LookAtStructure },
+ { {ACTION_LOOK, 14, 0, 0}, &Room::demon3LookAtDoor },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon3LookAtDoor },
+ { {ACTION_LOOK, 15, 0, 0}, &Room::demon3LookAtPanel },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon3LookAtPanel },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon3LookAtLight },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+
+};
+
void Room::demon3Tick1() {
playVoc("DEM3LOOP");
loadActorAnim(8, "light", 0xab, 0x03, 0);
diff --git a/engines/startrek/rooms/demon4.cpp b/engines/startrek/rooms/demon4.cpp
index fe19f4d598..e3c8ea8610 100644
--- a/engines/startrek/rooms/demon4.cpp
+++ b/engines/startrek/rooms/demon4.cpp
@@ -25,6 +25,76 @@
namespace StarTrek {
+extern const RoomAction demon4ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon4Tick1 },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon4FinishedAnimation1 },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon4FinishedAnimation2 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon4FinishedAnimation3 },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon4Timer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon4Timer1Expired },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon4CrewmanReachedBeamoutPosition },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::demon4Timer2Expired },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon4Timer3Expired },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::demon4Timer4Expired },
+ { {ACTION_TIMER_EXPIRED, 5, 0, 0}, &Room::demon4Timer5Expired },
+ { {ACTION_TIMER_EXPIRED, 6, 0, 0}, &Room::demon4Timer6Expired },
+
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon4UsePhaserOnNauian },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon4UsePhaserOnNauian },
+ { {ACTION_USE, OBJECT_IMETAL, 0x22, 0}, &Room::demon4UseMetalOnSecurityEquipment },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon4KirkReachedSecurityEquipment },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon4KirkFinishedUsingSecurityEquipment },
+ { {ACTION_USE, OBJECT_IMETAL, 8, 0}, &Room::demon4UseMetalOnNauian },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon4KirkReachedNauian },
+ { {ACTION_USE, OBJECT_ISKULL, 8, 0}, &Room::demon4UseSkullOnNauian },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon4KirkReachedNauianWithSkull },
+
+ { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::demon4UsePhaserOnPanel },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::demon4UsePhaserOnPattern },
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::demon4UsePhaserOnMccoy },
+
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon4TalkToNauian },
+ { {ACTION_TALK, 8, 0, 0}, &Room::demon4TalkToNauian },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon4LookAtPattern },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon4LookAtAlien },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon4LookAnywhere },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon4LookAtSecurityEquipment },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon4LookAtFloor },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon4LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon4LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon4LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon4LookAtRedshirt },
+
+ { {ACTION_LOOK, 10, 0, 0}, &Room::demon4LookAtChamber },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon4LookAtPanel },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::demon4UseKirkOnPanel },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::demon4UseSpockOnPanel },
+ { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::demon4UseMccoyOnPanel },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::demon4UseRedshirtOnPanel },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon4CrewmanReachedPanel },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon4TalkToKirk },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon4TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon4TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon4TalkToRedshirt },
+ { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon4UseSTricorderOnChamber },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon4UseSTricorderOnPattern },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::demon4UseMTricorderOnPattern },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon4UseSTricorderOnPanel },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::demon4UseMTricorderOnPanel },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon4UseSTricorderOnAnything },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon4UseSTricorderOnAnything },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x23, 0}, &Room::demon4UseMTricorderOnAnything },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::demon4UseMTricorderOnAnything },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon4UseSTricorderOnNauian },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon4UseMTricorderOnNauian },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon4UseSTricorderOnSecurityEquipment },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::demon4UseMTricorderOnSecurityEquipment },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
// TODO: this room should have animations on computer terminals, but this isn't where
// they're implemented. Could be related to ".BAN" files which rooms can load?
diff --git a/engines/startrek/rooms/demon5.cpp b/engines/startrek/rooms/demon5.cpp
index c1e900df0a..8f44a3f5c4 100644
--- a/engines/startrek/rooms/demon5.cpp
+++ b/engines/startrek/rooms/demon5.cpp
@@ -24,6 +24,62 @@
namespace StarTrek {
+extern const RoomAction demon5ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon5Tick1 },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::demon5WalkToDoor },
+ { {ACTION_WALK, 12, 0, 0}, &Room::demon5WalkToDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon5TouchedDoorOpenTrigger },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon5DoorOpenedOrReachedDoor },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon5DoorOpenedOrReachedDoor },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon5UseSTricorderOnCrate },
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::demon5UsePhaserOnAnything },
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::demon5UsePhaserOnAnything },
+
+ { {ACTION_USE, OBJECT_IHAND, 11, 0}, &Room::demon5UseHandOnStephen },
+ { {ACTION_USE, OBJECT_IBERRY, 11, 0}, &Room::demon5UseBerryOnStephen },
+ { {ACTION_USE, OBJECT_IDETOXIN, 9, 0}, &Room::demon5UseHypoDytoxinOnChub },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon5MccoyReachedChub },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon5MccoyHealedChub },
+
+ { {ACTION_USE, OBJECT_IDETOXIN, 0xff, 0}, &Room::demon5UseHypoDytoxinOnAnything },
+ { {ACTION_USE, OBJECT_IBERRY, 9, 0}, &Room::demon5UseBerryOnChub },
+
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon5LookAtRoberts },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::demon5LookAtGrisnash },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::demon5LookAtStephen },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon5LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon5LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon5LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon5LookAtRedshirt },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon5LookAtMountain },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon5LookAtCrate },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon5LookAnywhere },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::demon5LookAtChub },
+
+ { {ACTION_TALK, 8, 0, 0}, &Room::demon5TalkToRoberts },
+ { {ACTION_TALK, 9, 0, 0}, &Room::demon5TalkToChub },
+ { {ACTION_TALK, 10, 0, 0}, &Room::demon5TalkToGrisnash },
+ { {ACTION_TALK, 11, 0, 0}, &Room::demon5TalkToStephen },
+
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon5TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon5TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon5TalkToRedshirt },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon5TalkToMccoy },
+
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon5UseMTricorderOnRoberts },
+ { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::demon5UseMTricorderOnChub },
+ { {ACTION_USE, OBJECT_MCCOY, 9, 0}, &Room::demon5UseMTricorderOnChub },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon5UseMTricorderOnChub },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon5UseMTricorderOnGrisnash },
+ { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::demon5UseMTricorderOnStephen },
+
+ { {ACTION_GET, 0x21, 0, 0}, &Room::demon5GetCrate },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::demon5Tick1() {
playVoc("DEM5LOOP");
diff --git a/engines/startrek/rooms/demon6.cpp b/engines/startrek/rooms/demon6.cpp
index 22eaf3244b..3bebcb48de 100644
--- a/engines/startrek/rooms/demon6.cpp
+++ b/engines/startrek/rooms/demon6.cpp
@@ -25,6 +25,87 @@
namespace StarTrek {
+extern const RoomAction demon6ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::demon6Tick1 },
+ { {ACTION_TICK, 30, 0, 0}, &Room::demon6Tick30 },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon6SpockReachedComputer },
+
+ { {ACTION_WALK, 0x26, 0, 0}, &Room::demon6WalkToDoor },
+ { {ACTION_WALK, 10, 0, 0}, &Room::demon6WalkToDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon6TouchedDoorOpenTrigger },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon6DoorOpenedOrReachedDoor },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon6DoorOpenedOrReachedDoor },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon6UsePhaserOnStephen },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon6UsePhaserOnStephen },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::demon6UsePhaserOnCase },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::demon6UsePhaserOnCase },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon6LookAtWorkspace },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon6LookAtCase },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon6LookAtTable },
+ { {ACTION_LOOK, OBJECT_IMINERAL, 0, 0}, &Room::demon6LookAtMineral },
+ { {ACTION_LOOK, OBJECT_ISHELLS, 0, 0}, &Room::demon6LookAtShells },
+ { {ACTION_LOOK, OBJECT_ISKULL, 0, 0}, &Room::demon6LookAtSkull },
+ { {ACTION_LOOK, OBJECT_IMETAL, 0, 0}, &Room::demon6LookAtMetal },
+ { {ACTION_LOOK, OBJECT_IMETEOR, 0, 0}, &Room::demon6LookAtMeteor },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon6LookAtMountain },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon6LookAtSynthesizer },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon6LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon6LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon6LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon6LookAtRedshirt },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon6LookAtComputer },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::demon6LookAtComputer },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon6LookAnywhere },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::demon6LookAtStephen },
+
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon6TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon6TalkToSpock },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon6TalkToKirk },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon6TalkToRedshirt },
+ { {ACTION_TALK, 8, 0, 0}, &Room::demon6TalkToStephen },
+ { {ACTION_USE, OBJECT_IBERRY, 8, 0}, &Room::demon6UseBerryOnStephen },
+ { {ACTION_USE, OBJECT_IBERRY, 0x23, 0}, &Room::demon6UseBerryOnSynthesizer },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon6MccoyReachedSynthesizer },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon6FinishedMakingHypoDytoxin },
+ { {ACTION_USE, OBJECT_IHAND, 0x22, 0}, &Room::demon6UseHandOnWorkspace },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon6SpockReachedWorkspace },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon6SpockFinishedRepairingHand },
+ { {ACTION_USE, 0xff, 0x22, 0}, &Room::demon6UseAnythingOnWorkspace },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::demon6UseKirkOnComputer },
+ { {ACTION_USE, OBJECT_KIRK, 9, 0}, &Room::demon6UseKirkOnComputer },
+ { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::demon6UseMccoyOnComputer },
+ { {ACTION_USE, OBJECT_MCCOY, 9, 0}, &Room::demon6UseMccoyOnComputer },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::demon6UseRedshirtOnComputer },
+ { {ACTION_USE, OBJECT_REDSHIRT, 9, 0}, &Room::demon6UseRedshirtOnComputer },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::demon6UseSpockOnComputer },
+ { {ACTION_USE, OBJECT_SPOCK, 9, 0}, &Room::demon6UseSpockOnComputer },
+ { {ACTION_USE, OBJECT_IMINERAL, 8, 0}, &Room::demon6UseMineralOnStephen },
+ { {ACTION_USE, OBJECT_ISHELLS, 8, 0}, &Room::demon6UseShellsOnStephen },
+ { {ACTION_USE, OBJECT_IMETEOR, 8, 0}, &Room::demon6UseMeteorOnStephen },
+ { {ACTION_USE, OBJECT_ISKULL, 8, 0}, &Room::demon6UseSkullOnStephen },
+ { {ACTION_USE, OBJECT_IMETAL, 8, 0}, &Room::demon6UseMetalOnStephen },
+ { {ACTION_USE, OBJECT_IHAND, 8, 0}, &Room::demon6UseHandOnStephen },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon6UseMTricoderOnStephen },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::demon6UseSTricoderOnTable },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon6UseSTricoderOnComputer },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon6UseSTricoderOnComputer },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMINERAL, 0}, &Room::demon6UseSTricoderOnMineral },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISHELLS, 0}, &Room::demon6UseSTricoderOnShells },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISKULL, 0}, &Room::demon6UseSTricoderOnSkull },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETAL, 0}, &Room::demon6UseSTricoderOnMetal },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETEOR, 0}, &Room::demon6UseSTricoderOnMeteor },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon6UseSTricoderOnCase },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon6UseSTricoderOnSynthesizer },
+ { {ACTION_GET, 0x20, 0, 0}, &Room::demon6GetCase },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon6KirkReachedCase },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::demon6Tick1() {
playVoc("DEM6LOOP");
if (_awayMission->demon.gotBerries || (!_awayMission->demon.field3e && _awayMission->demon.field37)) {
diff --git a/engines/startrek/rooms/feather0.cpp b/engines/startrek/rooms/feather0.cpp
index 1c52850310..d728407d10 100644
--- a/engines/startrek/rooms/feather0.cpp
+++ b/engines/startrek/rooms/feather0.cpp
@@ -40,6 +40,44 @@
namespace StarTrek {
+extern const RoomAction feather0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::feather0Tick1 },
+ { {ACTION_TICK, 60, 0, 0}, &Room::feather0Tick60 },
+ { {ACTION_TALK, 8, 0, 0}, &Room::feather0TalkToQuetzecoatl },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::feather0Timer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::feather0Timer1Expired },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::feather0UsePhaserOnQuetzecoatl },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::feather0UsePhaserOnQuetzecoatl },
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::feather0UsePhaserOnMccoy },
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::feather0UsePhaserOnMccoy },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::feather0UseMedkit },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::feather0LookAtQuetzecoatl },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::feather0LookAtMoon },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::feather0LookAtLog },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::feather0LookAtHut },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::feather0LookAnywhere },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x26, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x27, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x28, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x29, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x2a, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x2b, 0, 0}, &Room::feather0LookAtEyes },
+ { {ACTION_LOOK, 0x2c, 0, 0}, &Room::feather0LookAtTree },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather0LookAtRedshirt },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::feather0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::feather0TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::feather0TalkToRedshirt },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::feather0UseSTricorderOnQuetzecoatl },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::feather0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::feather0UseMTricorderOnQuetzecoatl },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::feather0Tick1() {
playVoc("FEA0LOOP");
loadActorAnim(OBJECT_QUETZECOATL, "s5r0qb", 0xbe, 0xa6);
diff --git a/engines/startrek/rooms/feather1.cpp b/engines/startrek/rooms/feather1.cpp
index 3dfae5e6b9..48fe677a24 100644
--- a/engines/startrek/rooms/feather1.cpp
+++ b/engines/startrek/rooms/feather1.cpp
@@ -139,11 +139,9 @@ extern const RoomAction feather1ActionList[] = {
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather1LookAtMccoy },
{ {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather1LookAtRedshirt },
{ {ACTION_LOOK, OBJECT_LEFT_VINE, 0, 0}, &Room::feather1LookAtLeftVine },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather1NumActions = ARRAYSIZE(feather1ActionList);
-
-
void Room::feather1Tick1() {
playVoc("FEA1LOOP");
playMidiMusicTracks(27);
diff --git a/engines/startrek/rooms/feather2.cpp b/engines/startrek/rooms/feather2.cpp
index cd829c4cfa..4f2753ba08 100644
--- a/engines/startrek/rooms/feather2.cpp
+++ b/engines/startrek/rooms/feather2.cpp
@@ -55,11 +55,9 @@ extern const RoomAction feather2ActionList[] = {
{ {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather2LookAtSpock },
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather2LookAtMccoy },
{ {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather2LookAtRedshirt },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather2NumActions = ARRAYSIZE(feather2ActionList);
-
-
void Room::feather2Tick1() {
playVoc("FEA2LOOP");
playMidiMusicTracks(27);
diff --git a/engines/startrek/rooms/feather3.cpp b/engines/startrek/rooms/feather3.cpp
index 8ac18f8687..04d83c6b82 100644
--- a/engines/startrek/rooms/feather3.cpp
+++ b/engines/startrek/rooms/feather3.cpp
@@ -88,11 +88,9 @@ extern const RoomAction feather3ActionList[] = {
{ {ACTION_LOOK, HOTSPOT_LIGHT_2, 0, 0}, &Room::feather3LookAtLight },
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather3LookAtMccoy },
{ {ACTION_LOOK, OBJECT_KNIFE, 0, 0}, &Room::feather3LookAtKnife },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather3NumActions = ARRAYSIZE(feather3ActionList);
-
-
void Room::feather3Tick1() {
playVoc("FEA3LOOP");
playMidiMusicTracks(27);
diff --git a/engines/startrek/rooms/feather4.cpp b/engines/startrek/rooms/feather4.cpp
index 7b883032cd..9f80d3d34f 100644
--- a/engines/startrek/rooms/feather4.cpp
+++ b/engines/startrek/rooms/feather4.cpp
@@ -62,11 +62,9 @@ extern const RoomAction feather4ActionList[] = {
{ {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather4LookAtSpock },
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather4LookAtMccoy },
{ {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather4LookAtRedshirt },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather4NumActions = ARRAYSIZE(feather4ActionList);
-
-
void Room::feather4Tick1() {
playVoc("FEA4LOOP");
playMidiMusicTracks(27);
diff --git a/engines/startrek/rooms/feather5.cpp b/engines/startrek/rooms/feather5.cpp
index 1ce527a035..a7fabbd7c9 100644
--- a/engines/startrek/rooms/feather5.cpp
+++ b/engines/startrek/rooms/feather5.cpp
@@ -109,11 +109,9 @@ extern const RoomAction feather5ActionList[] = {
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_WATER, 0}, &Room::feather5UseSTricorderOnWater },
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_FERN, 0}, &Room::feather5UseSTricorderOnFern },
{ {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::feather5UseMedkitAnywhere },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather5NumActions = ARRAYSIZE(feather5ActionList);
-
-
void Room::feather5Tick1() {
playVoc("FEA5LOOP");
playMidiMusicTracks(29);
diff --git a/engines/startrek/rooms/feather6.cpp b/engines/startrek/rooms/feather6.cpp
index 65935be31c..ff05f415e3 100644
--- a/engines/startrek/rooms/feather6.cpp
+++ b/engines/startrek/rooms/feather6.cpp
@@ -96,11 +96,9 @@ extern const RoomAction feather6ActionList[] = {
// ENHANCEMENTs: Also add entries for OBJECT_STALACTITES, not just HOTSPOT_STALACTITES
{ {ACTION_LOOK, OBJECT_STALACTITES, 0, 0}, &Room::feather6LookAtStalactites },
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_STALACTITES, 0}, &Room::feather6UseSTricorderOnStalactites },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather6NumActions = ARRAYSIZE(feather6ActionList);
-
-
void Room::feather6Tick1() {
playVoc("FEA6LOOP");
playMidiMusicTracks(27);
diff --git a/engines/startrek/rooms/feather7.cpp b/engines/startrek/rooms/feather7.cpp
index 21973d4906..d2d97ca3c2 100644
--- a/engines/startrek/rooms/feather7.cpp
+++ b/engines/startrek/rooms/feather7.cpp
@@ -35,11 +35,9 @@ extern const RoomAction feather7ActionList[] = {
{ {ACTION_DONE_ANIM, 4, 0, 0}, &Room::feather7QuetzecoatlReachedSeat },
{ {ACTION_DONE_ANIM, 1, 0, 0}, &Room::feather7KirkSatDown },
{ {ACTION_DONE_ANIM, 2, 0, 0}, &Room::feather7ReadyToBeamOut },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int feather7NumActions = ARRAYSIZE(feather7ActionList);
-
-
void Room::feather7Tick1() {
playVoc("FEA7LOOP");
playMidiMusicTracks(33);
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index e3507bd26b..61f49c87d2 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -28,1777 +28,29 @@
namespace StarTrek {
-RoomAction demon0ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon0Tick1 },
- { {ACTION_TICK, 2, 0, 0}, &Room::demon0Tick2 },
- { {ACTION_TICK, 60, 0, 0}, &Room::demon0Tick60 },
- { {ACTION_TICK, 100, 0, 0}, &Room::demon0Tick100 },
- { {ACTION_TICK, 140, 0, 0}, &Room::demon0Tick140 },
+extern const RoomAction demon0ActionList[], demon1ActionList[], demon2ActionList[], demon3ActionList[];
+extern const RoomAction demon4ActionList[], demon5ActionList[], demon6ActionList[];
- { {ACTION_TOUCHED_WARP, 0, 0, 0}, &Room::demon0TouchedWarp0 },
+extern const RoomAction tug0ActionList[], tug1ActionList[], tug2ActionList[], tug3ActionList[];
- { {ACTION_WALK, 0x27, 0, 0}, &Room::demon0WalkToBottomDoor },
- { {ACTION_WALK, 9, 0, 0}, &Room::demon0WalkToBottomDoor },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::demon0TouchedHotspot1 },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon0ReachedBottomDoor },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon0ReachedBottomDoor },
+extern const RoomAction love0ActionList[], love1ActionList[], love2ActionList[], love3ActionList[];
+extern const RoomAction love4ActionList[], love5ActionList[];
- { {ACTION_WALK, 0x26, 0, 0}, &Room::demon0WalkToTopDoor },
- { {ACTION_WALK, 10, 0, 0}, &Room::demon0WalkToTopDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon0TouchedHotspot0 },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon0ReachedTopDoor },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon0ReachedTopDoor },
+extern const RoomAction mudd0ActionList[], mudd1ActionList[], mudd2ActionList[], mudd3ActionList[];
+extern const RoomAction mudd4ActionList[], mudd5ActionList[];
- { {ACTION_TALK, 8, 0, 0}, &Room::demon0TalkToPrelate },
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon0LookAtPrelate },
-
- { {ACTION_USE, OBJECT_IPHASERS, 0x23, 0}, &Room::demon0UsePhaserOnSnow },
- { {ACTION_USE, OBJECT_IPHASERK, 0x23, 0}, &Room::demon0UsePhaserOnSnow },
- { {ACTION_USE, OBJECT_IPHASERS, 0x25, 0}, &Room::demon0UsePhaserOnSign },
- { {ACTION_USE, OBJECT_IPHASERK, 0x25, 0}, &Room::demon0UsePhaserOnSign },
- { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::demon0UsePhaserOnShelter },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon0UsePhaserOnPrelate },
-
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon0LookAtSign },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon0LookAtTrees },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon0LookAtTrees },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon0LookAtSnow },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon0LookAnywhere },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon0LookAtBushes },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon0LookAtKirk },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon0LookAtMcCoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon0LookAtRedShirt },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon0LookAtSpock },
-
- { {ACTION_LOOK, 9, 0, 0}, &Room::demon0LookAtShelter }, // Door 1
- { {ACTION_LOOK, 10, 0, 0}, &Room::demon0LookAtShelter }, // Door 2
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon0LookAtShelter }, // Shelter itself
-
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon0TalkToKirk },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon0TalkToRedshirt },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon0TalkToMcCoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon0TalkToSpock },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon0UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::demon0UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon0UseMTricorderOnPrelate },
-};
-
-RoomAction demon1ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon1Tick1 },
-
- { {ACTION_WALK, 0x25, 0, 0}, &Room::demon1WalkToCave },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon1TouchedTopWarp },
- { {ACTION_TOUCHED_WARP, 0, 0, 0}, &Room::demon1TouchedTopWarp },
- { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::demon1TouchedBottomWarp },
-
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::demon1Timer2Expired },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon1Timer0Expired },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon1Timer3Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon1Timer1Expired },
-
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon1KlingonFinishedAimingWeapon },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon1KirkShot },
-
- { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::demon1UsePhaserOnAnything },
- { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::demon1UsePhaserOnAnything },
-
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon1UsePhaserOnKlingon1 },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon1UsePhaserOnKlingon1 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon1ShootKlingon1 },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::demon1KlingonDropsHand },
-
- { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::demon1UsePhaserOnKlingon2 },
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::demon1UsePhaserOnKlingon2 },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon1ShootKlingon2 },
-
- { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::demon1UsePhaserOnKlingon3 },
- { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::demon1UsePhaserOnKlingon3 },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon1ShootKlingon3 },
-
- { {ACTION_TIMER_EXPIRED, 6, 0, 0}, &Room::demon1AllKlingonsDead },
- { {ACTION_TIMER_EXPIRED, 5, 0, 0}, &Room::demon1Timer5Expired },
-
- { {ACTION_USE, OBJECT_IMTRICOR, 13, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon1UseSTricorderOnTulips },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon1UseSTricorderOnPods },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon1UseSTricorderOnCattails },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon1UseSTricorderOnFerns },
- { {ACTION_USE, OBJECT_ISTRICOR, 13, 0}, &Room::demon1UseSTricorderOnHand },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon1UseSTricorderOnKlingon1 },
- { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 },
- { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_IMEDKIT, 10, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon1UseMTricorderOnKlingon },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon1UseSTricorderOnKlingon2Or3 }, // This is redundant
-
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::demon1UseMTricorderOnKirk },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::demon1UseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::demon1UseMTricorderOnRedshirt },
-
- { {ACTION_GET, 13, 0, 0}, &Room::demon1GetHand },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon1ReachedHand },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::demon1PickedUpHand },
- { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::demon1FinishedGettingHand },
-
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon1LookAtKlingon },
- { {ACTION_LOOK, 9, 0, 0}, &Room::demon1LookAtKlingon },
- { {ACTION_LOOK, 10, 0, 0}, &Room::demon1LookAtKlingon },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon1LookAtCattails },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon1LookAtTulips },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon1LookAtPods },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon1LookAtFerns },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon1LookAtStream },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon1LookAtMine },
- { {ACTION_LOOK, 0x26, 0, 0}, &Room::demon1LookAtMountain },
- { {ACTION_LOOK, 13, 0, 0}, &Room::demon1LookAtHand },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon1LookAnywhere },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon1LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon1LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon1LookAtMcCoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon1LookAtRedshirt },
-
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon1TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon1TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon1TalkToMcCoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon1TalkToRedshirt },
-};
-
-RoomAction demon2ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon2Tick1 },
- { {ACTION_WALK, 0x27, 0, 0}, &Room::demon2WalkToCave },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon2ReachedCave },
- { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::demon2TouchedWarp1 },
-
- { {ACTION_LOOK, 0x27, 0, 0}, &Room::demon2LookAtCave },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon2LookAtCave },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon2LookAtMountain },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon2LookAtMountain },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon2LookAtBerries },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon2LookAtFern },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon2LookAtMoss },
- { {ACTION_LOOK, 0x26, 0, 0}, &Room::demon2LookAtLights },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon2LookAtAnything },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon2LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon2LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon2LookAtMcCoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon2LookAtRedshirt },
-
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon2TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon2TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon2TalkToMcCoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon2TalkToRedshirt },
-
- { {ACTION_USE, OBJECT_IPHASERK, 0x23, 0}, &Room::demon2UsePhaserOnBerries },
- { {ACTION_USE, OBJECT_IPHASERS, 0x23, 0}, &Room::demon2UsePhaserOnBerries },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon2UseSTricorderOnBerries },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::demon2UseSTricorderOnMoss },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x24, 0}, &Room::demon2UseSTricorderOnFern },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon2UseSTricorderOnCave },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon2UseSTricorderOnCave },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon2UseSTricorderOnCave },
-
- { {ACTION_USE, OBJECT_IMTRICOR, 0x23, 0}, &Room::demon2UseMTricorderOnBerries },
- { {ACTION_GET, 0x23, 0, 0}, &Room::demon2GetBerries },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon2ReachedBerries },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon2PickedUpBerries },
-};
-
-RoomAction demon3ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon3Tick1 },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon3Timer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon3Timer1Expired },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon3Timer3Expired },
-
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon3FinishedAnimation1 },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon3FinishedAnimation2 },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon3FinishedWalking5 },
-
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon3McCoyInFiringPosition },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon3SpockInFiringPosition },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon3RedShirtInFiringPosition },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon3KirkInFiringPosition },
-
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon3FireAtBoulder },
-
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_REDSHIRT, 0}, &Room::demon3UsePhaserOnRedshirt },
- { {ACTION_USE, OBJECT_IPHASERK, OBJECT_REDSHIRT, 0}, &Room::demon3UsePhaserOnRedshirt },
-
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::demon3UseStunPhaserOnBoulder },
- { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::demon3UseStunPhaserOnBoulder },
- { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::demon3UseStunPhaserOnBoulder },
- { {ACTION_USE, OBJECT_IPHASERS, 12, 0}, &Room::demon3UseStunPhaserOnBoulder },
-
- { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::demon3UsePhaserOnBoulder1 },
- { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::demon3UsePhaserOnBoulder2 },
- { {ACTION_USE, OBJECT_IPHASERK, 11, 0}, &Room::demon3UsePhaserOnBoulder3 },
- { {ACTION_USE, OBJECT_IPHASERK, 12, 0}, &Room::demon3UsePhaserOnBoulder4 },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 13, 0}, &Room::demon3UseSTricorderOnMiner },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon3UseSTricorderOnPanel },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon3UseSTricorderOnBoulder },
- { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon3UseSTricorderOnBoulder },
- { {ACTION_USE, OBJECT_ISTRICOR, 11, 0}, &Room::demon3UseSTricorderOnBoulder },
- { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::demon3UseSTricorderOnBoulder },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon3UseMTricorderOnBoulder },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon3UseMTricorderOnBoulder },
- { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::demon3UseMTricorderOnBoulder },
- { {ACTION_USE, OBJECT_IMTRICOR, 12, 0}, &Room::demon3UseMTricorderOnBoulder },
-
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::demon3UseCrewmanOnPanel },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::demon3UseRedshirtOnPanel },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::demon3RedshirtReachedPanel },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon3RedshirtUsedPanel },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon3RedshirtElectrocuted },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon3UseSTricorderOnDoor },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon3UseSTricorderOnAnything },
- { {ACTION_USE, OBJECT_IMTRICOR, 14, 0}, &Room::demon3UseMTricorderOnDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::demon3UseMTricorderOnDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::demon3UseMTricorderOnDoor },
- { {ACTION_USE, OBJECT_IPHASERS, 14, 0}, &Room::demon3UsePhaserOnDoor },
- { {ACTION_USE, OBJECT_IPHASERK, 14, 0}, &Room::demon3UsePhaserOnDoor },
- { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::demon3UsePhaserOnDoor },
- { {ACTION_USE, OBJECT_IPHASERK, 0x21, 0}, &Room::demon3UsePhaserOnDoor },
-
- { {ACTION_USE, OBJECT_IHAND, 0x20, 0}, &Room::demon3UseHandOnPanel },
- { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::demon3KirkReachedHandPanel },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::demon3KirkUsedHandPanel },
-
- { {ACTION_USE, OBJECT_IMTRICOR, 13, 0}, &Room::demon3UseMTricorderOnMiner },
- { {ACTION_USE, OBJECT_MCCOY, 13, 0}, &Room::demon3UseMedkitOnMiner },
- { {ACTION_USE, OBJECT_IMEDKIT, 13, 0}, &Room::demon3UseMedkitOnMiner },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::demon3McCoyReachedMiner },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::demon3McCoyFinishedHealingMiner },
-
- { {ACTION_GET, 13, 0, 0}, &Room::demon3GetMiner },
- { {ACTION_TALK, 13, 0, 0}, &Room::demon3TalkToMiner },
-
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon3TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon3TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon3TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon3TalkToRedshirt },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon3LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon3LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon3LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon3LookAtRedshirt },
-
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon3LookAnywhere },
- { {ACTION_LOOK, 13, 0, 0}, &Room::demon3LookAtMiner },
- { {ACTION_LOOK, 9, 0, 0}, &Room::demon3LookAtBoulder1 },
- { {ACTION_LOOK, 10, 0, 0}, &Room::demon3LookAtBoulder2 },
- { {ACTION_LOOK, 11, 0, 0}, &Room::demon3LookAtBoulder3 },
- { {ACTION_LOOK, 12, 0, 0}, &Room::demon3LookAtBoulder4 },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon3LookAtStructure },
- { {ACTION_LOOK, 14, 0, 0}, &Room::demon3LookAtDoor },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon3LookAtDoor },
- { {ACTION_LOOK, 15, 0, 0}, &Room::demon3LookAtPanel },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon3LookAtPanel },
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon3LookAtLight },
-
-};
-
-RoomAction demon4ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon4Tick1 },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon4FinishedAnimation1 },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon4FinishedAnimation2 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon4FinishedAnimation3 },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::demon4Timer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::demon4Timer1Expired },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon4CrewmanReachedBeamoutPosition },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::demon4Timer2Expired },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::demon4Timer3Expired },
- { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::demon4Timer4Expired },
- { {ACTION_TIMER_EXPIRED, 5, 0, 0}, &Room::demon4Timer5Expired },
- { {ACTION_TIMER_EXPIRED, 6, 0, 0}, &Room::demon4Timer6Expired },
-
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon4UsePhaserOnNauian },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon4UsePhaserOnNauian },
- { {ACTION_USE, OBJECT_IMETAL, 0x22, 0}, &Room::demon4UseMetalOnSecurityEquipment },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon4KirkReachedSecurityEquipment },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::demon4KirkFinishedUsingSecurityEquipment },
- { {ACTION_USE, OBJECT_IMETAL, 8, 0}, &Room::demon4UseMetalOnNauian },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon4KirkReachedNauian },
- { {ACTION_USE, OBJECT_ISKULL, 8, 0}, &Room::demon4UseSkullOnNauian },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon4KirkReachedNauianWithSkull },
-
- { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::demon4UsePhaserOnPanel },
- { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::demon4UsePhaserOnPattern },
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::demon4UsePhaserOnMccoy },
-
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::demon4TalkToNauian },
- { {ACTION_TALK, 8, 0, 0}, &Room::demon4TalkToNauian },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon4LookAtPattern },
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon4LookAtAlien },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon4LookAnywhere },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon4LookAtSecurityEquipment },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon4LookAtFloor },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon4LookAtKirk },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon4LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon4LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon4LookAtRedshirt },
-
- { {ACTION_LOOK, 10, 0, 0}, &Room::demon4LookAtChamber },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon4LookAtPanel },
-
- { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::demon4UseKirkOnPanel },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::demon4UseSpockOnPanel },
- { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::demon4UseMccoyOnPanel },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::demon4UseRedshirtOnPanel },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon4CrewmanReachedPanel },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon4TalkToKirk },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon4TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon4TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon4TalkToRedshirt },
- { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::demon4UseSTricorderOnChamber },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon4UseSTricorderOnPattern },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::demon4UseMTricorderOnPattern },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon4UseSTricorderOnPanel },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::demon4UseMTricorderOnPanel },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon4UseSTricorderOnAnything },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::demon4UseSTricorderOnAnything },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x23, 0}, &Room::demon4UseMTricorderOnAnything },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::demon4UseMTricorderOnAnything },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::demon4UseSTricorderOnNauian },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon4UseMTricorderOnNauian },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::demon4UseSTricorderOnSecurityEquipment },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::demon4UseMTricorderOnSecurityEquipment },
-};
-
-RoomAction demon5ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon5Tick1 },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::demon5WalkToDoor },
- { {ACTION_WALK, 12, 0, 0}, &Room::demon5WalkToDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon5TouchedDoorOpenTrigger },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon5DoorOpenedOrReachedDoor },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon5DoorOpenedOrReachedDoor },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon5UseSTricorderOnCrate },
- { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::demon5UsePhaserOnAnything },
- { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::demon5UsePhaserOnAnything },
-
- { {ACTION_USE, OBJECT_IHAND, 11, 0}, &Room::demon5UseHandOnStephen },
- { {ACTION_USE, OBJECT_IBERRY, 11, 0}, &Room::demon5UseBerryOnStephen },
- { {ACTION_USE, OBJECT_IDETOXIN, 9, 0}, &Room::demon5UseHypoDytoxinOnChub },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon5MccoyReachedChub },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon5MccoyHealedChub },
-
- { {ACTION_USE, OBJECT_IDETOXIN, 0xff, 0}, &Room::demon5UseHypoDytoxinOnAnything },
- { {ACTION_USE, OBJECT_IBERRY, 9, 0}, &Room::demon5UseBerryOnChub },
-
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon5LookAtRoberts },
- { {ACTION_LOOK, 10, 0, 0}, &Room::demon5LookAtGrisnash },
- { {ACTION_LOOK, 11, 0, 0}, &Room::demon5LookAtStephen },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon5LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon5LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon5LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon5LookAtRedshirt },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon5LookAtMountain },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon5LookAtCrate },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon5LookAnywhere },
- { {ACTION_LOOK, 9, 0, 0}, &Room::demon5LookAtChub },
-
- { {ACTION_TALK, 8, 0, 0}, &Room::demon5TalkToRoberts },
- { {ACTION_TALK, 9, 0, 0}, &Room::demon5TalkToChub },
- { {ACTION_TALK, 10, 0, 0}, &Room::demon5TalkToGrisnash },
- { {ACTION_TALK, 11, 0, 0}, &Room::demon5TalkToStephen },
-
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon5TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon5TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon5TalkToRedshirt },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon5TalkToMccoy },
-
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon5UseMTricorderOnRoberts },
- { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::demon5UseMTricorderOnChub },
- { {ACTION_USE, OBJECT_MCCOY, 9, 0}, &Room::demon5UseMTricorderOnChub },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::demon5UseMTricorderOnChub },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::demon5UseMTricorderOnGrisnash },
- { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::demon5UseMTricorderOnStephen },
-
- { {ACTION_GET, 0x21, 0, 0}, &Room::demon5GetCrate },
-};
-
-RoomAction demon6ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::demon6Tick1 },
- { {ACTION_TICK, 30, 0, 0}, &Room::demon6Tick30 },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::demon6SpockReachedComputer },
-
- { {ACTION_WALK, 0x26, 0, 0}, &Room::demon6WalkToDoor },
- { {ACTION_WALK, 10, 0, 0}, &Room::demon6WalkToDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::demon6TouchedDoorOpenTrigger },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::demon6DoorOpenedOrReachedDoor },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::demon6DoorOpenedOrReachedDoor },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::demon6UsePhaserOnStephen },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::demon6UsePhaserOnStephen },
- { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::demon6UsePhaserOnCase },
- { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::demon6UsePhaserOnCase },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::demon6LookAtWorkspace },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::demon6LookAtCase },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::demon6LookAtTable },
- { {ACTION_LOOK, OBJECT_IMINERAL, 0, 0}, &Room::demon6LookAtMineral },
- { {ACTION_LOOK, OBJECT_ISHELLS, 0, 0}, &Room::demon6LookAtShells },
- { {ACTION_LOOK, OBJECT_ISKULL, 0, 0}, &Room::demon6LookAtSkull },
- { {ACTION_LOOK, OBJECT_IMETAL, 0, 0}, &Room::demon6LookAtMetal },
- { {ACTION_LOOK, OBJECT_IMETEOR, 0, 0}, &Room::demon6LookAtMeteor },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::demon6LookAtMountain },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::demon6LookAtSynthesizer },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::demon6LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::demon6LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::demon6LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::demon6LookAtRedshirt },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::demon6LookAtComputer },
- { {ACTION_LOOK, 9, 0, 0}, &Room::demon6LookAtComputer },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::demon6LookAnywhere },
- { {ACTION_LOOK, 8, 0, 0}, &Room::demon6LookAtStephen },
-
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::demon6TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::demon6TalkToSpock },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::demon6TalkToKirk },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::demon6TalkToRedshirt },
- { {ACTION_TALK, 8, 0, 0}, &Room::demon6TalkToStephen },
- { {ACTION_USE, OBJECT_IBERRY, 8, 0}, &Room::demon6UseBerryOnStephen },
- { {ACTION_USE, OBJECT_IBERRY, 0x23, 0}, &Room::demon6UseBerryOnSynthesizer },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::demon6MccoyReachedSynthesizer },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::demon6FinishedMakingHypoDytoxin },
- { {ACTION_USE, OBJECT_IHAND, 0x22, 0}, &Room::demon6UseHandOnWorkspace },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::demon6SpockReachedWorkspace },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::demon6SpockFinishedRepairingHand },
- { {ACTION_USE, 0xff, 0x22, 0}, &Room::demon6UseAnythingOnWorkspace },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::demon6UseCrewmanOnCase },
-
- { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::demon6UseKirkOnComputer },
- { {ACTION_USE, OBJECT_KIRK, 9, 0}, &Room::demon6UseKirkOnComputer },
- { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::demon6UseMccoyOnComputer },
- { {ACTION_USE, OBJECT_MCCOY, 9, 0}, &Room::demon6UseMccoyOnComputer },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::demon6UseRedshirtOnComputer },
- { {ACTION_USE, OBJECT_REDSHIRT, 9, 0}, &Room::demon6UseRedshirtOnComputer },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::demon6UseSpockOnComputer },
- { {ACTION_USE, OBJECT_SPOCK, 9, 0}, &Room::demon6UseSpockOnComputer },
- { {ACTION_USE, OBJECT_IMINERAL, 8, 0}, &Room::demon6UseMineralOnStephen },
- { {ACTION_USE, OBJECT_ISHELLS, 8, 0}, &Room::demon6UseShellsOnStephen },
- { {ACTION_USE, OBJECT_IMETEOR, 8, 0}, &Room::demon6UseMeteorOnStephen },
- { {ACTION_USE, OBJECT_ISKULL, 8, 0}, &Room::demon6UseSkullOnStephen },
- { {ACTION_USE, OBJECT_IMETAL, 8, 0}, &Room::demon6UseMetalOnStephen },
- { {ACTION_USE, OBJECT_IHAND, 8, 0}, &Room::demon6UseHandOnStephen },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon6UseMTricoderOnStephen },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::demon6UseSTricoderOnTable },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::demon6UseSTricoderOnComputer },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::demon6UseSTricoderOnComputer },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMINERAL, 0}, &Room::demon6UseSTricoderOnMineral },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISHELLS, 0}, &Room::demon6UseSTricoderOnShells },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISKULL, 0}, &Room::demon6UseSTricoderOnSkull },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETAL, 0}, &Room::demon6UseSTricoderOnMetal },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETEOR, 0}, &Room::demon6UseSTricoderOnMeteor },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::demon6UseSTricoderOnCase },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::demon6UseSTricoderOnSynthesizer },
- { {ACTION_GET, 0x20, 0, 0}, &Room::demon6GetCase },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::demon6KirkReachedCase },
-};
-
-
-RoomAction tug0ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::tug0Tick1 },
- { {ACTION_LOOK, 8, 0, 0}, &Room::tug0LookAtEngineer },
- { {ACTION_GET, 8, 0, 0}, &Room::tug0GetEngineer },
-
- { {ACTION_LOOK, 11, 0, 0}, &Room::tug0LookAtControls },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug0LookAtControls },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::tug0UseSpockOnControls },
- { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::tug0SpockReachedControlsToExamine },
- { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::tug0SpockExaminedControls },
- { {ACTION_USE, OBJECT_IRT, 0x21, 0}, &Room::tug0UseTransmogrifierWithoutBitOnControls },
- { {ACTION_USE, OBJECT_IRTWB, 0x21, 0}, &Room::tug0UseTransmogrifierWithBitOnControls },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug0SpockReachedControlsWithTransmogrifier },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug0SpockFinishedUsingTransmogrifier },
- { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::tug0TransporterScreenFullyLit },
- { {ACTION_USE, OBJECT_IWIRSCRP, 0x21, 0}, &Room::tug0UseWireScrapsOnControls },
- { {ACTION_USE, OBJECT_IWIRING, 0x21, 0}, &Room::tug0UseWireOnControls },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug0SpockReachedControlsWithWire },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::tug0SpockFinishedUsingWire },
- { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::tug0UseMedkitOnEngineer },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::tug0MccoyReachedEngineer },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug0MccoyHealedEngineer },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::tug0EngineerGotUp },
- { {ACTION_GET, 9, 0, 0}, &Room::tug0GetTransmogrifier },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::tug0KirkReachedToolbox },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug0KirkGotTransmogrifier },
- { {ACTION_LOOK, 9, 0, 0}, &Room::tug0LookAtToolbox },
-
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug0UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug0UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug0UseWelderOnWireScraps },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug0UseWelderOnMetalScraps },
- { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug0UseCombBitOnTransmogrifier },
-
- { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::tug0UseTransporter },
- { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::tug0UseTransporter },
- { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::tug0SpockReachedControlsToTransport },
- { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::tug0SpockPreparedTransporter },
- { {ACTION_FINISHED_WALKING, 20, 0, 0}, &Room::tug0SpockReachedTransporter },
- { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::tug0FinishedTransporting },
-
- { {ACTION_USE, OBJECT_IBOMB, 0x22, 0}, &Room::tug0UseBombOnTransporter },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::tug0KirkReachedTransporter },
- { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::tug0KirkPlacedBomb },
- { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::tug0SpockReachedControlsForBomb },
- { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::tug0SpockBeginsBeamingBomb },
- { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::tug0SpockFinishesBeamingBomb },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug0BombExploded },
-
- { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::tug0UseMTricorderOnControls },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::tug0UseMTricorderOnControls },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::tug0UseSTricorderOnControls },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::tug0UseMTricorderOnEngineer },
- { {ACTION_FINISHED_WALKING, 24, 0, 0}, &Room::tug0MccoyReachedEngineerToScan },
- { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::tug0MccoyFinishedScanningEngineer },
- { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::tug0UseSTricorderOnEngineer },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::tug0UseSTricorderOnEngineer },
- { {ACTION_WALK, 0x23, 0, 0}, &Room::tug0WalkToDoor },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::tug0LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug0LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug0LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug0LookAtRedshirt },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::tug0LookAtTransporter },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::tug0LookAtDoor },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug0TalkToKirk },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug0TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug0TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug0TalkToRedshirt },
- { {ACTION_TALK, 8, 0, 0}, &Room::tug0TalkToEngineer },
- { {ACTION_USE, OBJECT_ICOMM, 0, 0}, &Room::tug0UseCommunicator },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug0LookAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::tug0UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::tug0UseMTricorderAnywhere },
-};
-
-
-RoomAction tug1ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::tug1Tick1 },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::tug1UseSTricorderOnAnything },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug1LookAtBridgeDoor },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::tug1UseSTricorderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::tug1UsePhaserOnBridgeDoor },
- { {ACTION_USE, OBJECT_IPHASERK, 0x21, 0}, &Room::tug1UsePhaserOnBridgeDoor },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::tug1KirkReachedFiringPosition },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug1KirkPulledOutPhaser },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::tug1KirkFinishedFiringPhaser },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug1TalkToSpock },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::tug1UseSTricorderOnJunkPile },
- { {ACTION_LOOK, 8, 0, 0}, &Room::tug1LookAtJunkPile },
- { {ACTION_GET, 8, 0, 0}, &Room::tug1GetJunkPile },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::tug1KirkReachedJunkPile },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::tug1KirkFinishedTakingJunkPile },
-
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug1UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug1UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug1UseWelderOnWireScraps },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug1UseWelderOnMetalScraps },
- { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug1UseCombBitOnTransmogrifier },
-
- { {ACTION_USE, OBJECT_IPWF, 0x22, 0}, &Room::tug1UsePhaserWelderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IPWF, 0x21, 0}, &Room::tug1UsePhaserWelderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IPWF, 0x20, 0}, &Room::tug1UsePhaserWelderOnBridgeDoorInLeftSpot },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug1KirkReachedBridgeDoorWithWelder },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug1KirkFinishedUsingWelder },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug1KirkReachedBridgeDoorWithWelderInLeftSpot },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::tug1KirkFinishedUsingWelderInLeftSpot },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug1LookAnywhere },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug1LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug1LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug1LookAtRedshirt },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug1TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug1TalkToRedshirt },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::tug1LookAtTerminal },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::tug1LookAtDebris },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::tug1LookAtBrigDoor },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::tug1UseSTricorderOnBrigDoor },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug1TalkToKirk },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::tug1UseCommunicator },
- { {ACTION_WALK, 0x21, 0, 0}, &Room::tug1WalkToBridgeDoor },
- { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::tug1KirkReachedBridgeDoor },
- { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::tug1BridgeDoorOpened },
- { {ACTION_WALK, 0x25, 0, 0}, &Room::tug1WalkToBrigDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::tug1UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x25, 0}, &Room::tug1UseMTricorderOnBrigDoor },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::tug1UseSpockOnBridgeDoor },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::tug1UseSpockOnBridgeDoor },
- { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::tug1UseSpockOnBridgeDoor },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMEDKIT, 0x20, 0}, &Room::tug1UseMedkitOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMEDKIT, 0x21, 0}, &Room::tug1UseMedkitOnBridgeDoor },
- { {ACTION_USE, OBJECT_IMEDKIT, 0x22, 0}, &Room::tug1UseMedkitOnBridgeDoor },
-};
-
-
-RoomAction tug2ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::tug2Tick1 },
- { {ACTION_TICK, 60, 0, 0}, &Room::tug2Tick60 },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::tug2LookAtButton },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug2LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug2LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug2LookAtRedshirt },
- { {ACTION_GET, 11, 0, 0}, &Room::tug2GetBomb },
- { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::tug2KirkReachedBomb },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug2KirkGotBomb },
- { {ACTION_LOOK, 11, 0, 0}, &Room::tug2LookAtBomb },
- { {ACTION_LOOK, 8, 0, 0}, &Room::tug2LookAtGuard1 },
- { {ACTION_LOOK, 9, 0, 0}, &Room::tug2LookAtGuard2 },
- { {ACTION_LOOK, 12, 0, 0}, &Room::tug2LookAtWires },
- { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::tug2UseSTricorderOnButton },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::tug2UseSTricorderOnButton },
- { {ACTION_USE, OBJECT_MCCOY, 12, 0}, &Room::tug2UseMccoyOnWires },
- { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::tug2UseMccoyOnBomb },
- { {ACTION_USE, OBJECT_REDSHIRT, 12, 0}, &Room::tug2UseRedshirtOnWires },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug2RedshirtReachedWires },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug2RedshirtDefusedBomb },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug2RedshirtReturnedToPosition },
- { {ACTION_USE, OBJECT_KIRK, 12, 0}, &Room::tug2UseKirkOnWires },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::tug2KirkReachedWires },
- { {ACTION_USE, OBJECT_SPOCK, 12, 0}, &Room::tug2UseSpockOnWires },
- { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::tug2SpockReachedWires },
- { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::tug2SpockReturnedToPosition },
- { {ACTION_GET, 12, 0, 0}, &Room::tug2GetWires },
- { {ACTION_FINISHED_WALKING, 28, 0, 0}, &Room::tug2KirkReachedWiresToGet },
- { {ACTION_FINISHED_ANIMATION, 29, 0, 0}, &Room::tug2KirkGotWires },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::tug2UseKirkOnButton },
- { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::tug2KirkReachedButton },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::tug2UseSpockOnButton },
- { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::tug2SpockReachedButton },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::tug2UseMccoyOnButton },
- { {ACTION_FINISHED_WALKING, 18, 0, 0}, &Room::tug2MccoyReachedButton },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::tug2UseRedshirtOnButton },
- { {ACTION_FINISHED_WALKING, 20, 0, 0}, &Room::tug2RedshirtReachedButton },
- { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::tug2TurnedOffForceField },
- { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::tug2TurnedOffForceField },
- { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::tug2TurnedOffForceField },
- { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::tug2TurnedOffForceField },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::tug2PrisonersDead },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::tug2PrisonersReleased },
- { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::tug2UsePhaserOnBrig },
- { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::tug2UsePhaserOnBrig },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::tug2UseStunPhaserOnGuard1 },
- { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::tug2KirkShootGuard1 },
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::tug2UseStunPhaserOnGuard2 },
- { {ACTION_FINISHED_ANIMATION, 23, 0, 0}, &Room::tug2KirkShootGuard2 },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::tug2UseKillPhaserOnGuard1 },
- { {ACTION_FINISHED_ANIMATION, 24, 0, 0}, &Room::tug2KirkKillGuard1 },
- { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::tug2UseKillPhaserOnGuard2 },
- { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::tug2KirkKillGuard2 },
-
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug2UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug2UsePhaserOnWelder },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug2UseWelderOnWireScraps },
- { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug2UseWelderOnMetalScraps },
- { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug2UseCombBitOnTransmogrifier },
-
- { {ACTION_FINISHED_ANIMATION, 26, 0, 0}, &Room::tug2ShotByElasi },
- { {ACTION_FINISHED_ANIMATION, 27, 0, 0}, &Room::tug2ShotByElasi },
- { {ACTION_WALK, 0x21, 0, 0}, &Room::tug2WalkToDoor },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug2LookAtDoor },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::tug2LookAtKirk },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug2TalkToKirk },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug2TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug2TalkToRedshirt },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug2TalkToSpock },
- { {ACTION_USE, OBJECT_ICOMM, 0, 0}, &Room::tug2UseCommunicator },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug2Timer0Expired },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::tug2Timer2Expired },
- { {ACTION_USE, OBJECT_ISTRICOR, 11, 0}, &Room::tug2UseSTricorderOnBomb },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::tug2UseMTricorderOnGuard1 },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::tug2UseMTricorderOnGuard2 },
- { {ACTION_TALK, 8, 0, 0}, &Room::tug2TalkToGuard1 },
- { {ACTION_TALK, 9, 0, 0}, &Room::tug2TalkToGuard2 },
- { {ACTION_USE, OBJECT_IMEDKIT, 11, 0}, &Room::tug2UseMedkitOnBomb },
- { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::tug2UseMedkitOnGuard1 },
- { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::tug2UseMedkitOnGuard2 },
- { {ACTION_LOOK, 10, 0, 0}, &Room::tug2LookAnywhere },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::tug2LookAnywhere },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug2LookAnywhere },
- { {ACTION_TALK, 10, 0, 0}, &Room::tug2TalkToBrig },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::tug2UseMTricorderOnBrig },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::tug2UseMTricorderOnOpenBrig },
- { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::tug2UsePhaserAnywhere },
- { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::tug2UsePhaserAnywhere },
-};
-
-RoomAction tug3ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::tug3Tick1 },
- { {ACTION_TICK, 40, 0, 0}, &Room::tug3Tick40 },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug3LookAnywhere },
- { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::tug3UsePhaserAnywhere },
- { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::tug3UsePhaserAnywhere },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::tug3UseStunPhaserOnElasi1 },
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::tug3UseStunPhaserOnElasi2 },
- { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::tug3UseStunPhaserOnElasi3 },
- { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::tug3UseStunPhaserOnElasi4 },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::tug3UseKillPhaserOnElasi1 },
- { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::tug3UseKillPhaserOnElasi2 },
- { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::tug3UseKillPhaserOnElasi3 },
- { {ACTION_USE, OBJECT_IPHASERK, 11, 0}, &Room::tug3UseKillPhaserOnElasi4 },
- { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::tug3ElasiStunnedOrKilled },
- { {ACTION_TALK, 8, 0, 0}, &Room::tug3TalkToElasi1 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::tug3Elasi1DrewPhaser },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug3Elasi1ShotConsole },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::tug3Elasi1DrewPhaser2 },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::tug3Elasi1ShotConsoleAndSurrenders },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug3LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug3LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug3LookAtRedshirt },
- { {ACTION_LOOK, 8, 0, 0}, &Room::tug3LookAtElasi1 },
- { {ACTION_LOOK, 9, 0, 0}, &Room::tug3LookAtElasi2 },
- { {ACTION_LOOK, 10, 0, 0}, &Room::tug3LookAtElasi3 },
- { {ACTION_LOOK, 11, 0, 0}, &Room::tug3LookAtElasi4 },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug3TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug3TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug3TalkToRedshirt },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::tug3UseCommunicator },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug3Timer0Expired },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug3AllCrewmenDead },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::tug3Timer1Expired },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug3SecurityTeamBeamedIn },
-};
-
-
-RoomAction love0ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love0Tick1 },
- { {ACTION_TICK, 10, 0, 0}, &Room::love0Tick10 },
- { {ACTION_WALK, 0x21, 0, 0}, &Room::love0WalkToDoor2 },
- { {ACTION_WALK, 9, 0, 0}, &Room::love0WalkToDoor2 },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love0OpenDoor2 },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love0ReachedDoor2 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love0ReachedDoor2 },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::love0WalkToDoor1 },
- { {ACTION_WALK, 8, 0, 0}, &Room::love0WalkToDoor1 },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::love0OpenDoor1 },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love0ReachedDoor1 },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love0ReachedDoor1 },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::love0LookAtConsole },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::love0LookAtViewscreen },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love0LookAnywhere },
- { {ACTION_LOOK, 8, 0, 0}, &Room::love0LookAtDoor1 },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love0LookAtDoor2 },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love0LookAtKirk },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love0LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love0LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love0LookAtRedshirt },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love0TalkToKirk },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love0TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love0TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love0TalkToRedshirt },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love0UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::love0UseSTricorderOnConsole },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love0UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love0UseKirkOnConsole },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love0UseRedshirtOnConsole },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love0UseSpockOnConsole },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love0SpockReachedConsole },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love0SpockAccessedConsole },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love0UseMccoyOnConsole },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love0MccoyReachedConsole },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love0MccoyAccessedConsole },
- { {ACTION_GET, 8, 0, 0}, &Room::love0GetDoorOrConsole },
- { {ACTION_GET, 9, 0, 0}, &Room::love0GetDoorOrConsole },
- { {ACTION_GET, 0x20, 0, 0}, &Room::love0GetDoorOrConsole },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction love1ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love1Tick1 },
-
- { {ACTION_WALK, 10, 0, 0}, &Room::love1WalkToDoor3 },
- { {ACTION_WALK, 0x26, 0, 0}, &Room::love1WalkToDoor3 },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::love1OpenDoor3 },
- { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::love1ReachedDoor3 },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love1ReachedDoor3 },
-
- { {ACTION_WALK, 8, 0, 0}, &Room::love1WalkToDoor1 },
- { {ACTION_WALK, 0x27, 0, 0}, &Room::love1WalkToDoor1 },
- { {ACTION_TOUCHED_HOTSPOT, 2, 0, 0}, &Room::love1OpenDoor1 },
- { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::love1ReachedDoor1 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love1ReachedDoor1 },
-
- { {ACTION_WALK, 9, 0, 0}, &Room::love1WalkToDoor2 },
- { {ACTION_WALK, 0x28, 0, 0}, &Room::love1WalkToDoor2 },
- { {ACTION_TOUCHED_HOTSPOT, 3, 0, 0}, &Room::love1OpenDoor2 },
- { {ACTION_FINISHED_WALKING, 17, 0, 0}, &Room::love1ReachedDoor2 },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love1ReachedDoor2 },
-
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::love1LookAtLaser },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love1LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love1LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love1LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love1LookAtRedshirt },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love1LookAnywhere },
- { {ACTION_LOOK, 15, 0, 0}, &Room::love1LookAtNozzle },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::love1LookAtNozzle },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::love1LookAtLadder },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love1LookAtDoor1Or2 },
- { {ACTION_LOOK, 8, 0, 0}, &Room::love1LookAtDoor1Or2 },
- { {ACTION_LOOK, 10, 0, 0}, &Room::love1LookAtDoor3 },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::love1LookAtDistillator },
- { {ACTION_LOOK, 14, 0, 0}, &Room::love1LookAtChamber },
- { {ACTION_LOOK, 12, 0, 0}, &Room::love1LookAtChamber },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::love1LookAtReplicator },
- { {ACTION_LOOK, 11, 0, 0}, &Room::love1LookAtFreezer },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::love1LookAtFreezer },
- { {ACTION_LOOK, OBJECT_IDISHES, 0, 0}, &Room::love1LookAtDishes },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love1TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love1TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love1TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love1TalkToRedshirt },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_IDISHES, 0}, &Room::love1UseMTricorderOnDishes },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love1UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::love1UseSTricorderOnReplicator },
- { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::love1UseSTricorderOnReplicator },
- { {ACTION_USE, OBJECT_SPOCK, 0x25, 0}, &Room::love1UseSTricorderOnLaser },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::love1UseSTricorderOnLaser },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::love1UseSTricorderOnFreezer },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love1UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IDISHES, 0}, &Room::love1UseSTricorderOnDishes },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::love1UseSTricorderOnDistillator },
- { {ACTION_GET, 11, 0, 0}, &Room::love1GetFreezer },
- { {ACTION_GET, 0x22, 0, 0}, &Room::love1GetFreezer },
- { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love1KirkReachedFreezer },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love1KirkGotVirusCulture },
- { {ACTION_GET, 14, 0, 0}, &Room::love1GetFromChamber },
- { {ACTION_GET, 12, 0, 0}, &Room::love1GetFromChamber },
- { {ACTION_GET, 0x23, 0, 0}, &Room::love1GetFromChamber },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love1KirkReachedChamber },
- { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love1KirkGotCureSample },
- { {ACTION_GET, 15, 0, 0}, &Room::love1GetFromNozzle },
- { {ACTION_GET, 0x24, 0, 0}, &Room::love1GetFromNozzle },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love1KirkReachedNozzleToGet },
- { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love1KirkGotBottleFromNozzle },
- { {ACTION_USE, OBJECT_IN2O, 0x24, 0}, &Room::love1UseN2OOnNozzle },
- { {ACTION_USE, OBJECT_IH2O, 0x24, 0}, &Room::love1UseH2OOnNozzle },
- { {ACTION_USE, OBJECT_INH3, 0x24, 0}, &Room::love1UseNH3OnNozzle },
- { {ACTION_USE, OBJECT_IRLG, 0x24, 0}, &Room::love1UseRLGOnNozzle },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love1KirkReachedNozzleToPut },
- { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love1KirkPutBottleInNozzle },
- { {ACTION_USE, 0xff, 0x24, 0}, &Room::love1UseAnthingOnNozzle },
- { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::love1UseSpockOnReplicator },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x23, 0}, &Room::love1UseRedshirtOnReplicator },
- { {ACTION_USE, OBJECT_MCCOY, 14, 0}, &Room::love1UseMccoyOnReplicator },
- { {ACTION_USE, OBJECT_MCCOY, 15, 0}, &Room::love1UseMccoyOnReplicator },
- { {ACTION_USE, OBJECT_MCCOY, 0x23, 0}, &Room::love1UseMccoyOnReplicator },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love1MccoyReachedReplicator },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love1MccoyUsedReplicator },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love1ChamberClosed },
- { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love1ChamberOpened },
- { {ACTION_USE, 0xff, 12, 0}, &Room::love1UseAnythingOnChamber },
- { {ACTION_USE, OBJECT_IDISHES, 12, 0}, &Room::love1UseDishesOnChamber },
- { {ACTION_USE, OBJECT_IDISHES, 0x23, 0}, &Room::love1UseDishesOnChamber },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love1KirkReachedChamberToPut },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love1ChamberOpenedForDish },
- { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love1KirkPutDishInChamber },
- { {ACTION_USE, OBJECT_IINSULAT, 0x21, 0}, &Room::love1UseInsulationOnDistillator },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love1KirkReachedDistillator },
- { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::love1KirkGotPolyberylcarbonate },
- { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::love1UseKirkOnFreezer },
- { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love1UseKirkOnFreezer },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::love1UseRedshirtOnFreezer },
- { {ACTION_USE, OBJECT_REDSHIRT, 11, 0}, &Room::love1UseRedshirtOnFreezer },
- { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::love1UseSpockOnFreezer },
- { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::love1UseSpockOnFreezer },
- { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::love1UseMccoyOnFreezer },
- { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::love1UseMccoyOnFreezer },
- { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love1CrewmanReachedFreezer },
- { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::love1CrewmanOpenedOrClosedFreezer },
- { {ACTION_USE, 0xff, 0x22, 0}, &Room::love1UseAnythingOnFreezer },
- { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love1ReachedFreezerWithArbitraryItem },
- { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnFreezer },
- { {ACTION_USE, 0xff, 0x23, 0}, &Room::love1UseAnythingOnReplicator },
- { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love1ReachedReplicatorWithArbitraryItem },
- { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnReplicator },
- { {ACTION_USE, 0xff, 0x21, 0}, &Room::love1UseAnythingOnDistillator },
- { {ACTION_FINISHED_WALKING, 13, 0, 0}, &Room::love1ReachedDistillatorWithArbitraryItem },
- { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnDistillator },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love1UseKirkOnLadder },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love1UseSpockOnLadder },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love1UseMccoyOnLadder },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love1UseRedshirtOnLadder },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love1CrewmanReachedLadder },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love1CrewmanDiedFromPhaser },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love1TouchedHotspot0 },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction love2ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love2Tick1 },
- { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love2TouchedWarp1 },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::love2Timer3Expired },
- { {ACTION_WALK, 10, 0, 0}, &Room::love2WalkToDoor },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::love2WalkToDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love2TouchedHotspot0 },
- { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love2DoorReachedOrOpened },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love2DoorReachedOrOpened },
- { {ACTION_LOOK, 8, 0, 0}, &Room::love2LookAtCabinet },
- { {ACTION_LOOK, 10, 0, 0}, &Room::love2LookAtDoor },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::love2LookAtSynthesizer },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love2LookAtAnywhere },
- { {ACTION_LOOK, 14, 0, 0}, &Room::love2LookAtAntigrav },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love2LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love2LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love2LookAtRedshirt },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love2LookAtKirk },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::love2LookAtArdak },
- { {ACTION_LOOK, 15, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 16, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 18, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 19, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 17, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love2LookAtChamber },
- { {ACTION_LOOK, 12, 0, 0}, &Room::love2LookAtCan1 },
- { {ACTION_LOOK, 13, 0, 0}, &Room::love2LookAtCan2 },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love2TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love2TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love2TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love2TalkToRedshirt },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love2UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love2UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::love2UseKirkOnCabinet },
- { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::love2UseSpockOnCabinet },
- { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::love2UseMccoyOnCabinet },
- { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::love2UseRedshirtOnCabinet },
- { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love2CrewmanReachedCabinet },
- { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love2CrewmanAccessedCabinet },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love2CrewmanOpenedOrClosedCabinet },
- { {ACTION_USE, OBJECT_IWRENCH, 11, 0}, &Room::love2UseWrenchOnGasFeed },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love2ReachedGasFeed },
- { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love2ChangedGasFeed },
- { {ACTION_USE, OBJECT_IO2GAS, 0x23, 0}, &Room::love2UseO2GasOnCanisterSlot },
- { {ACTION_USE, OBJECT_IH2GAS, 0x23, 0}, &Room::love2UseH2GasOnCanisterSlot },
- { {ACTION_USE, OBJECT_IN2GAS, 0x23, 0}, &Room::love2UseN2GasOnCanisterSlot },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love2ReachedCanisterSlot },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love2PutCanisterInSlot1 },
- { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love2PutCanisterInSlot2 },
- { {ACTION_USE, OBJECT_IANTIGRA, 12, 0}, &Room::love2UseAntigravOnCanister1 },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love2ReachedCanisterSlot1ToGet },
- { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::love2TookCanister1 },
- { {ACTION_USE, OBJECT_IANTIGRA, 13, 0}, &Room::love2UseAntigravOnCanister2 },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love2ReachedCanisterSlot2ToGet },
- { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::love2TookCanister2 },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love2UseKirkOnSynthesizer },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love2UseSpockOnSynthesizer },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love2UseMccoyOnSynthesizer },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love2UseRedshirtOnSynthesizer },
- { {ACTION_FINISHED_WALKING, 13, 0, 0}, &Room::love2CrewmanReachedSynthesizer },
- { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::love2CrewmanUsedSynthesizer },
- { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::love2SpockReachedGasFeeds },
- { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::love2SpockEnabledGasFeeds },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love2SynthesizerDoorClosed },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love2SynthesizerFinished },
- { {ACTION_FINISHED_ANIMATION, 27, 0, 0}, &Room::love2ClosedSynthesizerDoorMakingRLG },
- { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love2ClosedSynthesizerDoorMakingCure },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love2CureStartedSynthesizing },
- { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love2CureSynthesized },
- { {ACTION_USE, OBJECT_IPBC, 9, 0}, &Room::love2UsePolyberylcarbonateOnSynthesizerDoor },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love2KirkReachedSynthesizerWithPolyberylcarbonate },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate },
- { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::love2PutPolyberylcarbonateInSynthesizer },
-
- { {ACTION_USE, OBJECT_IDISHES, 9, 0}, &Room::love2UseVirusSampleOnSynthesizerDoor },
- { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love2KirkReachedSynthesizerWithVirusSample },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love2SynthesizerDoorOpenedWithVirusSample },
- { {ACTION_FINISHED_ANIMATION, 20, 0, 0}, &Room::love2PutVirusSampleInSynthesizer },
-
- { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love2UseCureSampleOnSynthesizerDoor },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love2KirkReachedSynthesizerWithCureSample },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love2SynthesizerDoorOpenedWithCureSample },
- { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::love2PutCureSampleInSynthesizer },
-
- { {ACTION_USE, 0xff, 9, 0}, &Room::love2UseAnythingOnSynthesizerDoor },
- { {ACTION_USE, 0xff, 0x20, 0}, &Room::love2UseAnythingOnSynthesizer },
- { {ACTION_GET, 13, 0, 0}, &Room::love2GetCanister },
- { {ACTION_GET, 12, 0, 0}, &Room::love2GetCanister },
-
- { {ACTION_GET, 14, 0, 0}, &Room::love2GetAntigrav },
- { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::love2ReachedAntigrav },
- { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::love2GotAntigrav },
-
- { {ACTION_GET, 16, 0, 0}, &Room::love2GetPolyberylcarbonate },
- { {ACTION_FINISHED_WALKING, 18, 0, 0}, &Room::love2ReachedPolyberylcarbonate },
- { {ACTION_FINISHED_ANIMATION, 26, 0, 0}, &Room::love2GotPolyberylcarbonate },
-
- { {ACTION_GET, 17, 0, 0}, &Room::love2GetDishes },
- { {ACTION_FINISHED_WALKING, 17, 0, 0}, &Room::love2ReachedDishes },
- { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::love2GotDishes },
-
- { {ACTION_GET, 18, 0, 0}, &Room::love2GetSample },
- { {ACTION_FINISHED_WALKING, 19, 0, 0}, &Room::love2ReachedSample },
- { {ACTION_FINISHED_ANIMATION, 28, 0, 0}, &Room::love2GotSample },
-
- { {ACTION_GET, 15, 0, 0}, &Room::love2GetSynthesizerOutput },
- { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::love2ReachedSynthesizerOutput },
- { {ACTION_FINISHED_ANIMATION, 23, 0, 0}, &Room::love2GotSynthesizerOutput },
-
- { {ACTION_GET, 19, 0, 0}, &Room::love2GetCure },
- { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love2ReachedCure },
- { {ACTION_FINISHED_ANIMATION, 24, 0, 0}, &Room::love2GotCure },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction love3ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love3Tick1 },
- { {ACTION_TICK, 80, 0, 0}, &Room::love3Tick80 },
- { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love3TouchedWarp1 },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::love3Timer3Expired },
- { {ACTION_LOOK, 8, 0, 0}, &Room::love3LookAtServicePanel },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::love3LookAtMonitor },
- { {ACTION_LOOK, 10, 0, 0}, &Room::love3LookAtWrench },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love3LookAtKirk },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love3LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love3LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love3LookAtRedshirt },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love3LookAnywhere },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::love3LookAtShaft },
- { {ACTION_LOOK, 11, 0, 0}, &Room::love3LookAtGrate },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love3LookAtPanel },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::love3LookAtPanel },
- { {ACTION_LOOK, 12, 0, 0}, &Room::love3LookAtGasTank },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::love3LookAtTurbines },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love3TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love3TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love3TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love3TalkToRedshirt },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love3UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::love3UseSTricorderOnTurbines },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::love3UseSTricorderOnInsulation },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love3UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::love3UseKirkOnServicePanel },
- { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::love3UseSpockOnServicePanel },
- { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::love3UseMccoyOnServicePanel },
- { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::love3UseRedshirtOnServicePanel },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love3CrewmanReachedServicePanel },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love3OpenedOrClosedServicePanel },
-
- { {ACTION_USE, OBJECT_IWRENCH, 12, 0}, &Room::love3UseWrenchOnGasTank },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love3ReachedGasTankToUnscrew },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love3ScrewedOrUnscrewedGasTank },
-
- { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IO2GAS, 0}, &Room::love3UseWrenchOnO2OrH2Gas },
- { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IH2GAS, 0}, &Room::love3UseWrenchOnO2OrH2Gas },
-
- { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IN2GAS, 0}, &Room::love3UseWrenchOnN2Gas },
- { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::love3ReachedGasTankToPutDown },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love3PutN2TankBack },
-
- { {ACTION_USE, OBJECT_IWRENCH, 0x20, 0}, &Room::love3UseWrenchOnEngineeringPanel },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love3ReachedEngineeringPanel },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love3OpenedEngineeringPanel },
-
- { {ACTION_USE, OBJECT_IWRENCH, 0x21, 0}, &Room::love3UseWrenchOnMonitor },
-
- { {ACTION_USE, OBJECT_IH2O, 0x21, 0}, &Room::love3UseWaterOnMonitor },
- { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love3ReachedMonitorToUseWater },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love3PouredWaterOnMonitor },
-
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
- { {ACTION_USE, OBJECT_REDSHIRT, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
-
- { {ACTION_USE, OBJECT_IWRENCH, 11, 0}, &Room::love3UseWrenchOnGrate },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love3ReachedGateWithWrench },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love3OpenedOrClosedGrate },
-
- { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
- { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
- { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
-
- { {ACTION_USE, OBJECT_IH2O, 0x22, 0}, &Room::love3UseWaterOnShaft },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love3ReachedShaftUsingWater },
- { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love3PouredWaterDownShaft },
-
- { {ACTION_USE, OBJECT_IN2O, 0x22, 0}, &Room::love3UseNitrousOxideOnShaft },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love3ReachedShaftUsingNitrousOxide },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love3PouredNitrousOxideDownShaft },
-
- { {ACTION_USE, OBJECT_INH3, 0x22, 0}, &Room::love3UseAmmoniaOnShaft },
- { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love3ReachedShaftUsingAmmonia },
- { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love3PouredAmmoniaDownShaft },
-
- { {ACTION_USE, OBJECT_IRLG, 0x22, 0}, &Room::love3UseRomulanLaughingGasOnShaft },
- { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love3ReachedShaftUsingRomulanLaughingGas },
- { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love3PouredRomulanLaughingGasDownShaft },
-
- { {ACTION_GET, 10, 0, 0}, &Room::love3GetWrench },
- { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::love3ReachedWrenchToGet },
- { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love3PickedUpWrench },
-
- { {ACTION_GET, 12, 0, 0}, &Room::love3GetGasTank },
- { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::love3ReachedGasTankToGet },
-
- { {ACTION_USE, OBJECT_IANTIGRA, 12, 0}, &Room::love3UseAntigravOnGasTank },
- { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love3ReachedGasTankUsingAntigrav },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love3PickedUpGasTank },
-
- { {ACTION_GET, 9, 0, 0}, &Room::love3GetInsulation },
- { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love3ReachedInsulationToGet },
- { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love3PickedUpInsulation },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction love4ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love4Tick1 },
- { {ACTION_TICK, 10, 0, 0}, &Room::love4Tick10 },
-
- { {ACTION_WALK, 8, 0, 0}, &Room::love4WalkToDoor },
- { {ACTION_WALK, 0x20, 0, 0}, &Room::love4WalkToDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love4TouchedHotspot0 },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love4DoorOpenedOrReached },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love4DoorOpenedOrReached },
-
- { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::love4UseKirkOnLadder },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love4ReachedLadder },
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::love4UseStunPhaserOnRomulan },
- { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::love4UseStunPhaserOnRomulan },
- { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::love4UseStunPhaserOnRomulan },
- { {ACTION_USE, OBJECT_IPHASERS, 12, 0}, &Room::love4UseStunPhaserOnRomulan },
- // NOTE: nothing for OBJECT_IPHASERK. There's an unused audio file which might fit.
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love4LookAnywhere },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::love4LookAtLadder },
- { {ACTION_LOOK, 8, 0, 0}, &Room::love4LookAtDoor },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love4LookAtKirk },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love4LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love4LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love4LookAtRedshirt },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love4LookAtRomulan },
- { {ACTION_LOOK, 10, 0, 0}, &Room::love4LookAtRomulan },
- { {ACTION_LOOK, 11, 0, 0}, &Room::love4LookAtRomulan },
- { {ACTION_LOOK, 12, 0, 0}, &Room::love4LookAtRomulan },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love4TalkToKirk },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love4TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love4TalkToRedshirt },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love4TalkToSpock },
- { {ACTION_TALK, 9, 0, 0}, &Room::love4TalkToRomulan },
- { {ACTION_TALK, 10, 0, 0}, &Room::love4TalkToRomulan },
- { {ACTION_TALK, 11, 0, 0}, &Room::love4TalkToRomulan },
- { {ACTION_TALK, 12, 0, 0}, &Room::love4TalkToRomulan },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::love4UseMTricorderOnRomulan },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::love4UseMTricorderOnRomulan },
- { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::love4UseMTricorderOnRomulan },
- { {ACTION_USE, OBJECT_IMTRICOR, 12, 0}, &Room::love4UseMTricorderOnRomulan },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love4UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love4UseSTricorderAnywhere },
-
- { {ACTION_USE, OBJECT_ICURE, 9, 0}, &Room::love4UseCureOnRomulan },
- { {ACTION_USE, OBJECT_ICURE, 10, 0}, &Room::love4UseCureOnRomulan },
- { {ACTION_USE, OBJECT_ICURE, 11, 0}, &Room::love4UseCureOnRomulan },
- { {ACTION_USE, OBJECT_ICURE, 12, 0}, &Room::love4UseCureOnRomulan },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love4MccoyReachedRomulan4 },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love4MccoyCuredRomulan4 },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love4MccoyReachedRomulan3 },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love4MccoyCuredRomulan3 },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love4MccoyReachedRomulan2 },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love4MccoyCuredRomulan2 },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love4MccoyReachedRomulan1 },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love4MccoyCuredRomulan1 },
-
- { {ACTION_USE, OBJECT_IH2O, 9, 0}, &Room::love4UseWaterOnRomulan },
- { {ACTION_USE, OBJECT_IH2O, 10, 0}, &Room::love4UseWaterOnRomulan },
- { {ACTION_USE, OBJECT_IH2O, 11, 0}, &Room::love4UseWaterOnRomulan },
- { {ACTION_USE, OBJECT_IH2O, 12, 0}, &Room::love4UseWaterOnRomulan },
- { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::love4UseMedkitOnRomulan },
- { {ACTION_USE, OBJECT_IMEDKIT, 10, 0}, &Room::love4UseMedkitOnRomulan },
- { {ACTION_USE, OBJECT_IMEDKIT, 11, 0}, &Room::love4UseMedkitOnRomulan },
- { {ACTION_USE, OBJECT_IMEDKIT, 12, 0}, &Room::love4UseMedkitOnRomulan },
- { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love4UseCureSampleOnRomulan },
- { {ACTION_USE, OBJECT_ISAMPLE, 10, 0}, &Room::love4UseCureSampleOnRomulan },
- { {ACTION_USE, OBJECT_ISAMPLE, 11, 0}, &Room::love4UseCureSampleOnRomulan },
- { {ACTION_USE, OBJECT_ISAMPLE, 12, 0}, &Room::love4UseCureSampleOnRomulan },
- { {ACTION_USE, 0xff, 9, 0}, &Room::love4UseAnythingOnRomulan },
- { {ACTION_USE, 0xff, 10, 0}, &Room::love4UseAnythingOnRomulan },
- { {ACTION_USE, 0xff, 11, 0}, &Room::love4UseAnythingOnRomulan },
- { {ACTION_USE, 0xff, 12, 0}, &Room::love4UseAnythingOnRomulan },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction love5ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::love5Tick1 },
- { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love5TouchedWarp1 },
- { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::love5Timer4Expired },
- { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::love5UseStunPhaserOnPreax },
- // NOTE: nothing for OBJECT_IPHASERK. There's an unused audio file which might fit.
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love5LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love5LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love5LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love5LookAtRedshirt },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::love5LookAnywhere },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::love5LookAtDevice },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::love5LookAtConsole },
- { {ACTION_LOOK, 10, 0, 0}, &Room::love5LookAtDrMarcus },
- { {ACTION_LOOK, 11, 0, 0}, &Room::love5LookAtDrCheever },
- { {ACTION_LOOK, 9, 0, 0}, &Room::love5LookAtPreax },
- { {ACTION_TALK, 9, 0, 0}, &Room::love5TalkToPreax },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love5MccoyReachedSpockToCure },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love5MccoyCuredSpock },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love5CrewmanReachedBeamoutPosition },
- { {ACTION_TALK, 10, 0, 0}, &Room::love5TalkToDrMarcus },
- { {ACTION_TALK, 11, 0, 0}, &Room::love5TalkToDrCheever },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love5TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love5TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love5TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love5TalkToRedshirt },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love5UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::love5UseSTricorderOnDevice },
- { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::love5UseMTricorderOnMarcusOrCheever },
- { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::love5UseMTricorderOnMarcusOrCheever },
- { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::love5UseMTricorderOnPreax },
- { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::love5UseMedkitOnPreax },
- { {ACTION_USE, OBJECT_IH2O, 9, 0}, &Room::love5UseWaterOnPreax },
- { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love5UseCureSampleOnPreax },
- { {ACTION_USE, OBJECT_ICURE, 9, 0}, &Room::love5UseCureOnPreax },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love5ReachedPreaxUsingCure },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love5CuredPreax },
- { {ACTION_USE, 0xff, 9, 0}, &Room::love5UseAnythingOnPreax },
- { {ACTION_USE, OBJECT_KIRK, 10, 0}, &Room::love5UseKirkOnMarcusOrCheever },
- { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love5UseKirkOnMarcusOrCheever },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love5KirkReachedCheever },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love5KirkUntiedCheever },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love5KirkReachedMarcus },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love5KirkUntiedMarcus },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love5MarcusStoodUp },
-
- // Common code
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
- { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
- { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
- { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
- { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
- { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
- { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
- { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
- { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
-};
-
-RoomAction mudd0ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd0Tick1 },
- { {ACTION_TICK, 50, 0, 0}, &Room::mudd0Tick50 },
- { {ACTION_TICK, 60, 0, 0}, &Room::mudd0Tick60 },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::mudd0UsePhaserOnMudd },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::mudd0UsePhaserOnMudd },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd0UseCommunicator },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd0LookAtFoodBox },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd0LookAtComponentBox },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::mudd0LookAnywhere },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd0LookAtMemoryDiskBox },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd0LookAtDegrimerBox },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd0LookAtLense },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd0UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::mudd0UseMTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd0UseSTricorderOnMemoryDiskBox },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd0UseSTricorderOnDegrimerBox },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::mudd0UseMTricorderOnLense },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
-
- { {ACTION_GET, 0x21, 0, 0}, &Room::mudd0GetLense },
- { {ACTION_GET, 0x20, 0, 0}, &Room::mudd0GetMemoryDisk },
- { {ACTION_GET, 0x22, 0, 0}, &Room::mudd0GetDegrimer },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd0PickedUpLense },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd0PickedUpItem },
- { {ACTION_WALK, 0x26, 0, 0}, &Room::mudd0WalkToSouthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd0TouchedHotspot1 },
- { {ACTION_WALK, 0x25, 0, 0}, &Room::mudd0WalkToNorthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd0TouchedHotspot0 },
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd0UseMedkit },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd0LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd0LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd0LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd0LookAtRedshirt },
- { {ACTION_LOOK, 8, 0, 0}, &Room::mudd0LookAtMudd },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd0TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd0TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd0TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd0TalkToRedshirt },
- { {ACTION_TALK, 8, 0, 0}, &Room::mudd0TalkToMudd },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction mudd1ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd1Tick1 },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd1Timer1Expired },
-
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd1UseCommunicator },
- { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::mudd1UseSpockOnBlueButton },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::mudd1SpockReachedBlueButton },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd1SpockPressedBlueButton },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd1CraneFinishedMoving },
- { {ACTION_USE, OBJECT_SPOCK, 0x24, 0}, &Room::mudd1UseSpockOnYellowButton },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd1SpockReachedYellowButton },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::mudd1SpockPressedYellowButton },
- { {ACTION_USE, OBJECT_SPOCK, 0x25, 0}, &Room::mudd1UseSpockOnRedButton },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd1SpockReachedRedButton },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::mudd1SpockPressedRedButton },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
-
- { {ACTION_GET, 9, 0, 0}, &Room::mudd1GetTorpedo },
- { {ACTION_GET, 0x21, 0, 0}, &Room::mudd1GetTorpedo },
- { {ACTION_GET, 0x20, 0, 0}, &Room::mudd1GetTorpedo },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd1UseSTricorderOnTorpedo },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::mudd1UseSTricorderOnTorpedo },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd1UseSTricorderOnTorpedo },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd1UseSTricorderOnTorpedoLauncher },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::mudd1UseSTricorderOnButton },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::mudd1UseSTricorderOnButton },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x24, 0}, &Room::mudd1UseSTricorderOnButton },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::mudd1UseSTricorderOnCrane },
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd1UseMedkitAnywhere },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::mudd1LookAnywhere },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd1LookAtTorpedo },
- { {ACTION_LOOK, 9, 0, 0}, &Room::mudd1LookAtTorpedo },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd1LookAtFallenTorpedo },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd1LookAtTorpedoLauncher },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd1LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd1LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd1LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd1LookAtRedshirt },
- { {ACTION_LOOK, 8, 0, 0}, &Room::mudd1LookAtCrane },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::mudd1LookAtRedButton },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd1LookAtBlueButton },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd1LookAtYellowButton },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd1TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd1TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd1TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd1TalkToRedshirt },
- { {ACTION_WALK, 0x28, 0, 0}, &Room::mudd1WalkToSouthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 2, 0, 0}, &Room::mudd1TouchedHotspot2 },
- { {ACTION_WALK, 0x27, 0, 0}, &Room::mudd1WalkToNorthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd1TouchedHotspot1 },
- { {ACTION_WALK, 0x26, 0, 0}, &Room::mudd1WalkToWestDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd1TouchedHotspot0 },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction mudd2ActionList[] = {
- { {ACTION_WALK, 0x21, 0, 0}, &Room::mudd2WalkToNorthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd2TouchedHotspot0 },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd2WalkToSouthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd2TouchedHotspot1 },
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd2Tick1 },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd2Timer1Expired },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd2UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::mudd2UseSpockOnCapsules },
- { {ACTION_GET, 0x20, 0, 0}, &Room::mudd2GetCapsules },
- { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::mudd2MccoyReachedCapsules },
- { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::mudd2MccoyPickedUpCapsules },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd2UseCommunicator },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::muddaFiredAlienDevice },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd2LookAtCapsules },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::mudd2UseMTricorderOnCapsules },
- { {ACTION_USE, OBJECT_ICAPSULE, 0x23, 0}, &Room::mudd2UseCapsuleOnControlPanel },
- { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::mudd2MccoyReachedControlPanel },
- { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::mudd2MccoyPutCapsuleInControlPanel },
- { {ACTION_USE, OBJECT_KIRK, 0x24, 0}, &Room::mudd2UseKirkOnBed },
- { {ACTION_USE, OBJECT_KIRK, 0x25, 0}, &Room::mudd2UseKirkOnBed },
- { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::mudd2KirkReachedBed },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd2MuddNoticedKirk },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd2MuddDroppedCapsule },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::mudd2UsePhaserOnMudd },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::mudd2UsePhaserOnMudd },
-
- { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::mudd2UseSpockOnMudd },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::mudd2SpockReachedMudd },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::mudd2SpockPinchedMudd },
- { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::mudd2UseKirkOnMudd },
-
- { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::mudd2UseRedshirtOnMudd },
- { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::mudd2RedshirtReachedMudd },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd2Timer2Expired },
- { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::mudd2MuddFinishedPushingRedshirt },
- { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::mudd2RedshirtPushedAway },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::mudd2UseMTricorderOnMudd },
- { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::mudd2UseMedkitOnMudd },
- { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::mudd2UseMedkitOnMudd },
- { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::mudd2MccoyReachedMudd },
- { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::mudd2MccoyCuredMudd },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd2LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd2LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd2LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd2LookAtRedshirt },
- { {ACTION_LOOK, 8, 0, 0}, &Room::mudd2LookAtMudd },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd2LookAtControlPanel },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::mudd2LookAtBed },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd2LookAtBed },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd2TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd2TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd2TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd2TalkToRedshirt },
- { {ACTION_TALK, 8, 0, 0}, &Room::mudd2TalkToMudd },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction mudd3ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd3Tick1 },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd3UseCommunicator },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd3LookAtScreen },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd3UseSTricorderOnScreen },
- { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::mudd3UseKirkOnScreen },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::mudd3UseSpockOnSphere },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd3Timer3Expired },
- { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::mudd3UseMccoyOnSphere },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::mudd3UseRedshirtOnSphere },
- { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::mudd3UseMTricorderOnSphere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd3UseSTricorderOnSphere },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd3ReadyToHookUpTricorders },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd3Timer1Expired },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd3Timer2Expired },
- { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::mudd3Timer4Expired },
- { {ACTION_USE, OBJECT_IDISKS, 0x21, 0}, &Room::mudd3UseMemoryDiskOnSphere },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
-
- { {ACTION_GET, 13, 0, 0}, &Room::mudd3GetRepairTool },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd3ReachedRepairTool },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd3PickedUpRepairTool },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd3LookAtSphere },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd3WalkToNorthDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd3TouchedHotspot0 },
- { {ACTION_WALK, 0x23, 0, 0}, &Room::mudd3WalkToEastDoor },
- { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd3TouchedHotspot1 },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd3LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd3LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd3LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd3LookAtRedshirt },
- { {ACTION_LOOK, 8, 0, 0}, &Room::mudd3LookAtMudd },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd3TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd3TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd3TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd3TalkToRedshirt },
- { {ACTION_TALK, 8, 0, 0}, &Room::mudd3TalkToMudd },
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd3UseMedkit },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction mudd4ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd4Tick1 },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd4UseCommunicator },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd4Timer2Expired },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd4Timer3Expired },
- { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::mudd4UseSpockOnLeftConsole },
- { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::mudd4UseSpockOnLeftConsole },
- { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::mudd4UseSpockOnRightConsole },
- { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::mudd4SpockReachedChair },
- { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd4SpockSatInChair },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd4SpockUsedSensors },
- { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::mudd4SpockUsedEngineering },
- { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::mudd4SpockUsedNavigation },
- { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd4FinishedWalking3 },
- { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::mudd4UseKirkOnRightConsole },
- { {ACTION_USE, OBJECT_KIRK, 0x23, 0}, &Room::mudd4UseKirkOnRightConsole },
- { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::mudd4UseKirkOnLeftConsole },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd4KirkReachedRightConsole },
- { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::mudd4KirkSatInChair },
- { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::mudd4KirkUsedViewScreen },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd4Timer1Expired },
- { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::mudd4KirkUsedCommunications },
- { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::mudd4KirkReachedPositionToTalkToMudd },
- { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::mudd4UseMccoyOnConsole },
- { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::mudd4UseMccoyOnConsole },
- { {ACTION_USE, OBJECT_MCCOY, 0x23, 0}, &Room::mudd4UseMccoyOnConsole },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::mudd4UseRedshirtOnConsole },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::mudd4UseRedshirtOnConsole },
- { {ACTION_USE, OBJECT_REDSHIRT, 0x23, 0}, &Room::mudd4UseRedshirtOnConsole },
- { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::mudd4UseSTricorderOnRepairTool },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd4UseSTricorderOnConsole },
-
- // ENHANCEMENT: Allow scanning the console to work when scanning the specific stations
- // as well
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd4UseSTricorderOnConsole },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::mudd4UseSTricorderOnConsole },
-
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd4UseSTricorderOnViewscreen },
-
- // ENHANCEMENT: Allow scanning the viewscreen when it's on, not just when off
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::mudd4UseSTricorderOnViewscreen },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
-
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd4UseMedkit },
- { {ACTION_GET, 10, 0, 0}, &Room::mudd4GetRepairTool },
- { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::mudd4ReachedRepairTool },
- { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::mudd4PickedUpRepairTool },
-
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd4LookAtConsole },
- // ENHANCEMENT: Allow look action work with the specific stations as well
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd4LookAtConsole },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd4LookAtConsole },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd4LookAtViewscreen },
- // ENHANCEMENT: Allow look action work when viewscreen is on, not just when off
- { {ACTION_LOOK, 8, 0, 0}, &Room::mudd4LookAtViewscreen },
-
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd4LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd4LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd4LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd4LookAtRedshirt },
- { {ACTION_LOOK, 10, 0, 0}, &Room::mudd4LookAtRepairTool },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd4TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd4TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd4TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd4TalkToRedshirt },
- { {ACTION_WALK, 0x24, 0, 0}, &Room::mudd4WalkToEastDoor },
- { {ACTION_WALK, 0x25, 0, 0}, &Room::mudd4WalkToWestDoor },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd4TouchedHotspot0 },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction mudd5ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::mudd5Tick1 },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd5Timer1Expired },
- { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd5Timer2Expired },
- { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd5UseCommunicator },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd5UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd5UseSTricorderOnEngine },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd5UseSTricorderOnCrane },
- { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd5UseSTricorderOnHatch },
- { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::mudd5UseSTricorderOnLifeSupportGenerator },
- { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::mudd5UseStunPhaserOnHatch },
- { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::mudd5UseKillPhaserOnHatch },
- { {ACTION_USE, 0xff, 9, 0}, &Room::mudd5UseAnythingOnLifeSupportGenerator },
- { {ACTION_USE, OBJECT_IDOOVER, 9, 0}, &Room::mudd5UseDooverOnLifeSupportGenerator },
- { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd5KirkReachedLifeSupportGenerator },
- { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::mudd5KirkTimer4Expired },
- { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd5KirkRepairedLifeSupportGenerator },
- { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd5KirkTimer3Expired },
-
- // Common code (next 4 lines)
- { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
- { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
- { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
- { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
-
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd5LookAtHatch },
- { {ACTION_LOOK, 9, 0, 0}, &Room::mudd5LookAtLifeSupportGenerator },
- { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd5TouchedHotspot0 },
- { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd5WalkToDoor },
- { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd5LookAtKirk },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd5LookAtSpock },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd5LookAtMccoy },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd5LookAtRedshirt },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd5LookAtDoor },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd5LookAtCrane },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd5LookAtEngine },
- { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd5TalkToKirk },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd5TalkToSpock },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd5TalkToMccoy },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd5TalkToRedshirt },
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd5UseMedkit },
-
- // Common code (countdown for losing atmosphere when life support malfunctioning)
- { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
-};
-
-RoomAction feather0ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::feather0Tick1 },
- { {ACTION_TICK, 60, 0, 0}, &Room::feather0Tick60 },
- { {ACTION_TALK, 8, 0, 0}, &Room::feather0TalkToQuetzecoatl },
- { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::feather0Timer0Expired },
- { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::feather0Timer1Expired },
- { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::feather0UsePhaserOnQuetzecoatl },
- { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::feather0UsePhaserOnQuetzecoatl },
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::feather0UsePhaserOnMccoy },
- { {ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0}, &Room::feather0UsePhaserOnMccoy },
- { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::feather0UseMedkit },
- { {ACTION_LOOK, 8, 0, 0}, &Room::feather0LookAtQuetzecoatl },
- { {ACTION_LOOK, 0x20, 0, 0}, &Room::feather0LookAtMoon },
- { {ACTION_LOOK, 0x21, 0, 0}, &Room::feather0LookAtLog },
- { {ACTION_LOOK, 0x22, 0, 0}, &Room::feather0LookAtHut },
- { {ACTION_LOOK, 0xff, 0, 0}, &Room::feather0LookAnywhere },
- { {ACTION_LOOK, 0x23, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x24, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x25, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x26, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x27, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x28, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x29, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x2a, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x2b, 0, 0}, &Room::feather0LookAtEyes },
- { {ACTION_LOOK, 0x2c, 0, 0}, &Room::feather0LookAtTree },
- { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather0LookAtMccoy },
- { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather0LookAtSpock },
- { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather0LookAtRedshirt },
- { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::feather0TalkToMccoy },
- { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::feather0TalkToSpock },
- { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::feather0TalkToRedshirt },
- { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::feather0UseSTricorderOnQuetzecoatl },
- { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::feather0UseSTricorderAnywhere },
- { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::feather0UseMTricorderOnQuetzecoatl },
-};
-
-extern const RoomAction feather1ActionList[], feather2ActionList[], feather3ActionList[], feather4ActionList[];
-extern const int feather1NumActions, feather2NumActions, feather3NumActions, feather4NumActions;
-extern const RoomAction feather5ActionList[], feather6ActionList[], feather7ActionList[];
-extern const int feather5NumActions, feather6NumActions, feather7NumActions;
+extern const RoomAction feather0ActionList[], feather1ActionList[], feather2ActionList[], feather3ActionList[];
+extern const RoomAction feather4ActionList[], feather5ActionList[], feather6ActionList[], feather7ActionList[];
extern const RoomAction trial0ActionList[], trial1ActionList[], trial2ActionList[], trial3ActionList[];
-extern const int trial0NumActions, trial1NumActions, trial2NumActions, trial3NumActions;
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;
extern const RoomAction veng0ActionList[], veng1ActionList[], veng2ActionList[], veng3ActionList[];
-extern const int veng0NumActions, veng1NumActions, veng2NumActions, veng3NumActions;
-extern const RoomAction veng4ActionList[], veng5ActionList[], veng6ActionList[], veng7ActionList[], veng8ActionList[];
-extern const int veng4NumActions, veng5NumActions, veng6NumActions, veng7NumActions, veng8NumActions;
+extern const RoomAction veng4ActionList[], veng5ActionList[], veng6ActionList[], veng7ActionList[];
+extern const RoomAction veng8ActionList[];
}
diff --git a/engines/startrek/rooms/love0.cpp b/engines/startrek/rooms/love0.cpp
index 40ba48455a..a482e7fcc0 100644
--- a/engines/startrek/rooms/love0.cpp
+++ b/engines/startrek/rooms/love0.cpp
@@ -32,6 +32,67 @@
namespace StarTrek {
+extern const RoomAction love0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love0Tick1 },
+ { {ACTION_TICK, 10, 0, 0}, &Room::love0Tick10 },
+ { {ACTION_WALK, 0x21, 0, 0}, &Room::love0WalkToDoor2 },
+ { {ACTION_WALK, 9, 0, 0}, &Room::love0WalkToDoor2 },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love0OpenDoor2 },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love0ReachedDoor2 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love0ReachedDoor2 },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::love0WalkToDoor1 },
+ { {ACTION_WALK, 8, 0, 0}, &Room::love0WalkToDoor1 },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::love0OpenDoor1 },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love0ReachedDoor1 },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love0ReachedDoor1 },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::love0LookAtConsole },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::love0LookAtViewscreen },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love0LookAnywhere },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::love0LookAtDoor1 },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love0LookAtDoor2 },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love0LookAtRedshirt },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love0TalkToKirk },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love0TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love0TalkToRedshirt },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love0UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::love0UseSTricorderOnConsole },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love0UseKirkOnConsole },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love0UseRedshirtOnConsole },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love0UseSpockOnConsole },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love0SpockReachedConsole },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love0SpockAccessedConsole },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love0UseMccoyOnConsole },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love0MccoyReachedConsole },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love0MccoyAccessedConsole },
+ { {ACTION_GET, 8, 0, 0}, &Room::love0GetDoorOrConsole },
+ { {ACTION_GET, 9, 0, 0}, &Room::love0GetDoorOrConsole },
+ { {ACTION_GET, 0x20, 0, 0}, &Room::love0GetDoorOrConsole },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love0Tick1() {
// BUGFIX: moved this out of the if statement below.
playVoc("LOV0LOOP");
diff --git a/engines/startrek/rooms/love1.cpp b/engines/startrek/rooms/love1.cpp
index 0a6c5cfeb0..73950253bc 100644
--- a/engines/startrek/rooms/love1.cpp
+++ b/engines/startrek/rooms/love1.cpp
@@ -43,6 +43,145 @@
namespace StarTrek {
+extern const RoomAction love1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love1Tick1 },
+
+ { {ACTION_WALK, 10, 0, 0}, &Room::love1WalkToDoor3 },
+ { {ACTION_WALK, 0x26, 0, 0}, &Room::love1WalkToDoor3 },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::love1OpenDoor3 },
+ { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::love1ReachedDoor3 },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love1ReachedDoor3 },
+
+ { {ACTION_WALK, 8, 0, 0}, &Room::love1WalkToDoor1 },
+ { {ACTION_WALK, 0x27, 0, 0}, &Room::love1WalkToDoor1 },
+ { {ACTION_TOUCHED_HOTSPOT, 2, 0, 0}, &Room::love1OpenDoor1 },
+ { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::love1ReachedDoor1 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love1ReachedDoor1 },
+
+ { {ACTION_WALK, 9, 0, 0}, &Room::love1WalkToDoor2 },
+ { {ACTION_WALK, 0x28, 0, 0}, &Room::love1WalkToDoor2 },
+ { {ACTION_TOUCHED_HOTSPOT, 3, 0, 0}, &Room::love1OpenDoor2 },
+ { {ACTION_FINISHED_WALKING, 17, 0, 0}, &Room::love1ReachedDoor2 },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love1ReachedDoor2 },
+
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::love1LookAtLaser },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love1LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love1LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love1LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love1LookAtRedshirt },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love1LookAnywhere },
+ { {ACTION_LOOK, 15, 0, 0}, &Room::love1LookAtNozzle },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::love1LookAtNozzle },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::love1LookAtLadder },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love1LookAtDoor1Or2 },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::love1LookAtDoor1Or2 },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::love1LookAtDoor3 },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::love1LookAtDistillator },
+ { {ACTION_LOOK, 14, 0, 0}, &Room::love1LookAtChamber },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::love1LookAtChamber },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::love1LookAtReplicator },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::love1LookAtFreezer },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::love1LookAtFreezer },
+ { {ACTION_LOOK, OBJECT_IDISHES, 0, 0}, &Room::love1LookAtDishes },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love1TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love1TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love1TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love1TalkToRedshirt },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_IDISHES, 0}, &Room::love1UseMTricorderOnDishes },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love1UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::love1UseSTricorderOnReplicator },
+ { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::love1UseSTricorderOnReplicator },
+ { {ACTION_USE, OBJECT_SPOCK, 0x25, 0}, &Room::love1UseSTricorderOnLaser },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::love1UseSTricorderOnLaser },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::love1UseSTricorderOnFreezer },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love1UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IDISHES, 0}, &Room::love1UseSTricorderOnDishes },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::love1UseSTricorderOnDistillator },
+ { {ACTION_GET, 11, 0, 0}, &Room::love1GetFreezer },
+ { {ACTION_GET, 0x22, 0, 0}, &Room::love1GetFreezer },
+ { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love1KirkReachedFreezer },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love1KirkGotVirusCulture },
+ { {ACTION_GET, 14, 0, 0}, &Room::love1GetFromChamber },
+ { {ACTION_GET, 12, 0, 0}, &Room::love1GetFromChamber },
+ { {ACTION_GET, 0x23, 0, 0}, &Room::love1GetFromChamber },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love1KirkReachedChamber },
+ { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love1KirkGotCureSample },
+ { {ACTION_GET, 15, 0, 0}, &Room::love1GetFromNozzle },
+ { {ACTION_GET, 0x24, 0, 0}, &Room::love1GetFromNozzle },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love1KirkReachedNozzleToGet },
+ { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love1KirkGotBottleFromNozzle },
+ { {ACTION_USE, OBJECT_IN2O, 0x24, 0}, &Room::love1UseN2OOnNozzle },
+ { {ACTION_USE, OBJECT_IH2O, 0x24, 0}, &Room::love1UseH2OOnNozzle },
+ { {ACTION_USE, OBJECT_INH3, 0x24, 0}, &Room::love1UseNH3OnNozzle },
+ { {ACTION_USE, OBJECT_IRLG, 0x24, 0}, &Room::love1UseRLGOnNozzle },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love1KirkReachedNozzleToPut },
+ { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love1KirkPutBottleInNozzle },
+ { {ACTION_USE, 0xff, 0x24, 0}, &Room::love1UseAnthingOnNozzle },
+ { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::love1UseSpockOnReplicator },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x23, 0}, &Room::love1UseRedshirtOnReplicator },
+ { {ACTION_USE, OBJECT_MCCOY, 14, 0}, &Room::love1UseMccoyOnReplicator },
+ { {ACTION_USE, OBJECT_MCCOY, 15, 0}, &Room::love1UseMccoyOnReplicator },
+ { {ACTION_USE, OBJECT_MCCOY, 0x23, 0}, &Room::love1UseMccoyOnReplicator },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love1MccoyReachedReplicator },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love1MccoyUsedReplicator },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love1ChamberClosed },
+ { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love1ChamberOpened },
+ { {ACTION_USE, 0xff, 12, 0}, &Room::love1UseAnythingOnChamber },
+ { {ACTION_USE, OBJECT_IDISHES, 12, 0}, &Room::love1UseDishesOnChamber },
+ { {ACTION_USE, OBJECT_IDISHES, 0x23, 0}, &Room::love1UseDishesOnChamber },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love1KirkReachedChamberToPut },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love1ChamberOpenedForDish },
+ { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love1KirkPutDishInChamber },
+ { {ACTION_USE, OBJECT_IINSULAT, 0x21, 0}, &Room::love1UseInsulationOnDistillator },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love1KirkReachedDistillator },
+ { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::love1KirkGotPolyberylcarbonate },
+ { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::love1UseKirkOnFreezer },
+ { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love1UseKirkOnFreezer },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::love1UseRedshirtOnFreezer },
+ { {ACTION_USE, OBJECT_REDSHIRT, 11, 0}, &Room::love1UseRedshirtOnFreezer },
+ { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::love1UseSpockOnFreezer },
+ { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::love1UseSpockOnFreezer },
+ { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::love1UseMccoyOnFreezer },
+ { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::love1UseMccoyOnFreezer },
+ { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love1CrewmanReachedFreezer },
+ { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::love1CrewmanOpenedOrClosedFreezer },
+ { {ACTION_USE, 0xff, 0x22, 0}, &Room::love1UseAnythingOnFreezer },
+ { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love1ReachedFreezerWithArbitraryItem },
+ { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnFreezer },
+ { {ACTION_USE, 0xff, 0x23, 0}, &Room::love1UseAnythingOnReplicator },
+ { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love1ReachedReplicatorWithArbitraryItem },
+ { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnReplicator },
+ { {ACTION_USE, 0xff, 0x21, 0}, &Room::love1UseAnythingOnDistillator },
+ { {ACTION_FINISHED_WALKING, 13, 0, 0}, &Room::love1ReachedDistillatorWithArbitraryItem },
+ { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnDistillator },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love1UseKirkOnLadder },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love1UseSpockOnLadder },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love1UseMccoyOnLadder },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love1UseRedshirtOnLadder },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love1CrewmanReachedLadder },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love1CrewmanDiedFromPhaser },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love1TouchedHotspot0 },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love1Tick1() {
playVoc("LOV1LOOP");
diff --git a/engines/startrek/rooms/love2.cpp b/engines/startrek/rooms/love2.cpp
index 913cf5b142..395fac045d 100644
--- a/engines/startrek/rooms/love2.cpp
+++ b/engines/startrek/rooms/love2.cpp
@@ -44,6 +44,139 @@
namespace StarTrek {
+extern const RoomAction love2ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love2Tick1 },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love2TouchedWarp1 },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::love2Timer3Expired },
+ { {ACTION_WALK, 10, 0, 0}, &Room::love2WalkToDoor },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::love2WalkToDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love2TouchedHotspot0 },
+ { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love2DoorReachedOrOpened },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love2DoorReachedOrOpened },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::love2LookAtCabinet },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::love2LookAtDoor },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::love2LookAtSynthesizer },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love2LookAtAnywhere },
+ { {ACTION_LOOK, 14, 0, 0}, &Room::love2LookAtAntigrav },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love2LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love2LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love2LookAtRedshirt },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love2LookAtKirk },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::love2LookAtArdak },
+ { {ACTION_LOOK, 15, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 16, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 18, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 19, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 17, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love2LookAtChamber },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::love2LookAtCan1 },
+ { {ACTION_LOOK, 13, 0, 0}, &Room::love2LookAtCan2 },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love2TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love2TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love2TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love2TalkToRedshirt },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love2UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love2UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::love2UseKirkOnCabinet },
+ { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::love2UseSpockOnCabinet },
+ { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::love2UseMccoyOnCabinet },
+ { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::love2UseRedshirtOnCabinet },
+ { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love2CrewmanReachedCabinet },
+ { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love2CrewmanAccessedCabinet },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love2CrewmanOpenedOrClosedCabinet },
+ { {ACTION_USE, OBJECT_IWRENCH, 11, 0}, &Room::love2UseWrenchOnGasFeed },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love2ReachedGasFeed },
+ { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love2ChangedGasFeed },
+ { {ACTION_USE, OBJECT_IO2GAS, 0x23, 0}, &Room::love2UseO2GasOnCanisterSlot },
+ { {ACTION_USE, OBJECT_IH2GAS, 0x23, 0}, &Room::love2UseH2GasOnCanisterSlot },
+ { {ACTION_USE, OBJECT_IN2GAS, 0x23, 0}, &Room::love2UseN2GasOnCanisterSlot },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love2ReachedCanisterSlot },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love2PutCanisterInSlot1 },
+ { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love2PutCanisterInSlot2 },
+ { {ACTION_USE, OBJECT_IANTIGRA, 12, 0}, &Room::love2UseAntigravOnCanister1 },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love2ReachedCanisterSlot1ToGet },
+ { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::love2TookCanister1 },
+ { {ACTION_USE, OBJECT_IANTIGRA, 13, 0}, &Room::love2UseAntigravOnCanister2 },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love2ReachedCanisterSlot2ToGet },
+ { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::love2TookCanister2 },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love2UseKirkOnSynthesizer },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love2UseSpockOnSynthesizer },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love2UseMccoyOnSynthesizer },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love2UseRedshirtOnSynthesizer },
+ { {ACTION_FINISHED_WALKING, 13, 0, 0}, &Room::love2CrewmanReachedSynthesizer },
+ { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::love2CrewmanUsedSynthesizer },
+ { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::love2SpockReachedGasFeeds },
+ { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::love2SpockEnabledGasFeeds },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love2SynthesizerDoorClosed },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love2SynthesizerFinished },
+ { {ACTION_FINISHED_ANIMATION, 27, 0, 0}, &Room::love2ClosedSynthesizerDoorMakingRLG },
+ { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love2ClosedSynthesizerDoorMakingCure },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love2CureStartedSynthesizing },
+ { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love2CureSynthesized },
+ { {ACTION_USE, OBJECT_IPBC, 9, 0}, &Room::love2UsePolyberylcarbonateOnSynthesizerDoor },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love2KirkReachedSynthesizerWithPolyberylcarbonate },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate },
+ { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::love2PutPolyberylcarbonateInSynthesizer },
+
+ { {ACTION_USE, OBJECT_IDISHES, 9, 0}, &Room::love2UseVirusSampleOnSynthesizerDoor },
+ { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love2KirkReachedSynthesizerWithVirusSample },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love2SynthesizerDoorOpenedWithVirusSample },
+ { {ACTION_FINISHED_ANIMATION, 20, 0, 0}, &Room::love2PutVirusSampleInSynthesizer },
+
+ { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love2UseCureSampleOnSynthesizerDoor },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love2KirkReachedSynthesizerWithCureSample },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love2SynthesizerDoorOpenedWithCureSample },
+ { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::love2PutCureSampleInSynthesizer },
+
+ { {ACTION_USE, 0xff, 9, 0}, &Room::love2UseAnythingOnSynthesizerDoor },
+ { {ACTION_USE, 0xff, 0x20, 0}, &Room::love2UseAnythingOnSynthesizer },
+ { {ACTION_GET, 13, 0, 0}, &Room::love2GetCanister },
+ { {ACTION_GET, 12, 0, 0}, &Room::love2GetCanister },
+
+ { {ACTION_GET, 14, 0, 0}, &Room::love2GetAntigrav },
+ { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::love2ReachedAntigrav },
+ { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::love2GotAntigrav },
+
+ { {ACTION_GET, 16, 0, 0}, &Room::love2GetPolyberylcarbonate },
+ { {ACTION_FINISHED_WALKING, 18, 0, 0}, &Room::love2ReachedPolyberylcarbonate },
+ { {ACTION_FINISHED_ANIMATION, 26, 0, 0}, &Room::love2GotPolyberylcarbonate },
+
+ { {ACTION_GET, 17, 0, 0}, &Room::love2GetDishes },
+ { {ACTION_FINISHED_WALKING, 17, 0, 0}, &Room::love2ReachedDishes },
+ { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::love2GotDishes },
+
+ { {ACTION_GET, 18, 0, 0}, &Room::love2GetSample },
+ { {ACTION_FINISHED_WALKING, 19, 0, 0}, &Room::love2ReachedSample },
+ { {ACTION_FINISHED_ANIMATION, 28, 0, 0}, &Room::love2GotSample },
+
+ { {ACTION_GET, 15, 0, 0}, &Room::love2GetSynthesizerOutput },
+ { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::love2ReachedSynthesizerOutput },
+ { {ACTION_FINISHED_ANIMATION, 23, 0, 0}, &Room::love2GotSynthesizerOutput },
+
+ { {ACTION_GET, 19, 0, 0}, &Room::love2GetCure },
+ { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love2ReachedCure },
+ { {ACTION_FINISHED_ANIMATION, 24, 0, 0}, &Room::love2GotCure },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love2Tick1() {
playVoc("LOV2LOOP");
diff --git a/engines/startrek/rooms/love3.cpp b/engines/startrek/rooms/love3.cpp
index bf1b97f930..fe7871efbd 100644
--- a/engines/startrek/rooms/love3.cpp
+++ b/engines/startrek/rooms/love3.cpp
@@ -35,6 +35,130 @@
namespace StarTrek {
+extern const RoomAction love3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love3Tick1 },
+ { {ACTION_TICK, 80, 0, 0}, &Room::love3Tick80 },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love3TouchedWarp1 },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::love3Timer3Expired },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::love3LookAtServicePanel },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::love3LookAtMonitor },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::love3LookAtWrench },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love3LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love3LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love3LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love3LookAtRedshirt },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love3LookAnywhere },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::love3LookAtShaft },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::love3LookAtGrate },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love3LookAtPanel },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::love3LookAtPanel },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::love3LookAtGasTank },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::love3LookAtTurbines },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love3TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love3TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love3TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love3TalkToRedshirt },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love3UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::love3UseSTricorderOnTurbines },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::love3UseSTricorderOnInsulation },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love3UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::love3UseKirkOnServicePanel },
+ { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::love3UseSpockOnServicePanel },
+ { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::love3UseMccoyOnServicePanel },
+ { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::love3UseRedshirtOnServicePanel },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love3CrewmanReachedServicePanel },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love3OpenedOrClosedServicePanel },
+
+ { {ACTION_USE, OBJECT_IWRENCH, 12, 0}, &Room::love3UseWrenchOnGasTank },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love3ReachedGasTankToUnscrew },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love3ScrewedOrUnscrewedGasTank },
+
+ { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IO2GAS, 0}, &Room::love3UseWrenchOnO2OrH2Gas },
+ { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IH2GAS, 0}, &Room::love3UseWrenchOnO2OrH2Gas },
+
+ { {ACTION_USE, OBJECT_IWRENCH, OBJECT_IN2GAS, 0}, &Room::love3UseWrenchOnN2Gas },
+ { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::love3ReachedGasTankToPutDown },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love3PutN2TankBack },
+
+ { {ACTION_USE, OBJECT_IWRENCH, 0x20, 0}, &Room::love3UseWrenchOnEngineeringPanel },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love3ReachedEngineeringPanel },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love3OpenedEngineeringPanel },
+
+ { {ACTION_USE, OBJECT_IWRENCH, 0x21, 0}, &Room::love3UseWrenchOnMonitor },
+
+ { {ACTION_USE, OBJECT_IH2O, 0x21, 0}, &Room::love3UseWaterOnMonitor },
+ { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::love3ReachedMonitorToUseWater },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love3PouredWaterOnMonitor },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+ { {ACTION_USE, OBJECT_REDSHIRT, 11, 0}, &Room::love3UseCrewmanOnEngineeringPanelOrGrate },
+
+ { {ACTION_USE, OBJECT_IWRENCH, 11, 0}, &Room::love3UseWrenchOnGrate },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love3ReachedGateWithWrench },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::love3OpenedOrClosedGrate },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
+ { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
+ { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::love3UseCrewmanOnShaft },
+
+ { {ACTION_USE, OBJECT_IH2O, 0x22, 0}, &Room::love3UseWaterOnShaft },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love3ReachedShaftUsingWater },
+ { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::love3PouredWaterDownShaft },
+
+ { {ACTION_USE, OBJECT_IN2O, 0x22, 0}, &Room::love3UseNitrousOxideOnShaft },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love3ReachedShaftUsingNitrousOxide },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::love3PouredNitrousOxideDownShaft },
+
+ { {ACTION_USE, OBJECT_INH3, 0x22, 0}, &Room::love3UseAmmoniaOnShaft },
+ { {ACTION_FINISHED_WALKING, 7, 0, 0}, &Room::love3ReachedShaftUsingAmmonia },
+ { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::love3PouredAmmoniaDownShaft },
+
+ { {ACTION_USE, OBJECT_IRLG, 0x22, 0}, &Room::love3UseRomulanLaughingGasOnShaft },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::love3ReachedShaftUsingRomulanLaughingGas },
+ { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::love3PouredRomulanLaughingGasDownShaft },
+
+ { {ACTION_GET, 10, 0, 0}, &Room::love3GetWrench },
+ { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::love3ReachedWrenchToGet },
+ { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::love3PickedUpWrench },
+
+ { {ACTION_GET, 12, 0, 0}, &Room::love3GetGasTank },
+ { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::love3ReachedGasTankToGet },
+
+ { {ACTION_USE, OBJECT_IANTIGRA, 12, 0}, &Room::love3UseAntigravOnGasTank },
+ { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love3ReachedGasTankUsingAntigrav },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::love3PickedUpGasTank },
+
+ { {ACTION_GET, 9, 0, 0}, &Room::love3GetInsulation },
+ { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love3ReachedInsulationToGet },
+ { {ACTION_FINISHED_ANIMATION, 14, 0, 0}, &Room::love3PickedUpInsulation },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love3Tick1() {
playVoc("LOV3LOOP");
diff --git a/engines/startrek/rooms/love4.cpp b/engines/startrek/rooms/love4.cpp
index 9d48dab3ed..d9c4b0ab9c 100644
--- a/engines/startrek/rooms/love4.cpp
+++ b/engines/startrek/rooms/love4.cpp
@@ -33,6 +33,99 @@
namespace StarTrek {
+extern const RoomAction love4ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love4Tick1 },
+ { {ACTION_TICK, 10, 0, 0}, &Room::love4Tick10 },
+
+ { {ACTION_WALK, 8, 0, 0}, &Room::love4WalkToDoor },
+ { {ACTION_WALK, 0x20, 0, 0}, &Room::love4WalkToDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::love4TouchedHotspot0 },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love4DoorOpenedOrReached },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::love4DoorOpenedOrReached },
+
+ { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::love4UseKirkOnLadder },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love4ReachedLadder },
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::love4UseStunPhaserOnRomulan },
+ { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::love4UseStunPhaserOnRomulan },
+ { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::love4UseStunPhaserOnRomulan },
+ { {ACTION_USE, OBJECT_IPHASERS, 12, 0}, &Room::love4UseStunPhaserOnRomulan },
+ // NOTE: nothing for OBJECT_IPHASERK. There's an unused audio file which might fit.
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love4LookAnywhere },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::love4LookAtLadder },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::love4LookAtDoor },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love4LookAtKirk },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love4LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love4LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love4LookAtRedshirt },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love4LookAtRomulan },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::love4LookAtRomulan },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::love4LookAtRomulan },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::love4LookAtRomulan },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love4TalkToKirk },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love4TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love4TalkToRedshirt },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love4TalkToSpock },
+ { {ACTION_TALK, 9, 0, 0}, &Room::love4TalkToRomulan },
+ { {ACTION_TALK, 10, 0, 0}, &Room::love4TalkToRomulan },
+ { {ACTION_TALK, 11, 0, 0}, &Room::love4TalkToRomulan },
+ { {ACTION_TALK, 12, 0, 0}, &Room::love4TalkToRomulan },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::love4UseMTricorderOnRomulan },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::love4UseMTricorderOnRomulan },
+ { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::love4UseMTricorderOnRomulan },
+ { {ACTION_USE, OBJECT_IMTRICOR, 12, 0}, &Room::love4UseMTricorderOnRomulan },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::love4UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love4UseSTricorderAnywhere },
+
+ { {ACTION_USE, OBJECT_ICURE, 9, 0}, &Room::love4UseCureOnRomulan },
+ { {ACTION_USE, OBJECT_ICURE, 10, 0}, &Room::love4UseCureOnRomulan },
+ { {ACTION_USE, OBJECT_ICURE, 11, 0}, &Room::love4UseCureOnRomulan },
+ { {ACTION_USE, OBJECT_ICURE, 12, 0}, &Room::love4UseCureOnRomulan },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::love4MccoyReachedRomulan4 },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love4MccoyCuredRomulan4 },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love4MccoyReachedRomulan3 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love4MccoyCuredRomulan3 },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love4MccoyReachedRomulan2 },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love4MccoyCuredRomulan2 },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love4MccoyReachedRomulan1 },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love4MccoyCuredRomulan1 },
+
+ { {ACTION_USE, OBJECT_IH2O, 9, 0}, &Room::love4UseWaterOnRomulan },
+ { {ACTION_USE, OBJECT_IH2O, 10, 0}, &Room::love4UseWaterOnRomulan },
+ { {ACTION_USE, OBJECT_IH2O, 11, 0}, &Room::love4UseWaterOnRomulan },
+ { {ACTION_USE, OBJECT_IH2O, 12, 0}, &Room::love4UseWaterOnRomulan },
+ { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::love4UseMedkitOnRomulan },
+ { {ACTION_USE, OBJECT_IMEDKIT, 10, 0}, &Room::love4UseMedkitOnRomulan },
+ { {ACTION_USE, OBJECT_IMEDKIT, 11, 0}, &Room::love4UseMedkitOnRomulan },
+ { {ACTION_USE, OBJECT_IMEDKIT, 12, 0}, &Room::love4UseMedkitOnRomulan },
+ { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love4UseCureSampleOnRomulan },
+ { {ACTION_USE, OBJECT_ISAMPLE, 10, 0}, &Room::love4UseCureSampleOnRomulan },
+ { {ACTION_USE, OBJECT_ISAMPLE, 11, 0}, &Room::love4UseCureSampleOnRomulan },
+ { {ACTION_USE, OBJECT_ISAMPLE, 12, 0}, &Room::love4UseCureSampleOnRomulan },
+ { {ACTION_USE, 0xff, 9, 0}, &Room::love4UseAnythingOnRomulan },
+ { {ACTION_USE, 0xff, 10, 0}, &Room::love4UseAnythingOnRomulan },
+ { {ACTION_USE, 0xff, 11, 0}, &Room::love4UseAnythingOnRomulan },
+ { {ACTION_USE, 0xff, 12, 0}, &Room::love4UseAnythingOnRomulan },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love4Tick1() {
playVoc("LOV4LOOP");
diff --git a/engines/startrek/rooms/love5.cpp b/engines/startrek/rooms/love5.cpp
index 3575f92bcb..28feb041c2 100644
--- a/engines/startrek/rooms/love5.cpp
+++ b/engines/startrek/rooms/love5.cpp
@@ -32,6 +32,72 @@
namespace StarTrek {
+extern const RoomAction love5ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::love5Tick1 },
+ { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::love5TouchedWarp1 },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::love5Timer4Expired },
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::love5UseStunPhaserOnPreax },
+ // NOTE: nothing for OBJECT_IPHASERK. There's an unused audio file which might fit.
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::love5LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::love5LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::love5LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::love5LookAtRedshirt },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::love5LookAnywhere },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::love5LookAtDevice },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::love5LookAtConsole },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::love5LookAtDrMarcus },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::love5LookAtDrCheever },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::love5LookAtPreax },
+ { {ACTION_TALK, 9, 0, 0}, &Room::love5TalkToPreax },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::love5MccoyReachedSpockToCure },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::love5MccoyCuredSpock },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::love5CrewmanReachedBeamoutPosition },
+ { {ACTION_TALK, 10, 0, 0}, &Room::love5TalkToDrMarcus },
+ { {ACTION_TALK, 11, 0, 0}, &Room::love5TalkToDrCheever },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::love5TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::love5TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::love5TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::love5TalkToRedshirt },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::love5UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::love5UseSTricorderOnDevice },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::love5UseMTricorderOnMarcusOrCheever },
+ { {ACTION_USE, OBJECT_IMTRICOR, 11, 0}, &Room::love5UseMTricorderOnMarcusOrCheever },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::love5UseMTricorderOnPreax },
+ { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::love5UseMedkitOnPreax },
+ { {ACTION_USE, OBJECT_IH2O, 9, 0}, &Room::love5UseWaterOnPreax },
+ { {ACTION_USE, OBJECT_ISAMPLE, 9, 0}, &Room::love5UseCureSampleOnPreax },
+ { {ACTION_USE, OBJECT_ICURE, 9, 0}, &Room::love5UseCureOnPreax },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::love5ReachedPreaxUsingCure },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::love5CuredPreax },
+ { {ACTION_USE, 0xff, 9, 0}, &Room::love5UseAnythingOnPreax },
+ { {ACTION_USE, OBJECT_KIRK, 10, 0}, &Room::love5UseKirkOnMarcusOrCheever },
+ { {ACTION_USE, OBJECT_KIRK, 11, 0}, &Room::love5UseKirkOnMarcusOrCheever },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::love5KirkReachedCheever },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::love5KirkUntiedCheever },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::love5KirkReachedMarcus },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::love5KirkUntiedMarcus },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::love5MarcusStoodUp },
+
+ // Common code
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::loveaTimer0Expired },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::loveaTimer1Expired },
+ { {ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0}, &Room::loveaUseMedkitOnSpock },
+ { {ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0}, &Room::loveaUseCureSampleOnSpock },
+ { {ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0}, &Room::loveaUseCureOnSpock },
+ { {ACTION_FINISHED_WALKING, 99, 0, 0}, &Room::loveaSpockOrMccoyInPositionToUseCure },
+ { {ACTION_FINISHED_ANIMATION, 99, 0, 0}, &Room::loveaFinishedCuringSpock },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::loveaTimer2Expired },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::loveaUseMTricorderOnSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::loveaUseMTricorderOnHuman },
+ { {ACTION_USE, OBJECT_IRLG, 0xff, 0}, &Room::loveaUseRomulanLaughingGas },
+ { {ACTION_USE, OBJECT_IN2O, 0xff, 0}, &Room::loveaUseHumanLaughingGas },
+ { {ACTION_USE, OBJECT_INH3, 0xff, 0}, &Room::loveaUseAmmonia },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::loveaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::love5Tick1() {
playVoc("LOV5LOOP");
diff --git a/engines/startrek/rooms/mudd0.cpp b/engines/startrek/rooms/mudd0.cpp
index 9987a784f9..14f2fc5ef4 100644
--- a/engines/startrek/rooms/mudd0.cpp
+++ b/engines/startrek/rooms/mudd0.cpp
@@ -39,6 +39,57 @@
namespace StarTrek {
+extern const RoomAction mudd0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd0Tick1 },
+ { {ACTION_TICK, 50, 0, 0}, &Room::mudd0Tick50 },
+ { {ACTION_TICK, 60, 0, 0}, &Room::mudd0Tick60 },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::mudd0UsePhaserOnMudd },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::mudd0UsePhaserOnMudd },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd0UseCommunicator },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd0LookAtFoodBox },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd0LookAtComponentBox },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::mudd0LookAnywhere },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd0LookAtMemoryDiskBox },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd0LookAtDegrimerBox },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd0LookAtLense },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::mudd0UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd0UseSTricorderOnMemoryDiskBox },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd0UseSTricorderOnDegrimerBox },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::mudd0UseMTricorderOnLense },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+
+ { {ACTION_GET, 0x21, 0, 0}, &Room::mudd0GetLense },
+ { {ACTION_GET, 0x20, 0, 0}, &Room::mudd0GetMemoryDisk },
+ { {ACTION_GET, 0x22, 0, 0}, &Room::mudd0GetDegrimer },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd0PickedUpLense },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd0PickedUpItem },
+ { {ACTION_WALK, 0x26, 0, 0}, &Room::mudd0WalkToSouthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd0TouchedHotspot1 },
+ { {ACTION_WALK, 0x25, 0, 0}, &Room::mudd0WalkToNorthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd0TouchedHotspot0 },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd0UseMedkit },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd0LookAtRedshirt },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::mudd0LookAtMudd },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd0TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd0TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd0TalkToRedshirt },
+ { {ACTION_TALK, 8, 0, 0}, &Room::mudd0TalkToMudd },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::mudd0Tick1() {
playVoc("MUD0LOOP");
diff --git a/engines/startrek/rooms/mudd1.cpp b/engines/startrek/rooms/mudd1.cpp
index c84afac7d3..f2c61986a2 100644
--- a/engines/startrek/rooms/mudd1.cpp
+++ b/engines/startrek/rooms/mudd1.cpp
@@ -45,6 +45,69 @@
namespace StarTrek {
+extern const RoomAction mudd1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd1Tick1 },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd1Timer1Expired },
+
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd1UseCommunicator },
+ { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::mudd1UseSpockOnBlueButton },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::mudd1SpockReachedBlueButton },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd1SpockPressedBlueButton },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd1CraneFinishedMoving },
+ { {ACTION_USE, OBJECT_SPOCK, 0x24, 0}, &Room::mudd1UseSpockOnYellowButton },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd1SpockReachedYellowButton },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::mudd1SpockPressedYellowButton },
+ { {ACTION_USE, OBJECT_SPOCK, 0x25, 0}, &Room::mudd1UseSpockOnRedButton },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd1SpockReachedRedButton },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::mudd1SpockPressedRedButton },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
+
+ { {ACTION_GET, 9, 0, 0}, &Room::mudd1GetTorpedo },
+ { {ACTION_GET, 0x21, 0, 0}, &Room::mudd1GetTorpedo },
+ { {ACTION_GET, 0x20, 0, 0}, &Room::mudd1GetTorpedo },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd1UseSTricorderOnTorpedo },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::mudd1UseSTricorderOnTorpedo },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd1UseSTricorderOnTorpedo },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd1UseSTricorderOnTorpedoLauncher },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::mudd1UseSTricorderOnButton },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::mudd1UseSTricorderOnButton },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x24, 0}, &Room::mudd1UseSTricorderOnButton },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::mudd1UseSTricorderOnCrane },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd1UseMedkitAnywhere },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::mudd1LookAnywhere },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd1LookAtTorpedo },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::mudd1LookAtTorpedo },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd1LookAtFallenTorpedo },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd1LookAtTorpedoLauncher },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd1LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd1LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd1LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd1LookAtRedshirt },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::mudd1LookAtCrane },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::mudd1LookAtRedButton },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd1LookAtBlueButton },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd1LookAtYellowButton },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd1TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd1TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd1TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd1TalkToRedshirt },
+ { {ACTION_WALK, 0x28, 0, 0}, &Room::mudd1WalkToSouthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 2, 0, 0}, &Room::mudd1TouchedHotspot2 },
+ { {ACTION_WALK, 0x27, 0, 0}, &Room::mudd1WalkToNorthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd1TouchedHotspot1 },
+ { {ACTION_WALK, 0x26, 0, 0}, &Room::mudd1WalkToWestDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd1TouchedHotspot0 },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::mudd1Tick1() {
playVoc("MUD1LOOP"); // BUGFIX: moved this out of below if statement
diff --git a/engines/startrek/rooms/mudd2.cpp b/engines/startrek/rooms/mudd2.cpp
index 4387bd1826..99be04be24 100644
--- a/engines/startrek/rooms/mudd2.cpp
+++ b/engines/startrek/rooms/mudd2.cpp
@@ -36,6 +36,73 @@
namespace StarTrek {
+extern const RoomAction mudd2ActionList[] = {
+ { {ACTION_WALK, 0x21, 0, 0}, &Room::mudd2WalkToNorthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd2TouchedHotspot0 },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd2WalkToSouthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd2TouchedHotspot1 },
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd2Tick1 },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd2Timer1Expired },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd2UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::mudd2UseSpockOnCapsules },
+ { {ACTION_GET, 0x20, 0, 0}, &Room::mudd2GetCapsules },
+ { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::mudd2MccoyReachedCapsules },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::mudd2MccoyPickedUpCapsules },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd2UseCommunicator },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::muddaFiredAlienDevice },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd2LookAtCapsules },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::mudd2UseMTricorderOnCapsules },
+ { {ACTION_USE, OBJECT_ICAPSULE, 0x23, 0}, &Room::mudd2UseCapsuleOnControlPanel },
+ { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::mudd2MccoyReachedControlPanel },
+ { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::mudd2MccoyPutCapsuleInControlPanel },
+ { {ACTION_USE, OBJECT_KIRK, 0x24, 0}, &Room::mudd2UseKirkOnBed },
+ { {ACTION_USE, OBJECT_KIRK, 0x25, 0}, &Room::mudd2UseKirkOnBed },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::mudd2KirkReachedBed },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd2MuddNoticedKirk },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd2MuddDroppedCapsule },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::mudd2UsePhaserOnMudd },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::mudd2UsePhaserOnMudd },
+
+ { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::mudd2UseSpockOnMudd },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::mudd2SpockReachedMudd },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::mudd2SpockPinchedMudd },
+ { {ACTION_USE, OBJECT_KIRK, 8, 0}, &Room::mudd2UseKirkOnMudd },
+
+ { {ACTION_USE, OBJECT_REDSHIRT, 8, 0}, &Room::mudd2UseRedshirtOnMudd },
+ { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::mudd2RedshirtReachedMudd },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd2Timer2Expired },
+ { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::mudd2MuddFinishedPushingRedshirt },
+ { {ACTION_FINISHED_ANIMATION, 16, 0, 0}, &Room::mudd2RedshirtPushedAway },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::mudd2UseMTricorderOnMudd },
+ { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::mudd2UseMedkitOnMudd },
+ { {ACTION_USE, OBJECT_MCCOY, 8, 0}, &Room::mudd2UseMedkitOnMudd },
+ { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::mudd2MccoyReachedMudd },
+ { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::mudd2MccoyCuredMudd },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd2LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd2LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd2LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd2LookAtRedshirt },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::mudd2LookAtMudd },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd2LookAtControlPanel },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::mudd2LookAtBed },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd2LookAtBed },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd2TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd2TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd2TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd2TalkToRedshirt },
+ { {ACTION_TALK, 8, 0, 0}, &Room::mudd2TalkToMudd },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::mudd2WalkToNorthDoor() {
_roomVar.mudd.walkingToDoor = true;
_awayMission->disableInput = true;
diff --git a/engines/startrek/rooms/mudd3.cpp b/engines/startrek/rooms/mudd3.cpp
index 6c524ced8a..6f8bc64a2a 100644
--- a/engines/startrek/rooms/mudd3.cpp
+++ b/engines/startrek/rooms/mudd3.cpp
@@ -36,6 +36,55 @@
namespace StarTrek {
+extern const RoomAction mudd3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd3Tick1 },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd3UseCommunicator },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd3LookAtScreen },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd3UseSTricorderOnScreen },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::mudd3UseKirkOnScreen },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::mudd3UseSpockOnSphere },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd3Timer3Expired },
+ { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::mudd3UseMccoyOnSphere },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::mudd3UseRedshirtOnSphere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::mudd3UseMTricorderOnSphere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd3UseSTricorderOnSphere },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd3ReadyToHookUpTricorders },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd3Timer1Expired },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd3Timer2Expired },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::mudd3Timer4Expired },
+ { {ACTION_USE, OBJECT_IDISKS, 0x21, 0}, &Room::mudd3UseMemoryDiskOnSphere },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
+
+ { {ACTION_GET, 13, 0, 0}, &Room::mudd3GetRepairTool },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd3ReachedRepairTool },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd3PickedUpRepairTool },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd3LookAtSphere },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd3WalkToNorthDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd3TouchedHotspot0 },
+ { {ACTION_WALK, 0x23, 0, 0}, &Room::mudd3WalkToEastDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 1, 0, 0}, &Room::mudd3TouchedHotspot1 },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd3LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd3LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd3LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd3LookAtRedshirt },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::mudd3LookAtMudd },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd3TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd3TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd3TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd3TalkToRedshirt },
+ { {ACTION_TALK, 8, 0, 0}, &Room::mudd3TalkToMudd },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd3UseMedkit },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
// BUG-ish: trying to scan the sphere while someone is behind it causes it to scan that
// object instead.
diff --git a/engines/startrek/rooms/mudd4.cpp b/engines/startrek/rooms/mudd4.cpp
index 232d6daf10..1a837f9b9c 100644
--- a/engines/startrek/rooms/mudd4.cpp
+++ b/engines/startrek/rooms/mudd4.cpp
@@ -36,6 +36,86 @@
namespace StarTrek {
+extern const RoomAction mudd4ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd4Tick1 },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd4UseCommunicator },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd4Timer2Expired },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd4Timer3Expired },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::mudd4UseSpockOnLeftConsole },
+ { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::mudd4UseSpockOnLeftConsole },
+ { {ACTION_USE, OBJECT_SPOCK, 0x23, 0}, &Room::mudd4UseSpockOnRightConsole },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::mudd4SpockReachedChair },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::mudd4SpockSatInChair },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd4SpockUsedSensors },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::mudd4SpockUsedEngineering },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::mudd4SpockUsedNavigation },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::mudd4FinishedWalking3 },
+ { {ACTION_USE, OBJECT_KIRK, 0x21, 0}, &Room::mudd4UseKirkOnRightConsole },
+ { {ACTION_USE, OBJECT_KIRK, 0x23, 0}, &Room::mudd4UseKirkOnRightConsole },
+ { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::mudd4UseKirkOnLeftConsole },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd4KirkReachedRightConsole },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::mudd4KirkSatInChair },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::mudd4KirkUsedViewScreen },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd4Timer1Expired },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::mudd4KirkUsedCommunications },
+ { {ACTION_FINISHED_WALKING, 4, 0, 0}, &Room::mudd4KirkReachedPositionToTalkToMudd },
+ { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::mudd4UseMccoyOnConsole },
+ { {ACTION_USE, OBJECT_MCCOY, 0x22, 0}, &Room::mudd4UseMccoyOnConsole },
+ { {ACTION_USE, OBJECT_MCCOY, 0x23, 0}, &Room::mudd4UseMccoyOnConsole },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::mudd4UseRedshirtOnConsole },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::mudd4UseRedshirtOnConsole },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x23, 0}, &Room::mudd4UseRedshirtOnConsole },
+ { {ACTION_USE, OBJECT_ISTRICOR, 10, 0}, &Room::mudd4UseSTricorderOnRepairTool },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd4UseSTricorderOnConsole },
+
+ // ENHANCEMENT: Allow scanning the console to work when scanning the specific stations
+ // as well
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd4UseSTricorderOnConsole },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::mudd4UseSTricorderOnConsole },
+
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd4UseSTricorderOnViewscreen },
+
+ // ENHANCEMENT: Allow scanning the viewscreen when it's on, not just when off
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::mudd4UseSTricorderOnViewscreen },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd4UseMedkit },
+ { {ACTION_GET, 10, 0, 0}, &Room::mudd4GetRepairTool },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::mudd4ReachedRepairTool },
+ { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::mudd4PickedUpRepairTool },
+
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd4LookAtConsole },
+ // ENHANCEMENT: Allow look action work with the specific stations as well
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd4LookAtConsole },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd4LookAtConsole },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd4LookAtViewscreen },
+ // ENHANCEMENT: Allow look action work when viewscreen is on, not just when off
+ { {ACTION_LOOK, 8, 0, 0}, &Room::mudd4LookAtViewscreen },
+
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd4LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd4LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd4LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd4LookAtRedshirt },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::mudd4LookAtRepairTool },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd4TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd4TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd4TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd4TalkToRedshirt },
+ { {ACTION_WALK, 0x24, 0, 0}, &Room::mudd4WalkToEastDoor },
+ { {ACTION_WALK, 0x25, 0, 0}, &Room::mudd4WalkToWestDoor },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd4TouchedHotspot0 },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::mudd4Tick1() {
playVoc("MUD4LOOP");
diff --git a/engines/startrek/rooms/mudd5.cpp b/engines/startrek/rooms/mudd5.cpp
index 23080500ba..52e2d3defc 100644
--- a/engines/startrek/rooms/mudd5.cpp
+++ b/engines/startrek/rooms/mudd5.cpp
@@ -37,6 +37,53 @@ const int16 GENERATOR_Y = 0xb0;
namespace StarTrek {
+extern const RoomAction mudd5ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::mudd5Tick1 },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd5Timer1Expired },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::mudd5Timer2Expired },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::mudd5UseCommunicator },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::mudd5UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::mudd5UseSTricorderOnEngine },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd5UseSTricorderOnCrane },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd5UseSTricorderOnHatch },
+ { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::mudd5UseSTricorderOnLifeSupportGenerator },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x20, 0}, &Room::mudd5UseStunPhaserOnHatch },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x20, 0}, &Room::mudd5UseKillPhaserOnHatch },
+ { {ACTION_USE, 0xff, 9, 0}, &Room::mudd5UseAnythingOnLifeSupportGenerator },
+ { {ACTION_USE, OBJECT_IDOOVER, 9, 0}, &Room::mudd5UseDooverOnLifeSupportGenerator },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::mudd5KirkReachedLifeSupportGenerator },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::mudd5KirkTimer4Expired },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::mudd5KirkRepairedLifeSupportGenerator },
+ { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::mudd5KirkTimer3Expired },
+
+ // Common code (next 4 lines)
+ { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer },
+ { {ACTION_USE, OBJECT_IALIENDV, 0xff, 0}, &Room::muddaUseAlienDevice },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice },
+ { {ACTION_USE, OBJECT_IDEGRIME, 0xff, 0}, &Room::muddaUseDegrimer },
+
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd5LookAtHatch },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::mudd5LookAtLifeSupportGenerator },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::mudd5TouchedHotspot0 },
+ { {ACTION_WALK, 0x22, 0, 0}, &Room::mudd5WalkToDoor },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::mudd5LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::mudd5LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::mudd5LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd5LookAtRedshirt },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd5LookAtDoor },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd5LookAtCrane },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd5LookAtEngine },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::mudd5TalkToKirk },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::mudd5TalkToSpock },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::mudd5TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::mudd5TalkToRedshirt },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::mudd5UseMedkit },
+
+ // Common code (countdown for losing atmosphere when life support malfunctioning)
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::muddaTick },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::mudd5Tick1() {
playVoc("MUD5LOOP");
diff --git a/engines/startrek/rooms/sins0.cpp b/engines/startrek/rooms/sins0.cpp
index 5b50896544..18db05b92e 100644
--- a/engines/startrek/rooms/sins0.cpp
+++ b/engines/startrek/rooms/sins0.cpp
@@ -72,12 +72,9 @@ extern const RoomAction sins0ActionList[] = {
{ {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::sins0UseCommunicator },
{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::sins0WalkToDoor },
{ {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::sins0WalkToDoor },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-
-extern const int sins0NumActions = ARRAYSIZE(sins0ActionList);
-
-
void Room::sins0Tick1() {
playVoc("SIN0LOOP");
diff --git a/engines/startrek/rooms/sins1.cpp b/engines/startrek/rooms/sins1.cpp
index 073837bc06..79e9a83b5f 100644
--- a/engines/startrek/rooms/sins1.cpp
+++ b/engines/startrek/rooms/sins1.cpp
@@ -84,11 +84,9 @@ extern const RoomAction sins1ActionList[] = {
{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::sins1WalkToDoor },
{ {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::sins1WalkToDoor },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int sins1NumActions = ARRAYSIZE(sins1ActionList);
-
-
void Room::sins1Tick1() {
playVoc("SIN1LOOP");
diff --git a/engines/startrek/rooms/sins2.cpp b/engines/startrek/rooms/sins2.cpp
index 2d6fb5ad81..115a97e1ee 100644
--- a/engines/startrek/rooms/sins2.cpp
+++ b/engines/startrek/rooms/sins2.cpp
@@ -82,11 +82,9 @@ extern const RoomAction sins2ActionList[] = {
{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::sins2WalkToDoor },
{ {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::sins2WalkToDoor },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int sins2NumActions = ARRAYSIZE(sins2ActionList);
-
-
void Room::sins2Tick1() {
playVoc("SIN2LOOP");
playMidiMusicTracks(MIDITRACK_27, -3);
diff --git a/engines/startrek/rooms/sins3.cpp b/engines/startrek/rooms/sins3.cpp
index 2704e111ed..efeb17edfe 100644
--- a/engines/startrek/rooms/sins3.cpp
+++ b/engines/startrek/rooms/sins3.cpp
@@ -120,11 +120,9 @@ extern const RoomAction sins3ActionList[] = {
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::sins3UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::sins3UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::sins3UseMTricorderOnCrewman },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int sins3NumActions = ARRAYSIZE(sins3ActionList);
-
-
void Room::sins3Tick1() {
playVoc("SIN3LOOP");
diff --git a/engines/startrek/rooms/sins4.cpp b/engines/startrek/rooms/sins4.cpp
index fa765874c3..4c1f0d4586 100644
--- a/engines/startrek/rooms/sins4.cpp
+++ b/engines/startrek/rooms/sins4.cpp
@@ -90,11 +90,9 @@ extern const RoomAction sins4ActionList[] = {
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::sins4UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::sins4UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::sins4UseMTricorderOnCrewman },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int sins4NumActions = ARRAYSIZE(sins4ActionList);
-
-
void Room::sins4Tick1() {
playVoc("SIN4LOOP");
diff --git a/engines/startrek/rooms/sins5.cpp b/engines/startrek/rooms/sins5.cpp
index 14446525f5..9aa3e1fca3 100644
--- a/engines/startrek/rooms/sins5.cpp
+++ b/engines/startrek/rooms/sins5.cpp
@@ -127,11 +127,9 @@ extern const RoomAction sins5ActionList[] = {
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0}, &Room::sins5UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0}, &Room::sins5UseMTricorderOnCrewman },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0}, &Room::sins5UseMTricorderOnCrewman },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int sins5NumActions = ARRAYSIZE(sins5ActionList);
-
-
void Room::sins5Tick1() {
playVoc("SIN5LOOP");
diff --git a/engines/startrek/rooms/trial0.cpp b/engines/startrek/rooms/trial0.cpp
index e1d45e609e..afb36e936e 100644
--- a/engines/startrek/rooms/trial0.cpp
+++ b/engines/startrek/rooms/trial0.cpp
@@ -78,11 +78,9 @@ extern const RoomAction trial0ActionList[] = {
{ {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 },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial0NumActions = ARRAYSIZE(trial0ActionList);
-
-
void Room::trial0Tick1() {
playVoc("TRI0LOOP");
_awayMission->timers[0] = getRandomWordInRange(180, 600);
diff --git a/engines/startrek/rooms/trial1.cpp b/engines/startrek/rooms/trial1.cpp
index 9163c1578b..9551b4b4b7 100644
--- a/engines/startrek/rooms/trial1.cpp
+++ b/engines/startrek/rooms/trial1.cpp
@@ -164,11 +164,9 @@ extern const RoomAction trial1ActionList[] = {
{ {ACTION_USE, OBJECT_IPHASERK, OBJECT_DOOR, 0}, &Room::trial1UsePhaserOnDoor },
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_DOOR, 0}, &Room::trial1UseSTricorderOnDoor },
{ {ACTION_WALK, OBJECT_DOOR, 0, 0}, &Room::trial1WalkToDoor },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial1NumActions = ARRAYSIZE(trial1ActionList);
-
-
void Room::trial1Tick1() {
if (!_awayMission->trial.doorOpen) {
_awayMission->disableInput = 2;
diff --git a/engines/startrek/rooms/trial2.cpp b/engines/startrek/rooms/trial2.cpp
index e8d580c32c..dbf96ce480 100644
--- a/engines/startrek/rooms/trial2.cpp
+++ b/engines/startrek/rooms/trial2.cpp
@@ -118,11 +118,9 @@ extern const RoomAction trial2ActionList[] = {
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_GLOB, 0}, &Room::trial2UseMccoyOnGlob },
{ {ACTION_USE, OBJECT_SPOCK, OBJECT_GLOB, 0}, &Room::trial2UseSpockOnGlob },
{ {ACTION_USE, OBJECT_REDSHIRT, OBJECT_GLOB, 0}, &Room::trial2UseRedshirtOnGlob },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial2NumActions = ARRAYSIZE(trial2ActionList);
-
-
void Room::trial2Tick1() {
playVoc("NOOOLOOP");
diff --git a/engines/startrek/rooms/trial3.cpp b/engines/startrek/rooms/trial3.cpp
index 0c321bcba4..02a3e43c00 100644
--- a/engines/startrek/rooms/trial3.cpp
+++ b/engines/startrek/rooms/trial3.cpp
@@ -89,11 +89,9 @@ extern const RoomAction trial3ActionList[] = {
{ {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_WALL, 0}, &Room::trial3UseRedshirtOnWall },
{ {ACTION_WALK, HOTSPOT_EXIT, 0, 0}, &Room::trial3WalkToExit },
{ {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::trial3UseMedkitAnywhere },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial3NumActions = ARRAYSIZE(trial3ActionList);
-
-
void Room::trial3Tick1() {
playVoc("TRI3LOOP");
diff --git a/engines/startrek/rooms/trial4.cpp b/engines/startrek/rooms/trial4.cpp
index 5faeed10b5..f775da457e 100644
--- a/engines/startrek/rooms/trial4.cpp
+++ b/engines/startrek/rooms/trial4.cpp
@@ -31,11 +31,9 @@ namespace StarTrek {
extern const RoomAction trial4ActionList[] = {
{ {ACTION_TICK, 1, 0, 0}, &Room::trial4Tick1 },
{ {ACTION_TICK, 60, 0, 0}, &Room::trial4Tick60 },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial4NumActions = ARRAYSIZE(trial4ActionList);
-
-
void Room::trial4Tick1() {
playVoc("TRI4LOOP");
diff --git a/engines/startrek/rooms/trial5.cpp b/engines/startrek/rooms/trial5.cpp
index 85761368fd..7163247a8c 100644
--- a/engines/startrek/rooms/trial5.cpp
+++ b/engines/startrek/rooms/trial5.cpp
@@ -158,11 +158,9 @@ extern const RoomAction trial5ActionList[] = {
{ {ACTION_USE, OBJECT_IBLUGEM3, HOTSPOT_HOLE3, 0}, &Room::trial5UseBlueGem3OnHole3 },
{ {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::trial5UseMedkitAnywhere },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int trial5NumActions = ARRAYSIZE(trial5ActionList);
-
-
void Room::trial5Tick1() {
playVoc("TRI5LOOP");
playMidiMusicTracks(MIDITRACK_31, -1);
diff --git a/engines/startrek/rooms/tug0.cpp b/engines/startrek/rooms/tug0.cpp
index 912b44e703..70049b71a5 100644
--- a/engines/startrek/rooms/tug0.cpp
+++ b/engines/startrek/rooms/tug0.cpp
@@ -24,6 +24,82 @@
namespace StarTrek {
+extern const RoomAction tug0ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::tug0Tick1 },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::tug0LookAtEngineer },
+ { {ACTION_GET, 8, 0, 0}, &Room::tug0GetEngineer },
+
+ { {ACTION_LOOK, 11, 0, 0}, &Room::tug0LookAtControls },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug0LookAtControls },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::tug0UseSpockOnControls },
+ { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::tug0SpockReachedControlsToExamine },
+ { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::tug0SpockExaminedControls },
+ { {ACTION_USE, OBJECT_IRT, 0x21, 0}, &Room::tug0UseTransmogrifierWithoutBitOnControls },
+ { {ACTION_USE, OBJECT_IRTWB, 0x21, 0}, &Room::tug0UseTransmogrifierWithBitOnControls },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug0SpockReachedControlsWithTransmogrifier },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug0SpockFinishedUsingTransmogrifier },
+ { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::tug0TransporterScreenFullyLit },
+ { {ACTION_USE, OBJECT_IWIRSCRP, 0x21, 0}, &Room::tug0UseWireScrapsOnControls },
+ { {ACTION_USE, OBJECT_IWIRING, 0x21, 0}, &Room::tug0UseWireOnControls },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug0SpockReachedControlsWithWire },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::tug0SpockFinishedUsingWire },
+ { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::tug0UseMedkitOnEngineer },
+ { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::tug0MccoyReachedEngineer },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug0MccoyHealedEngineer },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::tug0EngineerGotUp },
+ { {ACTION_GET, 9, 0, 0}, &Room::tug0GetTransmogrifier },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::tug0KirkReachedToolbox },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug0KirkGotTransmogrifier },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::tug0LookAtToolbox },
+
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug0UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug0UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug0UseWelderOnWireScraps },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug0UseWelderOnMetalScraps },
+ { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug0UseCombBitOnTransmogrifier },
+
+ { {ACTION_USE, OBJECT_SPOCK, 11, 0}, &Room::tug0UseTransporter },
+ { {ACTION_USE, OBJECT_KIRK, 0x22, 0}, &Room::tug0UseTransporter },
+ { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::tug0SpockReachedControlsToTransport },
+ { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::tug0SpockPreparedTransporter },
+ { {ACTION_FINISHED_WALKING, 20, 0, 0}, &Room::tug0SpockReachedTransporter },
+ { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::tug0FinishedTransporting },
+
+ { {ACTION_USE, OBJECT_IBOMB, 0x22, 0}, &Room::tug0UseBombOnTransporter },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::tug0KirkReachedTransporter },
+ { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::tug0KirkPlacedBomb },
+ { {ACTION_FINISHED_WALKING, 15, 0, 0}, &Room::tug0SpockReachedControlsForBomb },
+ { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::tug0SpockBeginsBeamingBomb },
+ { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::tug0SpockFinishesBeamingBomb },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug0BombExploded },
+
+ { {ACTION_USE, OBJECT_MCCOY, 0x21, 0}, &Room::tug0UseMTricorderOnControls },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::tug0UseMTricorderOnControls },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::tug0UseSTricorderOnControls },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::tug0UseMTricorderOnEngineer },
+ { {ACTION_FINISHED_WALKING, 24, 0, 0}, &Room::tug0MccoyReachedEngineerToScan },
+ { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::tug0MccoyFinishedScanningEngineer },
+ { {ACTION_USE, OBJECT_SPOCK, 8, 0}, &Room::tug0UseSTricorderOnEngineer },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::tug0UseSTricorderOnEngineer },
+ { {ACTION_WALK, 0x23, 0, 0}, &Room::tug0WalkToDoor },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::tug0LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug0LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug0LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug0LookAtRedshirt },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::tug0LookAtTransporter },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::tug0LookAtDoor },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug0TalkToKirk },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug0TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug0TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug0TalkToRedshirt },
+ { {ACTION_TALK, 8, 0, 0}, &Room::tug0TalkToEngineer },
+ { {ACTION_USE, OBJECT_ICOMM, 0, 0}, &Room::tug0UseCommunicator },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug0LookAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::tug0UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::tug0UseMTricorderAnywhere },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::tug0Tick1() {
playVoc("TUG0LOOP");
playMidiMusicTracks(0, -1);
diff --git a/engines/startrek/rooms/tug1.cpp b/engines/startrek/rooms/tug1.cpp
index aa9a808d85..35efce1b0f 100644
--- a/engines/startrek/rooms/tug1.cpp
+++ b/engines/startrek/rooms/tug1.cpp
@@ -33,6 +33,69 @@ namespace StarTrek {
#define HOTSPOT_DEBRIS 0x24
#define HOTSPOT_BRIGDOOR 0x25
+extern const RoomAction tug1ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::tug1Tick1 },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::tug1UseSTricorderOnAnything },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug1LookAtBridgeDoor },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x21, 0}, &Room::tug1UseSTricorderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IPHASERS, 0x21, 0}, &Room::tug1UsePhaserOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IPHASERK, 0x21, 0}, &Room::tug1UsePhaserOnBridgeDoor },
+ { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::tug1KirkReachedFiringPosition },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug1KirkPulledOutPhaser },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::tug1KirkFinishedFiringPhaser },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug1TalkToSpock },
+ { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::tug1UseSTricorderOnJunkPile },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::tug1LookAtJunkPile },
+ { {ACTION_GET, 8, 0, 0}, &Room::tug1GetJunkPile },
+ { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::tug1KirkReachedJunkPile },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::tug1KirkFinishedTakingJunkPile },
+
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug1UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug1UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug1UseWelderOnWireScraps },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug1UseWelderOnMetalScraps },
+ { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug1UseCombBitOnTransmogrifier },
+
+ { {ACTION_USE, OBJECT_IPWF, 0x22, 0}, &Room::tug1UsePhaserWelderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IPWF, 0x21, 0}, &Room::tug1UsePhaserWelderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IPWF, 0x20, 0}, &Room::tug1UsePhaserWelderOnBridgeDoorInLeftSpot },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug1KirkReachedBridgeDoorWithWelder },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug1KirkFinishedUsingWelder },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug1KirkReachedBridgeDoorWithWelderInLeftSpot },
+ { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::tug1KirkFinishedUsingWelderInLeftSpot },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug1LookAnywhere },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug1LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug1LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug1LookAtRedshirt },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug1TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug1TalkToRedshirt },
+ { {ACTION_LOOK, 0x23, 0, 0}, &Room::tug1LookAtTerminal },
+ { {ACTION_LOOK, 0x24, 0, 0}, &Room::tug1LookAtDebris },
+ { {ACTION_LOOK, 0x25, 0, 0}, &Room::tug1LookAtBrigDoor },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x25, 0}, &Room::tug1UseSTricorderOnBrigDoor },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug1TalkToKirk },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::tug1UseCommunicator },
+ { {ACTION_WALK, 0x21, 0, 0}, &Room::tug1WalkToBridgeDoor },
+ { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::tug1KirkReachedBridgeDoor },
+ { {ACTION_FINISHED_ANIMATION, 11, 0, 0}, &Room::tug1BridgeDoorOpened },
+ { {ACTION_WALK, 0x25, 0, 0}, &Room::tug1WalkToBrigDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0xff, 0}, &Room::tug1UseMTricorderAnywhere },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x21, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x20, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::tug1UseMTricorderOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x25, 0}, &Room::tug1UseMTricorderOnBrigDoor },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::tug1UseSpockOnBridgeDoor },
+ { {ACTION_USE, OBJECT_SPOCK, 0x21, 0}, &Room::tug1UseSpockOnBridgeDoor },
+ { {ACTION_USE, OBJECT_SPOCK, 0x22, 0}, &Room::tug1UseSpockOnBridgeDoor },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x21, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x22, 0}, &Room::tug1UseRedshirtOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0x20, 0}, &Room::tug1UseMedkitOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0x21, 0}, &Room::tug1UseMedkitOnBridgeDoor },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0x22, 0}, &Room::tug1UseMedkitOnBridgeDoor },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::tug1Tick1() {
playVoc("TUG1LOOP");
diff --git a/engines/startrek/rooms/tug2.cpp b/engines/startrek/rooms/tug2.cpp
index b3cabaee3b..662577535d 100644
--- a/engines/startrek/rooms/tug2.cpp
+++ b/engines/startrek/rooms/tug2.cpp
@@ -40,6 +40,98 @@ namespace StarTrek {
#define GUARDSTAT_DEAD 2
#define GUARDSTAT_TIED 8
+extern const RoomAction tug2ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::tug2Tick1 },
+ { {ACTION_TICK, 60, 0, 0}, &Room::tug2Tick60 },
+ { {ACTION_LOOK, 0x20, 0, 0}, &Room::tug2LookAtButton },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug2LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug2LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug2LookAtRedshirt },
+ { {ACTION_GET, 11, 0, 0}, &Room::tug2GetBomb },
+ { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::tug2KirkReachedBomb },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug2KirkGotBomb },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::tug2LookAtBomb },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::tug2LookAtGuard1 },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::tug2LookAtGuard2 },
+ { {ACTION_LOOK, 12, 0, 0}, &Room::tug2LookAtWires },
+ { {ACTION_USE, OBJECT_ISTRICOR, 12, 0}, &Room::tug2UseSTricorderOnButton },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::tug2UseSTricorderOnButton },
+ { {ACTION_USE, OBJECT_MCCOY, 12, 0}, &Room::tug2UseMccoyOnWires },
+ { {ACTION_USE, OBJECT_MCCOY, 11, 0}, &Room::tug2UseMccoyOnBomb },
+ { {ACTION_USE, OBJECT_REDSHIRT, 12, 0}, &Room::tug2UseRedshirtOnWires },
+ { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::tug2RedshirtReachedWires },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug2RedshirtDefusedBomb },
+ { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::tug2RedshirtReturnedToPosition },
+ { {ACTION_USE, OBJECT_KIRK, 12, 0}, &Room::tug2UseKirkOnWires },
+ { {ACTION_FINISHED_WALKING, 5, 0, 0}, &Room::tug2KirkReachedWires },
+ { {ACTION_USE, OBJECT_SPOCK, 12, 0}, &Room::tug2UseSpockOnWires },
+ { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::tug2SpockReachedWires },
+ { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::tug2SpockReturnedToPosition },
+ { {ACTION_GET, 12, 0, 0}, &Room::tug2GetWires },
+ { {ACTION_FINISHED_WALKING, 28, 0, 0}, &Room::tug2KirkReachedWiresToGet },
+ { {ACTION_FINISHED_ANIMATION, 29, 0, 0}, &Room::tug2KirkGotWires },
+ { {ACTION_USE, OBJECT_KIRK, 0x20, 0}, &Room::tug2UseKirkOnButton },
+ { {ACTION_FINISHED_WALKING, 14, 0, 0}, &Room::tug2KirkReachedButton },
+ { {ACTION_USE, OBJECT_SPOCK, 0x20, 0}, &Room::tug2UseSpockOnButton },
+ { {ACTION_FINISHED_WALKING, 16, 0, 0}, &Room::tug2SpockReachedButton },
+ { {ACTION_USE, OBJECT_MCCOY, 0x20, 0}, &Room::tug2UseMccoyOnButton },
+ { {ACTION_FINISHED_WALKING, 18, 0, 0}, &Room::tug2MccoyReachedButton },
+ { {ACTION_USE, OBJECT_REDSHIRT, 0x20, 0}, &Room::tug2UseRedshirtOnButton },
+ { {ACTION_FINISHED_WALKING, 20, 0, 0}, &Room::tug2RedshirtReachedButton },
+ { {ACTION_FINISHED_ANIMATION, 15, 0, 0}, &Room::tug2TurnedOffForceField },
+ { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::tug2TurnedOffForceField },
+ { {ACTION_FINISHED_ANIMATION, 19, 0, 0}, &Room::tug2TurnedOffForceField },
+ { {ACTION_FINISHED_ANIMATION, 21, 0, 0}, &Room::tug2TurnedOffForceField },
+ { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::tug2PrisonersDead },
+ { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::tug2PrisonersReleased },
+ { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::tug2UsePhaserOnBrig },
+ { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::tug2UsePhaserOnBrig },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::tug2UseStunPhaserOnGuard1 },
+ { {ACTION_FINISHED_ANIMATION, 22, 0, 0}, &Room::tug2KirkShootGuard1 },
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::tug2UseStunPhaserOnGuard2 },
+ { {ACTION_FINISHED_ANIMATION, 23, 0, 0}, &Room::tug2KirkShootGuard2 },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::tug2UseKillPhaserOnGuard1 },
+ { {ACTION_FINISHED_ANIMATION, 24, 0, 0}, &Room::tug2KirkKillGuard1 },
+ { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::tug2UseKillPhaserOnGuard2 },
+ { {ACTION_FINISHED_ANIMATION, 25, 0, 0}, &Room::tug2KirkKillGuard2 },
+
+ { {ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0}, &Room::tug2UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0}, &Room::tug2UsePhaserOnWelder },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0}, &Room::tug2UseWelderOnWireScraps },
+ { {ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0}, &Room::tug2UseWelderOnMetalScraps },
+ { {ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0}, &Room::tug2UseCombBitOnTransmogrifier },
+
+ { {ACTION_FINISHED_ANIMATION, 26, 0, 0}, &Room::tug2ShotByElasi },
+ { {ACTION_FINISHED_ANIMATION, 27, 0, 0}, &Room::tug2ShotByElasi },
+ { {ACTION_WALK, 0x21, 0, 0}, &Room::tug2WalkToDoor },
+ { {ACTION_LOOK, 0x21, 0, 0}, &Room::tug2LookAtDoor },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::tug2LookAtKirk },
+ { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::tug2TalkToKirk },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug2TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug2TalkToRedshirt },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug2TalkToSpock },
+ { {ACTION_USE, OBJECT_ICOMM, 0, 0}, &Room::tug2UseCommunicator },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug2Timer0Expired },
+ { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::tug2Timer2Expired },
+ { {ACTION_USE, OBJECT_ISTRICOR, 11, 0}, &Room::tug2UseSTricorderOnBomb },
+ { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::tug2UseMTricorderOnGuard1 },
+ { {ACTION_USE, OBJECT_IMTRICOR, 9, 0}, &Room::tug2UseMTricorderOnGuard2 },
+ { {ACTION_TALK, 8, 0, 0}, &Room::tug2TalkToGuard1 },
+ { {ACTION_TALK, 9, 0, 0}, &Room::tug2TalkToGuard2 },
+ { {ACTION_USE, OBJECT_IMEDKIT, 11, 0}, &Room::tug2UseMedkitOnBomb },
+ { {ACTION_USE, OBJECT_IMEDKIT, 8, 0}, &Room::tug2UseMedkitOnGuard1 },
+ { {ACTION_USE, OBJECT_IMEDKIT, 9, 0}, &Room::tug2UseMedkitOnGuard2 },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::tug2LookAnywhere },
+ { {ACTION_LOOK, 0x22, 0, 0}, &Room::tug2LookAnywhere },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug2LookAnywhere },
+ { {ACTION_TALK, 10, 0, 0}, &Room::tug2TalkToBrig },
+ { {ACTION_USE, OBJECT_IMTRICOR, 10, 0}, &Room::tug2UseMTricorderOnBrig },
+ { {ACTION_USE, OBJECT_IMTRICOR, 0x22, 0}, &Room::tug2UseMTricorderOnOpenBrig },
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::tug2UsePhaserAnywhere },
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::tug2UsePhaserAnywhere },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::tug2Tick1() {
playVoc("TUG2LOOP");
diff --git a/engines/startrek/rooms/tug3.cpp b/engines/startrek/rooms/tug3.cpp
index 87f08a7545..9ac4b78177 100644
--- a/engines/startrek/rooms/tug3.cpp
+++ b/engines/startrek/rooms/tug3.cpp
@@ -39,6 +39,44 @@ namespace StarTrek {
#define GUARDSTAT_SURRENDERED 4
#define GUARDSTAT_TIED 8
+extern const RoomAction tug3ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::tug3Tick1 },
+ { {ACTION_TICK, 40, 0, 0}, &Room::tug3Tick40 },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::tug3LookAnywhere },
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::tug3UsePhaserAnywhere },
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::tug3UsePhaserAnywhere },
+ { {ACTION_USE, OBJECT_IPHASERS, 8, 0}, &Room::tug3UseStunPhaserOnElasi1 },
+ { {ACTION_USE, OBJECT_IPHASERS, 9, 0}, &Room::tug3UseStunPhaserOnElasi2 },
+ { {ACTION_USE, OBJECT_IPHASERS, 10, 0}, &Room::tug3UseStunPhaserOnElasi3 },
+ { {ACTION_USE, OBJECT_IPHASERS, 11, 0}, &Room::tug3UseStunPhaserOnElasi4 },
+ { {ACTION_USE, OBJECT_IPHASERK, 8, 0}, &Room::tug3UseKillPhaserOnElasi1 },
+ { {ACTION_USE, OBJECT_IPHASERK, 9, 0}, &Room::tug3UseKillPhaserOnElasi2 },
+ { {ACTION_USE, OBJECT_IPHASERK, 10, 0}, &Room::tug3UseKillPhaserOnElasi3 },
+ { {ACTION_USE, OBJECT_IPHASERK, 11, 0}, &Room::tug3UseKillPhaserOnElasi4 },
+ { {ACTION_FINISHED_ANIMATION, 12, 0, 0}, &Room::tug3ElasiStunnedOrKilled },
+ { {ACTION_TALK, 8, 0, 0}, &Room::tug3TalkToElasi1 },
+ { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::tug3Elasi1DrewPhaser },
+ { {ACTION_FINISHED_ANIMATION, 4, 0, 0}, &Room::tug3Elasi1ShotConsole },
+ { {ACTION_FINISHED_ANIMATION, 5, 0, 0}, &Room::tug3Elasi1DrewPhaser2 },
+ { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::tug3Elasi1ShotConsoleAndSurrenders },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::tug3LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::tug3LookAtSpock },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::tug3LookAtRedshirt },
+ { {ACTION_LOOK, 8, 0, 0}, &Room::tug3LookAtElasi1 },
+ { {ACTION_LOOK, 9, 0, 0}, &Room::tug3LookAtElasi2 },
+ { {ACTION_LOOK, 10, 0, 0}, &Room::tug3LookAtElasi3 },
+ { {ACTION_LOOK, 11, 0, 0}, &Room::tug3LookAtElasi4 },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::tug3TalkToMccoy },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::tug3TalkToSpock },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::tug3TalkToRedshirt },
+ { {ACTION_USE, OBJECT_ICOMM, 0xff, 0}, &Room::tug3UseCommunicator },
+ { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::tug3Timer0Expired },
+ { {ACTION_FINISHED_ANIMATION, 13, 0, 0}, &Room::tug3AllCrewmenDead },
+ { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::tug3Timer1Expired },
+ { {ACTION_FINISHED_ANIMATION, 7, 0, 0}, &Room::tug3SecurityTeamBeamedIn },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
+};
+
void Room::tug3Tick1() {
playVoc("TUG3LOOP");
diff --git a/engines/startrek/rooms/veng0.cpp b/engines/startrek/rooms/veng0.cpp
index cd09a21358..1121ee80d6 100644
--- a/engines/startrek/rooms/veng0.cpp
+++ b/engines/startrek/rooms/veng0.cpp
@@ -104,11 +104,9 @@ extern const RoomAction veng0ActionList[] = {
{ {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::vengaUsePhaserAnywhere },
{ {ACTION_LOOK, OBJECT_IHYPO, 0, 0}, &Room::vengaLookAtHypo },
{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng0NumActions = ARRAYSIZE(veng0ActionList);
-
-
void Room::veng0Tick1() {
playVoc("VEN0LOOP");
diff --git a/engines/startrek/rooms/veng1.cpp b/engines/startrek/rooms/veng1.cpp
index 48578a2c02..e8f5ac7a6b 100644
--- a/engines/startrek/rooms/veng1.cpp
+++ b/engines/startrek/rooms/veng1.cpp
@@ -125,11 +125,9 @@ extern const RoomAction veng1ActionList[] = {
{ {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng1NumActions = ARRAYSIZE(veng1ActionList);
-
-
void Room::veng1Tick1() {
playVoc("VEN1LOOP");
loadActorAnim2(OBJECT_DOOR, "s7r1d1c", 0xa1, 0x7e);
diff --git a/engines/startrek/rooms/veng2.cpp b/engines/startrek/rooms/veng2.cpp
index a21cde2a8a..5de0119f43 100644
--- a/engines/startrek/rooms/veng2.cpp
+++ b/engines/startrek/rooms/veng2.cpp
@@ -179,11 +179,9 @@ extern const RoomAction veng2ActionList[] = {
{ {ACTION_USE, OBJECT_KIRK, HOTSPOT_TORPEDO_CONTROL, 0}, &Room::veng2UseKirkOnTorpedoButton },
// TODO: uncomment
// { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_DECK_IO_CONSOLE, 0}, &Room::veng2UseSTricorderOnDeckIOConsole },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng2NumActions = ARRAYSIZE(veng2ActionList);
-
-
#define STRICORDER_POS_X 0x45
#define STRICORDER_POS_Y 0x71
diff --git a/engines/startrek/rooms/veng3.cpp b/engines/startrek/rooms/veng3.cpp
index 046de3e327..5c8bcd9d57 100644
--- a/engines/startrek/rooms/veng3.cpp
+++ b/engines/startrek/rooms/veng3.cpp
@@ -100,11 +100,9 @@ extern const RoomAction veng3ActionList[] = {
{ {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng3NumActions = ARRAYSIZE(veng3ActionList);
-
-
void Room::veng3Tick1() {
playVoc("VEN3LOOP");
diff --git a/engines/startrek/rooms/veng4.cpp b/engines/startrek/rooms/veng4.cpp
index 37729dabd5..1d0bbcf29b 100644
--- a/engines/startrek/rooms/veng4.cpp
+++ b/engines/startrek/rooms/veng4.cpp
@@ -96,11 +96,9 @@ extern const RoomAction veng4ActionList[] = {
// ENHANCEMENT (let object count for the "look" action, not just the hotspot)
{ {ACTION_LOOK, OBJECT_LEFT_READINGS, 0, 0}, &Room::veng4LookAtLeftBedReadings },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng4NumActions = ARRAYSIZE(veng4ActionList);
-
-
#define DOOR_X 0x13f
#define DOOR_Y 0xab
diff --git a/engines/startrek/rooms/veng5.cpp b/engines/startrek/rooms/veng5.cpp
index d8461f3151..4d1c6a9108 100644
--- a/engines/startrek/rooms/veng5.cpp
+++ b/engines/startrek/rooms/veng5.cpp
@@ -86,11 +86,9 @@ extern const RoomAction veng5ActionList[] = {
{ {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng5NumActions = ARRAYSIZE(veng5ActionList);
-
-
void Room::veng5Tick1() {
playVoc("VEN5LOOP");
diff --git a/engines/startrek/rooms/veng6.cpp b/engines/startrek/rooms/veng6.cpp
index c67098efa5..906b0e1968 100644
--- a/engines/startrek/rooms/veng6.cpp
+++ b/engines/startrek/rooms/veng6.cpp
@@ -129,11 +129,9 @@ extern const RoomAction veng6ActionList[] = {
// ENHANCEMENT
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMPULSE_ENGINES, 0}, &Room::veng6UseSTricorderOnImpulseEngines },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng6NumActions = ARRAYSIZE(veng6ActionList);
-
-
#define DOOR_X 0x13e
#define DOOR_Y 0xa8
diff --git a/engines/startrek/rooms/veng7.cpp b/engines/startrek/rooms/veng7.cpp
index d82a11eb90..fa3ad1ae2d 100644
--- a/engines/startrek/rooms/veng7.cpp
+++ b/engines/startrek/rooms/veng7.cpp
@@ -71,11 +71,9 @@ extern const RoomAction veng7ActionList[] = {
{ {ACTION_USE, OBJECT_IMEDKIT, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng7NumActions = ARRAYSIZE(veng7ActionList);
-
-
void Room::veng7Tick1() {
playVoc("VEN7LOOP");
diff --git a/engines/startrek/rooms/veng8.cpp b/engines/startrek/rooms/veng8.cpp
index 12731da1a3..97da13fd5e 100644
--- a/engines/startrek/rooms/veng8.cpp
+++ b/engines/startrek/rooms/veng8.cpp
@@ -107,11 +107,9 @@ extern const RoomAction veng8ActionList[] = {
{ {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::vengaUsePhaserAnywhere },
{ {ACTION_LOOK, OBJECT_IHYPO, 0, 0}, &Room::vengaLookAtHypo },
{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
+ { {ACTION_LIST_END, 0, 0, 0}, nullptr }
};
-extern const int veng8NumActions = ARRAYSIZE(veng8ActionList);
-
-
void Room::veng8Tick1() {
playVoc("VEN8LOOP");
Commit: cf559249d55f91a59e54eae512afb41b7c8d8f4a
https://github.com/scummvm/scummvm/commit/cf559249d55f91a59e54eae512afb41b7c8d8f4a
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:39+02:00
Commit Message:
STARTREK: Add a console command to show the score of all missions
Changed paths:
engines/startrek/console.cpp
engines/startrek/console.h
diff --git a/engines/startrek/console.cpp b/engines/startrek/console.cpp
index aecf169c4f..1b0de5c595 100644
--- a/engines/startrek/console.cpp
+++ b/engines/startrek/console.cpp
@@ -36,6 +36,7 @@ Console::Console(StarTrekEngine *vm) : GUI::Debugger(), _vm(vm) {
registerCmd("bg", WRAP_METHOD(Console, Cmd_Bg));
registerCmd("filedump", WRAP_METHOD(Console, Cmd_DumpFile));
registerCmd("filesearch", WRAP_METHOD(Console, Cmd_SearchFile));
+ registerCmd("score", WRAP_METHOD(Console, Cmd_Score));
}
Console::~Console() {
@@ -188,6 +189,18 @@ bool Console::Cmd_SearchFile(int argc, const char **argv) {
return true;
}
+bool Console::Cmd_Score(int argc, const char **argv) {
+ debugPrintf("Chapter 1: Demon world (demon): %d\n", _vm->_awayMission.demon.missionScore);
+ debugPrintf("Chapter 2: Hijacked (tug): %d\n", _vm->_awayMission.tug.missionScore);
+ debugPrintf("Chapter 3: Love's Labor Jeopardized (love): %d\n", _vm->_awayMission.love.missionScore);
+ debugPrintf("Chapter 4: Another Fine Mess (mudd): %d\n", _vm->_awayMission.mudd.missionScore);
+ debugPrintf("Chapter 5A: The Feathered Serpent (feather): %d\n", _vm->_awayMission.feather.missionScore);
+ debugPrintf("Chapter 5B: The Feathered Serpent (trial): %d\n", _vm->_awayMission.trial.missionScore);
+ debugPrintf("Chapter 6: The Old Devil Moon (sins): %d\n", _vm->_awayMission.sins.missionScore);
+ debugPrintf("Chapter 7: Vengeance (veng): %d\n", _vm->_awayMission.veng.missionScore);
+ return true;
+}
+
Common::String Console::EventToString(uint32 action) {
const char *actions[] = {
"Tick",
diff --git a/engines/startrek/console.h b/engines/startrek/console.h
index 67e0ce0c3e..0ca529cb4d 100644
--- a/engines/startrek/console.h
+++ b/engines/startrek/console.h
@@ -43,6 +43,7 @@ private:
bool Cmd_Bg(int argc, const char **argv);
bool Cmd_DumpFile(int argc, const char **argv);
bool Cmd_SearchFile(int argc, const char **argv);
+ bool Cmd_Score(int argc, const char **argv);
Common::String EventToString(uint32 action);
Common::String ItemToString(byte index);
Commit: 8ff4da89808a7bbdee4b94a60f7b0e764b24fe54
https://github.com/scummvm/scummvm/commit/8ff4da89808a7bbdee4b94a60f7b0e764b24fe54
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:39+02:00
Commit Message:
StARTREK: Clean up bitmap file name for some animations
We get invalid characters for the standing Spock animation
Changed paths:
engines/startrek/actors.cpp
diff --git a/engines/startrek/actors.cpp b/engines/startrek/actors.cpp
index 06b09004cb..cc524f8fff 100644
--- a/engines/startrek/actors.cpp
+++ b/engines/startrek/actors.cpp
@@ -182,6 +182,8 @@ void StarTrekEngine::updateActorAnimations() {
actor->animFile->read(animFrameFilename, 16);
actor->bitmapFilename = animFrameFilename;
actor->bitmapFilename.trim();
+ if (actor->bitmapFilename.contains(' '))
+ actor->bitmapFilename = actor->bitmapFilename.substr(0, actor->bitmapFilename.find(' '));
sprite->setBitmap(loadAnimationFrame(actor->bitmapFilename, actor->scale));
Commit: 5f8675a07da2ceb8f905cf47ff3334072498a209
https://github.com/scummvm/scummvm/commit/5f8675a07da2ceb8f905cf47ff3334072498a209
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:39+02:00
Commit Message:
STARTREK: Use Common::String in playTextAudio()
Changed paths:
engines/startrek/textbox.cpp
diff --git a/engines/startrek/textbox.cpp b/engines/startrek/textbox.cpp
index 523e10b012..775864933e 100644
--- a/engines/startrek/textbox.cpp
+++ b/engines/startrek/textbox.cpp
@@ -227,7 +227,7 @@ String StarTrekEngine::skipTextAudioPrompt(const String &str) {
String StarTrekEngine::playTextAudio(const String &str) {
const char *text = str.c_str();
- char soundFile[0x100];
+ Common::String soundFile;
if (*text != '#')
return str;
@@ -237,10 +237,9 @@ String StarTrekEngine::playTextAudio(const String &str) {
while (*text != '#') {
if (*text == '\0' || len > 0xfa)
return str;
- soundFile[len++] = *text++;
+ soundFile += *text++;
}
- soundFile[len] = '\0';
_sound->playSpeech(soundFile);
return String(text + 1);
Commit: 7d454f2221370aafcc2e65591f030696bbb1e8ad
https://github.com/scummvm/scummvm/commit/7d454f2221370aafcc2e65591f030696bbb1e8ad
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:39+02:00
Commit Message:
STARTREK: Change action type to signed
We now use an action array terminator with a negative value
Changed paths:
engines/startrek/room.cpp
engines/startrek/room.h
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index eb453136b6..2469498935 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -319,7 +319,7 @@ bool Room::actionHasCode(const Action &action) {
return false;
}
-bool Room::actionHasCode(byte type, byte b1, byte b2, byte b3) {
+bool Room::actionHasCode(char type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
return actionHasCode(a);
}
@@ -339,7 +339,7 @@ bool Room::handleAction(const Action &action) {
return false;
}
-bool Room::handleAction(byte type, byte b1, byte b2, byte b3) {
+bool Room::handleAction(char type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
return handleAction(a);
}
@@ -360,7 +360,7 @@ bool Room::handleActionWithBitmask(const Action &action) {
return false;
}
-bool Room::handleActionWithBitmask(byte type, byte b1, byte b2, byte b3) {
+bool Room::handleActionWithBitmask(char type, byte b1, byte b2, byte b3) {
Action a = {type, b1, b2, b3};
return handleActionWithBitmask(a);
}
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 617c522caa..824c03d93a 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -102,19 +102,19 @@ public:
* Check if a particular action is defined for this room.
*/
bool actionHasCode(const Action &action);
- bool actionHasCode(byte type, byte b1, byte b2, byte b3);
+ bool actionHasCode(char type, byte b1, byte b2, byte b3);
/**
* Execute a particular action for this room, if defined.
*/
bool handleAction(const Action &action);
- bool handleAction(byte type, byte b1, byte b2, byte b3);
+ bool handleAction(char type, byte b1, byte b2, byte b3);
/**
* Same as above, but if any byte in the action is -1 (0xff), it matches any value.
*/
bool handleActionWithBitmask(const Action &action);
- bool handleActionWithBitmask(byte type, byte b1, byte b2, byte b3);
+ bool handleActionWithBitmask(char type, byte b1, byte b2, byte b3);
uint16 getFirstHotspot() {
return readRdfWord(0x12);
Commit: b40f2f31dd85ecb9c84cfa0925c2619910ec6be7
https://github.com/scummvm/scummvm/commit/b40f2f31dd85ecb9c84cfa0925c2619910ec6be7
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:40+02:00
Commit Message:
STARTREK: Change activeAction to be signed
One more change due to usage of negative action list terminators
Changed paths:
engines/startrek/awaymission.h
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 9c4d591073..464dea8ecf 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -41,7 +41,7 @@ struct AwayMission {
byte disableInput; // 0x1d
bool redshirtDead; // 0x1e
- byte activeAction; // 0x1f
+ char activeAction; // 0x1f
byte activeObject; // 0x20; The item that is going to be used on something
byte passiveObject; // 0x21; The item that the active item is used on (or the item looked at, etc).
Commit: 4a6828f305d01afe6744a4f6d419b89599674d60
https://github.com/scummvm/scummvm/commit/4a6828f305d01afe6744a4f6d419b89599674d60
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:40+02:00
Commit Message:
STARTREK: Change type in addAction to be signed
One more change due to the usage of negative action terminators
Changed paths:
engines/startrek/awaymission.cpp
engines/startrek/startrek.h
diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp
index c555c40088..896fd3f9c9 100644
--- a/engines/startrek/awaymission.cpp
+++ b/engines/startrek/awaymission.cpp
@@ -535,7 +535,7 @@ void StarTrekEngine::addAction(const Action &action) {
_actionQueue.push(action);
}
-void StarTrekEngine::addAction(byte type, byte b1, byte b2, byte b3) {
+void StarTrekEngine::addAction(char type, byte b1, byte b2, byte b3) {
const Action a = {type, b1, b2, b3};
addAction(a);
}
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 3747a536e2..605209c1ca 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -291,7 +291,7 @@ public:
int loadActorAnimWithRoomScaling(int actorIndex, const Common::String &animName, int16 x, int16 y);
Fixed8 getActorScaleAtPosition(int16 y);
void addAction(const Action &action);
- void addAction(byte type, byte b1, byte b2, byte b3);
+ void addAction(char type, byte b1, byte b2, byte b3);
void handleAwayMissionAction();
void checkTouchedLoadingZone(int16 x, int16 y);
Commit: de20df5ccc3e7b94e042d0fe9b645b0ae57833c0
https://github.com/scummvm/scummvm/commit/de20df5ccc3e7b94e042d0fe9b645b0ae57833c0
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2020-12-19T01:50:40+02:00
Commit Message:
STARTREK: Add some planet data, and add mission performance sequences
Changed paths:
engines/startrek/bridge.cpp
engines/startrek/startrek.cpp
engines/startrek/startrek.h
diff --git a/engines/startrek/bridge.cpp b/engines/startrek/bridge.cpp
index 53e2deb8dd..f509a81320 100644
--- a/engines/startrek/bridge.cpp
+++ b/engines/startrek/bridge.cpp
@@ -82,30 +82,53 @@ enum BridgeSequence {
kSeqUnk7,
kSeqUnk8,
kSeqUnk9,
- kStartMissionLove,
+ kSeqStartMissionLove,
kSeqUnk11,
kSeqUnk12,
kSeqUnk13,
kSeqUnk14,
kSeqUnk15,
- kStartMissionMudd,
+ kSeqStartMissionMudd,
kSeqUnk17,
kSeqUnk18,
- kStartMissionFeather,
+ kSeqStartMissionFeather,
kSeqUnk20,
kSeqUnk21,
- kStartMissionTrial,
+ kSeqStartMissionTrial,
kSeqUnk23,
kSeqUnk24,
kSeqUnk25,
kSeqUnk26,
kSeqUnk27,
- kStartMissionVeng,
+ kSeqStartMissionVeng,
kSeqUnk29,
- kStartMissionSins,
+ kSeqStartMissionSins,
kSeqUnk31
};
+enum Planet {
+ kPlanetCenturius = 0,
+ kPlanetCameronsStar = 1,
+ kPlanetArk7 = 2, // Chapter 3: Love's Labor Jeopardized (love)
+ kPlanetHarlequin = 3, // Chapter 4: Another Fine Mess (mudd)
+ kPlanetHarrapa = 4,
+ kPlanetElasiPrime = 5,
+ kPlanetDigifal = 6, // Chapter 5A: The Feathered Serpent (feather)
+ kPlanetStrahkeer = 7,
+ kPlanetHrakkour = 8, // Chapter 5B: The Feathered Serpent (trial)
+ kPlanetTriRhoNautica = 9,
+ kPlanetShivaOmicron = 10,
+ kPlanetAlphaProxima = 11, // Chapter 6: The Old Devil Moon (sins)
+ kPlanetOmegaMaelstrom = 12,
+ kPlanetArgosIV = 13,
+ kPlanetBetaMyamid = 14, // Chapter 2: Hijacked (tug)
+ kPlanetSirius = 15,
+ kPlanetSigmaZhukova = 16,
+ kPlanetCastor = 17,
+ kPlanetPollux = 18, // Chapter 1: Demon world (demon)
+ kPlanetChristgen = 19
+};
+
void StarTrekEngine::initBridge(bool b) {
_gfx->loadPalette("bridge");
_sound->loadMusicFile("bridge");
@@ -142,6 +165,11 @@ void StarTrekEngine::loadBridge() {
playBridgeSequence(kSeqStartMissionDemon);
playBridgeSequence(kSeqEndMockBattle);
playBridgeSequence(kSeqShowDebriefDemon);
+ // End mission sequence
+ //_missionName = _missionToLoad = "DEMON";
+ //_resource->setTxtFileName(_missionName);
+ //_awayMission.demon.missionScore = 100;
+ //playBridgeSequence(kSeqEndMissionDemon);
}
void StarTrekEngine::loadBridgeActors() {
@@ -159,12 +187,14 @@ void StarTrekEngine::setBridgeMouseCursor() {
void StarTrekEngine::playBridgeSequence(int sequenceId) {
const char *captainsLogHeader = "Captain's Log";
const char *uhuraHeader = "Lieutenant Uhura";
+ const char *kirkHeader = "Captain Kirk";
const char *spockHeader = "Mr. Spock";
+ const char *mcCoyHeader = "Dr. McCoy";
const char *suluHeader = "Mr. Sulu";
const char *lowerShieldsText = "#BRID\\B_336#Lowering shields and disarming weapons.";
switch (sequenceId) {
- case kSeqStartMissionDemon:
+ case kSeqStartMissionDemon: // Chapter 1: Demon world (demon)
_missionName = _missionToLoad = "DEMON";
_resource->setTxtFileName(_missionName);
_sound->loadMusicFile("bridgew");
@@ -196,7 +226,7 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
setBridgeMouseCursor(); // 0, 0
// TODO: Delete 3D object
showBridgeScreenTalkerWithMessage(12, "Admiral", "woman");
- // TODO: _targetPlanet = 18;
+ _targetPlanet = kPlanetPollux;
break;
case kSeqTalkWithPolluxPriest:
/*
@@ -220,9 +250,30 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
*/
break;
case kSeqEndMissionDemon:
+ loadActorAnim(1, "xstndsp", 0, 0, 1.0); // Standing Spock
+ loadActorAnim(2, "xstndmc", 0, 0, 1.0); // Standing McCoy
+ _sound->playSoundEffectIndex(34);
+ showTextbox(uhuraHeader, _resource->getLoadedText(23), 298, 150, 161, 0); // Message from Starfleet
+ showTextbox(kirkHeader, _resource->getLoadedText(24), 160, 130, 176, 0);
+ showMissionPerformance(_awayMission.demon.missionScore, 29);
+ showTextbox(mcCoyHeader, _resource->getLoadedText(25), 160, 100, 44, 0);
+ showTextbox(kirkHeader, _resource->getLoadedText(26), 160, 130, 176, 0);
+ showTextbox(spockHeader, _resource->getLoadedText(27), 294, 106, 44, 0);
+ showTextbox(mcCoyHeader, _resource->getLoadedText(28), 160, 100, 44, 0);
+ loadActorAnim(1, "bstndsp", 0, 0, 1.0); // Sitting Spock
+ removeActorFromScreen(2);
+ // TODO: Proceed to tug
+ break;
+ case kSeqStartMissionTug: // Chapter 2: Hijacked (tug)
+ _targetPlanet = kPlanetBetaMyamid;
// TODO
break;
- case kSeqStartMissionTug:
+ case kSeqStartMissionLove: // Chapter 3: Love's Labor Jeopardized (love)
+ _targetPlanet = kPlanetArk7;
+ // TODO
+ break;
+ case kSeqStartMissionMudd: // Chapter 4: Another Fine Mess (mudd)
+ _targetPlanet = kPlanetHarlequin;
// TODO
break;
// TODO: The rest
@@ -231,7 +282,76 @@ void StarTrekEngine::playBridgeSequence(int sequenceId) {
}
}
+Common::String StarTrekEngine::getSpeechSampleForNumber(int number) {
+ Common::String speechTemplate = ",BRID\\B_%03d";
+ Common::String result;
+
+ if (number <= 19) {
+ // Speech samples 228 ("zero") - 247 ("nineteen")
+ result = Common::String::format(speechTemplate.c_str(), number + 228);
+ } else if (number >= 20 && number <= 99) {
+ // Speech samples 248 ("twenty") - 255 ("ninety")
+ result = Common::String::format(speechTemplate.c_str(), number / 10 - 2 + 248);
+ if (number % 10 > 0)
+ result += Common::String::format(speechTemplate.c_str(), number % 10 + 228);
+ } else if (number == 100) {
+ result = Common::String::format(speechTemplate.c_str(), 256);
+ }
+
+ return result;
+}
+
+// TODO: two more parameters
+void StarTrekEngine::showMissionPerformance(int score, int missionScoreTextId) {
+ Common::String performanceDescription;
+ int midiTrack = 0;
+
+ if (score >= 0 && score <= 50) {
+ performanceDescription = "#BRID\\B_199#I'll be frank, Kirk. Starfleet expects more of you than that. Try to do better on your next assignment.";
+ midiTrack = 13;
+ } else if (score >= 60 && score <= 70) {
+ performanceDescription = "#BRID\\B_197#A satisfactory performance, Captain, but there's still room for improvement.";
+ midiTrack = 13;
+ } else if (score >= 71 && score <= 85) {
+ performanceDescription = "#BRID\\B_214#Well done, Captain. Keep up the good work.";
+ midiTrack = 11;
+ } else if (score >= 86 && score <= 99) {
+ performanceDescription = "#BRID\\B_414#The top brass at Starfleet are impressed. Outstanding work, Jim.";
+ midiTrack = 12;
+ } else if (score == 100) {
+ performanceDescription = "#BRID\\B_195#A perfect mission, Jim! You are a model for all Starfleet!";
+ midiTrack = 14;
+ }
+
+ _sound->playMidiMusicTracks(midiTrack, -1);
+
+ int commendationPoints = 0; // TODO
+ Common::String speechIdPerformance = getSpeechSampleForNumber(score);
+ Common::String speechIdCommendationPoints = getSpeechSampleForNumber(commendationPoints);
+
+ Common::String missionPerformanceText = Common::String::format(_resource->getLoadedText(missionScoreTextId).c_str(),
+ speechIdPerformance.c_str(),
+ speechIdCommendationPoints.c_str(),
+ score,
+ commendationPoints
+ );
+
+ const char *textIds[] = {
+ missionPerformanceText.c_str(),
+ performanceDescription.c_str(),
+ NULL
+ };
+
+ showBridgeScreenTalkerWithMessages(textIds, "Admiral", "woman");
+}
+
void StarTrekEngine::showBridgeScreenTalkerWithMessage(int textId, Common::String talkerHeader, Common::String talkerId) {
+ const char *text = _resource->getLoadedText(textId).c_str();
+ const char *texts[] = { text, NULL };
+ showBridgeScreenTalkerWithMessages(texts, talkerHeader, talkerId);
+}
+
+void StarTrekEngine::showBridgeScreenTalkerWithMessages(const char *texts[], Common::String talkerHeader, Common::String talkerId) {
if (talkerId == "romula" || talkerId == "pira" || talkerId == "klg1" || talkerId == "klg2" || talkerId == "maddoc")
_sound->playMidiMusicTracks(15, -1);
else if (talkerId == "mudd")
@@ -241,7 +361,13 @@ void StarTrekEngine::showBridgeScreenTalkerWithMessage(int textId, Common::Strin
_starfieldSprite.drawMode = 0;
// TODO: Check why we need the coord adjustments below
int actorId = loadActorAnim(-1, talkerId, 72 - 2, 30 + 1, 1.0);
- showTextbox(talkerHeader, _resource->getLoadedText(textId), 160, 190, 44, 0);
+ int i = 0;
+ const char *text = texts[i];
+ while (text != NULL) {
+ showTextbox(talkerHeader, Common::String(text), 160, 190, 44, 0);
+ text = texts[++i];
+ }
+
removeActorFromScreen(actorId);
initStarfieldSprite(&_starfieldSprite, new StubBitmap(0, 0), _starfieldRect);
}
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 6c23f7a8ea..8a069e1215 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -111,6 +111,9 @@ StarTrekEngine::StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gam
for (int i = 0; i < MAX_BAN_FILES; i++)
_banFiles[i] = nullptr;
+ _targetPlanet = -1;
+ _currentPlanet = -1;
+
const Common::FSNode gameDataDir(ConfMan.get("path"));
SearchMan.addSubDirectoryMatching(gameDataDir, "patches");
}
diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h
index 605209c1ca..9be14115ed 100644
--- a/engines/startrek/startrek.h
+++ b/engines/startrek/startrek.h
@@ -260,9 +260,18 @@ public:
void setBridgeMouseCursor();
void playBridgeSequence(int sequenceId);
void showBridgeScreenTalkerWithMessage(int textId, Common::String talkerHeader, Common::String talkerId);
+ void showBridgeScreenTalkerWithMessages(const char *texts[], Common::String talkerHeader, Common::String talkerId);
void handleBridgeEvents();
void handleBridgeComputer();
+ void showMissionPerformance(int score, int missionScoreTextId);
+private:
+ Common::String getSpeechSampleForNumber(int number);
+
+ int _targetPlanet;
+ int _currentPlanet;
+
+public:
void playMovie(Common::String filename);
void playMovieMac(Common::String filename);
More information about the Scummvm-git-logs
mailing list