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;
528 IMuse *_imuse =
nullptr;
529 IMuseDigital *_imuseDigital =
nullptr;
532 Sound *_sound =
nullptr;
549 int _insideCreateResource = 0;
551 bool _useOriginalGUI =
true;
552 bool _enableAudioOverride =
false;
553 bool _enableCOMISong =
false;
554 bool _isAmigaPALSystem =
false;
555 bool _quitFromScriptCmd =
false;
556 bool _isHE995 =
false;
557 bool _enableHECompetitiveOnlineMods =
false;
564 bool _needsSoundUnpause =
false;
582 void errorString(
const char *buf_input,
char *buf_output,
int buf_output_size)
override;
584 bool gameSupportsQuitDialogOverride()
const;
585 void syncSoundSettings()
override;
592 void pauseEngineIntern(
bool pause)
override;
595 virtual void setupScumm(
const Common::Path &macResourceFile);
596 virtual void resetScumm();
598 virtual void setupScummVars();
599 virtual void resetScummVars();
600 void setVideoModeVarToCurrentConfig();
601 void setSoundCardVarToCurrentConfig();
603 void setupCharsetRenderer(
const Common::Path &macFontFile);
604 void setupCostumeRenderer();
606 virtual void loadLanguageBundle();
609 void setupMusic(
int midi);
610 void setTalkSpeed(
int talkspeed);
614 virtual void scummLoop(
int delta);
615 virtual void scummLoop_updateScummVars();
616 virtual void scummLoop_handleSaveLoad();
617 virtual void scummLoop_handleDrawing();
618 virtual void scummLoop_handleActors() = 0;
619 virtual void scummLoop_handleEffects();
620 virtual void scummLoop_handleSound();
622 virtual void runBootscript();
624 virtual void terminateSaveMenuScript() {};
628 void beginTextInput();
635 void waitForTimer(
int quarterFrames,
bool freezeMacGui =
false);
636 uint32 _lastWaitTime;
638 void setTimerAndShakeFrequency();
645 uint32 getIntegralTime(
double fMsecs);
646 double _msecFractParts = 0.0;
648 virtual void processInput();
650 virtual void clearClickedStatus();
653 virtual void updateCursor();
654 virtual void animateCursor() {}
655 virtual void updatePalette();
656 virtual void setDefaultCursor() {};
657 virtual void setCursorTransparency(
int a) {};
658 virtual void resetCursors() {}
659 virtual void setCursorHotspot(
int x,
int y) {}
660 virtual void setCursorFromBuffer(
const byte *ptr,
int width,
int height,
int pitch,
bool preventScale =
false) {}
665 bool isUsingOriginalGUI()
const;
666 bool isMessageBannerActive();
668 bool _isIndy4Jap =
false;
671 Dialog *_pauseDialog =
nullptr;
672 Dialog *_messageDialog =
nullptr;
673 Dialog *_versionDialog =
nullptr;
675 void confirmExitDialog();
676 void confirmRestartDialog();
679 void versionDialog();
682 int32 _bannerColors[50];
683 byte *_bannerMem =
nullptr;
684 uint32 _bannerMemSize = 0;
685 int _bannerSaveYStart = 0;
687 bool _messageBannerActive =
false;
688 bool _comiQuitMenuIsOpen =
false;
689 bool _closeBannerAndQueryQuitFlag =
false;
692 byte *_textSurfBannerMem =
nullptr;
693 uint32 _textSurfBannerMemSize = 0;
698 const char _emptyMsg[1] = {
'\0'};
699 const char _uncheckedBox[2] = {
' ',
'\0'};
700 const char _checkedBox[2] = {
'x',
'\0'};
701 const char _arrowUp[2] = {
'\x18',
'\0'};
702 const char _arrowDown[2] = {
'\x19',
'\0'};
703 const char _arrowLeft[2] = {
'\x3c',
'\0'};
704 const char _arrowRight[2] = {
'\x3d',
'\0'};
708 int _mainMenuSavegameLabel = 1;
709 int _curDisplayedSaveSlotPage = 0;
710 int _firstSaveStateOfList = 0;
711 bool _mainMenuIsActive =
false;
712 bool _quitByGUIPrompt =
false;
713 char _mainMenuMusicSlider[17];
714 char _mainMenuSpeechSlider[17];
715 char _mainMenuSfxSlider[17];
716 char _mainMenuTextSpeedSlider[17];
717 char _mainMenuSegaCDPasscode[5];
718 int _spooledMusicIsToBeEnabled = 1;
719 int _saveScriptParam = 0;
720 int _guiCursorAnimCounter = 0;
721 int _v5VoiceMode = 0;
724 int _internalSpeakerSoundsAreOn = 1;
725 int _guiMouseFlag = 1;
726 int _guiJoystickFlag = 1;
728 bool _mixerMutedByGUI =
false;
731 byte *_tempTextSurface =
nullptr;
732 byte *_tempMainSurface =
nullptr;
733 byte *_tempVerbSurface =
nullptr;
734 bool _postGUICharMask =
false;
737 byte *_curGrabbedCursor =
nullptr;
738 int8 _oldCursorState = 0;
739 int _curCursorState = 0;
740 int _curCursorWidth = 0;
741 int _curCursorHeight = 0;
742 int _curCursorHotspotX = 0;
743 int _curCursorHotspotY = 0;
745 virtual void setSnailCursor() {}
748 Common::KeyState showBannerAndPause(
int bannerId, int32 waitTime,
const char *msg, ...);
749 Common::KeyState showOldStyleBannerAndPause(
const char *msg,
int color, int32 waitTime);
750 Common::KeyState printMessageAndPause(
const char *msg,
int color, int32 waitTime,
bool drawOnSentenceLine);
753 void setBannerColors(
int bannerId, byte r, byte g, byte b);
754 virtual int getBannerColor(
int bannerId);
755 void setUpInternalGUIControl(
int id,
int normalFillColor,
int normalTextColor,
756 int topLineColor,
int bottomLineColor,
int leftLineColor,
int rightLineColor,
757 int highlightedTextColor,
int highlightedFillColor,
758 int anchorPointX,
int anchorPointY,
int x,
int y,
const char *label,
bool centerFlag,
bool unknownFlag);
759 void drawInternalGUIControl(
int id,
bool highlightColor);
760 int getInternalGUIControlFromCoordinates(
int x,
int y);
761 virtual bool isSmushActive() {
return false; }
762 virtual bool isInsaneActive() {
return false; }
764 virtual void queryQuit(
bool returnToLauncher);
765 virtual void queryRestart();
766 virtual const char *getGUIString(
int stringId);
767 void waitForBannerInput(int32 waitTime,
Common::KeyState &ks,
bool &leftBtnClicked,
bool &rightBtnClicked,
bool handleMouseWheel =
false);
768 virtual int getGUIStringHeight(
const char *str);
769 virtual int getGUIStringWidth(
const char *str);
770 virtual void drawGUIText(
const char *buttonString,
Common::Rect *clipRect,
int textXPos,
int textYPos,
int textColor,
bool centerFlag);
771 void getSliderString(
int stringId,
int value,
char *sliderString,
int size);
772 virtual int getMusicVolume();
773 virtual int getSpeechVolume();
774 virtual int getSFXVolume();
775 virtual void setMusicVolume(
int volume);
776 virtual void setSpeechVolume(
int volume);
777 virtual void setSFXVolume(
int volume);
778 virtual void toggleVoiceMode();
779 virtual void handleLoadDuringSmush() {}
780 virtual void setSkipVideo(
int value) {}
783 virtual void setUpMainMenuControls();
784 void setUpMainMenuControlsSegaCD();
785 void setUpMainMenuControlsIndy4Jap();
786 void drawMainMenuControls();
787 void drawMainMenuControlsSegaCD();
788 void updateMainMenuControls();
789 void updateMainMenuControlsSegaCD();
790 void drawMainMenuTitle(
const char *title);
791 bool executeMainMenuOperation(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
792 bool executeMainMenuOperationSegaCD(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
793 bool shouldHighlightLabelAndWait(
int clickedControl);
794 void fillSavegameLabels();
795 bool canWriteGame(
int slotId);
796 bool userWriteLabelRoutine(
Common::KeyState &ks,
bool &leftMsClicked,
bool &rightMsClicked);
797 void saveCursorPreMenu();
798 void restoreCursorPostMenu();
799 void saveSurfacesPreGUI();
800 void restoreSurfacesPostGUI();
801 void showDraftsInventory();
802 void setUpDraftsInventory();
803 void drawDraftsInventory();
806 char displayMessage(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
807 bool displayMessageYesNo(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
808 bool displayMessageOKQuit(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
814 Actor **_actors =
nullptr;
815 Actor **_sortedActors =
nullptr;
817 byte *_arraySlot =
nullptr;
818 uint16 *_inventory =
nullptr;
819 uint16 *_newNames =
nullptr;
823 #define VAR(x) scummVar(x, #x, __FILE__, __LINE__) 824 int32& scummVar(byte var,
const char *varName,
const char *file,
int line) {
826 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
828 return _scummVars[var];
830 int32 scummVar(byte var,
const char *varName,
const char *file,
int line)
const {
832 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
834 return _scummVars[var];
839 int32 *_roomVars =
nullptr;
840 int32 *_scummVars =
nullptr;
841 byte *_bitVars =
nullptr;
844 int _numVariables = 0;
845 int _numBitVariables = 0;
846 int _numLocalObjects = 0;
847 int _numGlobalObjects = 0;
850 int _numFlObject = 0;
851 int _numInventory = 0;
852 int _numNewNames = 0;
853 int _numGlobalScripts = 0;
854 int _numRoomVariables = 0;
855 int _numPalettes = 0;
862 int _numLocalScripts = 60, _numImages = 0, _numRooms = 0, _numScripts = 0, _numSounds = 0;
863 int _numCostumes = 0;
864 int32 _numCharsets = 0;
869 int _NESCostumeSet = 0;
870 void NES_loadCostumeSet(
int n);
871 byte *_NEScostdesc =
nullptr, *_NEScostlens =
nullptr, *_NEScostoffs =
nullptr, *_NEScostdata =
nullptr;
872 byte _NESPatTable[2][4096];
873 byte _NESPalette[2][16];
874 byte _NESBaseTiles = 0;
876 int _NESStartStrip = 0;
879 int _curPalIndex = 0;
882 byte _currentRoom = 0;
883 int _roomResource = 0;
884 bool _egoPositioned =
false;
888 virtual Common::Path generateFilename(
const int room)
const;
892 bool _keyDownMap[512];
893 bool _actionMap[kScummActionCount];
898 uint16 _mouseAndKeyboardStat = 0;
899 byte _leftBtnPressed = 0, _rightBtnPressed = 0;
901 int _mouseWheelFlag = 0;
903 bool _setupIsComplete =
false;
909 uint32 _lastInputScriptTime = 0;
915 bool _dumpScripts =
false;
916 bool _hexdumpScripts =
false;
917 bool _showStack =
false;
918 bool _debugMode =
false;
921 byte _saveLoadFlag = 0, _saveLoadSlot = 0;
922 uint32 _lastSaveTime = 0;
923 bool _saveTemporaryState =
false;
924 bool _pauseSoundsDuringSave =
true;
925 bool _loadFromLauncher =
false;
926 bool _videoModeChanged =
false;
932 bool loadState(
int slot,
bool compat);
939 virtual int checkSoundEngineSaveDataSize(
Serializer &s);
941 void copyHeapSaveGameToFile(
int slot,
const char *saveName);
942 bool changeSavegameName(
int slot,
char *newName);
947 return makeSavegameName(_targetName, slot, temporary);
950 int getKeyState(
int key);
951 int getActionState(ScummAction action);
957 void listSavegames(
bool *marks,
int num);
960 void requestLoad(
int slot);
963 bool canPauseSoundsDuringSave()
const {
return _pauseSoundsDuringSave; }
974 uint32 _localScriptOffsets[1024];
975 const byte *_scriptPointer =
nullptr;
976 const byte *_scriptOrgPointer =
nullptr;
977 const byte *
const *_lastCodePtr =
nullptr;
980 byte _currentScript = 0xFF;
981 int _scummStackPos = 0;
984 char _engineVersionString[50];
985 char _dataFileVersionString[50];
994 return _currentScript != 0xFF && vm.slot[_currentScript].number == script;
997 virtual void setupOpcodes() = 0;
998 void executeOpcode(byte i);
999 const char *getOpcodeDesc(byte i);
1001 void initializeLocals(
int slot,
int *vars);
1002 int getScriptSlot();
1004 void startScene(
int room,
Actor *a,
int b);
1008 void runScript(
int script,
bool freezeResistant,
bool recursive,
int *lvarptr,
int cycle = 0);
1009 void stopScript(
int script);
1010 void nukeArrays(byte scriptSlot);
1013 void runObjectScript(
int script,
int entry,
bool freezeResistant,
bool recursive,
int *vars,
int slot = -1,
int cycle = 0);
1014 void runScriptNested(
int script);
1015 void executeScript();
1016 void updateScriptPtr();
1017 virtual void runInventoryScript(
int i);
1018 virtual void runInventoryScriptEx(
int i);
1019 virtual void checkAndRunSentenceScript();
1020 void runExitScript();
1021 void runEntryScript();
1022 void runQuitScript();
1023 void runAllScripts();
1024 void freezeScripts(
int scr);
1025 void unfreezeScripts();
1027 bool isScriptInUse(
int script)
const;
1028 bool isRoomScriptRunning(
int script)
const;
1029 bool isScriptRunning(
int script)
const;
1031 void killAllScriptsExceptCurrent();
1032 void killScriptsAndResources();
1033 void decreaseScriptDelay(
int amount);
1035 void stopObjectCode();
1036 void stopObjectScript(
int script);
1038 void getScriptBaseAddress();
1039 void resetScriptPointer();
1040 int getVerbEntrypoint(
int obj,
int entry);
1042 void refreshScriptPointer();
1043 byte fetchScriptByte();
1044 virtual uint fetchScriptWord();
1045 virtual int fetchScriptWordSigned();
1046 uint fetchScriptDWord();
1047 int fetchScriptDWordSigned();
1048 void ignoreScriptWord() { fetchScriptWord(); }
1049 void ignoreScriptByte() { fetchScriptByte(); }
1052 virtual int readVar(uint var);
1053 virtual void writeVar(uint var,
int value);
1055 virtual void resetSentence() {}
1058 virtual void beginCutscene(
int *args);
1059 virtual void endCutscene();
1060 void abortCutscene();
1061 void beginOverride();
1064 void copyScriptString(byte *dst);
1065 int resStrLen(
const byte *src);
1066 void doSentence(
int c,
int b,
int a);
1070 uint32 _fileOffset = 0;
1077 ScummFile *instantiateScummFile(
bool indexPAKFiles =
true);
1080 int _resourceHeaderSize = 8;
1081 byte _resourceMapper[128];
1082 const byte *_resourceLastSearchBuf;
1083 uint32 _resourceLastSearchSize;
1085 virtual void allocateArrays();
1086 void openRoom(
int room);
1088 void deleteRoomOffsets();
1089 virtual void readRoomsOffsets();
1090 void askForDisk(
const Common::Path &filename,
int disknum);
1091 bool openResourceFile(
const Common::Path &filename, byte encByte);
1093 void loadPtrToResource(
ResType type, ResId idx,
const byte *ptr);
1094 virtual int readResTypeList(
ResType type);
1097 int loadResource(
ResType type, ResId idx);
1099 int getResourceRoomNr(
ResType type, ResId idx);
1100 virtual uint32 getResourceRoomOffset(
ResType type, ResId idx);
1103 int getResourceSize(
ResType type, ResId idx);
1104 byte *getResourceAddress(
ResType type, ResId idx);
1105 virtual byte *getStringAddress(ResId idx);
1106 byte *getStringAddressVar(
int i);
1107 void ensureResourceLoaded(
ResType type, ResId idx);
1114 int readSoundResource(ResId idx);
1115 int readSoundResourceSmallHeader(ResId idx);
1116 bool isResourceInUse(
ResType type, ResId idx)
const;
1118 virtual void setupRoomSubBlocks();
1119 virtual void resetRoomSubBlocks();
1121 virtual void clearRoomObjects();
1122 virtual void resetRoomObjects();
1123 virtual void resetRoomObject(
ObjectData *od,
const byte *room,
const byte *searchptr = NULL);
1125 virtual void readArrayFromIndexFile();
1126 virtual void readMAXS(
int blockSize) = 0;
1127 virtual void readGlobalObjects();
1128 virtual void readIndexFile();
1129 virtual void readIndexBlock(uint32 block, uint32 itemsize);
1130 virtual void loadCharset(
int i);
1131 void nukeCharset(
int i);
1133 int _lastLoadedRoom = 0;
1135 const byte *findResourceData(uint32 tag,
const byte *ptr);
1136 const byte *findResource(uint32 tag,
const byte *ptr);
1137 void applyWorkaroundIfNeeded(
ResType type,
int idx);
1138 bool verifyMI2MacBootScript();
1139 bool verifyMI2MacBootScript(byte *buf,
int size);
1140 bool tryPatchMI1CannibalScript(byte *buf,
int size);
1142 int getResourceDataSize(
const byte *ptr)
const;
1143 void dumpResource(
const char *tag,
int index,
const byte *ptr,
int length = -1);
1147 byte OF_OWNER_ROOM = 0;
1148 int getInventorySlot();
1149 int findInventory(
int owner,
int index);
1150 int getInventoryCount(
int owner);
1153 byte *_objectOwnerTable =
nullptr, *_objectRoomTable =
nullptr, *_objectStateTable =
nullptr;
1154 int _numObjectsInRoom = 0;
1157 uint32 *_classData =
nullptr;
1160 void markObjectRectAsDirty(
int obj);
1161 virtual void loadFlObject(uint
object, uint room);
1162 void nukeFlObjects(
int min,
int max);
1163 int findFlObjectSlot();
1164 int findLocalObjectSlot();
1165 void addObjectToInventory(uint obj, uint room);
1166 void updateObjectStates();
1168 bool getClass(
int obj,
int cls)
const;
1170 void putClass(
int obj,
int cls,
bool set);
1171 int getState(
int obj);
1172 void putState(
int obj,
int state);
1173 void setObjectState(
int obj,
int state,
int x,
int y);
1174 int getOwner(
int obj)
const;
1175 void putOwner(
int obj,
int owner);
1176 void setOwnerOf(
int obj,
int owner);
1177 void clearOwnerOf(
int obj);
1178 int getObjectRoom(
int obj)
const;
1179 virtual bool objIsActor(
int obj);
1180 virtual int objToActor(
int obj);
1181 virtual int actorToObj(
int actor);
1182 int getObjX(
int obj);
1183 int getObjY(
int obj);
1184 void getObjectWidth(
int object,
int &width) {
int x, y, dir; getObjectXYPos(
object, x, y, dir, width); }
1185 void getObjectXYPos(
int object,
int &x,
int &y) {
int dir, width; getObjectXYPos(
object, x, y, dir, width); }
1186 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir) {
int width; getObjectXYPos(
object, x, y, dir, width); }
1187 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir,
int &width);
1188 int getObjOldDir(
int obj);
1189 int getObjNewDir(
int obj);
1190 int getObjectIndex(
int object)
const;
1191 int getObjectImageCount(
int object);
1192 int whereIsObject(
int object)
const;
1193 int findObject(
int x,
int y);
1194 void findObjectInRoom(
FindObjectInRoom *fo, byte findWhat, uint
object, uint room);
1196 int getObjectOrActorWidth(
int object,
int &width);
1197 int getObjectOrActorXY(
int object,
int &x,
int &y);
1198 int getDist(
int x,
int y,
int x2,
int y2);
1201 int getObjActToObjActDist(
int a,
int b);
1202 const byte *getObjOrActorName(
int obj);
1203 void setObjectName(
int obj);
1205 void addObjectToDrawQue(
int object);
1206 void removeObjectFromDrawQue(
int object);
1207 void clearDrawObjectQueue();
1208 void processDrawQue();
1210 virtual void clearDrawQueues();
1212 uint32 getOBCDOffs(
int object)
const;
1213 byte *getOBCDFromObject(
int obj,
bool v0CheckInventory =
true);
1214 const byte *getOBIMFromObjectData(
const ObjectData &od);
1215 const byte *getObjectImage(
const byte *ptr,
int state);
1216 virtual int getObjectIdFromOBIM(
const byte *obim);
1220 uint16 _verbMouseOver = 0;
1222 uint16 _userState = 0;
1224 virtual void handleMouseOver(
bool updateInventory);
1225 virtual void redrawVerbs();
1226 virtual void checkExecVerbs();
1228 void verbMouseOver(
int verb);
1229 int findVerbAtPos(
int x,
int y)
const;
1230 virtual void drawVerb(
int verb,
int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT);
1231 virtual void runInputScript(
int clickArea,
int val,
int mode);
1232 void restoreVerbBG(
int verb);
1233 void drawVerbBitmap(
int verb,
int x,
int y);
1234 int getVerbSlot(
int id,
int mode)
const;
1235 void killVerb(
int slot);
1236 void setVerbObject(uint room, uint
object, uint verb);
1239 bool isValidActor(
int id)
const;
1242 Actor *derefActor(
int id,
const char *errmsg = 0)
const;
1243 Actor *derefActorSafe(
int id,
const char *errmsg)
const;
1247 void playActorSounds();
1248 void redrawAllActors();
1249 virtual void setActorRedrawFlags();
1252 void resetV1ActorTalkColor();
1253 virtual void resetActorBgs();
1254 virtual void processActors();
1255 void processUpperActors();
1256 virtual int getActorFromPos(
int x,
int y);
1260 byte _actorToPrintStrFor = 0, _V1TalkingActor = 0;
1261 int _sentenceNum = 0;
1265 int16 _talkDelay = 0;
1266 int _NES_lastTalkingActor = 0;
1267 int _NES_talkColor = 0;
1269 virtual void actorTalk(
const byte *msg);
1271 int getTalkingActor();
1272 void setTalkingActor(
int variable);
1275 bool isCostumeInUse(
int i)
const;
1279 uint16 _screenB = 0, _screenH = 0;
1281 int _roomHeight = 0, _roomWidth = 0;
1282 int _screenHeight = 0, _screenWidth = 0;
1285 bool _cameraIsFrozen =
false;
1287 int _screenStartStrip = 0, _screenEndStrip = 0;
1289 bool _forceBannerVirtScreen =
false;
1300 bool _useMacScreenCorrectHeight =
true;
1301 int _macScreenDrawOffset = 20;
1304 uint8 _bytesPerPixel = 1;
1309 uint8 _colorUsedByCycle[256];
1312 uint32 _ENCD_offs = 0, _EXCD_offs = 0;
1313 uint32 _CLUT_offs = 0, _EPAL_offs = 0;
1314 uint32 _IM00_offs = 0, _PALS_offs = 0;
1317 bool _fullRedraw =
false, _bgNeedsRedraw =
false;
1318 bool _screenEffectFlag =
false, _completeScreenRedraw =
false;
1319 bool _disableFadeInEffect =
false;
1322 int hotspotX, hotspotY, width, height;
1323 byte animate, animateIndex;
1329 byte _grabbedCursor[16384];
1330 byte _macGrabbedCursor[16384 * 4];
1331 byte _currentCursor = 0;
1333 byte _newEffect = 0, _switchRoomEffect2 = 0, _switchRoomEffect = 0;
1334 bool _doEffect =
false;
1336 bool _snapScroll =
false;
1338 virtual void setBuiltinCursor(
int index) {}
1340 bool isLightOn()
const;
1342 virtual int getCurrentLights()
const;
1345 void initScreens(
int b,
int h);
1346 void initVirtScreen(
VirtScreenNumber slot,
int top,
int width,
int height,
bool twobufs,
bool scrollable);
1347 void initBGBuffers(
int height);
1348 void initCycl(
const byte *ptr);
1350 void decodeNESBaseTiles();
1352 void drawObject(
int obj,
int scrollType);
1353 void drawRoomObjects(
int arg);
1354 void drawRoomObject(
int i,
int arg);
1355 void drawBox(
int x,
int y,
int x2,
int y2,
int color);
1356 void drawLine(
int x1,
int y1,
int x2,
int y2,
int color);
1357 void drawPixel(
VirtScreen *vs,
int x,
int y, int16 color,
bool useBackbuffer =
false);
1359 void moveScreen(
int dx,
int dy,
int height);
1361 void restoreBackground(
Common::Rect rect, byte backcolor = 0);
1362 void redrawBGStrip(
int start,
int num);
1363 virtual void redrawBGAreas();
1366 void setCameraAtEx(
int at);
1367 virtual void setCameraAt(
int pos_x,
int pos_y);
1368 virtual void setCameraFollows(
Actor *a,
bool setCamera =
false);
1369 virtual void moveCamera();
1370 virtual void panCameraTo(
int x,
int y);
1372 void actorFollowCamera(
int act);
1374 const byte *getPalettePtr(
int palindex,
int room);
1376 void setPaletteFromTable(
const byte *ptr,
int numcolor,
int firstIndex = 0);
1377 void resetPalette(
bool isBootUp =
false);
1379 void setCurrentPalette(
int pal);
1380 void setRoomPalette(
int pal,
int room);
1381 void setPCEPaletteFromPtr(
const byte *ptr);
1382 void setAmigaPaletteFromPtr(
const byte *ptr);
1383 virtual void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1384 void setV1ColorTable(
int renderMode);
1386 virtual void setPalColor(
int index,
int r,
int g,
int b);
1387 void setDirtyColors(
int min,
int max);
1388 const byte *findPalInPals(
const byte *pal,
int index);
1389 void swapPalColors(
int a,
int b);
1390 virtual void copyPalColor(
int dst,
int src);
1391 void cyclePalette();
1392 void stopCycle(
int i);
1393 virtual void palManipulateInit(
int resID,
int start,
int end,
int time);
1394 void palManipulate();
1395 uint32 findClosestPaletteColor(byte *palette,
int paletteLength, byte r, byte g, byte b);
1396 void applyGrayscaleToPaletteRange(
int min,
int max);
1397 bool haveToApplyMonkey1PaletteFix();
1400 uint8 *getHEPaletteSlot(uint16 palSlot);
1401 uint16 get16BitColor(uint8 r, uint8 g, uint8 b);
1402 uint32 getPaletteColorFromRGB(byte *palette, byte r, byte g, byte b);
1403 uint32 getPackedRGBColorFromPalette(byte *palette, uint32 color);
1404 void fetchBlackAndWhite(uint32 &black, uint32 &white, byte *palette,
int paletteEntries);
1405 int remapPaletteColor(
int r,
int g,
int b,
int threshold);
1406 void readPCEPalette(
const byte **ptr, byte **dest,
int numEntries);
1407 void colorPCEToRGB(uint16 color, byte *r, byte *g, byte *b);
1408 void setPCETextPalette(uint8 color);
1410 void moveMemInPalRes(
int start,
int end, byte direction);
1411 void setShadowPalette(
int slot,
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1412 void setShadowPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor,
int start,
int end);
1413 virtual void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1416 void markRectAsDirty(
VirtScreenNumber virt,
int left,
int right,
int top,
int bottom,
int dirtybit = 0);
1418 markRectAsDirty(virt, rect.
left, rect.
right, rect.top, rect.bottom, dirtybit);
1422 byte *_compositeBuf;
1423 byte *_hercCGAScaleBuf =
nullptr;
1424 bool _enableEGADithering =
false;
1425 bool _supportsEGADithering =
false;
1426 bool _enableSegaShadowMode =
false;
1428 virtual void drawDirtyScreenParts();
1430 void drawStripToScreen(
VirtScreen *vs,
int x,
int width,
int top,
int bottom);
1432 void mac_markScreenAsDirty(
int x,
int y,
int w,
int h);
1433 void mac_drawStripToScreen(
VirtScreen *vs,
int top,
int x,
int y,
int width,
int height);
1434 void mac_drawIndy3TextBox();
1435 void mac_undrawIndy3TextBox();
1436 void mac_undrawIndy3CreditsText();
1437 void mac_drawBufferToScreen(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1438 void mac_updateCompositeBuffer(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1439 void mac_blitDoubleResImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1440 void mac_applyDoubleResToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch);
1441 void mac_blitEPXImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1442 void mac_applyEPXToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch,
int xOffset,
int yOffset,
int bufferWidth,
int bufferHeight);
1443 void mac_scaleCursor(byte *&outCursor,
int &outHotspotX,
int &outHotspotY,
int &outWidth,
int &outHeight);
1444 void mac_toggleSmoothing();
1446 Common::KeyState mac_showOldStyleBannerAndPause(
const char *msg, int32 waitTime);
1448 const byte *postProcessDOSGraphics(
VirtScreen *vs,
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1449 const byte *ditherVGAtoEGA(
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1453 byte *getMaskBuffer(
int x,
int y,
int z);
1456 void fadeIn(
int effect);
1457 void fadeOut(
int effect);
1459 void dissolveEffectSelector();
1460 void transitionEffect(
int a);
1461 void dissolveEffect(
int width,
int height);
1462 void scrollEffect(
int dir);
1464 void updateScreenShakeEffect();
1467 double getTimerFrequency();
1468 double getAmigaMusicTimerFrequency();
1471 bool _shakeEnabled =
false;
1472 bool _shakeTempSavedState =
false;
1473 uint _shakeFrame = 0;
1474 uint32 _shakeNextTick = 0;
1475 uint32 _shakeTickCounter = 0;
1476 double _shakeTimerRate;
1477 double _timerFrequency;
1479 void setShake(
int mode);
1481 int _drawObjectQueNr = 0;
1482 byte _drawObjectQue[200];
1495 uint32 gfxUsageBits[410 * 3];
1497 void upgradeGfxUsageBits();
1498 void setGfxUsageBit(
int strip,
int bit);
1499 void clearGfxUsageBit(
int strip,
int bit);
1502 bool testGfxUsageBit(
int strip,
int bit) {
1503 assert(strip >= 0 && strip <
ARRAYSIZE(gfxUsageBits) / 3);
1504 assert(1 <= bit && bit <= 96);
1506 return (gfxUsageBits[3 * strip + bit / 32] & (1 << (bit % 32))) != 0;
1509 bool testGfxAnyUsageBits(
int strip);
1510 bool testGfxObjectUsageBits(
int strip);
1511 bool testGfxOtherUsageBits(
int strip,
int bit);
1514 byte _roomPalette[256];
1515 byte *_shadowPalette =
nullptr;
1516 bool _skipDrawObject = 0;
1518 int _soundEnabled = 0;
1521 byte _HEV7ActorPalette[256];
1522 uint8 *_hePalettes =
nullptr;
1523 uint16 _hePaletteSlot = 0;
1524 uint16 *_16BitPalette =
nullptr;
1527 byte *_verbPalette =
nullptr;
1532 int _shadowPaletteSize = 0;
1533 byte _currentPalette[3 * 256];
1534 byte _darkenPalette[3 * 256];
1535 int _paletteChangedCounter = 1;
1537 int _palDirtyMin = 0, _palDirtyMax = 0;
1539 byte _palManipStart = 0, _palManipEnd = 0;
1540 uint16 _palManipCounter = 0;
1541 byte *_palManipPalette =
nullptr;
1542 byte *_palManipIntermediatePal =
nullptr;
1544 bool _haveActorSpeechMsg =
false;
1545 bool _useTalkAnims =
false;
1546 uint16 _defaultTextSpeed = 0;
1548 bool _native_mt32 =
false;
1549 bool _copyProtection =
false;
1550 bool _shadowPalRemap =
false;
1553 uint16 _amigaFirstUsedColor = 0;
1554 byte _amigaPalette[3 * 64];
1555 void amigaPaletteFindFirstUsedColor();
1556 void mapRoomPalette(
int idx);
1557 int remapRoomPaletteColor(
int r,
int g,
int b);
1558 void mapVerbPalette(
int idx);
1559 int remapVerbPaletteColor(
int r,
int g,
int b);
1562 byte *_egaColorMap[2];
1565 uint16 _extraBoxFlags[65];
1568 byte *getBoxMatrixBaseAddr();
1569 byte *getBoxConnectionBase(
int box);
1571 int getNextBox(byte from, byte to);
1573 void setBoxFlags(
int box,
int val);
1574 void setBoxScale(
int box,
int b);
1576 bool checkXYInBoxBounds(
int box,
int x,
int y);
1578 BoxCoords getBoxCoordinates(
int boxnum);
1580 byte getMaskFromBox(
int box);
1581 Box *getBoxBaseAddr(
int box);
1582 byte getBoxFlags(
int box);
1583 int getBoxScale(
int box);
1585 int getScale(
int box,
int x,
int y);
1586 int getScaleFromSlot(
int slot,
int x,
int y);
1596 void setScaleSlot(
int slot,
int x1,
int y1,
int scale1,
int x2,
int y2,
int scale2);
1597 void setBoxScaleSlot(
int box,
int slot);
1598 void convertScaleTableToScaleSlot(
int slot);
1600 void calcItineraryMatrix(byte *itineraryMatrix,
int num);
1601 void createBoxMatrix();
1602 virtual bool areBoxesNeighbors(
int i,
int j);
1607 byte _charsetColorMap[16];
1614 int _textSurfaceMultiplier = 0;
1616 bool _isModernMacVersion =
false;
1617 bool _useGammaCorrection =
true;
1620 MacGui *_macGui =
nullptr;
1621 bool _useMacGraphicsSmoothing =
true;
1622 byte _completeScreenBuffer[320 * 200];
1625 byte _charsetColor = 0;
1626 byte _charsetData[23][16];
1628 int _charsetBufPos = 0;
1629 byte _charsetBuffer[512];
1631 bool _keepText =
false;
1634 int _nextLeft = 0, _nextTop = 0;
1639 bool _voiceNextString =
false;
1640 bool _checkPreviousSaid =
false;
1641 bool _voicePassHelpButtons =
false;
1642 int _previousVerb = -1;
1643 int _previousControl = -1;
1648 void restoreCharsetBg();
1649 void clearCharsetMask();
1650 void clearTextSurface();
1652 virtual void initCharset(
int charset);
1654 virtual void printString(
int m,
const byte *msg);
1656 virtual bool handleNextCharsetCode(
Actor *a,
int *c);
1657 virtual void drawSentence() {}
1658 virtual void displayDialog();
1659 int countNumberOfWaits();
1661 void drawString(
int a,
const byte *msg, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::QUEUE);
1662 virtual void fakeBidiString(byte *ltext,
bool ignoreVerb,
int ltextSize)
const;
1663 void wrapSegaCDText();
1664 void debugMessage(
const byte *msg);
1665 virtual void showMessageDialog(
const byte *msg);
1668 void sayText(
const Common::String &text, Common::TextToSpeechManager::Action action = Common::TextToSpeechManager::QUEUE)
const;
1669 void stopTextToSpeech()
const;
1670 void sayButtonText();
1673 virtual int convertMessageToString(
const byte *msg, byte *dst,
int dstSize);
1674 int convertIntMessage(byte *dst,
int dstSize,
int var);
1675 int convertVerbMessage(byte *dst,
int dstSize,
int var);
1676 int convertNameMessage(byte *dst,
int dstSize,
int var);
1677 int convertStringMessage(byte *dst,
int dstSize,
int var);
1683 virtual void translateText(
const byte *text, byte *trans_buff,
int transBufferSize);
1685 bool reverseIfNeeded(
const byte *text, byte *reverseBuf,
int reverseBufSize)
const;
1687 Common::CodePage getDialogCodePage()
const;
1690 bool _useCJKMode =
false;
1691 bool _useMultiFont =
false;
1692 int _numLoadedFont = 0;
1693 int _2byteShadow = 0;
1694 bool _force2ByteCharHeight =
false;
1696 int _2byteHeight = 0;
1697 int _2byteWidth = 0;
1699 byte _newLineCharacter = 0;
1700 byte *get2byteCharPtr(
int idx);
1702 bool isScummvmKorTarget();
1703 bool hasLocalizer();
1706 byte *_2byteFontPtr =
nullptr;
1707 byte *_2byteMultiFontPtr[20];
1708 int _2byteMultiHeight[20];
1709 int _2byteMultiWidth[20];
1710 int _2byteMultiShadow[20];
1713 struct TranslatedLine {
1714 uint32 originalTextOffset;
1715 uint32 translatedTextOffset;
1718 struct TranslationRange {
1722 TranslationRange(uint32 left_, uint32 right_) : left(left_), right(right_) {}
1723 TranslationRange() : left(0), right(0) {}
1726 struct TranslationRoom {
1730 bool _existLanguageFile =
false;
1731 bool _isRTL =
false;
1732 byte *_languageBuffer =
nullptr;
1733 int _numTranslatedLines = 0;
1734 TranslatedLine *_translatedLines =
nullptr;
1735 uint16 *_languageLineIndex =
nullptr;
1738 const byte *searchTranslatedLine(
const byte *text,
const TranslationRange &range,
bool useIndex);
1740 virtual void createTextRenderer(GlyphRenderer_v7 *gr) {}
1745 byte VAR_KEYPRESS = 0xFF;
1746 byte VAR_SYNC = 0xFF;
1747 byte VAR_EGO = 0xFF;
1748 byte VAR_CAMERA_POS_X = 0xFF;
1749 byte VAR_HAVE_MSG = 0xFF;
1750 byte VAR_ROOM = 0xFF;
1751 byte VAR_OVERRIDE = 0xFF;
1752 byte VAR_MACHINE_SPEED = 0xFF;
1754 byte VAR_NUM_ACTOR = 0xFF;
1755 byte VAR_CURRENT_LIGHTS = 0xFF;
1756 byte VAR_CURRENTDRIVE = 0xFF;
1757 byte VAR_CURRENTDISK = 0xFF;
1758 byte VAR_TMR_1 = 0xFF;
1759 byte VAR_TMR_2 = 0xFF;
1760 byte VAR_TMR_3 = 0xFF;
1761 byte VAR_MUSIC_TIMER = 0xFF;
1762 byte VAR_ACTOR_RANGE_MIN = 0xFF;
1763 byte VAR_ACTOR_RANGE_MAX = 0xFF;
1764 byte VAR_CAMERA_MIN_X = 0xFF;
1765 byte VAR_CAMERA_MAX_X = 0xFF;
1766 byte VAR_TIMER_NEXT = 0xFF;
1767 byte VAR_VIRT_MOUSE_X = 0xFF;
1768 byte VAR_VIRT_MOUSE_Y = 0xFF;
1769 byte VAR_ROOM_RESOURCE = 0xFF;
1770 byte VAR_LAST_SOUND = 0xFF;
1771 byte VAR_CUTSCENEEXIT_KEY = 0xFF;
1772 byte VAR_OPTIONS_KEY = 0xFF;
1773 byte VAR_TALK_ACTOR = 0xFF;
1774 byte VAR_CAMERA_FAST_X = 0xFF;
1775 byte VAR_SCROLL_SCRIPT = 0xFF;
1776 byte VAR_ENTRY_SCRIPT = 0xFF;
1777 byte VAR_ENTRY_SCRIPT2 = 0xFF;
1778 byte VAR_EXIT_SCRIPT = 0xFF;
1779 byte VAR_EXIT_SCRIPT2 = 0xFF;
1780 byte VAR_VERB_SCRIPT = 0xFF;
1781 byte VAR_SENTENCE_SCRIPT = 0xFF;
1782 byte VAR_INVENTORY_SCRIPT = 0xFF;
1783 byte VAR_CUTSCENE_START_SCRIPT = 0xFF;
1784 byte VAR_CUTSCENE_END_SCRIPT = 0xFF;
1785 byte VAR_CHARINC = 0xFF;
1786 byte VAR_WALKTO_OBJ = 0xFF;
1787 byte VAR_DEBUGMODE = 0xFF;
1788 byte VAR_HEAPSPACE = 0xFF;
1789 byte VAR_RESTART_KEY = 0xFF;
1790 byte VAR_PAUSE_KEY = 0xFF;
1791 byte VAR_MOUSE_X = 0xFF;
1792 byte VAR_MOUSE_Y = 0xFF;
1793 byte VAR_TIMER = 0xFF;
1794 byte VAR_TIMER_TOTAL = 0xFF;
1795 byte VAR_SOUNDCARD = 0xFF;
1796 byte VAR_VIDEOMODE = 0xFF;
1797 byte VAR_MAINMENU_KEY = 0xFF;
1798 byte VAR_FIXEDDISK = 0xFF;
1799 byte VAR_CURSORSTATE = 0xFF;
1800 byte VAR_USERPUT = 0xFF;
1801 byte VAR_SOUNDRESULT = 0xFF;
1802 byte VAR_TALKSTOP_KEY = 0xFF;
1803 byte VAR_FADE_DELAY = 0xFF;
1804 byte VAR_NOSUBTITLES = 0xFF;
1807 byte VAR_SOUNDPARAM = 0xFF;
1808 byte VAR_SOUNDPARAM2 = 0xFF;
1809 byte VAR_SOUNDPARAM3 = 0xFF;
1810 byte VAR_INPUTMODE = 0xFF;
1811 byte VAR_MEMORY_PERFORMANCE = 0xFF;
1812 byte VAR_VIDEO_PERFORMANCE = 0xFF;
1813 byte VAR_ROOM_FLAG = 0xFF;
1814 byte VAR_GAME_LOADED = 0xFF;
1815 byte VAR_NEW_ROOM = 0xFF;
1818 byte VAR_V5_TALK_STRING_Y = 0xFF;
1821 byte VAR_ROOM_WIDTH = 0xFF;
1822 byte VAR_ROOM_HEIGHT = 0xFF;
1823 byte VAR_SUBTITLES = 0xFF;
1824 byte VAR_V6_EMSSPACE = 0xFF;
1827 byte VAR_CAMERA_POS_Y = 0xFF;
1828 byte VAR_CAMERA_MIN_Y = 0xFF;
1829 byte VAR_CAMERA_MAX_Y = 0xFF;
1830 byte VAR_CAMERA_THRESHOLD_X = 0xFF;
1831 byte VAR_CAMERA_THRESHOLD_Y = 0xFF;
1832 byte VAR_CAMERA_SPEED_X = 0xFF;
1833 byte VAR_CAMERA_SPEED_Y = 0xFF;
1834 byte VAR_CAMERA_ACCEL_X = 0xFF;
1835 byte VAR_CAMERA_ACCEL_Y = 0xFF;
1836 byte VAR_CAMERA_DEST_X = 0xFF;
1837 byte VAR_CAMERA_DEST_Y = 0xFF;
1838 byte VAR_CAMERA_FOLLOWED_ACTOR = 0xFF;
1841 byte VAR_VERSION_KEY = 0xFF;
1842 byte VAR_DEFAULT_TALK_DELAY = 0xFF;
1843 byte VAR_CUSTOMSCALETABLE = 0xFF;
1844 byte VAR_BLAST_ABOVE_TEXT = 0xFF;
1845 byte VAR_VOICE_MODE = 0xFF;
1846 byte VAR_MUSIC_BUNDLE_LOADED = 0xFF;
1847 byte VAR_VOICE_BUNDLE_LOADED = 0xFF;
1849 byte VAR_LEFTBTN_DOWN = 0xFF;
1850 byte VAR_RIGHTBTN_DOWN = 0xFF;
1851 byte VAR_LEFTBTN_HOLD = 0xFF;
1852 byte VAR_RIGHTBTN_HOLD = 0xFF;
1853 byte VAR_PRE_SAVELOAD_SCRIPT = 0xFF;
1854 byte VAR_POST_SAVELOAD_SCRIPT = 0xFF;
1855 byte VAR_SAVELOAD_PAGE = 0xFF;
1856 byte VAR_OBJECT_LABEL_FLAG = 0xFF;
1859 byte VAR_CHARSET_MASK = 0xFF;
1862 byte VAR_V6_SOUNDMODE = 0xFF;
1865 byte VAR_CHARCOUNT = 0xFF;
1866 byte VAR_VERB_ALLOWED = 0xFF;
1867 byte VAR_ACTIVE_VERB = 0xFF;
1868 byte VAR_ACTIVE_OBJECT1 = 0xFF;
1869 byte VAR_ACTIVE_OBJECT2 = 0xFF;
1872 byte VAR_ALWAYS_REDRAW_ACTORS = 0xFF;
1873 byte VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
1875 byte VAR_SOUND_CHANNEL = 0xFF;
1876 byte VAR_TALK_CHANNEL = 0xFF;
1877 byte VAR_SOUND_TOKEN_OFFSET = 0xFF;
1878 byte VAR_START_DYN_SOUND_CHANNELS = 0xFF;
1879 byte VAR_SOUND_CALLBACK_SCRIPT = 0xFF;
1881 byte VAR_EARLY_TALKIE_CALLBACK = 0xFF;
1882 byte VAR_EARLY_CHAN_0_CALLBACK = 0xFF;
1883 byte VAR_EARLY_CHAN_1_CALLBACK = 0xFF;
1884 byte VAR_EARLY_CHAN_2_CALLBACK = 0xFF;
1885 byte VAR_EARLY_CHAN_3_CALLBACK = 0xFF;
1887 byte VAR_MAIN_SCRIPT = 0xFF;
1889 byte VAR_DEFAULT_SCRIPT_PRIORITY = 0xFF;
1890 byte VAR_LAST_SCRIPT_PRIORITY = 0xFF;
1892 byte VAR_QUIT_SCRIPT = 0xFF;
1893 byte VAR_ERROR_FLAG = 0xFF;
1894 byte VAR_OPERATION_FAILURE = 0xFF;
1896 byte VAR_COLOR_BLACK = 0xFF;
1899 byte VAR_NUM_GLOBAL_OBJS = 0xFF;
1901 byte VAR_LAST_FRAME_BURN_TIME = 0xFF;
1902 byte VAR_LAST_FRAME_SCUMM_TIME = 0xFF;
1904 byte VAR_WINDEX_RUNNING = 0xFF;
1906 #ifdef USE_RGB_COLOR 1908 Graphics::FontSJIS *_cjkFont =
nullptr;
1912 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE 1914 bool towns_isRectInStringBox(
int x1,
int y1,
int x2,
int y2);
1915 byte _townsPaletteFlags = 0;
1916 byte _townsCharsetColorMap[16];
1919 void towns_drawStripToScreen(
VirtScreen *vs,
int dstX,
int dstY,
int srcX,
int srcY,
int w,
int h);
1920 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col);
1921 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h);
1922 void towns_clearStrip(
int strip);
1923 #ifdef USE_RGB_COLOR 1924 void towns_setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1925 void towns_setTextPaletteFromPtr(
const byte *ptr);
1927 void towns_setupPalCycleField(
int x1,
int y1,
int x2,
int y2);
1928 void towns_processPalCycleField();
1929 void towns_resetPalCycleFields();
1930 void towns_restoreCharsetBg();
1931 void towns_scriptScrollEffect(
int dir);
1933 void requestScroll(
int dir);
1934 void scrollLeft() { requestScroll(-1); }
1935 void scrollRight() { requestScroll(1); }
1936 void towns_waitForScroll(
int waitForDirection,
int threshold = 0);
1937 void towns_updateGfx();
1940 int _numCyclRects = 0;
1941 int _scrollRequest = 0;
1942 int _scrollDeltaAdjust = 0;
1943 bool _scrollNeedDeltaAdjust = 0;
1944 int _refreshDuration[20];
1945 int _refreshArrayPos = 0;
1946 bool _refreshNeedCatchUp =
false;
1947 bool _enableSmoothScrolling =
false;
1948 bool _forceFMTownsHiResMode =
false;
1949 uint32 _scrollTimer = 0;
1950 uint32 _scrollDestOffset = 0;
1951 uint16 _scrollFeedStrips[3];
1955 byte _townsOverrideShadowColor = 0;
1956 byte _textPalette[48];
1957 byte _townsClearLayerFlag = 1;
1958 byte _townsActiveLayerFlags = 3;
1959 static const uint8 _townsLayer2Mask[];
1963 void scrollLeft() { redrawBGStrip(_gdi->_numStrips - 1, 1); }
1964 void scrollRight() { redrawBGStrip(0, 1); }
1965 void towns_updateGfx() {}
1966 void towns_waitForScroll(
int waitForDirection,
int threshold = 0) {}
1967 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col) {}
1968 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h) {}
1969 #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:189
RenderMode
Definition: rendermode.h:48
No error occurred.
Definition: error.h:48
Common::Path _containerFile
Definition: scumm.h:1073
Definition: resource.h:80
ResType
Definition: scumm.h:243
Definition: macgui_indy3.h:39
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:1613
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:993
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:574
Common::RandomSource _rnd
Definition: scumm.h:542
Definition: macgui_loom.h:33
Definition: base-costume.h:49
Definition: detection.h:133
Language
Definition: language.h:45