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(
const char *altButton, MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(3, 4);
807 bool displayMessageYesNo(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
813 Actor **_actors =
nullptr;
814 Actor **_sortedActors =
nullptr;
816 byte *_arraySlot =
nullptr;
817 uint16 *_inventory =
nullptr;
818 uint16 *_newNames =
nullptr;
822 #define VAR(x) scummVar(x, #x, __FILE__, __LINE__) 823 int32& scummVar(byte var,
const char *varName,
const char *file,
int line) {
825 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
827 return _scummVars[var];
829 int32 scummVar(byte var,
const char *varName,
const char *file,
int line)
const {
831 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
833 return _scummVars[var];
838 int32 *_roomVars =
nullptr;
839 int32 *_scummVars =
nullptr;
840 byte *_bitVars =
nullptr;
843 int _numVariables = 0;
844 int _numBitVariables = 0;
845 int _numLocalObjects = 0;
846 int _numGlobalObjects = 0;
849 int _numFlObject = 0;
850 int _numInventory = 0;
851 int _numNewNames = 0;
852 int _numGlobalScripts = 0;
853 int _numRoomVariables = 0;
854 int _numPalettes = 0;
861 int _numLocalScripts = 60, _numImages = 0, _numRooms = 0, _numScripts = 0, _numSounds = 0;
862 int _numCostumes = 0;
863 int32 _numCharsets = 0;
868 int _NESCostumeSet = 0;
869 void NES_loadCostumeSet(
int n);
870 byte *_NEScostdesc =
nullptr, *_NEScostlens =
nullptr, *_NEScostoffs =
nullptr, *_NEScostdata =
nullptr;
871 byte _NESPatTable[2][4096];
872 byte _NESPalette[2][16];
873 byte _NESBaseTiles = 0;
875 int _NESStartStrip = 0;
878 int _curPalIndex = 0;
881 byte _currentRoom = 0;
882 int _roomResource = 0;
883 bool _egoPositioned =
false;
887 virtual Common::Path generateFilename(
const int room)
const;
891 bool _keyDownMap[512];
892 bool _actionMap[kScummActionCount];
897 uint16 _mouseAndKeyboardStat = 0;
898 byte _leftBtnPressed = 0, _rightBtnPressed = 0;
900 int _mouseWheelFlag = 0;
902 bool _setupIsComplete =
false;
908 uint32 _lastInputScriptTime = 0;
914 bool _dumpScripts =
false;
915 bool _hexdumpScripts =
false;
916 bool _showStack =
false;
917 bool _debugMode =
false;
920 byte _saveLoadFlag = 0, _saveLoadSlot = 0;
921 uint32 _lastSaveTime = 0;
922 bool _saveTemporaryState =
false;
923 bool _pauseSoundsDuringSave =
true;
924 bool _loadFromLauncher =
false;
925 bool _videoModeChanged =
false;
931 bool loadState(
int slot,
bool compat);
938 virtual int checkSoundEngineSaveDataSize(
Serializer &s);
940 void copyHeapSaveGameToFile(
int slot,
const char *saveName);
941 bool changeSavegameName(
int slot,
char *newName);
946 return makeSavegameName(_targetName, slot, temporary);
949 int getKeyState(
int key);
950 int getActionState(ScummAction action);
956 void listSavegames(
bool *marks,
int num);
959 void requestLoad(
int slot);
962 bool canPauseSoundsDuringSave()
const {
return _pauseSoundsDuringSave; }
973 uint32 _localScriptOffsets[1024];
974 const byte *_scriptPointer =
nullptr;
975 const byte *_scriptOrgPointer =
nullptr;
976 const byte *
const *_lastCodePtr =
nullptr;
979 byte _currentScript = 0xFF;
980 int _scummStackPos = 0;
983 char _engineVersionString[50];
984 char _dataFileVersionString[50];
993 return _currentScript != 0xFF && vm.slot[_currentScript].number == script;
996 virtual void setupOpcodes() = 0;
997 void executeOpcode(byte i);
998 const char *getOpcodeDesc(byte i);
1000 void initializeLocals(
int slot,
int *vars);
1001 int getScriptSlot();
1003 void startScene(
int room,
Actor *a,
int b);
1007 void runScript(
int script,
bool freezeResistant,
bool recursive,
int *lvarptr,
int cycle = 0);
1008 void stopScript(
int script);
1009 void nukeArrays(byte scriptSlot);
1012 void runObjectScript(
int script,
int entry,
bool freezeResistant,
bool recursive,
int *vars,
int slot = -1,
int cycle = 0);
1013 void runScriptNested(
int script);
1014 void executeScript();
1015 void updateScriptPtr();
1016 virtual void runInventoryScript(
int i);
1017 virtual void runInventoryScriptEx(
int i);
1018 virtual void checkAndRunSentenceScript();
1019 void runExitScript();
1020 void runEntryScript();
1021 void runQuitScript();
1022 void runAllScripts();
1023 void freezeScripts(
int scr);
1024 void unfreezeScripts();
1026 bool isScriptInUse(
int script)
const;
1027 bool isRoomScriptRunning(
int script)
const;
1028 bool isScriptRunning(
int script)
const;
1030 void killAllScriptsExceptCurrent();
1031 void killScriptsAndResources();
1032 void decreaseScriptDelay(
int amount);
1034 void stopObjectCode();
1035 void stopObjectScript(
int script);
1037 void getScriptBaseAddress();
1038 void resetScriptPointer();
1039 int getVerbEntrypoint(
int obj,
int entry);
1041 void refreshScriptPointer();
1042 byte fetchScriptByte();
1043 virtual uint fetchScriptWord();
1044 virtual int fetchScriptWordSigned();
1045 uint fetchScriptDWord();
1046 int fetchScriptDWordSigned();
1047 void ignoreScriptWord() { fetchScriptWord(); }
1048 void ignoreScriptByte() { fetchScriptByte(); }
1051 virtual int readVar(uint var);
1052 virtual void writeVar(uint var,
int value);
1054 virtual void resetSentence() {}
1057 virtual void beginCutscene(
int *args);
1058 virtual void endCutscene();
1059 void abortCutscene();
1060 void beginOverride();
1063 void copyScriptString(byte *dst);
1064 int resStrLen(
const byte *src);
1065 void doSentence(
int c,
int b,
int a);
1069 uint32 _fileOffset = 0;
1076 ScummFile *instantiateScummFile(
bool indexPAKFiles =
true);
1079 int _resourceHeaderSize = 8;
1080 byte _resourceMapper[128];
1081 const byte *_resourceLastSearchBuf;
1082 uint32 _resourceLastSearchSize;
1084 virtual void allocateArrays();
1085 void openRoom(
int room);
1087 void deleteRoomOffsets();
1088 virtual void readRoomsOffsets();
1089 void askForDisk(
const Common::Path &filename,
int disknum);
1090 bool openResourceFile(
const Common::Path &filename, byte encByte);
1092 void loadPtrToResource(
ResType type, ResId idx,
const byte *ptr);
1093 virtual int readResTypeList(
ResType type);
1096 int loadResource(
ResType type, ResId idx);
1098 int getResourceRoomNr(
ResType type, ResId idx);
1099 virtual uint32 getResourceRoomOffset(
ResType type, ResId idx);
1102 int getResourceSize(
ResType type, ResId idx);
1103 byte *getResourceAddress(
ResType type, ResId idx);
1104 virtual byte *getStringAddress(ResId idx);
1105 byte *getStringAddressVar(
int i);
1106 void ensureResourceLoaded(
ResType type, ResId idx);
1113 int readSoundResource(ResId idx);
1114 int readSoundResourceSmallHeader(ResId idx);
1115 bool isResourceInUse(
ResType type, ResId idx)
const;
1117 virtual void setupRoomSubBlocks();
1118 virtual void resetRoomSubBlocks();
1120 virtual void clearRoomObjects();
1121 virtual void resetRoomObjects();
1122 virtual void resetRoomObject(
ObjectData *od,
const byte *room,
const byte *searchptr = NULL);
1124 virtual void readArrayFromIndexFile();
1125 virtual void readMAXS(
int blockSize) = 0;
1126 virtual void readGlobalObjects();
1127 virtual void readIndexFile();
1128 virtual void readIndexBlock(uint32 block, uint32 itemsize);
1129 virtual void loadCharset(
int i);
1130 void nukeCharset(
int i);
1132 int _lastLoadedRoom = 0;
1134 const byte *findResourceData(uint32 tag,
const byte *ptr);
1135 const byte *findResource(uint32 tag,
const byte *ptr);
1136 void applyWorkaroundIfNeeded(
ResType type,
int idx);
1137 bool verifyMI2MacBootScript();
1138 bool verifyMI2MacBootScript(byte *buf,
int size);
1139 bool tryPatchMI1CannibalScript(byte *buf,
int size);
1141 int getResourceDataSize(
const byte *ptr)
const;
1142 void dumpResource(
const char *tag,
int index,
const byte *ptr,
int length = -1);
1146 byte OF_OWNER_ROOM = 0;
1147 int getInventorySlot();
1148 int findInventory(
int owner,
int index);
1149 int getInventoryCount(
int owner);
1152 byte *_objectOwnerTable =
nullptr, *_objectRoomTable =
nullptr, *_objectStateTable =
nullptr;
1153 int _numObjectsInRoom = 0;
1156 uint32 *_classData =
nullptr;
1159 void markObjectRectAsDirty(
int obj);
1160 virtual void loadFlObject(uint
object, uint room);
1161 void nukeFlObjects(
int min,
int max);
1162 int findFlObjectSlot();
1163 int findLocalObjectSlot();
1164 void addObjectToInventory(uint obj, uint room);
1165 void updateObjectStates();
1167 bool getClass(
int obj,
int cls)
const;
1169 void putClass(
int obj,
int cls,
bool set);
1170 int getState(
int obj);
1171 void putState(
int obj,
int state);
1172 void setObjectState(
int obj,
int state,
int x,
int y);
1173 int getOwner(
int obj)
const;
1174 void putOwner(
int obj,
int owner);
1175 void setOwnerOf(
int obj,
int owner);
1176 void clearOwnerOf(
int obj);
1177 int getObjectRoom(
int obj)
const;
1178 virtual bool objIsActor(
int obj);
1179 virtual int objToActor(
int obj);
1180 virtual int actorToObj(
int actor);
1181 int getObjX(
int obj);
1182 int getObjY(
int obj);
1183 void getObjectWidth(
int object,
int &width) {
int x, y, dir; getObjectXYPos(
object, x, y, dir, width); }
1184 void getObjectXYPos(
int object,
int &x,
int &y) {
int dir, width; getObjectXYPos(
object, x, y, dir, width); }
1185 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir) {
int width; getObjectXYPos(
object, x, y, dir, width); }
1186 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir,
int &width);
1187 int getObjOldDir(
int obj);
1188 int getObjNewDir(
int obj);
1189 int getObjectIndex(
int object)
const;
1190 int getObjectImageCount(
int object);
1191 int whereIsObject(
int object)
const;
1192 int findObject(
int x,
int y);
1193 void findObjectInRoom(
FindObjectInRoom *fo, byte findWhat, uint
object, uint room);
1195 int getObjectOrActorWidth(
int object,
int &width);
1196 int getObjectOrActorXY(
int object,
int &x,
int &y);
1197 int getDist(
int x,
int y,
int x2,
int y2);
1200 int getObjActToObjActDist(
int a,
int b);
1201 const byte *getObjOrActorName(
int obj);
1202 void setObjectName(
int obj);
1204 void addObjectToDrawQue(
int object);
1205 void removeObjectFromDrawQue(
int object);
1206 void clearDrawObjectQueue();
1207 void processDrawQue();
1209 virtual void clearDrawQueues();
1211 uint32 getOBCDOffs(
int object)
const;
1212 byte *getOBCDFromObject(
int obj,
bool v0CheckInventory =
true);
1213 const byte *getOBIMFromObjectData(
const ObjectData &od);
1214 const byte *getObjectImage(
const byte *ptr,
int state);
1215 virtual int getObjectIdFromOBIM(
const byte *obim);
1219 uint16 _verbMouseOver = 0;
1221 uint16 _userState = 0;
1223 virtual void handleMouseOver(
bool updateInventory);
1224 virtual void redrawVerbs();
1225 virtual void checkExecVerbs();
1227 void verbMouseOver(
int verb);
1228 int findVerbAtPos(
int x,
int y)
const;
1229 virtual void drawVerb(
int verb,
int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT);
1230 virtual void runInputScript(
int clickArea,
int val,
int mode);
1231 void restoreVerbBG(
int verb);
1232 void drawVerbBitmap(
int verb,
int x,
int y);
1233 int getVerbSlot(
int id,
int mode)
const;
1234 void killVerb(
int slot);
1235 void setVerbObject(uint room, uint
object, uint verb);
1238 bool isValidActor(
int id)
const;
1241 Actor *derefActor(
int id,
const char *errmsg = 0)
const;
1242 Actor *derefActorSafe(
int id,
const char *errmsg)
const;
1246 void playActorSounds();
1247 void redrawAllActors();
1248 virtual void setActorRedrawFlags();
1251 void resetV1ActorTalkColor();
1252 virtual void resetActorBgs();
1253 virtual void processActors();
1254 void processUpperActors();
1255 virtual int getActorFromPos(
int x,
int y);
1259 byte _actorToPrintStrFor = 0, _V1TalkingActor = 0;
1260 int _sentenceNum = 0;
1264 int16 _talkDelay = 0;
1265 int _NES_lastTalkingActor = 0;
1266 int _NES_talkColor = 0;
1268 virtual void actorTalk(
const byte *msg);
1270 int getTalkingActor();
1271 void setTalkingActor(
int variable);
1274 bool isCostumeInUse(
int i)
const;
1278 uint16 _screenB = 0, _screenH = 0;
1280 int _roomHeight = 0, _roomWidth = 0;
1281 int _screenHeight = 0, _screenWidth = 0;
1284 bool _cameraIsFrozen =
false;
1286 int _screenStartStrip = 0, _screenEndStrip = 0;
1288 bool _forceBannerVirtScreen =
false;
1299 bool _useMacScreenCorrectHeight =
true;
1300 int _macScreenDrawOffset = 20;
1303 uint8 _bytesPerPixel = 1;
1308 uint8 _colorUsedByCycle[256];
1311 uint32 _ENCD_offs = 0, _EXCD_offs = 0;
1312 uint32 _CLUT_offs = 0, _EPAL_offs = 0;
1313 uint32 _IM00_offs = 0, _PALS_offs = 0;
1316 bool _fullRedraw =
false, _bgNeedsRedraw =
false;
1317 bool _screenEffectFlag =
false, _completeScreenRedraw =
false;
1318 bool _disableFadeInEffect =
false;
1321 int hotspotX, hotspotY, width, height;
1322 byte animate, animateIndex;
1328 byte _grabbedCursor[16384];
1329 byte _macGrabbedCursor[16384 * 4];
1330 byte _currentCursor = 0;
1332 byte _newEffect = 0, _switchRoomEffect2 = 0, _switchRoomEffect = 0;
1333 bool _doEffect =
false;
1335 bool _snapScroll =
false;
1337 virtual void setBuiltinCursor(
int index) {}
1339 bool isLightOn()
const;
1341 virtual int getCurrentLights()
const;
1344 void initScreens(
int b,
int h);
1345 void initVirtScreen(
VirtScreenNumber slot,
int top,
int width,
int height,
bool twobufs,
bool scrollable);
1346 void initBGBuffers(
int height);
1347 void initCycl(
const byte *ptr);
1349 void decodeNESBaseTiles();
1351 void drawObject(
int obj,
int scrollType);
1352 void drawRoomObjects(
int arg);
1353 void drawRoomObject(
int i,
int arg);
1354 void drawBox(
int x,
int y,
int x2,
int y2,
int color);
1355 void drawLine(
int x1,
int y1,
int x2,
int y2,
int color);
1356 void drawPixel(
VirtScreen *vs,
int x,
int y, int16 color,
bool useBackbuffer =
false);
1358 void moveScreen(
int dx,
int dy,
int height);
1360 void restoreBackground(
Common::Rect rect, byte backcolor = 0);
1361 void redrawBGStrip(
int start,
int num);
1362 virtual void redrawBGAreas();
1365 void setCameraAtEx(
int at);
1366 virtual void setCameraAt(
int pos_x,
int pos_y);
1367 virtual void setCameraFollows(
Actor *a,
bool setCamera =
false);
1368 virtual void moveCamera();
1369 virtual void panCameraTo(
int x,
int y);
1371 void actorFollowCamera(
int act);
1373 const byte *getPalettePtr(
int palindex,
int room);
1375 void setPaletteFromTable(
const byte *ptr,
int numcolor,
int firstIndex = 0);
1376 void resetPalette(
bool isBootUp =
false);
1378 void setCurrentPalette(
int pal);
1379 void setRoomPalette(
int pal,
int room);
1380 void setPCEPaletteFromPtr(
const byte *ptr);
1381 void setAmigaPaletteFromPtr(
const byte *ptr);
1382 virtual void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1383 void setV1ColorTable(
int renderMode);
1385 virtual void setPalColor(
int index,
int r,
int g,
int b);
1386 void setDirtyColors(
int min,
int max);
1387 const byte *findPalInPals(
const byte *pal,
int index);
1388 void swapPalColors(
int a,
int b);
1389 virtual void copyPalColor(
int dst,
int src);
1390 void cyclePalette();
1391 void stopCycle(
int i);
1392 virtual void palManipulateInit(
int resID,
int start,
int end,
int time);
1393 void palManipulate();
1394 uint32 findClosestPaletteColor(byte *palette,
int paletteLength, byte r, byte g, byte b);
1395 void applyGrayscaleToPaletteRange(
int min,
int max);
1396 bool haveToApplyMonkey1PaletteFix();
1399 uint8 *getHEPaletteSlot(uint16 palSlot);
1400 uint16 get16BitColor(uint8 r, uint8 g, uint8 b);
1401 uint32 getPaletteColorFromRGB(byte *palette, byte r, byte g, byte b);
1402 uint32 getPackedRGBColorFromPalette(byte *palette, uint32 color);
1403 void fetchBlackAndWhite(uint32 &black, uint32 &white, byte *palette,
int paletteEntries);
1404 int remapPaletteColor(
int r,
int g,
int b,
int threshold);
1405 void readPCEPalette(
const byte **ptr, byte **dest,
int numEntries);
1406 void colorPCEToRGB(uint16 color, byte *r, byte *g, byte *b);
1407 void setPCETextPalette(uint8 color);
1409 void moveMemInPalRes(
int start,
int end, byte direction);
1410 void setShadowPalette(
int slot,
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1411 void setShadowPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor,
int start,
int end);
1412 virtual void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1415 void markRectAsDirty(
VirtScreenNumber virt,
int left,
int right,
int top,
int bottom,
int dirtybit = 0);
1417 markRectAsDirty(virt, rect.
left, rect.
right, rect.top, rect.bottom, dirtybit);
1421 byte *_compositeBuf;
1422 byte *_hercCGAScaleBuf =
nullptr;
1423 bool _enableEGADithering =
false;
1424 bool _supportsEGADithering =
false;
1425 bool _enableSegaShadowMode =
false;
1427 virtual void drawDirtyScreenParts();
1429 void drawStripToScreen(
VirtScreen *vs,
int x,
int width,
int top,
int bottom);
1431 void mac_markScreenAsDirty(
int x,
int y,
int w,
int h);
1432 void mac_drawStripToScreen(
VirtScreen *vs,
int top,
int x,
int y,
int width,
int height);
1433 void mac_drawIndy3TextBox();
1434 void mac_undrawIndy3TextBox();
1435 void mac_undrawIndy3CreditsText();
1436 void mac_drawBufferToScreen(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1437 void mac_updateCompositeBuffer(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1438 void mac_blitDoubleResImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1439 void mac_applyDoubleResToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch);
1440 void mac_blitEPXImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1441 void mac_applyEPXToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch,
int xOffset,
int yOffset,
int bufferWidth,
int bufferHeight);
1442 void mac_scaleCursor(byte *&outCursor,
int &outHotspotX,
int &outHotspotY,
int &outWidth,
int &outHeight);
1443 void mac_toggleSmoothing();
1445 Common::KeyState mac_showOldStyleBannerAndPause(
const char *msg, int32 waitTime);
1447 const byte *postProcessDOSGraphics(
VirtScreen *vs,
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1448 const byte *ditherVGAtoEGA(
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1452 byte *getMaskBuffer(
int x,
int y,
int z);
1455 void fadeIn(
int effect);
1456 void fadeOut(
int effect);
1458 void dissolveEffectSelector();
1459 void transitionEffect(
int a);
1460 void dissolveEffect(
int width,
int height);
1461 void scrollEffect(
int dir);
1463 void updateScreenShakeEffect();
1466 double getTimerFrequency();
1467 double getAmigaMusicTimerFrequency();
1470 bool _shakeEnabled =
false;
1471 bool _shakeTempSavedState =
false;
1472 uint _shakeFrame = 0;
1473 uint32 _shakeNextTick = 0;
1474 uint32 _shakeTickCounter = 0;
1475 double _shakeTimerRate;
1476 double _timerFrequency;
1478 void setShake(
int mode);
1480 int _drawObjectQueNr = 0;
1481 byte _drawObjectQue[200];
1494 uint32 gfxUsageBits[410 * 3];
1496 void upgradeGfxUsageBits();
1497 void setGfxUsageBit(
int strip,
int bit);
1498 void clearGfxUsageBit(
int strip,
int bit);
1501 bool testGfxUsageBit(
int strip,
int bit) {
1502 assert(strip >= 0 && strip <
ARRAYSIZE(gfxUsageBits) / 3);
1503 assert(1 <= bit && bit <= 96);
1505 return (gfxUsageBits[3 * strip + bit / 32] & (1 << (bit % 32))) != 0;
1508 bool testGfxAnyUsageBits(
int strip);
1509 bool testGfxObjectUsageBits(
int strip);
1510 bool testGfxOtherUsageBits(
int strip,
int bit);
1513 byte _roomPalette[256];
1514 byte *_shadowPalette =
nullptr;
1515 bool _skipDrawObject = 0;
1517 int _soundEnabled = 0;
1520 byte _HEV7ActorPalette[256];
1521 uint8 *_hePalettes =
nullptr;
1522 uint16 _hePaletteSlot = 0;
1523 uint16 *_16BitPalette =
nullptr;
1526 byte *_verbPalette =
nullptr;
1531 int _shadowPaletteSize = 0;
1532 byte _currentPalette[3 * 256];
1533 byte _darkenPalette[3 * 256];
1534 int _paletteChangedCounter = 1;
1536 int _palDirtyMin = 0, _palDirtyMax = 0;
1538 byte _palManipStart = 0, _palManipEnd = 0;
1539 uint16 _palManipCounter = 0;
1540 byte *_palManipPalette =
nullptr;
1541 byte *_palManipIntermediatePal =
nullptr;
1543 bool _haveActorSpeechMsg =
false;
1544 bool _useTalkAnims =
false;
1545 uint16 _defaultTextSpeed = 0;
1547 bool _native_mt32 =
false;
1548 bool _copyProtection =
false;
1549 bool _shadowPalRemap =
false;
1552 uint16 _amigaFirstUsedColor = 0;
1553 byte _amigaPalette[3 * 64];
1554 void amigaPaletteFindFirstUsedColor();
1555 void mapRoomPalette(
int idx);
1556 int remapRoomPaletteColor(
int r,
int g,
int b);
1557 void mapVerbPalette(
int idx);
1558 int remapVerbPaletteColor(
int r,
int g,
int b);
1561 byte *_egaColorMap[2];
1564 uint16 _extraBoxFlags[65];
1567 byte *getBoxMatrixBaseAddr();
1568 byte *getBoxConnectionBase(
int box);
1570 int getNextBox(byte from, byte to);
1572 void setBoxFlags(
int box,
int val);
1573 void setBoxScale(
int box,
int b);
1575 bool checkXYInBoxBounds(
int box,
int x,
int y);
1577 BoxCoords getBoxCoordinates(
int boxnum);
1579 byte getMaskFromBox(
int box);
1580 Box *getBoxBaseAddr(
int box);
1581 byte getBoxFlags(
int box);
1582 int getBoxScale(
int box);
1584 int getScale(
int box,
int x,
int y);
1585 int getScaleFromSlot(
int slot,
int x,
int y);
1595 void setScaleSlot(
int slot,
int x1,
int y1,
int scale1,
int x2,
int y2,
int scale2);
1596 void setBoxScaleSlot(
int box,
int slot);
1597 void convertScaleTableToScaleSlot(
int slot);
1599 void calcItineraryMatrix(byte *itineraryMatrix,
int num);
1600 void createBoxMatrix();
1601 virtual bool areBoxesNeighbors(
int i,
int j);
1606 byte _charsetColorMap[16];
1613 int _textSurfaceMultiplier = 0;
1615 bool _isModernMacVersion =
false;
1616 bool _useGammaCorrection =
true;
1619 MacGui *_macGui =
nullptr;
1620 bool _useMacGraphicsSmoothing =
true;
1621 byte _completeScreenBuffer[320 * 200];
1624 byte _charsetColor = 0;
1625 byte _charsetData[23][16];
1627 int _charsetBufPos = 0;
1628 byte _charsetBuffer[512];
1630 bool _keepText =
false;
1633 int _nextLeft = 0, _nextTop = 0;
1638 bool _voiceNextString =
false;
1639 bool _checkPreviousSaid =
false;
1640 bool _voicePassHelpButtons =
false;
1641 int _previousVerb = -1;
1642 int _previousControl = -1;
1647 void restoreCharsetBg();
1648 void clearCharsetMask();
1649 void clearTextSurface();
1651 virtual void initCharset(
int charset);
1653 virtual void printString(
int m,
const byte *msg);
1655 virtual bool handleNextCharsetCode(
Actor *a,
int *c);
1656 virtual void drawSentence() {}
1657 virtual void displayDialog();
1658 int countNumberOfWaits();
1660 void drawString(
int a,
const byte *msg, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::QUEUE);
1661 virtual void fakeBidiString(byte *ltext,
bool ignoreVerb,
int ltextSize)
const;
1662 void wrapSegaCDText();
1663 void debugMessage(
const byte *msg);
1664 virtual void showMessageDialog(
const byte *msg);
1667 void sayText(
const Common::String &text, Common::TextToSpeechManager::Action action = Common::TextToSpeechManager::QUEUE)
const;
1668 void stopTextToSpeech()
const;
1669 void sayButtonText();
1672 virtual int convertMessageToString(
const byte *msg, byte *dst,
int dstSize);
1673 int convertIntMessage(byte *dst,
int dstSize,
int var);
1674 int convertVerbMessage(byte *dst,
int dstSize,
int var);
1675 int convertNameMessage(byte *dst,
int dstSize,
int var);
1676 int convertStringMessage(byte *dst,
int dstSize,
int var);
1682 virtual void translateText(
const byte *text, byte *trans_buff,
int transBufferSize);
1684 bool reverseIfNeeded(
const byte *text, byte *reverseBuf,
int reverseBufSize)
const;
1686 Common::CodePage getDialogCodePage()
const;
1689 bool _useCJKMode =
false;
1690 bool _useMultiFont =
false;
1691 int _numLoadedFont = 0;
1692 int _2byteShadow = 0;
1693 bool _force2ByteCharHeight =
false;
1695 int _2byteHeight = 0;
1696 int _2byteWidth = 0;
1698 byte _newLineCharacter = 0;
1699 byte *get2byteCharPtr(
int idx);
1701 bool isScummvmKorTarget();
1702 bool hasLocalizer();
1705 byte *_2byteFontPtr =
nullptr;
1706 byte *_2byteMultiFontPtr[20];
1707 int _2byteMultiHeight[20];
1708 int _2byteMultiWidth[20];
1709 int _2byteMultiShadow[20];
1712 struct TranslatedLine {
1713 uint32 originalTextOffset;
1714 uint32 translatedTextOffset;
1717 struct TranslationRange {
1721 TranslationRange(uint32 left_, uint32 right_) : left(left_), right(right_) {}
1722 TranslationRange() : left(0), right(0) {}
1725 struct TranslationRoom {
1729 bool _existLanguageFile =
false;
1730 bool _isRTL =
false;
1731 byte *_languageBuffer =
nullptr;
1732 int _numTranslatedLines = 0;
1733 TranslatedLine *_translatedLines =
nullptr;
1734 uint16 *_languageLineIndex =
nullptr;
1737 const byte *searchTranslatedLine(
const byte *text,
const TranslationRange &range,
bool useIndex);
1739 virtual void createTextRenderer(GlyphRenderer_v7 *gr) {}
1744 byte VAR_KEYPRESS = 0xFF;
1745 byte VAR_SYNC = 0xFF;
1746 byte VAR_EGO = 0xFF;
1747 byte VAR_CAMERA_POS_X = 0xFF;
1748 byte VAR_HAVE_MSG = 0xFF;
1749 byte VAR_ROOM = 0xFF;
1750 byte VAR_OVERRIDE = 0xFF;
1751 byte VAR_MACHINE_SPEED = 0xFF;
1753 byte VAR_NUM_ACTOR = 0xFF;
1754 byte VAR_CURRENT_LIGHTS = 0xFF;
1755 byte VAR_CURRENTDRIVE = 0xFF;
1756 byte VAR_CURRENTDISK = 0xFF;
1757 byte VAR_TMR_1 = 0xFF;
1758 byte VAR_TMR_2 = 0xFF;
1759 byte VAR_TMR_3 = 0xFF;
1760 byte VAR_MUSIC_TIMER = 0xFF;
1761 byte VAR_ACTOR_RANGE_MIN = 0xFF;
1762 byte VAR_ACTOR_RANGE_MAX = 0xFF;
1763 byte VAR_CAMERA_MIN_X = 0xFF;
1764 byte VAR_CAMERA_MAX_X = 0xFF;
1765 byte VAR_TIMER_NEXT = 0xFF;
1766 byte VAR_VIRT_MOUSE_X = 0xFF;
1767 byte VAR_VIRT_MOUSE_Y = 0xFF;
1768 byte VAR_ROOM_RESOURCE = 0xFF;
1769 byte VAR_LAST_SOUND = 0xFF;
1770 byte VAR_CUTSCENEEXIT_KEY = 0xFF;
1771 byte VAR_OPTIONS_KEY = 0xFF;
1772 byte VAR_TALK_ACTOR = 0xFF;
1773 byte VAR_CAMERA_FAST_X = 0xFF;
1774 byte VAR_SCROLL_SCRIPT = 0xFF;
1775 byte VAR_ENTRY_SCRIPT = 0xFF;
1776 byte VAR_ENTRY_SCRIPT2 = 0xFF;
1777 byte VAR_EXIT_SCRIPT = 0xFF;
1778 byte VAR_EXIT_SCRIPT2 = 0xFF;
1779 byte VAR_VERB_SCRIPT = 0xFF;
1780 byte VAR_SENTENCE_SCRIPT = 0xFF;
1781 byte VAR_INVENTORY_SCRIPT = 0xFF;
1782 byte VAR_CUTSCENE_START_SCRIPT = 0xFF;
1783 byte VAR_CUTSCENE_END_SCRIPT = 0xFF;
1784 byte VAR_CHARINC = 0xFF;
1785 byte VAR_WALKTO_OBJ = 0xFF;
1786 byte VAR_DEBUGMODE = 0xFF;
1787 byte VAR_HEAPSPACE = 0xFF;
1788 byte VAR_RESTART_KEY = 0xFF;
1789 byte VAR_PAUSE_KEY = 0xFF;
1790 byte VAR_MOUSE_X = 0xFF;
1791 byte VAR_MOUSE_Y = 0xFF;
1792 byte VAR_TIMER = 0xFF;
1793 byte VAR_TIMER_TOTAL = 0xFF;
1794 byte VAR_SOUNDCARD = 0xFF;
1795 byte VAR_VIDEOMODE = 0xFF;
1796 byte VAR_MAINMENU_KEY = 0xFF;
1797 byte VAR_FIXEDDISK = 0xFF;
1798 byte VAR_CURSORSTATE = 0xFF;
1799 byte VAR_USERPUT = 0xFF;
1800 byte VAR_SOUNDRESULT = 0xFF;
1801 byte VAR_TALKSTOP_KEY = 0xFF;
1802 byte VAR_FADE_DELAY = 0xFF;
1803 byte VAR_NOSUBTITLES = 0xFF;
1806 byte VAR_SOUNDPARAM = 0xFF;
1807 byte VAR_SOUNDPARAM2 = 0xFF;
1808 byte VAR_SOUNDPARAM3 = 0xFF;
1809 byte VAR_INPUTMODE = 0xFF;
1810 byte VAR_MEMORY_PERFORMANCE = 0xFF;
1811 byte VAR_VIDEO_PERFORMANCE = 0xFF;
1812 byte VAR_ROOM_FLAG = 0xFF;
1813 byte VAR_GAME_LOADED = 0xFF;
1814 byte VAR_NEW_ROOM = 0xFF;
1817 byte VAR_V5_TALK_STRING_Y = 0xFF;
1820 byte VAR_ROOM_WIDTH = 0xFF;
1821 byte VAR_ROOM_HEIGHT = 0xFF;
1822 byte VAR_SUBTITLES = 0xFF;
1823 byte VAR_V6_EMSSPACE = 0xFF;
1826 byte VAR_CAMERA_POS_Y = 0xFF;
1827 byte VAR_CAMERA_MIN_Y = 0xFF;
1828 byte VAR_CAMERA_MAX_Y = 0xFF;
1829 byte VAR_CAMERA_THRESHOLD_X = 0xFF;
1830 byte VAR_CAMERA_THRESHOLD_Y = 0xFF;
1831 byte VAR_CAMERA_SPEED_X = 0xFF;
1832 byte VAR_CAMERA_SPEED_Y = 0xFF;
1833 byte VAR_CAMERA_ACCEL_X = 0xFF;
1834 byte VAR_CAMERA_ACCEL_Y = 0xFF;
1835 byte VAR_CAMERA_DEST_X = 0xFF;
1836 byte VAR_CAMERA_DEST_Y = 0xFF;
1837 byte VAR_CAMERA_FOLLOWED_ACTOR = 0xFF;
1840 byte VAR_VERSION_KEY = 0xFF;
1841 byte VAR_DEFAULT_TALK_DELAY = 0xFF;
1842 byte VAR_CUSTOMSCALETABLE = 0xFF;
1843 byte VAR_BLAST_ABOVE_TEXT = 0xFF;
1844 byte VAR_VOICE_MODE = 0xFF;
1845 byte VAR_MUSIC_BUNDLE_LOADED = 0xFF;
1846 byte VAR_VOICE_BUNDLE_LOADED = 0xFF;
1848 byte VAR_LEFTBTN_DOWN = 0xFF;
1849 byte VAR_RIGHTBTN_DOWN = 0xFF;
1850 byte VAR_LEFTBTN_HOLD = 0xFF;
1851 byte VAR_RIGHTBTN_HOLD = 0xFF;
1852 byte VAR_PRE_SAVELOAD_SCRIPT = 0xFF;
1853 byte VAR_POST_SAVELOAD_SCRIPT = 0xFF;
1854 byte VAR_SAVELOAD_PAGE = 0xFF;
1855 byte VAR_OBJECT_LABEL_FLAG = 0xFF;
1858 byte VAR_CHARSET_MASK = 0xFF;
1861 byte VAR_V6_SOUNDMODE = 0xFF;
1864 byte VAR_CHARCOUNT = 0xFF;
1865 byte VAR_VERB_ALLOWED = 0xFF;
1866 byte VAR_ACTIVE_VERB = 0xFF;
1867 byte VAR_ACTIVE_OBJECT1 = 0xFF;
1868 byte VAR_ACTIVE_OBJECT2 = 0xFF;
1871 byte VAR_ALWAYS_REDRAW_ACTORS = 0xFF;
1872 byte VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
1874 byte VAR_SOUND_CHANNEL = 0xFF;
1875 byte VAR_TALK_CHANNEL = 0xFF;
1876 byte VAR_SOUND_TOKEN_OFFSET = 0xFF;
1877 byte VAR_START_DYN_SOUND_CHANNELS = 0xFF;
1878 byte VAR_SOUND_CALLBACK_SCRIPT = 0xFF;
1880 byte VAR_EARLY_TALKIE_CALLBACK = 0xFF;
1881 byte VAR_EARLY_CHAN_0_CALLBACK = 0xFF;
1882 byte VAR_EARLY_CHAN_1_CALLBACK = 0xFF;
1883 byte VAR_EARLY_CHAN_2_CALLBACK = 0xFF;
1884 byte VAR_EARLY_CHAN_3_CALLBACK = 0xFF;
1886 byte VAR_MAIN_SCRIPT = 0xFF;
1888 byte VAR_DEFAULT_SCRIPT_PRIORITY = 0xFF;
1889 byte VAR_LAST_SCRIPT_PRIORITY = 0xFF;
1891 byte VAR_QUIT_SCRIPT = 0xFF;
1892 byte VAR_ERROR_FLAG = 0xFF;
1893 byte VAR_OPERATION_FAILURE = 0xFF;
1895 byte VAR_COLOR_BLACK = 0xFF;
1898 byte VAR_NUM_GLOBAL_OBJS = 0xFF;
1900 byte VAR_LAST_FRAME_BURN_TIME = 0xFF;
1901 byte VAR_LAST_FRAME_SCUMM_TIME = 0xFF;
1903 byte VAR_WINDEX_RUNNING = 0xFF;
1905 #ifdef USE_RGB_COLOR 1907 Graphics::FontSJIS *_cjkFont =
nullptr;
1911 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE 1913 bool towns_isRectInStringBox(
int x1,
int y1,
int x2,
int y2);
1914 byte _townsPaletteFlags = 0;
1915 byte _townsCharsetColorMap[16];
1918 void towns_drawStripToScreen(
VirtScreen *vs,
int dstX,
int dstY,
int srcX,
int srcY,
int w,
int h);
1919 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col);
1920 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h);
1921 void towns_clearStrip(
int strip);
1922 #ifdef USE_RGB_COLOR 1923 void towns_setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1924 void towns_setTextPaletteFromPtr(
const byte *ptr);
1926 void towns_setupPalCycleField(
int x1,
int y1,
int x2,
int y2);
1927 void towns_processPalCycleField();
1928 void towns_resetPalCycleFields();
1929 void towns_restoreCharsetBg();
1930 void towns_scriptScrollEffect(
int dir);
1932 void requestScroll(
int dir);
1933 void scrollLeft() { requestScroll(-1); }
1934 void scrollRight() { requestScroll(1); }
1935 void towns_waitForScroll(
int waitForDirection,
int threshold = 0);
1936 void towns_updateGfx();
1939 int _numCyclRects = 0;
1940 int _scrollRequest = 0;
1941 int _scrollDeltaAdjust = 0;
1942 bool _scrollNeedDeltaAdjust = 0;
1943 int _refreshDuration[20];
1944 int _refreshArrayPos = 0;
1945 bool _refreshNeedCatchUp =
false;
1946 bool _enableSmoothScrolling =
false;
1947 bool _forceFMTownsHiResMode =
false;
1948 uint32 _scrollTimer = 0;
1949 uint32 _scrollDestOffset = 0;
1950 uint16 _scrollFeedStrips[3];
1954 byte _townsOverrideShadowColor = 0;
1955 byte _textPalette[48];
1956 byte _townsClearLayerFlag = 1;
1957 byte _townsActiveLayerFlags = 3;
1958 static const uint8 _townsLayer2Mask[];
1962 void scrollLeft() { redrawBGStrip(_gdi->_numStrips - 1, 1); }
1963 void scrollRight() { redrawBGStrip(0, 1); }
1964 void towns_updateGfx() {}
1965 void towns_waitForScroll(
int waitForDirection,
int threshold = 0) {}
1966 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col) {}
1967 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h) {}
1968 #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:1072
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:1612
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:992
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