aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/startrek/room.cpp2
-rw-r--r--engines/startrek/room.h10
-rw-r--r--engines/startrek/rooms/feather7.cpp135
-rw-r--r--engines/startrek/rooms/function_map.h8
-rw-r--r--engines/startrek/text.h64
5 files changed, 209 insertions, 10 deletions
diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp
index c1d7216664..9964fc60d8 100644
--- a/engines/startrek/room.cpp
+++ b/engines/startrek/room.cpp
@@ -161,7 +161,7 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
}
else if (name == "FEATHER7") {
_roomActionList = feather7ActionList;
- _numRoomActions = sizeof(feather7ActionList) / sizeof(RoomAction);
+ _numRoomActions = feather7NumActions;
}
else {
warning("Room \"%s\" unimplemented", name.c_str());
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index a307cf4bdf..58cd6f4e5a 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -1708,6 +1708,13 @@ public:
// FEATHER7
void feather7Tick1();
+ void feather7Tick40();
+ void feather7KirkReachedSeat();
+ void feather7SpockReachedSeat();
+ void feather7MccoyReachedSeat();
+ void feather7QuetzecoatlReachedSeat();
+ void feather7KirkSatDown();
+ void feather7ReadyToBeamOut();
private:
// Room-specific variables. This is memset'ed to 0 when the room is initialized.
@@ -1841,6 +1848,9 @@ private:
// feather6
bool usedRockOnCrystalsOnce;
+
+ // feather7
+ bool insultedQuetzecoatl;
} feather;
diff --git a/engines/startrek/rooms/feather7.cpp b/engines/startrek/rooms/feather7.cpp
index a932404e87..3527014cda 100644
--- a/engines/startrek/rooms/feather7.cpp
+++ b/engines/startrek/rooms/feather7.cpp
@@ -22,14 +22,143 @@
#include "startrek/room.h"
-#define OBJECT_8 8
-
-#define HOTSPOT_20 0x20
+#define OBJECT_QUETZECOATL 8
namespace StarTrek {
+extern const RoomAction feather7ActionList[] = {
+ { {ACTION_TICK, 1, 0, 0}, &Room::feather7Tick1 },
+ { {ACTION_TICK, 40, 0, 0}, &Room::feather7Tick40 },
+ { {ACTION_DONE_WALK, 1, 0, 0}, &Room::feather7KirkReachedSeat },
+ { {ACTION_DONE_WALK, 2, 0, 0}, &Room::feather7SpockReachedSeat },
+ { {ACTION_DONE_WALK, 3, 0, 0}, &Room::feather7MccoyReachedSeat },
+ { {ACTION_DONE_ANIM, 4, 0, 0}, &Room::feather7QuetzecoatlReachedSeat },
+ { {ACTION_DONE_ANIM, 1, 0, 0}, &Room::feather7KirkSatDown },
+ { {ACTION_DONE_ANIM, 2, 0, 0}, &Room::feather7ReadyToBeamOut },
+};
+
+extern const int feather7NumActions = sizeof(feather7ActionList) / sizeof(RoomAction);
+
+
void Room::feather7Tick1() {
+ playVoc("FEA7LOOP");
+ playMidiMusicTracks(33);
+ _vm->_awayMission.disableInput = 2;
+ loadActorAnim(OBJECT_QUETZECOATL, "s5r7qn", 0x106, 0x98);
+}
+
+void Room::feather7Tick40() {
+ if (_vm->_awayMission.feather.diedFromStalactites)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_017);
+
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_022);
+
+ if (_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_021);
+
+ // BUGFIX: Show this even if redshirt isn't dead (he wishes you wouldn't have knocked
+ // out Tlaoxac)
+ if (_vm->_awayMission.feather.knockedOutTlaoxac)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_023);
+
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_027);
+
+ walkCrewmanC(OBJECT_KIRK, 0x6c, 0x93, &Room::feather7KirkReachedSeat);
+ walkCrewmanC(OBJECT_SPOCK, 0xbb, 0x8c, &Room::feather7SpockReachedSeat);
+ walkCrewmanC(OBJECT_MCCOY, 0x8d, 0x8c, &Room::feather7MccoyReachedSeat);
+ loadActorAnimC(OBJECT_QUETZECOATL, "s5r7qw", -1, -1, &Room::feather7QuetzecoatlReachedSeat);
+}
+
+void Room::feather7KirkReachedSeat() {
+ loadActorAnimC(OBJECT_KIRK, "s5r7ks", -1, -1, &Room::feather7KirkSatDown);
+}
+
+void Room::feather7SpockReachedSeat() {
+ loadActorAnim2(OBJECT_SPOCK, "s5r7ss");
+}
+
+void Room::feather7MccoyReachedSeat() {
+ loadActorAnim2(OBJECT_MCCOY, "s5r7ms");
+}
+
+void Room::feather7QuetzecoatlReachedSeat() {
+ loadActorAnim2(OBJECT_QUETZECOATL, "s5r7qn", 0x97, 0x98);
+}
+
+void Room::feather7KirkSatDown() {
+ const TextRef choices1[] = {
+ TX_SPEAKER_KIRK,
+ TX_FEA7_005, TX_FEA7_006, TX_FEA7_010,
+ TX_BLANK
+ };
+ int choice = showText(choices1);
+
+ if (choice == 0) {
+ _roomVar.feather.insultedQuetzecoatl = true;
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_020);
+ } else if (choice == 1)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_019);
+ else
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_016);
+
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_029);
+
+ const TextRef choices2[] = {
+ TX_SPEAKER_KIRK,
+ TX_FEA7_007, TX_FEA7_004, TX_FEA7_012,
+ TX_BLANK
+ };
+ choice = showText(choices2);
+
+ if (choice == 0) {
+ _roomVar.feather.insultedQuetzecoatl = true;
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_030);
+ } else if (choice == 1)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_018);
+ else {
+ _roomVar.feather.insultedQuetzecoatl = true;
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_026);
+ }
+
+ showText(TX_SPEAKER_SPOCK, TX_FEA7_014);
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_024);
+
+ const TextRef choices3[] = {
+ TX_SPEAKER_KIRK,
+ TX_FEA7_008, TX_FEA7_009, TX_FEA7_011,
+ TX_BLANK
+ };
+ choice = showText(choices3);
+
+ if (choice == 0) {
+ _roomVar.feather.insultedQuetzecoatl = true;
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_025);
+ } else if (choice == 1)
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_028);
+
+ showText(TX_SPEAKER_QUETZECOATL, TX_FEA7_015);
+ showText(TX_SPEAKER_MCCOY, TX_FEA7_013);
+ showText(TX_SPEAKER_KIRK, TX_FEA7_003);
+
+ loadActorAnimC(OBJECT_KIRK, "s5r7ku", -1, -1, &Room::feather7ReadyToBeamOut);
+ loadActorAnim2(OBJECT_SPOCK, "s5r7su");
+ loadActorAnim2(OBJECT_MCCOY, "s5r7mu");
+}
+
+void Room::feather7ReadyToBeamOut() {
+ if (_vm->_awayMission.redshirtDead)
+ showText(TX_SPEAKER_KIRK, TX_FEA7_002);
+ else {
+ _vm->_awayMission.feather.missionScore += 1;
+ showText(TX_SPEAKER_KIRK, TX_FEA7_001);
+ }
+
+ if (!_roomVar.feather.insultedQuetzecoatl)
+ _vm->_awayMission.feather.missionScore += 2;
+ _vm->_awayMission.feather.missionScore += 4;
+ loadActorAnim2(OBJECT_QUETZECOATL, "s5r7qt");
+ endMission(_vm->_awayMission.feather.missionScore, 0x13, 0);
}
}
diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h
index 1bc32ff544..a00aa5603f 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[], feather6ActionList[];
-extern const int feather5NumActions, feather6NumActions;
-
-RoomAction feather7ActionList[] = {
- { {ACTION_TICK, 1, 0, 0}, &Room::feather7Tick1 },
-};
+extern const RoomAction feather5ActionList[], feather6ActionList[], feather7ActionList[];
+extern const int feather5NumActions, feather6NumActions, feather7NumActions;
}
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index e58e750e5f..f669819d33 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -1952,6 +1952,38 @@ enum GameStringIDs {
TX_FEA6N029, // UNUSED
+ TX_FEA7_001,
+ TX_FEA7_002,
+ TX_FEA7_003,
+ TX_FEA7_004,
+ TX_FEA7_005,
+ TX_FEA7_006,
+ TX_FEA7_007,
+ TX_FEA7_008,
+ TX_FEA7_009,
+ TX_FEA7_010,
+ TX_FEA7_011,
+ TX_FEA7_012,
+ TX_FEA7_013,
+ TX_FEA7_014,
+ TX_FEA7_015,
+ TX_FEA7_016,
+ TX_FEA7_017,
+ TX_FEA7_018,
+ TX_FEA7_019,
+ TX_FEA7_020,
+ TX_FEA7_021,
+ TX_FEA7_022,
+ TX_FEA7_023,
+ TX_FEA7_024,
+ TX_FEA7_025,
+ TX_FEA7_026,
+ TX_FEA7_027,
+ TX_FEA7_028,
+ TX_FEA7_029,
+ TX_FEA7_030,
+
+
TX_SIN3_012,
@@ -3837,6 +3869,38 @@ const char * const g_gameStrings[] = {
"#FEA6\\FEA6N029#You scratch your initials. No dilithium crystals were found.",
+ "#FEA7\\FEA7_001#Scotty, five to beam up.",
+ "#FEA7\\FEA7_002#Scotty, four to beam up.",
+ "#FEA7\\FEA7_003#You've got to do it, Bones! If the Klingons realize he's no longer a threat to them, perhaps we can avoid a war!",
+ "#FEA7\\FEA7_004#Absolutely. Your best intentions were changed by the imperfect humans that you left in charge after you departed. Such is the way of our race, I'm afraid.",
+ "#FEA7\\FEA7_005#I've had it up to here with so-called superior beings terrorizing my crew because we're so 'primitive'. Maybe you should see how primitive you are before you go around testing others.",
+ "#FEA7\\FEA7_006#One thing first. If you're so peaceful, how come the Aztecs were so violent and agressive?",
+ "#FEA7\\FEA7_007#The Federation is not in the business of lying, mister.",
+ "#FEA7\\FEA7_008#We're a technologically advanced starfaring race, what do you think? That we wouldn't have made progress in medicine?",
+ "#FEA7\\FEA7_009#With Dr. McCoy, I sometimes wonder, but yes, I would say we have made considerable advances.",
+ "#FEA7\\FEA7_010#Yes, I guess we do. Go on.",
+ "#FEA7\\FEA7_011#Yes, why do you ask?",
+ "#FEA7\\FEA7_012#You messed up in a big way. Perhaps you should try following the Prime Directive. It changed our lives.",
+ "#FEA7\\FEA7_013#Jim, I'll try, but the physiology is completely alien...",
+ "#FEA7\\FEA7_014#You show great wisdom, sir. But your statement implies that you wish to change your condition.",
+ "#FEA7\\FEA7_015#At the top of my spine is a gland not found in your species. This is the seat of my power. I wish you to remove it, thereby making me a mortal.",
+ "#FEA7\\FEA7_016#First, I have one question...",
+ "#FEA7\\FEA7_017#I am sorry you had to go through this ordeal. It was not meant for you to die.",
+ "#FEA7\\FEA7_018#I sense truth in this. Perhaps this is what happened to my children on the Klingon world of Hrakkour, which would explain why they are searching for me. I have clearly abused the power that was given me long ago.",
+ "#FEA7\\FEA7_019#I tried to teach them the concept of self-sacrifice. It would appear they did not completely understand my teachings.",
+ "#FEA7\\FEA7_020#I was not aware you had been tested before. My apologies.",
+ "#FEA7\\FEA7_021#I was particularly impressed by the sacrifice made by Lt. Stragey. Of course, I gave him back his life. He is now safely aboard your vessel.",
+ "#FEA7\\FEA7_022#I watched as you worked through the problems I set in your path. you are a valiant, intelligent species.",
+ "#FEA7\\FEA7_023#I would have been more impressed had you found a less violent solution. My children are dear to me. Even so, few choices remain to me.",
+ "#FEA7\\FEA7_024#Indeed. If my mission of peace was overthrown, then I am no longer worthy of my power. Tell me, has your species made progress in the medical arts?",
+ "#FEA7\\FEA7_025#Of course, how foolish of me. Still, there are cultures where medical knowledge is considered a sign of weakness. Warrior cultures, where nothing matters but physical strength. Survival of the foolish.",
+ "#FEA7\\FEA7_026#Ours is an intensely curious race, Captain. My brothers and I have raised children on a thousand worlds, loved them, watched them grow, only to see them become separated from us by the passage of time. It is sad and lonely process, one which I shall not repeat again. I am no longer worthy of my gift.",
+ "#FEA7\\FEA7_027#Please sit down. We have much to discuss.",
+ "#FEA7\\FEA7_028#Then I shall ask to make use of your advances.",
+ "#FEA7\\FEA7_029#You are clearly not the liars I thought you to be. Were you telling me the truth about my disciples? That they became ruthless savages?",
+ "#FEA7\\FEA7_030#Your harshness is unwarranted, but I sense truth in this. Perhaps this is what happened to my children on the Klingon world of Hrakkour, which would explain why they are searching for me. I have clearly abused the power that was given me long ago.",
+
+
"#SIN3\\SIN3_012#Can't say I like the decor.",