ScummVM API documentation
hypno.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 HYPNO_H
23 #define HYPNO_H
24 
25 #include "common/array.h"
26 #include "common/compression/installshieldv3_archive.h"
27 #include "common/random.h"
28 #include "common/serializer.h"
29 #include "common/str-array.h"
30 #include "common/stream.h"
31 #include "engines/engine.h"
32 #include "graphics/font.h"
33 #include "graphics/fontman.h"
34 #include "graphics/surface.h"
35 
36 #include "hypno/grammar.h"
37 #include "hypno/libfile.h"
38 
39 namespace Image {
40 class ImageDecoder;
41 }
42 
43 struct ADGameDescription;
44 
45 namespace Hypno {
46 
47 // debug channels
48 enum {
49  kHypnoDebugMedia = 1 << 0,
50  kHypnoDebugParser = 1 << 1,
51  kHypnoDebugArcade = 1 << 2,
52  kHypnoDebugScene = 1 << 3
53 };
54 
55 // Player positions
56 
57 enum PlayerPosition {
58  kPlayerTop = 'T',
59  kPlayerBottom = 'B',
60  kPlayerLeft = 'L',
61  kPlayerRight = 'R'
62 };
63 
64 // Common colors
65 enum HypnoColors {
66  kHypnoNoColor = -1,
67  kHypnoColorRed = 250,
68  kHypnoColorGreen = 251,
69  kHypnoColorWhiteOrBlue = 252,
70  kHypnoColorYellow = 253,
71  kHypnoColorBlack = 254,
72  kHypnoColorCyan = 255
73 };
74 
75 // Spider colors
76 enum SpiderColors {
77  kSpiderColorWhite = 248,
78  kSpiderColorBlue = 252,
79 };
80 
81 class HypnoEngine;
82 
83 class CursorCache {
84 private:
85  HypnoEngine *_vm;
86  Common::String _filename;
87  uint32 _frame;
88  byte *_palette;
89  Graphics::Surface *_surface;
90 
91 public:
92  CursorCache(HypnoEngine *vm) : _vm(vm), _filename(""), _frame(0), _palette(nullptr), _surface(nullptr) {}
93 
94  ~CursorCache() {
95  if (_surface) {
96  _surface->free();
97  delete _surface;
98  }
99  free(_palette);
100  }
101 
102  Graphics::Surface *getCursor(const Common::String &cursor, uint32 n, byte **palette);
103 };
104 
105 class HypnoEngine : public Engine {
106 private:
107  Image::ImageDecoder *_image;
108 
109 public:
110  HypnoEngine(OSystem *syst, const ADGameDescription *gd);
111  ~HypnoEngine();
112 
113  const ADGameDescription *_gameDescription;
114  bool isDemo() const;
115  Common::Language _language;
116  Common::Platform _platform;
117  Common::String _variant;
118  bool _cheatsEnabled;
119  bool _infiniteHealthCheat;
120  bool _infiniteAmmoCheat;
121  bool _unlockAllLevels;
122  bool _restoredContentEnabled;
123 
124  Audio::SoundHandle _soundHandle;
125  Common::InstallShieldV3 _installerArchive;
126  Common::List<LibFile*> _archive;
127 
128  Common::Error run() override;
129  Levels _levels;
131  virtual void resetSceneState();
132  bool checkSceneCompleted();
133  bool checkLevelWon();
134  void runLevel(Common::String &name);
135  void runScene(Scene *scene);
136  virtual void runBeforeArcade(ArcadeShooting *arc);
137  virtual void runAfterArcade(ArcadeShooting *arc);
138  void runArcade(ArcadeShooting *arc);
139  // For some menus and hardcoded puzzles
140  virtual void runCode(Code *code);
141  // Level transitions
142  void runTransition(Transition *trans);
143 
144  void restartGame();
145  void clearAreas();
146  void initializePath(const Common::FSNode &gamePath) override;
147  virtual void loadAssets();
148 
149  // Parsing
150  void splitArcadeFile(const Common::String &filename, Common::String &arc, Common::String &list);
151  void parseArcadeShooting(const Common::String &prefix, const Common::String &name, const Common::String &data);
152  SegmentShootsSequence parseShootList(const Common::String &name, const Common::String &data);
153  void loadArcadeLevel(const Common::String &current, const Common::String &nextWin, const Common::String &nextLose, const Common::String &prefix);
154  void loadSceneLevel(const Common::String &current, const Common::String &next, const Common::String &prefix);
155  void loadSceneLevel(const char *buf, const Common::String &name, const Common::String &next, const Common::String &prefix);
156 
157  LibFile *loadLib(const Common::Path &prefix, const Common::Path &filename, bool encrypted);
158 
159  // User input
160  void clickedHotspot(Common::Point);
161  virtual bool hoverHotspot(Common::Point);
162 
163  // Cursors
164  bool cursorPauseMovie(Common::Point);
165  bool cursorExit(Common::Point);
166  bool cursorMask(Common::Point);
167 
168  virtual void loadGame(const Common::String &nextLevel, int score, int puzzleDifficulty, int combatDifficulty);
169  bool canLoadGameStateCurrently(Common::U32String *msg = nullptr) override { return (isDemo() ? false : true); }
170  bool canSaveAutosaveCurrently() override { return false; }
171  bool canSaveGameStateCurrently(Common::U32String *msg = nullptr) override { return (isDemo() ? false : true); }
172  Common::String _checkpoint;
173 
174  Common::Path _prefixDir;
175  Common::Path convertPath(const Common::String &);
176  void playVideo(MVideo &video);
177  void skipVideo(MVideo &video);
178 
179  Graphics::Surface *decodeFrame(const Common::String &name, int frame, byte **palette = nullptr);
180  Frames decodeFrames(const Common::String &name);
181  void loadImage(const Common::String &file, int x, int y, bool transparent, bool palette = false, int frameNumber = 0);
182  void drawImage(Graphics::Surface &image, int x, int y, bool transparent);
183  void loadPalette(const Common::String &fname);
184  void loadPalette(const byte *palette, uint32 offset, uint32 size);
185  byte *getPalette(uint32 idx);
186 
187  // Cursors
188  Common::String _defaultCursor;
189  uint32 _defaultCursorIdx;
190  CursorCache *_cursorCache;
191  void disableCursor();
192  void defaultCursor();
193  virtual void changeCursor(const Common::String &cursor, uint32 n, bool centerCursor = false);
194  virtual void changeCursor(const Common::String &cursor);
195  virtual void changeCursor(const Graphics::Surface &entry, byte *palette, bool centerCursor = false);
196 
197  // Actions
198  virtual void runMenu(Hotspots *hs, bool only_menu = false);
199  void runBackground(Background *a);
200  void runOverlay(Overlay *a);
201  void runMice(Mice *a);
202  void runEscape();
203  void runSave(Save *a);
204  void runLoad(Load *a);
205  void runLoadCheckpoint(LoadCheckpoint *a);
206  void runTimer(Timer *a);
207  void runQuit(Quit *a);
208  void runCutscene(Cutscene *a);
209  void runIntro(Intro *a);
210  void runPlay(Play *a);
211  void runSound(Sound *a);
212  void runPalette(Palette *a);
213  void runAmbient(Ambient *a);
214  void runWalN(WalN *a);
215  bool runGlobal(Global *a);
216  void runTalk(Talk *a);
217  void runSwapPointer(SwapPointer *a);
218  void runChangeLevel(ChangeLevel *a);
219  virtual void drawBackToMenu(Hotspot *h);
220 
221  // Screen
222  int _screenW, _screenH;
223  Graphics::PixelFormat _pixelFormat;
224  void changeScreenMode(const Common::String &mode);
225  Graphics::Surface *_compositeSurface;
226  uint32 _transparentColor;
227  Common::Rect screenRect;
228  void updateScreen(MVideo &video);
229  void updateVideo(MVideo &video);
230  void drawScreen();
231 
232  // intros
233  void runIntro(MVideo &video);
234  void runIntros(Videos &videos);
236 
237  // levels
238  Common::String _nextLevel;
239  Common::String _currentLevel;
240  virtual Common::String findNextLevel(const Common::String &level);
241  virtual Common::String findNextLevel(const Transition *trans);
242  uint32 _levelId;
243 
244  // hotspots
245  Hotspots *_nextHotsToAdd;
246  Hotspots *_nextHotsToRemove;
247  HotspotsStack stack;
248 
249  // Movies
250  Videos _nextSequentialVideoToPlay;
251  Videos _nextParallelVideoToPlay;
252  Videos _escapeSequentialVideoToPlay;
253  Videos _videosPlaying;
254  Videos _videosLooping;
255  MVideo *_masks;
256  MVideo *_additionalVideo;
257  const Graphics::Surface *_mask;
258 
259  // Sounds
260  Filename _soundPath;
261  Filename _music;
262  int _musicRate;
263  bool _musicStereo;
264  bool _doNotStopSounds;
265  void playSound(const Filename &filename, uint32 loops, uint32 sampleRate = 22050, bool stereo = false);
266  void stopSound();
267 
268  // Arcade
269  Common::String _arcadeMode;
270  MVideo *_background;
271  Filename _currentPalette;
272  virtual bool availableObjectives();
273  virtual bool checkArcadeObjectives();
274  ArcadeTransitions _transitions;
275  virtual bool checkTransition(ArcadeTransitions &transitions, ArcadeShooting *arc);
276  virtual Common::Point getPlayerPosition(bool needsUpdate);
277  virtual Common::Point computeTargetPosition(const Common::Point &mousePos);
278  virtual int detectTarget(const Common::Point &mousePos);
279  virtual void pressedKey(const int keycode);
280  virtual bool clickedPrimaryShoot(const Common::Point &mousePos);
281  virtual bool clickedSecondaryShoot(const Common::Point &mousePos);
282  virtual void drawShoot(const Common::Point &mousePos);
283  virtual bool shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool secondary);
284  virtual void hitPlayer();
285  virtual void missedTarget(Shoot *s, ArcadeShooting *arc);
286  virtual void missNoTarget(ArcadeShooting *arc);
287  virtual byte *getTargetColor(Common::String name, int levelId);
288 
289  // Segments
290  Segments _segments;
291  uint32 _segmentIdx;
292  uint32 _segmentOffset;
293  uint32 _segmentRepetition;
294  uint32 _segmentRepetitionMax;
295  uint32 _segmentShootSequenceOffset;
296  uint32 _segmentShootSequenceMax;
297  ShootSequence _shootSequence;
298  virtual void findNextSegment(ArcadeShooting *arc);
299  virtual void initSegment(ArcadeShooting *arc);
300 
301  ArcadeStats _stats;
302  void resetStatistics();
303  void incLivesUsed();
304  void incShotsFired();
305  void incEnemyHits();
306  void incEnemyTargets();
307  void incTargetsDestroyed();
308  void incTargetsMissed();
309  void incFriendliesEncountered();
310  void incInfoReceived();
311 
312  void incScore(int inc);
313  void incBonus(int inc);
314 
315  uint32 killRatio();
316  uint32 accuracyRatio();
317 
318  Common::String _difficulty;
319  bool _skipLevel;
320  bool _loseLevel;
321  bool _skipDefeatVideo;
322  bool _skipNextVideo;
323 
324  virtual void drawCursorArcade(const Common::Point &mousePos);
325  virtual void drawPlayer();
326  virtual void drawHealth();
327  virtual void drawAmmo();
328  int _health;
329  int _maxHealth;
330 
331  int _ammo;
332  int _maxAmmo;
333 
334  int _score;
335  int _bonus;
336  int _lives;
337 
338  Common::String _healthString;
339  Common::String _scoreString;
340  Common::String _objString;
341  Common::String _targetString;
342  Common::String _directionString;
343  Common::String _enterNameString;
344 
345  Filename _shootSound;
346  Filename _hitSound;
347  Filename _additionalSound;
348  Shoots _shoots;
349  Frames _playerFrames;
350  int _playerFrameIdx;
351  Common::List<int> _playerFrameSeps;
352  int _playerFrameStart;
353  int _playerFrameSep;
354  int _playerFrameEnd;
355 
356  // Objectives
357  uint32 _objIdx;
358  uint32 _objKillsCount[2];
359  uint32 _objMissesCount[2];
360  uint32 _objKillsRequired[2];
361  uint32 _objMissesAllowed[2];
362 
363  // Fonts
364  Common::BitArray _font05;
365  Common::BitArray _font08;
366  virtual void loadFonts(const Common::String prefix = "");
367  virtual void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c);
368 
369  // Conversation
370  Actions _conversation;
371  bool _refreshConversation;
372  virtual void showConversation();
373  virtual void endConversation();
374  virtual void rightClickedConversation(const Common::Point &mousePos);
375  virtual void leftClickedConversation(const Common::Point &mousePos);
376  virtual bool hoverConversation(const Common::Point &mousePos);
377  // Credits
378  virtual void showCredits();
379 
380  // Timers
381  int32 _countdown;
382  bool _timerStarted;
383  bool _keepTimerDuringScenes;
384  bool startAlarm(uint32, Common::String *);
385  bool startCountdown(uint32);
386  void removeTimers();
387 
388  // Random
389  Common::RandomSource *_rnd;
390 };
391 
392 struct chapterEntry {
393  int id;
394  int energyPos[2];
395  int scorePos[2];
396  int objectivesPos[2];
397  int ammoPos[2];
398  int ammoOffset;
399  int targetColor;
400 };
401 
402 class WetEngine : public HypnoEngine {
403 public:
404  WetEngine(OSystem *syst, const ADGameDescription *gd);
406  Common::Array<int> _ids;
407  int _lastLevel;
408  Common::String _name;
409 
410  void loadAssets() override;
411  void loadAssetsDemoDisc();
412  void loadAssetsEarlyDemo();
413  void loadAssetsGen4();
414  void loadAssetsPCW();
415  void loadAssetsPCG();
416  void loadAssetsFullGame();
417  void loadAssetsNI();
418 
419  void loadFonts(const Common::String prefix = "") override;
420  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
421  void changeCursor(const Common::String &cursor) override;
422 
423  void showCredits() override;
424  bool clickedSecondaryShoot(const Common::Point &mousePos) override;
425  void drawShoot(const Common::Point &target) override;
426  void drawPlayer() override;
427  void drawHealth() override;
428  void drawAmmo() override;
429  void hitPlayer() override;
430  void drawCursorArcade(const Common::Point &mousePos) override;
431  Common::Point computeTargetPosition(const Common::Point &mousePos) override;
432  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
433  void missNoTarget(ArcadeShooting *arc) override;
434 
435  void runCode(Code *code) override;
436  Common::String findNextLevel(const Common::String &level) override;
437  Common::String findNextLevel(const Transition *trans) override;
438 
439  // Saves
440  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
441  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
442  bool loadProfile(const Common::String &name);
443  void saveProfile(const Common::String &name, int levelId);
444 
445  // Arcade
446  Common::Point getPlayerPosition(bool needsUpdate) override;
447  bool checkTransition(ArcadeTransitions &transitions, ArcadeShooting *arc) override;
448  void pressedKey(const int keycode) override;
449  void runBeforeArcade(ArcadeShooting *arc) override;
450  void runAfterArcade(ArcadeShooting *arc) override;
451  void findNextSegment(ArcadeShooting *arc) override;
452  void initSegment(ArcadeShooting *arc) override;
453  byte *getTargetColor(Common::String name, int levelId) override;
454 
455  bool hasFeature(EngineFeature f) const override {
456  return (f == kSupportsReturnToLauncher);
457  }
458 
459 private:
460  Common::String getLocalizedString(const Common::String name);
461  uint16 getNextChar(const Common::String &str, uint32 &c);
462  void drawGlyph(const Common::BitArray &font, int x, int y, int bitoffset, int width, int height, int pitch, uint32 color, bool invert);
463  void drawKoreanChar(uint16 chr, int &curx, int y, uint32 color);
464  void runMainMenu(Code *code);
465  void runLevelMenu(Code *code);
466  void runCheckLives(Code *code);
467  void endCredits(Code *code);
468  void showDemoScore();
469  uint32 findPaletteIndexZones(uint32 id);
470 
471  Common::List<int> _scoreMilestones;
472  void restoreScoreMilestones(int score);
473  bool checkScoreMilestones(int score);
474 
475 
476  Frames _c33PlayerCursor;
477  Common::Point _c33PlayerPosition;
478  Common::List<PlayerPosition> _c33PlayerDirection;
479  bool _c33UseMouse;
480  void generateStaticEffect();
481 
482  Common::BitArray _fontg9a;
483  Common::Array<uint32> _c40SegmentPath;
484  Common::Array<uint32> _c40SegmentNext;
485  int _c40SegmentIdx;
486  int _c40lastTurn;
487  int _c50LeftTurns;
488  int _c50RigthTurns;
489 };
490 
491 class SpiderEngine : public HypnoEngine {
492 public:
493  SpiderEngine(OSystem *syst, const ADGameDescription *gd);
494  void loadAssets() override;
495  void loadAssetsDemo();
496  void loadAssetsFullGame();
497  void showCredits() override;
498 
499  void drawCursorArcade(const Common::Point &mousePos) override;
500  void drawShoot(const Common::Point &target) override;
501  void drawPlayer() override;
502  void drawHealth() override;
503  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
504  void hitPlayer() override;
505 
506  // Arcade
507  void pressedKey(const int keycode) override;
508  void runBeforeArcade(ArcadeShooting *arc) override;
509  void runAfterArcade(ArcadeShooting *arc) override;
510  void findNextSegment(ArcadeShooting *arc) override;
511  void initSegment(ArcadeShooting *arc) override;
512  byte *getTargetColor(Common::String name, int levelId) override;
513 
514  void drawBackToMenu(Hotspot *h) override;
515  void runCode(Code *code) override;
516  Common::String findNextLevel(const Common::String &level) override;
517  Common::String findNextLevel(const Transition *trans) override;
518 
519  void loadFonts(const Common::String prefix = "") override;
520  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
521 
522  void showConversation() override;
523  void endConversation() override;
524  void rightClickedConversation(const Common::Point &mousePos) override;
525  void leftClickedConversation(const Common::Point &mousePos) override;
526  bool hoverConversation(const Common::Point &mousePos) override;
527 
528  void loadGame(const Common::String &nextLevel, int score, int puzzleDifficulty, int combatDifficulty) override;
529  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
530  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
531  bool canSaveAutosaveCurrently() override {
532  return false; // No hypno engine should perform autosave using the default implementation
533  }
534 
535  bool hasFeature(EngineFeature f) const override {
536  return (f == kSupportsSavingDuringRuntime || f == kSupportsLoadingDuringRuntime || f == kSupportsReturnToLauncher);
537  }
538 
539 private:
540  void runMatrix(Code *code);
541  void addIngredient(Code *code);
542  void checkMixture(Code *code);
543  void runNote(Code *code);
544  void runFusePanel(Code *code);
545  void runRecept(Code *code);
546  void runOffice(Code *code);
547  void runFileCabinet(Code *code);
548  void runLock(Code *code);
549  void runFuseBox(Code *code);
550  void runGiveUp();
551  void showScore(const Common::String prefix);
552 
553  uint32 _currentPlayerPosition;
554  uint32 _lastPlayerPosition;
555 
556  bool _fuseState[2][10] = {};
557  bool _isFuseRust = true;
558  bool _isFuseUnreadable = false;
559  bool ingredients[7] = {};
560 
561  Common::Rect _h1Area;
562  Common::Rect _h2Area;
563  Common::Rect _h3Area;
564 
565  const Graphics::Font *_font;
566 };
567 
568 class BoyzEngine : public HypnoEngine {
569 public:
570  BoyzEngine(OSystem *syst, const ADGameDescription *gd);
571  ~BoyzEngine();
572  Common::String _name;
573  Common::Array<int> _ids;
574  int _lastLevel;
575  bool _flashbackMode;
576  void loadAssets() override;
577  void runCode(Code *code) override;
578  Common::String findNextLevel(const Common::String &level) override;
579  Common::String findNextLevel(const Transition *trans) override;
580 
581  // Scenes
582  void resetSceneState() override;
583  void runMenu(Hotspots *hs, bool only_menu = false) override;
584  bool hoverHotspot(Common::Point) override;
585 
586  // Arcade
587  void runBeforeArcade(ArcadeShooting *arc) override;
588  void runAfterArcade(ArcadeShooting *arc) override;
589  void pressedKey(const int keycode) override;
590  int detectTarget(const Common::Point &mousePos) override;
591  void drawCursorArcade(const Common::Point &mousePos) override;
592  bool shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool secondary) override;
593  bool clickedSecondaryShoot(const Common::Point &mousePos) override;
594  void showCredits() override;
595  // Stats
596  void showArcadeStats(int territory, const ArcadeStats &data);
597  ArcadeStats _lastStats;
598  ArcadeStats _globalStats;
599 
600  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
601  void drawHealth() override;
602  void drawAmmo() override;
603  void drawShoot(const Common::Point &target) override;
604  void hitPlayer() override;
605  void drawPlayer() override;
606  void findNextSegment(ArcadeShooting *arc) override;
607  void initSegment(ArcadeShooting *arc) override;
608  bool checkTransition(ArcadeTransitions &transitions, ArcadeShooting *arc) override;
609 
610  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
611 
612  // Saves
613  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
614  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
615  Common::StringArray listProfiles();
616  bool loadProfile(const Common::String &name);
617  void saveProfile(const Common::String &name, int levelId);
618 
619  private:
620  void renderHighlights(Hotspots *hs);
621  void waitForUserClick(uint32 timeout);
622  int pickABox();
623  int _selectedCorrectBox;
624  char selectDirection();
625 
626  void runMainMenu(Code *code);
627  bool runExitMenu();
628  void runRetryMenu(Code *code);
629  void runCheckC3(Code *code);
630  void runCheckHo(Code *code);
631  void runCheckC5(Code *code);
632  void runAlarmC5(Code *code);
633  void runDifficultyMenu(Code *code);
634  void endCredits(Code *code);
635  int getTerritory(const Common::String &level);
636  Common::String lastLevelTerritory(const Common::String &level);
637  Common::String firstLevelTerritory(const Common::String &level);
638 
639  void loadSceneState(Common::SeekableReadStream *stream);
640  void saveSceneState(Common::WriteStream *stream);
641  void unlockAllLevels();
642 
643  int _previousHealth;
644  Graphics::Surface _healthBar[7];
645  Graphics::Surface _ammoBar[7];
646  Graphics::Surface _portrait[7];
647  Filename _deathDay[7];
648  Filename _deathNight[7];
649 
650  Filename _weaponShootSound[8];
651  Filename _weaponReloadSound[8];
652  Filename _heySound[7];
653  int _weaponMaxAmmo[8];
654 
655  byte *_crosshairsPalette;
656  Graphics::Surface _crosshairsInactive[8];
657  Graphics::Surface _crosshairsActive[8];
658  Graphics::Surface _crosshairsTarget[8];
659  Graphics::Surface _leftArrowPointer;
660  Graphics::Surface _rightArrowPointer;
661  Graphics::Surface _crossPointer;
662 
663  void updateFromScript();
664  bool checkCup(const Common::String &name);
665 
666  Script _currentScript;
667  ScriptMode _currentMode;
668  uint32 _currentActor;
669  uint32 _currentWeapon;
670  Common::Array<Filename> _warningVideosDay;
671  Common::Array<Filename> _warningVideosNight;
672  Common::Array<Filename> _warningAlarmVideos;
673  Filename _warningHostage;
674 
675  Common::Array<Filename> _deathVideo;
676  Common::HashMap<Common::String, bool> _shootsDestroyed;
677 
678  bool hasFeature(EngineFeature f) const override {
679  return (f == kSupportsReturnToLauncher);
680  }
681 };
682 
683 } // End of namespace Hypno
684 
685 #endif
bool canSaveAutosaveCurrently() override
Definition: hypno.h:531
Definition: grammar.h:732
Definition: image_decoder.h:52
Definition: grammar.h:333
Definition: str.h:59
Definition: installshieldv3_archive.h:35
Definition: font.h:83
Definition: hypno.h:568
Definition: surface.h:67
Definition: grammar.h:359
EngineFeature
Definition: engine.h:253
Definition: grammar.h:121
Definition: libfile.h:39
Definition: stream.h:77
Definition: error.h:84
Definition: grammar.h:221
Definition: grammar.h:244
Definition: grammar.h:440
Definition: pixelformat.h:138
Definition: grammar.h:152
Definition: advancedDetector.h:163
Definition: random.h:44
Definition: hypno.h:392
Definition: grammar.h:214
Definition: grammar.h:235
Definition: hypno.h:491
Definition: list.h:44
Definition: rect.h:144
Definition: path.h:52
Definition: grammar.h:707
Definition: stream.h:745
Definition: grammar.h:228
Definition: mixer.h:49
bool canLoadGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: hypno.h:169
Definition: hypno.h:402
Definition: grammar.h:187
Definition: grammar.h:48
Definition: hypno.h:105
Definition: grammar.h:262
Definition: hashmap.h:85
Definition: ustr.h:57
Definition: grammar.h:311
Definition: fs.h:69
Definition: bitarray.h:29
Definition: rect.h:45
Definition: grammar.h:35
Definition: grammar.h:253
bool canSaveGameStateCurrently(Common::U32String *msg=nullptr) override
Definition: hypno.h:171
Definition: grammar.h:132
bool hasFeature(EngineFeature f) const override
Definition: hypno.h:455
Definition: grammar.h:600
Definition: grammar.h:745
Definition: grammar.h:141
Definition: grammar.h:277
Definition: grammar.h:207
Definition: grammar.h:104
bool hasFeature(EngineFeature f) const override
Definition: hypno.h:535
Definition: system.h:161
Definition: hypno.h:83
bool canSaveAutosaveCurrently() override
Definition: hypno.h:170
Definition: movie_decoder.h:32
Definition: engine.h:144
Definition: grammar.h:395
Definition: grammar.h:170
Platform
Definition: platform.h:46
Definition: grammar.h:294
Language
Definition: language.h:45