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
50namespace Saga {
51
52class SndRes;
53class Sound;
54class Music;
55class Anim;
56class Render;
57class IsoMap;
58class Gfx;
59class Script;
60class Actor;
61class Font;
62class Sprite;
63class Scene;
64class Interface;
65class Console;
66class Events;
67class PalAnim;
68class Puzzle;
69class Resource;
70
71class 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
96enum ERRORCODE {
97 FAILURE = -1,
98 SUCCESS = 0
99};
100
101enum 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
137extern const char *engineKeyMapId;
138extern const char *gameKeyMapId;
139extern const char *optionKeyMapId;
140extern const char *saveKeyMapId;
141extern const char *loadKeyMapId;
142extern const char *quitKeyMapId;
143extern const char *converseKeyMapId;
144
145enum 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
182enum 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
209enum 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
293struct GameDisplayInfo;
294
296 const char *fileName;
297 uint16 fileType;
298 uint32 resourceId;
299};
300
301enum GameObjectTypes {
302 kGameObjectNone = 0,
303 kGameObjectActor = 1,
304 kGameObjectObject = 2,
305 kGameObjectHitZone = 3,
306 kGameObjectStepZone = 4
307};
308
309enum 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
317enum 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
328enum 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
352 int width;
353 int height;
354};
355
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
377enum 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
427enum KnownColor {
428 kKnownColorTransparent,
429 kKnownColorBrightWhite,
430 kKnownColorWhite,
431 kKnownColorBlack,
432
433 kKnownColorSubtitleTextColor,
434 kKnownColorSubtitleEffectColorPC98,
435 kKnownColorVerbText,
436 kKnownColorVerbTextShadow,
437 kKnownColorVerbTextActive
438};
439
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
452inline int objectTypeId(uint16 objectId) {
453 return objectId >> OBJECT_TYPE_SHIFT;
454}
455
456inline int objectIdToIndex(uint16 objectId) {
457 return OBJECT_TYPE_MASK & objectId;
458}
459
460inline uint16 objectIndexToId(int type, int index) {
461 return (type << OBJECT_TYPE_SHIFT) | (OBJECT_TYPE_MASK & index);
462}
463
464class ByteArray : public Common::Array<byte> {
465public:
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
485 ByteArray() : Common::Array<byte>() {}
486 ByteArray(const byte *array, size_type n) : Common::Array<byte>(array, n) {}
487};
488
490public:
491 ByteArrayReadStreamEndian(const ByteArray & byteArray, bool bigEndian = false)
492 : Common::MemoryReadStreamEndian(byteArray.getBuffer(), byteArray.size(), bigEndian),
493 ReadStreamEndian(bigEndian) {
494 }
495};
496
497class SagaEngine : public Engine {
498 friend class Scene;
499
500public:
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
580private:
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
586public:
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;
599public:
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
646public:
647 int32 _frameCount;
648
649public:
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
683private:
684
685 int _currentPanelMode;
686
687public:
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
byte & front()
Definition: array.h:218
uint size_type
Definition: array.h:62
size_type size() const
Definition: array.h:316
void clear()
Definition: array.h:321
void resize(size_type newSize)
Definition: array.h:412
bool empty() const
Definition: array.h:352
Definition: error.h:81
Definition: memstream.h:103
Definition: random.h:44
ReadStreamEndian(bool bigEndian)
Definition: stream.h:865
Definition: str.h:59
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
Definition: ustr.h:57
Definition: engine.h:149
const Common::String _targetName
Definition: engine.h:186
EngineFeature
Definition: engine.h:282
Definition: system.h:166
Definition: saga.h:464
byte * getBuffer()
Definition: saga.h:470
Definition: saga.h:489
Definition: saga.h:497
Common::Error loadGameState(int slot) override
bool hasFeature(EngineFeature f) const override
Common::Error run() override
void syncSoundSettings() override
void pauseEngineIntern(bool pause) override
bool canLoadGameStateCurrently(Common::U32String *msg=nullptr) override
Common::String getSaveStateName(int slot) const override
Definition: saga.h:517
Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave=false) override
bool canSaveGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: scene.h:176
Language
Definition: language.h:45
Platform
Definition: platform.h:93
void warning(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
Definition: algorithm.h:29
Definition: actor.h:34
Definition: advancedDetector.h:78
Definition: rect.h:536
Definition: display_client.h:58
Definition: displayinfo.h:43
Definition: saga.h:289
Definition: saga.h:295
Definition: saga.h:270
Definition: saga.h:351
Definition: detection.h:109
Definition: saga.h:440
Definition: saga.h:445
Definition: saga.h:356