ScummVM API documentation
startrek.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef STARTREK_H
23 #define STARTREK_H
24 
25 #include "common/events.h"
26 #include "common/list.h"
27 #include "common/ptr.h"
28 #include "common/random.h"
29 #include "common/rect.h"
30 #include "common/scummsys.h"
31 #include "common/serializer.h"
32 #include "common/str.h"
33 #include "common/stream.h"
34 #include "common/system.h"
35 #include "common/util.h"
36 
37 #include "engines/engine.h"
38 
39 #include "math/cosinetables.h"
40 #include "math/sinetables.h"
41 
42 #include "startrek/action.h"
43 #include "startrek/awaymission.h"
44 #include "startrek/graphics.h"
45 #include "startrek/items.h"
46 #include "startrek/object.h"
47 #include "startrek/sound.h"
48 #include "startrek/space.h"
49 #include "startrek/detection.h"
50 
51 
52 using Common::SharedPtr;
53 using Common::String;
54 
55 namespace Common {
56 class MacResManager;
57 }
58 
59 namespace StarTrek {
60 
61 class StarTrekEngine;
62 class Room;
63 class Console;
64 class Resource;
65 
66 typedef String(StarTrekEngine::*TextGetterFunc)(int, uintptr, String *);
67 
68 const int SAVEGAME_DESCRIPTION_LEN = 30;
69 
71  uint32 version;
72  char description[SAVEGAME_DESCRIPTION_LEN + 1];
73 
74  uint32 saveDate;
75  uint16 saveTime;
76  byte saveTimeSecs;
77  uint32 playTime;
78 
79  ::Graphics::Surface *thumbnail;
80 
81  void setSaveTimeAndDate(TimeDate time) {
82  saveDate = ((time.tm_mday & 0xFF) << 24) | (((time.tm_mon + 1) & 0xFF) << 16) | ((time.tm_year + 1900) & 0xFFFF);
83  saveTime = ((time.tm_hour & 0xFF) << 8) | ((time.tm_min) & 0xFF);
84  saveTimeSecs = time.tm_sec & 0xFF;
85  }
86 
87  int getDay() {
88  return (saveDate >> 24) & 0xFF;
89  }
90  int getMonth() {
91  return (saveDate >> 16) & 0xFF;
92  }
93  int getYear() {
94  return saveDate & 0xFFFF;
95  }
96  int getHour() {
97  return (saveTime >> 8) & 0xFF;
98  }
99  int getMinute() {
100  return saveTime & 0xFF;
101  }
102 };
103 
104 
105 const int MAX_MENUBUTTONS = 32;
106 const int TEXTBOX_WIDTH = 26;
107 const int TEXT_CHARS_PER_LINE = TEXTBOX_WIDTH - 2;
108 const int MAX_TEXTBOX_LINES = 12;
109 
110 const int TEXT_INPUT_BUFFER_SIZE = 134;
111 const int MAX_TEXT_INPUT_LEN = 20;
112 
113 const int MAX_BUFFERED_WALK_ACTIONS = 32;
114 
115 const int MAX_BAN_FILES = 16;
116 
117 
118 
119 
120 enum kDebugLevels {
121  kDebugSound = 1,
122  kDebugGraphics,
123  kDebugSavegame,
124  kDebugSpace,
125  kDebugGeneral,
126 };
127 
128 enum GameMode {
129  GAMEMODE_START = 0,
130  GAMEMODE_BRIDGE,
131  GAMEMODE_AWAYMISSION,
132  GAMEMODE_BEAMDOWN,
133  GAMEMODE_BEAMUP
134 };
135 
136 enum TextDisplayMode {
137  TEXTDISPLAY_WAIT = 0, // Wait for input before closing text
138  TEXTDISPLAY_SUBTITLES, // Automatically continue when speech is done
139  TEXTDISPLAY_NONE // No text displayed
140 };
141 
142 enum TextColor {
143  TEXTCOLOR_GREY = 0x88,
144  TEXTCOLOR_RED = 0xa1,
145  TEXTCOLOR_YELLOW = 0xb0,
146  TEXTCOLOR_BLUE = 0xc0
147 };
148 
149 // Keeps track of data for a list of buttons making up a menu
150 struct Menu {
151  Sprite sprites[MAX_MENUBUTTONS];
152  uint16 retvals[MAX_MENUBUTTONS];
153  uint32 disabledButtons;
154  uint16 numButtons;
155  int16 selectedButton;
156  Menu *nextMenu;
157 };
158 
159 // Special events that can be returned by handleMenuEvents.
160 // (Normally it returns the "retval" of a pressed button, which is positive.)
161 enum MenuEvent {
162  MENUEVENT_RCLICK_OFFBUTTON = -4,
163  MENUEVENT_ENABLEINPUT, // Makes buttons selectable (occurs after a delay)
164  MENUEVENT_RCLICK_ONBUTTON,
165  MENUEVENT_LCLICK_OFFBUTTON
166 };
167 
168 // Buttons for standard text display
169 enum TextButtons {
170  TEXTBUTTON_CONFIRM = 0,
171  TEXTBUTTON_SCROLLUP,
172  TEXTBUTTON_SCROLLDOWN,
173  TEXTBUTTON_PREVCHOICE,
174  TEXTBUTTON_NEXTCHOICE,
175  TEXTBUTTON_SCROLLUP_ONELINE,
176  TEXTBUTTON_SCROLLDOWN_ONELINE,
177  TEXTBUTTON_GOTO_TOP,
178  TEXTBUTTON_GOTO_BOTTOM,
179  TEXTBUTTON_SPEECH_DONE // "Virtual" button?
180 };
181 
182 // Buttons for option menu (corresponding to button indices, not button retvals, which are
183 // different for some reason)
184 enum OptionMenuButtons {
185  OPTIONBUTTON_TEXT,
186  OPTIONBUTTON_SAVE,
187  OPTIONBUTTON_LOAD,
188  OPTIONBUTTON_ENABLEMUSIC,
189  OPTIONBUTTON_DISABLEMUSIC,
190  OPTIONBUTTON_ENABLESFX,
191  OPTIONBUTTON_DISABLESFX,
192  OPTIONBUTTON_QUIT
193 };
194 
195 enum TrekEventType {
196  TREKEVENT_TICK = 0, // DOS clock changes
197  TREKEVENT_LBUTTONDOWN = 1,
198  TREKEVENT_MOUSEMOVE = 2,
199  TREKEVENT_LBUTTONUP = 3,
200  TREKEVENT_RBUTTONDOWN = 4,
201  TREKEVENT_RBUTTONUP = 5,
202  TREKEVENT_KEYDOWN = 6
203 };
204 
205 struct TrekEvent {
206  TrekEventType type;
207  Common::KeyState kbd;
208  Common::Point mouse;
209  uint32 tick;
210 };
211 
213  Common::String fileName;
214  Common::String topic;
215 };
216 
218  bool shields;
219  bool weapons;
220  bool underAttack;
221  bool inOrbit;
222  bool targetAnalysis;
223 
224  EnterpriseState() {
225  shields = false;
226  weapons = false;
227  underAttack = false;
228  inOrbit = false;
229  targetAnalysis = false;
230  }
231 };
232 
233 class Graphics;
234 class IWFile;
235 class Sound;
236 
237 class StarTrekEngine : public ::Engine {
238 protected:
239  // startrek.cpp
240 public:
241  StarTrekEngine(OSystem *syst, const StarTrekGameDescription *gamedesc);
242  ~StarTrekEngine() override;
243 
244  friend class Console;
245 
246  Common::Error run() override;
247  Common::Error runGameMode(int mode, bool resume);
248 
249  // Transporter room
250  void runTransportSequence(const Common::String &name);
251 
252  // Bridge
253  void initBridge(bool b);
254  void loadBridge();
255  void loadBridgeActors();
256  void cleanupBridge();
257  void runBridge();
258  void setBridgeMouseCursor();
259  void playBridgeSequence(int sequenceId);
260  void handleBridgeEvents();
261  void handleBridgeComputer();
262  void showMissionPerformance(int score, int missionScoreTextId, int missionId);
263 
264  int _bridgeSequenceToLoad;
265 
266 private:
267  Common::String getSpeechSampleForNumber(int number);
268  void showTextboxBridge(int talker, int textId);
269  void showTextboxBridge(int talker, Common::String text);
270  void showBridgeScreenTalkerWithMessage(int textId, Common::String talkerHeader, Common::String talkerId, bool removeTalker = true);
271  void showBridgeScreenTalkerWithMessages(Common::String texts[], Common::String talkerHeader, Common::String talkerId, bool removeTalker = true);
272  void showMissionStartEnterpriseFlyby(Common::String sequence, Common::String name);
273  void startBattle(Common::String enemyShip);
274  void wrongDestinationRandomEncounter();
275  void bridgeCrewAction(int crewId);
276  void contactTargetAction();
277  void orbitPlanetSequence(int sequenceId);
278  void negotiateWithElasiCereth();
279  void hailTheMasada();
280 
281  int16 _targetPlanet;
282  int16 _currentPlanet;
283  int _currentScreenTalker;
284  bool _gameIsPaused;
285  bool _hailedTarget;
286  int _deadMasadaPrisoners;
287  bool _beamDownAllowed;
288  int _missionEndFlag;
289  int16 _randomEncounterType; // 1: Klingon, 2: Romulan, 3: Elasi
290  int16 _lastMissionId;
291  int16 _missionPoints[7];
292 
293 public:
294  void playMovie(Common::String filename);
295  void playMovieMac(Common::String filename);
296 
297  uint16 getRandomWord();
298 
299  // awaymission.cpp
300  void initAwayMission();
301  void runAwayMission();
302  void cleanupAwayMission();
303  void loadRoom(const Common::String &missionName, int roomIndex);
304  void initAwayCrewPositions(int warpEntryIndex);
305  void handleAwayMissionEvents();
306  void awayMissionLeftClick();
311  void awayMissionSelectAction(bool openActionMenu);
312  void awayMissionUseObject(int16 clickedObject);
313  void awayMissionGetLookOrTalk(int16 clickedObject);
314  void unloadRoom();
319  int loadActorAnimWithRoomScaling(int actorIndex, const Common::String &animName, int16 x, int16 y);
320  Fixed8 getActorScaleAtPosition(int16 y);
321  void addAction(const Action &action);
322  void addAction(int8 type, byte b1, byte b2, byte b3);
323  void handleAwayMissionAction();
324 
325  void checkTouchedLoadingZone(int16 x, int16 y);
330  void updateAwayMissionTimers();
336  bool isPositionSolid(int16 x, int16 y);
337  void loadRoomIndex(int roomIndex, int spawnIndex);
338 
339  Room *getRoom();
340 
341  // intro.cpp
342 private:
343  void playIntro();
344  void showCreditsScreen(R3 *creditsBuffer, int index, bool deletePrevious = true);
349  void initIntroR3ObjectToMove(R3 *r3, int16 srcAngle, int16 srcDepth, int16 destAngle, int16 destDepth, int16 ticks);
350  void loadSubtitleSprite(int index, Sprite *sprite);
351 
352  // space.cpp (pseudo-3d)
353  void initStarfieldPosition();
354  void initStarfield(int16 x, int16 y, int16 width, int16 height, int16 arg8);
355  void addR3(R3 *r3);
356  void delR3(R3 *r3);
357  void clearStarfieldPixels();
358  void drawStarfield();
359  void updateStarfieldAndShips(bool arg0);
360  R3 *sub_19f24(R3 *r3);
361  void drawR3Shape(R3 *r3);
362  bool sub_1c022(R3 *r3);
363 
364  Point3 constructPoint3ForStarfield(int16 x, int16 y, int16 z);
365  Point3 matrixMult(const Matrix &weight, const Point3 &point);
366  Point3 matrixMult(const Point3 &point, const Matrix &weight);
367  int32 scaleSpacePosition(int32 x, int32 z);
368 
372  Matrix initMatrix();
373  Matrix initSpeedMatrixForXZMovement(Angle angle, const Matrix &matrix);
374 
375 
376  // actors.cpp (handles actors and animations)
377 public:
378  void initActors();
382  int loadActorAnim(int actorIndex, const Common::String &animName, int16 x, int16 y, Fixed8 scale);
383  void loadBanFile(const Common::String &name);
388  bool actorWalkToPosition(int actorIndex, const Common::String &animFile, int16 srcX, int16 srcY, int16 destX, int16 destY);
389  void updateActorAnimations();
390 
396  void renderBanBelowSprites();
397  void renderBan(byte *screenPixels, byte *bgPixels, int banFileIndex);
398  void renderBanAboveSprites();
399  void removeActorFromScreen(int actorIndex);
400  void removeDrawnActorsFromScreen();
401  void drawActorToScreen(Actor *actor, const Common::String &animName, int16 x, int16 y, Fixed8 scale, bool addSprite);
402  void releaseAnim(Actor *actor);
403  void initStandAnim(int actorIndex);
404  void updateActorPositionWhileWalking(Actor *actor, int16 x, int16 y);
409  void chooseActorDirectionForWalking(Actor *actor, int16 srcX, int16 srcY, int16 destX, int16 destY);
414  bool directPathExists(int16 srcX, int16 srcY, int16 destX, int16 destY);
415 
416  int findObjectAt(int x, int y);
417  int findObjectAt(Common::Point p) {
418  return findObjectAt(p.x, p.y);
419  }
423  Bitmap *loadAnimationFrame(const Common::String &filename, Fixed8 scale);
424 
430  int selectObjectForUseAction();
431  Common::String getCrewmanAnimFilename(int actorIndex, const Common::String &basename);
435  void updateMouseBitmap();
440  bool walkActiveObjectToHotspot();
444  bool isObjectUnusable(int objectIndex, int action);
448  void updateCrewmanGetupTimers();
449  void showInventoryIcons(bool showItem);
450  void hideInventoryIcons();
451  int showInventoryMenu(int x, int y, bool restoreMouse);
452  void initStarfieldSprite(Sprite *sprite, Bitmap *bitmap, const Common::Rect &rect);
453  Bitmap *scaleBitmap(Bitmap *bitmap, Fixed8 scale);
459  void scaleBitmapRow(byte *src, byte *dest, uint16 origWidth, uint16 scaledWidth);
460 
461  // events.cpp
462 public:
467  void pollEvents(bool queueEvents = true);
468  void waitForNextTick(bool queueEvents = true);
469  void initializeEventsAndMouse();
474  bool getNextEvent(TrekEvent *e, bool poll = true);
475  void removeNextEvent();
476  bool popNextEvent(TrekEvent *e, bool poll = true);
477  void addEventToQueue(const TrekEvent &e);
478 
479  Common::EventManager *getEventMan() {
480  return _eventMan;
481  }
482 
483 private:
484  Common::List<TrekEvent> _eventQueue;
485  bool _mouseMoveEventInQueue;
486  bool _tickEventInQueue;
487  uint32 _frameStartMillis;
488 
489 
490  // textbox.cpp
491 public:
496  const char *getNextTextLine(const char *text, char *line, int lineWidth);
501  void drawTextLineToBitmap(const char *text, int textLen, int x, int y, Bitmap *bitmap);
502 
503  Common::String centerTextboxHeader(Common::String headerText);
504  void getTextboxHeader(Common::String *headerTextOutput, Common::String speakerText, int choiceIndex);
510  Common::String readTextFromRdf(int choiceIndex, uintptr data, Common::String *headerTextOutput);
511 
515  void showTextbox(Common::String headerText, const Common::String &mainText, int xoffset, int yoffset, byte textColor, int maxTextLines); // TODO: better name. (return type?)
516 
517  Common::String skipTextAudioPrompt(const Common::String &str);
522  Common::String playTextAudio(const Common::String &str);
523 
528  int showText(TextGetterFunc textGetter, uintptr var, int xoffset, int yoffset, int textColor, bool loopChoices, int maxTextLines, bool rclickCancelsChoice);
529 
533  int getNumTextboxLines(const Common::String &str);
534  Common::String putTextIntoLines(const Common::String &text);
535 
539  TextBitmap *initTextSprite(int *xoffsetPtr, int *yoffsetPtr, byte textColor, int numTextLines, bool withHeader, Sprite *sprite);
543  void drawMainText(TextBitmap *bitmap, int numTextLines, int numTextboxLines, const Common::String &text, bool withHeader);
544 
545  Common::String readLineFormattedText(TextGetterFunc textGetter, uintptr var, int choiceIndex, TextBitmap *textBitmap, int numTextboxLines, int *numLines);
546 
551  Common::String readTextFromArray(int choiceIndex, uintptr data, Common::String *headerTextOutput);
556  String readTextFromArrayWithChoices(int choiceIndex, uintptr data, Common::String *headerTextOutput);
557  Common::String readTextFromFoundComputerTopics(int choiceIndex, uintptr data, Common::String *headerTextOutput);
558 
559  Common::String showCodeInputBox();
560  Common::String showComputerInputBox();
561  void redrawTextInput();
562  void addCharToTextInputBuffer(char c);
566  Common::String showTextInputBox(int16 arg0, int16 arg2, const Common::String &headerText);
567  void initTextInputSprite(int16 arg0, int16 arg2, const Common::String &headerText);
568  void cleanupTextInputSprite();
569 
570 private:
571  char _textInputBuffer[TEXT_INPUT_BUFFER_SIZE];
572  int16 _textInputCursorPos;
573  char _textInputCursorChar;
574  Sprite _textInputSprite;
575 
576  // menu.cpp
577 public:
581  int getMenuButtonAt(Sprite *sprites, int numSprites, int x, int y);
590  void chooseMousePositionFromSprites(Sprite *sprites, int numSprites, int spriteIndex, int mode);
595  void drawMenuButtonOutline(Bitmap *bitmap, byte color);
596  void showOptionsMenu(int x, int y);
597  void showBridgeMenu(Common::String menu, int x, int y);
598  void handleBridgeMenu(int menuEvent);
599  void showStarMap();
600  void orbitPlanet();
601  void captainsLog();
602 
606  int showActionMenu();
610  void loadMenuButtons(String mnuFilename, int xpos, int ypos);
614  void setVisibleMenuButtons(uint32 bits);
618  void disableMenuButtons(uint32 bits);
619  void enableMenuButtons(uint32 bits);
624  int handleMenuEvents(uint32 ticksUntilClickingEnabled, bool inTextbox);
625  void unloadMenuButtons();
626 
630  void chooseMouseBitmapForAction(int action, bool withRedOutline);
631  void showQuitGamePrompt(int x, int y);
632  void showGameOverMenu();
637  void showTextConfigurationMenu(bool fromOptionMenu);
638 
639  int loadTextDisplayMode();
640  void saveTextDisplayMode(int value);
641 
645  void showRepublicMap(int16 arg0, int16 turbolift);
649  int getRepublicMapAreaAtMouse();
654  int getRepublicMapAreaOrFailure(int16 turbolift);
655 
656 
657 private:
658  int16 _textDisplayMode;
659  uint32 _textboxVar2;
660  uint16 _textboxVar6;
661  bool _textboxHasMultipleChoices;
662  Menu *_activeMenu;
663  // Saved value of StarTrekEngine::_keyboardControlsMouse when menus are up
664  bool _keyboardControlsMouseOutsideMenu;
665 
666  // saveload.cpp
667 public:
668  bool showSaveMenu();
669  bool showLoadMenu();
670 
671  bool saveGame(int slot, Common::String desc);
672  bool loadGame(int slot);
673 
678  bool saveOrLoadGameData(Common::SeekableReadStream *in, Common::WriteStream *out, SavegameMetadata *meta);
679 
680  Common::String getSavegameFilename(int slotId) const;
681 
682  // detection.cpp
683 public:
684  const StarTrekGameDescription *_gameDescription;
685  uint32 getFeatures() const;
686  Common::Platform getPlatform() const;
687  uint8 getGameType() const;
688  Common::Language getLanguage() const;
689 
690  // _screenName = _missionName + _roomIndex
691  Common::String getScreenName() const {
692  return _missionName + (char)(_roomIndex + '0');
693  }
694 
695  // Variables
696 public:
697  int _gameMode;
698  int _lastGameMode;
699  bool _resetGameMode;
700 
701  // NOTE: this has a different meaning than the original game. When non-empty, a new
702  // room load is triggered, as opposed to original behaviour where this was only read
703  // when "loadRoom" was called.
704  Common::String _missionToLoad;
705  int _roomIndexToLoad;
706  int _spawnIndexToLoad;
707 
708  Common::String _missionName;
709  int _roomIndex;
711  Fixed16 _playerActorScale;
712 
713  // Queue of "actions" (ie. next frame, clicked on object) for away mission or bridge
714  Common::Queue<Action> _actionQueue;
715 
716  AwayMission _awayMission;
717  bool _warpHotspotsActive;
718  int16 _activeWarpHotspot;
719  int16 _activeDoorWarpHotspot;
720  int16 _lookActionBitmapIndex;
721 
722  Item _itemList[NUM_OBJECTS];
723 
724  Actor _actorList[NUM_ACTORS];
725  Actor *const _kirkActor;
726  Actor *const _spockActor;
727  Actor *const _mccoyActor;
728  Actor *const _redshirtActor;
729 
730  // ".BAN" files provide extra miscellaneous animations in the room, ie. flashing
731  // pixels on computer consoles, or fireflies in front of the screen.
732  Common::MemoryReadStreamEndian *_banFiles[MAX_BAN_FILES];
733  uint16 _banFileOffsets[MAX_BAN_FILES];
734 
735  Sprite _inventoryIconSprite;
736  Sprite _itemIconSprite;
737 
738  // Certain hotspots store a position value where objects must walk to before
739  // interacting with them. After calling "findObjectAt", these values are updated.
740  bool _objectHasWalkPosition;
741  Common::Point _objectWalkPosition;
742 
743  // Actions to perform after a crewman finishes walking to a position.
744  // Room-specific code can specify that a specific action of type
745  // "ACTION_FINISHED_WALKING" occurs after moving a crewman somewhere.
746  Action _actionOnWalkCompletion[MAX_BUFFERED_WALK_ACTIONS];
747  bool _actionOnWalkCompletionInUse[MAX_BUFFERED_WALK_ACTIONS];
748 
749  // _clockTicks is based on DOS interrupt 1A, AH=0; read system clock counter.
750  // Updates 18.206 times every second.
751  uint32 _clockTicks;
752  uint32 _frameIndex;
753  uint32 _roomFrameCounter; // Resets to 0 on loading a room
754 
755  bool _musicEnabled;
756  bool _sfxEnabled;
757  uint16 _word_467a6;
758  uint16 _musicWorking;
759  bool _sfxWorking;
760  bool _finishedPlayingSpeech;
761 
762  bool _mouseControllingShip;
763 
764  // TODO: make this work.
765  // When false, the keyboard generally acts in a more specific way (ie. move mouse
766  // between items in a menu).
767  bool _keyboardControlsMouse;
768 
769  bool _inQuitGameMenu;
770  bool _showSubtitles;
771 
772  byte _byte_45b3c;
773 
774  // Pseudo-3D / starfield stuff
775  Sprite _starfieldSprite;
776  Star _starList[NUM_STARS];
777  Point3 _starfieldPosition;
778  int32 _starfieldPointDivisor;
779  int16 _starfieldXVar1, _starfieldYVar1;
780  int16 _starfieldXVar2, _starfieldYVar2;
781  Common::Rect _starfieldRect;
782  R3 _enterpriseR3;
783  R3 *_r3List[NUM_SPACE_OBJECTS];
784  R3 *_orderedR3List[NUM_SPACE_OBJECTS];
785  Matrix _starPositionMatrix;
786  Matrix _someMatrix;
787  float _flt_50898;
788 
789  Graphics *_gfx;
790  Sound *_sound;
791  IWFile *_iwFile;
792  Resource *_resource;
793 
794  EnterpriseState _enterpriseState;
795 
796 private:
797  int leftClickEvent();
798  int rightClickEvent();
799  int mouseMoveEvent();
800  int lookupNextAction(const int *lookupArray, int action);
801  void loadBridgeComputerTopics();
802  void bridgeLeftClick();
803 
804  Common::RandomSource _randomSource;
805  Math::SineTable _sineTable;
806  Math::CosineTable _cosineTable;
807  Room *_room;
808  Common::List<ComputerTopic> _computerTopics;
809 };
810 
811 // Static function
812 bool saveOrLoadMetadata(Common::SeekableReadStream *in, Common::WriteStream *out, SavegameMetadata *meta);
813 
814 } // End of namespace StarTrek
815 
816 #endif
int tm_hour
Definition: system.h:112
Definition: system.h:109
Definition: str.h:59
Definition: surface.h:67
int tm_mday
Definition: system.h:113
Definition: stream.h:77
Definition: error.h:81
int tm_min
Definition: system.h:111
Definition: random.h:44
Definition: startrek.h:217
Definition: list.h:44
Definition: room.h:67
Definition: rect.h:524
Definition: stream.h:745
Definition: console.h:31
Definition: memstream.h:103
Definition: sprite.h:44
Definition: action.h:57
Definition: resource.h:54
Definition: items.h:103
Definition: iwfile.h:35
Definition: object.h:81
Definition: bitmap.h:31
Definition: startrek.h:212
T y
Definition: rect.h:49
int tm_sec
Definition: system.h:110
Definition: detection.h:39
Definition: algorithm.h:29
Definition: formatinfo.h:28
T x
Definition: rect.h:48
Definition: rect.h:144
Definition: action.h:27
Definition: startrek.h:70
int tm_year
Definition: system.h:115
Definition: awaymission.h:27
int tm_mon
Definition: system.h:114
Definition: keyboard.h:294
Definition: bitmap.h:55
Definition: space.h:144
Definition: system.h:164
Definition: ptr.h:159
Definition: startrek.h:237
Definition: startrek.h:150
Definition: startrek.h:205
Definition: events.h:483
Definition: engine.h:144
Definition: sound.h:53
Platform
Definition: platform.h:93
Definition: space.h:151
Language
Definition: language.h:45