ScummVM API documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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,
50  kHypnoDebugParser,
51  kHypnoDebugArcade,
52  kHypnoDebugScene,
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  virtual bool checkRButtonUp();
289  virtual void setRButtonUp(const bool val);
290 
291  // Segments
292  Segments _segments;
293  uint32 _segmentIdx;
294  uint32 _segmentOffset;
295  uint32 _segmentRepetition;
296  uint32 _segmentRepetitionMax;
297  uint32 _segmentShootSequenceOffset;
298  uint32 _segmentShootSequenceMax;
299  ShootSequence _shootSequence;
300  virtual void findNextSegment(ArcadeShooting *arc);
301  virtual void initSegment(ArcadeShooting *arc);
302 
303  ArcadeStats _stats;
304  void resetStatistics();
305  void incLivesUsed();
306  void incShotsFired();
307  void incEnemyHits();
308  void incEnemyTargets();
309  void incTargetsDestroyed();
310  void incTargetsMissed();
311  void incFriendliesEncountered();
312  void incInfoReceived();
313 
314  void incScore(int inc);
315  void incBonus(int inc);
316 
317  uint32 killRatio();
318  uint32 accuracyRatio();
319 
320  Common::String _difficulty;
321  bool _skipLevel;
322  bool _loseLevel;
323  bool _skipDefeatVideo;
324  bool _skipNextVideo;
325 
326  virtual void drawCursorArcade(const Common::Point &mousePos);
327  virtual void drawPlayer();
328  virtual void drawHealth();
329  virtual void drawAmmo();
330  int _health;
331  int _maxHealth;
332 
333  int _ammo;
334  int _maxAmmo;
335 
336  int _score;
337  int _bonus;
338  int _lives;
339 
340  Common::String _healthString;
341  Common::String _scoreString;
342  Common::String _objString;
343  Common::String _targetString;
344  Common::String _directionString;
345  Common::String _enterNameString;
346 
347  Filename _shootSound;
348  Filename _hitSound;
349  Filename _additionalSound;
350  Shoots _shoots;
351  Frames _playerFrames;
352  int _playerFrameIdx;
353  Common::List<int> _playerFrameSeps;
354  int _playerFrameStart;
355  int _playerFrameSep;
356  int _playerFrameEnd;
357 
358  // Objectives
359  uint32 _objIdx;
360  uint32 _objKillsCount[2];
361  uint32 _objMissesCount[2];
362  uint32 _objKillsRequired[2];
363  uint32 _objMissesAllowed[2];
364 
365  // Fonts
366  Common::BitArray _font05;
367  Common::BitArray _font08;
368  virtual void loadFonts(const Common::String prefix = "");
369  virtual void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c);
370 
371  // Conversation
372  Actions _conversation;
373  bool _refreshConversation;
374  virtual void showConversation();
375  virtual void endConversation();
376  virtual void rightClickedConversation(const Common::Point &mousePos);
377  virtual void leftClickedConversation(const Common::Point &mousePos);
378  virtual bool hoverConversation(const Common::Point &mousePos);
379  // Credits
380  virtual void showCredits();
381 
382  // Timers
383  int32 _countdown;
384  bool _timerStarted;
385  bool _keepTimerDuringScenes;
386  bool startAlarm(uint32, Common::String *);
387  bool startCountdown(uint32);
388  void removeTimers();
389 
390  // Random
391  Common::RandomSource *_rnd;
392 };
393 
394 struct chapterEntry {
395  int id;
396  int energyPos[2];
397  int scorePos[2];
398  int objectivesPos[2];
399  int ammoPos[2];
400  int ammoOffset;
401  int targetColor;
402 };
403 
404 class WetEngine : public HypnoEngine {
405 public:
406  WetEngine(OSystem *syst, const ADGameDescription *gd);
408  Common::Array<int> _ids;
409  int _lastLevel;
410  Common::String _name;
411 
412  void loadAssets() override;
413  void loadAssetsDemoDisc();
414  void loadAssetsEarlyDemo();
415  void loadAssetsGen4();
416  void loadAssetsPCW();
417  void loadAssetsPCG();
418  void loadAssetsFullGame();
419  void loadAssetsNI();
420 
421  void loadFonts(const Common::String prefix = "") override;
422  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
423  void changeCursor(const Common::String &cursor) override;
424 
425  void showCredits() override;
426  bool clickedSecondaryShoot(const Common::Point &mousePos) override;
427  void drawShoot(const Common::Point &target) override;
428  void drawPlayer() override;
429  void drawHealth() override;
430  void drawAmmo() override;
431  void hitPlayer() override;
432  void drawCursorArcade(const Common::Point &mousePos) override;
433  Common::Point computeTargetPosition(const Common::Point &mousePos) override;
434  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
435  void missNoTarget(ArcadeShooting *arc) override;
436 
437  void runCode(Code *code) override;
438  Common::String findNextLevel(const Common::String &level) override;
439  Common::String findNextLevel(const Transition *trans) override;
440 
441  // Saves
442  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
443  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
444  bool loadProfile(const Common::String &name);
445  void saveProfile(const Common::String &name, int levelId);
446 
447  // Arcade
448  Common::Point getPlayerPosition(bool needsUpdate) override;
449  bool checkTransition(ArcadeTransitions &transitions, ArcadeShooting *arc) override;
450  void pressedKey(const int keycode) override;
451  void runBeforeArcade(ArcadeShooting *arc) override;
452  void runAfterArcade(ArcadeShooting *arc) override;
453  void findNextSegment(ArcadeShooting *arc) override;
454  void initSegment(ArcadeShooting *arc) override;
455  byte *getTargetColor(Common::String name, int levelId) override;
456  bool checkRButtonUp() override;
457  void setRButtonUp(const bool val) override;
458 
459 
460  bool hasFeature(EngineFeature f) const override {
461  return (f == kSupportsReturnToLauncher);
462  }
463 
464 private:
465  Common::String getLocalizedString(const Common::String name);
466  uint16 getNextChar(const Common::String &str, uint32 &c);
467  void drawGlyph(const Common::BitArray &font, int x, int y, int bitoffset, int width, int height, int pitch, uint32 color, bool invert);
468  void drawKoreanChar(uint16 chr, int &curx, int y, uint32 color);
469  void runMainMenu(Code *code);
470  void runLevelMenu(Code *code);
471  void runCheckLives(Code *code);
472  void endCredits(Code *code);
473  void showDemoScore();
474  uint32 findPaletteIndexZones(uint32 id);
475 
476  Common::List<int> _scoreMilestones;
477  void restoreScoreMilestones(int score);
478  bool checkScoreMilestones(int score);
479 
480 
481  Frames _c33PlayerCursor;
482  Common::Point _c33PlayerPosition;
483  Common::List<PlayerPosition> _c33PlayerDirection;
484  bool _c33UseMouse;
485  void generateStaticEffect();
486 
487  Common::BitArray _fontg9a;
488  Common::Array<uint32> _c40SegmentPath;
489  Common::Array<uint32> _c40SegmentNext;
490  int _c40SegmentIdx;
491  int _c40lastTurn;
492  int _c50LeftTurns;
493  int _c50RigthTurns;
494 
495  bool _rButtonUp;
496 };
497 
498 class SpiderEngine : public HypnoEngine {
499 public:
500  SpiderEngine(OSystem *syst, const ADGameDescription *gd);
501  void loadAssets() override;
502  void loadAssetsDemo();
503  void loadAssetsFullGame();
504  void showCredits() override;
505 
506  void drawCursorArcade(const Common::Point &mousePos) override;
507  void drawShoot(const Common::Point &target) override;
508  void drawPlayer() override;
509  void drawHealth() override;
510  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
511  void hitPlayer() override;
512 
513  // Arcade
514  void pressedKey(const int keycode) override;
515  void runBeforeArcade(ArcadeShooting *arc) override;
516  void runAfterArcade(ArcadeShooting *arc) override;
517  void findNextSegment(ArcadeShooting *arc) override;
518  void initSegment(ArcadeShooting *arc) override;
519  byte *getTargetColor(Common::String name, int levelId) override;
520 
521  void drawBackToMenu(Hotspot *h) override;
522  void runCode(Code *code) override;
523  Common::String findNextLevel(const Common::String &level) override;
524  Common::String findNextLevel(const Transition *trans) override;
525 
526  void loadFonts(const Common::String prefix = "") override;
527  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
528 
529  void showConversation() override;
530  void endConversation() override;
531  void rightClickedConversation(const Common::Point &mousePos) override;
532  void leftClickedConversation(const Common::Point &mousePos) override;
533  bool hoverConversation(const Common::Point &mousePos) override;
534 
535  void loadGame(const Common::String &nextLevel, int score, int puzzleDifficulty, int combatDifficulty) override;
536  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
537  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
538  bool canSaveAutosaveCurrently() override {
539  return false; // No hypno engine should perform autosave using the default implementation
540  }
541 
542  bool hasFeature(EngineFeature f) const override {
543  return (f == kSupportsSavingDuringRuntime || f == kSupportsLoadingDuringRuntime || f == kSupportsReturnToLauncher);
544  }
545 
546 private:
547  void runMatrix(Code *code);
548  void addIngredient(Code *code);
549  void checkMixture(Code *code);
550  void runNote(Code *code);
551  void runFusePanel(Code *code);
552  void runRecept(Code *code);
553  void runOffice(Code *code);
554  void runFileCabinet(Code *code);
555  void runLock(Code *code);
556  void runFuseBox(Code *code);
557  void runGiveUp();
558  void showScore(const Common::String prefix);
559 
560  uint32 _currentPlayerPosition;
561  uint32 _lastPlayerPosition;
562 
563  bool _fuseState[2][10] = {};
564  bool _isFuseRust = true;
565  bool _isFuseUnreadable = false;
566  bool ingredients[7] = {};
567 
568  Common::Rect _h1Area;
569  Common::Rect _h2Area;
570  Common::Rect _h3Area;
571 
572  const Graphics::Font *_font;
573 };
574 
575 class BoyzEngine : public HypnoEngine {
576 public:
577  BoyzEngine(OSystem *syst, const ADGameDescription *gd);
578  ~BoyzEngine();
579  Common::String _name;
580  Common::Array<int> _ids;
581  int _lastLevel;
582  bool _flashbackMode;
583  void loadAssets() override;
584  void runCode(Code *code) override;
585  Common::String findNextLevel(const Common::String &level) override;
586  Common::String findNextLevel(const Transition *trans) override;
587 
588  // Scenes
589  void resetSceneState() override;
590  void runMenu(Hotspots *hs, bool only_menu = false) override;
591  bool hoverHotspot(Common::Point) override;
592 
593  // Arcade
594  void runBeforeArcade(ArcadeShooting *arc) override;
595  void runAfterArcade(ArcadeShooting *arc) override;
596  void pressedKey(const int keycode) override;
597  int detectTarget(const Common::Point &mousePos) override;
598  void drawCursorArcade(const Common::Point &mousePos) override;
599  bool shoot(const Common::Point &mousePos, ArcadeShooting *arc, bool secondary) override;
600  bool clickedSecondaryShoot(const Common::Point &mousePos) override;
601  void showCredits() override;
602  // Stats
603  void showArcadeStats(int territory, const ArcadeStats &data);
604  ArcadeStats _lastStats;
605  ArcadeStats _globalStats;
606 
607  void missedTarget(Shoot *s, ArcadeShooting *arc) override;
608  void drawHealth() override;
609  void drawAmmo() override;
610  void drawShoot(const Common::Point &target) override;
611  void hitPlayer() override;
612  void drawPlayer() override;
613  void findNextSegment(ArcadeShooting *arc) override;
614  void initSegment(ArcadeShooting *arc) override;
615  bool checkTransition(ArcadeTransitions &transitions, ArcadeShooting *arc) override;
616 
617  void drawString(const Filename &name, const Common::String &str, int x, int y, int w, uint32 c) override;
618 
619  // Saves
620  Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
621  Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
622  Common::StringArray listProfiles();
623  bool loadProfile(const Common::String &name);
624  void saveProfile(const Common::String &name, int levelId);
625 
626  private:
627  void renderHighlights(Hotspots *hs);
628  void waitForUserClick(uint32 timeout);
629  int pickABox();
630  int _selectedCorrectBox;
631  char selectDirection();
632 
633  void runMainMenu(Code *code);
634  bool runExitMenu();
635  void runRetryMenu(Code *code);
636  void runCheckC3(Code *code);
637  void runCheckHo(Code *code);
638  void runCheckC5(Code *code);
639  void runAlarmC5(Code *code);
640  void runDifficultyMenu(Code *code);
641  void endCredits(Code *code);
642  int getTerritory(const Common::String &level);
643  Common::String lastLevelTerritory(const Common::String &level);
644  Common::String firstLevelTerritory(const Common::String &level);
645 
646  void loadSceneState(Common::SeekableReadStream *stream);
647  void saveSceneState(Common::WriteStream *stream);
648  void unlockAllLevels();
649 
650  int _previousHealth;
651  Graphics::Surface _healthBar[7];
652  Graphics::Surface _ammoBar[7];
653  Graphics::Surface _portrait[7];
654  Filename _deathDay[7];
655  Filename _deathNight[7];
656 
657  Filename _weaponShootSound[8];
658  Filename _weaponReloadSound[8];
659  Filename _heySound[7];
660  int _weaponMaxAmmo[8];
661 
662  byte *_crosshairsPalette;
663  Graphics::Surface _crosshairsInactive[8];
664  Graphics::Surface _crosshairsActive[8];
665  Graphics::Surface _crosshairsTarget[8];
666  Graphics::Surface _leftArrowPointer;
667  Graphics::Surface _rightArrowPointer;
668  Graphics::Surface _crossPointer;
669 
670  void updateFromScript();
671  bool checkCup(const Common::String &name);
672 
673  Script _currentScript;
674  ScriptMode _currentMode;
675  uint32 _currentActor;
676  uint32 _currentWeapon;
677  Common::Array<Filename> _warningVideosDay;
678  Common::Array<Filename> _warningVideosNight;
679  Common::Array<Filename> _warningAlarmVideos;
680  Filename _warningHostage;
681 
682  Common::Array<Filename> _deathVideo;
683  Common::HashMap<Common::String, bool> _shootsDestroyed;
684 
685  bool hasFeature(EngineFeature f) const override {
686  return (f == kSupportsReturnToLauncher);
687  }
688 };
689 
690 } // End of namespace Hypno
691 
692 #endif
bool canSaveAutosaveCurrently() override
Definition: hypno.h:538
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:575
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:394
Definition: grammar.h:214
Definition: grammar.h:235
Definition: hypno.h:498
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:404
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:460
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:542
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