mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 06:39:17 +00:00
STARTREK: FEATHER5
This commit is contained in:
parent
8aef8c4539
commit
5863f515f7
@ -42,6 +42,11 @@ enum ActionTypes {
|
||||
ACTION_TOUCHED_HOTSPOT = 7, // Second kind of "hotspot" only relevant when an object touches them
|
||||
ACTION_TIMER_EXPIRED = 8,
|
||||
|
||||
ACTION_DONE_ANIM = 10,
|
||||
ACTION_DONE_WALK = 12,
|
||||
|
||||
// TODO: remove these as redundant. They only still exist so I don't need to redo the
|
||||
// manual spacing in the room action lists.
|
||||
ACTION_FINISHED_ANIMATION = 10,
|
||||
ACTION_FINISHED_WALKING = 12,
|
||||
|
||||
|
@ -613,16 +613,14 @@ void StarTrekEngine::handleAwayMissionAction() {
|
||||
showTextbox("", getLoadedText(GROUNDTX_LOOK_SPOCK), 20, 20, TEXTCOLOR_YELLOW, 0);
|
||||
else if (action.activeObject() == OBJECT_MCCOY)
|
||||
showTextbox("", getLoadedText(GROUNDTX_LOOK_MCCOY), 20, 20, TEXTCOLOR_YELLOW, 0);
|
||||
else {
|
||||
if (action.activeObject() == OBJECT_REDSHIRT)
|
||||
showTextbox("", getLoadedText(GROUNDTX_LOOK_REDSHIRT), 20, 20, TEXTCOLOR_YELLOW, 0);
|
||||
|
||||
else if (action.activeObject() == OBJECT_REDSHIRT)
|
||||
showTextbox("", getLoadedText(GROUNDTX_LOOK_REDSHIRT), 20, 20, TEXTCOLOR_YELLOW, 0);
|
||||
else
|
||||
// Show generic "nothing of note" text.
|
||||
// BUG? This text is also shown after looking at the redshirt. However, his
|
||||
// text is normally overridden on a per-mission basis, so perhaps this bug
|
||||
// never manifests itself?
|
||||
// BUGFIX: originally this was shown after the redshirt's text as well.
|
||||
// Though, the original game may not have used this default implementation
|
||||
// anywhere...
|
||||
showTextbox("", getLoadedText(GROUNDTX_LOOK_ANYWHERE), 20, 20, TEXTCOLOR_YELLOW, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTION_TALK:
|
||||
|
@ -253,9 +253,11 @@ struct AwayMission {
|
||||
bool tookKnife; // 0x2d
|
||||
bool field2e; // 0x2e
|
||||
byte numRocksThrownAtTlaoxac; // 0x2f
|
||||
bool gotFern; // 0x30
|
||||
bool holeBlocked; // 0x31
|
||||
bool tlaoxacTestPassed; // 0x32
|
||||
bool knockedOutTlaoxac; // 0x33
|
||||
bool waterMonsterRetreated; // 0x34
|
||||
bool showedSnakeToTlaoxac; // 0x35
|
||||
int16 missionScore; // 0x36
|
||||
} feather;
|
||||
|
@ -153,7 +153,7 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm) {
|
||||
}
|
||||
else if (name == "FEATHER5") {
|
||||
_roomActionList = feather5ActionList;
|
||||
_numRoomActions = sizeof(feather5ActionList) / sizeof(RoomAction);
|
||||
_numRoomActions = feather5NumActions;
|
||||
}
|
||||
else if (name == "FEATHER6") {
|
||||
_roomActionList = feather6ActionList;
|
||||
|
@ -1573,7 +1573,7 @@ public:
|
||||
void feather4UsePhaser();
|
||||
void feather4UseSTricorderOnLight();
|
||||
void feather4UseSTricorderOnMushroom();
|
||||
void feather4UseSTricorderOnBush();
|
||||
void feather4UseSTricorderOnFern();
|
||||
void feather4UseSTricorderAnywhere();
|
||||
void feather4UseMTricorderOnLight();
|
||||
void feather4UseMTricorderOnMushroom();
|
||||
@ -1585,7 +1585,7 @@ public:
|
||||
void feather4LookAtEyes();
|
||||
void feather4LookAnywhere();
|
||||
void feather4LookAtMushroom();
|
||||
void feather4LookAtBush();
|
||||
void feather4LookAtFern();
|
||||
void feather4LookAtLight();
|
||||
void feather4LookAtKirk();
|
||||
void feather4LookAtSpock();
|
||||
@ -1594,6 +1594,64 @@ public:
|
||||
|
||||
// FEATHER5
|
||||
void feather5Tick1();
|
||||
void feather5TouchedHotspot0();
|
||||
void feather5UseSpockOnFern();
|
||||
void feather5UseMccoyOnFern();
|
||||
void feather5UseRedshirtOnFern();
|
||||
void feather5UseRedshirtOnLeftExit();
|
||||
void feather5RedshirtReachedLog();
|
||||
void feather5RedshirtDeathFinished();
|
||||
void feather5UseSpockOnLeftExit();
|
||||
void feather5UseMccoyOnLeftExit();
|
||||
void feather5UseSnakeOnKirk();
|
||||
void feather5UseSnakeOnSpock();
|
||||
void feather5UseSnakeOnMccoy();
|
||||
void feather5UseSnakeOnRedshirt();
|
||||
void feather5UseSnakeOnWater();
|
||||
void feather5UseKnifeOnKirk();
|
||||
void feather5UseKnifeOnSpock();
|
||||
void feather5UseKnifeOnMccoy();
|
||||
void feather5UseKnifeOnRedshirt();
|
||||
void feather5UseKnifeOnWater();
|
||||
void feather5UseKnifeOnMonster();
|
||||
void feather5GetFern();
|
||||
void feather5UseKnifeOnFern();
|
||||
void feather5ReachedFern();
|
||||
void feather5PickedUpFern();
|
||||
void feather5UseFernOnMonster();
|
||||
void feather5ReachedPositionToUseFern();
|
||||
void feather5DoneThrowingFern();
|
||||
void feather5FernFellIntoWater();
|
||||
void feather5Timer1Expired();
|
||||
void feather5UseRockOnSpock();
|
||||
void feather5UseRockOnMccoy();
|
||||
void feather5UseRockOnRedshirt();
|
||||
void feather5UseCrewmanOnThrownFern();
|
||||
void feather5UseSpockOnMonster();
|
||||
void feather5UseMccoyOnMonster();
|
||||
void feather5UseRedshirtOnMonster();
|
||||
void feather5UsePhaser();
|
||||
void feather5LookAnywhere();
|
||||
void feather5LookAtLog();
|
||||
void feather5LookAtWater();
|
||||
void feather5LookAtFern();
|
||||
void feather5LookAtInsects();
|
||||
void feather5LookAtCave();
|
||||
void feather5LookAtMonster();
|
||||
void feather5LookAtSpock();
|
||||
void feather5LookAtKirk();
|
||||
void feather5LookAtMccoy();
|
||||
void feather5LookAtRedshirt();
|
||||
void feather5TalkToMccoy();
|
||||
void feather5TalkToSpock();
|
||||
void feather5TalkToRedshirt();
|
||||
void feather5UseMTricorderOnWater();
|
||||
void feather5UseMTricorderOnMonster();
|
||||
void feather5UseSTricorderOnMonster();
|
||||
void feather5UseSTricorderAnywhere();
|
||||
void feather5UseSTricorderOnWater();
|
||||
void feather5UseSTricorderOnFern();
|
||||
void feather5UseMedkitAnywhere();
|
||||
|
||||
// FEATHER6
|
||||
void feather6Tick1();
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#define HOTSPOT_EYES 0x20
|
||||
#define HOTSPOT_MUSHROOM 0x21
|
||||
#define HOTSPOT_BUSH 0x22
|
||||
#define HOTSPOT_FERN 0x22
|
||||
#define HOTSPOT_LIGHT_1 0x23
|
||||
#define HOTSPOT_LIGHT_2 0x24
|
||||
#define HOTSPOT_LIGHT_3 0x25
|
||||
@ -40,7 +40,7 @@ extern const RoomAction feather4ActionList[] = {
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_LIGHT_2, 0}, &Room::feather4UseSTricorderOnLight },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_LIGHT_3, 0}, &Room::feather4UseSTricorderOnLight },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_MUSHROOM, 0},&Room::feather4UseSTricorderOnMushroom },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_BUSH, 0}, &Room::feather4UseSTricorderOnBush },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_FERN, 0}, &Room::feather4UseSTricorderOnFern },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::feather4UseSTricorderAnywhere },
|
||||
{ {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_LIGHT_1, 0}, &Room::feather4UseMTricorderOnLight },
|
||||
{ {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_LIGHT_2, 0}, &Room::feather4UseMTricorderOnLight },
|
||||
@ -54,7 +54,7 @@ extern const RoomAction feather4ActionList[] = {
|
||||
{ {ACTION_LOOK, HOTSPOT_EYES, 0, 0}, &Room::feather4LookAtEyes },
|
||||
{ {ACTION_LOOK, 0xff, 0, 0}, &Room::feather4LookAnywhere },
|
||||
{ {ACTION_LOOK, HOTSPOT_MUSHROOM, 0, 0}, &Room::feather4LookAtMushroom },
|
||||
{ {ACTION_LOOK, HOTSPOT_BUSH, 0, 0}, &Room::feather4LookAtBush },
|
||||
{ {ACTION_LOOK, HOTSPOT_FERN, 0, 0}, &Room::feather4LookAtFern },
|
||||
{ {ACTION_LOOK, HOTSPOT_LIGHT_1, 0, 0}, &Room::feather4LookAtLight },
|
||||
{ {ACTION_LOOK, HOTSPOT_LIGHT_2, 0, 0}, &Room::feather4LookAtLight },
|
||||
{ {ACTION_LOOK, HOTSPOT_LIGHT_3, 0, 0}, &Room::feather4LookAtLight },
|
||||
@ -88,7 +88,7 @@ void Room::feather4UseSTricorderOnMushroom() {
|
||||
spockScan(DIR_W, TX_FEA4_012);
|
||||
}
|
||||
|
||||
void Room::feather4UseSTricorderOnBush() {
|
||||
void Room::feather4UseSTricorderOnFern() {
|
||||
spockScan(DIR_W, TX_FEA4_009);
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ void Room::feather4LookAtMushroom() {
|
||||
showText(TX_FEA4N001);
|
||||
}
|
||||
|
||||
void Room::feather4LookAtBush() {
|
||||
void Room::feather4LookAtFern() {
|
||||
showText(TX_FEA4N000);
|
||||
}
|
||||
|
||||
|
@ -22,14 +22,399 @@
|
||||
|
||||
#include "startrek/room.h"
|
||||
|
||||
#define OBJECT_8 8
|
||||
#define OBJECT_MONSTER 8
|
||||
#define OBJECT_THROWN_FERN 10
|
||||
|
||||
#define HOTSPOT_20 0x20
|
||||
// The log in the middle of this room has odd "hitboxes". The top half is hotspot 0x20,
|
||||
// while the bottom half is hotspot 0x22. You need to use the redshirt on the top half to
|
||||
// cross over. Not sure why this is.
|
||||
|
||||
#define HOTSPOT_LEFT_EXIT 0x20
|
||||
#define HOTSPOT_FERN 0x21
|
||||
#define HOTSPOT_LOG 0x22
|
||||
#define HOTSPOT_WATER 0x23
|
||||
#define HOTSPOT_INSECTS_1 0x24
|
||||
#define HOTSPOT_INSECTS_2 0x25
|
||||
#define HOTSPOT_CAVE 0x26
|
||||
|
||||
namespace StarTrek {
|
||||
|
||||
extern const RoomAction feather5ActionList[] = {
|
||||
{ {ACTION_TICK, 1, 0, 0}, &Room::feather5Tick1 },
|
||||
{ {ACTION_TOUCHED_HOTSPOT, 0, 0, 0}, &Room::feather5TouchedHotspot0 },
|
||||
{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_FERN, 0}, &Room::feather5UseSpockOnFern },
|
||||
{ {ACTION_USE, OBJECT_MCCOY, HOTSPOT_FERN, 0}, &Room::feather5UseMccoyOnFern },
|
||||
{ {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_FERN, 0}, &Room::feather5UseRedshirtOnFern },
|
||||
|
||||
{ {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_LEFT_EXIT, 0}, &Room::feather5UseRedshirtOnLeftExit },
|
||||
{ {ACTION_DONE_WALK, 8, 0, 0}, &Room::feather5RedshirtReachedLog },
|
||||
{ {ACTION_DONE_ANIM, 8, 0, 0}, &Room::feather5RedshirtDeathFinished },
|
||||
|
||||
{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_LEFT_EXIT, 0}, &Room::feather5UseSpockOnLeftExit },
|
||||
{ {ACTION_USE, OBJECT_MCCOY, HOTSPOT_LEFT_EXIT, 0}, &Room::feather5UseMccoyOnLeftExit },
|
||||
{ {ACTION_USE, OBJECT_ISNAKE, OBJECT_KIRK, 0}, &Room::feather5UseSnakeOnKirk },
|
||||
{ {ACTION_USE, OBJECT_ISNAKE, OBJECT_SPOCK, 0}, &Room::feather5UseSnakeOnSpock },
|
||||
{ {ACTION_USE, OBJECT_ISNAKE, OBJECT_MCCOY, 0}, &Room::feather5UseSnakeOnMccoy },
|
||||
{ {ACTION_USE, OBJECT_ISNAKE, OBJECT_REDSHIRT, 0}, &Room::feather5UseSnakeOnRedshirt },
|
||||
{ {ACTION_USE, OBJECT_ISNAKE, HOTSPOT_WATER, 0}, &Room::feather5UseSnakeOnWater },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, OBJECT_KIRK, 0}, &Room::feather5UseKnifeOnKirk },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, OBJECT_SPOCK, 0}, &Room::feather5UseKnifeOnSpock },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, OBJECT_MCCOY, 0}, &Room::feather5UseKnifeOnMccoy },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, OBJECT_REDSHIRT, 0}, &Room::feather5UseKnifeOnRedshirt },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, HOTSPOT_WATER, 0}, &Room::feather5UseKnifeOnWater },
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, OBJECT_MONSTER, 0}, &Room::feather5UseKnifeOnMonster },
|
||||
{ {ACTION_GET, HOTSPOT_FERN, 0, 0}, &Room::feather5GetFern },
|
||||
|
||||
{ {ACTION_USE, OBJECT_IKNIFE, HOTSPOT_FERN, 0}, &Room::feather5UseKnifeOnFern },
|
||||
{ {ACTION_DONE_WALK, 1, 0, 0}, &Room::feather5ReachedFern },
|
||||
{ {ACTION_DONE_ANIM, 1, 0, 0}, &Room::feather5PickedUpFern },
|
||||
|
||||
{ {ACTION_USE, OBJECT_IFERN, OBJECT_MONSTER, 0}, &Room::feather5UseFernOnMonster },
|
||||
{ {ACTION_USE, OBJECT_IFERN, HOTSPOT_WATER, 0}, &Room::feather5UseFernOnMonster },
|
||||
{ {ACTION_DONE_WALK, 2, 0, 0}, &Room::feather5ReachedPositionToUseFern },
|
||||
{ {ACTION_DONE_ANIM, 2, 0, 0}, &Room::feather5DoneThrowingFern },
|
||||
{ {ACTION_DONE_ANIM, 3, 0, 0}, &Room::feather5FernFellIntoWater },
|
||||
{ {ACTION_TIMER_EXPIRED, 1, 0, 0}, &Room::feather5Timer1Expired },
|
||||
|
||||
{ {ACTION_USE, OBJECT_IROCK, OBJECT_SPOCK, 0}, &Room::feather5UseRockOnSpock },
|
||||
{ {ACTION_USE, OBJECT_IROCK, OBJECT_MCCOY, 0}, &Room::feather5UseRockOnMccoy },
|
||||
{ {ACTION_USE, OBJECT_IROCK, OBJECT_REDSHIRT, 0}, &Room::feather5UseRockOnRedshirt },
|
||||
{ {ACTION_USE, OBJECT_SPOCK, OBJECT_THROWN_FERN, 0}, &Room::feather5UseCrewmanOnThrownFern },
|
||||
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_THROWN_FERN, 0}, &Room::feather5UseCrewmanOnThrownFern },
|
||||
{ {ACTION_USE, OBJECT_REDSHIRT, OBJECT_THROWN_FERN, 0},&Room::feather5UseCrewmanOnThrownFern },
|
||||
{ {ACTION_USE, OBJECT_SPOCK, OBJECT_MONSTER, 0}, &Room::feather5UseSpockOnMonster },
|
||||
{ {ACTION_USE, OBJECT_MCCOY, OBJECT_MONSTER, 0}, &Room::feather5UseMccoyOnMonster },
|
||||
{ {ACTION_USE, OBJECT_REDSHIRT, OBJECT_MONSTER, 0}, &Room::feather5UseRedshirtOnMonster },
|
||||
{ {ACTION_USE, OBJECT_IPHASERS, 0xff, 0}, &Room::feather5UsePhaser },
|
||||
{ {ACTION_USE, OBJECT_IPHASERK, 0xff, 0}, &Room::feather5UsePhaser },
|
||||
{ {ACTION_LOOK, 0xff, 0, 0}, &Room::feather5LookAnywhere },
|
||||
{ {ACTION_LOOK, HOTSPOT_LOG, 0, 0}, &Room::feather5LookAtLog },
|
||||
{ {ACTION_LOOK, HOTSPOT_WATER, 0, 0}, &Room::feather5LookAtWater },
|
||||
{ {ACTION_LOOK, HOTSPOT_FERN, 0, 0}, &Room::feather5LookAtFern },
|
||||
{ {ACTION_LOOK, HOTSPOT_INSECTS_1, 0, 0}, &Room::feather5LookAtInsects },
|
||||
{ {ACTION_LOOK, HOTSPOT_INSECTS_2, 0, 0}, &Room::feather5LookAtInsects },
|
||||
{ {ACTION_LOOK, HOTSPOT_CAVE, 0, 0}, &Room::feather5LookAtCave },
|
||||
{ {ACTION_LOOK, OBJECT_MONSTER, 0, 0}, &Room::feather5LookAtMonster },
|
||||
{ {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::feather5LookAtSpock },
|
||||
{ {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::feather5LookAtKirk },
|
||||
{ {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::feather5LookAtMccoy },
|
||||
{ {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::feather5LookAtRedshirt },
|
||||
{ {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::feather5TalkToMccoy },
|
||||
{ {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::feather5TalkToSpock },
|
||||
{ {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::feather5TalkToRedshirt },
|
||||
{ {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_WATER, 0}, &Room::feather5UseMTricorderOnWater },
|
||||
{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_MONSTER, 0}, &Room::feather5UseMTricorderOnMonster },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_MONSTER, 0}, &Room::feather5UseSTricorderOnMonster },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::feather5UseSTricorderAnywhere },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_WATER, 0}, &Room::feather5UseSTricorderOnWater },
|
||||
{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_FERN, 0}, &Room::feather5UseSTricorderOnFern },
|
||||
{ {ACTION_USE, OBJECT_IMEDKIT, 0xff, 0}, &Room::feather5UseMedkitAnywhere },
|
||||
};
|
||||
|
||||
extern const int feather5NumActions = sizeof(feather5ActionList) / sizeof(RoomAction);
|
||||
|
||||
|
||||
void Room::feather5Tick1() {
|
||||
playVoc("FEA5LOOP");
|
||||
playMidiMusicTracks(29);
|
||||
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
loadActorAnim(OBJECT_MONSTER, "s5r5os", 0x4e, 0xa4);
|
||||
else
|
||||
loadMapFile("feath5b");
|
||||
}
|
||||
|
||||
void Room::feather5TouchedHotspot0() { // Approached the log
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated) {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_005);
|
||||
if (!_vm->_awayMission.redshirtDead)
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_033);
|
||||
}
|
||||
}
|
||||
|
||||
void Room::feather5UseSpockOnFern() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_004);
|
||||
}
|
||||
|
||||
void Room::feather5UseMccoyOnFern() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_009);
|
||||
}
|
||||
|
||||
void Room::feather5UseRedshirtOnFern() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_035);
|
||||
}
|
||||
|
||||
void Room::feather5UseRedshirtOnLeftExit() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated) {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_034);
|
||||
_vm->_awayMission.disableInput = true;
|
||||
loadMapFile("feath5b");
|
||||
walkCrewmanC(OBJECT_REDSHIRT, 0x8f, 0x64, &Room::feather5RedshirtReachedLog);
|
||||
}
|
||||
}
|
||||
|
||||
void Room::feather5RedshirtReachedLog() {
|
||||
playMidiMusicTracks(2);
|
||||
playVoc("TENTICL2");
|
||||
loadActorAnim(OBJECT_MONSTER, "s5r5oh", 0x4e, 0xa4);
|
||||
loadActorAnimC(OBJECT_REDSHIRT, "s5r5ol", 0x8f, 0x64, &Room::feather5RedshirtDeathFinished);
|
||||
_vm->_awayMission.feather.waterMonsterRetreated = true;
|
||||
_vm->_awayMission.redshirtDead = true;
|
||||
}
|
||||
|
||||
void Room::feather5RedshirtDeathFinished() {
|
||||
loadActorStandAnim(OBJECT_REDSHIRT);
|
||||
_vm->_awayMission.disableInput = false;
|
||||
}
|
||||
|
||||
void Room::feather5UseSpockOnLeftExit() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_002);
|
||||
}
|
||||
|
||||
void Room::feather5UseMccoyOnLeftExit() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_015);
|
||||
}
|
||||
|
||||
void Room::feather5UseSnakeOnKirk() {
|
||||
showText(TX_SPEAKER_KIRK, TX_FEA5N010);
|
||||
}
|
||||
|
||||
void Room::feather5UseSnakeOnSpock() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_032);
|
||||
}
|
||||
|
||||
void Room::feather5UseSnakeOnMccoy() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_020);
|
||||
}
|
||||
|
||||
void Room::feather5UseSnakeOnRedshirt() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_040);
|
||||
}
|
||||
|
||||
void Room::feather5UseSnakeOnWater() {
|
||||
showText(TX_FEA5N011);
|
||||
loseItem(OBJECT_ISNAKE);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnKirk() {
|
||||
// ENHANCEMENT: Originally showed TX_DEM0_020 here ("Jim, are you out of your mind?")
|
||||
// However, there is an unused audio file for text that otherwise only appears in the
|
||||
// mac version. (DOS floppy version has yet another variation for this text.)
|
||||
// We'll use that unused audio file here...
|
||||
showText(TX_SPEAKER_KIRK, TX_FEA5_001);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnSpock() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_029);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnMccoy() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_008);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnRedshirt() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_039);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnWater() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_018);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnMonster() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_006);
|
||||
}
|
||||
|
||||
void Room::feather5GetFern() {
|
||||
showText(TX_FEA5N008);
|
||||
}
|
||||
|
||||
void Room::feather5UseKnifeOnFern() {
|
||||
if (_vm->_awayMission.feather.gotFern)
|
||||
showText(TX_FEA5N015);
|
||||
else {
|
||||
walkCrewmanC(OBJECT_KIRK, 0x106, 0x8a, &Room::feather5ReachedFern);
|
||||
_vm->_awayMission.disableInput = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Room::feather5ReachedFern() {
|
||||
loadActorAnimC(OBJECT_KIRK, "s5r5kf", -1, -1, &Room::feather5PickedUpFern);
|
||||
}
|
||||
|
||||
void Room::feather5PickedUpFern() {
|
||||
_vm->_awayMission.disableInput = false;
|
||||
loadActorStandAnim(OBJECT_KIRK);
|
||||
giveItem(OBJECT_IFERN);
|
||||
_vm->_awayMission.feather.gotFern = true;
|
||||
}
|
||||
|
||||
|
||||
void Room::feather5UseFernOnMonster() {
|
||||
// BUG: Infinite score mechanism. Just keep throwing ferns into the water.
|
||||
_vm->_awayMission.feather.missionScore += 2;
|
||||
walkCrewmanC(OBJECT_KIRK, 0x106, 0x8a, &Room::feather5ReachedPositionToUseFern);
|
||||
_vm->_awayMission.disableInput = true;
|
||||
}
|
||||
|
||||
void Room::feather5ReachedPositionToUseFern() {
|
||||
loadActorAnimC(OBJECT_KIRK, "s5r5kt", -1, -1, &Room::feather5DoneThrowingFern);
|
||||
loadActorAnimC(OBJECT_THROWN_FERN, "s5r5pt", 0xe6, 0x52, &Room::feather5FernFellIntoWater);
|
||||
}
|
||||
|
||||
void Room::feather5DoneThrowingFern() {
|
||||
_vm->_awayMission.disableInput = false;
|
||||
loadActorStandAnim(OBJECT_KIRK);
|
||||
loseItem(OBJECT_IFERN);
|
||||
_vm->_awayMission.feather.gotFern = false;
|
||||
}
|
||||
|
||||
void Room::feather5FernFellIntoWater() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated) {
|
||||
_vm->_awayMission.feather.waterMonsterRetreated = true;
|
||||
_vm->_awayMission.timers[1] = 20;
|
||||
loadActorStandAnim(OBJECT_MONSTER);
|
||||
loadMapFile("feath5b");
|
||||
}
|
||||
}
|
||||
|
||||
void Room::feather5Timer1Expired() { // Spock explains that the creature retreated
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_025);
|
||||
}
|
||||
|
||||
|
||||
void Room::feather5UseRockOnSpock() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_027);
|
||||
}
|
||||
|
||||
void Room::feather5UseRockOnMccoy() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_019);
|
||||
}
|
||||
|
||||
void Room::feather5UseRockOnRedshirt() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_038);
|
||||
}
|
||||
|
||||
void Room::feather5UseCrewmanOnThrownFern() {
|
||||
// This might be unused? The object in question (OBJECT_THROWN_FERN) shouldn't be
|
||||
// visible while player control is active.
|
||||
showText(TX_FEA5N003);
|
||||
}
|
||||
|
||||
void Room::feather5UseSpockOnMonster() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_003);
|
||||
}
|
||||
|
||||
void Room::feather5UseMccoyOnMonster() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_016);
|
||||
}
|
||||
|
||||
void Room::feather5UseRedshirtOnMonster() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_037);
|
||||
}
|
||||
|
||||
void Room::feather5UsePhaser() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_028);
|
||||
}
|
||||
|
||||
void Room::feather5LookAnywhere() {
|
||||
showText(TX_FEA5N012);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtLog() {
|
||||
showText(TX_FEA5N007);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtWater() {
|
||||
showText(TX_FEA5N009);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtFern() {
|
||||
showText(TX_FEA5N014);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtInsects() {
|
||||
showText(TX_FEA5N005);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtCave() {
|
||||
showText(TX_FEA5N013);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtMonster() {
|
||||
showText(TX_FEA5N000);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtSpock() {
|
||||
showText(TX_FEA5N006);
|
||||
}
|
||||
|
||||
void Room::feather5LookAtKirk() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
showText(TX_FEA5N001);
|
||||
else // ENHANCEMENT: Fall back to default behaviour instead of doing nothing
|
||||
_vm->_awayMission.rdfStillDoDefaultAction = true;
|
||||
}
|
||||
|
||||
void Room::feather5LookAtMccoy() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
showText(TX_FEA5N002);
|
||||
else // ENHANCEMENT: Fall back to default behaviour instead of doing nothing
|
||||
_vm->_awayMission.rdfStillDoDefaultAction = true;
|
||||
}
|
||||
|
||||
void Room::feather5LookAtRedshirt() {
|
||||
if (!_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
showText(TX_FEA5N004);
|
||||
else // ENHANCEMENT: Fall back to default behaviour instead of doing nothing
|
||||
_vm->_awayMission.rdfStillDoDefaultAction = true;
|
||||
}
|
||||
|
||||
void Room::feather5TalkToMccoy() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_007);
|
||||
}
|
||||
|
||||
void Room::feather5TalkToSpock() {
|
||||
showText(TX_SPEAKER_SPOCK, TX_FEA5_022);
|
||||
}
|
||||
|
||||
void Room::feather5TalkToRedshirt() {
|
||||
showText(TX_SPEAKER_STRAGEY, TX_FEA5_036);
|
||||
}
|
||||
|
||||
void Room::feather5UseMTricorderOnWater() {
|
||||
if (_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
mccoyScan(DIR_W, TX_FEA5_011);
|
||||
else
|
||||
mccoyScan(DIR_W, TX_FEA5_014);
|
||||
}
|
||||
|
||||
void Room::feather5UseMTricorderOnMonster() {
|
||||
mccoyScan(DIR_W, TX_FEA5_013);
|
||||
}
|
||||
|
||||
void Room::feather5UseSTricorderOnMonster() {
|
||||
spockScan(DIR_W, TX_FEA5_024);
|
||||
}
|
||||
|
||||
void Room::feather5UseSTricorderAnywhere() {
|
||||
spockScan(DIR_W, TX_FEA5_026);
|
||||
}
|
||||
|
||||
void Room::feather5UseSTricorderOnWater() {
|
||||
if (_vm->_awayMission.feather.waterMonsterRetreated)
|
||||
spockScan(DIR_W, TX_FEA5_031);
|
||||
else
|
||||
spockScan(DIR_W, TX_FEA5_030);
|
||||
}
|
||||
|
||||
void Room::feather5UseSTricorderOnFern() {
|
||||
spockScan(DIR_N, TX_FEA5_023);
|
||||
}
|
||||
|
||||
void Room::feather5UseMedkitAnywhere() {
|
||||
showText(TX_SPEAKER_MCCOY, TX_FEA5_010);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1782,10 +1782,8 @@ RoomAction feather0ActionList[] = {
|
||||
|
||||
extern const RoomAction feather1ActionList[], feather2ActionList[], feather3ActionList[], feather4ActionList[];
|
||||
extern const int feather1NumActions, feather2NumActions, feather3NumActions, feather4NumActions;
|
||||
|
||||
RoomAction feather5ActionList[] = {
|
||||
{ {ACTION_TICK, 1, 0, 0}, &Room::feather5Tick1 },
|
||||
};
|
||||
extern const RoomAction feather5ActionList[];
|
||||
extern const int feather5NumActions;
|
||||
|
||||
RoomAction feather6ActionList[] = {
|
||||
{ {ACTION_TICK, 1, 0, 0}, &Room::feather6Tick1 },
|
||||
|
@ -1827,6 +1827,64 @@ enum GameStringIDs {
|
||||
TX_FEA4N008,
|
||||
|
||||
|
||||
TX_FEA5_001,
|
||||
TX_FEA5_002,
|
||||
TX_FEA5_003,
|
||||
TX_FEA5_004,
|
||||
TX_FEA5_005,
|
||||
TX_FEA5_006,
|
||||
TX_FEA5_007,
|
||||
TX_FEA5_008,
|
||||
TX_FEA5_009,
|
||||
TX_FEA5_010,
|
||||
TX_FEA5_011,
|
||||
// MISSING
|
||||
TX_FEA5_013,
|
||||
TX_FEA5_014,
|
||||
TX_FEA5_015,
|
||||
TX_FEA5_016,
|
||||
// MISSING
|
||||
TX_FEA5_018,
|
||||
TX_FEA5_019,
|
||||
TX_FEA5_020,
|
||||
TX_FEA5_021, // UNUSED
|
||||
TX_FEA5_022,
|
||||
TX_FEA5_023,
|
||||
TX_FEA5_024,
|
||||
TX_FEA5_025,
|
||||
TX_FEA5_026,
|
||||
TX_FEA5_027,
|
||||
TX_FEA5_028,
|
||||
TX_FEA5_029,
|
||||
TX_FEA5_030,
|
||||
TX_FEA5_031,
|
||||
TX_FEA5_032,
|
||||
TX_FEA5_033,
|
||||
TX_FEA5_034,
|
||||
TX_FEA5_035,
|
||||
TX_FEA5_036,
|
||||
TX_FEA5_037,
|
||||
TX_FEA5_038,
|
||||
TX_FEA5_039,
|
||||
TX_FEA5_040,
|
||||
TX_FEA5N000,
|
||||
TX_FEA5N001,
|
||||
TX_FEA5N002,
|
||||
TX_FEA5N003,
|
||||
TX_FEA5N004,
|
||||
TX_FEA5N005,
|
||||
TX_FEA5N006,
|
||||
TX_FEA5N007,
|
||||
TX_FEA5N008,
|
||||
TX_FEA5N009,
|
||||
TX_FEA5N010,
|
||||
TX_FEA5N011,
|
||||
TX_FEA5N012,
|
||||
TX_FEA5N013,
|
||||
TX_FEA5N014,
|
||||
TX_FEA5N015,
|
||||
|
||||
|
||||
TX_SIN3_012,
|
||||
|
||||
|
||||
@ -3591,6 +3649,62 @@ const char * const g_gameStrings[] = {
|
||||
"#FEA4\\FEA4N008#You are in a dark forest. You can hear the flow of water to the northwest.",
|
||||
|
||||
|
||||
"#FEA5\\FEA5_001#This is a very finely crafted knife.",
|
||||
"#FEA5\\FEA5_002#Captain, I believe it would be suicide to try crossing the log while the creature is near.",
|
||||
"#FEA5\\FEA5_003#Captain, I do not believe that my service to Starfleet includes, as humans say, 'throwing my life away'.",
|
||||
"#FEA5\\FEA5_004#Captain, I would recommend using something to cut the plant. There are numerous small thorns along the stem.",
|
||||
"#FEA5\\FEA5_005#Captain, it would not be wise to cross while the creature is near.",
|
||||
"#FEA5\\FEA5_006#Due to the small size of the knife, I doubt it would harm such a large creature.",
|
||||
"#FEA5\\FEA5_007#Anyone for a campfire?",
|
||||
"#FEA5\\FEA5_008#Captain, I'll declare you unfit to command if you keep this up!",
|
||||
"#FEA5\\FEA5_009#Damn! That's gonna hurt Jim. Take a look at those thorns. You might try cutting that with something.", // TYPO
|
||||
"#FEA5\\FEA5_010#Everyone is healthy, Jim, there's no need for the medical kit here.",
|
||||
"#FEA5\\FEA5_011#I'm not reading that creature anymore, Jim.",
|
||||
"#FEA5\\FEA5_013#It's some kind of squid, and it doesn't look very friendly.",
|
||||
"#FEA5\\FEA5_014#Jim! There's some kind of an aquatic creature down there.",
|
||||
"#FEA5\\FEA5_015#Jim, that's ludicrous!",
|
||||
"#FEA5\\FEA5_016#Jim, we've been friends a long time, but... I mean... you're not serious?",
|
||||
"#FEA5\\FEA5_018#Jim, with our phasers not working, we may need that knife to protect ourselves!", // TYPO
|
||||
"#FEA5\\FEA5_019#This planet is starting to get to me. I'm sure something just hit me.",
|
||||
"#FEA5\\FEA5_020#You weren't a snake handler in your previous life were you? I don't like snakes.", // TYPO
|
||||
"#FEA5\\FEA5_021#Good throw, Captain. However, I think the creature was merely startled. It may return in a little while.",
|
||||
"#FEA5\\FEA5_022#I recommend caution here, Captain.",
|
||||
"#FEA5\\FEA5_023#It appears that the leaves are slightly toxic. I would not recommend touching it for an extended amount of time, Captain.",
|
||||
"#FEA5\\FEA5_024#It is some kind of mollusk; the river seems to be its home, and it is carnivorous, eating land and river based forms of life.",
|
||||
"#FEA5\\FEA5_025#It would appear that the plant secretes a chemical that is a natural repellent to the creature. It has retreated far down stream, Captain.",
|
||||
"#FEA5\\FEA5_026#Nothing unusual here, Captain.",
|
||||
"#FEA5\\FEA5_027#Please stop that Captain. I have enough distractions from Dr. McCoy.",
|
||||
"#FEA5\\FEA5_028#Still inoperative, Captain.",
|
||||
"#FEA5\\FEA5_029#Thank you Captain, but Vulcans do not use knives.",
|
||||
"#FEA5\\FEA5_030#The tricorder registers a lifeform, a large marine creature, lurking just below the surface of the water.",
|
||||
"#FEA5\\FEA5_031#The tricorder shows nothing unusual, Captain. The creature is still down stream.",
|
||||
"#FEA5\\FEA5_032#Was there a reason for that, Captain?",
|
||||
"#FEA5\\FEA5_033#Captain, perhaps I should try to cross first.",
|
||||
"#FEA5\\FEA5_034#I'll give it a try, Captain.",
|
||||
"#FEA5\\FEA5_035#It looks like that plant fights back sir. You might want to use something to cut it loose.",
|
||||
"#FEA5\\FEA5_036#Reminds me of a planet I was stationed on once. The native girls were real friendly. Ensign Shou had his bachelor party there, great time. You ever been to Omicron Draconis, Captain?",
|
||||
"#FEA5\\FEA5_037#Sir, I finished second in my weight class in wrestling at the Academy, but I don't think that thing's in my weight class.",
|
||||
"#FEA5\\FEA5_038#Sir, you dropped your rock.",
|
||||
"#FEA5\\FEA5_039#Thanks Captain, but I can take care of myself. I finished second in my weight class in wrestling at the Academy. You keep the knife.",
|
||||
"#FEA5\\FEA5_040#You're weird, sir.",
|
||||
"#FEA5\\FEA5N000#A pair of eyes are all that you can see of the rest of this creature. Most of it is hidden beneath the murky water.",
|
||||
"#FEA5\\FEA5N001#Captain Kirk is looking at the big creature in the water.",
|
||||
"#FEA5\\FEA5N002#Dr. McCoy is looking at the big creature in the water.",
|
||||
"#FEA5\\FEA5N003#He will not do that.",
|
||||
"#FEA5\\FEA5N004#Lt. Stragey is looking at the big creature in the water.",
|
||||
"#FEA5\\FEA5N005#Luminescent insects swarm near a large tree.",
|
||||
"#FEA5\\FEA5N006#Mr. Spock is looking ahead to a cave opening on the other side of the log.",
|
||||
"#FEA5\\FEA5N007#The log looks quite old but sturdy.",
|
||||
"#FEA5\\FEA5N008#The plant is tough. You will need something sharp to cut it.",
|
||||
"#FEA5\\FEA5N009#The river water is too muddy to get an idea of its depth or what may be beneath the surface.",
|
||||
"#FEA5\\FEA5N010#The snake bites you.",
|
||||
"#FEA5\\FEA5N011#The snake disapears beneath the surface of the water.",
|
||||
"#FEA5\\FEA5N012#There is a slow muddy river blocking your path. A strong thick log serves as a footbridge. The river is unmoving, and the heat and stillness are oppressive.",
|
||||
"#FEA5\\FEA5N013#There seems to be a lit cave beyond the log.",
|
||||
"#FEA5\\FEA5N014#This plant has a rather thick stem and prickly leaves.", // TYPO
|
||||
"#FEA5\\FEA5N015#You already have a piece of the plant.",
|
||||
|
||||
|
||||
"#SIN3\\SIN3_012#Can't say I like the decor.",
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user