From 8c71f2db84b06862b4fefbe3e79fb042e7a60666 Mon Sep 17 00:00:00 2001 From: Matthew Stewart Date: Tue, 3 Jul 2018 23:55:30 -0400 Subject: STARTREK: Make Action struct POD again --- engines/startrek/action.h | 14 +- engines/startrek/awaymission.cpp | 27 +- engines/startrek/room.cpp | 15 + engines/startrek/room.h | 6 +- engines/startrek/rooms/feather1.cpp | 184 +- engines/startrek/rooms/function_map.h | 3266 ++++++++++++++++----------------- engines/startrek/startrek.cpp | 14 +- engines/startrek/startrek.h | 2 +- engines/startrek/text.cpp | 2 +- 9 files changed, 1772 insertions(+), 1758 deletions(-) diff --git a/engines/startrek/action.h b/engines/startrek/action.h index 55a08da738..f6178d8858 100644 --- a/engines/startrek/action.h +++ b/engines/startrek/action.h @@ -29,7 +29,7 @@ namespace StarTrek { class Room; -enum Acton { +enum Acton { // TODO: rename ACTION_TICK = 0, ACTION_WALK = 1, // Actions 1-5 are directly usable on away missions. @@ -46,20 +46,12 @@ enum Acton { ACTION_OPTIONS = 13 // Not really an action, but selectable from action menu }; -struct Action : Common::Serializable { +struct Action { byte type; byte b1; byte b2; byte b3; - Action() {} - Action(int _type, int _b1, int _b2, int _b3) - : type((byte)_type), - b1((byte)_b1), - b2((byte)_b2), - b3((byte)_b3) {} - - // ACTION_USE, ACTION_GET, ACTION_LOOK, ACTION_TALK byte activeObject() { return b1; } byte passiveObject() { return b2; } @@ -85,7 +77,7 @@ struct Action : Common::Serializable { return (type << 24) | (b1 << 16) | (b2 << 8) | (b3 << 0); } - virtual void saveLoadWithSerializer(Common::Serializer &ser) { + void saveLoadWithSerializer(Common::Serializer &ser) { ser.syncAsByte(type); ser.syncAsByte(b1); ser.syncAsByte(b2); diff --git a/engines/startrek/awaymission.cpp b/engines/startrek/awaymission.cpp index 8ae11d4d7e..8c7f8db51e 100644 --- a/engines/startrek/awaymission.cpp +++ b/engines/startrek/awaymission.cpp @@ -189,7 +189,7 @@ void StarTrekEngine::handleAwayMissionEvents() { updateAwayMissionTimers(); _frameIndex++; _roomFrameCounter++; - addAction(Action(ACTION_TICK, _roomFrameCounter & 0xff, (_roomFrameCounter >> 8) & 0xff, 0)); + addAction(ACTION_TICK, _roomFrameCounter & 0xff, (_roomFrameCounter >> 8) & 0xff, 0); if (_roomFrameCounter >= 2) _gfx->incPaletteFadeLevel(); break; @@ -258,16 +258,16 @@ useInventory: if (clickedObject == -2) goto checkAddAction; - if (_room->actionHasCode(Action(ACTION_USE, _awayMission.activeObject, _awayMission.passiveObject, 0))) + if (_room->actionHasCode(ACTION_USE, _awayMission.activeObject, _awayMission.passiveObject, 0)) goto checkAddAction; if (_awayMission.activeObject == OBJECT_MCCOY) { - if (_room->actionHasCode(Action(ACTION_USE, OBJECT_IMEDKIT, _awayMission.passiveObject, 0))) + if (_room->actionHasCode(ACTION_USE, OBJECT_IMEDKIT, _awayMission.passiveObject, 0)) goto checkAddAction; - if (_room->actionHasCode(Action(ACTION_USE, OBJECT_IMEDKIT, _awayMission.passiveObject, 0))) + if (_room->actionHasCode(ACTION_USE, OBJECT_IMEDKIT, _awayMission.passiveObject, 0)) goto checkAddAction; } else if (_awayMission.activeObject == OBJECT_SPOCK) { - if (_room->actionHasCode(Action(ACTION_USE, OBJECT_ISTRICOR, _awayMission.passiveObject, 0))) + if (_room->actionHasCode(ACTION_USE, OBJECT_ISTRICOR, _awayMission.passiveObject, 0)) goto checkAddAction; } @@ -277,7 +277,7 @@ useInventory: if (_awayMission.passiveObject == OBJECT_ICOMM) { if (walkActiveObjectToHotspot()) break; - addAction(Action(ACTION_USE, OBJECT_ICOMM, 0, 0)); + addAction(ACTION_USE, OBJECT_ICOMM, 0, 0); _sound->playVoc("commun30"); if (_awayMission.activeObject <= OBJECT_REDSHIRT) { goto checkShowInventory; @@ -296,7 +296,7 @@ checkAddAction: if (!walkActiveObjectToHotspot()) { if (clickedObject != -2) - addAction(Action(_awayMission.activeAction, _awayMission.activeObject, _awayMission.passiveObject, 0)); + addAction(_awayMission.activeAction, _awayMission.activeObject, _awayMission.passiveObject, 0); checkShowInventory: if (!(_awayMission.crewDownBitset & (1 << OBJECT_KIRK))) @@ -325,7 +325,7 @@ lookInventory: break; if (clickedObject != -2) - addAction(Action(_awayMission.activeAction, _awayMission.activeObject, 0, 0)); + addAction(_awayMission.activeAction, _awayMission.activeObject, 0, 0); if (_awayMission.activeAction == ACTION_LOOK && !(_awayMission.crewDownBitset & (1 << OBJECT_KIRK))) showInventoryIcons(false); @@ -358,7 +358,7 @@ checkSelectedAction: if (_awayMission.activeAction == ACTION_USE && _awayMission.activeObject == OBJECT_ICOMM && (_awayMission.crewDownBitset & (1 << OBJECT_KIRK)) == 0) { if (!walkActiveObjectToHotspot()) { - addAction(Action(_awayMission.activeAction, _awayMission.activeObject, 0, 0)); + addAction(_awayMission.activeAction, _awayMission.activeObject, 0, 0); _sound->playVoc("communic"); _awayMission.activeAction = ACTION_WALK; } @@ -473,6 +473,11 @@ void StarTrekEngine::addAction(const Action &action) { _actionQueue.push(action); } +void StarTrekEngine::addAction(byte type, byte b1, byte b2, byte b3) { + const Action a = {type, b1, b2, b3}; + addAction(a); +} + void StarTrekEngine::handleAwayMissionAction() { Action action = _actionQueue.pop(); @@ -689,7 +694,7 @@ void StarTrekEngine::checkTouchedLoadingZone(int16 x, int16 y) { uint16 var = _room->readRdfWord(offset); if (_activeDoorWarpHotspot != var) { _activeDoorWarpHotspot = var; - addAction(Action(ACTION_TOUCHED_HOTSPOT, var & 0xff, 0, 0)); + addAction(ACTION_TOUCHED_HOTSPOT, var & 0xff, 0, 0); } return; } @@ -707,7 +712,7 @@ void StarTrekEngine::checkTouchedLoadingZone(int16 x, int16 y) { uint16 var = _room->readRdfWord(offset); if (_activeWarpHotspot != var) { _activeWarpHotspot = var; - addAction(Action(ACTION_TOUCHED_WARP, var & 0xff, 0, 0)); + addAction(ACTION_TOUCHED_WARP, var & 0xff, 0, 0); } return; } diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp index 0ce807b198..0430d34d78 100644 --- a/engines/startrek/room.cpp +++ b/engines/startrek/room.cpp @@ -191,6 +191,11 @@ bool Room::actionHasCode(const Action &action) { return false; } +bool Room::actionHasCode(byte type, byte b1, byte b2, byte b3) { + const Action a = {type, b1, b2, b3}; + return actionHasCode(a); +} + bool Room::handleAction(const Action &action) { const RoomAction *roomActionPtr = _roomActionList; int n = _numRoomActions; @@ -207,6 +212,11 @@ bool Room::handleAction(const Action &action) { return false; } +bool Room::handleAction(byte type, byte b1, byte b2, byte b3) { + const Action a = {type, b1, b2, b3}; + return handleAction(a); +} + bool Room::handleActionWithBitmask(const Action &action) { const RoomAction *roomActionPtr = _roomActionList; int n = _numRoomActions; @@ -224,6 +234,11 @@ bool Room::handleActionWithBitmask(const Action &action) { return false; } +bool Room::handleActionWithBitmask(byte type, byte b1, byte b2, byte b3) { + Action a = {type, b1, b2, b3}; + return handleActionWithBitmask(a); +} + Common::Point Room::getBeamInPosition(int crewmanIndex) { int base = RDF_BEAM_IN_POSITIONS + crewmanIndex * 4; return Common::Point(readRdfWord(base), readRdfWord(base + 2)); diff --git a/engines/startrek/room.h b/engines/startrek/room.h index bd6d7d9420..f4e7f30175 100644 --- a/engines/startrek/room.h +++ b/engines/startrek/room.h @@ -69,12 +69,14 @@ public: // words 0x0e and 0x10 in RDF file are pointers to start and end of event code. // That code is instead rewritten on a per-room basis. bool actionHasCode(const Action &action); + bool actionHasCode(byte type, byte b1, byte b2, byte b3); + bool handleAction(const Action &action); - bool handleAction(byte type, byte b1, byte b2, byte b3) { return handleAction(Action(type, b1, b2, b3)); }; + bool handleAction(byte 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) { return handleActionWithBitmask(Action(type, b1, b2, b3)); }; + bool handleActionWithBitmask(byte type, byte b1, byte b2, byte b3); uint16 getFirstHotspot() { return readRdfWord(0x12); } uint16 getHotspotEnd() { return readRdfWord(0x14); } diff --git a/engines/startrek/rooms/feather1.cpp b/engines/startrek/rooms/feather1.cpp index 488244e4dc..7a2312154a 100644 --- a/engines/startrek/rooms/feather1.cpp +++ b/engines/startrek/rooms/feather1.cpp @@ -47,98 +47,98 @@ namespace StarTrek { extern const RoomAction feather1ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather1Tick1 }, - { Action(ACTION_TICK, 45, 0, 0), &Room::feather1Tick45 }, - { Action(ACTION_TICK, 85, 0, 0), &Room::feather1Tick85 }, - { Action(ACTION_TICK, 95, 0, 0), &Room::feather1Tick95 }, - { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::feather1QuetzecoatlDisappeared }, - { Action(ACTION_GET, HOTSPOT_RIGHT_VINE, 0, 0), &Room::feather1GetRightVine }, - { Action(ACTION_GET, OBJECT_LEFT_VINE, 0, 0), &Room::feather1GetLeftVine }, - { Action(ACTION_GET, HOTSPOT_ROCKS, 0, 0), &Room::feather1GetRocks }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::feather1ReachedRocks }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::feather1PickedUpRocks }, - { Action(ACTION_GET, OBJECT_SNAKE, 0, 0), &Room::feather1GetSnake }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::feather1ReachedSnake }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::feather1Timer1Expired }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::feather1Timer2Expired }, - { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::feather1PickedUpSnake }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::feather1Timer0Expired }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::feather1UseCommunicator }, - { Action(ACTION_USE, OBJECT_IROCK, HOTSPOT_HOLE, 0), &Room::feather1UseRockOnHole }, - { Action(ACTION_FINISHED_WALKING, 9, 0, 0), &Room::feather1ReachedHole }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::feather1Timer3Expired }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::feather1PutRockInHole }, - { Action(ACTION_USE, OBJECT_ISNAKE, OBJECT_LEFT_VINE, 0), &Room::feather1UseSnakeOnLeftVine }, - { Action(ACTION_USE, OBJECT_ISNAKE, OBJECT_SPOCK, 0), &Room::feather1UseSnakeOnSpock }, - { Action(ACTION_USE, OBJECT_ISNAKE, OBJECT_KIRK, 0), &Room::feather1UseSnakeOnKirk }, - { Action(ACTION_USE, OBJECT_ISNAKE, OBJECT_MCCOY, 0), &Room::feather1UseSnakeOnMccoy }, - { Action(ACTION_USE, OBJECT_ISNAKE, OBJECT_REDSHIRT, 0), &Room::feather1UseSnakeOnRedshirt }, - { Action(ACTION_USE, OBJECT_IROCK, OBJECT_SNAKE, 0), &Room::feather1UseRockOnSnake }, - { Action(ACTION_USE, OBJECT_SPOCK, OBJECT_SNAKE, 0), &Room::feather1UseSpockOnSnake }, - { Action(ACTION_USE, OBJECT_MCCOY, OBJECT_SNAKE, 0), &Room::feather1UseMccoyOnSnake }, - { Action(ACTION_USE, OBJECT_REDSHIRT, OBJECT_SNAKE, 0), &Room::feather1UseRedshirtOnSnake }, - { Action(ACTION_USE, OBJECT_SPOCK, HOTSPOT_HOLE, 0), &Room::feather1UseSpockOnHole }, - { Action(ACTION_USE, OBJECT_MCCOY, HOTSPOT_HOLE, 0), &Room::feather1UseMccoyOnHole }, - { Action(ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_HOLE, 0), &Room::feather1UseRedshirtOnHole }, - { Action(ACTION_USE, OBJECT_IROCK, HOTSPOT_MOSS, 0), &Room::feather1UseRockOnMoss }, - { Action(ACTION_USE, OBJECT_IROCK, OBJECT_SPOCK, 0), &Room::feather1UseRockOnSpock }, - { Action(ACTION_USE, OBJECT_IROCK, OBJECT_MCCOY, 0), &Room::feather1UseRockOnMccoy }, - { Action(ACTION_USE, OBJECT_IROCK, OBJECT_REDSHIRT, 0), &Room::feather1UseRockOnRedshirt }, - { Action(ACTION_USE, OBJECT_SPOCK, HOTSPOT_MOSS, 0), &Room::feather1UseSpockOnMoss }, - { Action(ACTION_USE, OBJECT_MCCOY, HOTSPOT_MOSS, 0), &Room::feather1UseMccoyOnMoss }, - { Action(ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_MOSS, 0), &Room::feather1UseRedshirtOnMoss }, - { Action(ACTION_USE, OBJECT_IROCK, OBJECT_LEFT_VINE, 0), &Room::feather1UseRockOnLeftVine }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::feather1ReadyToThrowRock1 }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::feather1ThrewRock1 }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::feather1ReadyToThrowRock2 }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::feather1ThrewRock2 }, - - { Action(ACTION_USE, OBJECT_SPOCK, OBJECT_LEFT_VINE, 0), &Room::feather1UseSpockOnVine }, - { Action(ACTION_USE, OBJECT_SPOCK, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseSpockOnVine }, - { Action(ACTION_USE, OBJECT_MCCOY, OBJECT_LEFT_VINE, 0), &Room::feather1UseMccoyOnVine }, - { Action(ACTION_USE, OBJECT_MCCOY, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseMccoyOnVine }, - { Action(ACTION_USE, OBJECT_REDSHIRT, OBJECT_LEFT_VINE, 0), &Room::feather1UseRedshirtOnVine }, - { Action(ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseRedshirtOnVine }, - { Action(ACTION_USE, OBJECT_KIRK, OBJECT_LEFT_VINE, 0), &Room::feather1UseKirkOnVine }, - { Action(ACTION_USE, OBJECT_KIRK, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseKirkOnVine }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::feather1ReachedVineToClimbUp }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::feather1ClimbedUpVine }, - { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::feather1ReachedVineToClimbDown }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::feather1ClimbedDownVine }, - - { Action(ACTION_USE, OBJECT_IPHASERS, -1, 0), &Room::feather1UsePhaser }, - { Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::feather1UsePhaser }, - { Action(ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseSTricorderOnRightVine }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_SNAKE, 0), &Room::feather1UseSTricorderOnSnake }, - { Action(ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_MOSS, 0), &Room::feather1UseSTricorderOnMoss }, - { Action(ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_HOLE, 0), &Room::feather1UseSTricorderOnHole }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::feather1UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_ROCKS, 0), &Room::feather1UseSTricorderOnRocks }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_LEFT_VINE, 0), &Room::feather1UseMTricorderOnVine }, - { Action(ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_RIGHT_VINE, 0), &Room::feather1UseMTricorderOnVine }, - { Action(ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_MOSS, 0), &Room::feather1UseMTricorderOnMoss }, - { Action(ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_HOLE, 0), &Room::feather1UseMTricorderOnHole }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SNAKE, 0), &Room::feather1UseMTricorderOnSnake }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::feather1UseMedkit }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::feather1TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::feather1TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::feather1TalkToRedshirt }, - { Action(ACTION_WALK, HOTSPOT_EXIT, 0, 0), &Room::feather1WalkToExit }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::feather1LookAnywhere }, - { Action(ACTION_LOOK, OBJECT_SNAKE, 0, 0), &Room::feather1LookAtSnake }, - { Action(ACTION_LOOK, HOTSPOT_RIGHT_VINE, 0, 0), &Room::feather1LookAtRightVine }, - { Action(ACTION_LOOK, HOTSPOT_HOLE, 0, 0), &Room::feather1LookAtHole }, - { Action(ACTION_LOOK, HOTSPOT_MOSS, 0, 0), &Room::feather1LookAtMoss }, - { Action(ACTION_LOOK, HOTSPOT_ROCKS, 0, 0), &Room::feather1LookAtRocks }, - { Action(ACTION_LOOK, HOTSPOT_LIGHT, 0, 0), &Room::feather1LookAtLight }, - { Action(ACTION_LOOK, HOTSPOT_EYES_1, 0, 0), &Room::feather1LookAtEyes }, - { Action(ACTION_LOOK, HOTSPOT_EYES_2, 0, 0), &Room::feather1LookAtEyes }, - { Action(ACTION_LOOK, HOTSPOT_EYES_3, 0, 0), &Room::feather1LookAtEyes }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::feather1LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::feather1LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::feather1LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::feather1LookAtRedshirt }, - { Action(ACTION_LOOK, OBJECT_LEFT_VINE, 0, 0), &Room::feather1LookAtLeftVine }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather1Tick1 }, + { {ACTION_TICK, 45, 0, 0}, &Room::feather1Tick45 }, + { {ACTION_TICK, 85, 0, 0}, &Room::feather1Tick85 }, + { {ACTION_TICK, 95, 0, 0}, &Room::feather1Tick95 }, + { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::feather1QuetzecoatlDisappeared }, + { {ACTION_GET, HOTSPOT_RIGHT_VINE, 0, 0}, &Room::feather1GetRightVine }, + { {ACTION_GET, OBJECT_LEFT_VINE, 0, 0}, &Room::feather1GetLeftVine }, + { {ACTION_GET, HOTSPOT_ROCKS, 0, 0}, &Room::feather1GetRocks }, + { {ACTION_FINISHED_WALKING, 6, 0, 0}, &Room::feather1ReachedRocks }, + { {ACTION_FINISHED_ANIMATION, 6, 0, 0}, &Room::feather1PickedUpRocks }, + { {ACTION_GET, OBJECT_SNAKE, 0, 0}, &Room::feather1GetSnake }, + { {ACTION_FINISHED_WALKING, 8, 0, 0}, &Room::feather1ReachedSnake }, + { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::feather1Timer1Expired }, + { {ACTION_TIMER_EXPIRED, 2, 0, 0}, &Room::feather1Timer2Expired }, + { {ACTION_FINISHED_ANIMATION, 8, 0, 0}, &Room::feather1PickedUpSnake }, + { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::feather1Timer0Expired }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::feather1UseCommunicator }, + { {ACTION_USE, OBJECT_IROCK, HOTSPOT_HOLE, 0}, &Room::feather1UseRockOnHole }, + { {ACTION_FINISHED_WALKING, 9, 0, 0}, &Room::feather1ReachedHole }, + { {ACTION_TIMER_EXPIRED, 3, 0, 0}, &Room::feather1Timer3Expired }, + { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::feather1PutRockInHole }, + { {ACTION_USE, OBJECT_ISNAKE, OBJECT_LEFT_VINE, 0}, &Room::feather1UseSnakeOnLeftVine }, + { {ACTION_USE, OBJECT_ISNAKE, OBJECT_SPOCK, 0}, &Room::feather1UseSnakeOnSpock }, + { {ACTION_USE, OBJECT_ISNAKE, OBJECT_KIRK, 0}, &Room::feather1UseSnakeOnKirk }, + { {ACTION_USE, OBJECT_ISNAKE, OBJECT_MCCOY, 0}, &Room::feather1UseSnakeOnMccoy }, + { {ACTION_USE, OBJECT_ISNAKE, OBJECT_REDSHIRT, 0}, &Room::feather1UseSnakeOnRedshirt }, + { {ACTION_USE, OBJECT_IROCK, OBJECT_SNAKE, 0}, &Room::feather1UseRockOnSnake }, + { {ACTION_USE, OBJECT_SPOCK, OBJECT_SNAKE, 0}, &Room::feather1UseSpockOnSnake }, + { {ACTION_USE, OBJECT_MCCOY, OBJECT_SNAKE, 0}, &Room::feather1UseMccoyOnSnake }, + { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_SNAKE, 0}, &Room::feather1UseRedshirtOnSnake }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_HOLE, 0}, &Room::feather1UseSpockOnHole }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_HOLE, 0}, &Room::feather1UseMccoyOnHole }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_HOLE, 0}, &Room::feather1UseRedshirtOnHole }, + { {ACTION_USE, OBJECT_IROCK, HOTSPOT_MOSS, 0}, &Room::feather1UseRockOnMoss }, + { {ACTION_USE, OBJECT_IROCK, OBJECT_SPOCK, 0}, &Room::feather1UseRockOnSpock }, + { {ACTION_USE, OBJECT_IROCK, OBJECT_MCCOY, 0}, &Room::feather1UseRockOnMccoy }, + { {ACTION_USE, OBJECT_IROCK, OBJECT_REDSHIRT, 0}, &Room::feather1UseRockOnRedshirt }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_MOSS, 0}, &Room::feather1UseSpockOnMoss }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_MOSS, 0}, &Room::feather1UseMccoyOnMoss }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_MOSS, 0}, &Room::feather1UseRedshirtOnMoss }, + { {ACTION_USE, OBJECT_IROCK, OBJECT_LEFT_VINE, 0}, &Room::feather1UseRockOnLeftVine }, + { {ACTION_FINISHED_WALKING, 1, 0, 0}, &Room::feather1ReadyToThrowRock1 }, + { {ACTION_FINISHED_ANIMATION, 1, 0, 0}, &Room::feather1ThrewRock1 }, + { {ACTION_FINISHED_WALKING, 2, 0, 0}, &Room::feather1ReadyToThrowRock2 }, + { {ACTION_FINISHED_ANIMATION, 2, 0, 0}, &Room::feather1ThrewRock2 }, + + { {ACTION_USE, OBJECT_SPOCK, OBJECT_LEFT_VINE, 0}, &Room::feather1UseSpockOnVine }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseSpockOnVine }, + { {ACTION_USE, OBJECT_MCCOY, OBJECT_LEFT_VINE, 0}, &Room::feather1UseMccoyOnVine }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseMccoyOnVine }, + { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_LEFT_VINE, 0}, &Room::feather1UseRedshirtOnVine }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseRedshirtOnVine }, + { {ACTION_USE, OBJECT_KIRK, OBJECT_LEFT_VINE, 0}, &Room::feather1UseKirkOnVine }, + { {ACTION_USE, OBJECT_KIRK, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseKirkOnVine }, + { {ACTION_FINISHED_WALKING, 3, 0, 0}, &Room::feather1ReachedVineToClimbUp }, + { {ACTION_FINISHED_ANIMATION, 3, 0, 0}, &Room::feather1ClimbedUpVine }, + { {ACTION_FINISHED_WALKING, 10, 0, 0}, &Room::feather1ReachedVineToClimbDown }, + { {ACTION_FINISHED_ANIMATION, 10, 0, 0}, &Room::feather1ClimbedDownVine }, + + { {ACTION_USE, OBJECT_IPHASERS, -1, 0}, &Room::feather1UsePhaser }, + { {ACTION_USE, OBJECT_IPHASERK, -1, 0}, &Room::feather1UsePhaser }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseSTricorderOnRightVine }, + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_SNAKE, 0}, &Room::feather1UseSTricorderOnSnake }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_MOSS, 0}, &Room::feather1UseSTricorderOnMoss }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_HOLE, 0}, &Room::feather1UseSTricorderOnHole }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 0}, &Room::feather1UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_ROCKS, 0}, &Room::feather1UseSTricorderOnRocks }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_LEFT_VINE, 0}, &Room::feather1UseMTricorderOnVine }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_RIGHT_VINE, 0}, &Room::feather1UseMTricorderOnVine }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_MOSS, 0}, &Room::feather1UseMTricorderOnMoss }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_HOLE, 0}, &Room::feather1UseMTricorderOnHole }, + { {ACTION_USE, OBJECT_IMTRICOR, OBJECT_SNAKE, 0}, &Room::feather1UseMTricorderOnSnake }, + { {ACTION_USE, OBJECT_IMEDKIT, -1, 0}, &Room::feather1UseMedkit }, + { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::feather1TalkToMccoy }, + { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::feather1TalkToSpock }, + { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::feather1TalkToRedshirt }, + { {ACTION_WALK, HOTSPOT_EXIT, 0, 0}, &Room::feather1WalkToExit }, + { {ACTION_LOOK, -1, 0, 0}, &Room::feather1LookAnywhere }, + { {ACTION_LOOK, OBJECT_SNAKE, 0, 0}, &Room::feather1LookAtSnake }, + { {ACTION_LOOK, HOTSPOT_RIGHT_VINE, 0, 0}, &Room::feather1LookAtRightVine }, + { {ACTION_LOOK, HOTSPOT_HOLE, 0, 0}, &Room::feather1LookAtHole }, + { {ACTION_LOOK, HOTSPOT_MOSS, 0, 0}, &Room::feather1LookAtMoss }, + { {ACTION_LOOK, HOTSPOT_ROCKS, 0, 0}, &Room::feather1LookAtRocks }, + { {ACTION_LOOK, HOTSPOT_LIGHT, 0, 0}, &Room::feather1LookAtLight }, + { {ACTION_LOOK, HOTSPOT_EYES_1, 0, 0}, &Room::feather1LookAtEyes }, + { {ACTION_LOOK, HOTSPOT_EYES_2, 0, 0}, &Room::feather1LookAtEyes }, + { {ACTION_LOOK, HOTSPOT_EYES_3, 0, 0}, &Room::feather1LookAtEyes }, + { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::feather1LookAtKirk }, + { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather1LookAtSpock }, + { {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 }, }; extern const int feather1NumActions = sizeof(feather1ActionList) / sizeof(RoomAction); diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h index cec0eae87e..67b19d9f3a 100644 --- a/engines/startrek/rooms/function_map.h +++ b/engines/startrek/rooms/function_map.h @@ -31,1785 +31,1785 @@ namespace StarTrek { // FIXME: calling a constructor in global scope not allowed in scummvm? RoomAction demon0ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::demon0Tick1 }, - { Action(ACTION_TICK, 2, 0, 0), &Room::demon0Tick2 }, - { Action(ACTION_TICK, 60, 0, 0), &Room::demon0Tick60 }, - { Action(ACTION_TICK, 100, 0, 0), &Room::demon0Tick100 }, - { Action(ACTION_TICK, 140, 0, 0), &Room::demon0Tick140 }, - - { Action(ACTION_TOUCHED_WARP, 0, 0, 0), &Room::demon0TouchedWarp0 }, - - { Action(ACTION_WALK, 0x27, 0, 0), &Room::demon0WalkToBottomDoor }, - { Action(ACTION_WALK, 9, 0, 0), &Room::demon0WalkToBottomDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::demon0TouchedHotspot1 }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon0ReachedBottomDoor }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon0ReachedBottomDoor }, - - { Action(ACTION_WALK, 0x26, 0, 0), &Room::demon0WalkToTopDoor }, - { Action(ACTION_WALK, 10, 0, 0), &Room::demon0WalkToTopDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::demon0TouchedHotspot0 }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon0ReachedTopDoor }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon0ReachedTopDoor }, - - { Action(ACTION_TALK, 8, 0, 0), &Room::demon0TalkToPrelate }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon0LookAtPrelate }, - - { Action(ACTION_USE, OBJECT_IPHASERS, 0x23, 0), &Room::demon0UsePhaserOnSnow }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x23, 0), &Room::demon0UsePhaserOnSnow }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x25, 0), &Room::demon0UsePhaserOnSign }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x25, 0), &Room::demon0UsePhaserOnSign }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x20, 0), &Room::demon0UsePhaserOnShelter }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::demon0UsePhaserOnPrelate }, - - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::demon0LookAtSign }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon0LookAtTrees }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon0LookAtTrees }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::demon0LookAtSnow }, - { Action(ACTION_LOOK, 0xff, 0, 0), &Room::demon0LookAnywhere }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::demon0LookAtBushes }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon0LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon0LookAtMcCoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon0LookAtRedShirt }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon0LookAtSpock }, - - { Action(ACTION_LOOK, 9, 0, 0), &Room::demon0LookAtShelter }, // Door 1 - { Action(ACTION_LOOK, 10, 0, 0), &Room::demon0LookAtShelter }, // Door 2 - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon0LookAtShelter }, // Shelter itself - - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon0TalkToKirk }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon0TalkToRedshirt }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon0TalkToMcCoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon0TalkToSpock }, - - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::demon0UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::demon0UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon0UseMTricorderOnPrelate }, + { {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, -1, 0}, &Room::demon0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_IMTRICOR, -1, 0}, &Room::demon0UseMTricorderAnywhere }, + { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::demon0UseMTricorderOnPrelate }, }; RoomAction demon1ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::demon1Tick1 }, - - { Action(ACTION_WALK, 0x25, 0, 0), &Room::demon1WalkToCave }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon1TouchedTopWarp }, - { Action(ACTION_TOUCHED_WARP, 0, 0, 0), &Room::demon1TouchedTopWarp }, - { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::demon1TouchedBottomWarp }, - - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::demon1Timer2Expired }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::demon1Timer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::demon1Timer3Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::demon1Timer1Expired }, - - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon1KlingonFinishedAimingWeapon }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon1KirkShot }, - - { Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::demon1UsePhaserOnAnything }, - { Action(ACTION_USE, OBJECT_IPHASERS, -1, 0), &Room::demon1UsePhaserOnAnything }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::demon1UsePhaserOnKlingon1 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::demon1UsePhaserOnKlingon1 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::demon1ShootKlingon1 }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::demon1KlingonDropsHand }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 9, 0), &Room::demon1UsePhaserOnKlingon2 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::demon1UsePhaserOnKlingon2 }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::demon1ShootKlingon2 }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 10, 0), &Room::demon1UsePhaserOnKlingon3 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::demon1UsePhaserOnKlingon3 }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::demon1ShootKlingon3 }, - - { Action(ACTION_TIMER_EXPIRED, 6, 0, 0), &Room::demon1AllKlingonsDead }, - { Action(ACTION_TIMER_EXPIRED, 5, 0, 0), &Room::demon1Timer5Expired }, - - { Action(ACTION_USE, OBJECT_IMTRICOR, 13, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon1UseSTricorderOnTulips }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::demon1UseSTricorderOnPods }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::demon1UseSTricorderOnCattails }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::demon1UseSTricorderOnFerns }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 13, 0), &Room::demon1UseSTricorderOnHand }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::demon1UseSTricorderOnKlingon1 }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 10, 0), &Room::demon1UseSTricorderOnKlingon2Or3 }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::demon1UseSTricorderOnKlingon2Or3 }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 8, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 10, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::demon1UseMTricorderOnKlingon }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::demon1UseSTricorderOnKlingon2Or3 }, // This is redundant - - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::demon1UseMTricorderOnKirk }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::demon1UseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::demon1UseMTricorderOnRedshirt }, - - { Action(ACTION_GET, 13, 0, 0), &Room::demon1GetHand }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon1ReachedHand }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::demon1PickedUpHand }, - { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::demon1FinishedGettingHand }, - - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon1LookAtKlingon }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::demon1LookAtKlingon }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::demon1LookAtKlingon }, - - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon1LookAtCattails }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon1LookAtTulips }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon1LookAtPods }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::demon1LookAtFerns }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::demon1LookAtStream }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::demon1LookAtMine }, - { Action(ACTION_LOOK, 0x26, 0, 0), &Room::demon1LookAtMountain }, - { Action(ACTION_LOOK, 13, 0, 0), &Room::demon1LookAtHand }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon1LookAnywhere }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon1LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon1LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon1LookAtMcCoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon1LookAtRedshirt }, - - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon1TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon1TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon1TalkToMcCoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon1TalkToRedshirt }, + { {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, -1, 0}, &Room::demon1UsePhaserOnAnything }, + { {ACTION_USE, OBJECT_IPHASERS, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::demon2Tick1 }, - { Action(ACTION_WALK, 0x27, 0, 0), &Room::demon2WalkToCave }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon2ReachedCave }, - { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::demon2TouchedWarp1 }, - - { Action(ACTION_LOOK, 0x27, 0, 0), &Room::demon2LookAtCave }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon2LookAtCave }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon2LookAtMountain }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon2LookAtMountain }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::demon2LookAtBerries }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::demon2LookAtFern }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::demon2LookAtMoss }, - { Action(ACTION_LOOK, 0x26, 0, 0), &Room::demon2LookAtLights }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon2LookAtAnything }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon2LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon2LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon2LookAtMcCoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon2LookAtRedshirt }, - - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon2TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon2TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon2TalkToMcCoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon2TalkToRedshirt }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 0x23, 0), &Room::demon2UsePhaserOnBerries }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x23, 0), &Room::demon2UsePhaserOnBerries }, - - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::demon2UseSTricorderOnBerries }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::demon2UseSTricorderOnMoss }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x24, 0), &Room::demon2UseSTricorderOnFern }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::demon2UseSTricorderOnCave }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon2UseSTricorderOnCave }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::demon2UseSTricorderOnCave }, - - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x23, 0), &Room::demon2UseMTricorderOnBerries }, - { Action(ACTION_GET, 0x23, 0, 0), &Room::demon2GetBerries }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon2ReachedBerries }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon2PickedUpBerries }, + { {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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::demon3Tick1 }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::demon3Timer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::demon3Timer1Expired }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::demon3Timer3Expired }, - - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon3FinishedAnimation1 }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon3FinishedAnimation2 }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::demon3FinishedWalking5 }, - - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::demon3McCoyInFiringPosition }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon3SpockInFiringPosition }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::demon3RedShirtInFiringPosition }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon3KirkInFiringPosition }, - - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::demon3FireAtBoulder }, - - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_REDSHIRT, 0), &Room::demon3UsePhaserOnRedshirt }, - { Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_REDSHIRT, 0), &Room::demon3UsePhaserOnRedshirt }, - - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::demon3UseStunPhaserOnBoulder }, - { Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::demon3UseStunPhaserOnBoulder }, - { Action(ACTION_USE, OBJECT_IPHASERS, 11, 0), &Room::demon3UseStunPhaserOnBoulder }, - { Action(ACTION_USE, OBJECT_IPHASERS, 12, 0), &Room::demon3UseStunPhaserOnBoulder }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 9, 0), &Room::demon3UsePhaserOnBoulder1 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 10, 0), &Room::demon3UsePhaserOnBoulder2 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 11, 0), &Room::demon3UsePhaserOnBoulder3 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 12, 0), &Room::demon3UsePhaserOnBoulder4 }, - - { Action(ACTION_USE, OBJECT_ISTRICOR, 13, 0), &Room::demon3UseSTricorderOnMiner }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::demon3UseSTricorderOnPanel }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::demon3UseSTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 10, 0), &Room::demon3UseSTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 11, 0), &Room::demon3UseSTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 12, 0), &Room::demon3UseSTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::demon3UseMTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::demon3UseMTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 11, 0), &Room::demon3UseMTricorderOnBoulder }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 12, 0), &Room::demon3UseMTricorderOnBoulder }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::demon3UseCrewmanOnPanel }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::demon3UseCrewmanOnPanel }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::demon3UseCrewmanOnPanel }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::demon3UseRedshirtOnPanel }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::demon3RedshirtReachedPanel }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::demon3RedshirtUsedPanel }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::demon3RedshirtElectrocuted }, - - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon3UseSTricorderOnDoor }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::demon3UseSTricorderOnAnything }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 14, 0), &Room::demon3UseMTricorderOnDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::demon3UseMTricorderOnDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x22, 0), &Room::demon3UseMTricorderOnDoor }, - { Action(ACTION_USE, OBJECT_IPHASERS, 14, 0), &Room::demon3UsePhaserOnDoor }, - { Action(ACTION_USE, OBJECT_IPHASERK, 14, 0), &Room::demon3UsePhaserOnDoor }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x21, 0), &Room::demon3UsePhaserOnDoor }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x21, 0), &Room::demon3UsePhaserOnDoor }, - - { Action(ACTION_USE, OBJECT_IHAND, 0x20, 0), &Room::demon3UseHandOnPanel }, - { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::demon3KirkReachedHandPanel }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::demon3KirkUsedHandPanel }, - - { Action(ACTION_USE, OBJECT_IMTRICOR, 13, 0), &Room::demon3UseMTricorderOnMiner }, - { Action(ACTION_USE, OBJECT_MCCOY, 13, 0), &Room::demon3UseMedkitOnMiner }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 13, 0), &Room::demon3UseMedkitOnMiner }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::demon3McCoyReachedMiner }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::demon3McCoyFinishedHealingMiner }, - - { Action(ACTION_GET, 13, 0, 0), &Room::demon3GetMiner }, - { Action(ACTION_TALK, 13, 0, 0), &Room::demon3TalkToMiner }, - - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon3TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon3TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon3TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon3TalkToRedshirt }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon3LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon3LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon3LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon3LookAtRedshirt }, - - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon3LookAnywhere }, - { Action(ACTION_LOOK, 13, 0, 0), &Room::demon3LookAtMiner }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::demon3LookAtBoulder1 }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::demon3LookAtBoulder2 }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::demon3LookAtBoulder3 }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::demon3LookAtBoulder4 }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon3LookAtStructure }, - { Action(ACTION_LOOK, 14, 0, 0), &Room::demon3LookAtDoor }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon3LookAtDoor }, - { Action(ACTION_LOOK, 15, 0, 0), &Room::demon3LookAtPanel }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon3LookAtPanel }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon3LookAtLight }, + { {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, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::demon4Tick1 }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon4FinishedAnimation1 }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon4FinishedAnimation2 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::demon4FinishedAnimation3 }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::demon4Timer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::demon4Timer1Expired }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::demon4CrewmanReachedBeamoutPosition }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::demon4Timer2Expired }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::demon4Timer3Expired }, - { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::demon4Timer4Expired }, - { Action(ACTION_TIMER_EXPIRED, 5, 0, 0), &Room::demon4Timer5Expired }, - { Action(ACTION_TIMER_EXPIRED, 6, 0, 0), &Room::demon4Timer6Expired }, - - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::demon4UsePhaserOnNauian }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::demon4UsePhaserOnNauian }, - { Action(ACTION_USE, OBJECT_IMETAL, 0x22, 0), &Room::demon4UseMetalOnSecurityEquipment }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::demon4KirkReachedSecurityEquipment }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::demon4KirkFinishedUsingSecurityEquipment }, - { Action(ACTION_USE, OBJECT_IMETAL, 8, 0), &Room::demon4UseMetalOnNauian }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon4KirkReachedNauian }, - { Action(ACTION_USE, OBJECT_ISKULL, 8, 0), &Room::demon4UseSkullOnNauian }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon4KirkReachedNauianWithSkull }, - - { Action(ACTION_USE, OBJECT_IPHASERS, 0x21, 0), &Room::demon4UsePhaserOnPanel }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x20, 0), &Room::demon4UsePhaserOnPattern }, - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0), &Room::demon4UsePhaserOnMccoy }, - - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::demon4TalkToNauian }, - { Action(ACTION_TALK, 8, 0, 0), &Room::demon4TalkToNauian }, - - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon4LookAtPattern }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon4LookAtAlien }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon4LookAnywhere }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon4LookAtSecurityEquipment }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::demon4LookAtFloor }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon4LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon4LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon4LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon4LookAtRedshirt }, - - { Action(ACTION_LOOK, 10, 0, 0), &Room::demon4LookAtChamber }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon4LookAtPanel }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::demon4UseKirkOnPanel }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::demon4UseSpockOnPanel }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::demon4UseMccoyOnPanel }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::demon4UseRedshirtOnPanel }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::demon4CrewmanReachedPanel }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon4TalkToKirk }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon4TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon4TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon4TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 10, 0), &Room::demon4UseSTricorderOnChamber }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::demon4UseSTricorderOnPattern }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x20, 0), &Room::demon4UseMTricorderOnPattern }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon4UseSTricorderOnPanel }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::demon4UseMTricorderOnPanel }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::demon4UseSTricorderOnAnything }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::demon4UseSTricorderOnAnything }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x23, 0), &Room::demon4UseMTricorderOnAnything }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::demon4UseMTricorderOnAnything }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::demon4UseSTricorderOnNauian }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon4UseMTricorderOnNauian }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::demon4UseSTricorderOnSecurityEquipment }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x22, 0), &Room::demon4UseMTricorderOnSecurityEquipment }, + { {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, -1, 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, -1, 0}, &Room::demon4UseSTricorderOnAnything }, + { {ACTION_USE, OBJECT_IMTRICOR, 0x23, 0}, &Room::demon4UseMTricorderOnAnything }, + { {ACTION_USE, OBJECT_IMTRICOR, -1, 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(ACTION_TICK, 1, 0, 0), &Room::demon5Tick1 }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::demon5WalkToDoor }, - { Action(ACTION_WALK, 12, 0, 0), &Room::demon5WalkToDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::demon5TouchedDoorOpenTrigger }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon5DoorOpenedOrReachedDoor }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon5DoorOpenedOrReachedDoor }, - - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon5UseSTricorderOnCrate }, - { Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::demon5UsePhaserOnAnything }, - { Action(ACTION_USE, OBJECT_IPHASERS, -1, 0), &Room::demon5UsePhaserOnAnything }, - - { Action(ACTION_USE, OBJECT_IHAND, 11, 0), &Room::demon5UseHandOnStephen }, - { Action(ACTION_USE, OBJECT_IBERRY, 11, 0), &Room::demon5UseBerryOnStephen }, - { Action(ACTION_USE, OBJECT_IDETOXIN, 9, 0), &Room::demon5UseHypoDytoxinOnChub }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon5MccoyReachedChub }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon5MccoyHealedChub }, - - { Action(ACTION_USE, OBJECT_IDETOXIN, -1, 0), &Room::demon5UseHypoDytoxinOnAnything }, - { Action(ACTION_USE, OBJECT_IBERRY, 9, 0), &Room::demon5UseBerryOnChub }, - - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon5LookAtRoberts }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::demon5LookAtGrisnash }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::demon5LookAtStephen }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon5LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon5LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon5LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon5LookAtRedshirt }, - - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon5LookAtMountain }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon5LookAtCrate }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon5LookAnywhere }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::demon5LookAtChub }, - - { Action(ACTION_TALK, 8, 0, 0), &Room::demon5TalkToRoberts }, - { Action(ACTION_TALK, 9, 0, 0), &Room::demon5TalkToChub }, - { Action(ACTION_TALK, 10, 0, 0), &Room::demon5TalkToGrisnash }, - { Action(ACTION_TALK, 11, 0, 0), &Room::demon5TalkToStephen }, - - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon5TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon5TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon5TalkToRedshirt }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon5TalkToMccoy }, - - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon5UseMTricorderOnRoberts }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::demon5UseMTricorderOnChub }, - { Action(ACTION_USE, OBJECT_MCCOY, 9, 0), &Room::demon5UseMTricorderOnChub }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::demon5UseMTricorderOnChub }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::demon5UseMTricorderOnGrisnash }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 11, 0), &Room::demon5UseMTricorderOnStephen }, - - { Action(ACTION_GET, 0x21, 0, 0), &Room::demon5GetCrate }, + { {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, -1, 0}, &Room::demon5UsePhaserOnAnything }, + { {ACTION_USE, OBJECT_IPHASERS, -1, 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, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::demon6Tick1 }, - { Action(ACTION_TICK, 30, 0, 0), &Room::demon6Tick30 }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::demon6SpockReachedComputer }, - - { Action(ACTION_WALK, 0x26, 0, 0), &Room::demon6WalkToDoor }, - { Action(ACTION_WALK, 10, 0, 0), &Room::demon6WalkToDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::demon6TouchedDoorOpenTrigger }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::demon6DoorOpenedOrReachedDoor }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::demon6DoorOpenedOrReachedDoor }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::demon6UsePhaserOnStephen }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::demon6UsePhaserOnStephen }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x20, 0), &Room::demon6UsePhaserOnCase }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x20, 0), &Room::demon6UsePhaserOnCase }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::demon6LookAtWorkspace }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::demon6LookAtCase }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::demon6LookAtTable }, - { Action(ACTION_LOOK, OBJECT_IMINERAL, 0, 0), &Room::demon6LookAtMineral }, - { Action(ACTION_LOOK, OBJECT_ISHELLS, 0, 0), &Room::demon6LookAtShells }, - { Action(ACTION_LOOK, OBJECT_ISKULL, 0, 0), &Room::demon6LookAtSkull }, - { Action(ACTION_LOOK, OBJECT_IMETAL, 0, 0), &Room::demon6LookAtMetal }, - { Action(ACTION_LOOK, OBJECT_IMETEOR, 0, 0), &Room::demon6LookAtMeteor }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::demon6LookAtMountain }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::demon6LookAtSynthesizer }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::demon6LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::demon6LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::demon6LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::demon6LookAtRedshirt }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::demon6LookAtComputer }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::demon6LookAtComputer }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::demon6LookAnywhere }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::demon6LookAtStephen }, - - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::demon6TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::demon6TalkToSpock }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::demon6TalkToKirk }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::demon6TalkToRedshirt }, - { Action(ACTION_TALK, 8, 0, 0), &Room::demon6TalkToStephen }, - { Action(ACTION_USE, OBJECT_IBERRY, 8, 0), &Room::demon6UseBerryOnStephen }, - { Action(ACTION_USE, OBJECT_IBERRY, 0x23, 0), &Room::demon6UseBerryOnSynthesizer }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::demon6MccoyReachedSynthesizer }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::demon6FinishedMakingHypoDytoxin }, - { Action(ACTION_USE, OBJECT_IHAND, 0x22, 0), &Room::demon6UseHandOnWorkspace }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::demon6SpockReachedWorkspace }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::demon6SpockFinishedRepairingHand }, - { Action(ACTION_USE, -1, 0x22, 0), &Room::demon6UseAnythingOnWorkspace }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::demon6UseCrewmanOnCase }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::demon6UseCrewmanOnCase }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::demon6UseCrewmanOnCase }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::demon6UseCrewmanOnCase }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::demon6UseKirkOnComputer }, - { Action(ACTION_USE, OBJECT_KIRK, 9, 0), &Room::demon6UseKirkOnComputer }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::demon6UseMccoyOnComputer }, - { Action(ACTION_USE, OBJECT_MCCOY, 9, 0), &Room::demon6UseMccoyOnComputer }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::demon6UseRedshirtOnComputer }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 9, 0), &Room::demon6UseRedshirtOnComputer }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::demon6UseSpockOnComputer }, - { Action(ACTION_USE, OBJECT_SPOCK, 9, 0), &Room::demon6UseSpockOnComputer }, - { Action(ACTION_USE, OBJECT_IMINERAL, 8, 0), &Room::demon6UseMineralOnStephen }, - { Action(ACTION_USE, OBJECT_ISHELLS, 8, 0), &Room::demon6UseShellsOnStephen }, - { Action(ACTION_USE, OBJECT_IMETEOR, 8, 0), &Room::demon6UseMeteorOnStephen }, - { Action(ACTION_USE, OBJECT_ISKULL, 8, 0), &Room::demon6UseSkullOnStephen }, - { Action(ACTION_USE, OBJECT_IMETAL, 8, 0), &Room::demon6UseMetalOnStephen }, - { Action(ACTION_USE, OBJECT_IHAND, 8, 0), &Room::demon6UseHandOnStephen }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::demon6UseMTricoderOnStephen }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::demon6UseSTricoderOnTable }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::demon6UseSTricoderOnComputer }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::demon6UseSTricoderOnComputer }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMINERAL, 0), &Room::demon6UseSTricoderOnMineral }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISHELLS, 0), &Room::demon6UseSTricoderOnShells }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_ISKULL, 0), &Room::demon6UseSTricoderOnSkull }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETAL, 0), &Room::demon6UseSTricoderOnMetal }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_IMETEOR, 0), &Room::demon6UseSTricoderOnMeteor }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::demon6UseSTricoderOnCase }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::demon6UseSTricoderOnSynthesizer }, - { Action(ACTION_GET, 0x20, 0, 0), &Room::demon6GetCase }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::demon6KirkReachedCase }, + { {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, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::tug0Tick1 }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::tug0LookAtEngineer }, - { Action(ACTION_GET, 8, 0, 0), &Room::tug0GetEngineer }, - - { Action(ACTION_LOOK, 11, 0, 0), &Room::tug0LookAtControls }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::tug0LookAtControls }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::tug0UseSpockOnControls }, - { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::tug0SpockReachedControlsToExamine }, - { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::tug0SpockExaminedControls }, - { Action(ACTION_USE, OBJECT_IRT, 0x21, 0), &Room::tug0UseTransmogrifierWithoutBitOnControls }, - { Action(ACTION_USE, OBJECT_IRTWB, 0x21, 0), &Room::tug0UseTransmogrifierWithBitOnControls }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::tug0SpockReachedControlsWithTransmogrifier }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug0SpockFinishedUsingTransmogrifier }, - { Action(ACTION_FINISHED_ANIMATION, 22, 0, 0), &Room::tug0TransporterScreenFullyLit }, - { Action(ACTION_USE, OBJECT_IWIRSCRP, 0x21, 0), &Room::tug0UseWireScrapsOnControls }, - { Action(ACTION_USE, OBJECT_IWIRING, 0x21, 0), &Room::tug0UseWireOnControls }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::tug0SpockReachedControlsWithWire }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::tug0SpockFinishedUsingWire }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 8, 0), &Room::tug0UseMedkitOnEngineer }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::tug0MccoyReachedEngineer }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::tug0MccoyHealedEngineer }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::tug0EngineerGotUp }, - { Action(ACTION_GET, 9, 0, 0), &Room::tug0GetTransmogrifier }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::tug0KirkReachedToolbox }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::tug0KirkGotTransmogrifier }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::tug0LookAtToolbox }, - - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0), &Room::tug0UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0), &Room::tug0UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0), &Room::tug0UseWelderOnWireScraps }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0), &Room::tug0UseWelderOnMetalScraps }, - { Action(ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0), &Room::tug0UseCombBitOnTransmogrifier }, - - { Action(ACTION_USE, OBJECT_SPOCK, 11, 0), &Room::tug0UseTransporter }, - { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::tug0UseTransporter }, - { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::tug0SpockReachedControlsToTransport }, - { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::tug0SpockPreparedTransporter }, - { Action(ACTION_FINISHED_WALKING, 20, 0, 0), &Room::tug0SpockReachedTransporter }, - { Action(ACTION_FINISHED_ANIMATION, 21, 0, 0), &Room::tug0FinishedTransporting }, - - { Action(ACTION_USE, OBJECT_IBOMB, 0x22, 0), &Room::tug0UseBombOnTransporter }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::tug0KirkReachedTransporter }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::tug0KirkPlacedBomb }, - { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::tug0SpockReachedControlsForBomb }, - { Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::tug0SpockBeginsBeamingBomb }, - { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::tug0SpockFinishesBeamingBomb }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::tug0BombExploded }, - - { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::tug0UseMTricorderOnControls }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::tug0UseMTricorderOnControls }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::tug0UseSTricorderOnControls }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::tug0UseMTricorderOnEngineer }, - { Action(ACTION_FINISHED_WALKING, 24, 0, 0), &Room::tug0MccoyReachedEngineerToScan }, - { Action(ACTION_FINISHED_ANIMATION, 25, 0, 0), &Room::tug0MccoyFinishedScanningEngineer }, - { Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::tug0UseSTricorderOnEngineer }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::tug0UseSTricorderOnEngineer }, - { Action(ACTION_WALK, 0x23, 0, 0), &Room::tug0WalkToDoor }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::tug0LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::tug0LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::tug0LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::tug0LookAtRedshirt }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::tug0LookAtTransporter }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::tug0LookAtDoor }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::tug0TalkToKirk }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::tug0TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::tug0TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::tug0TalkToRedshirt }, - { Action(ACTION_TALK, 8, 0, 0), &Room::tug0TalkToEngineer }, - { Action(ACTION_USE, OBJECT_ICOMM, 0, 0), &Room::tug0UseCommunicator }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::tug0LookAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::tug0UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::tug0UseMTricorderAnywhere }, + { {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, -1, 0, 0}, &Room::tug0LookAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 0}, &Room::tug0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_IMTRICOR, -1, 0}, &Room::tug0UseMTricorderAnywhere }, }; RoomAction tug1ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::tug1Tick1 }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::tug1UseSTricorderOnAnything }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::tug1LookAtBridgeDoor }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::tug1UseSTricorderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x21, 0), &Room::tug1UsePhaserOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x21, 0), &Room::tug1UsePhaserOnBridgeDoor }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::tug1KirkReachedFiringPosition }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::tug1KirkPulledOutPhaser }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::tug1KirkFinishedFiringPhaser }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::tug1TalkToSpock }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::tug1UseSTricorderOnJunkPile }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::tug1LookAtJunkPile }, - { Action(ACTION_GET, 8, 0, 0), &Room::tug1GetJunkPile }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::tug1KirkReachedJunkPile }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::tug1KirkFinishedTakingJunkPile }, - - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0), &Room::tug1UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0), &Room::tug1UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0), &Room::tug1UseWelderOnWireScraps }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0), &Room::tug1UseWelderOnMetalScraps }, - { Action(ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0), &Room::tug1UseCombBitOnTransmogrifier }, - - { Action(ACTION_USE, OBJECT_IPWF, 0x22, 0), &Room::tug1UsePhaserWelderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IPWF, 0x21, 0), &Room::tug1UsePhaserWelderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IPWF, 0x20, 0), &Room::tug1UsePhaserWelderOnBridgeDoorInLeftSpot }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::tug1KirkReachedBridgeDoorWithWelder }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug1KirkFinishedUsingWelder }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::tug1KirkReachedBridgeDoorWithWelderInLeftSpot }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::tug1KirkFinishedUsingWelderInLeftSpot }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::tug1LookAnywhere }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::tug1LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::tug1LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::tug1LookAtRedshirt }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::tug1TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::tug1TalkToRedshirt }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::tug1LookAtTerminal }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::tug1LookAtDebris }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::tug1LookAtBrigDoor }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::tug1UseSTricorderOnBrigDoor }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::tug1TalkToKirk }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::tug1UseCommunicator }, - { Action(ACTION_WALK, 0x21, 0, 0), &Room::tug1WalkToBridgeDoor }, - { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::tug1KirkReachedBridgeDoor }, - { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::tug1BridgeDoorOpened }, - { Action(ACTION_WALK, 0x25, 0, 0), &Room::tug1WalkToBrigDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::tug1UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::tug1UseMTricorderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x20, 0), &Room::tug1UseMTricorderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x22, 0), &Room::tug1UseMTricorderOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x25, 0), &Room::tug1UseMTricorderOnBrigDoor }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::tug1UseSpockOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::tug1UseSpockOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::tug1UseSpockOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::tug1UseRedshirtOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::tug1UseRedshirtOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::tug1UseRedshirtOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 0x20, 0), &Room::tug1UseMedkitOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 0x21, 0), &Room::tug1UseMedkitOnBridgeDoor }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 0x22, 0), &Room::tug1UseMedkitOnBridgeDoor }, + { {ACTION_TICK, 1, 0, 0}, &Room::tug1Tick1 }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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, -1, 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, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::tug2Tick1 }, - { Action(ACTION_TICK, 60, 0, 0), &Room::tug2Tick60 }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::tug2LookAtButton }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::tug2LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::tug2LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::tug2LookAtRedshirt }, - { Action(ACTION_GET, 11, 0, 0), &Room::tug2GetBomb }, - { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::tug2KirkReachedBomb }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::tug2KirkGotBomb }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::tug2LookAtBomb }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::tug2LookAtGuard1 }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::tug2LookAtGuard2 }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::tug2LookAtWires }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 12, 0), &Room::tug2UseSTricorderOnButton }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::tug2UseSTricorderOnButton }, - { Action(ACTION_USE, OBJECT_MCCOY, 12, 0), &Room::tug2UseMccoyOnWires }, - { Action(ACTION_USE, OBJECT_MCCOY, 11, 0), &Room::tug2UseMccoyOnBomb }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 12, 0), &Room::tug2UseRedshirtOnWires }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::tug2RedshirtReachedWires }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug2RedshirtDefusedBomb }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::tug2RedshirtReturnedToPosition }, - { Action(ACTION_USE, OBJECT_KIRK, 12, 0), &Room::tug2UseKirkOnWires }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::tug2KirkReachedWires }, - { Action(ACTION_USE, OBJECT_SPOCK, 12, 0), &Room::tug2UseSpockOnWires }, - { Action(ACTION_FINISHED_WALKING, 9, 0, 0), &Room::tug2SpockReachedWires }, - { Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::tug2SpockReturnedToPosition }, - { Action(ACTION_GET, 12, 0, 0), &Room::tug2GetWires }, - { Action(ACTION_FINISHED_WALKING, 28, 0, 0), &Room::tug2KirkReachedWiresToGet }, - { Action(ACTION_FINISHED_ANIMATION, 29, 0, 0), &Room::tug2KirkGotWires }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::tug2UseKirkOnButton }, - { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::tug2KirkReachedButton }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::tug2UseSpockOnButton }, - { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::tug2SpockReachedButton }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::tug2UseMccoyOnButton }, - { Action(ACTION_FINISHED_WALKING, 18, 0, 0), &Room::tug2MccoyReachedButton }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::tug2UseRedshirtOnButton }, - { Action(ACTION_FINISHED_WALKING, 20, 0, 0), &Room::tug2RedshirtReachedButton }, - { Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::tug2TurnedOffForceField }, - { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::tug2TurnedOffForceField }, - { Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::tug2TurnedOffForceField }, - { Action(ACTION_FINISHED_ANIMATION, 21, 0, 0), &Room::tug2TurnedOffForceField }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::tug2PrisonersDead }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::tug2PrisonersReleased }, - { Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::tug2UsePhaserOnBrig }, - { Action(ACTION_USE, OBJECT_IPHASERK, 10, 0), &Room::tug2UsePhaserOnBrig }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::tug2UseStunPhaserOnGuard1 }, - { Action(ACTION_FINISHED_ANIMATION, 22, 0, 0), &Room::tug2KirkShootGuard1 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::tug2UseStunPhaserOnGuard2 }, - { Action(ACTION_FINISHED_ANIMATION, 23, 0, 0), &Room::tug2KirkShootGuard2 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::tug2UseKillPhaserOnGuard1 }, - { Action(ACTION_FINISHED_ANIMATION, 24, 0, 0), &Room::tug2KirkKillGuard1 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 9, 0), &Room::tug2UseKillPhaserOnGuard2 }, - { Action(ACTION_FINISHED_ANIMATION, 25, 0, 0), &Room::tug2KirkKillGuard2 }, - - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_IPWE, 0), &Room::tug2UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPHASERK, OBJECT_IPWE, 0), &Room::tug2UsePhaserOnWelder }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IWIRSCRP, 0), &Room::tug2UseWelderOnWireScraps }, - { Action(ACTION_USE, OBJECT_IPWF, OBJECT_IJNKMETL, 0), &Room::tug2UseWelderOnMetalScraps }, - { Action(ACTION_USE, OBJECT_ICOMBBIT, OBJECT_IRT, 0), &Room::tug2UseCombBitOnTransmogrifier }, - - { Action(ACTION_FINISHED_ANIMATION, 26, 0, 0), &Room::tug2ShotByElasi }, - { Action(ACTION_FINISHED_ANIMATION, 27, 0, 0), &Room::tug2ShotByElasi }, - { Action(ACTION_WALK, 0x21, 0, 0), &Room::tug2WalkToDoor }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::tug2LookAtDoor }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::tug2LookAtKirk }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::tug2TalkToKirk }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::tug2TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::tug2TalkToRedshirt }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::tug2TalkToSpock }, - { Action(ACTION_USE, OBJECT_ICOMM, 0, 0), &Room::tug2UseCommunicator }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::tug2Timer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::tug2Timer2Expired }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 11, 0), &Room::tug2UseSTricorderOnBomb }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::tug2UseMTricorderOnGuard1 }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::tug2UseMTricorderOnGuard2 }, - { Action(ACTION_TALK, 8, 0, 0), &Room::tug2TalkToGuard1 }, - { Action(ACTION_TALK, 9, 0, 0), &Room::tug2TalkToGuard2 }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 11, 0), &Room::tug2UseMedkitOnBomb }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 8, 0), &Room::tug2UseMedkitOnGuard1 }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::tug2UseMedkitOnGuard2 }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::tug2LookAnywhere }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::tug2LookAnywhere }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::tug2LookAnywhere }, - { Action(ACTION_TALK, 10, 0, 0), &Room::tug2TalkToBrig }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::tug2UseMTricorderOnBrig }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x22, 0), &Room::tug2UseMTricorderOnOpenBrig }, - { Action(ACTION_USE, OBJECT_IPHASERS, -1, 0), &Room::tug2UsePhaserAnywhere }, - { Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::tug2UsePhaserAnywhere }, + { {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, -1, 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, -1, 0}, &Room::tug2UsePhaserAnywhere }, + { {ACTION_USE, OBJECT_IPHASERK, -1, 0}, &Room::tug2UsePhaserAnywhere }, }; RoomAction tug3ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::tug3Tick1 }, - { Action(ACTION_TICK, 40, 0, 0), &Room::tug3Tick40 }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::tug3LookAnywhere }, - { Action(ACTION_USE, OBJECT_IPHASERS, -1, 0), &Room::tug3UsePhaserAnywhere }, - { Action(ACTION_USE, OBJECT_IPHASERK, -1, 0), &Room::tug3UsePhaserAnywhere }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::tug3UseStunPhaserOnElasi1 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::tug3UseStunPhaserOnElasi2 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::tug3UseStunPhaserOnElasi3 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 11, 0), &Room::tug3UseStunPhaserOnElasi4 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::tug3UseKillPhaserOnElasi1 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 9, 0), &Room::tug3UseKillPhaserOnElasi2 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 10, 0), &Room::tug3UseKillPhaserOnElasi3 }, - { Action(ACTION_USE, OBJECT_IPHASERK, 11, 0), &Room::tug3UseKillPhaserOnElasi4 }, - { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::tug3ElasiStunnedOrKilled }, - { Action(ACTION_TALK, 8, 0, 0), &Room::tug3TalkToElasi1 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::tug3Elasi1DrewPhaser }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::tug3Elasi1ShotConsole }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::tug3Elasi1DrewPhaser2 }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::tug3Elasi1ShotConsoleAndSurrenders }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::tug3LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::tug3LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::tug3LookAtRedshirt }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::tug3LookAtElasi1 }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::tug3LookAtElasi2 }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::tug3LookAtElasi3 }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::tug3LookAtElasi4 }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::tug3TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::tug3TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::tug3TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::tug3UseCommunicator }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::tug3Timer0Expired }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::tug3AllCrewmenDead }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::tug3Timer1Expired }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::tug3SecurityTeamBeamedIn }, + { {ACTION_TICK, 1, 0, 0}, &Room::tug3Tick1 }, + { {ACTION_TICK, 40, 0, 0}, &Room::tug3Tick40 }, + { {ACTION_LOOK, -1, 0, 0}, &Room::tug3LookAnywhere }, + { {ACTION_USE, OBJECT_IPHASERS, -1, 0}, &Room::tug3UsePhaserAnywhere }, + { {ACTION_USE, OBJECT_IPHASERK, -1, 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, -1, 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(ACTION_TICK, 1, 0, 0), &Room::love0Tick1 }, - { Action(ACTION_TICK, 10, 0, 0), &Room::love0Tick10 }, - { Action(ACTION_WALK, 0x21, 0, 0), &Room::love0WalkToDoor2 }, - { Action(ACTION_WALK, 9, 0, 0), &Room::love0WalkToDoor2 }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love0OpenDoor2 }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love0ReachedDoor2 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love0ReachedDoor2 }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::love0WalkToDoor1 }, - { Action(ACTION_WALK, 8, 0, 0), &Room::love0WalkToDoor1 }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::love0OpenDoor1 }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love0ReachedDoor1 }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love0ReachedDoor1 }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love0LookAtConsole }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love0LookAtViewscreen }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::love0LookAnywhere }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::love0LookAtDoor1 }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love0LookAtDoor2 }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love0LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love0LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love0LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love0LookAtRedshirt }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love0TalkToKirk }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love0TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love0TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love0TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love0UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::love0UseSTricorderOnConsole }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love0UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love0UseKirkOnConsole }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love0UseRedshirtOnConsole }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love0UseSpockOnConsole }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love0SpockReachedConsole }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love0SpockAccessedConsole }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love0UseMccoyOnConsole }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love0MccoyReachedConsole }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love0MccoyAccessedConsole }, - { Action(ACTION_GET, 8, 0, 0), &Room::love0GetDoorOrConsole }, - { Action(ACTION_GET, 9, 0, 0), &Room::love0GetDoorOrConsole }, - { Action(ACTION_GET, 0x20, 0, 0), &Room::love0GetDoorOrConsole }, + { {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, -1, 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, -1, 0}, &Room::love0UseMTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::love0UseSTricorderOnConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, }; RoomAction love1ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::love1Tick1 }, - - { Action(ACTION_WALK, 10, 0, 0), &Room::love1WalkToDoor3 }, - { Action(ACTION_WALK, 0x26, 0, 0), &Room::love1WalkToDoor3 }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::love1OpenDoor3 }, - { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::love1ReachedDoor3 }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love1ReachedDoor3 }, - - { Action(ACTION_WALK, 8, 0, 0), &Room::love1WalkToDoor1 }, - { Action(ACTION_WALK, 0x27, 0, 0), &Room::love1WalkToDoor1 }, - { Action(ACTION_TOUCHED_HOTSPOT, 2, 0, 0), &Room::love1OpenDoor1 }, - { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::love1ReachedDoor1 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love1ReachedDoor1 }, - - { Action(ACTION_WALK, 9, 0, 0), &Room::love1WalkToDoor2 }, - { Action(ACTION_WALK, 0x28, 0, 0), &Room::love1WalkToDoor2 }, - { Action(ACTION_TOUCHED_HOTSPOT, 3, 0, 0), &Room::love1OpenDoor2 }, - { Action(ACTION_FINISHED_WALKING, 17, 0, 0), &Room::love1ReachedDoor2 }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love1ReachedDoor2 }, - - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::love1LookAtLaser }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love1LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love1LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love1LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love1LookAtRedshirt }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::love1LookAnywhere }, - { Action(ACTION_LOOK, 15, 0, 0), &Room::love1LookAtNozzle }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::love1LookAtNozzle }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love1LookAtLadder }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love1LookAtDoor1Or2 }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::love1LookAtDoor1Or2 }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::love1LookAtDoor3 }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love1LookAtDistillator }, - { Action(ACTION_LOOK, 14, 0, 0), &Room::love1LookAtChamber }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::love1LookAtChamber }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love1LookAtReplicator }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::love1LookAtFreezer }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::love1LookAtFreezer }, - { Action(ACTION_LOOK, OBJECT_IDISHES, 0, 0), &Room::love1LookAtDishes }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love1TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love1TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love1TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love1TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_IDISHES, 0), &Room::love1UseMTricorderOnDishes }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love1UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::love1UseSTricorderOnReplicator }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 12, 0), &Room::love1UseSTricorderOnReplicator }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x25, 0), &Room::love1UseSTricorderOnLaser }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::love1UseSTricorderOnLaser }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::love1UseSTricorderOnFreezer }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love1UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, OBJECT_IDISHES, 0), &Room::love1UseSTricorderOnDishes }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::love1UseSTricorderOnDistillator }, - { Action(ACTION_GET, 11, 0, 0), &Room::love1GetFreezer }, - { Action(ACTION_GET, 0x22, 0, 0), &Room::love1GetFreezer }, - { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::love1KirkReachedFreezer }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::love1KirkGotVirusCulture }, - { Action(ACTION_GET, 14, 0, 0), &Room::love1GetFromChamber }, - { Action(ACTION_GET, 12, 0, 0), &Room::love1GetFromChamber }, - { Action(ACTION_GET, 0x23, 0, 0), &Room::love1GetFromChamber }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love1KirkReachedChamber }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::love1KirkGotCureSample }, - { Action(ACTION_GET, 15, 0, 0), &Room::love1GetFromNozzle }, - { Action(ACTION_GET, 0x24, 0, 0), &Room::love1GetFromNozzle }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love1KirkReachedNozzleToGet }, - { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::love1KirkGotBottleFromNozzle }, - { Action(ACTION_USE, OBJECT_IN2O, 0x24, 0), &Room::love1UseN2OOnNozzle }, - { Action(ACTION_USE, OBJECT_IH2O, 0x24, 0), &Room::love1UseH2OOnNozzle }, - { Action(ACTION_USE, OBJECT_INH3, 0x24, 0), &Room::love1UseNH3OnNozzle }, - { Action(ACTION_USE, OBJECT_IRLG, 0x24, 0), &Room::love1UseRLGOnNozzle }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love1KirkReachedNozzleToPut }, - { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::love1KirkPutBottleInNozzle }, - { Action(ACTION_USE, -1, 0x24, 0), &Room::love1UseAnthingOnNozzle }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x23, 0), &Room::love1UseSpockOnReplicator }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x23, 0), &Room::love1UseRedshirtOnReplicator }, - { Action(ACTION_USE, OBJECT_MCCOY, 14, 0), &Room::love1UseMccoyOnReplicator }, - { Action(ACTION_USE, OBJECT_MCCOY, 15, 0), &Room::love1UseMccoyOnReplicator }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x23, 0), &Room::love1UseMccoyOnReplicator }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love1MccoyReachedReplicator }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::love1MccoyUsedReplicator }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love1ChamberClosed }, - { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::love1ChamberOpened }, - { Action(ACTION_USE, -1, 12, 0), &Room::love1UseAnythingOnChamber }, - { Action(ACTION_USE, OBJECT_IDISHES, 12, 0), &Room::love1UseDishesOnChamber }, - { Action(ACTION_USE, OBJECT_IDISHES, 0x23, 0), &Room::love1UseDishesOnChamber }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love1KirkReachedChamberToPut }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love1ChamberOpenedForDish }, - { Action(ACTION_FINISHED_ANIMATION, 14, 0, 0), &Room::love1KirkPutDishInChamber }, - { Action(ACTION_USE, OBJECT_IINSULAT, 0x21, 0), &Room::love1UseInsulationOnDistillator }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love1KirkReachedDistillator }, - { Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::love1KirkGotPolyberylcarbonate }, - { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::love1UseKirkOnFreezer }, - { Action(ACTION_USE, OBJECT_KIRK, 11, 0), &Room::love1UseKirkOnFreezer }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::love1UseRedshirtOnFreezer }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 11, 0), &Room::love1UseRedshirtOnFreezer }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::love1UseSpockOnFreezer }, - { Action(ACTION_USE, OBJECT_SPOCK, 11, 0), &Room::love1UseSpockOnFreezer }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x22, 0), &Room::love1UseMccoyOnFreezer }, - { Action(ACTION_USE, OBJECT_MCCOY, 11, 0), &Room::love1UseMccoyOnFreezer }, - { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love1CrewmanReachedFreezer }, - { Action(ACTION_FINISHED_ANIMATION, 16, 0, 0), &Room::love1CrewmanOpenedOrClosedFreezer }, - { Action(ACTION_USE, -1, 0x22, 0), &Room::love1UseAnythingOnFreezer }, - { Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::love1ReachedFreezerWithArbitraryItem }, - { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::love1FinishedUsingArbitraryItemOnFreezer }, - { Action(ACTION_USE, -1, 0x23, 0), &Room::love1UseAnythingOnReplicator }, - { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::love1ReachedReplicatorWithArbitraryItem }, - { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::love1FinishedUsingArbitraryItemOnReplicator }, - { Action(ACTION_USE, -1, 0x21, 0), &Room::love1UseAnythingOnDistillator }, - { Action(ACTION_FINISHED_WALKING, 13, 0, 0), &Room::love1ReachedDistillatorWithArbitraryItem }, - { Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::love1FinishedUsingArbitraryItemOnDistillator }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love1UseKirkOnLadder }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love1UseSpockOnLadder }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love1UseMccoyOnLadder }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love1UseRedshirtOnLadder }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love1CrewmanReachedLadder }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love1CrewmanDiedFromPhaser }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love1TouchedHotspot0 }, + { {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, -1, 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, -1, 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, -1, 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, -1, 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, -1, 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, -1, 0x22, 0}, &Room::love1UseAnythingOnFreezer }, + { {ACTION_FINISHED_WALKING, 11, 0, 0}, &Room::love1ReachedFreezerWithArbitraryItem }, + { {ACTION_FINISHED_ANIMATION, 17, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnFreezer }, + { {ACTION_USE, -1, 0x23, 0}, &Room::love1UseAnythingOnReplicator }, + { {ACTION_FINISHED_WALKING, 12, 0, 0}, &Room::love1ReachedReplicatorWithArbitraryItem }, + { {ACTION_FINISHED_ANIMATION, 18, 0, 0}, &Room::love1FinishedUsingArbitraryItemOnReplicator }, + { {ACTION_USE, -1, 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(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, }; RoomAction love2ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::love2Tick1 }, - { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::love2TouchedWarp1 }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::love2Timer3Expired }, - { Action(ACTION_WALK, 10, 0, 0), &Room::love2WalkToDoor }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::love2WalkToDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love2TouchedHotspot0 }, - { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::love2DoorReachedOrOpened }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love2DoorReachedOrOpened }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::love2LookAtCabinet }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::love2LookAtDoor }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love2LookAtSynthesizer }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::love2LookAtAnywhere }, - { Action(ACTION_LOOK, 14, 0, 0), &Room::love2LookAtAntigrav }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love2LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love2LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love2LookAtRedshirt }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love2LookAtKirk }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love2LookAtArdak }, - { Action(ACTION_LOOK, 15, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 16, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 18, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 19, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 17, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love2LookAtChamber }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::love2LookAtCan1 }, - { Action(ACTION_LOOK, 13, 0, 0), &Room::love2LookAtCan2 }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love2TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love2TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love2TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love2TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love2UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love2UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_KIRK, 8, 0), &Room::love2UseKirkOnCabinet }, - { Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::love2UseSpockOnCabinet }, - { Action(ACTION_USE, OBJECT_MCCOY, 8, 0), &Room::love2UseMccoyOnCabinet }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 8, 0), &Room::love2UseRedshirtOnCabinet }, - { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::love2CrewmanReachedCabinet }, - { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::love2CrewmanAccessedCabinet }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love2CrewmanOpenedOrClosedCabinet }, - { Action(ACTION_USE, OBJECT_IWRENCH, 11, 0), &Room::love2UseWrenchOnGasFeed }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love2ReachedGasFeed }, - { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::love2ChangedGasFeed }, - { Action(ACTION_USE, OBJECT_IO2GAS, 0x23, 0), &Room::love2UseO2GasOnCanisterSlot }, - { Action(ACTION_USE, OBJECT_IH2GAS, 0x23, 0), &Room::love2UseH2GasOnCanisterSlot }, - { Action(ACTION_USE, OBJECT_IN2GAS, 0x23, 0), &Room::love2UseN2GasOnCanisterSlot }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love2ReachedCanisterSlot }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::love2PutCanisterInSlot1 }, - { Action(ACTION_FINISHED_ANIMATION, 14, 0, 0), &Room::love2PutCanisterInSlot2 }, - { Action(ACTION_USE, OBJECT_IANTIGRA, 12, 0), &Room::love2UseAntigravOnCanister1 }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love2ReachedCanisterSlot1ToGet }, - { Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::love2TookCanister1 }, - { Action(ACTION_USE, OBJECT_IANTIGRA, 13, 0), &Room::love2UseAntigravOnCanister2 }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love2ReachedCanisterSlot2ToGet }, - { Action(ACTION_FINISHED_ANIMATION, 16, 0, 0), &Room::love2TookCanister2 }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love2UseKirkOnSynthesizer }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love2UseSpockOnSynthesizer }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love2UseMccoyOnSynthesizer }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love2UseRedshirtOnSynthesizer }, - { Action(ACTION_FINISHED_WALKING, 13, 0, 0), &Room::love2CrewmanReachedSynthesizer }, - { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::love2CrewmanUsedSynthesizer }, - { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::love2SpockReachedGasFeeds }, - { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::love2SpockEnabledGasFeeds }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love2SynthesizerDoorClosed }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love2SynthesizerFinished }, - { Action(ACTION_FINISHED_ANIMATION, 27, 0, 0), &Room::love2ClosedSynthesizerDoorMakingRLG }, - { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::love2ClosedSynthesizerDoorMakingCure }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::love2CureStartedSynthesizing }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::love2CureSynthesized }, - { Action(ACTION_USE, OBJECT_IPBC, 9, 0), &Room::love2UsePolyberylcarbonateOnSynthesizerDoor }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love2KirkReachedSynthesizerWithPolyberylcarbonate }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love2SynthesizerDoorOpenedWithPolyberylcarbonate }, - { Action(ACTION_FINISHED_ANIMATION, 19, 0, 0), &Room::love2PutPolyberylcarbonateInSynthesizer }, - - { Action(ACTION_USE, OBJECT_IDISHES, 9, 0), &Room::love2UseVirusSampleOnSynthesizerDoor }, - { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love2KirkReachedSynthesizerWithVirusSample }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love2SynthesizerDoorOpenedWithVirusSample }, - { Action(ACTION_FINISHED_ANIMATION, 20, 0, 0), &Room::love2PutVirusSampleInSynthesizer }, - - { Action(ACTION_USE, OBJECT_ISAMPLE, 9, 0), &Room::love2UseCureSampleOnSynthesizerDoor }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love2KirkReachedSynthesizerWithCureSample }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love2SynthesizerDoorOpenedWithCureSample }, - { Action(ACTION_FINISHED_ANIMATION, 21, 0, 0), &Room::love2PutCureSampleInSynthesizer }, - - { Action(ACTION_USE, -1, 9, 0), &Room::love2UseAnythingOnSynthesizerDoor }, - { Action(ACTION_USE, -1, 0x20, 0), &Room::love2UseAnythingOnSynthesizer }, - { Action(ACTION_GET, 13, 0, 0), &Room::love2GetCanister }, - { Action(ACTION_GET, 12, 0, 0), &Room::love2GetCanister }, - - { Action(ACTION_GET, 14, 0, 0), &Room::love2GetAntigrav }, - { Action(ACTION_FINISHED_WALKING, 9, 0, 0), &Room::love2ReachedAntigrav }, - { Action(ACTION_FINISHED_ANIMATION, 22, 0, 0), &Room::love2GotAntigrav }, - - { Action(ACTION_GET, 16, 0, 0), &Room::love2GetPolyberylcarbonate }, - { Action(ACTION_FINISHED_WALKING, 18, 0, 0), &Room::love2ReachedPolyberylcarbonate }, - { Action(ACTION_FINISHED_ANIMATION, 26, 0, 0), &Room::love2GotPolyberylcarbonate }, - - { Action(ACTION_GET, 17, 0, 0), &Room::love2GetDishes }, - { Action(ACTION_FINISHED_WALKING, 17, 0, 0), &Room::love2ReachedDishes }, - { Action(ACTION_FINISHED_ANIMATION, 25, 0, 0), &Room::love2GotDishes }, - - { Action(ACTION_GET, 18, 0, 0), &Room::love2GetSample }, - { Action(ACTION_FINISHED_WALKING, 19, 0, 0), &Room::love2ReachedSample }, - { Action(ACTION_FINISHED_ANIMATION, 28, 0, 0), &Room::love2GotSample }, - - { Action(ACTION_GET, 15, 0, 0), &Room::love2GetSynthesizerOutput }, - { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::love2ReachedSynthesizerOutput }, - { Action(ACTION_FINISHED_ANIMATION, 23, 0, 0), &Room::love2GotSynthesizerOutput }, - - { Action(ACTION_GET, 19, 0, 0), &Room::love2GetCure }, - { Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::love2ReachedCure }, - { Action(ACTION_FINISHED_ANIMATION, 24, 0, 0), &Room::love2GotCure }, + { {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, -1, 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, -1, 0}, &Room::love2UseMTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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, -1, 9, 0}, &Room::love2UseAnythingOnSynthesizerDoor }, + { {ACTION_USE, -1, 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(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, }; RoomAction love3ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::love3Tick1 }, - { Action(ACTION_TICK, 80, 0, 0), &Room::love3Tick80 }, - { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::love3TouchedWarp1 }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::love3Timer3Expired }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::love3LookAtServicePanel }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love3LookAtMonitor }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::love3LookAtWrench }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love3LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love3LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love3LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love3LookAtRedshirt }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::love3LookAnywhere }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::love3LookAtShaft }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::love3LookAtGrate }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love3LookAtPanel }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love3LookAtPanel }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::love3LookAtGasTank }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::love3LookAtTurbines }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love3TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love3TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love3TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love3TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love3UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::love3UseSTricorderOnTurbines }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::love3UseSTricorderOnInsulation }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love3UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_KIRK, 8, 0), &Room::love3UseKirkOnServicePanel }, - { Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::love3UseSpockOnServicePanel }, - { Action(ACTION_USE, OBJECT_MCCOY, 8, 0), &Room::love3UseMccoyOnServicePanel }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 8, 0), &Room::love3UseRedshirtOnServicePanel }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love3CrewmanReachedServicePanel }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love3OpenedOrClosedServicePanel }, - - { Action(ACTION_USE, OBJECT_IWRENCH, 12, 0), &Room::love3UseWrenchOnGasTank }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love3ReachedGasTankToUnscrew }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love3ScrewedOrUnscrewedGasTank }, - - { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IO2GAS, 0), &Room::love3UseWrenchOnO2OrH2Gas }, - { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IH2GAS, 0), &Room::love3UseWrenchOnO2OrH2Gas }, - - { Action(ACTION_USE, OBJECT_IWRENCH, OBJECT_IN2GAS, 0), &Room::love3UseWrenchOnN2Gas }, - { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::love3ReachedGasTankToPutDown }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love3PutN2TankBack }, - - { Action(ACTION_USE, OBJECT_IWRENCH, 0x20, 0), &Room::love3UseWrenchOnEngineeringPanel }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love3ReachedEngineeringPanel }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love3OpenedEngineeringPanel }, - - { Action(ACTION_USE, OBJECT_IWRENCH, 0x21, 0), &Room::love3UseWrenchOnMonitor }, - - { Action(ACTION_USE, OBJECT_IH2O, 0x21, 0), &Room::love3UseWaterOnMonitor }, - { Action(ACTION_FINISHED_WALKING, 14, 0, 0), &Room::love3ReachedMonitorToUseWater }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love3PouredWaterOnMonitor }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x20, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x20, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_KIRK, 11, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_SPOCK, 11, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_MCCOY, 11, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 11, 0), &Room::love3UseCrewmanOnEngineeringPanelOrGrate }, - - { Action(ACTION_USE, OBJECT_IWRENCH, 11, 0), &Room::love3UseWrenchOnGrate }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love3ReachedGateWithWrench }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::love3OpenedOrClosedGrate }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::love3UseCrewmanOnShaft }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::love3UseCrewmanOnShaft }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x22, 0), &Room::love3UseCrewmanOnShaft }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::love3UseCrewmanOnShaft }, - - { Action(ACTION_USE, OBJECT_IH2O, 0x22, 0), &Room::love3UseWaterOnShaft }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love3ReachedShaftUsingWater }, - { Action(ACTION_FINISHED_ANIMATION, 8, 0, 0), &Room::love3PouredWaterDownShaft }, - - { Action(ACTION_USE, OBJECT_IN2O, 0x22, 0), &Room::love3UseNitrousOxideOnShaft }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love3ReachedShaftUsingNitrousOxide }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::love3PouredNitrousOxideDownShaft }, - - { Action(ACTION_USE, OBJECT_INH3, 0x22, 0), &Room::love3UseAmmoniaOnShaft }, - { Action(ACTION_FINISHED_WALKING, 7, 0, 0), &Room::love3ReachedShaftUsingAmmonia }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::love3PouredAmmoniaDownShaft }, - - { Action(ACTION_USE, OBJECT_IRLG, 0x22, 0), &Room::love3UseRomulanLaughingGasOnShaft }, - { Action(ACTION_FINISHED_WALKING, 8, 0, 0), &Room::love3ReachedShaftUsingRomulanLaughingGas }, - { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::love3PouredRomulanLaughingGasDownShaft }, - - { Action(ACTION_GET, 10, 0, 0), &Room::love3GetWrench }, - { Action(ACTION_FINISHED_WALKING, 9, 0, 0), &Room::love3ReachedWrenchToGet }, - { Action(ACTION_FINISHED_ANIMATION, 12, 0, 0), &Room::love3PickedUpWrench }, - - { Action(ACTION_GET, 12, 0, 0), &Room::love3GetGasTank }, - { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::love3ReachedGasTankToGet }, - - { Action(ACTION_USE, OBJECT_IANTIGRA, 12, 0), &Room::love3UseAntigravOnGasTank }, - { Action(ACTION_FINISHED_WALKING, 11, 0, 0), &Room::love3ReachedGasTankUsingAntigrav }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::love3PickedUpGasTank }, - - { Action(ACTION_GET, 9, 0, 0), &Room::love3GetInsulation }, - { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::love3ReachedInsulationToGet }, - { Action(ACTION_FINISHED_ANIMATION, 14, 0, 0), &Room::love3PickedUpInsulation }, + { {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, -1, 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, -1, 0}, &Room::love3UseMTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::love3UseSTricorderOnTurbines }, + { {ACTION_USE, OBJECT_ISTRICOR, 9, 0}, &Room::love3UseSTricorderOnInsulation }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, }; RoomAction love4ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::love4Tick1 }, - { Action(ACTION_TICK, 10, 0, 0), &Room::love4Tick10 }, - - { Action(ACTION_WALK, 8, 0, 0), &Room::love4WalkToDoor }, - { Action(ACTION_WALK, 0x20, 0, 0), &Room::love4WalkToDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::love4TouchedHotspot0 }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love4DoorOpenedOrReached }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::love4DoorOpenedOrReached }, - - { Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::love4UseKirkOnLadder }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love4ReachedLadder }, - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::love4UseStunPhaserOnRomulan }, - { Action(ACTION_USE, OBJECT_IPHASERS, 10, 0), &Room::love4UseStunPhaserOnRomulan }, - { Action(ACTION_USE, OBJECT_IPHASERS, 11, 0), &Room::love4UseStunPhaserOnRomulan }, - { Action(ACTION_USE, OBJECT_IPHASERS, 12, 0), &Room::love4UseStunPhaserOnRomulan }, + { {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(ACTION_LOOK, -1, 0, 0), &Room::love4LookAnywhere }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love4LookAtLadder }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::love4LookAtDoor }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love4LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love4LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love4LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love4LookAtRedshirt }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love4LookAtRomulan }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::love4LookAtRomulan }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::love4LookAtRomulan }, - { Action(ACTION_LOOK, 12, 0, 0), &Room::love4LookAtRomulan }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love4TalkToKirk }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love4TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love4TalkToRedshirt }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love4TalkToSpock }, - { Action(ACTION_TALK, 9, 0, 0), &Room::love4TalkToRomulan }, - { Action(ACTION_TALK, 10, 0, 0), &Room::love4TalkToRomulan }, - { Action(ACTION_TALK, 11, 0, 0), &Room::love4TalkToRomulan }, - { Action(ACTION_TALK, 12, 0, 0), &Room::love4TalkToRomulan }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::love4UseMTricorderOnRomulan }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::love4UseMTricorderOnRomulan }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 11, 0), &Room::love4UseMTricorderOnRomulan }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 12, 0), &Room::love4UseMTricorderOnRomulan }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::love4UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love4UseSTricorderAnywhere }, - - { Action(ACTION_USE, OBJECT_ICURE, 9, 0), &Room::love4UseCureOnRomulan }, - { Action(ACTION_USE, OBJECT_ICURE, 10, 0), &Room::love4UseCureOnRomulan }, - { Action(ACTION_USE, OBJECT_ICURE, 11, 0), &Room::love4UseCureOnRomulan }, - { Action(ACTION_USE, OBJECT_ICURE, 12, 0), &Room::love4UseCureOnRomulan }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::love4MccoyReachedRomulan4 }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love4MccoyCuredRomulan4 }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love4MccoyReachedRomulan3 }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love4MccoyCuredRomulan3 }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love4MccoyReachedRomulan2 }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love4MccoyCuredRomulan2 }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love4MccoyReachedRomulan1 }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love4MccoyCuredRomulan1 }, - - { Action(ACTION_USE, OBJECT_IH2O, 9, 0), &Room::love4UseWaterOnRomulan }, - { Action(ACTION_USE, OBJECT_IH2O, 10, 0), &Room::love4UseWaterOnRomulan }, - { Action(ACTION_USE, OBJECT_IH2O, 11, 0), &Room::love4UseWaterOnRomulan }, - { Action(ACTION_USE, OBJECT_IH2O, 12, 0), &Room::love4UseWaterOnRomulan }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::love4UseMedkitOnRomulan }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 10, 0), &Room::love4UseMedkitOnRomulan }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 11, 0), &Room::love4UseMedkitOnRomulan }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 12, 0), &Room::love4UseMedkitOnRomulan }, - { Action(ACTION_USE, OBJECT_ISAMPLE, 9, 0), &Room::love4UseCureSampleOnRomulan }, - { Action(ACTION_USE, OBJECT_ISAMPLE, 10, 0), &Room::love4UseCureSampleOnRomulan }, - { Action(ACTION_USE, OBJECT_ISAMPLE, 11, 0), &Room::love4UseCureSampleOnRomulan }, - { Action(ACTION_USE, OBJECT_ISAMPLE, 12, 0), &Room::love4UseCureSampleOnRomulan }, - { Action(ACTION_USE, -1, 9, 0), &Room::love4UseAnythingOnRomulan }, - { Action(ACTION_USE, -1, 10, 0), &Room::love4UseAnythingOnRomulan }, - { Action(ACTION_USE, -1, 11, 0), &Room::love4UseAnythingOnRomulan }, - { Action(ACTION_USE, -1, 12, 0), &Room::love4UseAnythingOnRomulan }, + { {ACTION_LOOK, -1, 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, -1, 0}, &Room::love4UseMTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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, -1, 9, 0}, &Room::love4UseAnythingOnRomulan }, + { {ACTION_USE, -1, 10, 0}, &Room::love4UseAnythingOnRomulan }, + { {ACTION_USE, -1, 11, 0}, &Room::love4UseAnythingOnRomulan }, + { {ACTION_USE, -1, 12, 0}, &Room::love4UseAnythingOnRomulan }, // Common code - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, }; RoomAction love5ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::love5Tick1 }, - { Action(ACTION_TOUCHED_WARP, 1, 0, 0), &Room::love5TouchedWarp1 }, - { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::love5Timer4Expired }, - { Action(ACTION_USE, OBJECT_IPHASERS, 9, 0), &Room::love5UseStunPhaserOnPreax }, + { {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(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::love5LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::love5LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::love5LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::love5LookAtRedshirt }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::love5LookAnywhere }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::love5LookAtDevice }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::love5LookAtConsole }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::love5LookAtDrMarcus }, - { Action(ACTION_LOOK, 11, 0, 0), &Room::love5LookAtDrCheever }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::love5LookAtPreax }, - { Action(ACTION_TALK, 9, 0, 0), &Room::love5TalkToPreax }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::love5MccoyReachedSpockToCure }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::love5MccoyCuredSpock }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::love5CrewmanReachedBeamoutPosition }, - { Action(ACTION_TALK, 10, 0, 0), &Room::love5TalkToDrMarcus }, - { Action(ACTION_TALK, 11, 0, 0), &Room::love5TalkToDrCheever }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::love5TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::love5TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::love5TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::love5TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::love5UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::love5UseSTricorderOnDevice }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 10, 0), &Room::love5UseMTricorderOnMarcusOrCheever }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 11, 0), &Room::love5UseMTricorderOnMarcusOrCheever }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 9, 0), &Room::love5UseMTricorderOnPreax }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 9, 0), &Room::love5UseMedkitOnPreax }, - { Action(ACTION_USE, OBJECT_IH2O, 9, 0), &Room::love5UseWaterOnPreax }, - { Action(ACTION_USE, OBJECT_ISAMPLE, 9, 0), &Room::love5UseCureSampleOnPreax }, - { Action(ACTION_USE, OBJECT_ICURE, 9, 0), &Room::love5UseCureOnPreax }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::love5ReachedPreaxUsingCure }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::love5CuredPreax }, - { Action(ACTION_USE, -1, 9, 0), &Room::love5UseAnythingOnPreax }, - { Action(ACTION_USE, OBJECT_KIRK, 10, 0), &Room::love5UseKirkOnMarcusOrCheever }, - { Action(ACTION_USE, OBJECT_KIRK, 11, 0), &Room::love5UseKirkOnMarcusOrCheever }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::love5KirkReachedCheever }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::love5KirkUntiedCheever }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::love5KirkReachedMarcus }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::love5KirkUntiedMarcus }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::love5MarcusStoodUp }, + { {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, -1, 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, -1, 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, -1, 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(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::loveaTimer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::loveaTimer1Expired }, - { Action(ACTION_USE, OBJECT_IMEDKIT, OBJECT_SPOCK, 0), &Room::loveaUseMedkitOnSpock }, - { Action(ACTION_USE, OBJECT_ISAMPLE, OBJECT_SPOCK, 0), &Room::loveaUseCureSampleOnSpock }, - { Action(ACTION_USE, OBJECT_ICURE, OBJECT_SPOCK, 0), &Room::loveaUseCureOnSpock }, - { Action(ACTION_FINISHED_WALKING, 99, 0, 0), &Room::loveaSpockOrMccoyInPositionToUseCure }, - { Action(ACTION_FINISHED_ANIMATION, 99, 0, 0), &Room::loveaFinishedCuringSpock }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::loveaTimer2Expired }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_SPOCK, 0), &Room::loveaUseMTricorderOnSpock }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_KIRK, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_MCCOY, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IMTRICOR, OBJECT_REDSHIRT, 0), &Room::loveaUseMTricorderOnHuman }, - { Action(ACTION_USE, OBJECT_IRLG, -1, 0), &Room::loveaUseRomulanLaughingGas }, - { Action(ACTION_USE, OBJECT_IN2O, -1, 0), &Room::loveaUseHumanLaughingGas }, - { Action(ACTION_USE, OBJECT_INH3, -1, 0), &Room::loveaUseAmmonia }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::loveaUseCommunicator }, + { {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, -1, 0}, &Room::loveaUseRomulanLaughingGas }, + { {ACTION_USE, OBJECT_IN2O, -1, 0}, &Room::loveaUseHumanLaughingGas }, + { {ACTION_USE, OBJECT_INH3, -1, 0}, &Room::loveaUseAmmonia }, + { {ACTION_USE, OBJECT_ICOMM, -1, 0}, &Room::loveaUseCommunicator }, // Common code (countdown for losing atmosphere when life support malfunctioning) - { Action(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd0ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd0Tick1 }, - { Action(ACTION_TICK, 50, 0, 0), &Room::mudd0Tick50 }, - { Action(ACTION_TICK, 60, 0, 0), &Room::mudd0Tick60 }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::mudd0UsePhaserOnMudd }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::mudd0UsePhaserOnMudd }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd0UseCommunicator }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd0LookAtFoodBox }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::mudd0LookAtComponentBox }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::mudd0LookAnywhere }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd0LookAtMemoryDiskBox }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd0LookAtDegrimerBox }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd0LookAtLense }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::mudd0UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, -1, 0), &Room::mudd0UseMTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd0UseSTricorderOnMemoryDiskBox }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd0UseSTricorderOnDegrimerBox }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::mudd0UseMTricorderOnLense }, + { {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, -1, 0}, &Room::mudd0UseCommunicator }, + { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd0LookAtFoodBox }, + { {ACTION_LOOK, 0x24, 0, 0}, &Room::mudd0LookAtComponentBox }, + { {ACTION_LOOK, -1, 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, -1, 0}, &Room::mudd0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_IMTRICOR, -1, 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(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::muddaFiredAlienDevice }, - { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, - - { Action(ACTION_GET, 0x21, 0, 0), &Room::mudd0GetLense }, - { Action(ACTION_GET, 0x20, 0, 0), &Room::mudd0GetMemoryDisk }, - { Action(ACTION_GET, 0x22, 0, 0), &Room::mudd0GetDegrimer }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd0PickedUpLense }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd0PickedUpItem }, - { Action(ACTION_WALK, 0x26, 0, 0), &Room::mudd0WalkToSouthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::mudd0TouchedHotspot1 }, - { Action(ACTION_WALK, 0x25, 0, 0), &Room::mudd0WalkToNorthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd0TouchedHotspot0 }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd0UseMedkit }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd0LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd0LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd0LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd0LookAtRedshirt }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd0LookAtMudd }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd0TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd0TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd0TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd0TalkToRedshirt }, - { Action(ACTION_TALK, 8, 0, 0), &Room::mudd0TalkToMudd }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 0}, &Room::muddaUseAlienDevice }, + { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 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, -1, 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(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd1ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd1Tick1 }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd1Timer1Expired }, - - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd1UseCommunicator }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x23, 0), &Room::mudd1UseSpockOnBlueButton }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::mudd1SpockReachedBlueButton }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd1SpockPressedBlueButton }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd1CraneFinishedMoving }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x24, 0), &Room::mudd1UseSpockOnYellowButton }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd1SpockReachedYellowButton }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::mudd1SpockPressedYellowButton }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x25, 0), &Room::mudd1UseSpockOnRedButton }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd1SpockReachedRedButton }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::mudd1SpockPressedRedButton }, + { {ACTION_TICK, 1, 0, 0}, &Room::mudd1Tick1 }, + { {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::mudd1Timer1Expired }, + + { {ACTION_USE, OBJECT_ICOMM, -1, 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(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, - { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::muddaFiredAlienDevice }, - - { Action(ACTION_GET, 9, 0, 0), &Room::mudd1GetTorpedo }, - { Action(ACTION_GET, 0x21, 0, 0), &Room::mudd1GetTorpedo }, - { Action(ACTION_GET, 0x20, 0, 0), &Room::mudd1GetTorpedo }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd1UseSTricorderOnTorpedo }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::mudd1UseSTricorderOnTorpedo }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd1UseSTricorderOnTorpedo }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd1UseSTricorderOnTorpedoLauncher }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x25, 0), &Room::mudd1UseSTricorderOnButton }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::mudd1UseSTricorderOnButton }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x24, 0), &Room::mudd1UseSTricorderOnButton }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::mudd1UseSTricorderOnCrane }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd1UseMedkitAnywhere }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::mudd1LookAnywhere }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd1LookAtTorpedo }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::mudd1LookAtTorpedo }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd1LookAtFallenTorpedo }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd1LookAtTorpedoLauncher }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd1LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd1LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd1LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd1LookAtRedshirt }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd1LookAtCrane }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::mudd1LookAtRedButton }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd1LookAtBlueButton }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::mudd1LookAtYellowButton }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd1TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd1TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd1TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd1TalkToRedshirt }, - { Action(ACTION_WALK, 0x28, 0, 0), &Room::mudd1WalkToSouthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 2, 0, 0), &Room::mudd1TouchedHotspot2 }, - { Action(ACTION_WALK, 0x27, 0, 0), &Room::mudd1WalkToNorthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::mudd1TouchedHotspot1 }, - { Action(ACTION_WALK, 0x26, 0, 0), &Room::mudd1WalkToWestDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd1TouchedHotspot0 }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 0}, &Room::muddaUseDegrimer }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 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, -1, 0}, &Room::mudd1UseMedkitAnywhere }, + { {ACTION_LOOK, -1, 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(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd2ActionList[] = { - { Action(ACTION_WALK, 0x21, 0, 0), &Room::mudd2WalkToNorthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd2TouchedHotspot0 }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::mudd2WalkToSouthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::mudd2TouchedHotspot1 }, - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd2Tick1 }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd2Timer1Expired }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::mudd2UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x20, 0), &Room::mudd2UseSpockOnCapsules }, - { Action(ACTION_GET, 0x20, 0, 0), &Room::mudd2GetCapsules }, - { Action(ACTION_FINISHED_WALKING, 12, 0, 0), &Room::mudd2MccoyReachedCapsules }, - { Action(ACTION_FINISHED_ANIMATION, 13, 0, 0), &Room::mudd2MccoyPickedUpCapsules }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd2UseCommunicator }, + { {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, -1, 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, -1, 0}, &Room::mudd2UseCommunicator }, // Common code (next 4 lines) - { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, - { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 18, 0, 0), &Room::muddaFiredAlienDevice }, - - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd2LookAtCapsules }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x20, 0), &Room::mudd2UseMTricorderOnCapsules }, - { Action(ACTION_USE, OBJECT_ICAPSULE, 0x23, 0), &Room::mudd2UseCapsuleOnControlPanel }, - { Action(ACTION_FINISHED_WALKING, 15, 0, 0), &Room::mudd2MccoyReachedControlPanel }, - { Action(ACTION_FINISHED_ANIMATION, 15, 0, 0), &Room::mudd2MccoyPutCapsuleInControlPanel }, - { Action(ACTION_USE, OBJECT_KIRK, 0x24, 0), &Room::mudd2UseKirkOnBed }, - { Action(ACTION_USE, OBJECT_KIRK, 0x25, 0), &Room::mudd2UseKirkOnBed }, - { Action(ACTION_FINISHED_WALKING, 6, 0, 0), &Room::mudd2KirkReachedBed }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd2MuddNoticedKirk }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd2MuddDroppedCapsule }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::mudd2UsePhaserOnMudd }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::mudd2UsePhaserOnMudd }, - - { Action(ACTION_USE, OBJECT_SPOCK, 8, 0), &Room::mudd2UseSpockOnMudd }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::mudd2SpockReachedMudd }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::mudd2SpockPinchedMudd }, - { Action(ACTION_USE, OBJECT_KIRK, 8, 0), &Room::mudd2UseKirkOnMudd }, - - { Action(ACTION_USE, OBJECT_REDSHIRT, 8, 0), &Room::mudd2UseRedshirtOnMudd }, - { Action(ACTION_FINISHED_WALKING, 16, 0, 0), &Room::mudd2RedshirtReachedMudd }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd2Timer2Expired }, - { Action(ACTION_FINISHED_ANIMATION, 17, 0, 0), &Room::mudd2MuddFinishedPushingRedshirt }, - { Action(ACTION_FINISHED_ANIMATION, 16, 0, 0), &Room::mudd2RedshirtPushedAway }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::mudd2UseMTricorderOnMudd }, - { Action(ACTION_USE, OBJECT_IMEDKIT, 8, 0), &Room::mudd2UseMedkitOnMudd }, - { Action(ACTION_USE, OBJECT_MCCOY, 8, 0), &Room::mudd2UseMedkitOnMudd }, - { Action(ACTION_FINISHED_WALKING, 10, 0, 0), &Room::mudd2MccoyReachedMudd }, - { Action(ACTION_FINISHED_ANIMATION, 11, 0, 0), &Room::mudd2MccoyCuredMudd }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd2LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd2LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd2LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd2LookAtRedshirt }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd2LookAtMudd }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd2LookAtControlPanel }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::mudd2LookAtBed }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::mudd2LookAtBed }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd2TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd2TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd2TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd2TalkToRedshirt }, - { Action(ACTION_TALK, 8, 0, 0), &Room::mudd2TalkToMudd }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 0}, &Room::muddaUseDegrimer }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 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(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd3ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd3Tick1 }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd3UseCommunicator }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd3LookAtScreen }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd3UseSTricorderOnScreen }, - { Action(ACTION_USE, OBJECT_KIRK, 0x20, 0), &Room::mudd3UseKirkOnScreen }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::mudd3UseSpockOnSphere }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd3Timer3Expired }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::mudd3UseMccoyOnSphere }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::mudd3UseRedshirtOnSphere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 0x21, 0), &Room::mudd3UseMTricorderOnSphere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd3UseSTricorderOnSphere }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd3ReadyToHookUpTricorders }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd3Timer1Expired }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd3Timer2Expired }, - { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::mudd3Timer4Expired }, - { Action(ACTION_USE, OBJECT_IDISKS, 0x21, 0), &Room::mudd3UseMemoryDiskOnSphere }, + { {ACTION_TICK, 1, 0, 0}, &Room::mudd3Tick1 }, + { {ACTION_USE, OBJECT_ICOMM, -1, 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(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, - { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::muddaFiredAlienDevice }, - - { Action(ACTION_GET, 13, 0, 0), &Room::mudd3GetRepairTool }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd3ReachedRepairTool }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd3PickedUpRepairTool }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd3LookAtSphere }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::mudd3WalkToNorthDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd3TouchedHotspot0 }, - { Action(ACTION_WALK, 0x23, 0, 0), &Room::mudd3WalkToEastDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 1, 0, 0), &Room::mudd3TouchedHotspot1 }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd3LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd3LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd3LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd3LookAtRedshirt }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd3LookAtMudd }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd3TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd3TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd3TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd3TalkToRedshirt }, - { Action(ACTION_TALK, 8, 0, 0), &Room::mudd3TalkToMudd }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd3UseMedkit }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 0}, &Room::muddaUseDegrimer }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 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, -1, 0}, &Room::mudd3UseMedkit }, // Common code (countdown for losing atmosphere when life support malfunctioning) - { Action(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd4ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd4Tick1 }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd4UseCommunicator }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd4Timer2Expired }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd4Timer3Expired }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x21, 0), &Room::mudd4UseSpockOnLeftConsole }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x22, 0), &Room::mudd4UseSpockOnLeftConsole }, - { Action(ACTION_USE, OBJECT_SPOCK, 0x23, 0), &Room::mudd4UseSpockOnRightConsole }, - { Action(ACTION_FINISHED_WALKING, 1, 0, 0), &Room::mudd4SpockReachedChair }, - { Action(ACTION_FINISHED_ANIMATION, 1, 0, 0), &Room::mudd4SpockSatInChair }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd4SpockUsedSensors }, - { Action(ACTION_FINISHED_ANIMATION, 3, 0, 0), &Room::mudd4SpockUsedEngineering }, - { Action(ACTION_FINISHED_ANIMATION, 4, 0, 0), &Room::mudd4SpockUsedNavigation }, - { Action(ACTION_FINISHED_WALKING, 3, 0, 0), &Room::mudd4FinishedWalking3 }, - { Action(ACTION_USE, OBJECT_KIRK, 0x21, 0), &Room::mudd4UseKirkOnRightConsole }, - { Action(ACTION_USE, OBJECT_KIRK, 0x23, 0), &Room::mudd4UseKirkOnRightConsole }, - { Action(ACTION_USE, OBJECT_KIRK, 0x22, 0), &Room::mudd4UseKirkOnLeftConsole }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd4KirkReachedRightConsole }, - { Action(ACTION_FINISHED_ANIMATION, 5, 0, 0), &Room::mudd4KirkSatInChair }, - { Action(ACTION_FINISHED_ANIMATION, 6, 0, 0), &Room::mudd4KirkUsedViewScreen }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd4Timer1Expired }, - { Action(ACTION_FINISHED_ANIMATION, 7, 0, 0), &Room::mudd4KirkUsedCommunications }, - { Action(ACTION_FINISHED_WALKING, 4, 0, 0), &Room::mudd4KirkReachedPositionToTalkToMudd }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x21, 0), &Room::mudd4UseMccoyOnConsole }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x22, 0), &Room::mudd4UseMccoyOnConsole }, - { Action(ACTION_USE, OBJECT_MCCOY, 0x23, 0), &Room::mudd4UseMccoyOnConsole }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x21, 0), &Room::mudd4UseRedshirtOnConsole }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x22, 0), &Room::mudd4UseRedshirtOnConsole }, - { Action(ACTION_USE, OBJECT_REDSHIRT, 0x23, 0), &Room::mudd4UseRedshirtOnConsole }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 10, 0), &Room::mudd4UseSTricorderOnRepairTool }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd4UseSTricorderOnConsole }, + { {ACTION_TICK, 1, 0, 0}, &Room::mudd4Tick1 }, + { {ACTION_USE, OBJECT_ICOMM, -1, 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(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd4UseSTricorderOnConsole }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x23, 0), &Room::mudd4UseSTricorderOnConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, 0x22, 0}, &Room::mudd4UseSTricorderOnConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, 0x23, 0}, &Room::mudd4UseSTricorderOnConsole }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd4UseSTricorderOnViewscreen }, + { {ACTION_USE, OBJECT_ISTRICOR, 0x20, 0}, &Room::mudd4UseSTricorderOnViewscreen }, // ENHANCEMENT: Allow scanning the viewscreen when it's on, not just when off - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::mudd4UseSTricorderOnViewscreen }, + { {ACTION_USE, OBJECT_ISTRICOR, 8, 0}, &Room::mudd4UseSTricorderOnViewscreen }, // Common code (next 4 lines) - { Action(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::muddaFiredAlienDevice }, - { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 0}, &Room::muddaUseAlienDevice }, + { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 0}, &Room::muddaUseDegrimer }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd4UseMedkit }, - { Action(ACTION_GET, 10, 0, 0), &Room::mudd4GetRepairTool }, - { Action(ACTION_FINISHED_WALKING, 5, 0, 0), &Room::mudd4ReachedRepairTool }, - { Action(ACTION_FINISHED_ANIMATION, 10, 0, 0), &Room::mudd4PickedUpRepairTool }, + { {ACTION_USE, OBJECT_IMEDKIT, -1, 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(ACTION_LOOK, 0x21, 0, 0), &Room::mudd4LookAtConsole }, + { {ACTION_LOOK, 0x21, 0, 0}, &Room::mudd4LookAtConsole }, // ENHANCEMENT: Allow look action work with the specific stations as well - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd4LookAtConsole }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd4LookAtConsole }, + { {ACTION_LOOK, 0x22, 0, 0}, &Room::mudd4LookAtConsole }, + { {ACTION_LOOK, 0x23, 0, 0}, &Room::mudd4LookAtConsole }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd4LookAtViewscreen }, + { {ACTION_LOOK, 0x20, 0, 0}, &Room::mudd4LookAtViewscreen }, // ENHANCEMENT: Allow look action work when viewscreen is on, not just when off - { Action(ACTION_LOOK, 8, 0, 0), &Room::mudd4LookAtViewscreen }, - - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd4LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd4LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd4LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd4LookAtRedshirt }, - { Action(ACTION_LOOK, 10, 0, 0), &Room::mudd4LookAtRepairTool }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd4TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd4TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd4TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd4TalkToRedshirt }, - { Action(ACTION_WALK, 0x24, 0, 0), &Room::mudd4WalkToEastDoor }, - { Action(ACTION_WALK, 0x25, 0, 0), &Room::mudd4WalkToWestDoor }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd4TouchedHotspot0 }, + { {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(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction mudd5ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::mudd5Tick1 }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::mudd5Timer1Expired }, - { Action(ACTION_TIMER_EXPIRED, 2, 0, 0), &Room::mudd5Timer2Expired }, - { Action(ACTION_USE, OBJECT_ICOMM, -1, 0), &Room::mudd5UseCommunicator }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::mudd5UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x21, 0), &Room::mudd5UseSTricorderOnEngine }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x22, 0), &Room::mudd5UseSTricorderOnCrane }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 0x20, 0), &Room::mudd5UseSTricorderOnHatch }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 9, 0), &Room::mudd5UseSTricorderOnLifeSupportGenerator }, - { Action(ACTION_USE, OBJECT_IPHASERS, 0x20, 0), &Room::mudd5UseStunPhaserOnHatch }, - { Action(ACTION_USE, OBJECT_IPHASERK, 0x20, 0), &Room::mudd5UseKillPhaserOnHatch }, - { Action(ACTION_USE, -1, 9, 0), &Room::mudd5UseAnythingOnLifeSupportGenerator }, - { Action(ACTION_USE, OBJECT_IDOOVER, 9, 0), &Room::mudd5UseDooverOnLifeSupportGenerator }, - { Action(ACTION_FINISHED_WALKING, 2, 0, 0), &Room::mudd5KirkReachedLifeSupportGenerator }, - { Action(ACTION_TIMER_EXPIRED, 4, 0, 0), &Room::mudd5KirkTimer4Expired }, - { Action(ACTION_FINISHED_ANIMATION, 2, 0, 0), &Room::mudd5KirkRepairedLifeSupportGenerator }, - { Action(ACTION_TIMER_EXPIRED, 3, 0, 0), &Room::mudd5KirkTimer3Expired }, + { {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, -1, 0}, &Room::mudd5UseCommunicator }, + { {ACTION_USE, OBJECT_ISTRICOR, -1, 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, -1, 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(ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0), &Room::muddaUseLenseOnDegrimer }, - { Action(ACTION_USE, OBJECT_IALIENDV, -1, 0), &Room::muddaUseAlienDevice }, - { Action(ACTION_FINISHED_ANIMATION, 9, 0, 0), &Room::muddaFiredAlienDevice }, - { Action(ACTION_USE, OBJECT_IDEGRIME, -1, 0), &Room::muddaUseDegrimer }, - - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::mudd5LookAtHatch }, - { Action(ACTION_LOOK, 9, 0, 0), &Room::mudd5LookAtLifeSupportGenerator }, - { Action(ACTION_TOUCHED_HOTSPOT, 0, 0, 0), &Room::mudd5TouchedHotspot0 }, - { Action(ACTION_WALK, 0x22, 0, 0), &Room::mudd5WalkToDoor }, - { Action(ACTION_LOOK, OBJECT_KIRK, 0, 0), &Room::mudd5LookAtKirk }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::mudd5LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::mudd5LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::mudd5LookAtRedshirt }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::mudd5LookAtDoor }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::mudd5LookAtCrane }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::mudd5LookAtEngine }, - { Action(ACTION_TALK, OBJECT_KIRK, 0, 0), &Room::mudd5TalkToKirk }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::mudd5TalkToSpock }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::mudd5TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::mudd5TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::mudd5UseMedkit }, + { {ACTION_USE, OBJECT_ILENSES, OBJECT_IDEGRIME, 0}, &Room::muddaUseLenseOnDegrimer }, + { {ACTION_USE, OBJECT_IALIENDV, -1, 0}, &Room::muddaUseAlienDevice }, + { {ACTION_FINISHED_ANIMATION, 9, 0, 0}, &Room::muddaFiredAlienDevice }, + { {ACTION_USE, OBJECT_IDEGRIME, -1, 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, -1, 0}, &Room::mudd5UseMedkit }, // Common code (countdown for losing atmosphere when life support malfunctioning) - { Action(ACTION_TICK, -1, -1, -1), &Room::muddaTick }, + { {ACTION_TICK, -1, -1, -1}, &Room::muddaTick }, }; RoomAction feather0ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather0Tick1 }, - { Action(ACTION_TICK, 60, 0, 0), &Room::feather0Tick60 }, - { Action(ACTION_TALK, 8, 0, 0), &Room::feather0TalkToQuetzecoatl }, - { Action(ACTION_TIMER_EXPIRED, 0, 0, 0), &Room::feather0Timer0Expired }, - { Action(ACTION_TIMER_EXPIRED, 1, 0, 0), &Room::feather0Timer1Expired }, - { Action(ACTION_USE, OBJECT_IPHASERS, 8, 0), &Room::feather0UsePhaserOnQuetzecoatl }, - { Action(ACTION_USE, OBJECT_IPHASERK, 8, 0), &Room::feather0UsePhaserOnQuetzecoatl }, - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0), &Room::feather0UsePhaserOnMccoy }, - { Action(ACTION_USE, OBJECT_IPHASERS, OBJECT_MCCOY, 0), &Room::feather0UsePhaserOnMccoy }, - { Action(ACTION_USE, OBJECT_IMEDKIT, -1, 0), &Room::feather0UseMedkit }, - { Action(ACTION_LOOK, 8, 0, 0), &Room::feather0LookAtQuetzecoatl }, - { Action(ACTION_LOOK, 0x20, 0, 0), &Room::feather0LookAtMoon }, - { Action(ACTION_LOOK, 0x21, 0, 0), &Room::feather0LookAtLog }, - { Action(ACTION_LOOK, 0x22, 0, 0), &Room::feather0LookAtHut }, - { Action(ACTION_LOOK, -1, 0, 0), &Room::feather0LookAnywhere }, - { Action(ACTION_LOOK, 0x23, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x24, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x25, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x26, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x27, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x28, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x29, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x2a, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x2b, 0, 0), &Room::feather0LookAtEyes }, - { Action(ACTION_LOOK, 0x2c, 0, 0), &Room::feather0LookAtTree }, - { Action(ACTION_LOOK, OBJECT_MCCOY, 0, 0), &Room::feather0LookAtMccoy }, - { Action(ACTION_LOOK, OBJECT_SPOCK, 0, 0), &Room::feather0LookAtSpock }, - { Action(ACTION_LOOK, OBJECT_REDSHIRT, 0, 0), &Room::feather0LookAtRedshirt }, - { Action(ACTION_TALK, OBJECT_MCCOY, 0, 0), &Room::feather0TalkToMccoy }, - { Action(ACTION_TALK, OBJECT_SPOCK, 0, 0), &Room::feather0TalkToSpock }, - { Action(ACTION_TALK, OBJECT_REDSHIRT, 0, 0), &Room::feather0TalkToRedshirt }, - { Action(ACTION_USE, OBJECT_ISTRICOR, 8, 0), &Room::feather0UseSTricorderOnQuetzecoatl }, - { Action(ACTION_USE, OBJECT_ISTRICOR, -1, 0), &Room::feather0UseSTricorderAnywhere }, - { Action(ACTION_USE, OBJECT_IMTRICOR, 8, 0), &Room::feather0UseMTricorderOnQuetzecoatl }, + { {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, -1, 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, -1, 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, -1, 0}, &Room::feather0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_IMTRICOR, 8, 0}, &Room::feather0UseMTricorderOnQuetzecoatl }, }; extern const RoomAction feather1ActionList[]; extern const int feather1NumActions; RoomAction feather2ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather2Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather2Tick1 }, }; RoomAction feather3ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather3Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather3Tick1 }, }; RoomAction feather4ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather4Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather4Tick1 }, }; RoomAction feather5ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather5Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather5Tick1 }, }; RoomAction feather6ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather6Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather6Tick1 }, }; RoomAction feather7ActionList[] = { - { Action(ACTION_TICK, 1, 0, 0), &Room::feather7Tick1 }, + { {ACTION_TICK, 1, 0, 0}, &Room::feather7Tick1 }, }; } diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp index db664011fc..876c1f6389 100644 --- a/engines/startrek/startrek.cpp +++ b/engines/startrek/startrek.cpp @@ -459,7 +459,7 @@ void StarTrekEngine::updateActorAnimations() { if (nextAnimFrame == actor->numAnimFrames - 1) { actor->field62++; if (actor->triggerActionWhenAnimFinished) { - addAction(Action(ACTION_FINISHED_ANIMATION, actor->finishedAnimActionParam, 0, 0)); + addAction(ACTION_FINISHED_ANIMATION, actor->finishedAnimActionParam, 0, 0); } } } @@ -530,7 +530,7 @@ void StarTrekEngine::updateActorAnimations() { if (actor->iwSrcPosition == -1) { if (actor->triggerActionWhenAnimFinished) { actor->triggerActionWhenAnimFinished = false; - addAction(Action(ACTION_FINISHED_WALKING, actor->finishedAnimActionParam & 0xff, 0, 0)); + addAction(ACTION_FINISHED_WALKING, actor->finishedAnimActionParam & 0xff, 0, 0); } actor->sprite.bitmap.reset(); @@ -1056,15 +1056,15 @@ int StarTrekEngine::selectObjectForUseAction() { return clickedObject; else if (isObjectUnusable(OBJECT_KIRK, ACTION_USE)) continue; - else if (_room->actionHasCode(Action(ACTION_USE, OBJECT_KIRK, clickedObject, 0)) - || _room->actionHasCode(Action(ACTION_GET, clickedObject, 0, 0)) - || _room->actionHasCode(Action(ACTION_WALK, clickedObject, 0, 0))) { + else if (_room->actionHasCode(ACTION_USE, OBJECT_KIRK, clickedObject, 0) + || _room->actionHasCode(ACTION_GET, clickedObject, 0, 0) + || _room->actionHasCode(ACTION_WALK, clickedObject, 0, 0)) { _awayMission.activeObject = OBJECT_KIRK; _awayMission.passiveObject = clickedObject; _awayMission.activeAction = ACTION_USE; clickedObject = OBJECT_KIRK; if (!walkActiveObjectToHotspot()) - addAction(Action(_awayMission.activeAction, _awayMission.activeObject, _awayMission.passiveObject, 0)); + addAction(_awayMission.activeAction, _awayMission.activeObject, _awayMission.passiveObject, 0); return clickedObject; } else @@ -1160,7 +1160,7 @@ bool StarTrekEngine::walkActiveObjectToHotspot() { else { // If this action has code defined for it in this room, buffer the action to be // done after the object finished walking there. - Action action(_awayMission.activeAction, _awayMission.activeObject, 0, 0); + Action action = {_awayMission.activeAction, _awayMission.activeObject, 0, 0}; if (_awayMission.activeAction == ACTION_USE) action.b2 = _awayMission.passiveObject; diff --git a/engines/startrek/startrek.h b/engines/startrek/startrek.h index 8f17a0f215..cacb8c3529 100644 --- a/engines/startrek/startrek.h +++ b/engines/startrek/startrek.h @@ -223,7 +223,7 @@ public: int loadActorAnimWithRoomScaling(int actorIndex, const Common::String &animName, int16 x, int16 y); uint16 getActorScaleAtPosition(int16 y); void addAction(const Action &action); - void addAction(byte b1, byte b2, byte b3, byte b4) { addAction(Action(b1, b2, b3, b4)); } + void addAction(byte type, byte b1, byte b2, byte b3); bool checkItemInteractionExists(int action, int activeItem, int passiveItem, int16 arg6); void handleAwayMissionAction(); diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp index 071dc6d49c..87ecdb2cd8 100644 --- a/engines/startrek/text.cpp +++ b/engines/startrek/text.cpp @@ -161,7 +161,7 @@ void StarTrekEngine::showTextbox(String headerText, const String &mainText, int showText(&StarTrekEngine::readTextFromArray, (uintptr)strings, xoffset, yoffset, textColor, false, maxTextLines, false); if (actionParam != 0) - addAction(Action(ACTION_TALK, actionParam, 0, 0)); + addAction(ACTION_TALK, actionParam, 0, 0); } String StarTrekEngine::skipTextAudioPrompt(const String &str) { -- cgit v1.2.3