22#ifndef VCRUISE_RUNTIME_H
23#define VCRUISE_RUNTIME_H
25#include "graphics/pixelformat.h"
27#include "common/hashmap.h"
28#include "common/keyboard.h"
29#include "common/mutex.h"
30#include "common/rect.h"
32#include "vcruise/detection.h"
39class MemoryReadStream;
49class SeekableAudioStream;
50class LoopingAudioStream;
78static const uint kNumDirections = 8;
79static const uint kNumHighPrecisionDirections = 256;
80static const uint kHighPrecisionDirectionMultiplier = kNumHighPrecisionDirections / kNumDirections;
81static const uint kNumStartConfigs = 3;
84 kStartConfigCheatMenu,
94class RuntimeMenuInterface;
98struct IScriptCompilerGlobalState;
102class SampleLoopAudioStream;
103struct AD2044Graphics;
107 kGameStateWaitingForAnimation,
108 kGameStateWaitingForAnimationToDelay,
109 kGameStateWaitingForFacing,
110 kGameStateWaitingForFacingToAnim,
115 kGameStateScriptReset,
117 kGameStateGyroAnimation,
128 short fwdAnimationID;
129 short revAnimationID;
158 uint16 interactionID;
170 virtual void setRoomNumber(uint roomNumber) = 0;
172 virtual void unload() = 0;
181 uint panInteractionID;
182 uint clickInteractionID;
184 uint lastHighlightedItem;
185 uint animChangeFrameOffset;
186 uint animChangeNumFrames;
268 int32 rampStartVolume;
270 int32 rampRatePerMSec;
271 uint32 rampStartTime;
272 bool rampTerminateOnCompletion;
277 uint effectiveVolume;
278 int32 effectiveBalance;
283 bool restartWhenAudible;
284 bool tryToLoopWhenRestarted;
304 uint sceneChangesRemaining;
328 int32 volumeOrDurationInSeconds;
351 bool lockInteractions;
363 uint32 nextStartTime;
364 uint currentAlternation;
371 uint16 areaFrameIndex;
383 uint16 frameNumberInArea;
406 Fraction(uint pNumerator, uint pDenominator);
412enum LoadGameOutcome {
413 kLoadGameOutcomeSucceeded,
415 kLoadGameOutcomeSaveDataCorrupted,
417 kLoadGameOutcomeMissingVersion,
418 kLoadGameOutcomeInvalidVersion,
419 kLoadGameOutcomeSaveIsTooNew,
420 kLoadGameOutcomeSaveIsTooOld,
445 bool tryToLoopWhenRestarted;
463 bool havePendingPostSwapScreenReset;
465 uint loadedAnimation;
466 uint animDisplayingFrame;
467 bool haveIdleAnimationLoop;
477 bool musicMuteDisabled;
514 static const uint kSaveGameIdentifier = 0x53566372;
515 static const uint kSaveGameCurrentVersion = 10;
516 static const uint kSaveGameEarliestSupportedVersion = 2;
517 static const uint kMaxStates = 2;
525 uint swapOutDirection;
527 uint8 inventoryActiveItem;
553 kOSEventTypeMouseMove,
554 kOSEventTypeLButtonDown,
555 kOSEventTypeLButtonUp,
557 kOSEventTypeKeymappedEvent,
563 kKeymappedEventEscape,
565 kKeymappedEventSaveGame,
566 kKeymappedEventLoadGame,
567 kKeymappedEventSoundSettings,
569 kKeymappedEventPause,
570 kKeymappedEventMusicToggle,
571 kKeymappedEventSoundToggle,
572 kKeymappedEventMusicVolumeDown,
573 kKeymappedEventMusicVolumeUp,
574 kKeymappedEventSoundVolumeDown,
575 kKeymappedEventSoundVolumeUp,
577 kKeymappedEventSkipAnimation,
579 kKeymappedEventPutItem,
587 KeymappedEvent keymappedEvent;
640 friend class RuntimeMenuInterface;
647 kCharSetChineseTraditional,
648 kCharSetChineseSimplified,
656 void loadCursors(
const char *exeName);
657 void setDebugMode(
bool debugMode);
658 void setFastAnimationMode(
bool fastAnimationMode);
659 void setPreloadSounds(
bool preloadSounds);
660 void setLowQualityGraphicsMode(
bool lowQualityGraphicsMode);
665 void onLButtonDown(int16 x, int16 y);
666 void onLButtonUp(int16 x, int16 y);
667 void onMouseMove(int16 x, int16 y);
668 void onKeymappedEvent(KeymappedEvent evt);
670 bool canSave(
bool onCurrentScreen)
const;
671 bool canLoad()
const;
673 void recordSaveGameSnapshot();
675 void restoreSaveGameSnapshot();
681 bool bootGame(
bool newGame);
682 static void resolveCodePageForLanguage(
Common::Language lang, Common::CodePage &outCodePage, CharSet &outCharSet);
690 enum IndexParseType {
693 kIndexParseTypeRRoom,
694 kIndexParseTypeYRoom,
695 kIndexParseTypeVRoom,
696 kIndexParseTypeTRoom,
697 kIndexParseTypeCRoom,
698 kIndexParseTypeSRoom,
699 kIndexParseTypeNameRoom,
702 enum AnimDecoderState {
703 kAnimDecoderStateStopped,
704 kAnimDecoderStatePlaying,
705 kAnimDecoderStatePaused,
708 struct IndexPrefixTypePair {
710 IndexParseType parseType;
713 struct RenderSection {
722 static const uint kMaxPreviousStates = 3;
726 int32 previousStates[kMaxPreviousStates];
727 int32 requiredPreviousStates[kMaxPreviousStates];
728 uint numPreviousStates;
729 uint numPreviousStatesRequired;
744 static const uint kNumGyros = 5;
746 Gyro gyros[kNumGyros];
748 uint completeInteraction;
749 uint failureInteraction;
750 uint frameSeparation;
762 int32 dragCurrentState;
763 bool isWaitingForAnimation;
766 enum PanoramaCursorFlags {
767 kPanCursorDraggableHoriz = (1 << 0),
768 kPanCursorDraggableUp = (1 << 1),
769 kPanCursorDraggableDown = (1 << 2),
771 kPanCursorDirectionUp = (0 << 3),
772 kPanCursorDirectionLeft = (1 << 3),
773 kPanCursorDirectionRight = (2 << 3),
774 kPanCursorDirectionDown = (3 << 3),
776 kPanCursorMaxCount = (1 << 5),
780 kPanoramaStateInactive,
782 kPanoramaStatePanningUncertainDirection,
784 kPanoramaStatePanningLeft,
785 kPanoramaStatePanningRight,
786 kPanoramaStatePanningUp,
787 kPanoramaStatePanningDown,
790 enum InGameMenuState {
791 kInGameMenuStateInvisible,
792 kInGameMenuStateVisible,
793 kInGameMenuStateHoveringInactive,
794 kInGameMenuStateHoveringActive,
795 kInGameMenuStateClickingOver,
796 kInGameMenuStateClickingNotOver,
797 kInGameMenuStateClickingInactive,
800 enum SoundLoopBehavior {
801 kSoundLoopBehaviorNo,
802 kSoundLoopBehaviorYes,
803 kSoundLoopBehaviorAuto,
806 static const uint kPanLeftInteraction = 1;
807 static const uint kPanDownInteraction = 2;
808 static const uint kPanRightInteraction = 3;
809 static const uint kPanUpInteraction = 4;
811 static const uint kPanoramaLeftFlag = 1;
812 static const uint kPanoramaRightFlag = 2;
813 static const uint kPanoramaUpFlag = 4;
814 static const uint kPanoramaDownFlag = 8;
815 static const uint kPanoramaHorizFlags = (kPanoramaLeftFlag | kPanoramaRightFlag);
817 static const uint kNumInventorySlots = 6;
818 static const uint kNumInventoryPages = 8;
820 typedef int32 ScriptArg_t;
821 typedef int32 StackInt_t;
824 enum StackValueType {
841 StackValue(
const StackValue &other);
842 StackValue(StackValue &&other);
843 explicit StackValue(StackInt_t i);
848 StackValue &operator=(
const StackValue &other);
849 StackValue &operator=(StackValue &&other);
855 struct CallStackFrame {
859 uint _nextInstruction;
867 uint durationInDeciseconds;
871 struct SubtitleQueueItem {
880 bool runHorizontalPan(
bool isRight);
882 bool requireAvailableStack(uint n);
883 bool runWaitForAnimation();
884 bool runWaitForAnimationToDelay();
885 bool runWaitForFacing();
886 bool runWaitForFacingToAnim();
888 bool runGyroAnimation();
890 void continuePlayingAnimation(
bool loop,
bool useStopFrame,
bool &outEndedAnimation);
891 void drawSectionToScreen(
const RenderSection §ion,
const Common::Rect &rect);
892 void commitSectionToScreen(
const RenderSection §ion,
const Common::Rect &rect);
893 void terminateScript();
895 RoomScriptSet *getRoomScriptSetForCurrentRoom()
const;
896 bool checkCompletionConditions();
898 void startTerminatingHorizontalPan(
bool isRight);
900 bool popOSEvent(OSEvent &evt);
901 void queueOSEvent(
const OSEvent &evt);
903 void processUniversalKeymappedEvents(KeymappedEvent evt);
905 void loadReahSchizmIndex();
906 void loadAD2044ExecutableResources();
908 void loadConfig(
const char *cfgPath);
910 void loadDuplicateRooms();
911 void loadAllSchizmScreenNames();
913 SoundCache *loadCache(SoundInstance &sound);
914 void resolveSoundByName(
const Common::String &soundName,
bool load, StackInt_t &outSoundID, SoundInstance *&outWave);
915 SoundInstance *resolveSoundByID(uint soundID);
916 void resolveSoundByNameOrID(
const StackValue &stackValue,
bool load, StackInt_t &outSoundID, SoundInstance *&outWave);
918 void changeToScreen(uint roomNumber, uint screenNumber);
919 void clearIdleAnimations();
921 void changeToExamineItem();
922 void returnFromExaminingItem();
923 bool triggerPreIdleActions();
924 void returnToIdleState();
926 void refreshCursor(uint32 currentTime);
927 bool dischargeIdleMouseMove();
928 bool dischargeIdleMouseDown();
929 bool dischargeIdleClick();
934 void changeMusicTrack(
int musicID);
935 void startScoreSection();
936 void setMusicMute(
bool muted);
938 void changeAnimation(
const AnimationDef &animDef,
bool consumeFPSOverride);
939 void changeAnimation(
const AnimationDef &animDef, uint initialFrame,
bool consumeFPSOverride);
940 void changeAnimation(
const AnimationDef &animDef, uint initialFrame,
bool consumeFPSOverride,
const Fraction &defaultFrameRate);
941 void applyAnimationVolume();
943 void setSound3DParameters(SoundInstance &sound, int32 x, int32 y,
const SoundParams3D &soundParams3D);
944 void triggerSound(SoundLoopBehavior loopBehavior, SoundInstance &sound, int32 volume, int32 balance,
bool is3D,
bool isSpeech);
945 void triggerSoundRamp(SoundInstance &sound, uint durationMSec, int32 newVolume,
bool terminateOnCompletion);
946 void stopSound(SoundInstance &sound);
947 void convertLoopingSoundToNonLooping(SoundInstance &sound);
948 void updateSounds(uint32 timestamp);
949 void updateSubtitles();
950 void update3DSounds();
951 bool computeEffectiveVolumeAndBalance(SoundInstance &snd);
952 void triggerAmbientSounds();
953 uint decibelsToLinear(
int db, uint baseVolume, uint maxVolume)
const;
954 int32 getSilentSoundVolume()
const;
955 int32 getDefaultSoundVolume()
const;
956 uint applyVolumeScale(int32 volume)
const;
957 int applyBalanceScale(int32 balance)
const;
959 void triggerWaveSubtitles(
const SoundInstance &sound,
const Common::String &
id);
960 void stopSubtitles();
962 AnimationDef stackArgsToAnimDef(
const StackInt_t *args)
const;
963 void consumeAnimChangeAndAdjustAnim(AnimationDef &animDef);
964 void pushAnimDef(
const AnimationDef &animDef);
970 void allocateRoomsUpTo(uint roomNumber);
972 void drawDebugOverlay();
976 void detectPanoramaDirections();
977 void detectPanoramaMouseMovement(uint32 timestamp);
978 void panoramaActivate();
980 bool computeFaceDirectionAnimation(uint desiredDirection,
const AnimationDef *&outAnimDef, uint &outInitialFrame, uint &outStopFrame);
982 void inventoryAddItem(uint item);
983 void inventoryRemoveItem(uint item);
987 void redrawSubtitleSection();
988 void clearSubtitleSection();
990 void drawInventory(uint slot);
992 bool isTrayVisible()
const;
993 void resetInventoryHighlights();
994 void loadInventoryFromPage();
995 void copyInventoryToPage();
997 static uint32 getLocationForScreen(uint roomNumber, uint screenNumber);
998 void updatePlacedItemCache();
999 void drawPlacedItemGraphic();
1000 void clearPlacedItemGraphic();
1001 void drawActiveItemGraphic();
1002 void clearActiveItemGraphic();
1003 void drawInventoryItemGraphic(uint slot);
1004 void clearInventoryItemGraphic(uint slot);
1005 void dropActiveItem();
1006 void pickupPlacedItem();
1007 void stashActiveItemToInventory(uint slot);
1008 void pickupInventoryItem(uint slot);
1014 bool loadSubtitles(Common::CodePage codePage,
bool guessCodePage);
1016 void changeToMenuPage(MenuPage *menuPage);
1018 void checkInGameMenuHover();
1019 void dismissInGameMenu();
1020 void dischargeInGameMenuMouseUp();
1021 void drawInGameMenuButton(uint element);
1026 void clearCircuitPuzzle();
1027 void clearCircuitHighlightRect(
const Common::Rect &rect);
1028 void drawCircuitHighlightRect(
const Common::Rect &rect);
1036 void scriptOpNumber(ScriptArg_t arg);
1037 void scriptOpRotate(ScriptArg_t arg);
1038 void scriptOpAngle(ScriptArg_t arg);
1039 void scriptOpAngleGGet(ScriptArg_t arg);
1040 void scriptOpSpeed(ScriptArg_t arg);
1041 void scriptOpSAnimL(ScriptArg_t arg);
1042 void scriptOpChangeL(ScriptArg_t arg);
1044 void scriptOpAnimR(ScriptArg_t arg);
1045 void scriptOpAnimF(ScriptArg_t arg);
1046 void scriptOpAnimN(ScriptArg_t arg);
1047 void scriptOpAnimG(ScriptArg_t arg);
1048 void scriptOpAnimS(ScriptArg_t arg);
1049 void scriptOpAnim(ScriptArg_t arg);
1051 void scriptOpStatic(ScriptArg_t arg);
1052 void scriptOpVarLoad(ScriptArg_t arg);
1053 void scriptOpVarStore(ScriptArg_t arg);
1054 void scriptOpVarAddAndStore(ScriptArg_t arg);
1055 void scriptOpVarGlobalLoad(ScriptArg_t arg);
1056 void scriptOpVarGlobalStore(ScriptArg_t arg);
1058 void scriptOpItemCheck(ScriptArg_t arg);
1059 void scriptOpItemRemove(ScriptArg_t arg);
1060 void scriptOpItemHighlightSet(ScriptArg_t arg);
1061 void scriptOpItemAdd(ScriptArg_t arg);
1062 void scriptOpItemHaveSpace(ScriptArg_t arg);
1063 void scriptOpItemClear(ScriptArg_t arg);
1065 void scriptOpSetCursor(ScriptArg_t arg);
1066 void scriptOpSetRoom(ScriptArg_t arg);
1067 void scriptOpLMB(ScriptArg_t arg);
1068 void scriptOpLMB1(ScriptArg_t arg);
1069 void scriptOpSoundS1(ScriptArg_t arg);
1070 void scriptOpSoundS2(ScriptArg_t arg);
1071 void scriptOpSoundS3(ScriptArg_t arg);
1072 void scriptOpSoundL1(ScriptArg_t arg);
1073 void scriptOpSoundL2(ScriptArg_t arg);
1074 void scriptOpSoundL3(ScriptArg_t arg);
1075 void scriptOp3DSoundS2(ScriptArg_t arg);
1076 void scriptOp3DSoundL2(ScriptArg_t arg);
1077 void scriptOp3DSoundL3(ScriptArg_t arg);
1078 void scriptOpStopAL(ScriptArg_t arg);
1079 void scriptOpRange(ScriptArg_t arg);
1080 void scriptOpAddXSound(ScriptArg_t arg);
1081 void scriptOpClrXSound(ScriptArg_t arg);
1082 void scriptOpStopSndLA(ScriptArg_t arg);
1083 void scriptOpStopSndLO(ScriptArg_t arg);
1085 void scriptOpMusic(ScriptArg_t arg);
1086 void scriptOpMusicVolRamp(ScriptArg_t arg);
1087 void scriptOpParm0(ScriptArg_t arg);
1088 void scriptOpParm1(ScriptArg_t arg);
1089 void scriptOpParm2(ScriptArg_t arg);
1090 void scriptOpParm3(ScriptArg_t arg);
1091 void scriptOpParmG(ScriptArg_t arg);
1092 void scriptOpSParmX(ScriptArg_t arg);
1093 void scriptOpSAnimX(ScriptArg_t arg);
1095 void scriptOpVolumeDn2(ScriptArg_t arg);
1096 void scriptOpVolumeDn3(ScriptArg_t arg);
1097 void scriptOpVolumeDn4(ScriptArg_t arg);
1098 void scriptOpVolumeUp3(ScriptArg_t arg);
1099 void scriptOpRandom(ScriptArg_t arg);
1100 void scriptOpDrop(ScriptArg_t arg);
1101 void scriptOpDup(ScriptArg_t arg);
1102 void scriptOpSwap(ScriptArg_t arg);
1103 void scriptOpSay1(ScriptArg_t arg);
1104 void scriptOpSay2(ScriptArg_t arg);
1105 void scriptOpSay3(ScriptArg_t arg);
1106 void scriptOpSay3Get(ScriptArg_t arg);
1107 void scriptOpSetTimer(ScriptArg_t arg);
1108 void scriptOpGetTimer(ScriptArg_t arg);
1109 void scriptOpDelay(ScriptArg_t arg);
1110 void scriptOpLoSet(ScriptArg_t arg);
1111 void scriptOpLoGet(ScriptArg_t arg);
1112 void scriptOpHiSet(ScriptArg_t arg);
1113 void scriptOpHiGet(ScriptArg_t arg);
1115 void scriptOpNot(ScriptArg_t arg);
1116 void scriptOpAnd(ScriptArg_t arg);
1117 void scriptOpOr(ScriptArg_t arg);
1118 void scriptOpAdd(ScriptArg_t arg);
1119 void scriptOpSub(ScriptArg_t arg);
1120 void scriptOpNegate(ScriptArg_t arg);
1121 void scriptOpCmpEq(ScriptArg_t arg);
1122 void scriptOpCmpLt(ScriptArg_t arg);
1123 void scriptOpCmpGt(ScriptArg_t arg);
1125 void scriptOpBitLoad(ScriptArg_t arg);
1126 void scriptOpBitSet0(ScriptArg_t arg);
1127 void scriptOpBitSet1(ScriptArg_t arg);
1129 void scriptOpDisc1(ScriptArg_t arg);
1130 void scriptOpDisc2(ScriptArg_t arg);
1131 void scriptOpDisc3(ScriptArg_t arg);
1133 void scriptOpGoto(ScriptArg_t arg);
1135 void scriptOpEscOn(ScriptArg_t arg);
1136 void scriptOpEscOff(ScriptArg_t arg);
1137 void scriptOpEscGet(ScriptArg_t arg);
1138 void scriptOpBackStart(ScriptArg_t arg);
1139 void scriptOpSaveAs(ScriptArg_t arg);
1140 void scriptOpSave0(ScriptArg_t arg);
1141 void scriptOpExit(ScriptArg_t arg);
1142 void scriptOpAllowSaves(ScriptArg_t arg);
1144 void scriptOpAnimName(ScriptArg_t arg);
1145 void scriptOpValueName(ScriptArg_t arg);
1146 void scriptOpVarName(ScriptArg_t arg);
1147 void scriptOpSoundName(ScriptArg_t arg);
1148 void scriptOpCursorName(ScriptArg_t arg);
1149 void scriptOpDubbing(ScriptArg_t arg);
1151 void scriptOpCheckValue(ScriptArg_t arg);
1152 void scriptOpJump(ScriptArg_t arg);
1154 void scriptOpVerticalPanSet(
bool *flags);
1155 void scriptOpVerticalPanGet();
1158 void scriptOpCallFunction(ScriptArg_t arg);
1160 void scriptOpMusicStop(ScriptArg_t arg);
1161 void scriptOpMusicPlayScore(ScriptArg_t arg);
1162 void scriptOpScoreAlways(ScriptArg_t arg);
1163 void scriptOpScoreNormal(ScriptArg_t arg);
1164 void scriptOpSndPlay(ScriptArg_t arg);
1165 void scriptOpSndPlayEx(ScriptArg_t arg);
1166 void scriptOpSndPlay3D(ScriptArg_t arg);
1167 void scriptOpSndPlaying(ScriptArg_t arg);
1168 void scriptOpSndWait(ScriptArg_t arg);
1169 void scriptOpSndHalt(ScriptArg_t arg);
1170 void scriptOpSndToBack(ScriptArg_t arg);
1171 void scriptOpSndStop(ScriptArg_t arg);
1172 void scriptOpSndStopAll(ScriptArg_t arg);
1173 void scriptOpSndAddRandom(ScriptArg_t arg);
1174 void scriptOpSndClearRandom(ScriptArg_t arg);
1175 void scriptOpVolumeAdd(ScriptArg_t arg);
1176 void scriptOpVolumeChange(ScriptArg_t arg);
1177 void scriptOpAnimVolume(ScriptArg_t arg);
1178 void scriptOpAnimChange(ScriptArg_t arg);
1179 void scriptOpScreenName(ScriptArg_t arg);
1180 void scriptOpExtractByte(ScriptArg_t arg);
1181 void scriptOpInsertByte(ScriptArg_t arg);
1182 void scriptOpString(ScriptArg_t arg);
1183 void scriptOpCmpNE(ScriptArg_t arg);
1184 void scriptOpCmpLE(ScriptArg_t arg);
1185 void scriptOpCmpGE(ScriptArg_t arg);
1186 void scriptOpReturn(ScriptArg_t arg);
1187 void scriptOpSpeech(ScriptArg_t arg);
1188 void scriptOpSpeechEx(ScriptArg_t arg);
1189 void scriptOpSpeechTest(ScriptArg_t arg);
1190 void scriptOpSay(ScriptArg_t arg);
1191 void scriptOpRandomInclusive(ScriptArg_t arg);
1192 void scriptOpHeroOut(ScriptArg_t arg);
1193 void scriptOpHeroGetPos(ScriptArg_t arg);
1194 void scriptOpHeroSetPos(ScriptArg_t arg);
1195 void scriptOpHeroGet(ScriptArg_t arg);
1196 void scriptOpGarbage(ScriptArg_t arg);
1197 void scriptOpGetRoom(ScriptArg_t arg);
1198 void scriptOpBitAnd(ScriptArg_t arg);
1199 void scriptOpBitOr(ScriptArg_t arg);
1200 void scriptOpAngleGet(ScriptArg_t arg);
1201 void scriptOpIsDVDVersion(ScriptArg_t arg);
1202 void scriptOpIsCDVersion(ScriptArg_t arg);
1203 void scriptOpDisc(ScriptArg_t arg);
1204 void scriptOpHidePanel(ScriptArg_t arg);
1205 void scriptOpRotateUpdate(ScriptArg_t arg);
1206 void scriptOpMul(ScriptArg_t arg);
1207 void scriptOpDiv(ScriptArg_t arg);
1208 void scriptOpMod(ScriptArg_t arg);
1209 void scriptOpGetDigit(ScriptArg_t arg);
1210 void scriptOpPuzzleInit(ScriptArg_t arg);
1211 void scriptOpPuzzleCanPress(ScriptArg_t arg);
1212 void scriptOpPuzzleDoMove1(ScriptArg_t arg);
1213 void scriptOpPuzzleDoMove2(ScriptArg_t arg);
1214 void scriptOpPuzzleDone(ScriptArg_t arg);
1215 void scriptOpPuzzleWhoWon(ScriptArg_t arg);
1216 void scriptOpFn(ScriptArg_t arg);
1217 void scriptOpItemHighlightSetTrue(ScriptArg_t arg);
1220 void scriptOpAnimAD2044(
bool isForward);
1221 void scriptOpAnimT(ScriptArg_t arg);
1222 void scriptOpAnimForward(ScriptArg_t arg);
1223 void scriptOpAnimReverse(ScriptArg_t arg);
1224 void scriptOpAnimKForward(ScriptArg_t arg);
1225 void scriptOpNoUpdate(ScriptArg_t arg);
1226 void scriptOpNoClear(ScriptArg_t arg);
1227 void scriptOpSay1_AD2044(ScriptArg_t arg);
1228 void scriptOpSay2_AD2044(ScriptArg_t arg);
1229 void scriptOpSay1Rnd(ScriptArg_t arg);
1230 void scriptOpM(ScriptArg_t arg);
1231 void scriptOpEM(ScriptArg_t arg);
1232 void scriptOpSE(ScriptArg_t arg);
1233 void scriptOpSDot(ScriptArg_t arg);
1234 void scriptOpE(ScriptArg_t arg);
1235 void scriptOpDot(ScriptArg_t arg);
1236 void scriptOpSound(ScriptArg_t arg);
1237 void scriptOpISound(ScriptArg_t arg);
1238 void scriptOpUSound(ScriptArg_t arg);
1239 void scriptOpSayCycle_AD2044(
const StackInt_t *values, uint numValues);
1240 void scriptOpSay2K(ScriptArg_t arg);
1241 void scriptOpSay3K(ScriptArg_t arg);
1242 void scriptOpRGet(ScriptArg_t arg);
1243 void scriptOpRSet(ScriptArg_t arg);
1244 void scriptOpEndRSet(ScriptArg_t arg);
1245 void scriptOpStop(ScriptArg_t arg);
1250 InventoryItem _inventory[kNumInventorySlots];
1251 InventoryItem _inventoryPages[kNumInventoryPages][kNumInventorySlots];
1253 uint8 _inventoryActivePage;
1254 InventoryItem _inventoryActiveItem;
1255 InventoryItem _inventoryPlacedItemCache;
1266 uint _panCursors[kPanCursorMaxCount];
1279 uint _swapOutScreen;
1280 uint _swapOutDirection;
1284 AnimationDef _panLeftAnimationDef;
1285 AnimationDef _panRightAnimationDef;
1286 bool _haveHorizPanAnimations;
1287 bool _havePanUpFromDirection[kNumDirections];
1288 bool _havePanDownFromDirection[kNumDirections];
1290 StaticAnimation _idleAnimations[kNumDirections];
1291 bool _haveIdleAnimations[kNumDirections];
1292 bool _haveIdleStaticAnimation;
1293 bool _keepStaticAnimationInIdle;
1295 StaticAnimParams _pendingStaticAnimParams;
1297 uint32 _delayCompletionTime;
1299 AnimationDef _postFacingAnimDef;
1302 AnimationDef _circuitPuzzleBlockAnimation;
1303 AnimationDef _circuitPuzzleConnectAnimation;
1308 uint _panoramaDirectionFlags;
1310 uint _loadedRoomNumber;
1311 uint _activeScreenNumber;
1312 bool _havePendingScreenChange;
1313 bool _forceScreenChange;
1323 bool _havePendingPreIdleActions;
1324 bool _havePendingReturnToIdleState;
1325 bool _havePendingPostSwapScreenReset;
1327 bool _havePendingCompletionCheck;
1328 GameState _gameState;
1333 bool _havePendingPlayAmbientSounds;
1334 uint32 _ambientSoundFinishTime;
1338 bool _fastAnimationMode;
1339 bool _preloadSounds;
1340 bool _lowQualityGraphicsMode;
1342 VCruiseGameID _gameID;
1346 RoomToScreenNameToRoomMap_t _globalRoomScreenNameToScreenIDs;
1353 ScriptEnvironmentVars _scriptEnv;
1364 bool _musicMuteDisabled;
1368 uint32 _scoreSectionEndTime;
1371 uint32 _musicVolumeRampStartTime;
1372 int32 _musicVolumeRampStartVolume;
1373 int32 _musicVolumeRampRatePerMSec;
1374 int32 _musicVolumeRampEnd;
1380 AnimDecoderState _animDecoderState;
1381 bool _animTerminateAtStartOfFrame;
1382 uint _animPendingDecodeFrame;
1383 uint _animDisplayingFrame;
1384 uint _animFirstFrame;
1385 uint _animLastFrame;
1386 uint _animStopFrame;
1388 Fraction _animFrameRateLock;
1390 uint32 _animStartTime;
1391 uint32 _animFramesDecoded;
1392 uint _loadedAnimation;
1393 bool _loadedAnimationHasSound;
1394 bool _animPlayWhileIdle;
1408 bool _idleLockInteractions;
1409 bool _idleIsOnInteraction;
1410 bool _idleHaveClickInteraction;
1411 bool _idleHaveDragInteraction;
1412 uint _idleInteractionID;
1414 bool _idleIsOnOpenCircuitPuzzleLink;
1417 bool _idleIsCircuitPuzzleLinkDown;
1420 bool _forceAllowSaves;
1422 InGameMenuState _inGameMenuState;
1423 uint _inGameMenuActiveElement;
1424 bool _inGameMenuButtonActive[5];
1431 RenderSection _gameSection;
1432 RenderSection _gameDebugBackBuffer;
1433 RenderSection _menuSection;
1434 RenderSection _traySection;
1435 RenderSection _fullscreenMenuSection;
1436 RenderSection _subtitleSection;
1437 RenderSection _placedItemBackBufferSection;
1441 uint32 _lmbDownTime;
1442 int _lmbDragTolerance;
1445 bool _lmbReleaseWasClick;
1447 PanoramaState _panoramaState;
1458 SoundParams3D _pendingSoundParams3D;
1466 int32 _listenerAngle;
1468 Fraction _animSpeedRotation;
1469 Fraction _animSpeedStaticAnim;
1470 Fraction _animSpeedDefault;
1472 static const uint kAnimDefStackArgs = 8;
1474 static const uint kCursorArrow = 0;
1475 static const uint kCursorWait = 29;
1477 static const int kPanoramaPanningMarginX = 11;
1478 static const int kPanoramaPanningMarginY = 11;
1480 static const uint kSoundCacheSize = 16;
1482 static const uint kExamineItemInteractionID = 0xfffffff0u;
1484 static const uint kReturnInventorySlot0InteractionID = 0xfffffff1u;
1485 static const uint kReturnInventorySlot1InteractionID = 0xfffffff2u;
1486 static const uint kReturnInventorySlot2InteractionID = 0xfffffff3u;
1487 static const uint kReturnInventorySlot3InteractionID = 0xfffffff4u;
1488 static const uint kReturnInventorySlot4InteractionID = 0xfffffff5u;
1489 static const uint kReturnInventorySlot5InteractionID = 0xfffffff6u;
1491 static const uint kPickupInventorySlot0InteractionID = 0xfffffff7u;
1492 static const uint kPickupInventorySlot1InteractionID = 0xfffffff8u;
1493 static const uint kPickupInventorySlot2InteractionID = 0xfffffff9u;
1494 static const uint kPickupInventorySlot3InteractionID = 0xfffffffau;
1495 static const uint kPickupInventorySlot4InteractionID = 0xfffffffbu;
1496 static const uint kPickupInventorySlot5InteractionID = 0xfffffffcu;
1498 static const uint kObjectPickupInteractionID = 0xfffffffdu;
1499 static const uint kObjectDropInteractionID = 0xfffffffeu;
1501 static const uint kHeroChangeInteractionID = 0xffffffffu;
1504 uint _soundCacheIndex;
1513 uint _defaultLanguageIndex;
1514 uint _languageIndex;
1518 StartConfigDef _startConfigs[kNumStartConfigs];
1526 AnimSubtitleMap_t _animSubtitles;
1529 bool _isDisplayingSubtitles;
1530 bool _isSubtitleSourceAnimation;
1538 AnimatedCursor *_currentAnimatedCursor;
1540 uint32 _cursorTimeBase;
1541 uint32 _cursorCycleLength;
1543 int32 _dbToVolume[49];
Definition: managed_surface.h:51
Definition: mididrv.h:313
Definition: runtime.h:166
Definition: runtime.h:638
Language
Definition: language.h:45
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: ad2044_items.h:27
Definition: atari-cursor.h:35
Definition: runtime.h:125
Definition: runtime.h:387
Definition: runtime.h:626
Definition: runtime.h:625
Definition: runtime.h:132
Definition: runtime.h:612
Definition: runtime.h:404
Definition: runtime.h:377
Definition: runtime.h:367
Definition: runtime.h:154
Definition: runtime.h:395
Definition: runtime.h:162
Definition: runtime.h:582
Definition: runtime.h:295
Definition: runtime.h:144
Definition: runtime.h:488
Definition: runtime.h:499
Definition: runtime.h:487
Definition: runtime.h:425
Definition: runtime.h:435
Definition: runtime.h:424
Definition: runtime.h:323
Definition: runtime.h:331
Definition: runtime.h:178
Definition: runtime.h:219
Definition: runtime.h:203
Definition: runtime.h:213
Definition: runtime.h:196
Definition: runtime.h:246
Definition: runtime.h:259
Definition: runtime.h:231
Definition: runtime.h:337
Definition: runtime.h:346
Definition: runtime.h:357
Definition: runtime.h:591
Definition: runtime.h:310
Definition: runtime.h:603
Definition: runtime.h:829