aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/rooms
diff options
context:
space:
mode:
authorMatthew Stewart2018-07-05 23:42:25 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit092cf422cab8aaf21adf742bf4f0b8154f82b113 (patch)
treea631eba0ec4c4fcc61c7c9fd3a3234add0d936fd /engines/startrek/rooms
parent0c41f30f58b1e4c072b8ae695acc09ebcc3ae26b (diff)
downloadscummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.tar.gz
scummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.tar.bz2
scummvm-rg350-092cf422cab8aaf21adf742bf4f0b8154f82b113.zip
STARTREK: FEATHER7
Diffstat (limited to 'engines/startrek/rooms')
-rw-r--r--engines/startrek/rooms/feather7.cpp135
-rw-r--r--engines/startrek/rooms/function_map.h8
2 files changed, 134 insertions, 9 deletions
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;
}