aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/awaymission.h1
-rw-r--r--engines/startrek/room.cpp2
-rw-r--r--engines/startrek/room.h53
-rw-r--r--engines/startrek/rooms/feather6.cpp353
-rw-r--r--engines/startrek/rooms/function_map.h8
-rw-r--r--engines/startrek/text.h130
6 files changed, 538 insertions, 9 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 06c89239c6..d38fde4bbf 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -243,6 +243,7 @@ struct AwayMission {
} mudd;
struct {
+ bool diedFromStalactites; // 0x29
// 0: initial state
// 1: one rock thrown at it
// 2: two rocks thrown at it (low enough to climb up)
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index 342bba9ae7..c1d7216664 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -157,7 +157,7 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
}
else if (name == "FEATHER6") {
_roomActionList = feather6ActionList;
- _numRoomActions = sizeof(feather6ActionList) / sizeof(RoomAction);
+ _numRoomActions = feather6NumActions;
}
else if (name == "FEATHER7") {
_roomActionList = feather7ActionList;
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 0e536b7726..a307cf4bdf 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -1655,6 +1655,56 @@ public:
// FEATHER6
void feather6Tick1();
+ void feather6TouchedHotspot0();
+ void feather6UseSpockOnCrystals();
+ void feather6UseMccoyOnCrystals();
+ void feather6UseRedshirtOnCrystals();
+ void feather6UseRockOnStalactites();
+ void feather6ReachedPositionToThrowRock();
+ void feather6DoneThrowingRock();
+ void feather6KirkDiedFromStalactites();
+ void feather6UseRockOnCrystals();
+ void feather6ReachedCrystalsWithRock();
+ void feather6Tick();
+ void feather6HitCrystalsWithRockFirstTime();
+ void feather6HitCrystalsWithRockSecondTime();
+ void feather6UseRockOnStalagmites();
+ void feather6UseRockAnywhere();
+ void feather6UseKnifeOnStalagmites();
+ void feather6UseKnifeAnywhere();
+ void feather6UseKnifeOnMccoy();
+ void feather6UseKnifeOnSpock();
+ void feather6UseKnifeOnRedshirt();
+ void feather6UseCrystalAnywhere();
+ void feather6UseSnakeAnywhere();
+ void feather6UseMedkitAnywhere();
+ void feather6UsePhaser();
+ void feather6LookAtEastExit();
+ void feather6LookAnywhere();
+ void feather6LookAtRocks();
+ void feather6LookAtStalagmites();
+ void feather6LookAtCrystals();
+ void feather6LookAtKirk();
+ void feather6LookAtSpock();
+ void feather6LookAtMccoy();
+ void feather6LookAtRedshirt();
+ void feather6LookAtStalactites();
+ void feather6TalkToMccoy();
+ void feather6TalkToRedshirt();
+ void feather6TalkToSpock();
+ void feather6UseMTricorderOnEastExit();
+ void feather6UseMTricorderOnRocks();
+ void feather6UseSTricorderOnEastExit();
+ void feather6UseSTricorderAnywhere();
+ void feather6UseSTricorderOnRocks();
+ void feather6UseSTricorderOnCrystals();
+ void feather6UseSTricorderOnStalactites();
+ void feather6UseSTricorderOnStalagmites();
+ void feather6GetCrystals();
+ void feather6UseKnifeOnCrystals();
+ void feather6ReachedCrystalsWithKnife();
+ void feather6DoneCuttingCrystals();
+ void feather6Timer4Expired();
// FEATHER7
void feather7Tick1();
@@ -1788,6 +1838,9 @@ private:
// feather2
bool showedSnakeToTlaoxac; // 0xca
bool tlaoxacUnconscious; // 0xcb
+
+ // feather6
+ bool usedRockOnCrystalsOnce;
} feather;
diff --git a/engines/startrek/rooms/feather6.cpp b/engines/startrek/rooms/feather6.cpp
index 227007ac0d..c75781402c 100644
--- a/engines/startrek/rooms/feather6.cpp
+++ b/engines/startrek/rooms/feather6.cpp
@@ -22,14 +22,363 @@
#include "startrek/room.h"
-#define OBJECT_8 8
+#define OBJECT_CRYSTALS 8
+#define OBJECT_STALACTITES 9
+#define OBJECT_THROWN_STONE 10
-#define HOTSPOT_20 0x20
+#define HOTSPOT_EAST_EXIT 0x20
+#define HOTSPOT_ROCKS 0x21
+#define HOTSPOT_STALACTITES 0x22
+#define HOTSPOT_STALAGMITES 0x23
namespace StarTrek {
+extern const RoomAction feather6ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::feather6Tick1 },
+ { {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::feather6TouchedHotspot0 },
+ { {ACTION_USE, OBJECT_SPOCK, OBJECT_CRYSTALS, 0}, &Room::feather6UseSpockOnCrystals },
+ { {ACTION_USE, OBJECT_MCCOY, OBJECT_CRYSTALS, 0}, &Room::feather6UseMccoyOnCrystals },
+ { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_CRYSTALS, 0}, &Room::feather6UseRedshirtOnCrystals },
+
+ { {ACTION_USE, OBJECT_IROCK, OBJECT_STALACTITES, 0}, &Room::feather6UseRockOnStalactites },
+ { {ACTION_USE, OBJECT_IROCK, HOTSPOT_STALACTITES, 0}, &Room::feather6UseRockOnStalactites },
+ { {ACTION_DONE_WALK, 1, 0, 0}, &Room::feather6ReachedPositionToThrowRock },
+ { {ACTION_DONE_ANIM, 7, 0, 0}, &Room::feather6DoneThrowingRock },
+ { {ACTION_DONE_ANIM, 2, 0, 0}, &Room::feather6KirkDiedFromStalactites },
+
+ { {ACTION_USE, OBJECT_IROCK, OBJECT_CRYSTALS, 0}, &Room::feather6UseRockOnCrystals },
+ { {ACTION_DONE_WALK, 4, 0, 0}, &Room::feather6ReachedCrystalsWithRock },
+ { {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::feather6Tick },
+ { {ACTION_DONE_ANIM, 10, 0, 0}, &Room::feather6HitCrystalsWithRockFirstTime },
+ { {ACTION_DONE_ANIM, 9, 0, 0}, &Room::feather6HitCrystalsWithRockSecondTime },
+
+ { {ACTION_USE, OBJECT_IROCK, HOTSPOT_STALAGMITES, 0}, &Room::feather6UseRockOnStalagmites },
+ { {ACTION_USE, OBJECT_IROCK, HOTSPOT_EAST_EXIT, 0}, &Room::feather6UseRockOnStalagmites },
+ { {ACTION_USE, OBJECT_IROCK, 0xff, 0}, &Room::feather6UseRockAnywhere },
+ { {ACTION_USE, OBJECT_IKNIFE, HOTSPOT_STALAGMITES, 0},&Room::feather6UseKnifeOnStalagmites },
+ { {ACTION_USE, OBJECT_IKNIFE, 0xff, 0}, &Room::feather6UseKnifeAnywhere },
+ { {ACTION_USE, OBJECT_IKNIFE, OBJECT_MCCOY, 0}, &Room::feather6UseKnifeOnMccoy },
+ { {ACTION_USE, OBJECT_IKNIFE, OBJECT_SPOCK, 0}, &Room::feather6UseKnifeOnSpock },
+ { {ACTION_USE, OBJECT_IKNIFE, OBJECT_REDSHIRT, 0}, &Room::feather6UseKnifeOnRedshirt },
+ { {ACTION_USE, OBJECT_ICRYSTAL, 0xff, 0}, &Room::feather6UseCrystalAnywhere },
+ { {ACTION_USE, OBJECT_ISNAKE, 0xff, 0}, &Room::feather6UseSnakeAnywhere },
+ { {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::feather6UseMedkitAnywhere },
+ { {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::feather6UsePhaser },
+ { {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::feather6UsePhaser },
+ { {ACTION_LOOK, HOTSPOT_EAST_EXIT, 0, 0}, &Room::feather6LookAtEastExit },
+ { {ACTION_LOOK, 0xff, 0, 0}, &Room::feather6LookAnywhere },
+ { {ACTION_LOOK, HOTSPOT_ROCKS, 0, 0}, &Room::feather6LookAtRocks },
+ { {ACTION_LOOK, HOTSPOT_STALAGMITES, 0, 0}, &Room::feather6LookAtStalagmites },
+ { {ACTION_LOOK, OBJECT_CRYSTALS, 0, 0}, &Room::feather6LookAtCrystals },
+ { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::feather6LookAtKirk },
+ { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather6LookAtSpock },
+ { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather6LookAtMccoy },
+ { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather6LookAtRedshirt },
+ { {ACTION_LOOK, HOTSPOT_STALACTITES, 0, 0}, &Room::feather6LookAtStalactites },
+ { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::feather6TalkToMccoy },
+ { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::feather6TalkToRedshirt },
+ { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::feather6TalkToSpock },
+ { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_EAST_EXIT, 0},&Room::feather6UseMTricorderOnEastExit },
+ { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_ROCKS, 0}, &Room::feather6UseMTricorderOnRocks },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_EAST_EXIT, 0},&Room::feather6UseSTricorderOnEastExit },
+ { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::feather6UseSTricorderAnywhere },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_ROCKS, 0}, &Room::feather6UseSTricorderOnRocks },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_CRYSTALS, 0}, &Room::feather6UseSTricorderOnCrystals },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_STALACTITES, 0},&Room::feather6UseSTricorderOnStalactites },
+ { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_STALAGMITES, 0},&Room::feather6UseSTricorderOnStalagmites },
+ { {ACTION_GET, OBJECT_CRYSTALS, 0, 0}, &Room::feather6GetCrystals },
+
+ { {ACTION_USE, OBJECT_IKNIFE, OBJECT_CRYSTALS, 0}, &Room::feather6UseKnifeOnCrystals },
+ { {ACTION_DONE_WALK, 2, 0, 0}, &Room::feather6ReachedCrystalsWithKnife },
+ { {ACTION_DONE_ANIM, 3, 0, 0}, &Room::feather6DoneCuttingCrystals },
+ { {ACTION_TIMER_EXPIRED, 4, 0, 0}, &Room::feather6Timer4Expired },
+
+ // ENHANCEMENTs: Also add entries for OBJECT_STALACTITES, not just HOTSPOT_STALACTITES
+ { {ACTION_LOOK, OBJECT_STALACTITES, 0, 0}, &Room::feather6LookAtStalactites },
+ { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_STALACTITES, 0}, &Room::feather6UseSTricorderOnStalactites },
+};
+
+extern const int feather6NumActions = sizeof(feather6ActionList) / sizeof(RoomAction);
+
+
void Room::feather6Tick1() {
+ playVoc("FEA6LOOP");
+ playMidiMusicTracks(27);
+ loadActorAnim(OBJECT_CRYSTALS, "s5r6cx", 0x8a, 0x91);
+ loadActorAnim(OBJECT_STALACTITES, "s5r6ts", 0x90, 0x25);
+}
+
+void Room::feather6TouchedHotspot0() { // McCoy warns you not to go back to the river
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_014);
+}
+
+void Room::feather6UseSpockOnCrystals() {
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_020);
+}
+
+void Room::feather6UseMccoyOnCrystals() {
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_009);
+}
+
+void Room::feather6UseRedshirtOnCrystals() {
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_040);
+}
+
+
+void Room::feather6UseRockOnStalactites() {
+ _vm->_awayMission.disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0x94, 0x97, &Room::feather6ReachedPositionToThrowRock);
+}
+
+void Room::feather6ReachedPositionToThrowRock() {
+ loadActorAnim2(OBJECT_KIRK, "s5r1kt");
+ loadActorAnimC(OBJECT_THROWN_STONE, "s5r1ru", 0x96, 0x4e, &Room::feather6DoneThrowingRock);
+}
+
+void Room::feather6DoneThrowingRock() {
+ playSoundEffectIndex(SND_BLANK_0b);
+ loadActorAnim2(OBJECT_STALACTITES, "s5r6tf");
+ loadActorAnimC(OBJECT_KIRK, "s5r6kd", -1, -1, &Room::feather6KirkDiedFromStalactites);
+ playMidiMusicTracks(1);
+}
+
+void Room::feather6KirkDiedFromStalactites() {
+ _vm->_awayMission.feather.missionScore -= 3;
+ _vm->_awayMission.feather.diedFromStalactites = true;
+ _vm->_awayMission.disableInput = false;
+ showText(TX_FEA6N000);
+ showText(TX_FEA6N004);
+ loadRoomIndex(7, 5);
+}
+
+void Room::feather6UseRockOnCrystals() {
+ _vm->_awayMission.disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0x9a, 0x97, &Room::feather6ReachedCrystalsWithRock);
+}
+
+void Room::feather6ReachedCrystalsWithRock() {
+ _vm->_awayMission.timers[2] = 174;
+ loadActorAnim2(OBJECT_STALACTITES, "s5r6tm");
+ if (!_roomVar.feather.usedRockOnCrystalsOnce) {
+ _roomVar.feather.usedRockOnCrystalsOnce = true;
+ loadActorAnimC(OBJECT_KIRK, "s5r6kr", -1, -1, &Room::feather6HitCrystalsWithRockFirstTime);
+ } else
+ loadActorAnimC(OBJECT_KIRK, "s5r6kr", -1, -1, &Room::feather6HitCrystalsWithRockSecondTime);
+}
+
+void Room::feather6Tick() {
+ if (_vm->_awayMission.timers[2] == 55 || _vm->_awayMission.timers[2] == 89 || _vm->_awayMission.timers[2] == 119)
+ playSoundEffectIndex(SND_BLANK_0b);
+}
+
+void Room::feather6HitCrystalsWithRockFirstTime() {
+ _vm->_awayMission.disableInput = false;
+ loadActorStandAnim(OBJECT_KIRK);
+ showText(TX_SPEAKER_KIRK, TX_FEA6_001);
+}
+
+void Room::feather6HitCrystalsWithRockSecondTime() {
+ loadActorAnimC(OBJECT_KIRK, "s5r6kd", -1, -1, &Room::feather6KirkDiedFromStalactites);
+ loadActorAnim2(OBJECT_STALACTITES, "s5r6tf");
+ playMidiMusicTracks(0);
+}
+
+void Room::feather6UseRockOnStalagmites() {
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_019);
+}
+
+void Room::feather6UseRockAnywhere() {
+ // ENHANCEMENT: There were two implementations of this function. The first (which took
+ // precedence) showed TX_FEA6N009, a generic "nothing happens" text. The second is
+ // Spock advising you not to use rocks, which is more interesting.
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_021);
+}
+
+void Room::feather6UseKnifeOnStalagmites() {
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_028);
+}
+
+void Room::feather6UseKnifeAnywhere() {
+ showText(TX_FEA6N010);
+}
+
+void Room::feather6UseKnifeOnMccoy() {
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_039); // BUGFIX: Speaker is Stragey (not Spock)
+}
+
+void Room::feather6UseKnifeOnSpock() {
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_039); // BUGFIX: Speaker is Stragey (not Spock)
+}
+
+void Room::feather6UseKnifeOnRedshirt() {
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_039); // BUGFIX: Speaker is Stragey (not Spock)
+}
+
+void Room::feather6UseCrystalAnywhere() {
+ showText(TX_FEA6N015);
+}
+
+void Room::feather6UseSnakeAnywhere() {
+ showText(TX_FEA6N001);
+}
+
+void Room::feather6UseMedkitAnywhere() {
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_011);
+}
+
+void Room::feather6UsePhaser() {
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_023);
+}
+
+void Room::feather6LookAtEastExit() {
+ showText(TX_FEA6N016);
+}
+
+void Room::feather6LookAnywhere() {
+ showText(TX_FEA6N003);
+}
+
+void Room::feather6LookAtRocks() {
+ showText(TX_FEA6N014);
+}
+
+void Room::feather6LookAtStalagmites() {
+ showText(TX_FEA6N013);
+}
+
+void Room::feather6LookAtCrystals() {
+ showText(TX_FEA6N005);
+}
+
+void Room::feather6LookAtKirk() {
+ showText(TX_FEA6N007);
+}
+
+void Room::feather6LookAtSpock() {
+ showText(TX_FEA6N011);
+}
+
+void Room::feather6LookAtMccoy() {
+ showText(TX_FEA6N002);
+}
+
+void Room::feather6LookAtRedshirt() {
+ showText(TX_FEA6N008);
+}
+
+void Room::feather6LookAtStalactites() {
+ showText(TX_FEA6N012);
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_034);
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_017);
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_033);
+
+ // BUG: Choice 2 (TX_FEA6_004) doesn't match with audio at all.
+ const TextRef choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_FEA6_008, TX_FEA6_006, TX_FEA6_004,
+ TX_BLANK
+ };
+ int choice = showText(choices);
+
+ if (choice == 0)
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_032);
+ else if (choice == 1)
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_036);
+ else
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_037);
+}
+
+void Room::feather6TalkToMccoy() {
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_013);
+}
+
+void Room::feather6TalkToRedshirt() {
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_042);
+ showText(TX_SPEAKER_KIRK, TX_FEA6_002);
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_041);
+ showText(TX_SPEAKER_MCCOY, TX_FEA6_016);
+ showText(TX_SPEAKER_STRAGEY, TX_FEA6_043);
+}
+
+void Room::feather6TalkToSpock() {
+ if (!_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_035);
+ else {
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_038);
+
+ const TextRef choices[] = {
+ TX_SPEAKER_KIRK,
+ TX_FEA6_003, TX_FEA6_005, TX_FEA6_007,
+ TX_BLANK
+ };
+ int choice = showText(choices);
+
+ if (choice == 0)
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_029);
+ else if (choice == 1)
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_030);
+ else
+ showText(TX_SPEAKER_SPOCK, TX_FEA6_031);
+ }
+}
+
+void Room::feather6UseMTricorderOnEastExit() {
+ mccoyScan(DIR_E, TX_FEA6_012);
+}
+
+void Room::feather6UseMTricorderOnRocks() {
+ // ENHANCEMENT: Original didn't play tricorder noise, etc
+ mccoyScan(DIR_E, TX_FEA6_015);
+}
+
+void Room::feather6UseSTricorderOnEastExit() {
+ spockScan(DIR_E, TX_FEA6_024);
+}
+
+void Room::feather6UseSTricorderAnywhere() {
+ spockScan(DIR_S, TX_FEA6_022);
+}
+
+void Room::feather6UseSTricorderOnRocks() {
+ spockScan(DIR_N, TX_FEA6_018);
+}
+
+void Room::feather6UseSTricorderOnCrystals() {
+ spockScan(DIR_N, TX_FEA6_027);
+}
+
+void Room::feather6UseSTricorderOnStalactites() {
+ spockScan(DIR_N, TX_FEA6_025);
+}
+
+void Room::feather6UseSTricorderOnStalagmites() {
+ spockScan(DIR_N, TX_FEA6_026);
+}
+
+void Room::feather6GetCrystals() {
+ showText(TX_FEA6N020);
+}
+
+void Room::feather6UseKnifeOnCrystals() {
+ _vm->_awayMission.disableInput = true;
+ walkCrewmanC(OBJECT_KIRK, 0x9a, 0x97, &Room::feather6ReachedCrystalsWithKnife);
+}
+
+void Room::feather6ReachedCrystalsWithKnife() {
+ loadActorAnimC(OBJECT_KIRK, "s5r6kp", -1, -1, &Room::feather6DoneCuttingCrystals);
+ _vm->_awayMission.timers[4] = 122;
+}
+
+void Room::feather6DoneCuttingCrystals() {
+ _vm->_awayMission.disableInput = false;
+ loadActorStandAnim(OBJECT_KIRK);
+ _vm->_awayMission.feather.missionScore += 1;
+ giveItem(OBJECT_ICRYSTAL);
+ showText(TX_FEA6N017);
+}
+void Room::feather6Timer4Expired() { // Crystal disappears when timer 4 expires
+ loadActorStandAnim(OBJECT_CRYSTALS);
}
}
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index ab53a11159..1bc32ff544 100644
--- a/engines/startrek/rooms/function_map.h
+++ b/engines/startrek/rooms/function_map.h
@@ -1782,12 +1782,8 @@ RoomAction feather0ActionList[] = {
extern const RoomAction feather1ActionList[], feather2ActionList[], feather3ActionList[], feather4ActionList[];
extern const int feather1NumActions, feather2NumActions, feather3NumActions, feather4NumActions;
-extern const RoomAction feather5ActionList[];
-extern const int feather5NumActions;
-
-RoomAction feather6ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::feather6Tick1 },
-};
+extern const RoomAction feather5ActionList[], feather6ActionList[];
+extern const int feather5NumActions, feather6NumActions;
RoomAction feather7ActionList[] = {
{ {ACTION_TICK, 1, 0, 0}, &Room::feather7Tick1 },
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index efa4abb666..0cc26b58ba 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -1885,6 +1885,71 @@ enum GameStringIDs {
TX_FEA5N015,
+ TX_FEA6_001,
+ TX_FEA6_002,
+ TX_FEA6_003,
+ TX_FEA6_004,
+ TX_FEA6_005,
+ TX_FEA6_006,
+ TX_FEA6_007,
+ TX_FEA6_008,
+ TX_FEA6_009,
+ TX_FEA6_011,
+ TX_FEA6_012,
+ TX_FEA6_013,
+ TX_FEA6_014,
+ TX_FEA6_015,
+ TX_FEA6_016,
+ TX_FEA6_017,
+ TX_FEA6_018,
+ TX_FEA6_019,
+ TX_FEA6_020,
+ TX_FEA6_021,
+ TX_FEA6_022,
+ TX_FEA6_023,
+ TX_FEA6_024,
+ TX_FEA6_025,
+ TX_FEA6_026,
+ TX_FEA6_027,
+ TX_FEA6_028,
+ TX_FEA6_029,
+ TX_FEA6_030,
+ TX_FEA6_031,
+ TX_FEA6_032,
+ TX_FEA6_033,
+ TX_FEA6_034,
+ TX_FEA6_035,
+ TX_FEA6_036,
+ TX_FEA6_037,
+ TX_FEA6_038,
+ TX_FEA6_039,
+ TX_FEA6_040,
+ TX_FEA6_041,
+ TX_FEA6_042,
+ TX_FEA6_043,
+ TX_FEA6N000,
+ TX_FEA6N001,
+ TX_FEA6N002,
+ TX_FEA6N003,
+ TX_FEA6N004,
+ TX_FEA6N005,
+ TX_FEA6N006,
+ TX_FEA6N007,
+ TX_FEA6N008,
+ TX_FEA6N009,
+ TX_FEA6N010,
+ TX_FEA6N011,
+ TX_FEA6N012,
+ TX_FEA6N013,
+ TX_FEA6N014,
+ TX_FEA6N015,
+ TX_FEA6N016,
+ TX_FEA6N017,
+ TX_FEA6N020,
+ TX_FEA6N028,
+ TX_FEA6N029,
+
+
TX_SIN3_012,
@@ -3705,6 +3770,71 @@ const char * const g_gameStrings[] = {
"#FEA5\\FEA5N015#You already have a piece of the plant.",
+ "#FEA6\\FEA6_001#I think I can get it with a few more blows.",
+ "#FEA6\\FEA6_002#Have you ever made it up the face of Half Dome, Lieutenant?",
+ "#FEA6\\FEA6_003#Perhaps we should hold onto that hope, Mr. Spock, that a civilised being will not kill for trivial motives.",
+ "#FEA6\\FEA6_004#Sometimes I feel like I'm the Captain of a nursery school.",
+ "#FEA6\\FEA6_005#That creature was quite real Mr. Spock. We will discuss this with our host, when we see him.",
+ "#FEA6\\FEA6_006#Then, gentlemen, I would advise you to stop arguing.",
+ "#FEA6\\FEA6_007#Unfortunately, human history is full of people who did not practice what they preached. Quetzecoatl is just one in a long line of them.",
+ "#FEA6\\FEA6_008#Will you two morons stop arguing just once!",
+ "#FEA6\\FEA6_009#Damn it Jim, I'm a surgeon not a geologist.",
+ "#FEA6\\FEA6_011#Everyone is healthy, Jim, there's no need for the medical kit here.",
+ "#FEA6\\FEA6_012#It would appear that our tentacled friend wants dessert. You can't go back that way, unless you enjoy being eaten.",
+ "#FEA6\\FEA6_013#I've lost any appetite I may have had for squid, Jim",
+ "#FEA6\\FEA6_014#Jim! Going back across that river would be insane.",
+ "#FEA6\\FEA6_015#Well, they're not organic. What did you think they were, calcified tribbles?",
+ "#FEA6\\FEA6_016#Captains and security officers. They don't realize how fragile the human body can be.",
+ "#FEA6\\FEA6_017#Well isn't that just great!",
+ "#FEA6\\FEA6_018#Fascinating. These rocks are limestone, but contain an unusually high content of heavy metals. There are dilithium crystals here, but in a very raw form.",
+ "#FEA6\\FEA6_019#I fail to see any logic in that action, Captain It may also cause stalactites to fall.",
+ "#FEA6\\FEA6_020#I would suggest using something to pry that loose, Captain.",
+ "#FEA6\\FEA6_021#It is unwise to use a rock here, Captain.",
+ "#FEA6\\FEA6_022#My tricorder indicates unusual energy patterns in this direction, Captain.",
+ "#FEA6\\FEA6_023#Still inoperative, Captain.",
+ "#FEA6\\FEA6_024#The creature is still there, Captain.",
+ "#FEA6\\FEA6_025#These stalactites were made from limestone deposits. They took millennia to form.",
+ "#FEA6\\FEA6_026#These stalagmites were made from limestone deposits. They took millennia to form.",
+ "#FEA6\\FEA6_027#This appears to be a formation of raw dilithium crystals, Captain.",
+ "#FEA6\\FEA6_028#This illogical action would only dull the knife.",
+ "#FEA6\\FEA6_029#Agreed, Captain.",
+ "#FEA6\\FEA6_030#This whole experience feels like a test. The equivalent of 20th Century earth lab rats running through a maze.",
+ "#FEA6\\FEA6_031#I would wait until we meet him before judging him, Captain.",
+ "#FEA6\\FEA6_032#Captain, I cannot speak for Dr. McCoy, but my intelligence quotient is far higher than humans...",
+ "#FEA6\\FEA6_033#Doctor, I would point out that your voice could also trigger such a collapse.",
+ "#FEA6\\FEA6_034#I should warn you that the stalactites could collapse quite easily. Any sudden motion could cause large quantities of stalactites to fall on us.",
+ "#FEA6\\FEA6_035#I would suggest we continue on, Captain. It would not be logical to endanger ourselves by remaining here.",
+ "#FEA6\\FEA6_036#It would seem to be a prudent course of action Captain, if Doctor McCoy would agree.",
+ "#FEA6\\FEA6_037#Really? That's fascinating Captain.",
+ "#FEA6\\FEA6_038#There is a contradiction, Captain. If Quetzecoatl is really an entity of peace, then Lt. Stragey should not have died.",
+ "#FEA6\\FEA6_039#Captain, have we done something wrong?",
+ "#FEA6\\FEA6_040#I don't think I'll be able to get a good grip sir. You might try prying it loose.",
+ "#FEA6\\FEA6_041#If we ever get back to Earth, one hundred credits says I'll beat you.",
+ "#FEA6\\FEA6_042#Reminds me of some spelunking I did on Hades IV. Ever do any climbing, Captain?",
+ "#FEA6\\FEA6_043#Sure we do. That's the challenge.",
+ "#FEA6\\FEA6N000#A stalagtite breaks loose and falls. You are mortally injured and die.",
+ "#FEA6\\FEA6N001#An interesting, but useless, manuever.",
+ "#FEA6\\FEA6N002#As usual, Dr. McCoy looks annoyed by the mission. ",
+ "#FEA6\\FEA6N003#Darkness, leading into the unknown.",
+ "#FEA6\\FEA6N004#However, a strange force envelopes your body...",
+ "#FEA6\\FEA6N005#It is a large cluster of crystals.",
+ "#FEA6\\FEA6N006#It's Game Over man...",
+ "#FEA6\\FEA6N007#James Kirk remembers the last time he was in a cave, and is glad that this one seems more peaceful.",
+ "#FEA6\\FEA6N008#Lieutenant Stragey looks nervously at the stalactites hovering precariously above you.",
+ "#FEA6\\FEA6N009#Nothing happens.",
+ "#FEA6\\FEA6N010#Nothing happens.",
+ "#FEA6\\FEA6N011#Spock is his usual stoic self.",
+ "#FEA6\\FEA6N012#Stalactites descend from the ceiling.",
+ "#FEA6\\FEA6N013#Stalagmites rise from the floor of the cave.",
+ "#FEA6\\FEA6N014#They appear to be ordinary rocks. Spock's tricorder might say otherwise.",
+ "#FEA6\\FEA6N015#This is one place where dilithium crystals don't seem to be very useful.",
+ "#FEA6\\FEA6N016#This is the way that you entered the cave. If you leave this way, the tentacled creature that attack you will probably try to get a second course for its dinner.",
+ "#FEA6\\FEA6N017#You have one dilithium crystal, in raw form.",
+ "#FEA6\\FEA6N020#You will need something to pry it loose.",
+ "#FEA6\\FEA6N028#You manage to pry loose one dilithium crystal.",
+ "#FEA6\\FEA6N029#You scratch your initials. No dilithium crystals were found.",
+
+
"#SIN3\\SIN3_012#Can't say I like the decor.",