ScummVM API documentation
saga.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 SAGA_SAGA_H
23 #define SAGA_SAGA_H
24 
25 #include "engines/engine.h"
26 
27 #include "common/array.h"
28 #include "common/random.h"
29 #include "common/memstream.h"
30 #include "common/textconsole.h"
31 
32 #include "backends/keymapper/action.h"
33 #include "backends/keymapper/keymapper.h"
34 
35 #include "saga/gfx.h"
36 #include "saga/detection.h"
37 
39 
50 namespace Saga {
51 
52 class SndRes;
53 class Sound;
54 class Music;
55 class Anim;
56 class Render;
57 class IsoMap;
58 class Gfx;
59 class Script;
60 class Actor;
61 class Font;
62 class Sprite;
63 class Scene;
64 class Interface;
65 class Console;
66 class Events;
67 class PalAnim;
68 class Puzzle;
69 class Resource;
70 
71 class ResourceContext;
72 
73 // #define SAGA_DEBUG 1 // define for test functions
74 #define SAGA_IMAGE_DATA_OFFSET 776
75 #define SAGA_IMAGE_HEADER_LEN 8
76 
77 // Note that IHNM has a smaller save title size than ITE
78 // We allocate the ITE save title size in savegames, to
79 // preserve savegame backwards compatibility. We only check
80 // for IHNM's save title during text input
81 #define SAVE_TITLE_SIZE 28
82 #define TITLESIZE 80
83 #define IHNM_SAVE_TITLE_SIZE 22
84 #define MAX_SAVES 96
85 #define MAX_FILE_NAME 256
86 
87 #define ID_NOTHING 0
88 #define ID_PROTAG 1
89 #define OBJECT_TYPE_SHIFT 13
90 #define OBJECT_TYPE_MASK ((1 << OBJECT_TYPE_SHIFT) - 1)
91 
92 #define IHNM_OBJ_PROFILE 0x4000
93 
94 #define memoryError(Place) error("%s Memory allocation error.", Place)
95 
96 enum ERRORCODE {
97  FAILURE = -1,
98  SUCCESS = 0
99 };
100 
101 enum SAGAAction {
102  kActionNone,
103  kActionLookAt,
104  kActionWalkTo,
105  kActionPickUp,
106  kActionTalkTo,
107  kActionOpen,
108  kActionClose,
109  kActionUse,
110  kActionGive,
111  kActionTake,
112  kActionSwallow,
113  kActionPush,
114  kActionPause,
115  kActionAbortSpeech,
116  kActionBossKey,
117  kActionEscape,
118  kActionShowDialogue,
119  kActionOptions,
120  kActionOptionQuit,
121  kActionOptionCancel,
122  kActionOptionSave,
123  kActionOptionOkay,
124  kActionOptionReadingSpeed,
125  kActionOptionMusic,
126  kActionOptionSound,
127  kActionOptionVoices,
128  kActionOptionContinue,
129  kActionOptionLoad,
130  kActionOptionQuitGame,
131  kActionOptionSaveGame,
132  kActionConverseExit,
133  kActionConversePosUp,
134  kActionConversePosDown
135 };
136 
137 extern const char *engineKeyMapId;
138 extern const char *gameKeyMapId;
139 extern const char *optionKeyMapId;
140 extern const char *saveKeyMapId;
141 extern const char *loadKeyMapId;
142 extern const char *quitKeyMapId;
143 extern const char *converseKeyMapId;
144 
145 enum VerbTypeIds {
146  kVerbITENone = 0,
147  kVerbITEPickUp = 1,
148  kVerbITELookAt = 2,
149  kVerbITEWalkTo = 3,
150  kVerbITETalkTo = 4,
151  kVerbITEOpen = 5,
152  kVerbITEClose = 6,
153  kVerbITEGive = 7,
154  kVerbITEUse = 8,
155  kVerbITEOptions = 9,
156  kVerbITEEnter = 10,
157  kVerbITELeave = 11,
158  kVerbITEBegin = 12,
159  kVerbITEWalkOnly = 13,
160  kVerbITELookOnly = 14,
161 
162 
163  kVerbIHNMNone = 0,
164  kVerbIHNMWalk = 1,
165  kVerbIHNMLookAt = 2,
166  kVerbIHNMTake = 3,
167  kVerbIHNMUse = 4,
168  kVerbIHNMTalkTo = 5,
169  kVerbIHNMSwallow = 6,
170  kVerbIHNMGive = 7,
171  kVerbIHNMPush = 8,
172  kVerbIHNMOptions = 9,
173  kVerbIHNMEnter = 10,
174  kVerbIHNMLeave = 11,
175  kVerbIHNMBegin = 12,
176  kVerbIHNMWalkOnly = 13,
177  kVerbIHNMLookOnly = 14,
178 
179  kVerbTypeIdsMax = kVerbITELookOnly + 1
180 };
181 
182 enum PanelButtonType {
183  kPanelButtonVerb = 1 << 0,
184  kPanelButtonArrow = 1 << 1,
185  kPanelButtonConverseText = 1 << 2,
186  kPanelButtonInventory = 1 << 3,
187 
188  kPanelButtonOption = 1 << 4,
189  kPanelButtonOptionSlider = 1 << 5,
190  kPanelButtonOptionSaveFiles = 1 << 6,
191  kPanelButtonOptionText = 1 << 7,
192 
193  kPanelButtonQuit = 1 << 8,
194  kPanelButtonQuitText = 1 << 9,
195 
196  kPanelButtonLoad = 1 << 10,
197  kPanelButtonLoadText = 1 << 11,
198 
199  kPanelButtonSave = 1 << 12,
200  kPanelButtonSaveText = 1 << 13,
201  kPanelButtonSaveEdit = 1 << 14,
202 
203  kPanelButtonProtectText = 1 << 15,
204  kPanelButtonProtectEdit = 1 << 16,
205 
206  kPanelAllButtons = 0xFFFFF
207 };
208 
209 enum TextStringIds {
210  kTextPickUp,
211  kTextLookAt,
212  kTextWalkTo,
213  kTextTalkTo,
214  kTextOpen,
215  kTextClose,
216  kTextGive,
217  kTextUse,
218 
219  kTextOptions,
220  kTextTest,
221  kTextDemo,
222  kTextHelp,
223  kTextQuitGame,
224  kTextFast,
225  kTextSlow,
226  kTextOn,
227  kTextOff,
228  kTextContinuePlaying,
229  kTextLoad,
230  kTextSave,
231  kTextGameOptions,
232  kTextReadingSpeed,
233  kTextMusic,
234  kTextSound,
235  kTextCancel,
236  kTextQuit,
237  kTextOK,
238  kTextMid,
239  kTextClick,
240  kText10Percent,
241  kText20Percent,
242  kText30Percent,
243  kText40Percent,
244  kText50Percent,
245  kText60Percent,
246  kText70Percent,
247  kText80Percent,
248  kText90Percent,
249  kTextMax,
250  kTextQuitTheGameQuestion,
251  kTextLoadSuccessful,
252  kTextEnterSaveGameName,
253  kTextGiveTo,
254  kTextUseWidth,
255  kTextNewSave,
256  kTextICantPickup,
257  kTextNothingSpecial,
258  kTextNoPlaceToOpen,
259  kTextNoOpening,
260  kTextDontKnow,
261  kTextShowDialog,
262  kTextEnterProtectAnswer,
263  kTextVoices,
264  kTextText,
265  kTextAudio,
266  kTextBoth,
267  kTextLoadSavedGame
268 };
269 
271  uint32 sceneLUTResourceId;
272  uint32 moduleLUTResourceId;
273  uint32 mainPanelResourceId;
274  uint32 conversePanelResourceId;
275  uint32 optionPanelResourceId;
276  uint32 mainSpritesResourceId;
277  uint32 mainPanelSpritesResourceId;
278  uint32 mainStringsResourceId;
279  // ITE specific resources
280  uint32 actorsStringsResourceId;
281  uint32 defaultPortraitsResourceId;
282  // IHNM specific resources
283  uint32 optionPanelSpritesResourceId;
284  uint32 warningPanelResourceId;
285  uint32 warningPanelSpritesResourceId;
286  uint32 psychicProfileResourceId;
287 };
288 
290  uint32 fontResourceId;
291 };
292 
293 struct GameDisplayInfo;
294 
296  const char *fileName;
297  uint16 fileType;
298  uint32 resourceId;
299 };
300 
301 enum GameObjectTypes {
302  kGameObjectNone = 0,
303  kGameObjectActor = 1,
304  kGameObjectObject = 2,
305  kGameObjectHitZone = 3,
306  kGameObjectStepZone = 4
307 };
308 
309 enum ScriptTimings {
310  kScriptTimeTicksPerSecond = (728L/10L),
311  kRepeatSpeedTicks = (728L/10L)/3,
312  kNormalFadeDuration = 320, // 64 steps, 5 msec each
313  kQuickFadeDuration = 64, // 64 steps, 1 msec each
314  kPuzzleHintTime = 30000000L // 30 secs. used in timer
315 };
316 
317 enum Directions {
318  kDirUp = 0,
319  kDirUpRight = 1,
320  kDirRight = 2,
321  kDirDownRight = 3,
322  kDirDown = 4,
323  kDirDownLeft = 5,
324  kDirLeft = 6,
325  kDirUpLeft = 7
326 };
327 
328 enum HitZoneFlags {
329  kHitZoneEnabled = (1 << 0), // Zone is enabled
330  kHitZoneExit = (1 << 1), // Causes char to exit
331 
332  // The following flag causes the zone to act differently.
333  // When the actor hits the zone, it will immediately begin walking
334  // in the specified direction, and the actual specified effect of
335  // the zone will be delayed until the actor leaves the zone.
336  kHitZoneAutoWalk = (1 << 2),
337 
338  // When set on a hit zone, this causes the character not to walk
339  // to the object (but they will look at it).
340  kHitZoneNoWalk = (1 << 2),
341 
342  // zone activates only when character stops walking
343  kHitZoneTerminus = (1 << 3),
344 
345  // Hit zones only - when the zone is clicked on it projects the
346  // click point downwards from the middle of the zone until it
347  // reaches the lowest point in the zone.
348  kHitZoneProject = (1 << 3)
349 };
350 
351 struct ImageHeader {
352  int width;
353  int height;
354 };
355 
356 struct StringsTable {
357  Common::Array<char> buffer;
358  Common::Array<char *> strings;
359 
360  const char *getString(uint index) const {
361  if (strings.size() <= index) {
362  // This occurs at the end of Ted's chapter, right after the ending cutscene
363  warning("StringsTable::getString wrong index 0x%X (%d)", index, strings.size());
364  return "";
365  }
366  return strings[index];
367  }
368 
369  void clear() {
370  strings.clear();
371  buffer.clear();
372  }
373 };
374 
376 
377 enum ColorId {
378  // DOS and AGA palettes
379  kITEDOSColorTransBlack = 0x00,
380  kITEDOSColorBrightWhite = 0x01,
381  kITEDOSColorWhite = 0x02,
382  kITEDOSColorLightGrey = 0x04,
383  kITEDOSColorGrey = 0x0a,
384  kITEDOSColorDarkGrey = 0x0b,
385  kITEDOSColorDarkGrey0C = 0x0C,
386  kITEDOSColorBlack = 0x0f,
387  kITEDOSColorYellow60 = 0x60,
388  kITEDOSColorRed = 0x65,
389  kITEDOSColorDarkBlue8a = 0x8a,
390  kITEDOSColorBlue89 = 0x89,
391  kITEDOSColorLightBlue92 = 0x92,
392  kITEDOSColorBlue = 0x93,
393  kITEDOSColorLightBlue94 = 0x94,
394  kITEDOSColorLightBlue96 = 0x96,
395  kITEDOSColorGreen = 0xba,
396 
397  // ECS palette
398 
399  // Constant colors
400  kITEECSColorTransBlack = 0x00,
401  kITEECSColorBrightWhite = 0x4f,
402  kITEECSColorWhite = kITEECSColorBrightWhite,
403  kITEECSColorBlack = 0x50,
404 
405  // ECS palette after the palette switch
406  kITEECSBottomColorGreen = 0x25,
407  kITEECSBottomColorLightBlue96 = 0x28,
408  kITEECSBottomColorWhite = 0x2f,
409  kITEECSBottomColorBrightWhite = 0x2f,
410  kITEECSBottomColorDarkGrey = 0x32,
411  kITEECSBottomColorGrey = 0x36,
412  kITEECSBottomColorBlue = 0x3b,
413  kITEECSBottomColorYellow60 = 0x3e,
414 
415  // ECS palette for options
416  kITEECSOptionsColorLightBlue94 = 0x48,
417  kITEECSOptionsColorBlue = 0x48,
418  kITEECSOptionsColorDarkBlue8a = 0x48,
419  kITEECSOptionsColorLightBlue92 = 0x48,
420  kITEECSOptionsColorLightBlue96 = 0x48,
421  kITEECSOptionsColorDarkGrey0C = 0x49,
422  kITEECSOptionsColorBlack = kITEECSColorBlack,
423  kITEECSOptionsColorBrightWhite = kITEECSColorBrightWhite,
424  kITEECSOptionsColorDarkGrey = 0x52,
425 };
426 
427 enum KnownColor {
428  kKnownColorTransparent,
429  kKnownColorBrightWhite,
430  kKnownColorWhite,
431  kKnownColorBlack,
432 
433  kKnownColorSubtitleTextColor,
434  kKnownColorSubtitleEffectColorPC98,
435  kKnownColorVerbText,
436  kKnownColorVerbTextShadow,
437  kKnownColorVerbTextActive
438 };
439 
440 struct SaveFileData {
441  char name[SAVE_TITLE_SIZE];
442  uint slotNumber;
443 };
444 
446  uint32 type;
447  uint32 size;
448  uint32 version;
449  char name[SAVE_TITLE_SIZE];
450 };
451 
452 inline int objectTypeId(uint16 objectId) {
453  return objectId >> OBJECT_TYPE_SHIFT;
454 }
455 
456 inline int objectIdToIndex(uint16 objectId) {
457  return OBJECT_TYPE_MASK & objectId;
458 }
459 
460 inline uint16 objectIndexToId(int type, int index) {
461  return (type << OBJECT_TYPE_SHIFT) | (OBJECT_TYPE_MASK & index);
462 }
463 
464 class ByteArray : public Common::Array<byte> {
465 public:
470  byte *getBuffer() {
471  return empty() ? NULL : &front();
472  }
473 
474  const byte *getBuffer() const {
475  return empty() ? NULL : &front();
476  }
477 
478  void assign(const ByteArray &src) {
479  resize(src.size());
480  if (!empty()) {
481  memcpy(&front(), &src.front(), size());
482  }
483  }
484 
486  ByteArray(const byte *array, size_type n) : Common::Array<byte>(array, n) {}
487 };
488 
490 public:
491  ByteArrayReadStreamEndian(const ByteArray & byteArray, bool bigEndian = false)
492  : Common::MemoryReadStreamEndian(byteArray.getBuffer(), byteArray.size(), bigEndian),
493  ReadStreamEndian(bigEndian) {
494  }
495 };
496 
497 class SagaEngine : public Engine {
498  friend class Scene;
499 
500 public:
501  // Engine APIs
502  Common::Error run() override;
503  bool hasFeature(EngineFeature f) const override;
504  void syncSoundSettings() override;
505  void pauseEngineIntern(bool pause) override;
506 
507  SagaEngine(OSystem *syst, const SAGAGameDescription *gameDesc);
508  ~SagaEngine() override;
509 
510  void save(const char *fileName, const char *saveName);
511  void load(const char *fileName);
512  uint32 getCurrentLoadVersion() const {
513  return _saveHeader.version;
514  }
515  void fillSaveList();
516  char *calcSaveFileName(uint slotNumber);
517  Common::String getSaveStateName(int slot) const override {
518  return Common::String::format("%s.s%02u", _targetName.c_str(), slot);
519  }
520 
521  SaveFileData *getSaveFile(uint idx);
522  uint getNewSaveSlotNumber() const;
523  bool locateSaveFile(char *saveName, uint &titleNumber);
524  bool isSaveListFull() const {
525  return _saveFilesCount == MAX_SAVES;
526  }
527  uint getSaveFilesCount() const {
528  return isSaveListFull() ? _saveFilesCount : _saveFilesCount + 1;
529  }
530 
531  bool isIHNMDemo() const { return _isIHNMDemo; }
532 
533  bool isITEAmiga() const { return getPlatform() == Common::kPlatformAmiga && getGameId() == GID_ITE; }
534  bool isAGA() const { return _gameDescription->features & GF_AGA_GRAPHICS; }
535  bool isECS() const { return _gameDescription->features & GF_ECS_GRAPHICS; }
536  unsigned getPalNumEntries() const { return isECS() ? 32 : 256; }
537  GameIntroList getIntroList() const { return _gameDescription->introList; }
538 
539  int16 _framesEsc;
540 
541  uint32 _globalFlags;
542  int16 _ethicsPoints[8];
543  int _spiritualBarometer;
544 
545  int _soundVolume;
546  int _speechVolume;
547  bool _subtitlesEnabled;
548  bool _voicesEnabled;
549  bool _voiceFilesExist;
550  int _readingSpeed;
551 
552  bool _copyProtection;
553  bool _musicWasPlaying;
554  bool _isIHNMDemo;
555  bool _hasITESceneSubstitutes;
556 
557  SndRes *_sndRes;
558  Sound *_sound;
559  Music *_music;
560  Anim *_anim;
561  Render *_render;
562  IsoMap *_isoMap;
563  Gfx *_gfx;
564  Script *_script;
565  Actor *_actor;
566  Font *_font;
567  Sprite *_sprite;
568  Scene *_scene;
569  Interface *_interface;
570  Console *_console;
571  Events *_events;
572  PalAnim *_palanim;
573  Puzzle *_puzzle;
574  Resource *_resource;
575 
576 
577  // Random number generator
579 
580 private:
581  bool decodeBGImageRLE(const byte *inbuf, size_t inbuf_len, ByteArray &outbuf);
582  void flipImage(byte *imageBuffer, int columns, int scanlines);
583  void unbankBGImage(byte *dest_buf, const byte *src_buf, int columns, int scanlines);
584  uint32 _previousTicks;
585 
586 public:
587  bool decodeBGImage(const ByteArray &imageData, ByteArray &outputBuffer, int *w, int *h, bool flip = false);
588  bool decodeBGImageMask(const ByteArray &imageData, ByteArray &outputBuffer, int *w, int *h, bool flip = false);
589  const byte *getImagePal(const ByteArray &imageData) {
590  if (imageData.size() <= SAGA_IMAGE_HEADER_LEN) {
591  return NULL;
592  }
593 
594  return &imageData.front() + SAGA_IMAGE_HEADER_LEN;
595  }
596  void loadStrings(StringsTable &stringsTable, const ByteArray &stringsData, bool isBigEndian);
597 
598  const char *getObjectName(uint16 objectId) const;
599 public:
600  int processInput();
601  Point mousePos() const;
602 
603  int getMouseClickCount() const {
604  return _mouseClickCount;
605  }
606 
607  void incrementMouseClickCount() {
608  _mouseClickCount++;
609  }
610 
611  void resetMouseClickCount() {
612  _mouseClickCount = 0;
613  }
614 
615  bool leftMouseButtonPressed() const {
616  return _leftMouseButtonPressed;
617  }
618 
619  bool rightMouseButtonPressed() const {
620  return _rightMouseButtonPressed;
621  }
622 
623  bool mouseButtonPressed() const {
624  return _leftMouseButtonPressed || _rightMouseButtonPressed;
625  }
626 
627  inline int ticksToMSec(int tick) const {
628  return tick * 1000 / kScriptTimeTicksPerSecond;
629  }
630 
631  private:
632  uint _saveFilesCount;
633  SaveFileData _saveFiles[MAX_SAVES];
634  SaveGameHeader _saveHeader;
635 
636  bool _leftMouseButtonPressed;
637  bool _rightMouseButtonPressed;
638  int _mouseClickCount;
639 
640 //current game description
641  int _gameNumber;
642  const SAGAGameDescription *_gameDescription;
643  Common::String _gameTitle;
644  Common::Rect _displayClip;
645 
646 public:
647  int32 _frameCount;
648 
649 public:
650  bool initGame();
651 
652  bool isBigEndian() const;
653  bool isMacResources() const;
654  const GameResourceDescription *getResourceDescription() const;
655 
656  GameResourceList getResourceList() const;
657  GameFontList getFontList() const;
658  GamePatchList getPatchList() const;
659 
660  int getGameId() const;
661  uint32 getFeatures() const;
662  Common::Language getLanguage() const;
663  Common::Platform getPlatform() const;
664  int getGameNumber() const;
665  int getStartSceneNumber() const;
666 
667  const ADGameFileDescription *getFilesDescriptions() const;
668  const ADGameFileDescription *getArchivesDescriptions() const;
669 
670  const Common::Rect &getDisplayClip() const { return _displayClip;}
671  Common::Error loadGameState(int slot) override;
672  Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
673  bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override;
674  bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override;
675  const GameDisplayInfo &getDisplayInfo();
676 
677  int getLanguageIndex();
678  const char *getTextString(int textStringId);
679  void getExcuseInfo(int verb, const char *&textString, int &soundResourceId);
680 
681  void enableKeyMap(int mode);
682 
683 private:
684 
685  int _currentPanelMode;
686 
687 public:
688  ColorId KnownColor2ColorId(KnownColor knownColor);
689  void setTalkspeed(int talkspeed);
690  int getTalkspeed() const;
691 
692 #define ITE_COLOR_DISPATCHER_TYPE(NAME, TYPE) \
693  ColorId iteColor ## TYPE ## NAME() const { return isECS() ? kITEECS ## TYPE ## Color ## NAME : kITEDOSColor ## NAME; }
694 #define ITE_COLOR_DISPATCHER_BOTTOM(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, Bottom)
695 #define ITE_COLOR_DISPATCHER_OPTIONS(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, Options)
696 #define ITE_COLOR_DISPATCHER(NAME) ITE_COLOR_DISPATCHER_TYPE(NAME, )
697 
698  ITE_COLOR_DISPATCHER(Black)
699  ITE_COLOR_DISPATCHER(TransBlack)
700  ITE_COLOR_DISPATCHER(BrightWhite)
701  ITE_COLOR_DISPATCHER(White)
702 
703  ITE_COLOR_DISPATCHER_BOTTOM(DarkGrey)
704  ITE_COLOR_DISPATCHER_BOTTOM(Blue)
705  ITE_COLOR_DISPATCHER_BOTTOM(Grey)
706  ITE_COLOR_DISPATCHER_BOTTOM(White)
707  ITE_COLOR_DISPATCHER_BOTTOM(BrightWhite)
708  ITE_COLOR_DISPATCHER_BOTTOM(Green)
709 
710  ITE_COLOR_DISPATCHER_OPTIONS(DarkGrey)
711  ITE_COLOR_DISPATCHER_OPTIONS(LightBlue92)
712  ITE_COLOR_DISPATCHER_OPTIONS(LightBlue94)
713  ITE_COLOR_DISPATCHER_OPTIONS(LightBlue96)
714  ITE_COLOR_DISPATCHER_OPTIONS(DarkBlue8a)
715  ITE_COLOR_DISPATCHER_OPTIONS(DarkGrey0C)
716  ITE_COLOR_DISPATCHER_OPTIONS(Blue)
717  ITE_COLOR_DISPATCHER_OPTIONS(BrightWhite)
718 #undef ITE_COLOR_DISPATCHER
719 #undef ITE_COLOR_DISPATCHER_BOTTOM
720 #undef ITE_COLOR_DISPATCHER_OPTIONS
721 #undef ITE_COLOR_DISPATCHER_TYPE
722 };
723 
724 
725 } // End of namespace Saga
726 
727 #endif
Definition: saga.h:497
byte * getBuffer()
Definition: saga.h:470
Definition: str.h:59
Definition: sndres.h:37
Definition: font.h:144
Definition: actor.h:461
EngineFeature
Definition: engine.h:253
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
Definition: saga.h:270
Definition: error.h:84
void warning(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
void clear()
Definition: array.h:320
Definition: isomap.h:149
Definition: detection.h:109
Definition: random.h:44
Definition: saga.h:356
Definition: rect.h:144
Definition: palanim.h:37
Definition: render.h:51
T & front()
Definition: array.h:217
Definition: displayinfo.h:43
Definition: saga.h:464
Definition: sound.h:60
Definition: memstream.h:103
Definition: resource.h:199
Definition: script.h:272
Definition: actor.h:34
Definition: saga.h:351
Definition: ustr.h:57
Definition: scene.h:176
Definition: console.h:31
Definition: puzzle.h:37
Definition: rect.h:45
Definition: saga.h:440
Definition: saga.h:489
size_type size() const
Definition: array.h:315
Definition: saga.h:289
Definition: sprite.h:46
Definition: saga.h:445
Common::String getSaveStateName(int slot) const override
Definition: saga.h:517
uint size_type
Definition: array.h:59
Definition: animation.h:100
Definition: system.h:161
Definition: saga.h:295
Definition: music.h:44
Definition: gfx.h:140
Definition: engine.h:144
Definition: interface.h:176
Platform
Definition: platform.h:46
Definition: events.h:160
Language
Definition: language.h:45
Definition: advancedDetector.h:78