diff options
author | Matthew Stewart | 2018-07-05 23:42:25 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | 092cf422cab8aaf21adf742bf4f0b8154f82b113 (patch) | |
tree | a631eba0ec4c4fcc61c7c9fd3a3234add0d936fd | |
parent | 0c41f30f58b1e4c072b8ae695acc09ebcc3ae26b (diff) | |
download | scummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.tar.gz scummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.tar.bz2 scummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.zip |
STARTREK: FEATHER7
-rw-r--r-- | engines/startrek/room.cpp | 2 | ||||
-rw-r--r-- | engines/startrek/room.h | 10 | ||||
-rw-r--r-- | engines/startrek/rooms/feather7.cpp | 135 | ||||
-rw-r--r-- | engines/startrek/rooms/function_map.h | 8 | ||||
-rw-r--r-- | engines/startrek/text.h | 64 |
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.", |