ScummVM API documentation
scene.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 NANCY_STATE_SCENE_H
23 #define NANCY_STATE_SCENE_H
24 
25 #include "common/singleton.h"
26 #include "common/queue.h"
27 
28 #include "engines/nancy/commontypes.h"
29 #include "engines/nancy/puzzledata.h"
30 
31 #include "engines/nancy/action/actionmanager.h"
32 
33 #include "engines/nancy/state/state.h"
34 #include "engines/nancy/state/scenestream.h"
35 
36 #include "engines/nancy/ui/fullscreenimage.h"
37 #include "engines/nancy/ui/viewport.h"
38 #include "engines/nancy/ui/textbox.h"
39 #include "engines/nancy/ui/inventorybox.h"
40 #include "engines/nancy/ui/taskbar/inventorypopup.h"
41 #include "engines/nancy/ui/taskbar/notebookpopup.h"
42 #include "engines/nancy/ui/taskbar/cellphonepopup.h"
43 #include "engines/nancy/ui/taskbar/conversationpopup.h"
44 
45 namespace Common {
46 class SeekableReadStream;
47 class Serializer;
48 }
49 
50 namespace Nancy {
51 
52 class NancyEngine;
53 class NancyConsole;
54 struct SceneChangeDescription;
55 
56 namespace Action {
57 class ConversationSound;
58 class PlaySecondaryMovie;
59 }
60 
61 namespace Script {
62 class SceneContext;
63 struct Message;
64 }
65 
66 namespace Misc {
67 class Lightning;
68 class SpecialEffect;
69 class ViewportFader;
70 }
71 
72 namespace UI {
73 class Button;
74 class Taskbar;
75 class ViewportOrnaments;
76 class TextboxOrnaments;
77 class InventoryBoxOrnaments;
78 class Clock;
79 class Camera;
80 
81 namespace NDUI {
82 class Manager;
83 }
84 }
85 
86 namespace State {
87 
88 // The game state that handles all of the gameplay
89 class Scene : public State, public Common::Singleton<Scene> {
90 public:
91  struct SceneSummary {
92  // SSUM and TSUM
93  // Default values set to match those applied when loading from a TSUM chunk
94  Common::String description;
95  Common::Path videoFile;
96 
97  uint16 videoFormat = kLargeVideoFormat;
99  SoundDescription sound;
100 
101  byte panningType = kPan360;
102  uint16 numberOfVideoFrames = 0;
103  uint16 degreesPerRotation = 18;
104  uint16 totalViewAngle = 0;
105  uint16 horizontalScrollDelta = 1;
106  uint16 verticalScrollDelta = 10;
107  uint16 horizontalEdgeSize = 15;
108  uint16 verticalEdgeSize = 15;
109  Time slowMoveTimeDelta = 400;
110  Time fastMoveTimeDelta = 66;
111 
112  // Sound start vectors, used in nancy3 and up
113  Math::Vector3d listenerPosition;
114 
115  void read(Common::SeekableReadStream &stream);
116  void readTerse(Common::SeekableReadStream &stream);
117  };
118 
119  Scene();
120  virtual ~Scene();
121 
122  // State API
123  void process() override;
124  void onStateEnter(const NancyState::NancyState prevState) override;
125  bool onStateExit(const NancyState::NancyState nextState) override;
126 
127  // Used when winning/losing game
128  void setDestroyOnExit() { _destroyOnExit = true; }
129 
130  // Nancy16 has no main menu to go to on losing; the game goes back to the second
131  // chance save instead, once the current records have run
132  void loadSecondChance() { _isLoadingSecondChance = true; }
133 
134  // Nancy16: lists of movies left under the name of the movie or puzzle that plays
135  // them, e.g. the commands given to the wolf. Taking a list forgets it; returns false
136  // when there is none.
137  void setMoviePlaylist(const Common::String &name, const Common::Array<Common::String> &movies);
138  bool takeMoviePlaylist(const Common::String &name, Common::Array<Common::String> &movies);
139 
140  bool isRunningAd() const { return _isRunningAd; }
141 
142  void changeScene(const SceneChangeDescription &sceneDescription);
143 
144  // Nancy17 streams: scenes that run next to the one the player walks around in,
145  // which is the main stream
146  SceneStreamManager &getStreams() { return _streams; }
147  void addSceneVisit(uint16 sceneID) { _flags.sceneCounts.getOrCreateVal(sceneID)++; }
148  void pushScene(int16 itemID = -1);
149 
150  // Nancy16: an item looked at in its own scene leaves the inventory until the
151  // scene is left; it is kept as the pushed inventory item until then
152  void viewInventoryItem(int16 itemID);
153  void returnViewedInventoryItem();
154  void popScene(bool inventory = false);
155  int16 getPushedInvItemID() const { return _sceneState.pushedInvItemID; }
156 
157  // Nancy 11+ "UI prep scenes": opening a taskbar popup first runs a hidden,
158  // videoless scene whose event-flag-gated ARs populate the popup's content;
159  // a UIPopupPrepScene AR (32) then calls finishUIPrepScene to restore the
160  // prior scene and open the (now populated) popup. startUIPrepScene saves
161  // the current scene and jumps to prepSceneID; uiType (a UIType) selects
162  // which popup finishUIPrepScene opens. No-op if a prep is already running
163  // or prepSceneID is kNoScene.
164  void startUIPrepScene(int16 uiType, int16 prepSceneID);
165  void finishUIPrepScene();
166  bool isUIPrepActive() const { return _uiPrep.active; }
167  uint16 getSceneCounts(int16 hours) const {
168  return _flags.sceneCounts.contains(hours) ? _flags.sceneCounts[hours] : 0;
169  }
170 
171  void setPlayerTime(Time time, byte relative);
172  Time getPlayerTime() const { return _timers.playerTime; }
173  Time getTimerTime() const { return _timers.timerIsActive ? _timers.timerTime : 0; }
174  uint getPlayerTimeMinutes() const;
175  byte getPlayerTOD() const;
176  // Nancy14-15. The day is kept separately from the clock, and copied into the
177  // day value so the scripts can read it.
178  void requestSleep() { _timers.sleepRequested = true; }
179  void setPlayerDay(int16 day);
180 
181  void addItemToInventory(int16 id);
182  void removeItemFromInventory(int16 id, bool pickUp = true);
183 
184  // Nancy15+ inventory action records and dependencies pick the character to
185  // act on, which needn't be the one being played. Anyone else is served from
186  // their parked inventory instead of the live one.
187  void addItemToCharacterInventory(uint characterIndex, int16 id);
188  void removeItemFromCharacterInventory(uint characterIndex, int16 id, bool pickUp = false);
189  byte hasCharacterItem(uint characterIndex, int16 id);
190  void setCharacterItemDisabledState(uint characterIndex, int16 id, byte state);
191 
192  // AddInventoryNoHS (AR 120): hand the item over, into the character's hand
193  // when the record asks for it and their hand is free or forceIntoHand is set
194  void giveItemToCharacter(uint characterIndex, int16 id, bool intoHand, bool forceIntoHand);
195 
196  int32 getCharacterUIResource(uint characterIndex, uint index);
197  int16 getHeldItem() const { return _flags.heldItem; }
198  void setHeldItem(int16 id);
199  void setNoHeldItem();
200  byte hasItem(int16 id) const;
201  byte getItemDisabledState(int16 id) const { return _flags.disabledItems[id]; }
202  void setItemDisabledState(int16 id, byte state) {
203  if ((uint16)id < _flags.disabledItems.size())
204  _flags.disabledItems[id] = state;
205  }
206 
207  // Nancy15 records name the player character the override belongs to;
208  // kPlayerCharacterActive (and every earlier game) means whoever is played
209  void installInventorySoundOverride(byte command, const SoundDescription &sound,
210  const Common::String &caption, uint16 itemID, byte characterIndex = kPlayerCharacterActive);
211  void playItemCantSound(int16 itemID = -1, bool notHoldingSound = false);
212 
213  void setEventFlag(int16 label, byte flag);
214  void setEventFlag(FlagDescription eventFlag);
215  bool getEventFlag(int16 label, byte flag) const;
216  bool getEventFlag(FlagDescription eventFlag) const;
217 
218  // Nancy 11+ software-timer queries used by timer dependencies.
219  bool isSoftwareTimerActive(uint16 index) const;
220  int32 getSoftwareTimerState(uint16 index) const;
221  uint32 getSoftwareTimerElapsed(uint16 index) const;
222 
223  // Nancy16: what is left of a timer until its first trigger, in percent, for the
224  // meters of the UI. -1 when the timer isn't in use, or has nothing to wait for.
225  int32 getSoftwareTimerPercentLeft(uint16 index) const;
226 
227  // Nancy 12+ UI resource values (the UIRC boot chunk). Resource 0 is the
228  // coin purse amount in cents. Backed by the lazily-created, saved
229  // UIResourceData puzzle chunk, seeded from UIRC on first use and mutated by
230  // AR 132 (ResourceUse). Non-const because the first access creates/seeds it.
231  // Nancy15 records name the protagonist whose resources they change;
232  // kPlayerCharacterActive (and every earlier game) means whoever is played.
233  int32 getUIResource(uint index, byte characterIndex = kPlayerCharacterActive);
234  void setUIResource(uint index, int32 value, byte characterIndex = kPlayerCharacterActive);
235 
236  void setLogicCondition(int16 label, byte flag);
237  bool getLogicCondition(int16 label, byte flag) const;
238  void clearLogicConditions();
239  Time getLogicConditionTimestamp(int16 label) const {
240  return _flags.logicConditions[label].timestamp;
241  }
242 
243  void setDifficulty(uint difficulty) { _difficulty = difficulty; }
244  uint16 getDifficulty() const { return _difficulty; }
245 
246  byte getHintsRemaining() const { return _hintsRemaining[_difficulty]; }
247  void useHint(uint16 characterID, uint16 hintID);
248 
249  void requestStateChange(NancyState::NancyState state) { _gameStateRequested = state; }
250  void resetStateToInit() { _state = kInit; }
251 
252  void resetAndStartTimer() { _timers.timerIsActive = true; _timers.timerTime = 0; }
253  void stopTimer() { _timers.timerIsActive = false; _timers.timerTime = 0; }
254 
255  Time getMovementTimeDelta(bool fast) const { return fast ? _sceneState.summary.fastMoveTimeDelta : _sceneState.summary.slowMoveTimeDelta; }
256 
257  // Nancy 11+ AR 30/31. Toggles whether the player may scroll/pan the viewport.
258  // Backed by a reserved event flag (so it persists across scene changes and
259  // is saved/restored with the rest of the event flags).
260  void setPlayerScrolling(bool enabled);
261  bool getPlayerScrolling() const;
262 
263  void registerGraphics();
264 
265  // Nancy15+ AR 134. Hands the game over to another protagonist: swaps in that
266  // character's own copy of the popup UI data and rebuilds every widget built
267  // from it, then swaps the inventories. Returns whether the character
268  // actually changed.
269  bool changePlayerCharacter(uint characterIndex);
270 
271  // Nancy15+ Design Select screen. Records the look a character wears; the UI
272  // is rebuilt from it the next time the scene is entered.
273  void setPlayerCharacterDesign(uint characterIndex, const Common::String &designName);
274 
275  // Replaces the current scene's background video without leaving the scene.
276  // Nancy15+ uses this to show the same location from the newly selected
277  // player character's point of view.
278  void changeSceneVideo(const Common::Path &videoFile);
279 
280  void synchronize(Common::Serializer &serializer);
281 
282  UI::FullScreenImage &getFrame() { return _frame; }
283  UI::Viewport &getViewport() { return _viewport; }
284  UI::Textbox &getTextbox() { return _textbox; }
285  UI::InventoryBox &getInventoryBox() { return _inventoryBox; }
286  UI::InventoryPopup &getInventoryPopup() { return _inventoryPopup; }
287  UI::NotebookPopup &getNotebookPopup() { return _notebookPopup; }
288  UI::CellPhonePopup &getCellPhonePopup() { return _cellPhonePopup; }
289  UI::ConversationPopup &getConversationPopup() { return _conversationPopup; }
290  UI::Clock *getClock();
291  UI::Camera *getCamera() { return _camera; }
292  UI::Taskbar *getTaskbar() { return _taskbar; }
293 
294  // The records of a stream get the manager and the scene of their own stream
295  Action::ActionManager &getActionManager() { return _streams.getRunning() ? _streams.getRunning()->getActionManager() : _actionManager; }
296  Action::ActionManager &getMainActionManager() { return _actionManager; }
297 
298  // Runs a frame of what the scene of the main stream is made of: its action
299  // records, or the records of its script in Nancy19 and up
300  void processMainStream();
301  double getFrameSeconds() const { return _frameSeconds; }
302 
303  SceneChangeDescription &getSceneInfo() { return _streams.getRunning() ? _streams.getRunning()->getSceneInfo() : _sceneState.currentScene; }
304  const SceneChangeDescription &getMainSceneInfo() const { return _sceneState.currentScene; }
305 
306  // Nancy19+: the name of the script of the scene the main stream is in, which
307  // is "s" and the scene number unless the scene goes by a name of its own
308  Common::String getMainSceneName() const;
309  SceneChangeDescription &getNextSceneInfo() { return _sceneState.nextScene; }
310  const SceneSummary &getSceneSummary() const { return _sceneState.summary; }
311 
312  void setActiveMovie(Action::PlaySecondaryMovie *activeMovie);
313  Action::PlaySecondaryMovie *getActiveMovie();
314 
315  // Called when a PSM(isRandom) AR is loaded — drives stale-chain cleanup.
316  void notifyRandomMovieARLoaded() { _hadRandomMovieARThisScene = true; }
317  void setActiveConversation(Action::ConversationSound *activeConversation);
318  Action::ConversationSound *getActiveConversation();
319 
320  Graphics::ManagedSurface &getLastScreenshot() { return _lastScreenshot; }
321 
322  // The Vampire Diaries only;
323  void beginLightning(int16 distance, uint16 pulseTime, int16 rgbPercent);
324  Misc::ViewportFader *getViewportFader() { return _viewportFader; }
325  UI::NDUI::Manager *getNDUI() { return _ndui; }
326 
327 #ifdef ENABLE_NANCY_V4
328  // Nancy20: goes to a scene of the main stream that has a name of its own
329  // instead of a number. Numbered scenes ("s1002") are taken as well, and
330  // go through changeScene(const SceneChangeDescription &) like before.
331  void changeScene(const Common::String &sceneName, uint16 frameID);
332 
333  // Nancy19: the scripts of the UI stream have made the panels
334  void onScriptedUILoaded();
335 
336  // Nancy19: hands a message a script sent to the scenes it is for, of the main
337  // stream and of the others. Returns false when there is none.
338  bool receiveMessage(const Script::Message &message, bool &wasTaken);
339  bool receiveMainSceneMessage(const Script::Message &message, bool &wasTaken);
340 #endif
341 
342  // Used from nancy2 onwards
343  void specialEffect(byte type, uint16 fadeToBlackTime, uint16 frameTime);
344  void specialEffect(byte type, uint16 totalTime, uint16 fadeToBlackTime, Common::Rect rect);
345 
346  // Get the persistent data for a given puzzle type
347  PuzzleData *getPuzzleData(const uint32 tag);
348 
349  enum State {
350  kInit,
351  kLoad,
352  kStartSound,
353  kRun
354  };
355 
356  State getState() const { return _state; }
357  void setState(State state) { _state = state; }
358 
359  // Close every open Nancy 10+ popup. Used before a script auto-opens one
360  // (e.g. the incoming game-over call) so two popups can't stack.
361  void closeActivePopups();
362 
363  struct Timers {
364  Time pushedPlayTime;
365  Time lastTotalTime;
366  Time sceneTime;
367  Time timerTime;
368  bool timerIsActive = false;
369  Time playerTime; // In-game time of day, adds a minute every 5 seconds
370  Time playerTimeNextMinute; // Stores the next tick count until we add a minute to playerTime
371  bool sleepRequested = false; // Nancy14-15: start the next day on the following frame
372  int16 playerDay = 0; // Nancy14-15: the current day, also copied into the day value
373  };
374 
375  Timers _timers;
376 
377  RenderObject _hotspotDebug;
378 
379 private:
380  void init();
381  void load(bool fromSaveFile = false);
382 #ifdef ENABLE_NANCY_V4
383  void loadScriptedScene(bool fromSaveFile); // Nancy19+
384 
385  // Nancy19: starts the script a character takes over or leaves with, as a stream
386  void beginPlayerScript(const Common::Path &sceneName);
387 #endif
388  void run();
389  void handleInput();
390 
391  // Nancy 11+ AR 69. Advances all running software timers (stored as TimerData
392  // puzzle data) and fires any whose configured duration has just elapsed.
393  void tickSoftwareTimers(uint32 deltaMs);
394 
395  // Raises the late night flag (Nancy11-13) or the end-of-day flag (Nancy14-15)
396  // once it gets late. In Nancy14-15, also starts the next day at the wake-up
397  // hour after the player has been sent to sleep.
398  void updateEndOfDay();
399  void advanceDayValue();
400  void fireSoftwareTimer(TimerData::Timer &timer);
401  void fireTimerTrigger(TimerData::Trigger &trigger);
402 
403  // Rect of the open Nancy 10+ taskbar popup, or empty if none.
404  Common::Rect activePopupConfinement() const;
405 
406  int16 getCharacterHeldItem(uint characterIndex);
407  void setCharacterHeldItem(uint characterIndex, int16 id);
408  void returnCharacterHeldItem(uint characterIndex);
409 
410  // Nancy15's "can't" responses live in the active player character's PUIV
411  // bank instead of the inventory data
412  bool getPlayerCantSound(int16 itemID, SoundDescription &sound) const;
413  void playPlayerCantSound(int16 itemID);
414 
415  void initStaticData();
416  void initUI();
417  void loadUIPrepRecords(const Common::Path &name);
418 
419  void clearSceneData(bool nextIsNoArt = false);
420  void clearPuzzleData();
421 
422  // Maps an event flag label to its index in the eventFlags array
423  int16 eventFlagToIndex(int16 label) const;
424 
425  // Rebuilds the popup UI from a Nancy15+ player character's own data files,
426  // without touching the inventory. Returns whether the character changed.
427  bool applyPlayerCharacter(uint characterIndex);
428 
429  // Nancy15+ per-character inventories and UI resources. The active
430  // character's are the live ones (_flags plus the inventory box order, and
431  // UIResourceData::values); the others are parked in the same puzzle data.
432  void storeCharacterInventory(uint characterIndex);
433  void loadCharacterInventory(uint characterIndex);
434  void storeCharacterResources(uint characterIndex);
435  void loadCharacterResources(uint characterIndex);
436 
437  // Seeds a Hardy boy's journal and UI resources from his brother's the first
438  // time he is played.
439  void inheritBrotherProgress(uint characterIndex);
440 
441  struct SceneState {
442  SceneSummary summary;
443  SceneChangeDescription currentScene;
444  SceneChangeDescription nextScene;
445  SceneChangeDescription pushedScene;
446  bool isScenePushed = false;
447  SceneChangeDescription pushedInvScene;
448  int16 pushedInvItemID = -1;
449  bool isInvScenePushed = false;
450  };
451 
452  struct PlayFlags {
453  struct LogicCondition {
454  LogicCondition();
455  byte flag;
456  Time timestamp;
457  };
458 
459  LogicCondition logicConditions[30];
460  Common::Array<byte> eventFlags;
462  Common::Array<byte> items;
463  Common::Array<byte> disabledItems;
464  int16 heldItem = -1;
465  int16 primaryVideoResponsePicked = -1;
466  };
467 
468  struct InventorySoundOverride {
469  bool isDefault = false; // When true, other fields are ignored
470  SoundDescription sound;
471  Common::String caption;
472  };
473 
474  // The overrides of the character being played
475  Common::HashMap<uint16, InventorySoundOverride> &activeSoundOverrides();
476 
477  // UI
478  UI::FullScreenImage _frame;
479  UI::Viewport _viewport;
480  UI::Textbox _textbox;
481  UI::InventoryBox _inventoryBox;
482  UI::InventoryPopup _inventoryPopup;
483  UI::NotebookPopup _notebookPopup;
484  UI::CellPhonePopup _cellPhonePopup;
485  UI::ConversationPopup _conversationPopup;
486 
487  UI::Button *_menuButton;
488  UI::Button *_helpButton;
489  UI::Taskbar *_taskbar;
490  Time _buttonPressActivationTime;
491 
492  // A clicked MENU/HELP taskbar button whose state change is deferred until
493  // its click sound finishes playing (see handleInput). -1 = none pending.
494  int _pendingTaskbarButton;
495 
496  UI::ViewportOrnaments *_viewportOrnaments;
497  UI::TextboxOrnaments *_textboxOrnaments;
498  UI::InventoryBoxOrnaments *_inventoryBoxOrnaments;
499  RenderObject *_clock;
500 
501  UI::Camera *_camera; // Nancy14 only
502 
503  Common::Rect _mapHotspot;
504 
505  // General data
506  SceneState _sceneState;
507  PlayFlags _flags;
508  uint16 _difficulty;
509  Common::Array<uint16> _hintsRemaining;
510  int16 _lastHintCharacter;
511  int16 _lastHintID;
512  NancyState::NancyState _gameStateRequested;
513  // One set of overrides per player character; everything before Nancy15 only
514  // ever touches the first
515  Common::HashMap<uint16, InventorySoundOverride> _inventorySoundOverrides[kMaxPlayerCharacters];
516 
517  Misc::Lightning *_lightning;
518  Misc::ViewportFader *_viewportFader;
519  UI::NDUI::Manager *_ndui;
520  Common::Queue<Misc::SpecialEffect> _specialEffects;
521 
523 
524  Action::ActionManager _actionManager;
525 
526  // Nancy16: the records that fill the journal and the task list, which wait for
527  // their conditions for the whole game
528  Action::ActionManager _uiPrepActions;
529 
530  // Nancy17: the scenes running next to this one
531  SceneStreamManager _streams;
532 
533 #ifdef ENABLE_NANCY_V4
534  // Nancy19: the script of the scene, which takes the place of the action records
535  Script::SceneContext *_scriptScene = nullptr;
536  bool _isScriptedUIReady = false;
537 
538  // Nancy20: the main stream can also be in a scene that has a name instead of
539  // a number, like "s1002a_SC". These hold the name of the scene it is in and
540  // of the one it goes to next. When a name is set, it is what counts: the
541  // sceneID of _sceneState.currentScene or nextScene is kNoScene then, while
542  // the frame and the rest of the description still apply. For numbered scenes
543  // both stay empty, and the earlier games never set them.
544  Common::String _scriptSceneName;
545  Common::String _nextScriptSceneName;
546 #endif
547  double _frameSeconds = 0.0; // how long the last frame took
548  Action::PlaySecondaryMovie *_activeMovie;
549  Action::ConversationSound *_activeConversation;
550 
551  // Set by notifyRandomMovieARLoaded; checked in clearSceneData to wind
552  // down a persistent random-movie whose scene chain is over.
553  bool _hadRandomMovieARThisScene = false;
554 
555  // Whether esc was already down last frame, so a held key only skips once
556  bool _escHeld = false;
557 
558  // Set when esc skipped a cinematic this frame
559  bool _hasSkippedMovie = false;
560 
561  bool _isLoadingSecondChance = false;
562 
564 
565  // Contains a screenshot of the Scene state from the last time it was exited
566  Graphics::ManagedSurface _lastScreenshot;
567 
568  bool _destroyOnExit;
569  bool _isRunningAd;
570 
571  // State for a running UI prep scene (see startUIPrepScene).
572  struct UIPrepState {
573  bool active = false;
574  int16 uiType = 0; // UIType of the popup that requested the prep
575  SceneChangeDescription returnScene;
576  uint32 startMillis = 0;
577  } _uiPrep;
578 
579  State _state;
580 };
581 
582 #define NancySceneState Nancy::State::Scene::instance()
583 
584 } // End of namespace State
585 } // End of namespace Nancy
586 
587 #endif // NANCY_STATE_SCENE_H
Definition: types.h:91
Definition: managed_surface.h:51
Definition: conversationpopup.h:41
Definition: str.h:59
Definition: inventorypopup.h:43
Definition: viewport.h:42
Definition: time.h:30
Definition: taskbar.h:36
Definition: commontypes.h:186
Definition: camera.h:38
Definition: puzzledata.h:38
Definition: inventorybox.h:42
Definition: rect.h:536
Definition: path.h:52
Definition: textbox.h:39
Definition: stream.h:745
Definition: secondarymovie.h:47
Definition: conversation.h:41
Definition: scenecontext.h:52
Definition: queue.h:42
Definition: serializer.h:80
Definition: actionmanager.h:48
Definition: soundequalizerpuzzle.h:27
Definition: renderobject.h:36
Definition: scene.h:91
Definition: scene.h:363
Definition: ornaments.h:30
Definition: lightning.h:32
Definition: viewportfader.h:33
Definition: clock.h:37
Definition: manager.h:70
Definition: button.h:33
Definition: algorithm.h:29
Definition: cellphonepopup.h:38
Definition: notebookpopup.h:38
Definition: commontypes.h:306
Definition: puzzledata.h:384
Definition: puzzledata.h:374
Definition: ornaments.h:38
Definition: fullscreenimage.h:30
Definition: ornaments.h:46
Definition: scenestream.h:152
Definition: scene.h:89
Definition: input.h:69
Definition: commontypes.h:201
Definition: hash-str.h:49
Definition: hash-str.h:45
Definition: actionmanager.h:32
Definition: singleton.h:42