25#include "audio/mixer.h"
26#include "common/scummsys.h"
27#include "common/system.h"
28#include "common/error.h"
30#include "common/hash-ptr.h"
31#include "common/hash-str.h"
32#include "common/random.h"
33#include "common/serializer.h"
34#include "common/events.h"
35#include "common/util.h"
36#include "engines/engine.h"
37#include "engines/savestate.h"
39#include "mediastation/actor.h"
40#include "mediastation/actors/stage.h"
41#include "mediastation/boot.h"
42#include "mediastation/clients.h"
43#include "mediastation/context.h"
44#include "mediastation/cursors.h"
45#include "mediastation/datafile.h"
46#include "mediastation/debugger.h"
47#include "mediastation/detection.h"
48#include "mediastation/events.h"
49#include "mediastation/graphics.h"
50#include "mediastation/mediascript/function.h"
51#include "mediastation/profile.h"
53namespace MediaStation {
55struct MediaStationGameDescription;
71static const char *
const directoryGlobs[] = {
85 uint32 getFeatures()
const;
88 const char *getAppName()
const;
91 void generateMouseUpdateEvent();
92 uint currentTimeInSeconds();
96 PrintManager *getPrintManager() {
return _printManager; }
97 CursorManager *getCursorManager() {
return _cursorManager; }
98 FunctionManager *getFunctionManager() {
return _functionManager; }
99 RootStage *getRootStage() {
return _stageDirector->getRootStage(); }
100 StageDirector *getStageDirector() {
return _stageDirector; }
101 StreamFeedManager *getStreamFeedManager() {
return _streamFeedManager; }
102 EventLoop *getEventLoop() {
return _eventLoop; }
103 Document *getDocument() {
return _document; }
104 TimerService *getTimerService() {
return _timerService; }
105 ImtGod *getImtGod() {
return _imtGod; }
106 ImtDeviceOwner *getDeviceOwner() {
return _deviceOwner; }
108 void registerAudioSequence(AudioSequence *sequence);
109 void unregisterAudioSequence(AudioSequence *sequence);
110 void serviceSounds();
112 Common::String formatActorName(uint actorId,
bool attemptToGetType =
false,
bool includeDefaultName =
true) {
return _profile->formatActorName(actorId, attemptToGetType, includeDefaultName); }
113 Common::String formatActorName(
const Actor *actor,
bool includeDefaultName =
true) {
return _profile->formatActorName(actor, includeDefaultName); }
114 Common::String formatFunctionName(uint functionId,
bool includeDefaultName =
true) {
return _profile->formatFunctionName(functionId, includeDefaultName); }
115 Common::String formatFileName(uint fileId,
bool includeDefaultName =
true) {
return _profile->formatFileName(fileId, includeDefaultName); }
116 Common::String formatVariableName(uint variableId,
bool includeDefaultName =
true) {
return _profile->formatVariableName(variableId, includeDefaultName); }
117 Common::String formatParamTokenName(uint paramToken,
bool includeDefaultName =
true) {
return _profile->formatParamTokenName(paramToken, includeDefaultName); }
118 Common::String formatAssetNameForChannelIdent(uint channelIdent,
bool includeDefaultName =
true) {
return _profile->formatAssetNameForChannelIdent(channelIdent, includeDefaultName); }
120 SpatialEntity *getMouseInsideHotspot() {
return _mouseInsideHotspot; }
121 void setMouseInsideHotspot(SpatialEntity *entity) { _mouseInsideHotspot = entity; }
122 void clearMouseInsideHotspot() { _mouseInsideHotspot =
nullptr; }
124 SpatialEntity *getMouseDownHotspot() {
return _mouseDownHotspot; }
125 void setMouseDownHotspot(SpatialEntity *entity) { _mouseDownHotspot = entity; }
126 void clearMouseDownHotspot() { _mouseDownHotspot =
nullptr; }
128 static const uint SCREEN_WIDTH = 640;
129 static const uint SCREEN_HEIGHT = 480;
130 static const uint BOOT_STREAM_ID = 1;
149 ImtGod *_imtGod =
nullptr;
162 void initCursorManager();
163 void queueMouseEvent(EventType type,
const Common::Point &point);
174 void addConstructedActor(
Actor *actorToAdd);
175 void destroyActor(uint actorId);
178 void destroyContext(uint contextId,
bool eraseFromLoadedContexts =
true);
179 void destroyAllContexts();
180 void lockContext(uint contextId);
181 bool contextIsLocked(uint contextId);
182 void clearAllContextLocks();
184 void readUnrecognizedFromStream(
Chunk &chunk, uint sectionType);
185 void readHeaderSections(
Subfile &subfile,
Chunk &chunk);
187 const FileInfo &fileInfoForIdent(uint fileId) {
return _fileMap.getValOrDefault(fileId); }
188 const StreamInfo &streamInfoForIdent(uint streamId) {
return _streamMap.getValOrDefault(streamId); }
189 const ScreenReference &screenRefWithId(uint screenActorId) {
return _screenReferences.getValOrDefault(screenActorId); }
190 const ContextReference &contextRefWithId(uint contextId) {
return _contextReferences.getValOrDefault(contextId); }
192 Actor *getActorById(uint actorId);
193 Actor *getActorByIdAndType(uint actorId, ActorType expectedType);
195 ChannelClient *getChannelClientByChannelIdent(uint channelIdent);
197 Context *getContextById(uint contextId);
199 bool isFirstGenerationEngine()
const;
200 void setupInitialStreamMap();
219 uint _functionTableSize = 0;
222 virtual void readChunk(
Chunk &chunk)
override;
223 void readDocumentDef(
Chunk &chunk);
224 void readDocumentInfoFromStream(
Chunk &chunk, BootSectionType sectionType);
225 void readVersionInfoFromStream(
Chunk &chunk);
226 void readContextReferencesFromStream(
Chunk &chunk);
227 void readScreenReferencesFromStream(
Chunk &chunk);
228 void readAndAddFileMaps(
Chunk &chunk);
229 void readAndAddStreamMaps(
Chunk &chunk);
231 void readControlCommands(
Chunk &chunk);
232 void readCommandFromStream(
Chunk &chunk, ContextSectionType sectionType);
233 void readCreateContextData(
Chunk &chunk);
234 void readDestroyContextData(
Chunk &chunk);
235 void readCreateActorData(
Chunk &chunk);
236 void readDestroyActorData(
Chunk &chunk);
237 void readActorLoadComplete(
Chunk &chunk);
238 void readCreateVariableData(
Chunk &chunk);
239 void readSetContextName(
Chunk &chunk);
241 void destroyActorsInContext(uint contextId);
245#define SHOULD_QUIT ::MediaStation::g_engine->shouldQuit()
EngineFeature
Definition: engine.h:282
Definition: advancedDetector.h:164