25 #include "engines/engine.h" 27 #include "common/endian.h" 28 #include "common/events.h" 29 #include "common/file.h" 30 #include "common/savefile.h" 31 #include "common/keyboard.h" 32 #include "common/mutex.h" 33 #include "common/random.h" 34 #include "common/rect.h" 35 #include "common/rendermode.h" 36 #include "common/str.h" 37 #include "common/textconsole.h" 38 #include "common/text-to-speech.h" 39 #include "graphics/surface.h" 40 #include "graphics/sjis.h" 41 #include "graphics/palette.h" 43 #include "scumm/file.h" 44 #include "scumm/gfx.h" 45 #include "scumm/detection.h" 46 #include "scumm/script.h" 47 #include "scumm/serializer.h" 58 #define DISABLE_TOWNS_DUAL_LAYER_MODE 66 class SeekableReadStream;
68 class SeekableWriteStream;
89 class BaseCostumeLoader;
90 class BaseCostumeRenderer;
92 class CharsetRenderer;
102 class GlyphRenderer_v7;
106 struct FindObjectInRoom;
109 extern ScummEngine *g_scumm;
114 NUM_SHADOW_PALETTE = 8
157 MBS_LEFT_CLICK = 0x8000,
158 MBS_RIGHT_CLICK = 0x4000,
159 MBS_MOUSE_MASK = (MBS_LEFT_CLICK | MBS_RIGHT_CLICK),
203 uint _objectRedrawCount;
204 uint _objectStripRedrawCount;
205 uint _actorRedrawCount;
206 uint _actorLimbRedrawDrawCount;
226 USERSTATE_SET_FREEZE = 0x01,
227 USERSTATE_SET_CURSOR = 0x02,
228 USERSTATE_SET_IFACE = 0x04,
229 USERSTATE_FREEZE_ON = 0x08,
230 USERSTATE_CURSOR_ON = 0x10,
231 USERSTATE_IFACE_SENTENCE = 0x20,
232 USERSTATE_IFACE_INVENTORY = 0x40,
233 USERSTATE_IFACE_VERBS = 0x80
236 #define USERSTATE_IFACE_ALL (USERSTATE_IFACE_SENTENCE | USERSTATE_IFACE_INVENTORY | USERSTATE_IFACE_VERBS) 270 typedef uint16 ResId;
314 #define PIT_BASE_FREQUENCY 1193182.0 // In Hz 315 #define PIT_V1_DIVISOR 65536.0 316 #define PIT_V2_4_DIVISOR 5041.0 317 #define PIT_V5_6_ORCHESTRATOR_DIVISOR 4096.0 318 #define PIT_V5_6_SUBTIMER_INC 3433.0 319 #define PIT_V5_SUBTIMER_THRESH 4167.0 320 #define PIT_V6_SAMNMAX_SUBTIMER_THRESH 4167.0 321 #define PIT_V6_DOTT_SUBTIMER_THRESH 4237.0 322 #define PIT_V7_ORCHESTRATOR_DIVISOR 3977.0 323 #define PIT_V7_SUBTIMER_INC 3977.0 324 #define PIT_V7_SUBTIMER_THRESH 4971.0 326 #define PIT_HE_PUTT_PUTT_DIVISOR 9362.0 327 #define PIT_HE_FATTY_BEAR_DIVISOR 21845.0 329 #define LOOM_STEAM_CDDA_RATE 240.0 344 #define AMIGA_NTSC_VBLANK_RATE 240.0 345 #define AMIGA_PAL_VBLANK_RATE 200.0 351 #define GAME_PROPER_SAVE 201 352 #define GAME_FAILED_SAVE 202 353 #define GAME_PROPER_LOAD 203 354 #define GAME_FAILED_LOAD 204 360 #define GUI_PAGE_MAIN 0 361 #define GUI_PAGE_SAVE 1 362 #define GUI_PAGE_LOAD 2 363 #define GUI_PAGE_RESTART 3 // Sega CD 364 #define GUI_PAGE_CODE_CONFIRM 4 // Sega CD 365 #define GUI_PAGE_INVALID_CODE 5 // Sega CD 367 #define GUI_CTRL_FIRST_SG 1 368 #define GUI_CTRL_LAST_SG 9 369 #define GUI_CTRL_SAVE_BUTTON 10 370 #define GUI_CTRL_LOAD_BUTTON 11 371 #define GUI_CTRL_PLAY_BUTTON 12 372 #define GUI_CTRL_QUIT_BUTTON 13 373 #define GUI_CTRL_OK_BUTTON 14 374 #define GUI_CTRL_CANCEL_BUTTON 15 375 #define GUI_CTRL_ARROW_UP_BUTTON 16 376 #define GUI_CTRL_ARROW_DOWN_BUTTON 17 377 #define GUI_CTRL_PATH_BUTTON 18 378 #define GUI_CTRL_MUSIC_SLIDER 19 379 #define GUI_CTRL_SPEECH_SLIDER 20 380 #define GUI_CTRL_SFX_SLIDER 21 381 #define GUI_CTRL_TEXT_SPEED_SLIDER 22 382 #define GUI_CTRL_DISPLAY_TEXT_CHECKBOX 23 383 #define GUI_CTRL_SPOOLED_MUSIC_CHECKBOX 24 384 #define GUI_CTRL_OUTER_BOX 26 385 #define GUI_CTRL_INNER_BOX 27 388 #define GUI_CTRL_NUMPAD_1 1 389 #define GUI_CTRL_NUMPAD_2 2 390 #define GUI_CTRL_NUMPAD_3 3 391 #define GUI_CTRL_NUMPAD_4 4 392 #define GUI_CTRL_NUMPAD_5 5 393 #define GUI_CTRL_NUMPAD_6 6 394 #define GUI_CTRL_NUMPAD_7 7 395 #define GUI_CTRL_NUMPAD_8 8 396 #define GUI_CTRL_NUMPAD_9 9 397 #define GUI_CTRL_NUMPAD_0 10 398 #define GUI_CTRL_RESTART_BUTTON 13 399 #define GUI_CTRL_ARROW_LEFT_BUTTON 16 400 #define GUI_CTRL_ARROW_RIGHT_BUTTON 17 401 #define GUI_CTRL_NUMPAD_BACK 23 406 gsTextSpeedSlider = 2,
417 gsGameNotLoaded = 13,
421 gsSelectLoadPrompt = 17,
422 gsReplacePrompt = 18,
427 gsTextDisplayOnly = 24,
430 gsMusicVolumeSlider = 27,
431 gsVoiceVolumeSlider = 28,
432 gsSfxVolumeSlider = 29,
443 gsInsertSaveDisk = 40,
446 gsRecalJoystick = 43,
459 gsCurrentPasscode = 56,
460 gsEnterPasscode = 57,
461 gsConfirmPasscode = 58,
462 gsInvalidPasscode = 59,
479 int highlightedTextColor;
480 int highlightedFillColor;
486 bool doubleLinesFlag;
491 kScummActionInsaneDownLeft,
492 kScummActionInsaneDown,
493 kScummActionInsaneDownRight,
494 kScummActionInsaneLeft,
495 kScummActionInsaneRight,
496 kScummActionInsaneUpLeft,
497 kScummActionInsaneUp,
498 kScummActionInsaneUpRight,
499 kScummActionInsaneAttack,
500 kScummActionInsaneSwitch,
501 kScummActionInsaneCheat,
506 extern const char *
const insaneKeymapId;
515 friend class CharsetRendererTownsClassic;
522 friend class LogicHEBasketball;
529 IMuse *_imuse =
nullptr;
530 IMuseDigital *_imuseDigital =
nullptr;
533 Sound *_sound =
nullptr;
550 int _insideCreateResource = 0;
552 bool _useOriginalGUI =
true;
553 bool _enableAudioOverride =
false;
554 bool _enableCOMISong =
false;
555 bool _isAmigaPALSystem =
false;
556 bool _quitFromScriptCmd =
false;
557 bool _isHE995 =
false;
558 bool _enableHECompetitiveOnlineMods =
false;
565 bool _needsSoundUnpause =
false;
583 void errorString(
const char *buf_input,
char *buf_output,
int buf_output_size)
override;
585 bool gameSupportsQuitDialogOverride()
const;
586 void syncSoundSettings()
override;
593 void pauseEngineIntern(
bool pause)
override;
596 virtual void setupScumm(
const Common::Path &macResourceFile);
597 virtual void resetScumm();
599 virtual void setupScummVars();
600 virtual void resetScummVars();
601 void setVideoModeVarToCurrentConfig();
602 void setSoundCardVarToCurrentConfig();
604 void setupCharsetRenderer(
const Common::Path &macFontFile);
605 void setupCostumeRenderer();
607 virtual void loadLanguageBundle();
610 void setupMusic(
int midi);
611 void setTalkSpeed(
int talkspeed);
615 virtual void scummLoop(
int delta);
616 virtual void scummLoop_updateScummVars();
617 virtual void scummLoop_handleSaveLoad();
618 virtual void scummLoop_handleDrawing();
619 virtual void scummLoop_handleActors() = 0;
620 virtual void scummLoop_handleEffects();
621 virtual void scummLoop_handleSound();
623 virtual void runBootscript();
625 virtual void terminateSaveMenuScript() {};
629 void beginTextInput();
636 void waitForTimer(
int quarterFrames,
bool freezeMacGui =
false);
637 uint32 _lastWaitTime;
639 void setTimerAndShakeFrequency();
646 uint32 getIntegralTime(
double fMsecs);
647 double _msecFractParts = 0.0;
649 virtual void processInput();
651 virtual void clearClickedStatus();
654 virtual void updateCursor();
655 virtual void animateCursor() {}
656 virtual void updatePalette();
657 virtual void setDefaultCursor() {};
658 virtual void setCursorTransparency(
int a) {};
659 virtual void resetCursors() {}
660 virtual void setCursorHotspot(
int x,
int y) {}
661 virtual void setCursorFromBuffer(
const byte *ptr,
int width,
int height,
int pitch,
bool preventScale =
false) {}
666 bool isUsingOriginalGUI()
const;
667 bool isMessageBannerActive();
669 bool _isIndy4Jap =
false;
672 Dialog *_pauseDialog =
nullptr;
673 Dialog *_messageDialog =
nullptr;
674 Dialog *_versionDialog =
nullptr;
676 void confirmExitDialog();
677 void confirmRestartDialog();
680 void versionDialog();
683 int32 _bannerColors[50];
684 byte *_bannerMem =
nullptr;
685 uint32 _bannerMemSize = 0;
686 int _bannerSaveYStart = 0;
688 bool _messageBannerActive =
false;
689 bool _comiQuitMenuIsOpen =
false;
690 bool _closeBannerAndQueryQuitFlag =
false;
693 byte *_textSurfBannerMem =
nullptr;
694 uint32 _textSurfBannerMemSize = 0;
699 const char _emptyMsg[1] = {
'\0'};
700 const char _uncheckedBox[2] = {
' ',
'\0'};
701 const char _checkedBox[2] = {
'x',
'\0'};
702 const char _arrowUp[2] = {
'\x18',
'\0'};
703 const char _arrowDown[2] = {
'\x19',
'\0'};
704 const char _arrowLeft[2] = {
'\x3c',
'\0'};
705 const char _arrowRight[2] = {
'\x3d',
'\0'};
709 int _mainMenuSavegameLabel = 1;
710 int _curDisplayedSaveSlotPage = 0;
711 int _firstSaveStateOfList = 0;
712 bool _mainMenuIsActive =
false;
713 bool _quitByGUIPrompt =
false;
714 char _mainMenuMusicSlider[17];
715 char _mainMenuSpeechSlider[17];
716 char _mainMenuSfxSlider[17];
717 char _mainMenuTextSpeedSlider[17];
718 char _mainMenuSegaCDPasscode[5];
719 int _spooledMusicIsToBeEnabled = 1;
720 int _saveScriptParam = 0;
721 int _guiCursorAnimCounter = 0;
722 int _v5VoiceMode = 0;
725 int _internalSpeakerSoundsAreOn = 1;
726 int _guiMouseFlag = 1;
727 int _guiJoystickFlag = 1;
729 bool _mixerMutedByGUI =
false;
732 byte *_tempTextSurface =
nullptr;
733 byte *_tempMainSurface =
nullptr;
734 byte *_tempVerbSurface =
nullptr;
735 bool _postGUICharMask =
false;
738 byte *_curGrabbedCursor =
nullptr;
739 int8 _oldCursorState = 0;
740 int _curCursorState = 0;
741 int _curCursorWidth = 0;
742 int _curCursorHeight = 0;
743 int _curCursorHotspotX = 0;
744 int _curCursorHotspotY = 0;
746 virtual void setSnailCursor() {}
749 Common::KeyState showBannerAndPause(
int bannerId, int32 waitTime,
const char *msg, ...);
750 Common::KeyState showOldStyleBannerAndPause(
const char *msg,
int color, int32 waitTime);
751 Common::KeyState printMessageAndPause(
const char *msg,
int color, int32 waitTime,
bool drawOnSentenceLine);
754 void setBannerColors(
int bannerId, byte r, byte g, byte b);
755 virtual int getBannerColor(
int bannerId);
756 void setUpInternalGUIControl(
int id,
int normalFillColor,
int normalTextColor,
757 int topLineColor,
int bottomLineColor,
int leftLineColor,
int rightLineColor,
758 int highlightedTextColor,
int highlightedFillColor,
759 int anchorPointX,
int anchorPointY,
int x,
int y,
const char *label,
bool centerFlag,
bool unknownFlag);
760 void drawInternalGUIControl(
int id,
bool highlightColor);
761 int getInternalGUIControlFromCoordinates(
int x,
int y);
762 virtual bool isSmushActive() {
return false; }
763 virtual bool isInsaneActive() {
return false; }
765 virtual void queryQuit(
bool returnToLauncher);
766 virtual void queryRestart();
767 virtual const char *getGUIString(
int stringId);
768 void waitForBannerInput(int32 waitTime,
Common::KeyState &ks,
bool &leftBtnClicked,
bool &rightBtnClicked,
bool handleMouseWheel =
false);
769 virtual int getGUIStringHeight(
const char *str);
770 virtual int getGUIStringWidth(
const char *str);
771 virtual void drawGUIText(
const char *buttonString,
Common::Rect *clipRect,
int textXPos,
int textYPos,
int textColor,
bool centerFlag);
772 void getSliderString(
int stringId,
int value,
char *sliderString,
int size);
773 virtual int getMusicVolume();
774 virtual int getSpeechVolume();
775 virtual int getSFXVolume();
776 virtual void setMusicVolume(
int volume);
777 virtual void setSpeechVolume(
int volume);
778 virtual void setSFXVolume(
int volume);
779 virtual void toggleVoiceMode();
780 virtual void handleLoadDuringSmush() {}
781 virtual void setSkipVideo(
int value) {}
784 virtual void setUpMainMenuControls();
785 void setUpMainMenuControlsSegaCD();
786 void setUpMainMenuControlsIndy4Jap();
787 void drawMainMenuControls();
788 void drawMainMenuControlsSegaCD();
789 void updateMainMenuControls();
790 void updateMainMenuControlsSegaCD();
791 void drawMainMenuTitle(
const char *title);
792 bool executeMainMenuOperation(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
793 bool executeMainMenuOperationSegaCD(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
794 bool shouldHighlightLabelAndWait(
int clickedControl);
795 void fillSavegameLabels();
796 bool canWriteGame(
int slotId);
797 bool userWriteLabelRoutine(
Common::KeyState &ks,
bool &leftMsClicked,
bool &rightMsClicked);
798 void saveCursorPreMenu();
799 void restoreCursorPostMenu();
800 void saveSurfacesPreGUI();
801 void restoreSurfacesPostGUI();
802 void showDraftsInventory();
803 void setUpDraftsInventory();
804 void drawDraftsInventory();
807 char displayMessage(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
808 bool displayMessageYesNo(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
809 bool displayMessageOKQuit(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
815 Actor **_actors =
nullptr;
816 Actor **_sortedActors =
nullptr;
818 byte *_arraySlot =
nullptr;
819 uint16 *_inventory =
nullptr;
820 uint16 *_newNames =
nullptr;
824 #define VAR(x) scummVar(x, #x, __FILE__, __LINE__) 825 int32& scummVar(byte var,
const char *varName,
const char *file,
int line) {
827 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
829 return _scummVars[var];
831 int32 scummVar(byte var,
const char *varName,
const char *file,
int line)
const {
833 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
835 return _scummVars[var];
838 bool applyMi2NiDemoOverride();
851 bool _loaded =
false;
852 bool _attempted =
false;
853 bool _active =
false;
855 bool _mi2DemoVarsApplied =
false;
859 uint32 _streamOff = 0;
860 uint32 _streamBytes = 0;
862 uint32 _nextIndex = 0;
865 bool _hasPrevMbs =
false;
867 uint32 _firstInteractIndex = 0;
868 bool _firstInteractValid =
false;
872 bool _pendingLUp =
false;
873 bool _pendingRUp =
false;
875 bool _sputmCmdActive =
false;
876 byte _sputmCmdEnterCount = 0;
883 void mi2DemoArmPlaybackByRoom(
ScummEngine *engine);
884 void mi2DemoPlaybackJumpRoom(
ScummEngine *engine,
int room);
885 bool handleMi2NIDemoSputmDebugKey(
ScummEngine *engine, uint16 rawKey);
892 int32 *_roomVars =
nullptr;
893 int32 *_scummVars =
nullptr;
894 byte *_bitVars =
nullptr;
897 int _numVariables = 0;
898 int _numBitVariables = 0;
899 int _numLocalObjects = 0;
900 int _numGlobalObjects = 0;
903 int _numFlObject = 0;
904 int _numInventory = 0;
905 int _numNewNames = 0;
906 int _numGlobalScripts = 0;
907 int _numRoomVariables = 0;
908 int _numPalettes = 0;
915 int _numLocalScripts = 60, _numImages = 0, _numRooms = 0, _numScripts = 0, _numSounds = 0;
916 int _numCostumes = 0;
917 int32 _numCharsets = 0;
922 int _NESCostumeSet = 0;
923 void NES_loadCostumeSet(
int n);
924 byte *_NEScostdesc =
nullptr, *_NEScostlens =
nullptr, *_NEScostoffs =
nullptr, *_NEScostdata =
nullptr;
925 byte _NESPatTable[2][4096];
926 byte _NESPalette[2][16];
927 byte _NESBaseTiles = 0;
929 int _NESStartStrip = 0;
932 int _curPalIndex = 0;
935 byte _currentRoom = 0;
936 int _roomResource = 0;
937 bool _egoPositioned =
false;
941 virtual Common::Path generateFilename(
const int room)
const;
945 bool _keyDownMap[512];
946 bool _actionMap[kScummActionCount];
951 uint16 _mouseAndKeyboardStat = 0;
952 byte _leftBtnPressed = 0, _rightBtnPressed = 0;
954 int _mouseWheelFlag = 0;
956 bool _setupIsComplete =
false;
962 uint32 _lastInputScriptTime = 0;
968 bool _dumpScripts =
false;
969 bool _hexdumpScripts =
false;
970 bool _showStack =
false;
971 bool _debugMode =
false;
974 byte _saveLoadFlag = 0, _saveLoadSlot = 0;
975 uint32 _lastSaveTime = 0;
976 bool _saveTemporaryState =
false;
977 bool _pauseSoundsDuringSave =
true;
978 bool _loadFromLauncher =
false;
979 bool _videoModeChanged =
false;
985 bool loadState(
int slot,
bool compat);
992 virtual int checkSoundEngineSaveDataSize(
Serializer &s);
994 void copyHeapSaveGameToFile(
int slot,
const char *saveName);
995 bool changeSavegameName(
int slot,
char *newName);
1000 return makeSavegameName(_targetName, slot, temporary);
1003 int getKeyState(
int key);
1004 int getActionState(ScummAction action);
1010 void listSavegames(
bool *marks,
int num);
1013 void requestLoad(
int slot);
1016 bool canPauseSoundsDuringSave()
const {
return _pauseSoundsDuringSave; }
1027 uint32 _localScriptOffsets[1024];
1028 const byte *_scriptPointer =
nullptr;
1029 const byte *_scriptOrgPointer =
nullptr;
1030 const byte *
const *_lastCodePtr =
nullptr;
1032 bool _debug =
false;
1033 byte _currentScript = 0xFF;
1034 int _scummStackPos = 0;
1037 char _engineVersionString[50];
1038 char _dataFileVersionString[50];
1047 return _currentScript != 0xFF && vm.slot[_currentScript].number == script;
1050 virtual void setupOpcodes() = 0;
1051 void executeOpcode(byte i);
1052 const char *getOpcodeDesc(byte i);
1054 void initializeLocals(
int slot,
int *vars);
1055 int getScriptSlot();
1057 void startScene(
int room,
Actor *a,
int b);
1061 void runScript(
int script,
bool freezeResistant,
bool recursive,
int *lvarptr,
int cycle = 0);
1062 void stopScript(
int script);
1063 void nukeArrays(byte scriptSlot);
1066 void runObjectScript(
int script,
int entry,
bool freezeResistant,
bool recursive,
int *vars,
int slot = -1,
int cycle = 0);
1067 void runScriptNested(
int script);
1068 void executeScript();
1069 void updateScriptPtr();
1070 virtual void runInventoryScript(
int i);
1071 virtual void runInventoryScriptEx(
int i);
1072 virtual void checkAndRunSentenceScript();
1073 void runExitScript();
1074 void runEntryScript();
1075 void runQuitScript();
1076 void runAllScripts();
1077 void freezeScripts(
int scr);
1078 void unfreezeScripts();
1080 bool isScriptInUse(
int script)
const;
1081 bool isRoomScriptRunning(
int script)
const;
1082 bool isScriptRunning(
int script)
const;
1084 void killAllScriptsExceptCurrent();
1085 void killScriptsAndResources();
1086 void decreaseScriptDelay(
int amount);
1088 void stopObjectCode();
1089 void stopObjectScript(
int script);
1091 void getScriptBaseAddress();
1092 void resetScriptPointer();
1093 int getVerbEntrypoint(
int obj,
int entry);
1095 void refreshScriptPointer();
1096 byte fetchScriptByte();
1097 virtual uint fetchScriptWord();
1098 virtual int fetchScriptWordSigned();
1099 uint fetchScriptDWord();
1100 int fetchScriptDWordSigned();
1101 void ignoreScriptWord() { fetchScriptWord(); }
1102 void ignoreScriptByte() { fetchScriptByte(); }
1105 virtual int readVar(uint var);
1106 virtual void writeVar(uint var,
int value);
1108 virtual void resetSentence() {}
1111 virtual void beginCutscene(
int *args);
1112 virtual void endCutscene();
1113 void abortCutscene();
1114 void beginOverride();
1117 void copyScriptString(byte *dst);
1118 int resStrLen(
const byte *src);
1119 void doSentence(
int c,
int b,
int a);
1123 uint32 _fileOffset = 0;
1130 ScummFile *instantiateScummFile(
bool indexPAKFiles =
true);
1133 int _resourceHeaderSize = 8;
1134 byte _resourceMapper[128];
1135 const byte *_resourceLastSearchBuf;
1136 uint32 _resourceLastSearchSize;
1138 virtual void allocateArrays();
1139 void openRoom(
int room);
1141 void deleteRoomOffsets();
1142 virtual void readRoomsOffsets();
1143 void askForDisk(
const Common::Path &filename,
int disknum);
1144 byte getEncByte(
int room);
1145 bool openResourceFile(
const Common::Path &filename, byte encByte);
1147 void loadPtrToResource(
ResType type, ResId idx,
const byte *ptr);
1148 virtual int readResTypeList(
ResType type);
1151 int loadResource(
ResType type, ResId idx);
1153 int getResourceRoomNr(
ResType type, ResId idx);
1154 virtual uint32 getResourceRoomOffset(
ResType type, ResId idx);
1157 int getResourceSize(
ResType type, ResId idx);
1158 byte *getResourceAddress(
ResType type, ResId idx);
1159 virtual byte *getStringAddress(ResId idx);
1160 byte *getStringAddressVar(
int i);
1161 void ensureResourceLoaded(
ResType type, ResId idx);
1168 int readSoundResource(ResId idx);
1169 int readSoundResourceSmallHeader(ResId idx);
1170 bool isResourceInUse(
ResType type, ResId idx)
const;
1172 virtual void setupRoomSubBlocks();
1173 virtual void resetRoomSubBlocks();
1175 virtual void clearRoomObjects();
1176 virtual void resetRoomObjects();
1177 virtual void resetRoomObject(
ObjectData *od,
const byte *room,
const byte *searchptr = NULL);
1179 virtual void readArrayFromIndexFile();
1180 virtual void readMAXS(
int blockSize) = 0;
1181 virtual void readGlobalObjects();
1182 virtual void readIndexFile();
1183 virtual void readIndexBlock(uint32 block, uint32 itemsize);
1184 virtual void loadCharset(
int i);
1185 void nukeCharset(
int i);
1187 int _lastLoadedRoom = 0;
1189 const byte *findResourceData(uint32 tag,
const byte *ptr);
1190 const byte *findResource(uint32 tag,
const byte *ptr);
1191 void applyWorkaroundIfNeeded(
ResType type,
int idx);
1192 bool verifyMI2MacBootScript();
1193 bool verifyMI2MacBootScript(byte *buf,
int size);
1194 bool tryPatchMI1CannibalScript(byte *buf,
int size);
1196 int getResourceDataSize(
const byte *ptr)
const;
1197 void dumpResource(
const char *tag,
int index,
const byte *ptr,
int length = -1);
1201 byte OF_OWNER_ROOM = 0;
1202 int getInventorySlot();
1203 int findInventory(
int owner,
int index);
1204 int getInventoryCount(
int owner);
1207 byte *_objectOwnerTable =
nullptr, *_objectRoomTable =
nullptr, *_objectStateTable =
nullptr;
1208 int _numObjectsInRoom = 0;
1211 uint32 *_classData =
nullptr;
1214 void markObjectRectAsDirty(
int obj);
1215 virtual void loadFlObject(uint
object, uint room);
1216 void nukeFlObjects(
int min,
int max);
1217 int findFlObjectSlot();
1218 int findLocalObjectSlot();
1219 void addObjectToInventory(uint obj, uint room);
1220 void updateObjectStates();
1222 bool getClass(
int obj,
int cls)
const;
1224 void putClass(
int obj,
int cls,
bool set);
1225 int getState(
int obj);
1226 void putState(
int obj,
int state);
1227 void setObjectState(
int obj,
int state,
int x,
int y);
1228 int getOwner(
int obj)
const;
1229 void putOwner(
int obj,
int owner);
1230 void setOwnerOf(
int obj,
int owner);
1231 void clearOwnerOf(
int obj);
1232 int getObjectRoom(
int obj)
const;
1233 virtual bool objIsActor(
int obj);
1234 virtual int objToActor(
int obj);
1235 virtual int actorToObj(
int actor);
1236 int getObjX(
int obj);
1237 int getObjY(
int obj);
1238 void getObjectWidth(
int object,
int &width) {
int x, y, dir; getObjectXYPos(
object, x, y, dir, width); }
1239 void getObjectXYPos(
int object,
int &x,
int &y) {
int dir, width; getObjectXYPos(
object, x, y, dir, width); }
1240 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir) {
int width; getObjectXYPos(
object, x, y, dir, width); }
1241 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir,
int &width);
1242 int getObjOldDir(
int obj);
1243 int getObjNewDir(
int obj);
1244 int getObjectIndex(
int object)
const;
1245 int getObjectImageCount(
int object);
1246 int whereIsObject(
int object)
const;
1247 int findObject(
int x,
int y);
1248 void findObjectInRoom(
FindObjectInRoom *fo, byte findWhat, uint
object, uint room);
1250 int getObjectOrActorWidth(
int object,
int &width);
1251 int getObjectOrActorXY(
int object,
int &x,
int &y);
1252 int getDist(
int x,
int y,
int x2,
int y2);
1255 int getObjActToObjActDist(
int a,
int b);
1256 const byte *getObjOrActorName(
int obj);
1257 void setObjectName(
int obj);
1259 void addObjectToDrawQue(
int object);
1260 void removeObjectFromDrawQue(
int object);
1261 void clearDrawObjectQueue();
1262 void processDrawQue();
1264 virtual void clearDrawQueues();
1266 uint32 getOBCDOffs(
int object)
const;
1267 byte *getOBCDFromObject(
int obj,
bool v0CheckInventory =
true);
1268 const byte *getOBIMFromObjectData(
const ObjectData &od);
1269 const byte *getObjectImage(
const byte *ptr,
int state);
1270 virtual int getObjectIdFromOBIM(
const byte *obim);
1274 uint16 _verbMouseOver = 0;
1276 uint16 _userState = 0;
1278 virtual void handleMouseOver(
bool updateInventory);
1279 virtual void redrawVerbs();
1280 virtual void checkExecVerbs();
1282 void verbMouseOver(
int verb);
1283 int findVerbAtPos(
int x,
int y)
const;
1284 virtual void drawVerb(
int verb,
int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT);
1285 virtual void runInputScript(
int clickArea,
int val,
int mode);
1286 void restoreVerbBG(
int verb);
1287 void drawVerbBitmap(
int verb,
int x,
int y);
1288 int getVerbSlot(
int id,
int mode)
const;
1289 void killVerb(
int slot);
1290 void setVerbObject(uint room, uint
object, uint verb);
1293 bool isValidActor(
int id)
const;
1296 Actor *derefActor(
int id,
const char *errmsg = 0)
const;
1297 Actor *derefActorSafe(
int id,
const char *errmsg)
const;
1301 void playActorSounds();
1302 void redrawAllActors();
1303 virtual void setActorRedrawFlags();
1306 void resetV1ActorTalkColor();
1307 virtual void resetActorBgs();
1308 virtual void processActors();
1309 void processUpperActors();
1310 virtual int getActorFromPos(
int x,
int y);
1314 byte _actorToPrintStrFor = 0, _V1TalkingActor = 0;
1315 int _sentenceNum = 0;
1319 int16 _talkDelay = 0;
1320 int _NES_lastTalkingActor = 0;
1321 int _NES_talkColor = 0;
1323 virtual void actorTalk(
const byte *msg);
1325 int getTalkingActor();
1326 void setTalkingActor(
int variable);
1329 bool isCostumeInUse(
int i)
const;
1333 uint16 _screenB = 0, _screenH = 0;
1335 int _roomHeight = 0, _roomWidth = 0;
1336 int _screenHeight = 0, _screenWidth = 0;
1339 bool _cameraIsFrozen =
false;
1341 int _screenStartStrip = 0, _screenEndStrip = 0;
1343 bool _forceBannerVirtScreen =
false;
1354 bool _useMacScreenCorrectHeight =
true;
1355 int _macScreenDrawOffset = 20;
1358 uint8 _bytesPerPixel = 1;
1363 uint8 _colorUsedByCycle[256];
1366 uint32 _ENCD_offs = 0, _EXCD_offs = 0;
1367 uint32 _CLUT_offs = 0, _EPAL_offs = 0;
1368 uint32 _IM00_offs = 0, _PALS_offs = 0;
1371 bool _fullRedraw =
false, _bgNeedsRedraw =
false;
1372 bool _screenEffectFlag =
false, _completeScreenRedraw =
false;
1373 bool _disableFadeInEffect =
false;
1376 int hotspotX, hotspotY, width, height;
1377 byte animate, animateIndex;
1383 byte _grabbedCursor[16384];
1384 byte _macGrabbedCursor[16384 * 4];
1385 byte _currentCursor = 0;
1387 byte _newEffect = 0, _switchRoomEffect2 = 0, _switchRoomEffect = 0;
1388 bool _doEffect =
false;
1390 bool _snapScroll =
false;
1392 virtual void setBuiltinCursor(
int index) {}
1394 bool isLightOn()
const;
1396 virtual int getCurrentLights()
const;
1399 void initScreens(
int b,
int h);
1400 void initVirtScreen(
VirtScreenNumber slot,
int top,
int width,
int height,
bool twobufs,
bool scrollable);
1401 void initBGBuffers(
int height);
1402 void initCycl(
const byte *ptr);
1404 void decodeNESBaseTiles();
1405 void playNESTitleScreens();
1407 void drawObject(
int obj,
int scrollType);
1408 void drawRoomObjects(
int arg);
1409 void drawRoomObject(
int i,
int arg);
1410 void drawBox(
int x,
int y,
int x2,
int y2,
int color);
1411 void drawLine(
int x1,
int y1,
int x2,
int y2,
int color);
1412 void drawPixel(
VirtScreen *vs,
int x,
int y, int16 color,
bool useBackbuffer =
false);
1414 void moveScreen(
int dx,
int dy,
int height);
1416 void restoreBackground(
Common::Rect rect, byte backcolor = 0);
1417 void redrawBGStrip(
int start,
int num);
1418 virtual void redrawBGAreas();
1421 void setCameraAtEx(
int at);
1422 virtual void setCameraAt(
int pos_x,
int pos_y);
1423 virtual void setCameraFollows(
Actor *a,
bool setCamera =
false);
1424 virtual void moveCamera();
1425 virtual void panCameraTo(
int x,
int y);
1427 void actorFollowCamera(
int act);
1429 const byte *getPalettePtr(
int palindex,
int room);
1431 void setPaletteFromTable(
const byte *ptr,
int numcolor,
int firstIndex = 0);
1432 void resetPalette(
bool isBootUp =
false);
1434 void setCurrentPalette(
int pal);
1435 void setRoomPalette(
int pal,
int room);
1436 void setPCEPaletteFromPtr(
const byte *ptr);
1437 void setAmigaPaletteFromPtr(
const byte *ptr);
1438 virtual void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1439 void setV1ColorTable(
int renderMode);
1441 virtual void setPalColor(
int index,
int r,
int g,
int b);
1442 void setDirtyColors(
int min,
int max);
1443 const byte *findPalInPals(
const byte *pal,
int index);
1444 void swapPalColors(
int a,
int b);
1445 virtual void copyPalColor(
int dst,
int src);
1446 void cyclePalette();
1447 void stopCycle(
int i);
1448 virtual void palManipulateInit(
int resID,
int start,
int end,
int time);
1449 void palManipulate();
1450 uint32 findClosestPaletteColor(byte *palette,
int paletteLength, byte r, byte g, byte b);
1451 void applyGrayscaleToPaletteRange(
int min,
int max);
1452 bool haveToApplyMonkey1PaletteFix();
1455 uint8 *getHEPaletteSlot(uint16 palSlot);
1456 uint16 get16BitColor(uint8 r, uint8 g, uint8 b);
1457 uint32 getPaletteColorFromRGB(byte *palette, byte r, byte g, byte b);
1458 uint32 getPackedRGBColorFromPalette(byte *palette, uint32 color);
1459 void fetchBlackAndWhite(uint32 &black, uint32 &white, byte *palette,
int paletteEntries);
1460 int remapPaletteColor(
int r,
int g,
int b,
int threshold);
1461 void readPCEPalette(
const byte **ptr, byte **dest,
int numEntries);
1462 void colorPCEToRGB(uint16 color, byte *r, byte *g, byte *b);
1463 void setPCETextPalette(uint8 color);
1465 void moveMemInPalRes(
int start,
int end, byte direction);
1466 void setShadowPalette(
int slot,
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1467 void setShadowPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor,
int start,
int end);
1468 virtual void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1471 void markRectAsDirty(
VirtScreenNumber virt,
int left,
int right,
int top,
int bottom,
int dirtybit = 0);
1473 markRectAsDirty(virt, rect.
left, rect.
right, rect.top, rect.bottom, dirtybit);
1477 byte *_compositeBuf;
1478 byte *_hercCGAScaleBuf =
nullptr;
1479 bool _enableEGADithering =
false;
1480 bool _supportsEGADithering =
false;
1481 bool _enableSegaShadowMode =
false;
1483 virtual void drawDirtyScreenParts();
1485 void drawStripToScreen(
VirtScreen *vs,
int x,
int width,
int top,
int bottom);
1487 void mac_markScreenAsDirty(
int x,
int y,
int w,
int h);
1488 void mac_drawStripToScreen(
VirtScreen *vs,
int top,
int x,
int y,
int width,
int height);
1489 void mac_drawIndy3TextBox();
1490 void mac_undrawIndy3TextBox();
1491 void mac_undrawIndy3CreditsText();
1492 void mac_drawBufferToScreen(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1493 void mac_updateCompositeBuffer(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1494 void mac_blitDoubleResImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1495 void mac_applyDoubleResToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch);
1496 void mac_blitEPXImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1497 void mac_applyEPXToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch,
int xOffset,
int yOffset,
int bufferWidth,
int bufferHeight);
1498 void mac_scaleCursor(byte *&outCursor,
int &outHotspotX,
int &outHotspotY,
int &outWidth,
int &outHeight);
1499 void mac_toggleSmoothing();
1501 Common::KeyState mac_showOldStyleBannerAndPause(
const char *msg, int32 waitTime);
1503 const byte *postProcessDOSGraphics(
VirtScreen *vs,
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1504 const byte *ditherVGAtoEGA(
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1508 byte *getMaskBuffer(
int x,
int y,
int z);
1511 void fadeIn(
int effect);
1512 void fadeOut(
int effect);
1514 void dissolveEffectSelector();
1515 void transitionEffect(
int a);
1516 void dissolveEffect(
int width,
int height);
1517 void scrollEffect(
int dir);
1519 void updateScreenShakeEffect();
1522 double getTimerFrequency();
1523 double getAmigaMusicTimerFrequency();
1526 bool _shakeEnabled =
false;
1527 bool _shakeTempSavedState =
false;
1528 uint _shakeFrame = 0;
1529 uint32 _shakeNextTick = 0;
1530 uint32 _shakeTickCounter = 0;
1531 double _shakeTimerRate;
1532 double _timerFrequency;
1534 void setShake(
int mode);
1536 int _drawObjectQueNr = 0;
1537 byte _drawObjectQue[200];
1550 uint32 gfxUsageBits[410 * 3];
1552 void upgradeGfxUsageBits();
1553 void setGfxUsageBit(
int strip,
int bit);
1554 void clearGfxUsageBit(
int strip,
int bit);
1557 bool testGfxUsageBit(
int strip,
int bit) {
1558 assert(strip >= 0 && strip <
ARRAYSIZE(gfxUsageBits) / 3);
1559 assert(1 <= bit && bit <= 96);
1561 return (gfxUsageBits[3 * strip + bit / 32] & (1 << (bit % 32))) != 0;
1564 bool testGfxAnyUsageBits(
int strip);
1565 bool testGfxObjectUsageBits(
int strip);
1566 bool testGfxOtherUsageBits(
int strip,
int bit);
1569 byte _roomPalette[256];
1570 byte *_shadowPalette =
nullptr;
1571 bool _skipDrawObject = 0;
1573 int _soundEnabled = 0;
1576 byte _HEV7ActorPalette[256];
1577 uint8 *_hePalettes =
nullptr;
1578 uint16 _hePaletteSlot = 0;
1579 uint16 *_16BitPalette =
nullptr;
1582 byte *_verbPalette =
nullptr;
1587 int _shadowPaletteSize = 0;
1588 byte _currentPalette[3 * 256];
1589 byte _darkenPalette[3 * 256];
1590 int _paletteChangedCounter = 1;
1592 int _palDirtyMin = 0, _palDirtyMax = 0;
1594 byte _palManipStart = 0, _palManipEnd = 0;
1595 uint16 _palManipCounter = 0;
1596 byte *_palManipPalette =
nullptr;
1597 byte *_palManipIntermediatePal =
nullptr;
1599 bool _haveActorSpeechMsg =
false;
1600 bool _useTalkAnims =
false;
1601 uint16 _defaultTextSpeed = 0;
1603 bool _native_mt32 =
false;
1604 bool _copyProtection =
false;
1605 bool _shadowPalRemap =
false;
1608 uint16 _amigaFirstUsedColor = 0;
1609 byte _amigaPalette[3 * 64];
1610 void amigaPaletteFindFirstUsedColor();
1611 void mapRoomPalette(
int idx);
1612 int remapRoomPaletteColor(
int r,
int g,
int b);
1613 void mapVerbPalette(
int idx);
1614 int remapVerbPaletteColor(
int r,
int g,
int b);
1617 byte *_egaColorMap[2];
1620 uint16 _extraBoxFlags[65];
1623 byte *getBoxMatrixBaseAddr();
1624 byte *getBoxConnectionBase(
int box);
1626 int getNextBox(byte from, byte to);
1628 void setBoxFlags(
int box,
int val);
1629 void setBoxScale(
int box,
int b);
1631 bool checkXYInBoxBounds(
int box,
int x,
int y);
1633 BoxCoords getBoxCoordinates(
int boxnum);
1635 byte getMaskFromBox(
int box);
1636 Box *getBoxBaseAddr(
int box);
1637 byte getBoxFlags(
int box);
1638 int getBoxScale(
int box);
1640 int getScale(
int box,
int x,
int y);
1641 int getScaleFromSlot(
int slot,
int x,
int y);
1651 void setScaleSlot(
int slot,
int x1,
int y1,
int scale1,
int x2,
int y2,
int scale2);
1652 void setBoxScaleSlot(
int box,
int slot);
1653 void convertScaleTableToScaleSlot(
int slot);
1655 void calcItineraryMatrix(byte *itineraryMatrix,
int num);
1656 void createBoxMatrix();
1657 virtual bool areBoxesNeighbors(
int i,
int j);
1662 byte _charsetColorMap[16];
1669 int _textSurfaceMultiplier = 0;
1671 bool _isModernMacVersion =
false;
1672 bool _useGammaCorrection =
true;
1675 MacGui *_macGui =
nullptr;
1676 bool _useMacGraphicsSmoothing =
true;
1677 byte _completeScreenBuffer[320 * 200];
1680 byte _charsetColor = 0;
1681 byte _charsetData[23][16];
1683 int _charsetBufPos = 0;
1684 byte _charsetBuffer[512];
1686 bool _keepText =
false;
1689 int _nextLeft = 0, _nextTop = 0;
1694 bool _voiceNextString =
false;
1695 bool _checkPreviousSaid =
false;
1696 bool _voicePassHelpButtons =
false;
1697 int _previousVerb = -1;
1698 int _previousControl = -1;
1703 void restoreCharsetBg();
1704 void clearCharsetMask();
1705 void clearTextSurface();
1707 virtual void initCharset(
int charset);
1709 virtual void printString(
int m,
const byte *msg);
1711 virtual bool handleNextCharsetCode(
Actor *a,
int *c);
1712 virtual void drawSentence() {}
1713 virtual void displayDialog();
1714 int countNumberOfWaits();
1716 void drawString(
int a,
const byte *msg, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::QUEUE);
1717 virtual void fakeBidiString(byte *ltext,
bool ignoreVerb,
int ltextSize)
const;
1718 void wrapSegaCDText();
1719 void debugMessage(
const byte *msg);
1720 virtual void showMessageDialog(
const byte *msg);
1723 void sayText(
const Common::String &text, Common::TextToSpeechManager::Action action = Common::TextToSpeechManager::QUEUE)
const;
1724 void stopTextToSpeech()
const;
1725 void sayButtonText();
1728 virtual int convertMessageToString(
const byte *msg, byte *dst,
int dstSize);
1729 int convertIntMessage(byte *dst,
int dstSize,
int var);
1730 int convertVerbMessage(byte *dst,
int dstSize,
int var);
1731 int convertNameMessage(byte *dst,
int dstSize,
int var);
1732 int convertStringMessage(byte *dst,
int dstSize,
int var);
1738 virtual void translateText(
const byte *text, byte *trans_buff,
int transBufferSize);
1740 bool reverseIfNeeded(
const byte *text, byte *reverseBuf,
int reverseBufSize)
const;
1742 Common::CodePage getDialogCodePage()
const;
1745 bool _useCJKMode =
false;
1746 bool _useMultiFont =
false;
1747 int _numLoadedFont = 0;
1748 int _2byteShadow = 0;
1749 bool _force2ByteCharHeight =
false;
1751 int _2byteHeight = 0;
1752 int _2byteWidth = 0;
1754 byte _newLineCharacter = 0;
1755 byte *get2byteCharPtr(
int idx);
1757 bool isScummvmKorTarget();
1758 bool hasLocalizer();
1761 byte *_2byteFontPtr =
nullptr;
1762 byte *_2byteMultiFontPtr[20];
1763 int _2byteMultiHeight[20];
1764 int _2byteMultiWidth[20];
1765 int _2byteMultiShadow[20];
1768 struct TranslatedLine {
1769 uint32 originalTextOffset;
1770 uint32 translatedTextOffset;
1773 struct TranslationRange {
1777 TranslationRange(uint32 left_, uint32 right_) : left(left_), right(right_) {}
1778 TranslationRange() : left(0), right(0) {}
1781 struct TranslationRoom {
1785 bool _existLanguageFile =
false;
1786 bool _isRTL =
false;
1787 byte *_languageBuffer =
nullptr;
1788 int _numTranslatedLines = 0;
1789 TranslatedLine *_translatedLines =
nullptr;
1790 uint16 *_languageLineIndex =
nullptr;
1793 const byte *searchTranslatedLine(
const byte *text,
const TranslationRange &range,
bool useIndex);
1795 virtual void createTextRenderer(GlyphRenderer_v7 *gr) {}
1800 byte VAR_KEYPRESS = 0xFF;
1801 byte VAR_SYNC = 0xFF;
1802 byte VAR_EGO = 0xFF;
1803 byte VAR_CAMERA_POS_X = 0xFF;
1804 byte VAR_HAVE_MSG = 0xFF;
1805 byte VAR_ROOM = 0xFF;
1806 byte VAR_OVERRIDE = 0xFF;
1807 byte VAR_MACHINE_SPEED = 0xFF;
1809 byte VAR_NUM_ACTOR = 0xFF;
1810 byte VAR_CURRENT_LIGHTS = 0xFF;
1811 byte VAR_CURRENTDRIVE = 0xFF;
1812 byte VAR_CURRENTDISK = 0xFF;
1813 byte VAR_TMR_1 = 0xFF;
1814 byte VAR_TMR_2 = 0xFF;
1815 byte VAR_TMR_3 = 0xFF;
1816 byte VAR_MUSIC_TIMER = 0xFF;
1817 byte VAR_ACTOR_RANGE_MIN = 0xFF;
1818 byte VAR_ACTOR_RANGE_MAX = 0xFF;
1819 byte VAR_CAMERA_MIN_X = 0xFF;
1820 byte VAR_CAMERA_MAX_X = 0xFF;
1821 byte VAR_TIMER_NEXT = 0xFF;
1822 byte VAR_VIRT_MOUSE_X = 0xFF;
1823 byte VAR_VIRT_MOUSE_Y = 0xFF;
1824 byte VAR_ROOM_RESOURCE = 0xFF;
1825 byte VAR_LAST_SOUND = 0xFF;
1826 byte VAR_CUTSCENEEXIT_KEY = 0xFF;
1827 byte VAR_OPTIONS_KEY = 0xFF;
1828 byte VAR_TALK_ACTOR = 0xFF;
1829 byte VAR_CAMERA_FAST_X = 0xFF;
1830 byte VAR_SCROLL_SCRIPT = 0xFF;
1831 byte VAR_ENTRY_SCRIPT = 0xFF;
1832 byte VAR_ENTRY_SCRIPT2 = 0xFF;
1833 byte VAR_EXIT_SCRIPT = 0xFF;
1834 byte VAR_EXIT_SCRIPT2 = 0xFF;
1835 byte VAR_VERB_SCRIPT = 0xFF;
1836 byte VAR_SENTENCE_SCRIPT = 0xFF;
1837 byte VAR_INVENTORY_SCRIPT = 0xFF;
1838 byte VAR_CUTSCENE_START_SCRIPT = 0xFF;
1839 byte VAR_CUTSCENE_END_SCRIPT = 0xFF;
1840 byte VAR_CHARINC = 0xFF;
1841 byte VAR_WALKTO_OBJ = 0xFF;
1842 byte VAR_DEBUGMODE = 0xFF;
1843 byte VAR_HEAPSPACE = 0xFF;
1844 byte VAR_RESTART_KEY = 0xFF;
1845 byte VAR_PAUSE_KEY = 0xFF;
1846 byte VAR_MOUSE_X = 0xFF;
1847 byte VAR_MOUSE_Y = 0xFF;
1848 byte VAR_TIMER = 0xFF;
1849 byte VAR_TIMER_TOTAL = 0xFF;
1850 byte VAR_SOUNDCARD = 0xFF;
1851 byte VAR_VIDEOMODE = 0xFF;
1852 byte VAR_MAINMENU_KEY = 0xFF;
1853 byte VAR_FIXEDDISK = 0xFF;
1854 byte VAR_CURSORSTATE = 0xFF;
1855 byte VAR_USERPUT = 0xFF;
1856 byte VAR_SOUNDRESULT = 0xFF;
1857 byte VAR_TALKSTOP_KEY = 0xFF;
1858 byte VAR_FADE_DELAY = 0xFF;
1859 byte VAR_NOSUBTITLES = 0xFF;
1862 byte VAR_SOUNDPARAM = 0xFF;
1863 byte VAR_SOUNDPARAM2 = 0xFF;
1864 byte VAR_SOUNDPARAM3 = 0xFF;
1865 byte VAR_INPUTMODE = 0xFF;
1866 byte VAR_MEMORY_PERFORMANCE = 0xFF;
1867 byte VAR_VIDEO_PERFORMANCE = 0xFF;
1868 byte VAR_ROOM_FLAG = 0xFF;
1869 byte VAR_GAME_LOADED = 0xFF;
1870 byte VAR_NEW_ROOM = 0xFF;
1873 byte VAR_V5_TALK_STRING_Y = 0xFF;
1876 byte VAR_ROOM_WIDTH = 0xFF;
1877 byte VAR_ROOM_HEIGHT = 0xFF;
1878 byte VAR_SUBTITLES = 0xFF;
1879 byte VAR_V6_EMSSPACE = 0xFF;
1882 byte VAR_CAMERA_POS_Y = 0xFF;
1883 byte VAR_CAMERA_MIN_Y = 0xFF;
1884 byte VAR_CAMERA_MAX_Y = 0xFF;
1885 byte VAR_CAMERA_THRESHOLD_X = 0xFF;
1886 byte VAR_CAMERA_THRESHOLD_Y = 0xFF;
1887 byte VAR_CAMERA_SPEED_X = 0xFF;
1888 byte VAR_CAMERA_SPEED_Y = 0xFF;
1889 byte VAR_CAMERA_ACCEL_X = 0xFF;
1890 byte VAR_CAMERA_ACCEL_Y = 0xFF;
1891 byte VAR_CAMERA_DEST_X = 0xFF;
1892 byte VAR_CAMERA_DEST_Y = 0xFF;
1893 byte VAR_CAMERA_FOLLOWED_ACTOR = 0xFF;
1896 byte VAR_VERSION_KEY = 0xFF;
1897 byte VAR_DEFAULT_TALK_DELAY = 0xFF;
1898 byte VAR_CUSTOMSCALETABLE = 0xFF;
1899 byte VAR_BLAST_ABOVE_TEXT = 0xFF;
1900 byte VAR_VOICE_MODE = 0xFF;
1901 byte VAR_MUSIC_BUNDLE_LOADED = 0xFF;
1902 byte VAR_VOICE_BUNDLE_LOADED = 0xFF;
1904 byte VAR_LEFTBTN_DOWN = 0xFF;
1905 byte VAR_RIGHTBTN_DOWN = 0xFF;
1906 byte VAR_LEFTBTN_HOLD = 0xFF;
1907 byte VAR_RIGHTBTN_HOLD = 0xFF;
1908 byte VAR_PRE_SAVELOAD_SCRIPT = 0xFF;
1909 byte VAR_POST_SAVELOAD_SCRIPT = 0xFF;
1910 byte VAR_SAVELOAD_PAGE = 0xFF;
1911 byte VAR_OBJECT_LABEL_FLAG = 0xFF;
1914 byte VAR_CHARSET_MASK = 0xFF;
1917 byte VAR_V6_SOUNDMODE = 0xFF;
1920 byte VAR_CHARCOUNT = 0xFF;
1921 byte VAR_VERB_ALLOWED = 0xFF;
1922 byte VAR_ACTIVE_VERB = 0xFF;
1923 byte VAR_ACTIVE_OBJECT1 = 0xFF;
1924 byte VAR_ACTIVE_OBJECT2 = 0xFF;
1927 byte VAR_ALWAYS_REDRAW_ACTORS = 0xFF;
1928 byte VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
1930 byte VAR_SOUND_CHANNEL = 0xFF;
1931 byte VAR_TALK_CHANNEL = 0xFF;
1932 byte VAR_SOUND_TOKEN_OFFSET = 0xFF;
1933 byte VAR_START_DYN_SOUND_CHANNELS = 0xFF;
1934 byte VAR_SOUND_CALLBACK_SCRIPT = 0xFF;
1936 byte VAR_EARLY_TALKIE_CALLBACK = 0xFF;
1937 byte VAR_EARLY_CHAN_0_CALLBACK = 0xFF;
1938 byte VAR_EARLY_CHAN_1_CALLBACK = 0xFF;
1939 byte VAR_EARLY_CHAN_2_CALLBACK = 0xFF;
1940 byte VAR_EARLY_CHAN_3_CALLBACK = 0xFF;
1942 byte VAR_MAIN_SCRIPT = 0xFF;
1944 byte VAR_DEFAULT_SCRIPT_PRIORITY = 0xFF;
1945 byte VAR_LAST_SCRIPT_PRIORITY = 0xFF;
1947 byte VAR_QUIT_SCRIPT = 0xFF;
1948 byte VAR_ERROR_FLAG = 0xFF;
1949 byte VAR_OPERATION_FAILURE = 0xFF;
1951 byte VAR_COLOR_BLACK = 0xFF;
1954 byte VAR_NUM_GLOBAL_OBJS = 0xFF;
1956 byte VAR_LAST_FRAME_BURN_TIME = 0xFF;
1957 byte VAR_LAST_FRAME_SCUMM_TIME = 0xFF;
1959 byte VAR_WINDEX_RUNNING = 0xFF;
1961 #ifdef USE_RGB_COLOR 1963 Graphics::FontSJIS *_cjkFont =
nullptr;
1967 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE 1969 bool towns_isRectInStringBox(
int x1,
int y1,
int x2,
int y2);
1970 byte _townsPaletteFlags = 0;
1971 byte _townsCharsetColorMap[16];
1974 void towns_drawStripToScreen(
VirtScreen *vs,
int dstX,
int dstY,
int srcX,
int srcY,
int w,
int h);
1975 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col);
1976 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h);
1977 void towns_clearStrip(
int strip);
1978 #ifdef USE_RGB_COLOR 1979 void towns_setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1980 void towns_setTextPaletteFromPtr(
const byte *ptr);
1982 void towns_setupPalCycleField(
int x1,
int y1,
int x2,
int y2);
1983 void towns_processPalCycleField();
1984 void towns_resetPalCycleFields();
1985 void towns_restoreCharsetBg();
1986 void towns_scriptScrollEffect(
int dir);
1988 void requestScroll(
int dir);
1989 void scrollLeft() { requestScroll(-1); }
1990 void scrollRight() { requestScroll(1); }
1991 void towns_waitForScroll(
int waitForDirection,
int threshold = 0);
1992 void towns_updateGfx();
1995 int _numCyclRects = 0;
1996 int _scrollRequest = 0;
1997 int _scrollDeltaAdjust = 0;
1998 bool _scrollNeedDeltaAdjust = 0;
1999 int _refreshDuration[20];
2000 int _refreshArrayPos = 0;
2001 bool _refreshNeedCatchUp =
false;
2002 bool _enableSmoothScrolling =
false;
2003 bool _forceFMTownsHiResMode =
false;
2004 uint32 _scrollTimer = 0;
2005 uint32 _scrollDestOffset = 0;
2006 uint16 _scrollFeedStrips[3];
2010 byte _townsOverrideShadowColor = 0;
2011 byte _textPalette[48];
2012 byte _townsClearLayerFlag = 1;
2013 byte _townsActiveLayerFlags = 3;
2014 static const uint8 _townsLayer2Mask[];
2018 void scrollLeft() { redrawBGStrip(_gdi->_numStrips - 1, 1); }
2019 void scrollRight() { redrawBGStrip(0, 1); }
2020 void towns_updateGfx() {}
2021 void towns_waitForScroll(
int waitForDirection,
int threshold = 0) {}
2022 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col) {}
2023 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h) {}
2024 #endif // DISABLE_TOWNS_DUAL_LAYER_MODE #define ARRAYSIZE(x)
Definition: util.h:112
Definition: macgui_impl.h:52
VirtScreenNumber
Definition: gfx.h:161
EngineFeature
Definition: engine.h:258
T left
Definition: rect.h:170
ErrorCode getCode() const
Definition: error.h:112
Definition: detection.h:119
Definition: macgui_v6.h:33
Definition: palette.h:195
RenderMode
Definition: rendermode.h:48
No error occurred.
Definition: error.h:48
Common::Path _containerFile
Definition: scumm.h:1126
Definition: resource.h:80
ResType
Definition: scumm.h:243
Definition: macgui_indy3.h:39
Definition: printman.h:30
void void void void void debugC(int level, uint32 debugChannel, MSVC_PRINTF const char *s,...) GCC_PRINTF(3
Definition: serializer.h:79
Graphics::Surface _textSurface
Definition: scumm.h:1668
int FORCEINLINE GCC_PRINTF(2, 0) int vsprintf_s(T(&dst)[N]
Definition: detection.h:46
T right
Definition: rect.h:171
bool currentScriptSlotIs(uint16 script) const
Definition: scumm.h:1046
Definition: player_towns.h:32
Definition: debugger.h:33
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: macgui_v5.h:33
Definition: serializer.h:308
Definition: charset.h:159
void NORETURN_PRE error(MSVC_PRINTF const char *s,...) GCC_PRINTF(1
Definition: localizer.h:31
Definition: base-costume.h:68
Definition: keyboard.h:294
Definition: serializer.h:33
Common::Error run() override
Definition: scumm.h:575
Common::RandomSource _rnd
Definition: scumm.h:543
Definition: macgui_loom.h:33
Definition: base-costume.h:49
Definition: detection.h:133
Language
Definition: language.h:45