diff options
Diffstat (limited to 'engines/startrek')
-rw-r--r-- | engines/startrek/awaymission.h | 18 | ||||
-rw-r--r-- | engines/startrek/module.mk | 11 | ||||
-rw-r--r-- | engines/startrek/room.cpp | 9 | ||||
-rw-r--r-- | engines/startrek/room.h | 67 | ||||
-rw-r--r-- | engines/startrek/rooms/function_map.h | 5 | ||||
-rw-r--r-- | engines/startrek/rooms/veng0.cpp | 354 | ||||
-rw-r--r-- | engines/startrek/rooms/veng1.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng2.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng3.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng4.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng5.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng6.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng7.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/rooms/veng8.cpp | 41 | ||||
-rw-r--r-- | engines/startrek/text.cpp | 83 | ||||
-rw-r--r-- | engines/startrek/text.h | 86 |
16 files changed, 960 insertions, 1 deletions
diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h index 69c055b622..0a19632b03 100644 --- a/engines/startrek/awaymission.h +++ b/engines/startrek/awaymission.h @@ -618,6 +618,24 @@ struct AwayMission { ser.syncAsSint16LE(missionScore); } } sins; + + struct { + bool enteredRoom0FirstTime; // 0x2d + bool bridgeCrewmanDead; // 0x30 + bool scannedCaptainsChair; // 0x31 + bool scannedComputerBank; // 0x32 + bool field34; // 0x34 + + // 0: beam still in place + // 1: used saw on beam + // 2: beam taken + byte beamState; // 0x35 + + bool field36; // 0x36 + bool field68; // 0x68 + bool field6b; // 0x6b + bool field6c; // 0x6c + } veng; }; }; // Size: 0x129 bytes diff --git a/engines/startrek/module.mk b/engines/startrek/module.mk index 20529e1fe5..99d77911f3 100644 --- a/engines/startrek/module.mk +++ b/engines/startrek/module.mk @@ -67,7 +67,16 @@ MODULE_OBJS = \ rooms/sins2.o \ rooms/sins3.o \ rooms/sins4.o \ - rooms/sins5.o + rooms/sins5.o \ + rooms/veng0.o \ + rooms/veng1.o \ + rooms/veng2.o \ + rooms/veng3.o \ + rooms/veng4.o \ + rooms/veng5.o \ + rooms/veng6.o \ + rooms/veng7.o \ + rooms/veng8.o diff --git a/engines/startrek/room.cpp b/engines/startrek/room.cpp index 73776d7fa6..6a72537b46 100644 --- a/engines/startrek/room.cpp +++ b/engines/startrek/room.cpp @@ -99,6 +99,15 @@ Room::Room(StarTrekEngine *vm, const Common::String &name) : _vm(vm), _awayMissi ADD_ROOM(sins3); ADD_ROOM(sins4); ADD_ROOM(sins5); + ADD_ROOM(veng0); + ADD_ROOM(veng1); + ADD_ROOM(veng2); + ADD_ROOM(veng3); + ADD_ROOM(veng4); + ADD_ROOM(veng5); + ADD_ROOM(veng6); + ADD_ROOM(veng7); + ADD_ROOM(veng8); if (_roomActionList == nullptr) { warning("Room \"%s\" unimplemented", name.c_str()); diff --git a/engines/startrek/room.h b/engines/startrek/room.h index 20615bd6c9..876ffe14d0 100644 --- a/engines/startrek/room.h +++ b/engines/startrek/room.h @@ -2431,6 +2431,73 @@ public: void sins5UseSTricorderOnNorthDoor(); void sins5UseMTricorderOnCrewman(); + // VENG0 + void veng0Tick1(); + void veng0Tick10(); + void veng0Tick50(); + void veng0TouchedDoor(); + void veng0UseSTricorderOnComputerBank(); + void veng0UseSTricorderOnChair(); + void veng0UseSTricorderAnywhere(); + void veng0UseMccoyOnBeam(); + void veng0UseSTricorderOnBeam(); + void veng0UseRedshirtOnBeam(); + void veng0UseSpockOnConsole(); + void veng0UseRedshirtOnConsole(); + void veng0UsePhaserOnBeam(); + void veng0UseMccoyOnDeadCrewman(); + void veng0UseSawOnBeam(); + void veng0KirkReachedSaw(); + void veng0Timer0Expired(); + void veng0DoneCuttingBeam(); + void veng0GetBeam(); + void veng0TalkToKirk(); + void veng0TalkToMccoy(); + void veng0TalkToSpock(); + void veng0TalkToRedshirt(); + void veng0LookAtPatterson(); + void veng0LookAtDeadCrewman2(); + void veng0LookAtComputerBank(); + void veng0LookAtChair(); + void veng0LookAtKirk(); + void veng0LookAtSpock(); + void veng0LookAtMccoy(); + void veng0LookAtRedshirt(); + void veng0LookAtViewscreen(); + void veng0LookAtHelmConsole(); + void veng0LookAtNavConsole(); + void veng0LookAtBeam(); + void veng0LookAnywhere(); + void veng0LookAtDeadCrewman1(); + void veng0UseMccoyOnLivingCrewman(); + void veng0MccoyReachedCrewman(); + void veng0MccoyScannedCrewman(); + // TODO: common code + + // VENG1 + void veng1Tick1(); + + // VENG2 + void veng2Tick1(); + + // VENG3 + void veng3Tick1(); + + // VENG4 + void veng4Tick1(); + + // VENG5 + void veng5Tick1(); + + // VENG6 + void veng6Tick1(); + + // VENG7 + void veng7Tick1(); + + // VENG8 + void veng8Tick1(); + public: // Room-specific variables. This is memset'ed to 0 when the room is initialized. // NOTE: Any changes here must be reflected in the corresponding serializer functions. diff --git a/engines/startrek/rooms/function_map.h b/engines/startrek/rooms/function_map.h index b44fbf1fb7..e3507bd26b 100644 --- a/engines/startrek/rooms/function_map.h +++ b/engines/startrek/rooms/function_map.h @@ -1795,6 +1795,11 @@ extern const int sins0NumActions, sins1NumActions, sins2NumActions, extern const RoomAction sins4ActionList[], sins5ActionList[]; extern const int sins4NumActions, sins5NumActions; +extern const RoomAction veng0ActionList[], veng1ActionList[], veng2ActionList[], veng3ActionList[]; +extern const int veng0NumActions, veng1NumActions, veng2NumActions, veng3NumActions; +extern const RoomAction veng4ActionList[], veng5ActionList[], veng6ActionList[], veng7ActionList[], veng8ActionList[]; +extern const int veng4NumActions, veng5NumActions, veng6NumActions, veng7NumActions, veng8NumActions; + } #endif diff --git a/engines/startrek/rooms/veng0.cpp b/engines/startrek/rooms/veng0.cpp new file mode 100644 index 0000000000..76d960381a --- /dev/null +++ b/engines/startrek/rooms/veng0.cpp @@ -0,0 +1,354 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_BEAM 8 +#define OBJECT_9 9 +#define OBJECT_10 10 + +#define HOTSPOT_CREWMAN_1 0x20 // This one lives for a bit +#define HOTSPOT_CHAIR 0x21 +#define HOTSPOT_CREWMAN_2 0x22 +#define HOTSPOT_COMPUTER_BANK 0x23 +#define HOTSPOT_PATTERSON 0x24 +#define HOTSPOT_NAV_CONSOLE 0x25 +#define HOTSPOT_HELM_CONSOLE 0x26 +#define HOTSPOT_VIEWSCREEN 0x27 + +namespace StarTrek { + +extern const RoomAction veng0ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng0Tick1 }, + { {ACTION_TICK, 10, 0, 0}, &Room::veng0Tick10 }, + { {ACTION_TICK, 50, 0, 0}, &Room::veng0Tick50 }, + { {ACTION_TOUCHED_WARP, 1, 0, 0}, &Room::veng0TouchedDoor }, + + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_COMPUTER_BANK, 0}, &Room::veng0UseSTricorderOnComputerBank }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_CHAIR, 0}, &Room::veng0UseSTricorderOnChair }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_VIEWSCREEN, 0}, &Room::veng0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_ISTRICOR, 0xff, 0}, &Room::veng0UseSTricorderAnywhere }, + { {ACTION_USE, OBJECT_MCCOY, OBJECT_BEAM, 0}, &Room::veng0UseMccoyOnBeam }, + { {ACTION_USE, OBJECT_ISTRICOR, OBJECT_BEAM, 0}, &Room::veng0UseSTricorderOnBeam }, + { {ACTION_USE, OBJECT_SPOCK, OBJECT_BEAM, 0}, &Room::veng0UseSTricorderOnBeam }, + { {ACTION_USE, OBJECT_REDSHIRT, OBJECT_BEAM, 0}, &Room::veng0UseRedshirtOnBeam }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_HELM_CONSOLE, 0}, &Room::veng0UseSpockOnConsole }, + { {ACTION_USE, OBJECT_SPOCK, HOTSPOT_NAV_CONSOLE, 0}, &Room::veng0UseSpockOnConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_HELM_CONSOLE, 0}, &Room::veng0UseSpockOnConsole }, + { {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_NAV_CONSOLE, 0}, &Room::veng0UseSpockOnConsole }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_HELM_CONSOLE, 0}, &Room::veng0UseRedshirtOnConsole }, + { {ACTION_USE, OBJECT_REDSHIRT, HOTSPOT_NAV_CONSOLE, 0}, &Room::veng0UseRedshirtOnConsole }, + { {ACTION_USE, OBJECT_IPHASERS, OBJECT_BEAM, 0}, &Room::veng0UsePhaserOnBeam }, + { {ACTION_USE, OBJECT_IPHASERK, OBJECT_BEAM, 0}, &Room::veng0UsePhaserOnBeam }, + + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_PATTERSON, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_PATTERSON, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_CREWMAN_2, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + { {ACTION_USE, OBJECT_IMEDKIT, HOTSPOT_CREWMAN_2, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + { {ACTION_USE, OBJECT_IMEDKIT, HOTSPOT_PATTERSON, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_CREWMAN_2, 0}, &Room::veng0UseMccoyOnDeadCrewman }, + + { {ACTION_USE, OBJECT_ILMD, OBJECT_BEAM, 0}, &Room::veng0UseSawOnBeam }, + { {ACTION_DONE_WALK, 1, 0, 0}, &Room::veng0KirkReachedSaw }, + { {ACTION_TIMER_EXPIRED, 0, 0, 0}, &Room::veng0Timer0Expired }, + { {ACTION_DONE_ANIM, 2, 0, 0}, &Room::veng0DoneCuttingBeam }, + + { {ACTION_GET, OBJECT_BEAM, 0, 0}, &Room::veng0GetBeam }, + { {ACTION_TALK, OBJECT_KIRK, 0, 0}, &Room::veng0TalkToKirk }, + { {ACTION_TALK, OBJECT_MCCOY, 0, 0}, &Room::veng0TalkToMccoy }, + { {ACTION_TALK, OBJECT_SPOCK, 0, 0}, &Room::veng0TalkToSpock }, + { {ACTION_TALK, OBJECT_REDSHIRT, 0, 0}, &Room::veng0TalkToRedshirt }, + { {ACTION_LOOK, HOTSPOT_PATTERSON, 0, 0}, &Room::veng0LookAtPatterson }, + { {ACTION_LOOK, HOTSPOT_CREWMAN_2, 0, 0}, &Room::veng0LookAtDeadCrewman2 }, + { {ACTION_LOOK, HOTSPOT_COMPUTER_BANK, 0, 0}, &Room::veng0LookAtComputerBank }, + { {ACTION_LOOK, HOTSPOT_CHAIR, 0, 0}, &Room::veng0LookAtChair }, + { {ACTION_LOOK, OBJECT_KIRK, 0, 0}, &Room::veng0LookAtKirk }, + { {ACTION_LOOK, OBJECT_SPOCK, 0, 0}, &Room::veng0LookAtSpock }, + { {ACTION_LOOK, OBJECT_MCCOY, 0, 0}, &Room::veng0LookAtMccoy }, + { {ACTION_LOOK, OBJECT_REDSHIRT, 0, 0}, &Room::veng0LookAtRedshirt }, + { {ACTION_LOOK, HOTSPOT_VIEWSCREEN, 0, 0}, &Room::veng0LookAtViewscreen }, + { {ACTION_LOOK, HOTSPOT_HELM_CONSOLE, 0, 0}, &Room::veng0LookAtHelmConsole }, + { {ACTION_LOOK, HOTSPOT_NAV_CONSOLE, 0, 0}, &Room::veng0LookAtNavConsole }, + { {ACTION_LOOK, OBJECT_BEAM, 0, 0}, &Room::veng0LookAtBeam }, + { {ACTION_LOOK, 0xff, 0, 0}, &Room::veng0LookAnywhere }, + { {ACTION_LOOK, HOTSPOT_CREWMAN_1, 0, 0}, &Room::veng0LookAtDeadCrewman1 }, + + { {ACTION_USE, OBJECT_IMEDKIT, HOTSPOT_CREWMAN_1, 0}, &Room::veng0UseMccoyOnLivingCrewman }, + { {ACTION_USE, OBJECT_IMTRICOR, HOTSPOT_CREWMAN_1, 0}, &Room::veng0UseMccoyOnLivingCrewman }, + { {ACTION_USE, OBJECT_MCCOY, HOTSPOT_CREWMAN_1, 0}, &Room::veng0UseMccoyOnLivingCrewman }, + { {ACTION_DONE_WALK, 3, 0, 0}, &Room::veng0MccoyReachedCrewman }, + { {ACTION_DONE_ANIM, 1, 0, 0}, &Room::veng0MccoyScannedCrewman }, +}; + +extern const int veng0NumActions = ARRAYSIZE(veng0ActionList); + + +void Room::veng0Tick1() { + playVoc("VEN0LOOP"); + + if (_awayMission->veng.beamState != 2) + loadActorAnim2(OBJECT_BEAM, "s7r0bo", 0x28, 0xc6); + else + loadActorAnim2(OBJECT_BEAM, "s7r0bf", 0x0e, 0x9a); + + _awayMission->crewDirectionsAfterWalk[OBJECT_KIRK] = DIR_S; + _awayMission->crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_S; + _awayMission->crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_S; + _awayMission->crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_S; +} + +void Room::veng0Tick10() { + // stub +} + +void Room::veng0Tick50() { + if (!_awayMission->veng.enteredRoom0FirstTime) { + _awayMission->veng.enteredRoom0FirstTime = true; + showText(TX_SPEAKER_MCCOY, TX_VEN0_018); + showText(TX_SPEAKER_KIRK, TX_VEN0_006); + showText(TX_SPEAKER_SCOTT, TX_VEN0_S12); + showText(TX_SPEAKER_KIRK, TX_VEN0_008); + showText(TX_SPEAKER_SCOTT, TX_VEN0_S52); + showText(TX_SPEAKER_KIRK, TX_VEN0_007); + showText(TX_SPEAKER_SPOCK, TX_VEN0_030); + showText(TX_SPEAKER_SCOTT, TX_VEN0_S15); + showText(TX_SPEAKER_KIRK, TX_VEN0_005); + showText(TX_SPEAKER_CHEKOV, TX_VEN0_039); + showText(TX_SPEAKER_KIRK, TX_VEN0_009); + showText(TX_SPEAKER_SCOTT, TX_VEN0_S54); + showText(TX_SPEAKER_KIRK, TX_VEN0_011); + showText(TX_SPEAKER_KIRK, TX_VEN0_010); + showText(TX_SPEAKER_MCCOY, TX_VEN0_017); + _awayMission->veng.field36 = true; + } +} + +void Room::veng0TouchedDoor() { + playSoundEffectIndex(SND_DOOR1); + // TODO +} + +void Room::veng0UseSTricorderOnComputerBank() { + if (!_awayMission->veng.scannedComputerBank) { + _awayMission->veng.scannedComputerBank = true; + _awayMission->veng.field6c = true; + + spockScan(DIR_S, TX_VEN0_028); + showText(TX_SPEAKER_KIRK, TX_VEN0_002); + showText(TX_SPEAKER_SPOCK, TX_VEN0_029); + showText(TX_SPEAKER_MCCOY, TX_VEN0_020); + showText(TX_SPEAKER_SPOCK, TX_VEN0_031); + } else + showText(TX_SPEAKER_SPOCK, TX_VEN0_025); +} + +void Room::veng0UseSTricorderOnChair() { + if (!_awayMission->veng.scannedCaptainsChair) { + _awayMission->veng.scannedCaptainsChair = true; + _awayMission->veng.field6b = true; + + spockScan(DIR_S, TX_VEN0_32); + showText(TX_SPEAKER_PATTERSON, TX_VEN0_035); + showText(TX_SPEAKER_SPOCK, TX_VEN0_033); + showText(TX_SPEAKER_KIRK, TX_VEN0_004); + } else + showText(TX_SPEAKER_SPOCK, TX_VEN0_026); +} + +void Room::veng0UseSTricorderAnywhere() { + if (!_awayMission->veng.field34) + spockScan(DIR_S, TX_VEN0_027); +} + +void Room::veng0UseMccoyOnBeam() { + showText(TX_SPEAKER_MCCOY, TX_VEN0_015); +} + +void Room::veng0UseSTricorderOnBeam() { + spockScan(DIR_W, TX_VEN0_034); + showText(TX_SPEAKER_MCCOY, TX_VEN0_021); +} + +void Room::veng0UseRedshirtOnBeam() { + showText(TX_SPEAKER_KIJE, TX_VEN0_037); +} + +void Room::veng0UseSpockOnConsole() { + showText(TX_SPEAKER_SPOCK, TX_VEN0_024); +} + +void Room::veng0UseRedshirtOnConsole() { + showText(TX_SPEAKER_KIJE, TX_VEN0_038); +} + +void Room::veng0UsePhaserOnBeam() { + showText(TX_SPEAKER_SPOCK, TX_VEN0_013); +} + +void Room::veng0UseMccoyOnDeadCrewman() { + mccoyScan(DIR_S, TX_VEN0_016); +} + +void Room::veng0UseSawOnBeam() { + if (_awayMission->veng.beamState == 1 || _awayMission->veng.beamState == 2) + showText(TX_VEN0N008); + else { + _awayMission->disableInput = true; + walkCrewmanC(OBJECT_KIRK, 0x24, 0xc2, &Room::veng0KirkReachedSaw); + } +} + +void Room::veng0KirkReachedSaw() { + loadActorAnimC(OBJECT_KIRK, "kcutw", -1, -1, &Room::veng0DoneCuttingBeam); + _awayMission->timers[0] = 8; +} + +void Room::veng0Timer0Expired() { + playVoc("MUR3E2"); + loadActorAnim2(OBJECT_9, "s7r0s1", 0, 0xc7); + loadActorAnim2(OBJECT_10, "s7r0b1", 0, 0xc7); + playSoundEffectIndex(SND_PHASSHOT); +} + +void Room::veng0DoneCuttingBeam() { + _awayMission->disableInput = false; + loadActorStandAnim(OBJECT_9); + loadActorStandAnim(OBJECT_10); + + showText(TX_VEN0N007); + + _awayMission->veng.beamState = 1; + veng0GetBeam(); +} + +void Room::veng0GetBeam() { + if (_awayMission->veng.beamState == 1) { + showText(TX_VEN0N019); + _awayMission->veng.beamState = 2; + giveItem(OBJECT_IBEAM); + loadActorAnim2(OBJECT_BEAM, "s7r0bf", 0x0e, 0x9a); + } else + showText(TX_VEN0N009); +} + +void Room::veng0TalkToKirk() { + showText(TX_SPEAKER_KIRK, TX_VEN0_001); +} + +void Room::veng0TalkToMccoy() { + showText(TX_SPEAKER_MCCOY, TX_VEN0_014); +} + +void Room::veng0TalkToSpock() { + if (_awayMission->veng.scannedComputerBank && _awayMission->veng.scannedCaptainsChair) + showText(TX_SPEAKER_SPOCK, TX_VEN0_012); + else + showText(TX_SPEAKER_SPOCK, TX_VEN0_023); +} + +void Room::veng0TalkToRedshirt() { + showText(TX_SPEAKER_KIJE, TX_VEN0_036); +} + +void Room::veng0LookAtPatterson() { + showText(TX_VEN0N004); +} + +void Room::veng0LookAtDeadCrewman2() { + showText(TX_VEN0N017); +} + +void Room::veng0LookAtComputerBank() { + showText(TX_VEN0N005); +} + +void Room::veng0LookAtChair() { + showText(TX_VEN0N015); +} + +void Room::veng0LookAtKirk() { + showText(TX_VEN0N001); +} + +void Room::veng0LookAtSpock() { + showText(TX_VEN0N006); +} + +void Room::veng0LookAtMccoy() { + showText(TX_VEN0N002); +} + +void Room::veng0LookAtRedshirt() { + showText(TX_VEN0N003); +} + +void Room::veng0LookAtViewscreen() { + showText(TX_VEN0N010); +} + +void Room::veng0LookAtHelmConsole() { + showText(TX_VEN0N011); +} + +void Room::veng0LookAtNavConsole() { + showText(TX_VEN0N012); +} + +void Room::veng0LookAtBeam() { + if (_awayMission->veng.beamState == 1) + showText(TX_VEN0N013); + else + showText(TX_VEN0N000); +} + +void Room::veng0LookAnywhere() { + showText(TX_VEN0N018); +} + +void Room::veng0LookAtDeadCrewman1() { + showText(TX_VEN0N016); +} + +void Room::veng0UseMccoyOnLivingCrewman() { + if (!_awayMission->veng.bridgeCrewmanDead) { + _awayMission->disableInput = true; + _awayMission->crewDirectionsAfterWalk[OBJECT_MCCOY] = DIR_E; + walkCrewmanC(OBJECT_MCCOY, 0xdc, 0xa0, &Room::veng0MccoyReachedCrewman); + } else + showText(TX_SPEAKER_MCCOY, TX_VEN0_016); +} + +void Room::veng0MccoyReachedCrewman() { + _awayMission->veng.bridgeCrewmanDead = true; + _awayMission->veng.field68 = true; + + mccoyScan(DIR_E, TX_VEN0_022); + showText(TX_SPEAKER_KIRK, TX_VEN0_003); + loadActorAnimC(OBJECT_MCCOY, "mscane", -1, -1, &Room::veng0MccoyScannedCrewman); +} + +void Room::veng0MccoyScannedCrewman() { + showText(TX_SPEAKER_MCCOY, TX_VEN0_019); + _awayMission->disableInput = false; +} + +} diff --git a/engines/startrek/rooms/veng1.cpp b/engines/startrek/rooms/veng1.cpp new file mode 100644 index 0000000000..a7e89ddf11 --- /dev/null +++ b/engines/startrek/rooms/veng1.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng1ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng1Tick1 }, +}; + +extern const int veng1NumActions = ARRAYSIZE(veng1ActionList); + + +void Room::veng1Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng2.cpp b/engines/startrek/rooms/veng2.cpp new file mode 100644 index 0000000000..2e00f0a884 --- /dev/null +++ b/engines/startrek/rooms/veng2.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng2ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng2Tick1 }, +}; + +extern const int veng2NumActions = ARRAYSIZE(veng2ActionList); + + +void Room::veng2Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng3.cpp b/engines/startrek/rooms/veng3.cpp new file mode 100644 index 0000000000..5c0e3c8867 --- /dev/null +++ b/engines/startrek/rooms/veng3.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng3ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng3Tick1 }, +}; + +extern const int veng3NumActions = ARRAYSIZE(veng3ActionList); + + +void Room::veng3Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng4.cpp b/engines/startrek/rooms/veng4.cpp new file mode 100644 index 0000000000..836fcceb62 --- /dev/null +++ b/engines/startrek/rooms/veng4.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng4ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng4Tick1 }, +}; + +extern const int veng4NumActions = ARRAYSIZE(veng4ActionList); + + +void Room::veng4Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng5.cpp b/engines/startrek/rooms/veng5.cpp new file mode 100644 index 0000000000..9f5d2639a4 --- /dev/null +++ b/engines/startrek/rooms/veng5.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng5ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng5Tick1 }, +}; + +extern const int veng5NumActions = ARRAYSIZE(veng5ActionList); + + +void Room::veng5Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng6.cpp b/engines/startrek/rooms/veng6.cpp new file mode 100644 index 0000000000..78743d4420 --- /dev/null +++ b/engines/startrek/rooms/veng6.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng6ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng6Tick1 }, +}; + +extern const int veng6NumActions = ARRAYSIZE(veng6ActionList); + + +void Room::veng6Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng7.cpp b/engines/startrek/rooms/veng7.cpp new file mode 100644 index 0000000000..5d5e5a99b5 --- /dev/null +++ b/engines/startrek/rooms/veng7.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng7ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng7Tick1 }, +}; + +extern const int veng7NumActions = ARRAYSIZE(veng7ActionList); + + +void Room::veng7Tick1() { +} + +} diff --git a/engines/startrek/rooms/veng8.cpp b/engines/startrek/rooms/veng8.cpp new file mode 100644 index 0000000000..d8ad9e0b90 --- /dev/null +++ b/engines/startrek/rooms/veng8.cpp @@ -0,0 +1,41 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "startrek/room.h" + +#define OBJECT_DOOR 8 + +#define HOTSPOT_20 0x20 + +namespace StarTrek { + +extern const RoomAction veng8ActionList[] = { + { {ACTION_TICK, 1, 0, 0}, &Room::veng8Tick1 }, +}; + +extern const int veng8NumActions = ARRAYSIZE(veng8ActionList); + + +void Room::veng8Tick1() { +} + +} diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp index 02c3c7afe2..5dfda3b02a 100644 --- a/engines/startrek/text.cpp +++ b/engines/startrek/text.cpp @@ -17,6 +17,7 @@ extern const char *const g_gameStrings[] = { "Lt. Uhura", "Mr. Scott", "Mr. Sulu", + "Mr. Chekov", "Ensign Everts", "Prel. Angiven", @@ -62,6 +63,9 @@ extern const char *const g_gameStrings[] = { "Ensign Mosher", + "Ensign Kije", + "*Capt. Patterson*", + "#BRID\\BRIDU146#Nothing to report, Captain.", "#GENE\\G_024#Fascinating.", @@ -2665,6 +2669,85 @@ extern const char *const g_gameStrings[] = { "#SIN5\\SIN5N013#History will not be kind to you. Better luck next time.", + "#VEN0\\VEN0_001#Dick Patterson and I weren't exactly friends, but this...", + "#VEN0\\VEN0_002#Any idea of which one it was?", + "#VEN0\\VEN0_003#Can you bring him back?", + "#VEN0\\VEN0_004#Dick Patterson was never one for making long speeches.", + "#VEN0\\VEN0_005#Do the sensors read any other ships in the sector?", + "#VEN0\\VEN0_006#I don't know, Bones. We're too far from the Klingon and Romulan borders for it to be one of their ships.", + "#VEN0\\VEN0_007#It's a mess, Scotty. Life support's functioning, but that's about it.", + "#VEN0\\VEN0_008#Kirk Here. What is it, Scotty?", + "#VEN0\\VEN0_009#Mr. Scott, we will continue here. Assist the trade ship and return here. If we need assistance, we will contact you.", + "#VEN0\\VEN0_010#Well, Gentlemen. Let's see if we can reestablish power.", + "#VEN0\\VEN0_011#Yes, Scotty. Just don't take too long. Kirk out.", + "#VEN0\\VEN0_012#Captain, I believe we have exhausted all our options concerning data retrieval here on the bridge.", + "#VEN0\\VEN0_013#Captain, these phasers are not configured for fine cutting. We could cause extensive damage.", + "#VEN0\\VEN0_014#What kind of a butcher would do this sort of thing?", + "#VEN0\\VEN0_015#I'm a doctor, not a civil engineer!", + "#VEN0\\VEN0_016#They are dead, Jim. All of them.", + "#VEN0\\VEN0_017#Jim, don't forget, there's another survivor on board. We've got to find him!", + "#VEN0\\VEN0_018#My God, Jim. What kind of butcher would do something like this?", + "#VEN0\\VEN0_019#Punctured lung, nerve damage, brain damage, fractured arm and ribs; it's a miracle he lasted as long as he did. He's not coming back, Jim.", + "#VEN0\\VEN0_020#Someone must have tampered with the computer records!", + "#VEN0\\VEN0_021#Thanks for the dissertation, Spock.", + "#VEN0\\VEN0_022#We're too late. This man must have just died a few moments ago.", + "#VEN0\\VEN0_023#I recommend checking as many of the logs and sensor records as possible.", + "#VEN0\\VEN0_024#The controls have been totally destroyed. Undoubtedly due to circuit overloads caused by the battle.", + "#VEN0\\VEN0_025#There are no more computer entries accessible from this station.", + "#VEN0\\VEN0_026#There are no more log entries.", + "#VEN0\\VEN0_027#Tricorder readings indicate that the ship is running on minimal battery power. Only life support and essential systems are currently running.", + "#VEN0\\VEN0_028#Captain, records indicate that this ship was attacked by a Constitution-class Starship.", + "#VEN0\\VEN0_029#I am reading a record of the transponder signal. NCC-1701. It's the Enterprise, Captain.", + "#VEN0\\VEN0_030#I've done a primary scan of the Republic's systems. Main and auxiliary power is out. Life support is stable. I also read that communications are operable.", + "#VEN0\\VEN0_031#May I remind you, Doctor, that the main computer of a Constitution class starship has safeguards against such an intrusion. Furthermore, I do not see any discrepancies in any of the files that I am able to access.", + "#VEN0\\VEN0_32#My tricorder has picked up the final entry of the Republic.", + "#VEN0\\VEN0_033#That's all there is, Captain.", + "#VEN0\\VEN0_034#This is a standard Tritanium/Duranium support beam. Tricorder readings indicate that although it has experienced enough tensile stress to push it from one side of its mooring, it has not elastically deformed beyond its ability to support a compressive load.", + "#VEN0\\VEN0_035#We are under attack. Our sensors are inoperative. We're trying to get shields up. Our rear deflector's down. It appears our enemy is a Constitution class starship. We have tried to defend ourselves. We've hailed them, but no response.", + "#VEN0\\VEN0_036#I feel sick.", + "#VEN0\\VEN0_037#I think I remember seeing a ton of these at spacedock 4.", + "#VEN0\\VEN0_038#There is no response, Captain. The controls are completely dead.", + "#VEN0\\VEN0_039#Besides the trade wessel, this sector is clear, Sir.", + "#VEN0\\VEN0_S12#Enterprise to Captain Kirk.", + "#VEN0\\VEN0_S15#Should we beam you back, Captain?", + "#VEN0\\VEN0_S52#We've picked up a distress signal. It appears a trading vessel is having a wee bit of trouble with their warp drive. What condition is the Republic in?", + "#VEN0\\VEN0_S54#You sure you'll be all right, Captain?", + "#VEN0\\VEN0N000#A common Tritanium/Duranium support beam which has snapped away from the hull.", + "#VEN0\\VEN0N001#Captain James T. Kirk. This is not one of the best days of his life.", + "#VEN0\\VEN0N002#Dr. Leonard McCoy. You have rarely seen him as shaken as he is now.", + "#VEN0\\VEN0N003#Ensign Kije, who wishes that Lieutenant Stackpole had drawn this assignment.", + "#VEN0\\VEN0N004#Here is the body of Captain Patterson of the Republic. He didn't die without a fight.", + "#VEN0\\VEN0N005#Main computer banks. They appear to have been damaged.", + "#VEN0\\VEN0N006#Mr. Spock, awaiting orders.", + "#VEN0\\VEN0N007#The molecular saw easily cuts through the beam, separating it from the hull.", + "#VEN0\\VEN0N008#The support beam has already been detached from the hull.", + "#VEN0\\VEN0N009#The support beam is still attached to the hull.", + "#VEN0\\VEN0N010#The viewscreen is not functioning.", + "#VEN0\\VEN0N011#These are the helm controls for the Republic. They are currently inactive.", + "#VEN0\\VEN0N012#These are the navigation controls for the Republic. They are currently inactive.", + "#VEN0\\VEN0N013#This beam has been detached from the hull.", + "#VEN0\\VEN0N015#This is is the Captain's chair, where the Captain's log is stored.", + "#VEN0\\VEN0N016#This man is dead.", + "#VEN0\\VEN0N017#This person is dead.", + "#VEN0\\VEN0N018#You are in what's left of the bridge of the U.S.S. Republic.", + "#VEN0\\VEN0N019#You pick up the beam. It's a little heavy, but you manage it.", + + + "#VEN2\\VEN2_028#Yes, Uhura. Just wanted a status report. Kirk out.", + "#VEN2\\VEN2_066#They are jamming all frequencies, Captain. We will not be able to contact the Enterprise.", + "#VEN2\\VEN2_098#What are you stalling for? Lower your shields.", + "#VEN2\\VEN2U093#Enterprise here. We're still tracking the distress call. Are you all right, Sir?", + + + "#VEN4\\VEN4N010#This is an empty hypodermic injector.", + + + "#VEN6\\VEN6N007#The hypo is now filled with multipurpose oil.", + + + "#VENA\\VENA_F32#The landing party has been taken captive by the Elasi, and you know Starfleet does not negotiate with terrorists. As you look forward to a long captivity you wonder who will take command of the Enterprise. Better luck next time.", + "#VENA\\VENA_F34#Captain, it would be unwise to use your phaser considering the already extensive damage sustained by the Republic.", + "#VENA\\VENA_F40#The Elasi fire photon torpedoes. The Republic has been destroyed.", "#VENA\\VENA_F41#Kirk out.", diff --git a/engines/startrek/text.h b/engines/startrek/text.h index fd361146af..dca9713a27 100644 --- a/engines/startrek/text.h +++ b/engines/startrek/text.h @@ -75,6 +75,7 @@ enum GameStringIDs { TX_SPEAKER_UHURA, TX_SPEAKER_SCOTT, TX_SPEAKER_SULU, + TX_SPEAKER_CHEKOV, TX_SPEAKER_EVERTS, TX_SPEAKER_ANGIVEN, @@ -120,6 +121,9 @@ enum GameStringIDs { TX_SPEAKER_MOSHER, + TX_SPEAKER_KIJE, + TX_SPEAKER_PATTERSON, + TX_BRIDU146, TX_G_024, @@ -2770,6 +2774,88 @@ enum GameStringIDs { TX_SIN5N013, + TX_VEN0_001, + TX_VEN0_002, + TX_VEN0_003, + TX_VEN0_004, + TX_VEN0_005, + TX_VEN0_006, + TX_VEN0_007, + TX_VEN0_008, + TX_VEN0_009, + TX_VEN0_010, + TX_VEN0_011, + TX_VEN0_012, + TX_VEN0_013, + TX_VEN0_014, + TX_VEN0_015, + TX_VEN0_016, + TX_VEN0_017, + TX_VEN0_018, + TX_VEN0_019, + TX_VEN0_020, + TX_VEN0_021, + TX_VEN0_022, + TX_VEN0_023, + TX_VEN0_024, + TX_VEN0_025, + TX_VEN0_026, + TX_VEN0_027, + TX_VEN0_028, + TX_VEN0_029, + TX_VEN0_030, + TX_VEN0_031, + TX_VEN0_32, + TX_VEN0_033, + TX_VEN0_034, + TX_VEN0_035, + TX_VEN0_036, + TX_VEN0_037, + TX_VEN0_038, + TX_VEN0_039, + TX_VEN0_S12, + // UNUSED: S13 -> S14 (same line S12, multiple recordings) + TX_VEN0_S15, + TX_VEN0_S52, + TX_VEN0_S54, + TX_VEN0N000, + TX_VEN0N001, + TX_VEN0N002, + TX_VEN0N003, + TX_VEN0N004, + TX_VEN0N005, + TX_VEN0N006, + TX_VEN0N007, + TX_VEN0N008, + TX_VEN0N009, + TX_VEN0N010, + TX_VEN0N011, + TX_VEN0N012, + TX_VEN0N013, + // MISSING + TX_VEN0N015, + TX_VEN0N016, + TX_VEN0N017, + TX_VEN0N018, + TX_VEN0N019, + // UNUSED: VEN0_F15 + + + TX_VEN2_028, + TX_VEN2_066, + TX_VEN2_098, + TX_VEN2U093, + + + TX_VEN4N010, + + + TX_VEN6N007, + + + TX_VENA_F32, + TX_VENA_F34, + TX_VENA_F40, TX_VENA_F41, |