ScummVM API documentation
freescape.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 FREESCAPE_H
23 #define FREESCAPE_H
24 
25 #include "common/bitarray.h"
26 #include "common/events.h"
27 #include "engines/advancedDetector.h"
28 #include "graphics/managed_surface.h"
29 #include "graphics/surface.h"
30 
31 #include "audio/decoders/wave.h"
32 #include "audio/mixer.h"
33 #include "audio/softsynth/pcspk.h"
34 #include "graphics/framelimiter.h"
35 
36 #include "freescape/area.h"
37 #include "freescape/font.h"
38 #include "freescape/gfx.h"
39 #include "freescape/objects/entrance.h"
40 #include "freescape/objects/geometricobject.h"
41 #include "freescape/objects/sensor.h"
42 #include "freescape/sound.h"
43 
44 namespace Common {
45 class RandomSource;
46 }
47 
48 namespace Freescape {
49 
50 class Renderer;
51 
52 #define FREESCAPE_DATA_BUNDLE "freescape.dat"
53 
54 enum CameraMovement {
55  kForwardMovement,
56  kBackwardMovement,
57  kLeftMovement,
58  kRightMovement
59 };
60 
61 enum FreescapeAction {
62  kActionNone,
63  kActionEscape,
64  kActionSave,
65  kActionLoad,
66  kActionToggleSound,
67  kActionMoveUp,
68  kActionMoveDown,
69  kActionMoveLeft,
70  kActionMoveRight,
71  kActionShoot,
72  kActionChangeAngle,
73  kActionChangeStepSize,
74  kActionToggleRiseLower,
75  kActionRiseOrFlyUp,
76  kActionLowerOrFlyDown,
77  kActionChangeMode,
78  kActionSkip,
79  kActionFaceForward,
80  kActionRotateUp,
81  kActionRotateDown,
82  kActionRotateLeft,
83  kActionRotateRight,
84  kActionTurnBack,
85  kActionInfoMenu,
86  kActionIncreaseStepSize,
87  kActionDecreaseStepSize,
88  kActionToggleFlyMode,
89  kActionToggleClipMode,
90  // Driller
91  kActionDeployDrillingRig,
92  kActionCollectDrillingRig,
93  // Total Eclipse
94  kActionRest,
95  // Castle
96  kActionRunMode,
97  kActionWalkMode,
98  kActionCrawlMode,
99  kActionSelectPrince,
100  kActionSelectPrincess,
101 };
102 
103 typedef Common::HashMap<uint16, Area *> AreaMap;
104 typedef Common::Array<byte *> ColorMap;
105 typedef Common::HashMap<uint16, int32> StateVars;
106 
107 enum {
108  kFreescapeDebugMove = 1 << 0,
109  kFreescapeDebugParser = 1 << 1,
110  kFreescapeDebugCode = 1 << 2,
111  kFreescapeDebugMedia = 1 << 4,
112  kFreescapeDebugGroup = 1 << 5,
113 };
114 
115 enum GameStateControl {
116  kFreescapeGameStateStart,
117  kFreescapeGameStatePlaying,
118  kFreescapeGameStateDemo,
119  kFreescapeGameStateEnd,
120  kFreescapeGameStateRestart,
121 };
122 
124  int areaId;
125  byte *palette;
126 };
127 
129 public:
131  // EventManager API
132  bool pollEvent(Common::Event &event);
133  void purgeKeyboardEvents();
134  void purgeMouseEvents();
135  void pushEvent(Common::Event &event);
136  void clearExitEvents();
137 
138 private:
139  // for continuous events (keyDown)
140  enum {
141  kKeyRepeatInitialDelay = 400,
142  kKeyRepeatSustainDelay = 100
143  };
144 
145  Common::EventManager *_delegate;
146 
147  Common::KeyState _currentKeyDown;
148  Common::CustomEventType _currentActionDown;
149  uint32 _keyRepeatTime;
150 };
151 
152 class FreescapeEngine : public Engine {
153 
154 public:
155  FreescapeEngine(OSystem *syst, const ADGameDescription *gd);
156  ~FreescapeEngine();
157 
158  const ADGameDescription *_gameDescription;
159  GameStateControl _gameStateControl;
160  bool isDemo() const;
161 
162  // Game selection
163  uint32 _variant;
164  Common::Language _language;
165  bool isSpaceStationOblivion() { return _targetName.hasPrefix("spacestationoblivion"); }
166  bool isDriller() { return _targetName.hasPrefix("driller") || _targetName.hasPrefix("spacestationoblivion"); }
167  bool isDark() { return _targetName.hasPrefix("darkside"); }
168  bool isEclipse() { return _targetName.hasPrefix("totaleclipse"); } // This will match Total Eclipse 1 and 2.
169  bool isEclipse2() { return _targetName.hasPrefix("totaleclipse2"); }
170  bool isCastle() { return _targetName.hasPrefix("castle"); }
171  bool isAmiga() { return _gameDescription->platform == Common::kPlatformAmiga; }
172  bool isAtariST() { return _gameDescription->platform == Common::kPlatformAtariST; }
173  bool isDOS() { return _gameDescription->platform == Common::kPlatformDOS; }
174  bool isSpectrum() { return _gameDescription->platform == Common::kPlatformZX; }
175  bool isCPC() { return _gameDescription->platform == Common::kPlatformAmstradCPC; }
176  bool isC64() { return _gameDescription->platform == Common::kPlatformC64; }
177 
178  Common::Error run() override;
179 
180  // UI
181  Common::Rect _viewArea;
182  Common::Rect _fullscreenViewArea;
183  void centerCrossair();
184 
185  virtual void borderScreen();
186  virtual void titleScreen();
187 
188  void drawFullscreenSurface(Graphics::Surface *surface);
189  virtual void loadBorder();
190  virtual void processBorder();
191  void waitInLoop(int maxWait);
192  void drawBorder();
193  void drawTitle();
194  virtual void drawBackground();
195  void clearBackground();
196  virtual void drawUI();
197  virtual void drawInfoMenu();
198  void drawBorderScreenAndWait(Graphics::Surface *surface, int maxWait = INT_MAX);
199 
200  virtual void drawCrossair(Graphics::Surface *surface);
201  Graphics::ManagedSurface *_border;
202  Graphics::ManagedSurface *_title;
203  Graphics::ManagedSurface *_background;
204 
205  Texture *_borderTexture;
206  Texture *_titleTexture;
207  Texture *_uiTexture;
208  Texture *_skyTexture;
209 
211  Common::HashMap<uint16, Texture *> _borderCGAByArea;
212  Common::HashMap<uint16, byte *> _paletteCGAByArea;
213 
214  // Parsing assets
215  uint8 _binaryBits;
216  virtual void loadAssets();
217  virtual void loadAssetsDemo();
218  virtual void loadAssetsFullGame();
219 
220  virtual void loadAssetsAtariFullGame();
221  virtual void loadAssetsAtariDemo();
222 
223  virtual void loadAssetsAmigaFullGame();
224  virtual void loadAssetsAmigaDemo();
225 
226  virtual void loadAssetsDOSFullGame();
227  virtual void loadAssetsDOSDemo();
228 
229  virtual void loadAssetsZXFullGame();
230  virtual void loadAssetsZXDemo();
231 
232  virtual void loadAssetsCPCFullGame();
233  virtual void loadAssetsCPCDemo();
234 
235  virtual void loadAssetsC64FullGame();
236  virtual void loadAssetsC64Demo();
237 
238  virtual void drawDOSUI(Graphics::Surface *surface);
239  virtual void drawZXUI(Graphics::Surface *surface);
240  virtual void drawCPCUI(Graphics::Surface *surface);
241  virtual void drawC64UI(Graphics::Surface *surface);
242  virtual void drawAmigaAtariSTUI(Graphics::Surface *surface);
243 
244  Common::Archive *_dataBundle;
245  void loadDataBundle();
246  Graphics::Surface *loadBundledImage(const Common::String &name, bool appendRenderMode = true);
247  byte *getPaletteFromNeoImage(Common::SeekableReadStream *stream, int offset);
248  Graphics::ManagedSurface *loadAndConvertNeoImage(Common::SeekableReadStream *stream, int offset, byte *palette = nullptr);
249  Graphics::ManagedSurface *loadAndCenterScrImage(Common::SeekableReadStream *stream);
250  void loadPalettes(Common::SeekableReadStream *file, int offset);
251  byte *loadPalette(Common::SeekableReadStream *file);
252  void swapPalette(uint16 areaID);
253  virtual byte *findCGAPalette(uint16 levelID);
254  const CGAPaletteEntry *_rawCGAPaletteByArea;
255  Common::HashMap<uint16, byte *> _paletteByArea;
256  void loadColorPalette();
257 
258  // Demo
259  Common::Array<byte> _demoData;
260  int _demoIndex;
261  int _currentDemoInputCode;
262  int _currentDemoInputRepetition;
263  Common::Array<Common::Event> _demoEvents;
264  Common::Point _currentDemoMousePosition;
265  void loadDemoData(Common::SeekableReadStream *file, int offset, int size);
266  int decodeAmigaAtariKey(int code);
267  int decodeDOSKey(int code);
268  Common::Event decodeDOSMouseEvent(int code, int repetition);
269 
270  uint16 readField(Common::SeekableReadStream *file, int nbits);
271  uint16 readPtr(Common::SeekableReadStream *file);
272  Common::Array<uint16> readArray(Common::SeekableReadStream *file, int size);
273 
274  // 8-bit
275  void load8bitBinary(Common::SeekableReadStream *file, int offset, int ncolors);
276  Area *load8bitArea(Common::SeekableReadStream *file, uint16 ncolors);
277  Object *load8bitObject(Common::SeekableReadStream *file);
278  Group *load8bitGroup(Common::SeekableReadStream *file, byte rawFlagsAndType);
279  Group *load8bitGroupV1(Common::SeekableReadStream *file, byte rawFlagsAndType);
280  Group *load8bitGroupV2(Common::SeekableReadStream *file, byte rawFlagsAndType);
281 
282  void loadGlobalObjects(Common::SeekableReadStream *file, int offset, int size);
283  void renderPixels8bitBinImage(Graphics::ManagedSurface *surface, int row, int column, int bit, int count);
284 
285  void renderPixels8bitBinCGAImage(Graphics::ManagedSurface *surface, int &i, int &j, uint8 pixels, int color);
286  void renderPixels8bitBinEGAImage(Graphics::ManagedSurface *surface, int &i, int &j, uint8 pixels, int color);
287 
288  Graphics::ManagedSurface *load8bitBinImage(Common::SeekableReadStream *file, int offset);
289  void load8bitBinImageRow(Common::SeekableReadStream *file, Graphics::ManagedSurface *surface, int row);
290  void load8bitBinImageRowIteration(Common::SeekableReadStream *file, Graphics::ManagedSurface *surface, int row, int bit);
291  int execute8bitBinImageCommand(Common::SeekableReadStream *file, Graphics::ManagedSurface *surface, int row, int pixels, int bit);
292  int execute8bitBinImageSingleCommand(Common::SeekableReadStream *file, Graphics::ManagedSurface *surface, int row, int pixels, int bit, int count);
293  int execute8bitBinImageMultiCommand(Common::SeekableReadStream *file, Graphics::ManagedSurface *surface, int row, int pixels, int bit, int count);
294 
295  void parseAmigaAtariHeader(Common::SeekableReadStream *file);
296  Common::SeekableReadStream *decryptFileAmigaAtari(const Common::Path &packed, const Common::Path &unpacker, uint32 unpackArrayOffset);
297 
298  // Areas
299  uint16 _startArea;
300  uint16 _endArea;
301  AreaMap _areaMap;
302  Area *_currentArea;
303  bool _gotoExecuted;
304  Math::Vector3d _scale;
305 
306  virtual void gotoArea(uint16 areaID, int entranceID);
307  // Entrance
308  uint16 _startEntrance;
309  uint16 _endEntrance;
311 
312  // Input
313  bool _demoMode;
314  bool _disableDemoMode;
315  bool _flyMode;
316  bool _shootMode;
317  bool _noClipMode;
318  bool _invertY;
319  virtual void initKeymaps(Common::Keymap *engineKeyMap, Common::Keymap *infoScreenKeyMap, const char *target);
320  EventManagerWrapper *_eventManager;
321  void processInput();
322  void resetInput();
323  void generateDemoInput();
324  virtual void pressedKey(const int keycode);
325  virtual void releasedKey(const int keycode);
326  Common::Point getNormalizedPosition(Common::Point position);
327  virtual bool onScreenControls(Common::Point mouse);
328  void move(CameraMovement direction, uint8 scale, float deltaTime);
329  void resolveCollisions(Math::Vector3d newPosition);
330  virtual void checkIfStillInArea();
331  void changePlayerHeight(int index);
332  void increaseStepSize();
333  void decreaseStepSize();
334  void changeStepSize();
335 
336  void changeAngle();
337  bool rise();
338  void lower();
339  bool checkFloor(Math::Vector3d currentPosition);
340  bool tryStepUp(Math::Vector3d currentPosition);
341  bool tryStepDown(Math::Vector3d currentPosition);
342  bool _hasFallen;
343  int _maxFallingDistance;
344  int _maxShield;
345  int _maxEnergy;
346 
347  void rotate(float xoffset, float yoffset);
348  // Input state
349  float _lastFrame;
350 
351  // Interaction
352  void activate();
353  void shoot();
354  void traverseEntrance(uint16 entranceID);
355 
356  // Euler Angles
357  float _yaw;
358  float _pitch;
359  int _angleRotationIndex;
360  Common::Array<float> _angleRotations;
361 
362  Math::Vector3d directionToVector(float pitch, float heading, bool useTable);
363  void updateCamera();
364 
365  // Camera options
366  Common::Point _crossairPosition;
367  float _mouseSensitivity;
368  Math::Vector3d _upVector; // const
369  Math::Vector3d _cameraFront, _cameraRight;
370  // Spacial attributes
371  Math::Vector3d _position, _rotation, _velocity;
372  Math::Vector3d _lastPosition;
373  int _playerHeightNumber;
374  int _playerHeightMaxNumber;
375  uint16 _playerHeight;
376  uint16 _playerWidth;
377  uint16 _playerDepth;
378  uint16 _stepUpDistance;
379 
380  int _playerStepIndex;
381  Common::Array<int> _playerSteps;
382 
383  // Effects
384  Common::Array<Common::String> _conditionSources;
386 
387  bool runCollisionConditions(Math::Vector3d const lastPosition, Math::Vector3d const newPosition);
388  Math::Vector3d _objExecutingCodeSize;
389  bool _executingGlobalCode;
390  virtual void executeMovementConditions();
391  bool executeObjectConditions(GeometricObject *obj, bool shot, bool collided, bool activated);
392  void executeEntranceConditions(Entrance *entrance);
393  void executeLocalGlobalConditions(bool shot, bool collided, bool timer);
394  bool executeCode(FCLInstructionVector &code, bool shot, bool collided, bool timer, bool activated);
395 
396  // Instructions
397  bool checkConditional(FCLInstruction &instruction, bool shot, bool collided, bool timer, bool activated);
398  bool checkIfGreaterOrEqual(FCLInstruction &instruction);
399  bool checkIfLessOrEqual(FCLInstruction &instruction);
400  void executeExecute(FCLInstruction &instruction, bool shot, bool collided, bool activated);
401  void executeIncrementVariable(FCLInstruction &instruction);
402  void executeDecrementVariable(FCLInstruction &instruction);
403  void executeSetVariable(FCLInstruction &instruction);
404  void executeGoto(FCLInstruction &instruction);
405  void executeIfThenElse(FCLInstruction &instruction);
406  virtual void executeMakeInvisible(FCLInstruction &instruction);
407  void executeMakeVisible(FCLInstruction &instruction);
408  void executeToggleVisibility(FCLInstruction &instruction);
409  virtual void executeDestroy(FCLInstruction &instruction);
410  virtual void executeRedraw(FCLInstruction &instruction);
411  void executeSound(FCLInstruction &instruction);
412  void executeDelay(FCLInstruction &instruction);
413  bool executeEndIfNotEqual(FCLInstruction &instruction);
414  void executeSetBit(FCLInstruction &instruction);
415  void executeClearBit(FCLInstruction &instruction);
416  void executeToggleBit(FCLInstruction &instruction);
417  bool executeEndIfBitNotEqual(FCLInstruction &instruction);
418  bool executeEndIfVisibilityIsEqual(FCLInstruction &instruction);
419  void executeSwapJet(FCLInstruction &instruction);
420  virtual void executePrint(FCLInstruction &instruction);
421  void executeSPFX(FCLInstruction &instruction);
422  void executeStartAnim(FCLInstruction &instruction);
423 
424  // Sound
425  Audio::SoundHandle _soundFxHandle;
426  Audio::SoundHandle _musicHandle;
427  Freescape::SizedPCSpeaker *_speaker;
428 
429  bool _syncSound;
430  bool _firstSound;
431  bool _usePrerecordedSounds;
432  void waitForSounds();
433  void stopAllSounds();
434  bool isPlayingSound();
435  void playSound(int index, bool sync);
436  void playWav(const Common::Path &filename);
437  void playMusic(const Common::Path &filename);
438  void queueSoundConst(double hzFreq, int duration);
439  void playSilence(int duration, bool sync);
440  void playSoundConst(double hzFreq, int duration, bool sync);
441  void playSoundSweepIncWL(double hzFreq1, double hzFreq2, double wlStepPerMS, int resolution, bool sync);
442  uint16 playSoundDOSSpeaker(uint16 startFrequency, soundSpeakerFx *speakerFxInfo);
443  void playSoundDOS(soundSpeakerFx *speakerFxInfo, bool sync);
444 
445  virtual void playSoundFx(int index, bool sync);
446  virtual void loadSoundsFx(Common::SeekableReadStream *file, int offset, int number);
448  void loadSpeakerFxDOS(Common::SeekableReadStream *file, int offsetFreq, int offsetDuration);
449  void loadSpeakerFxZX(Common::SeekableReadStream *file, int sfxTable, int sfxData);
451 
452  void playSoundZX(Common::Array<soundUnitZX> *data);
454  int _soundIndexShoot;
455  int _soundIndexCollide;
456  int _soundIndexFall;
457  int _soundIndexClimb;
458  int _soundIndexMenu;
459  int _soundIndexStart;
460  int _soundIndexAreaChange;
461  int _soundIndexHit;
462 
463  int _soundIndexNoShield;
464  int _soundIndexNoEnergy;
465  int _soundIndexFallen;
466  int _soundIndexTimeout;
467  int _soundIndexForceEndGame;
468  int _soundIndexCrushed;
469  int _soundIndexMissionComplete;
470 
471  // Rendering
472  int _screenW, _screenH;
473  Renderer *_gfx;
474  Graphics::FrameLimiter *_frameLimiter;
475  bool _vsyncEnabled;
476  Common::RenderMode _renderMode;
477  ColorMap _colorMap;
478  int _underFireFrames;
479  int _avoidRenderingFrames;
480  int _shootingFrames;
481  GeometricObject *_delayedShootObject;
482  void drawFrame();
483  void flashScreen(int backgroundColor);
484  uint8 _colorNumber;
485  Math::Vector3d _scaleVector;
486  float _nearClipPlane;
487  float _farClipPlane;
488 
489  // Text messages and Fonts
490  void insertTemporaryMessage(const Common::String message, int deadline);
491  void getLatestMessages(Common::String &message, int &deadline);
492  void clearTemporalMessages();
493  Common::StringArray _temporaryMessages;
494  Common::Array<int> _temporaryMessageDeadlines;
495  Common::StringArray _messagesList;
496  Common::String _noShieldMessage;
497  Common::String _noEnergyMessage;
498  Common::String _fallenMessage;
499  Common::String _timeoutMessage;
500  Common::String _forceEndGameMessage;
501  Common::String _crushedMessage;
502  Common::String _outOfReachMessage;
503  Common::String _noEffectMessage;
504 
505  void loadMessagesFixedSize(Common::SeekableReadStream *file, int offset, int size, int number);
506  virtual void loadMessagesVariableSize(Common::SeekableReadStream *file, int offset, int number);
507  void drawFullscreenMessageAndWait(Common::String message);
508  void drawFullscreenMessage(Common::String message, uint32 front, Graphics::Surface *surface);
509 
510  // Font loading and rendering
511  void loadFonts(Common::SeekableReadStream *file, int offset);
512  void loadFonts(byte *font, int charNumber);
513  Common::Array<Graphics::ManagedSurface *> getChars(Common::SeekableReadStream *file, int offset, int charsNumber);
514  Common::Array<Graphics::ManagedSurface *> getCharsAmigaAtariInternal(int sizeX, int sizeY, int additional, int m1, int m2, Common::SeekableReadStream *file, int offset, int charsNumber);
515  Common::Array<Graphics::ManagedSurface *> getCharsAmigaAtari(Common::SeekableReadStream *file, int offset, int charsNumber);
516  Common::StringArray _currentAreaMessages;
517  Common::StringArray _currentEphymeralMessages;
518  Font _font;
519  bool _fontLoaded;
520  virtual void drawStringInSurface(const Common::String &str, int x, int y, uint32 fontColor, uint32 backColor, Graphics::Surface *surface, int offset = 0);
521  virtual void drawStringInSurface(const Common::String &str, int x, int y, uint32 primaryFontColor, uint32 secondaryFontColor, uint32 backColor, Graphics::Surface *surface, int offset = 0);
522  Graphics::Surface *drawStringsInSurface(const Common::Array<Common::String> &lines, Graphics::Surface *surface);
523 
524  // Game state
525  virtual void initGameState();
526  void setGameBit(int index);
527  void clearGameBit(int index);
528  void toggleGameBit(int index);
529  uint16 getGameBit(int index);
530 
531  StateVars _gameStateVars;
532  uint32 _gameStateBits;
533  void checkIfPlayerWasCrushed();
534  virtual bool checkIfGameEnded();
535  virtual void endGame();
536  int _endGameDelayTicks;
537  bool _endGameKeyPressed;
538  bool _endGamePlayerEndArea;
539  bool _forceEndGame;
540  bool _playerWasCrushed;
541  Common::HashMap<uint16, bool> _exploredAreas;
542  ObjectArray _sensors;
543  virtual void checkSensors();
544  virtual void drawSensorShoot(Sensor *sensor);
545  void takeDamageFromSensor();
546 
547  bool hasFeature(EngineFeature f) const override;
548  bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override { return true; }
549  bool canSaveAutosaveCurrently() override { return false; }
550  bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override { return _gameStateControl == kFreescapeGameStatePlaying && _currentArea; }
551  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
552  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
553  virtual Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false);
554  virtual Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream);
555  Graphics::Surface *_savedScreen;
556 
557  void pauseEngineIntern(bool pause) override;
558 
559  // Timers
560  bool startCountdown(uint32 delay);
561  void removeTimers();
562  bool _timerStarted;
563  int _initialCountdown;
564  int _countdown;
565  int _ticks;
566  int _ticksFromEnd;
567  int _lastTick;
568  int _lastMinute;
569 
570  void getTimeFromCountdown(int &seconds, int &minutes, int &hours);
571  virtual void updateTimeVariables();
572 
573  // Cheats
574  bool _useExtendedTimer;
575  bool _disableSensors;
576  bool _disableFalling;
577 
578  // Random
579  Common::RandomSource *_rnd;
580 };
581 
582 enum GameReleaseFlags {
583  GF_AMIGA_RETAIL = (1 << 0),
584  GF_AMIGA_BUDGET = (1 << 1),
585  GF_ZX_RETAIL = (1 << 2),
586  GF_ZX_BUDGET = (1 << 3),
587  GF_ZX_DISC = (1 << 4),
588  GF_CPC_RETAIL = (1 << 5),
589  GF_CPC_RETAIL_ALT = (1 << 6),
590  GF_CPC_BUDGET = (1 << 7),
591  GF_CPC_VIRTUALWORLDS = (1 << 8),
592  GF_ATARI_RETAIL = (1 << 9),
593  GF_ATARI_BUDGET = (1 << 10)
594 };
595 
596 extern FreescapeEngine *g_freescape;
597 
598 } // namespace Freescape
599 
600 #endif // FREESCAPE_H
Definition: geometricobject.h:34
Definition: managed_surface.h:51
Definition: group.h:40
Definition: sound.h:45
Definition: framelimiter.h:37
Definition: keymap.h:66
Definition: str.h:59
Definition: surface.h:67
EngineFeature
Definition: engine.h:253
Definition: stream.h:77
Definition: error.h:84
bool canSaveAutosaveCurrently() override
Definition: freescape.h:549
Definition: area.h:36
Definition: freescape.h:128
Definition: advancedDetector.h:163
Definition: random.h:44
RenderMode
Definition: rendermode.h:48
Definition: rect.h:144
Definition: area.h:40
Definition: path.h:52
uint32 CustomEventType
Definition: events.h:193
Definition: stream.h:745
Definition: archive.h:141
Definition: freescape.h:152
bool canSaveGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: freescape.h:550
Definition: mixer.h:49
Definition: gfx.h:60
Graphics::Surface * scale(const Graphics::Surface &srcImage, int xSize, int ySize)
Definition: sensor.h:34
Definition: ustr.h:57
Definition: events.h:199
Definition: algorithm.h:29
Definition: rect.h:45
Definition: entrance.h:34
Out move(In first, In last, Out dst)
Definition: algorithm.h:109
Definition: font.h:32
Definition: keyboard.h:294
bool canLoadGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: freescape.h:548
Definition: object.h:56
Definition: sound.h:54
Definition: system.h:161
Definition: instruction.h:36
Definition: freescape.h:123
Common::Platform platform
Definition: advancedDetector.h:198
Definition: events.h:472
Definition: engine.h:144
Definition: gfx.h:47
Language
Definition: language.h:45