ScummVM API documentation
engine.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 CRYOMNI3D_VERSAILLES_ENGINE_H
23 #define CRYOMNI3D_VERSAILLES_ENGINE_H
24 
25 #include "common/events.h"
26 #include "common/random.h"
27 #include "common/array.h"
28 #include "common/hashmap.h"
29 #include "common/hash-str.h"
30 #include "common/str.h"
31 
32 #include "cryomni3d/cryomni3d.h"
33 #include "cryomni3d/omni3d.h"
34 #include "cryomni3d/sprites.h"
35 #include "cryomni3d/wam_parser.h"
36 
37 #include "cryomni3d/versailles/documentation.h"
38 #include "cryomni3d/versailles/toolbar.h"
39 #include "cryomni3d/versailles/dialogs_manager.h"
40 
41 namespace Graphics {
42 class ManagedSurface;
43 struct Surface;
44 }
45 
46 namespace CryOmni3D {
47 struct FixedImageConfiguration;
48 class ZonFixedImage;
49 }
50 
51 namespace CryOmni3D {
52 namespace Versailles {
54  uint placeId;
55  uint placeState;
56  uint actionId;
57  PlaceStateActionKey(uint placeId_, uint placeState_, uint actionId_) :
58  placeId(placeId_), placeState(placeState_), actionId(actionId_) {}
59 
60  bool operator==(const PlaceStateActionKey &other) const {
61  return other.placeId == placeId && other.placeState == placeState && other.actionId == actionId;
62  }
63 };
64 
66  uint placeId;
67  uint actionId;
68  PlaceActionKey(uint placeId_, uint actionId_) :
69  placeId(placeId_), actionId(actionId_) {}
70 
71  bool operator==(const PlaceActionKey &other) const {
72  return other.placeId == placeId && other.actionId == actionId;
73  }
74 };
75 }
76 }
77 
78 namespace Common {
79 template<>
80 struct Hash<CryOmni3D::Versailles::PlaceStateActionKey> {
81  uint operator()(const CryOmni3D::Versailles::PlaceStateActionKey &k) const {
82  // placeState shouldn't be greater than 8 and placeId shouldn't be greater than 100
83  // originalActionId shouldn't be greater than 65536
84  return (k.placeId << 24 | k.placeState << 16) ^ k.actionId;
85  }
86 };
87 template<>
88 struct Hash<CryOmni3D::Versailles::PlaceActionKey> {
89  uint operator()(const CryOmni3D::Versailles::PlaceActionKey &k) const {
90  // placeId shouldn't be greater than 100
91  // originalActionId shouldn't be greater than 65536
92  return (k.placeId << 16) ^ k.actionId;
93  }
94 };
95 }
96 
97 namespace CryOmni3D {
98 namespace Versailles {
99 
100 class CryOmni3DEngine_Versailles;
101 
102 enum AbortCommand {
103  kAbortNoAbort = 0,
104  kAbortQuit = 1,
105  kAbortLoadGame = 2,
106  kAbortNewGame = 3,
107  kAbortNextLevel = 5,
108  kAbortFinished = 6,
109  kAbortGameOver = 7
110 };
111 
113  enum Var {
114  kCollectScore = 0, // 0
115  kUnlockHiddenDoor,
116  kAlreadyWent3_19,
117  kMedalsDrawerStatus,
118  kCurrentTime,
119  kGotMedalsSolution,
120  kCabinetDrawerStatus,
121  kDecipherScore,
122  kCollectLampoonArchitecture,
123  kGotRevealedPaper,
124  kCollectKey, // 10
125  kCollectPortfolio,
126  kSketchState,
127  kFakeSketchChatState,
128  kCollectFood,
129  kCollectQuill,
130  kStateLampoonReligion,
131  kCollectSmallKey3,
132  kCollectEngraving,
133  kCollectCord,
134  kCollectVaubanBlueprint1, // 20
135  kCollectVaubanBlueprint2,
136  kLadderState,
137  kOpenedCurtain,
138  kLoweredChandelier,
139  kCombedOrangeTree,
140  kMaineTalked,
141  kUsedLitCandle,
142  kBombState,
143  kInkSpilled,
144  kCollectedPaperOnTable, // 30
145  kSafeUnlocked,
146  //kUselessVar,
147  kCollectedPaperInTrunk = 33,
148  kBrushColor,
149  kUsedScissors,
150  kUnlockedAttic,
151  kHasPlayedLebrun,
152  kWarnedIncomplete,
153  kUsedVaubanBlueprint1,
154  kUsedVaubanBlueprint2, // 40
155  kSeenMemorandum,
156  kCollectScissors,
157  kSavedCountdown,
158  kMax
159  };
160 };
161 
162 // For random sounds we set a constant ID and avoid to use it elsewhere
163 struct SoundIds {
164  enum {
165  kOrgue = 0,
166  kLeb001,
167  kMax
168  };
169 };
170 
172  enum {
173  kDialogs = 0,
174  kAllDocs,
175  kLinksDocs,
176  kCredits,
177  kLeb001,
178  kMax
179  };
180 };
181 
182 enum FileType {
183  kFileTypeAnimacti,
184  kFileTypeDocBg,
185  kFileTypeDialAnim,
186  kFileTypeDialSound,
187  kFileTypeFont,
188  kFileTypeGTO,
189  kFileTypeFixedImg,
190  kFileTypeMenu,
191  kFileTypeMusic,
192  kFileTypeObject,
193  kFileTypeSaveGameVisit,
194  kFileTypeTransScene,
195  kFileTypeTransSceneI,
196  kFileTypeSound,
197  kFileTypeSprite,
198  kFileTypeSpriteBmp,
199  kFileTypeText,
200  kFileTypeWAM,
201  kFileTypeWarpCyclo,
202  kFileTypeWarpHNM
203 };
204 
205 struct PlaceState {
206  typedef void (CryOmni3DEngine_Versailles::*InitFunc)();
207  typedef bool (CryOmni3DEngine_Versailles::*FilterEventFunc)(uint *event);
208 
209  PlaceState() : initPlace(nullptr), filterEvent(nullptr), docImage(nullptr), state(0) {}
210  PlaceState(InitFunc initPlace_, FilterEventFunc filterEvent_, const char *docImage_) :
211  initPlace(initPlace_), filterEvent(filterEvent_), docImage(docImage_), state(0) {}
212 
213  InitFunc initPlace;
214  FilterEventFunc filterEvent;
215  const char *docImage;
216  uint state;
217 };
218 
220  uint placeId;
221  double alpha;
222  double beta;
223 };
224 
226  uint actionId;
227  uint placeId;
228 };
229 
230 typedef void (CryOmni3DEngine_Versailles::*FixedImgCallback)(ZonFixedImage *);
231 
233  int font;
234  byte foreColor;
235  uint lineHeight;
236  uint spaceWidth;
237  uint charSpacing;
238  uint initialWidth;
239  uint incrementWidth;
240  uint initialHeight;
241  uint incrementHeight;
242  uint timeoutChar;
243 };
244 
246  uint32 frameStart;
247  Common::String text;
248 };
249 
251  friend class Versailles_DialogsManager;
252 protected:
253  Common::Error run() override;
254 
255 public:
257  ~CryOmni3DEngine_Versailles() override;
258 
259  void initializePath(const Common::FSNode &gamePath) override;
260 
261  bool hasFeature(EngineFeature f) const override;
262  Common::Error loadGameState(int slot) override;
263  Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
264  Common::String getSaveStateName(int slot) const override;
265 
266  Common::Path getFilePath(FileType fileType, const Common::String &baseName) const;
267 
268  void setupPalette(const byte *colors, uint start, uint num) override { setupPalette(colors, start, num, true); }
269  void makeTranslucent(Graphics::Surface &dst, const Graphics::Surface &src) const override;
270 
271  bool displayToolbar(const Graphics::Surface *original) override { return _toolbar.displayToolbar(original); };
272  bool hasPlaceDocumentation() override;
273  bool displayPlaceDocumentation() override;
274  uint displayOptions() override;
275  bool shouldAbort() override;
276 
277 private:
278  void setupFonts();
279  void setupSprites();
280  void loadCursorsPalette();
281  void calculateTransparentMapping();
282  void setupObjects();
283  void setupDialogVariables();
284  void setupImgScripts();
285  void loadStaticData();
286 
287  void syncOmni3DSettings();
288  void syncSoundSettings() override;
289 
290  void playTransitionEndLevel(int level);
291  void changeLevel(int level);
292  void initNewLevel(int level);
293  void setupLevelWarps(int level);
294  void initPlacesStates();
295  void initWhoSpeaksWhere();
296  void initDocPeopleRecord();
297  void setupLevelActionsMask();
298 
299  uint currentGameTime() const { return _gameVariables[GameVariables::kCurrentTime]; }
300  void setGameTime(uint newTime, uint level);
301  void updateGameTimeDialVariables();
302 
303  void gameStep();
304  void doGameOver();
305 
306  void setPlaceState(uint placeId, uint newState);
307  void doPlaceChange();
308  void executeTransition(uint nextPlaceId);
309  void fakeTransition(uint dstPlaceId);
310  uint determineTransitionAnimation(uint srcId, uint dstId,
311  const Transition **transition);
312 
313  uint getFakeTransition(uint actionId) const;
314  void fixActionId(uint *actionId) const;
315 
316  int handleWarp();
317  bool handleWarpMouse(uint *actionId, uint movingCuror);
318  void animateWarpTransition(const Transition *transition);
319  void redrawWarp();
320 
321  void handleFixedImg(const FixedImgCallback &callback);
322  void executeSeeAction(uint actionId);
323 
324  void executeSpeakAction(uint actionId);
325  void setupDialogShows();
326  bool preprocessDialog(const Common::String &sequence);
327  void postprocessDialog(const Common::String &sequence);
328 
329  void executeDocAction(uint actionId);
330 
331  void drawMenuTitle(Graphics::ManagedSurface *surface, byte color);
332  uint displayFilePicker(const Graphics::Surface *bgFrame, bool saveMode,
333  Common::String &saveName);
334  uint displayYesNoBox(Graphics::ManagedSurface &surface, const Common::Rect &position,
335  uint msg_id);
336  void displayMessageBox(const MsgBoxParameters &params, const Graphics::Surface *surface,
337  uint msg_id, const Common::Point &position,
338  const Common::Functor0<void> &callback) { displayMessageBox(params, surface, _messages[msg_id], position, callback); }
339  void displayMessageBox(const MsgBoxParameters &params, const Graphics::Surface *surface,
340  const Common::String &msg, const Common::Point &position,
341  const Common::Functor0<void> &callback);
342  void displayMessageBoxWarp(const Common::String &message);
343  void displayMessageBoxWarp(uint msg_id) { displayMessageBoxWarp(_messages[msg_id]); }
344  void displayCredits();
345 
346  void warpMsgBoxCB();
347 
348  bool canVisit() const;
349  Common::String getSaveFileName(bool visit, uint saveNum) const;
350  void getSavesList(bool visit, Common::Array<Common::String> &saveNames, int &nextSaveNum);
351  void saveGame(bool visit, uint saveNum, const Common::String &saveName);
352  bool loadGame(bool visit, uint saveNum);
353 
354  void animateCursor(const Object *object);
355  void collectObject(Object *object, const ZonFixedImage *fimg = nullptr,
356  bool showObject = true);
357  void collectObject(uint nameID, const ZonFixedImage *fimg = nullptr,
358  bool showObject = true) { collectObject(_objects.findObjectByNameID(nameID), fimg, showObject); }
359  typedef void (CryOmni3DEngine_Versailles::*DisplayObjectHook)(Graphics::ManagedSurface &surface);
360  void displayObject(const Common::String &imgName, DisplayObjectHook hook = nullptr);
361 
362  void setMainPaletteColor(byte color, byte red, byte green, byte blue);
363  void setupPalette(const byte *colors, uint start, uint num, bool commit);
364 
365  bool showSubtitles() const;
366 
367  void playInGameAnimVideo(const Common::String &filename) {
368  playInGameVideo(getFilePath(kFileTypeAnimacti, filename));
369  }
370  void playInGameVideo(const Common::Path &filename, bool restoreCursorPalette = true);
371  void playSubtitledVideo(const Common::String &filename);
372 
373  void loadBMPs(const char *pattern, Graphics::Surface *bmps, uint count);
374 
375  uint getMusicId(uint level, uint placeId) const;
376  bool musicWouldChange(uint level, uint placeId) const;
377  void musicUpdate();
378  void musicPause();
379  void musicResume();
380  void musicStop();
381  void musicSetQuiet(bool quiet);
382 
383  Common::StringArray _localizedFilenames;
384  Common::StringArray _messages;
385  static const uint kSpritesMapTable[];
386  static const uint kSpritesMapTableSize;
387  static const LevelInitialState kLevelInitialStates[];
388  static const FakeTransitionActionPlace kFakeTransitions[];
390  Common::Array<Common::String> _paintingsTitles;
391 
392  Toolbar _toolbar;
393 
394  byte *_mainPalette;
395  byte *_cursorPalette;
396  bool _fadedPalette;
397  bool _forcePaletteUpdate;
398  bool _forceRedrawWarp;
399 
400  byte *_transparentPaletteMap;
401  uint _transparentSrcStart;
402  uint _transparentSrcStop;
403  uint _transparentDstStart;
404  uint _transparentDstStop;
405  uint _transparentNewStart;
406  uint _transparentNewStop;
407 
408  bool _isPlaying;
409  bool _isVisiting;
410  AbortCommand _abortCommand;
411  uint _loadedSave;
412 
413  int _omni3dSpeed;
414 
415  uint _currentLevel;
416  Versailles_DialogsManager _dialogsMan;
417 
418  Omni3DManager _omni3dMan;
419  ZonFixedImage *_fixedImage;
420 
421  Common::Array<uint> _gameVariables;
422  Common::Array<PlaceState> _placeStates;
425  Common::HashMap<uint, const char *> _docPeopleRecord;
426  bool _transitionAnimateWarp;
427  uint _nextPlaceId;
428  WAMParser _wam;
429  uint _currentPlaceId;
430  const Place *_currentPlace;
431  const Image::ImageDecoder *_currentWarpImage;
432 
433  const char *_musicCurrentFile;
434  Audio::SoundHandle _musicHandle;
435  float _musicVolumeFactor;
436  static const char *kMusicFiles[8][8];
437 
438  Versailles_Documentation _docManager;
439 
440  static const MsgBoxParameters kWarpMsgBoxParameters;
441  static const MsgBoxParameters kFixedimageMsgBoxParameters;
442  static const FixedImageConfiguration kFixedImageConfiguration;
443 
444  // Countdown
445  void initCountdown();
446  void syncCountdown();
447  inline bool countDown() { if (_countingDown) { return doCountDown(); } else { return false; } }
448  inline void drawCountdown(Graphics::ManagedSurface *surface = nullptr) { if (_countingDown) { doDrawCountdown(surface); } }
449  void drawCountdownVideo(uint frameNum) { drawCountdown(); }
450 
451  bool _countingDown;
452  uint _countdownNextEvent;
453  char _countdownValue[6];
454  Graphics::ManagedSurface _countdownSurface;
455  bool doCountDown();
456  void doDrawCountdown(Graphics::ManagedSurface *surface);
457 
458  // Video subtitles
460  const Common::Array<SubtitleEntry> *_currentSubtitleSet;
462  void drawVideoSubtitles(uint frameNum);
463 
464  // Objects
465  template<uint ID>
466  void genericDisplayObject();
467  void obj_105();
468  void obj_106();
469  void obj_107();
470  void obj_118();
471  void obj_121();
472  void obj_125();
473  void obj_126();
474  void obj_126hk(Graphics::ManagedSurface &surface);
475  void obj_129();
476  void obj_129hk(Graphics::ManagedSurface &surface);
477  void obj_142();
478  void obj_142hk(Graphics::ManagedSurface &surface);
479 
480  // Fixed image
481  template<uint ID>
482  void genericDumbImage(ZonFixedImage *fimg);
483  template<uint ID>
484  void genericPainting(ZonFixedImage *fimg);
485 #define IMG_CB(name) void img_ ## name(ZonFixedImage *fimg)
486  IMG_CB(31101);
487  IMG_CB(31101b);
488  IMG_CB(31142);
489  IMG_CB(31142b);
490  IMG_CB(31142c);
491  IMG_CB(31142d);
492  IMG_CB(31143);
493  IMG_CB(31143b);
494  IMG_CB(31143c);
495  IMG_CB(31143d);
496  IMG_CB(32120);
497  IMG_CB(32120b);
498  IMG_CB(32120c);
499  IMG_CB(32201);
500  IMG_CB(32202);
501  IMG_CB(32203);
502  IMG_CB(32204);
503  IMG_CB(32204b);
504  IMG_CB(34131);
505  IMG_CB(34132);
506  IMG_CB(34172);
507  IMG_CB(34173);
508  IMG_CB(34173b);
509  IMG_CB(34173c);
510  IMG_CB(34174);
511  IMG_CB(34174b);
512  IMG_CB(34174c);
513  IMG_CB(34174d);
514  IMG_CB(34174e);
515  IMG_CB(34174f);
516  static const uint kSafeDigitsCount = 12;
517  static const uint16 kSafeDigitsX[];
518  static const uint16 kSafeDigitsY[];
519  static const char *kSafeDates[];
520  bool handleSafe(ZonFixedImage *fimg);
521  void drawSafeDigits(Graphics::ManagedSurface &surface, const Graphics::Surface(&bmpDigits)[10],
522  const unsigned char (&safeDigits)[kSafeDigitsCount]);
523  bool checkSafeDigits(unsigned char (&safeDigits)[kSafeDigitsCount]);
524 
525  IMG_CB(41202);
526  IMG_CB(41202b);
527  IMG_CB(41801);
528  IMG_CB(41801b);
529  IMG_CB(41801c);
530  IMG_CB(41802);
531  IMG_CB(41802b);
532  IMG_CB(41802c);
533  IMG_CB(41802d);
534  IMG_CB(43143);
535  IMG_CB(43143b);
536  IMG_CB(43145);
537  IMG_CB(43145b);
538  IMG_CB(43145c);
539  IMG_CB(43146);
540  IMG_CB(43146b);
541  IMG_CB(43146c);
542  IMG_CB(43160);
543  IMG_CB(43160b);
544  IMG_CB(43160c);
545  IMG_CB(43160d);
546  IMG_CB(43190);
547  IMG_CB(43190b);
548  IMG_CB(43190c);
549  IMG_CB(43190d);
550  IMG_CB(43190e);
551  IMG_CB(43190f);
552  IMG_CB(44071);
553  IMG_CB(44071b);
554  IMG_CB(44161);
555  IMG_CB(44161b);
556  IMG_CB(44161c);
557  IMG_CB(44161d);
558  IMG_CB(44161e);
559  IMG_CB(44161f);
560  static const uint kEpigraphMaxLetters = 32;
561  Common::String _epigraphContent;
562  Common::String _epigraphPassword;
563  bool handleEpigraph(ZonFixedImage *fimg);
564  void drawEpigraphLetters(Graphics::ManagedSurface &surface,
565  const Graphics::Surface(&bmpLetters)[28], const Common::String &letters);
566  IMG_CB(45130);
567  IMG_CB(45270);
568  IMG_CB(45270b);
569  IMG_CB(45270c);
570  IMG_CB(45270d);
571  IMG_CB(45280);
572 
573  IMG_CB(88001);
574  IMG_CB(88001b);
575  IMG_CB(88001c);
576  IMG_CB(88002);
577  IMG_CB(88003);
578  IMG_CB(88003b);
579  IMG_CB(88003c);
580  IMG_CB(88003d);
581  IMG_CB(88003e);
582  IMG_CB(88003f);
583  Common::U32String _bombAlphabet; // For Japanese edition
584  Common::U32String _bombPassword;
585  static const uint kBombPasswordSmallLength = 40;
586  static const uint kBombPasswordMaxLength = 60;
587  static const uint16 kBombLettersPos[2][kBombPasswordMaxLength][2];
588  bool handleBomb(ZonFixedImage *fimg);
589  void handleBombTranslation(Graphics::ManagedSurface &surface);
590  void drawBombLetters(Graphics::ManagedSurface &surface, const Graphics::Surface(&bmpLetters)[28],
591  const uint bombPasswordLength,
592  const uint32(&bombPossibilites)[kBombPasswordMaxLength][5],
593  const byte(&bombCurrentLetters)[kBombPasswordMaxLength]);
594  IMG_CB(88004);
595  IMG_CB(88004b);
596 #undef IMG_CB
597 
598 #define FILTER_EVENT(level, place) bool filterEventLevel ## level ## Place ## place(uint *event)
599 #define INIT_PLACE(level, place) void initPlaceLevel ## level ## Place ## place()
600  FILTER_EVENT(1, 1);
601  FILTER_EVENT(1, 2);
602  INIT_PLACE(1, 3);
603  FILTER_EVENT(1, 3);
604  //FILTER_EVENT(1, 7); // Not used
605  FILTER_EVENT(1, 14);
606 
607  FILTER_EVENT(2, 1);
608  FILTER_EVENT(2, 2);
609  FILTER_EVENT(2, 5);
610  INIT_PLACE(2, 9);
611  FILTER_EVENT(2, 9);
612  FILTER_EVENT(2, 11);
613  FILTER_EVENT(2, 12);
614  FILTER_EVENT(2, 14);
615 
616  FILTER_EVENT(3, 3);
617  FILTER_EVENT(3, 10);
618  FILTER_EVENT(3, 13);
619  FILTER_EVENT(3, 15);
620  FILTER_EVENT(3, 17);
621  FILTER_EVENT(3, 18);
622  FILTER_EVENT(3, 19);
623  FILTER_EVENT(3_5, 20);
624  FILTER_EVENT(3, 22);
625  FILTER_EVENT(3, 23);
626  bool filterEventLevel3Obj23151();
627  void collectLampoonArchitecture(const ZonFixedImage *fimg = nullptr);
628 
629  INIT_PLACE(4, 9);
630  FILTER_EVENT(4, 10);
631  FILTER_EVENT(4, 12_13_14);
632  FILTER_EVENT(4, 15);
633  FILTER_EVENT(4, 16);
634  FILTER_EVENT(4, 17);
635 
636  INIT_PLACE(5, 6);
637  FILTER_EVENT(5, 9);
638  FILTER_EVENT(5, 14);
639  FILTER_EVENT(5, 15);
640  FILTER_EVENT(5, 16);
641  void filterEventLevel5UpdatePlaceStates();
642  //FILTER_EVENT(3_5, 20);
643  FILTER_EVENT(5, 23);
644  FILTER_EVENT(5, 27);
645  FILTER_EVENT(5, 28);
646  FILTER_EVENT(5, 29);
647  FILTER_EVENT(5, 33);
648  FILTER_EVENT(5, 34);
649 
650  FILTER_EVENT(6, 1);
651  FILTER_EVENT(6, 3);
652  FILTER_EVENT(6, Orangery);
653  FILTER_EVENT(6, 19);
654 
655  FILTER_EVENT(7, 2);
656  FILTER_EVENT(7, 9);
657  FILTER_EVENT(7, 10_11_13);
658  FILTER_EVENT(7, 20);
659 #undef FILTER_EVENT
660 #undef INIT_PLACE
661 
662  // Dialogs shows
663  void dialogShowBontempsShowThird();
664  void dialogShowHuissierShowPamphlet();
665  void dialogShowMonseigneurSorts();
666  void dialogShowLeBrunWatches();
667  void dialogShowDoorsOpen();
668  void dialogShowSwissGuardGives();
669  void dialogShowLullyCorrects();
670  void dialogShowBontempsGivesAuth();
671  void dialogShowCroissyLeave();
672  void dialogShowMaintenonGives();
673  void dialogShowLaChaizeGivesBack();
674  void dialogShowLaChaizeWrites();
675  void dialogShowLaChaizeGivesPamphlet();
676  void dialogShowBontempsGivesKey();
677  void dialogShowDuMaineLeaves();
678  void dialogShowTransitionScene();
679  void dialogShowEndOfGame();
680  void dialogShowLeBrunGives();
681  void dialogShowLeBrunLeave();
682 };
683 
684 } // End of namespace Versailles
685 } // End of namespace CryOmni3D
686 
687 #endif
Definition: managed_surface.h:51
Definition: fixed_image.h:36
Definition: toolbar.h:40
Definition: engine.h:112
Definition: image_decoder.h:52
Definition: dialogs_manager.h:38
Definition: cryomni3d.h:62
Definition: str.h:59
Definition: engine.h:245
Definition: surface.h:67
EngineFeature
Definition: engine.h:253
Definition: error.h:84
Definition: rect.h:144
Definition: path.h:52
Definition: func.h:527
Definition: objects.h:33
Definition: engine.h:205
Definition: mixer.h:49
Definition: wam_parser.h:53
Definition: ustr.h:57
const T * const_iterator
Definition: array.h:55
Definition: detection.h:48
Definition: cryomni3d.h:80
Definition: wam_parser.h:43
Definition: algorithm.h:29
Definition: fs.h:69
Definition: formatinfo.h:28
Definition: rect.h:45
Definition: fixed_image.h:51
Definition: wam_parser.h:66
Definition: engine.h:163
Definition: system.h:161
Definition: omni3d.h:29