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 LOOM_STEAM_CDDA_RATE 240.0 341 #define AMIGA_NTSC_VBLANK_RATE 240.0 342 #define AMIGA_PAL_VBLANK_RATE 200.0 348 #define GAME_PROPER_SAVE 201 349 #define GAME_FAILED_SAVE 202 350 #define GAME_PROPER_LOAD 203 351 #define GAME_FAILED_LOAD 204 357 #define GUI_PAGE_MAIN 0 358 #define GUI_PAGE_SAVE 1 359 #define GUI_PAGE_LOAD 2 360 #define GUI_PAGE_RESTART 3 // Sega CD 361 #define GUI_PAGE_CODE_CONFIRM 4 // Sega CD 362 #define GUI_PAGE_INVALID_CODE 5 // Sega CD 364 #define GUI_CTRL_FIRST_SG 1 365 #define GUI_CTRL_LAST_SG 9 366 #define GUI_CTRL_SAVE_BUTTON 10 367 #define GUI_CTRL_LOAD_BUTTON 11 368 #define GUI_CTRL_PLAY_BUTTON 12 369 #define GUI_CTRL_QUIT_BUTTON 13 370 #define GUI_CTRL_OK_BUTTON 14 371 #define GUI_CTRL_CANCEL_BUTTON 15 372 #define GUI_CTRL_ARROW_UP_BUTTON 16 373 #define GUI_CTRL_ARROW_DOWN_BUTTON 17 374 #define GUI_CTRL_PATH_BUTTON 18 375 #define GUI_CTRL_MUSIC_SLIDER 19 376 #define GUI_CTRL_SPEECH_SLIDER 20 377 #define GUI_CTRL_SFX_SLIDER 21 378 #define GUI_CTRL_TEXT_SPEED_SLIDER 22 379 #define GUI_CTRL_DISPLAY_TEXT_CHECKBOX 23 380 #define GUI_CTRL_SPOOLED_MUSIC_CHECKBOX 24 381 #define GUI_CTRL_OUTER_BOX 26 382 #define GUI_CTRL_INNER_BOX 27 385 #define GUI_CTRL_NUMPAD_1 1 386 #define GUI_CTRL_NUMPAD_2 2 387 #define GUI_CTRL_NUMPAD_3 3 388 #define GUI_CTRL_NUMPAD_4 4 389 #define GUI_CTRL_NUMPAD_5 5 390 #define GUI_CTRL_NUMPAD_6 6 391 #define GUI_CTRL_NUMPAD_7 7 392 #define GUI_CTRL_NUMPAD_8 8 393 #define GUI_CTRL_NUMPAD_9 9 394 #define GUI_CTRL_NUMPAD_0 10 395 #define GUI_CTRL_RESTART_BUTTON 13 396 #define GUI_CTRL_ARROW_LEFT_BUTTON 16 397 #define GUI_CTRL_ARROW_RIGHT_BUTTON 17 398 #define GUI_CTRL_NUMPAD_BACK 23 403 gsTextSpeedSlider = 2,
414 gsGameNotLoaded = 13,
418 gsSelectLoadPrompt = 17,
419 gsReplacePrompt = 18,
424 gsTextDisplayOnly = 24,
427 gsMusicVolumeSlider = 27,
428 gsVoiceVolumeSlider = 28,
429 gsSfxVolumeSlider = 29,
440 gsInsertSaveDisk = 40,
443 gsRecalJoystick = 43,
456 gsCurrentPasscode = 56,
457 gsEnterPasscode = 57,
458 gsConfirmPasscode = 58,
459 gsInvalidPasscode = 59,
476 int highlightedTextColor;
477 int highlightedFillColor;
483 bool doubleLinesFlag;
488 kScummActionInsaneDownLeft,
489 kScummActionInsaneDown,
490 kScummActionInsaneDownRight,
491 kScummActionInsaneLeft,
492 kScummActionInsaneRight,
493 kScummActionInsaneUpLeft,
494 kScummActionInsaneUp,
495 kScummActionInsaneUpRight,
496 kScummActionInsaneAttack,
497 kScummActionInsaneSwitch,
498 kScummActionInsaneCheat,
503 extern const char *
const insaneKeymapId;
512 friend class CharsetRendererTownsClassic;
519 friend class LogicHEBasketball;
525 IMuse *_imuse =
nullptr;
526 IMuseDigital *_imuseDigital =
nullptr;
529 Sound *_sound =
nullptr;
546 int _insideCreateResource = 0;
548 bool _useOriginalGUI =
true;
549 bool _enableAudioOverride =
false;
550 bool _enableCOMISong =
false;
551 bool _isAmigaPALSystem =
false;
552 bool _quitFromScriptCmd =
false;
553 bool _isHE995 =
false;
554 bool _enableHECompetitiveOnlineMods =
false;
561 bool _needsSoundUnpause =
false;
579 void errorString(
const char *buf_input,
char *buf_output,
int buf_output_size)
override;
581 bool gameSupportsQuitDialogOverride()
const;
582 void syncSoundSettings()
override;
589 void pauseEngineIntern(
bool pause)
override;
592 virtual void setupScumm(
const Common::Path &macResourceFile);
593 virtual void resetScumm();
595 virtual void setupScummVars();
596 virtual void resetScummVars();
597 void setVideoModeVarToCurrentConfig();
598 void setSoundCardVarToCurrentConfig();
600 void setupCharsetRenderer(
const Common::Path &macFontFile);
601 void setupCostumeRenderer();
603 virtual void loadLanguageBundle();
606 void setupMusic(
int midi);
607 void setTalkSpeed(
int talkspeed);
611 virtual void scummLoop(
int delta);
612 virtual void scummLoop_updateScummVars();
613 virtual void scummLoop_handleSaveLoad();
614 virtual void scummLoop_handleDrawing();
615 virtual void scummLoop_handleActors() = 0;
616 virtual void scummLoop_handleEffects();
617 virtual void scummLoop_handleSound();
619 virtual void runBootscript();
621 virtual void terminateSaveMenuScript() {};
625 void beginTextInput();
632 void waitForTimer(
int quarterFrames,
bool freezeMacGui =
false);
633 uint32 _lastWaitTime;
635 void setTimerAndShakeFrequency();
642 uint32 getIntegralTime(
double fMsecs);
643 double _msecFractParts = 0.0;
645 virtual void processInput();
647 virtual void clearClickedStatus();
650 virtual void updateCursor();
651 virtual void animateCursor() {}
652 virtual void updatePalette();
653 virtual void setDefaultCursor() {};
654 virtual void setCursorTransparency(
int a) {};
655 virtual void resetCursors() {}
656 virtual void setCursorHotspot(
int x,
int y) {}
657 virtual void setCursorFromBuffer(
const byte *ptr,
int width,
int height,
int pitch,
bool preventScale =
false) {}
662 bool isUsingOriginalGUI()
const;
663 bool isMessageBannerActive();
665 bool _isIndy4Jap =
false;
668 Dialog *_pauseDialog =
nullptr;
669 Dialog *_messageDialog =
nullptr;
670 Dialog *_versionDialog =
nullptr;
672 void confirmExitDialog();
673 void confirmRestartDialog();
676 void versionDialog();
679 int32 _bannerColors[50];
680 byte *_bannerMem =
nullptr;
681 uint32 _bannerMemSize = 0;
682 int _bannerSaveYStart = 0;
684 bool _messageBannerActive =
false;
685 bool _comiQuitMenuIsOpen =
false;
686 bool _closeBannerAndQueryQuitFlag =
false;
689 byte *_textSurfBannerMem =
nullptr;
690 uint32 _textSurfBannerMemSize = 0;
695 const char _emptyMsg[1] = {
'\0'};
696 const char _uncheckedBox[2] = {
' ',
'\0'};
697 const char _checkedBox[2] = {
'x',
'\0'};
698 const char _arrowUp[2] = {
'\x18',
'\0'};
699 const char _arrowDown[2] = {
'\x19',
'\0'};
700 const char _arrowLeft[2] = {
'\x3c',
'\0'};
701 const char _arrowRight[2] = {
'\x3d',
'\0'};
705 int _mainMenuSavegameLabel = 1;
706 int _curDisplayedSaveSlotPage = 0;
707 int _firstSaveStateOfList = 0;
708 bool _mainMenuIsActive =
false;
709 bool _quitByGUIPrompt =
false;
710 char _mainMenuMusicSlider[17];
711 char _mainMenuSpeechSlider[17];
712 char _mainMenuSfxSlider[17];
713 char _mainMenuTextSpeedSlider[17];
714 char _mainMenuSegaCDPasscode[5];
715 int _spooledMusicIsToBeEnabled = 1;
716 int _saveScriptParam = 0;
717 int _guiCursorAnimCounter = 0;
718 int _v5VoiceMode = 0;
721 int _internalSpeakerSoundsAreOn = 1;
722 int _guiMouseFlag = 1;
723 int _guiJoystickFlag = 1;
725 bool _mixerMutedByGUI =
false;
728 byte *_tempTextSurface =
nullptr;
729 byte *_tempMainSurface =
nullptr;
730 byte *_tempVerbSurface =
nullptr;
731 bool _postGUICharMask =
false;
734 byte *_curGrabbedCursor =
nullptr;
735 int8 _oldCursorState = 0;
736 int _curCursorState = 0;
737 int _curCursorWidth = 0;
738 int _curCursorHeight = 0;
739 int _curCursorHotspotX = 0;
740 int _curCursorHotspotY = 0;
742 virtual void setSnailCursor() {}
745 Common::KeyState showBannerAndPause(
int bannerId, int32 waitTime,
const char *msg, ...);
746 Common::KeyState showOldStyleBannerAndPause(
const char *msg,
int color, int32 waitTime);
747 Common::KeyState printMessageAndPause(
const char *msg,
int color, int32 waitTime,
bool drawOnSentenceLine);
750 void setBannerColors(
int bannerId, byte r, byte g, byte b);
751 virtual int getBannerColor(
int bannerId);
752 void setUpInternalGUIControl(
int id,
int normalFillColor,
int normalTextColor,
753 int topLineColor,
int bottomLineColor,
int leftLineColor,
int rightLineColor,
754 int highlightedTextColor,
int highlightedFillColor,
755 int anchorPointX,
int anchorPointY,
int x,
int y,
const char *label,
bool centerFlag,
bool unknownFlag);
756 void drawInternalGUIControl(
int id,
bool highlightColor);
757 int getInternalGUIControlFromCoordinates(
int x,
int y);
758 virtual bool isSmushActive() {
return false; }
759 virtual bool isInsaneActive() {
return false; }
761 virtual void queryQuit(
bool returnToLauncher);
762 virtual void queryRestart();
763 virtual const char *getGUIString(
int stringId);
764 void waitForBannerInput(int32 waitTime,
Common::KeyState &ks,
bool &leftBtnClicked,
bool &rightBtnClicked,
bool handleMouseWheel =
false);
765 virtual int getGUIStringHeight(
const char *str);
766 virtual int getGUIStringWidth(
const char *str);
767 virtual void drawGUIText(
const char *buttonString,
Common::Rect *clipRect,
int textXPos,
int textYPos,
int textColor,
bool centerFlag);
768 void getSliderString(
int stringId,
int value,
char *sliderString,
int size);
769 virtual int getMusicVolume();
770 virtual int getSpeechVolume();
771 virtual int getSFXVolume();
772 virtual void setMusicVolume(
int volume);
773 virtual void setSpeechVolume(
int volume);
774 virtual void setSFXVolume(
int volume);
775 virtual void toggleVoiceMode();
776 virtual void handleLoadDuringSmush() {}
777 virtual void setSkipVideo(
int value) {}
780 virtual void setUpMainMenuControls();
781 void setUpMainMenuControlsSegaCD();
782 void setUpMainMenuControlsIndy4Jap();
783 void drawMainMenuControls();
784 void drawMainMenuControlsSegaCD();
785 void updateMainMenuControls();
786 void updateMainMenuControlsSegaCD();
787 void drawMainMenuTitle(
const char *title);
788 bool executeMainMenuOperation(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
789 bool executeMainMenuOperationSegaCD(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
790 bool shouldHighlightLabelAndWait(
int clickedControl);
791 void fillSavegameLabels();
792 bool canWriteGame(
int slotId);
793 bool userWriteLabelRoutine(
Common::KeyState &ks,
bool &leftMsClicked,
bool &rightMsClicked);
794 void saveCursorPreMenu();
795 void restoreCursorPostMenu();
796 void saveSurfacesPreGUI();
797 void restoreSurfacesPostGUI();
798 void showDraftsInventory();
799 void setUpDraftsInventory();
800 void drawDraftsInventory();
803 char displayMessage(
const char *altButton, MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(3, 4);
804 bool displayMessageYesNo(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
810 Actor **_actors =
nullptr;
811 Actor **_sortedActors =
nullptr;
813 byte *_arraySlot =
nullptr;
814 uint16 *_inventory =
nullptr;
815 uint16 *_newNames =
nullptr;
819 #define VAR(x) scummVar(x, #x, __FILE__, __LINE__) 820 int32& scummVar(byte var,
const char *varName,
const char *file,
int line) {
822 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
824 return _scummVars[var];
826 int32 scummVar(byte var,
const char *varName,
const char *file,
int line)
const {
828 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
830 return _scummVars[var];
835 int32 *_roomVars =
nullptr;
836 int32 *_scummVars =
nullptr;
837 byte *_bitVars =
nullptr;
840 int _numVariables = 0;
841 int _numBitVariables = 0;
842 int _numLocalObjects = 0;
843 int _numGlobalObjects = 0;
846 int _numFlObject = 0;
847 int _numInventory = 0;
848 int _numNewNames = 0;
849 int _numGlobalScripts = 0;
850 int _numRoomVariables = 0;
851 int _numPalettes = 0;
858 int _numLocalScripts = 60, _numImages = 0, _numRooms = 0, _numScripts = 0, _numSounds = 0;
859 int _numCostumes = 0;
860 int32 _numCharsets = 0;
865 int _NESCostumeSet = 0;
866 void NES_loadCostumeSet(
int n);
867 byte *_NEScostdesc =
nullptr, *_NEScostlens =
nullptr, *_NEScostoffs =
nullptr, *_NEScostdata =
nullptr;
868 byte _NESPatTable[2][4096];
869 byte _NESPalette[2][16];
870 byte _NESBaseTiles = 0;
872 int _NESStartStrip = 0;
875 int _curPalIndex = 0;
878 byte _currentRoom = 0;
879 int _roomResource = 0;
880 bool _egoPositioned =
false;
884 virtual Common::Path generateFilename(
const int room)
const;
888 bool _keyDownMap[512];
889 bool _actionMap[kScummActionCount];
894 uint16 _mouseAndKeyboardStat = 0;
895 byte _leftBtnPressed = 0, _rightBtnPressed = 0;
897 int _mouseWheelFlag = 0;
899 bool _setupIsComplete =
false;
905 uint32 _lastInputScriptTime = 0;
911 bool _dumpScripts =
false;
912 bool _hexdumpScripts =
false;
913 bool _showStack =
false;
914 bool _debugMode =
false;
917 byte _saveLoadFlag = 0, _saveLoadSlot = 0;
918 uint32 _lastSaveTime = 0;
919 bool _saveTemporaryState =
false;
920 bool _pauseSoundsDuringSave =
true;
921 bool _loadFromLauncher =
false;
922 bool _videoModeChanged =
false;
928 bool loadState(
int slot,
bool compat);
935 virtual int checkSoundEngineSaveDataSize(
Serializer &s);
937 void copyHeapSaveGameToFile(
int slot,
const char *saveName);
938 bool changeSavegameName(
int slot,
char *newName);
943 return makeSavegameName(_targetName, slot, temporary);
946 int getKeyState(
int key);
947 int getActionState(ScummAction action);
953 void listSavegames(
bool *marks,
int num);
956 void requestLoad(
int slot);
959 bool canPauseSoundsDuringSave()
const {
return _pauseSoundsDuringSave; }
970 uint32 _localScriptOffsets[1024];
971 const byte *_scriptPointer =
nullptr;
972 const byte *_scriptOrgPointer =
nullptr;
973 const byte *
const *_lastCodePtr =
nullptr;
976 byte _currentScript = 0xFF;
977 int _scummStackPos = 0;
980 char _engineVersionString[50];
981 char _dataFileVersionString[50];
990 return _currentScript != 0xFF && vm.slot[_currentScript].number == script;
993 virtual void setupOpcodes() = 0;
994 void executeOpcode(byte i);
995 const char *getOpcodeDesc(byte i);
997 void initializeLocals(
int slot,
int *vars);
1000 void startScene(
int room,
Actor *a,
int b);
1004 void runScript(
int script,
bool freezeResistant,
bool recursive,
int *lvarptr,
int cycle = 0);
1005 void stopScript(
int script);
1006 void nukeArrays(byte scriptSlot);
1009 void runObjectScript(
int script,
int entry,
bool freezeResistant,
bool recursive,
int *vars,
int slot = -1,
int cycle = 0);
1010 void runScriptNested(
int script);
1011 void executeScript();
1012 void updateScriptPtr();
1013 virtual void runInventoryScript(
int i);
1014 virtual void runInventoryScriptEx(
int i);
1015 virtual void checkAndRunSentenceScript();
1016 void runExitScript();
1017 void runEntryScript();
1018 void runQuitScript();
1019 void runAllScripts();
1020 void freezeScripts(
int scr);
1021 void unfreezeScripts();
1023 bool isScriptInUse(
int script)
const;
1024 bool isRoomScriptRunning(
int script)
const;
1025 bool isScriptRunning(
int script)
const;
1027 void killAllScriptsExceptCurrent();
1028 void killScriptsAndResources();
1029 void decreaseScriptDelay(
int amount);
1031 void stopObjectCode();
1032 void stopObjectScript(
int script);
1034 void getScriptBaseAddress();
1035 void resetScriptPointer();
1036 int getVerbEntrypoint(
int obj,
int entry);
1038 void refreshScriptPointer();
1039 byte fetchScriptByte();
1040 virtual uint fetchScriptWord();
1041 virtual int fetchScriptWordSigned();
1042 uint fetchScriptDWord();
1043 int fetchScriptDWordSigned();
1044 void ignoreScriptWord() { fetchScriptWord(); }
1045 void ignoreScriptByte() { fetchScriptByte(); }
1048 virtual int readVar(uint var);
1049 virtual void writeVar(uint var,
int value);
1051 virtual void resetSentence() {}
1054 virtual void beginCutscene(
int *args);
1055 virtual void endCutscene();
1056 void abortCutscene();
1057 void beginOverride();
1060 void copyScriptString(byte *dst);
1061 int resStrLen(
const byte *src);
1062 void doSentence(
int c,
int b,
int a);
1066 uint32 _fileOffset = 0;
1073 ScummFile *instantiateScummFile(
bool indexPAKFiles =
true);
1076 int _resourceHeaderSize = 8;
1077 byte _resourceMapper[128];
1078 const byte *_resourceLastSearchBuf;
1079 uint32 _resourceLastSearchSize;
1081 virtual void allocateArrays();
1082 void openRoom(
int room);
1084 void deleteRoomOffsets();
1085 virtual void readRoomsOffsets();
1086 void askForDisk(
const Common::Path &filename,
int disknum);
1087 bool openResourceFile(
const Common::Path &filename, byte encByte);
1089 void loadPtrToResource(
ResType type, ResId idx,
const byte *ptr);
1090 virtual int readResTypeList(
ResType type);
1093 int loadResource(
ResType type, ResId idx);
1095 int getResourceRoomNr(
ResType type, ResId idx);
1096 virtual uint32 getResourceRoomOffset(
ResType type, ResId idx);
1099 int getResourceSize(
ResType type, ResId idx);
1100 byte *getResourceAddress(
ResType type, ResId idx);
1101 virtual byte *getStringAddress(ResId idx);
1102 byte *getStringAddressVar(
int i);
1103 void ensureResourceLoaded(
ResType type, ResId idx);
1110 int readSoundResource(ResId idx);
1111 int readSoundResourceSmallHeader(ResId idx);
1112 bool isResourceInUse(
ResType type, ResId idx)
const;
1114 virtual void setupRoomSubBlocks();
1115 virtual void resetRoomSubBlocks();
1117 virtual void clearRoomObjects();
1118 virtual void resetRoomObjects();
1119 virtual void resetRoomObject(
ObjectData *od,
const byte *room,
const byte *searchptr = NULL);
1121 virtual void readArrayFromIndexFile();
1122 virtual void readMAXS(
int blockSize) = 0;
1123 virtual void readGlobalObjects();
1124 virtual void readIndexFile();
1125 virtual void readIndexBlock(uint32 block, uint32 itemsize);
1126 virtual void loadCharset(
int i);
1127 void nukeCharset(
int i);
1129 int _lastLoadedRoom = 0;
1131 const byte *findResourceData(uint32 tag,
const byte *ptr);
1132 const byte *findResource(uint32 tag,
const byte *ptr);
1133 void applyWorkaroundIfNeeded(
ResType type,
int idx);
1134 bool verifyMI2MacBootScript();
1135 bool verifyMI2MacBootScript(byte *buf,
int size);
1136 bool tryPatchMI1CannibalScript(byte *buf,
int size);
1138 int getResourceDataSize(
const byte *ptr)
const;
1139 void dumpResource(
const char *tag,
int index,
const byte *ptr,
int length = -1);
1143 byte OF_OWNER_ROOM = 0;
1144 int getInventorySlot();
1145 int findInventory(
int owner,
int index);
1146 int getInventoryCount(
int owner);
1149 byte *_objectOwnerTable =
nullptr, *_objectRoomTable =
nullptr, *_objectStateTable =
nullptr;
1150 int _numObjectsInRoom = 0;
1153 uint32 *_classData =
nullptr;
1156 void markObjectRectAsDirty(
int obj);
1157 virtual void loadFlObject(uint
object, uint room);
1158 void nukeFlObjects(
int min,
int max);
1159 int findFlObjectSlot();
1160 int findLocalObjectSlot();
1161 void addObjectToInventory(uint obj, uint room);
1162 void updateObjectStates();
1164 bool getClass(
int obj,
int cls)
const;
1166 void putClass(
int obj,
int cls,
bool set);
1167 int getState(
int obj);
1168 void putState(
int obj,
int state);
1169 void setObjectState(
int obj,
int state,
int x,
int y);
1170 int getOwner(
int obj)
const;
1171 void putOwner(
int obj,
int owner);
1172 void setOwnerOf(
int obj,
int owner);
1173 void clearOwnerOf(
int obj);
1174 int getObjectRoom(
int obj)
const;
1175 virtual bool objIsActor(
int obj);
1176 virtual int objToActor(
int obj);
1177 virtual int actorToObj(
int actor);
1178 int getObjX(
int obj);
1179 int getObjY(
int obj);
1180 void getObjectWidth(
int object,
int &width) {
int x, y, dir; getObjectXYPos(
object, x, y, dir, width); }
1181 void getObjectXYPos(
int object,
int &x,
int &y) {
int dir, width; getObjectXYPos(
object, x, y, dir, width); }
1182 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir) {
int width; getObjectXYPos(
object, x, y, dir, width); }
1183 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir,
int &width);
1184 int getObjOldDir(
int obj);
1185 int getObjNewDir(
int obj);
1186 int getObjectIndex(
int object)
const;
1187 int getObjectImageCount(
int object);
1188 int whereIsObject(
int object)
const;
1189 int findObject(
int x,
int y);
1190 void findObjectInRoom(
FindObjectInRoom *fo, byte findWhat, uint
object, uint room);
1192 int getObjectOrActorWidth(
int object,
int &width);
1193 int getObjectOrActorXY(
int object,
int &x,
int &y);
1194 int getDist(
int x,
int y,
int x2,
int y2);
1197 int getObjActToObjActDist(
int a,
int b);
1198 const byte *getObjOrActorName(
int obj);
1199 void setObjectName(
int obj);
1201 void addObjectToDrawQue(
int object);
1202 void removeObjectFromDrawQue(
int object);
1203 void clearDrawObjectQueue();
1204 void processDrawQue();
1206 virtual void clearDrawQueues();
1208 uint32 getOBCDOffs(
int object)
const;
1209 byte *getOBCDFromObject(
int obj,
bool v0CheckInventory =
true);
1210 const byte *getOBIMFromObjectData(
const ObjectData &od);
1211 const byte *getObjectImage(
const byte *ptr,
int state);
1212 virtual int getObjectIdFromOBIM(
const byte *obim);
1216 uint16 _verbMouseOver = 0;
1218 uint16 _userState = 0;
1220 virtual void handleMouseOver(
bool updateInventory);
1221 virtual void redrawVerbs();
1222 virtual void checkExecVerbs();
1224 void verbMouseOver(
int verb);
1225 int findVerbAtPos(
int x,
int y)
const;
1226 virtual void drawVerb(
int verb,
int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT);
1227 virtual void runInputScript(
int clickArea,
int val,
int mode);
1228 void restoreVerbBG(
int verb);
1229 void drawVerbBitmap(
int verb,
int x,
int y);
1230 int getVerbSlot(
int id,
int mode)
const;
1231 void killVerb(
int slot);
1232 void setVerbObject(uint room, uint
object, uint verb);
1235 bool isValidActor(
int id)
const;
1238 Actor *derefActor(
int id,
const char *errmsg = 0)
const;
1239 Actor *derefActorSafe(
int id,
const char *errmsg)
const;
1243 void playActorSounds();
1244 void redrawAllActors();
1245 virtual void setActorRedrawFlags();
1248 void resetV1ActorTalkColor();
1249 virtual void resetActorBgs();
1250 virtual void processActors();
1251 void processUpperActors();
1252 virtual int getActorFromPos(
int x,
int y);
1256 byte _actorToPrintStrFor = 0, _V1TalkingActor = 0;
1257 int _sentenceNum = 0;
1261 int16 _talkDelay = 0;
1262 int _NES_lastTalkingActor = 0;
1263 int _NES_talkColor = 0;
1265 virtual void actorTalk(
const byte *msg);
1267 int getTalkingActor();
1268 void setTalkingActor(
int variable);
1271 bool isCostumeInUse(
int i)
const;
1275 uint16 _screenB = 0, _screenH = 0;
1277 int _roomHeight = 0, _roomWidth = 0;
1278 int _screenHeight = 0, _screenWidth = 0;
1281 bool _cameraIsFrozen =
false;
1283 int _screenStartStrip = 0, _screenEndStrip = 0;
1285 bool _forceBannerVirtScreen =
false;
1296 bool _useMacScreenCorrectHeight =
true;
1297 int _macScreenDrawOffset = 20;
1300 uint8 _bytesPerPixel = 1;
1305 uint8 _colorUsedByCycle[256];
1308 uint32 _ENCD_offs = 0, _EXCD_offs = 0;
1309 uint32 _CLUT_offs = 0, _EPAL_offs = 0;
1310 uint32 _IM00_offs = 0, _PALS_offs = 0;
1313 bool _fullRedraw =
false, _bgNeedsRedraw =
false;
1314 bool _screenEffectFlag =
false, _completeScreenRedraw =
false;
1315 bool _disableFadeInEffect =
false;
1318 int hotspotX, hotspotY, width, height;
1319 byte animate, animateIndex;
1325 byte _grabbedCursor[16384];
1326 byte _macGrabbedCursor[16384 * 4];
1327 byte _currentCursor = 0;
1329 byte _newEffect = 0, _switchRoomEffect2 = 0, _switchRoomEffect = 0;
1330 bool _doEffect =
false;
1332 bool _snapScroll =
false;
1334 virtual void setBuiltinCursor(
int index) {}
1336 bool isLightOn()
const;
1338 virtual int getCurrentLights()
const;
1341 void initScreens(
int b,
int h);
1342 void initVirtScreen(
VirtScreenNumber slot,
int top,
int width,
int height,
bool twobufs,
bool scrollable);
1343 void initBGBuffers(
int height);
1344 void initCycl(
const byte *ptr);
1346 void decodeNESBaseTiles();
1348 void drawObject(
int obj,
int scrollType);
1349 void drawRoomObjects(
int arg);
1350 void drawRoomObject(
int i,
int arg);
1351 void drawBox(
int x,
int y,
int x2,
int y2,
int color);
1352 void drawLine(
int x1,
int y1,
int x2,
int y2,
int color);
1353 void drawPixel(
VirtScreen *vs,
int x,
int y, int16 color,
bool useBackbuffer =
false);
1355 void moveScreen(
int dx,
int dy,
int height);
1357 void restoreBackground(
Common::Rect rect, byte backcolor = 0);
1358 void redrawBGStrip(
int start,
int num);
1359 virtual void redrawBGAreas();
1362 void setCameraAtEx(
int at);
1363 virtual void setCameraAt(
int pos_x,
int pos_y);
1364 virtual void setCameraFollows(
Actor *a,
bool setCamera =
false);
1365 virtual void moveCamera();
1366 virtual void panCameraTo(
int x,
int y);
1368 void actorFollowCamera(
int act);
1370 const byte *getPalettePtr(
int palindex,
int room);
1372 void setPaletteFromTable(
const byte *ptr,
int numcolor,
int firstIndex = 0);
1373 void resetPalette(
bool isBootUp =
false);
1375 void setCurrentPalette(
int pal);
1376 void setRoomPalette(
int pal,
int room);
1377 void setPCEPaletteFromPtr(
const byte *ptr);
1378 void setAmigaPaletteFromPtr(
const byte *ptr);
1379 virtual void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1380 void setV1ColorTable(
int renderMode);
1382 virtual void setPalColor(
int index,
int r,
int g,
int b);
1383 void setDirtyColors(
int min,
int max);
1384 const byte *findPalInPals(
const byte *pal,
int index);
1385 void swapPalColors(
int a,
int b);
1386 virtual void copyPalColor(
int dst,
int src);
1387 void cyclePalette();
1388 void stopCycle(
int i);
1389 virtual void palManipulateInit(
int resID,
int start,
int end,
int time);
1390 void palManipulate();
1391 uint32 findClosestPaletteColor(byte *palette,
int paletteLength, byte r, byte g, byte b);
1392 void applyGrayscaleToPaletteRange(
int min,
int max);
1393 bool haveToApplyMonkey1PaletteFix();
1396 uint8 *getHEPaletteSlot(uint16 palSlot);
1397 uint16 get16BitColor(uint8 r, uint8 g, uint8 b);
1398 uint32 getPaletteColorFromRGB(byte *palette, byte r, byte g, byte b);
1399 uint32 getPackedRGBColorFromPalette(byte *palette, uint32 color);
1400 void fetchBlackAndWhite(uint32 &black, uint32 &white, byte *palette,
int paletteEntries);
1401 int remapPaletteColor(
int r,
int g,
int b,
int threshold);
1402 void readPCEPalette(
const byte **ptr, byte **dest,
int numEntries);
1403 void colorPCEToRGB(uint16 color, byte *r, byte *g, byte *b);
1404 void setPCETextPalette(uint8 color);
1406 void moveMemInPalRes(
int start,
int end, byte direction);
1407 void setShadowPalette(
int slot,
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1408 void setShadowPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor,
int start,
int end);
1409 virtual void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1412 void markRectAsDirty(
VirtScreenNumber virt,
int left,
int right,
int top,
int bottom,
int dirtybit = 0);
1414 markRectAsDirty(virt, rect.
left, rect.
right, rect.top, rect.bottom, dirtybit);
1418 byte *_compositeBuf;
1419 byte *_hercCGAScaleBuf =
nullptr;
1420 bool _enableEGADithering =
false;
1421 bool _supportsEGADithering =
false;
1422 bool _enableSegaShadowMode =
false;
1424 virtual void drawDirtyScreenParts();
1426 void drawStripToScreen(
VirtScreen *vs,
int x,
int width,
int top,
int bottom);
1428 void mac_markScreenAsDirty(
int x,
int y,
int w,
int h);
1429 void mac_drawStripToScreen(
VirtScreen *vs,
int top,
int x,
int y,
int width,
int height);
1430 void mac_drawIndy3TextBox();
1431 void mac_undrawIndy3TextBox();
1432 void mac_undrawIndy3CreditsText();
1433 void mac_drawBufferToScreen(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1434 void mac_updateCompositeBuffer(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1435 void mac_blitDoubleResImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1436 void mac_applyDoubleResToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch);
1437 void mac_blitEPXImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1438 void mac_applyEPXToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch,
int xOffset,
int yOffset,
int bufferWidth,
int bufferHeight);
1439 void mac_scaleCursor(byte *&outCursor,
int &outHotspotX,
int &outHotspotY,
int &outWidth,
int &outHeight);
1440 void mac_toggleSmoothing();
1442 Common::KeyState mac_showOldStyleBannerAndPause(
const char *msg, int32 waitTime);
1444 const byte *postProcessDOSGraphics(
VirtScreen *vs,
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1445 const byte *ditherVGAtoEGA(
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1449 byte *getMaskBuffer(
int x,
int y,
int z);
1452 void fadeIn(
int effect);
1453 void fadeOut(
int effect);
1455 void dissolveEffectSelector();
1456 void transitionEffect(
int a);
1457 void dissolveEffect(
int width,
int height);
1458 void scrollEffect(
int dir);
1460 void updateScreenShakeEffect();
1463 double getTimerFrequency();
1464 double getAmigaMusicTimerFrequency();
1467 bool _shakeEnabled =
false;
1468 bool _shakeTempSavedState =
false;
1469 uint _shakeFrame = 0;
1470 uint32 _shakeNextTick = 0;
1471 uint32 _shakeTickCounter = 0;
1472 double _shakeTimerRate;
1473 double _timerFrequency;
1475 void setShake(
int mode);
1477 int _drawObjectQueNr = 0;
1478 byte _drawObjectQue[200];
1491 uint32 gfxUsageBits[410 * 3];
1493 void upgradeGfxUsageBits();
1494 void setGfxUsageBit(
int strip,
int bit);
1495 void clearGfxUsageBit(
int strip,
int bit);
1498 bool testGfxUsageBit(
int strip,
int bit) {
1499 assert(strip >= 0 && strip <
ARRAYSIZE(gfxUsageBits) / 3);
1500 assert(1 <= bit && bit <= 96);
1502 return (gfxUsageBits[3 * strip + bit / 32] & (1 << (bit % 32))) != 0;
1505 bool testGfxAnyUsageBits(
int strip);
1506 bool testGfxObjectUsageBits(
int strip);
1507 bool testGfxOtherUsageBits(
int strip,
int bit);
1510 byte _roomPalette[256];
1511 byte *_shadowPalette =
nullptr;
1512 bool _skipDrawObject = 0;
1514 int _soundEnabled = 0;
1517 byte _HEV7ActorPalette[256];
1518 uint8 *_hePalettes =
nullptr;
1519 uint16 _hePaletteSlot = 0;
1520 uint16 *_16BitPalette =
nullptr;
1523 byte *_verbPalette =
nullptr;
1528 int _shadowPaletteSize = 0;
1529 byte _currentPalette[3 * 256];
1530 byte _darkenPalette[3 * 256];
1531 int _paletteChangedCounter = 1;
1533 int _palDirtyMin = 0, _palDirtyMax = 0;
1535 byte _palManipStart = 0, _palManipEnd = 0;
1536 uint16 _palManipCounter = 0;
1537 byte *_palManipPalette =
nullptr;
1538 byte *_palManipIntermediatePal =
nullptr;
1540 bool _haveActorSpeechMsg =
false;
1541 bool _useTalkAnims =
false;
1542 uint16 _defaultTextSpeed = 0;
1544 bool _native_mt32 =
false;
1545 bool _copyProtection =
false;
1546 bool _shadowPalRemap =
false;
1549 uint16 _amigaFirstUsedColor = 0;
1550 byte _amigaPalette[3 * 64];
1551 void amigaPaletteFindFirstUsedColor();
1552 void mapRoomPalette(
int idx);
1553 int remapRoomPaletteColor(
int r,
int g,
int b);
1554 void mapVerbPalette(
int idx);
1555 int remapVerbPaletteColor(
int r,
int g,
int b);
1558 byte *_egaColorMap[2];
1561 uint16 _extraBoxFlags[65];
1564 byte *getBoxMatrixBaseAddr();
1565 byte *getBoxConnectionBase(
int box);
1567 int getNextBox(byte from, byte to);
1569 void setBoxFlags(
int box,
int val);
1570 void setBoxScale(
int box,
int b);
1572 bool checkXYInBoxBounds(
int box,
int x,
int y);
1574 BoxCoords getBoxCoordinates(
int boxnum);
1576 byte getMaskFromBox(
int box);
1577 Box *getBoxBaseAddr(
int box);
1578 byte getBoxFlags(
int box);
1579 int getBoxScale(
int box);
1581 int getScale(
int box,
int x,
int y);
1582 int getScaleFromSlot(
int slot,
int x,
int y);
1592 void setScaleSlot(
int slot,
int x1,
int y1,
int scale1,
int x2,
int y2,
int scale2);
1593 void setBoxScaleSlot(
int box,
int slot);
1594 void convertScaleTableToScaleSlot(
int slot);
1596 void calcItineraryMatrix(byte *itineraryMatrix,
int num);
1597 void createBoxMatrix();
1598 virtual bool areBoxesNeighbors(
int i,
int j);
1603 byte _charsetColorMap[16];
1610 int _textSurfaceMultiplier = 0;
1612 bool _isModernMacVersion =
false;
1613 bool _useGammaCorrection =
true;
1616 MacGui *_macGui =
nullptr;
1617 bool _useMacGraphicsSmoothing =
true;
1618 byte _completeScreenBuffer[320 * 200];
1621 byte _charsetColor = 0;
1622 byte _charsetData[23][16];
1624 int _charsetBufPos = 0;
1625 byte _charsetBuffer[512];
1627 bool _keepText =
false;
1630 int _nextLeft = 0, _nextTop = 0;
1635 bool _voiceNextString =
false;
1636 bool _checkPreviousSaid =
false;
1637 bool _voicePassHelpButtons =
false;
1638 int _previousVerb = -1;
1639 int _previousControl = -1;
1644 void restoreCharsetBg();
1645 void clearCharsetMask();
1646 void clearTextSurface();
1648 virtual void initCharset(
int charset);
1650 virtual void printString(
int m,
const byte *msg);
1652 virtual bool handleNextCharsetCode(
Actor *a,
int *c);
1653 virtual void drawSentence() {}
1654 virtual void displayDialog();
1655 int countNumberOfWaits();
1657 void drawString(
int a,
const byte *msg, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::QUEUE);
1658 virtual void fakeBidiString(byte *ltext,
bool ignoreVerb,
int ltextSize)
const;
1659 void wrapSegaCDText();
1660 void debugMessage(
const byte *msg);
1661 virtual void showMessageDialog(
const byte *msg);
1664 void sayText(
const Common::String &text, Common::TextToSpeechManager::Action action = Common::TextToSpeechManager::QUEUE)
const;
1665 void stopTextToSpeech()
const;
1666 void sayButtonText();
1669 virtual int convertMessageToString(
const byte *msg, byte *dst,
int dstSize);
1670 int convertIntMessage(byte *dst,
int dstSize,
int var);
1671 int convertVerbMessage(byte *dst,
int dstSize,
int var);
1672 int convertNameMessage(byte *dst,
int dstSize,
int var);
1673 int convertStringMessage(byte *dst,
int dstSize,
int var);
1679 virtual void translateText(
const byte *text, byte *trans_buff,
int transBufferSize);
1681 bool reverseIfNeeded(
const byte *text, byte *reverseBuf,
int reverseBufSize)
const;
1683 Common::CodePage getDialogCodePage()
const;
1686 bool _useCJKMode =
false;
1687 bool _useMultiFont =
false;
1688 int _numLoadedFont = 0;
1689 int _2byteShadow = 0;
1690 bool _force2ByteCharHeight =
false;
1692 int _2byteHeight = 0;
1693 int _2byteWidth = 0;
1695 byte _newLineCharacter = 0;
1696 byte *get2byteCharPtr(
int idx);
1698 bool isScummvmKorTarget();
1699 bool hasLocalizer();
1702 byte *_2byteFontPtr =
nullptr;
1703 byte *_2byteMultiFontPtr[20];
1704 int _2byteMultiHeight[20];
1705 int _2byteMultiWidth[20];
1706 int _2byteMultiShadow[20];
1709 struct TranslatedLine {
1710 uint32 originalTextOffset;
1711 uint32 translatedTextOffset;
1714 struct TranslationRange {
1718 TranslationRange(uint32 left_, uint32 right_) : left(left_), right(right_) {}
1719 TranslationRange() : left(0), right(0) {}
1722 struct TranslationRoom {
1726 bool _existLanguageFile =
false;
1727 bool _isRTL =
false;
1728 byte *_languageBuffer =
nullptr;
1729 int _numTranslatedLines = 0;
1730 TranslatedLine *_translatedLines =
nullptr;
1731 uint16 *_languageLineIndex =
nullptr;
1734 const byte *searchTranslatedLine(
const byte *text,
const TranslationRange &range,
bool useIndex);
1736 virtual void createTextRenderer(GlyphRenderer_v7 *gr) {}
1741 byte VAR_KEYPRESS = 0xFF;
1742 byte VAR_SYNC = 0xFF;
1743 byte VAR_EGO = 0xFF;
1744 byte VAR_CAMERA_POS_X = 0xFF;
1745 byte VAR_HAVE_MSG = 0xFF;
1746 byte VAR_ROOM = 0xFF;
1747 byte VAR_OVERRIDE = 0xFF;
1748 byte VAR_MACHINE_SPEED = 0xFF;
1750 byte VAR_NUM_ACTOR = 0xFF;
1751 byte VAR_CURRENT_LIGHTS = 0xFF;
1752 byte VAR_CURRENTDRIVE = 0xFF;
1753 byte VAR_CURRENTDISK = 0xFF;
1754 byte VAR_TMR_1 = 0xFF;
1755 byte VAR_TMR_2 = 0xFF;
1756 byte VAR_TMR_3 = 0xFF;
1757 byte VAR_MUSIC_TIMER = 0xFF;
1758 byte VAR_ACTOR_RANGE_MIN = 0xFF;
1759 byte VAR_ACTOR_RANGE_MAX = 0xFF;
1760 byte VAR_CAMERA_MIN_X = 0xFF;
1761 byte VAR_CAMERA_MAX_X = 0xFF;
1762 byte VAR_TIMER_NEXT = 0xFF;
1763 byte VAR_VIRT_MOUSE_X = 0xFF;
1764 byte VAR_VIRT_MOUSE_Y = 0xFF;
1765 byte VAR_ROOM_RESOURCE = 0xFF;
1766 byte VAR_LAST_SOUND = 0xFF;
1767 byte VAR_CUTSCENEEXIT_KEY = 0xFF;
1768 byte VAR_OPTIONS_KEY = 0xFF;
1769 byte VAR_TALK_ACTOR = 0xFF;
1770 byte VAR_CAMERA_FAST_X = 0xFF;
1771 byte VAR_SCROLL_SCRIPT = 0xFF;
1772 byte VAR_ENTRY_SCRIPT = 0xFF;
1773 byte VAR_ENTRY_SCRIPT2 = 0xFF;
1774 byte VAR_EXIT_SCRIPT = 0xFF;
1775 byte VAR_EXIT_SCRIPT2 = 0xFF;
1776 byte VAR_VERB_SCRIPT = 0xFF;
1777 byte VAR_SENTENCE_SCRIPT = 0xFF;
1778 byte VAR_INVENTORY_SCRIPT = 0xFF;
1779 byte VAR_CUTSCENE_START_SCRIPT = 0xFF;
1780 byte VAR_CUTSCENE_END_SCRIPT = 0xFF;
1781 byte VAR_CHARINC = 0xFF;
1782 byte VAR_WALKTO_OBJ = 0xFF;
1783 byte VAR_DEBUGMODE = 0xFF;
1784 byte VAR_HEAPSPACE = 0xFF;
1785 byte VAR_RESTART_KEY = 0xFF;
1786 byte VAR_PAUSE_KEY = 0xFF;
1787 byte VAR_MOUSE_X = 0xFF;
1788 byte VAR_MOUSE_Y = 0xFF;
1789 byte VAR_TIMER = 0xFF;
1790 byte VAR_TIMER_TOTAL = 0xFF;
1791 byte VAR_SOUNDCARD = 0xFF;
1792 byte VAR_VIDEOMODE = 0xFF;
1793 byte VAR_MAINMENU_KEY = 0xFF;
1794 byte VAR_FIXEDDISK = 0xFF;
1795 byte VAR_CURSORSTATE = 0xFF;
1796 byte VAR_USERPUT = 0xFF;
1797 byte VAR_SOUNDRESULT = 0xFF;
1798 byte VAR_TALKSTOP_KEY = 0xFF;
1799 byte VAR_FADE_DELAY = 0xFF;
1800 byte VAR_NOSUBTITLES = 0xFF;
1803 byte VAR_SOUNDPARAM = 0xFF;
1804 byte VAR_SOUNDPARAM2 = 0xFF;
1805 byte VAR_SOUNDPARAM3 = 0xFF;
1806 byte VAR_INPUTMODE = 0xFF;
1807 byte VAR_MEMORY_PERFORMANCE = 0xFF;
1808 byte VAR_VIDEO_PERFORMANCE = 0xFF;
1809 byte VAR_ROOM_FLAG = 0xFF;
1810 byte VAR_GAME_LOADED = 0xFF;
1811 byte VAR_NEW_ROOM = 0xFF;
1814 byte VAR_V5_TALK_STRING_Y = 0xFF;
1817 byte VAR_ROOM_WIDTH = 0xFF;
1818 byte VAR_ROOM_HEIGHT = 0xFF;
1819 byte VAR_SUBTITLES = 0xFF;
1820 byte VAR_V6_EMSSPACE = 0xFF;
1823 byte VAR_CAMERA_POS_Y = 0xFF;
1824 byte VAR_CAMERA_MIN_Y = 0xFF;
1825 byte VAR_CAMERA_MAX_Y = 0xFF;
1826 byte VAR_CAMERA_THRESHOLD_X = 0xFF;
1827 byte VAR_CAMERA_THRESHOLD_Y = 0xFF;
1828 byte VAR_CAMERA_SPEED_X = 0xFF;
1829 byte VAR_CAMERA_SPEED_Y = 0xFF;
1830 byte VAR_CAMERA_ACCEL_X = 0xFF;
1831 byte VAR_CAMERA_ACCEL_Y = 0xFF;
1832 byte VAR_CAMERA_DEST_X = 0xFF;
1833 byte VAR_CAMERA_DEST_Y = 0xFF;
1834 byte VAR_CAMERA_FOLLOWED_ACTOR = 0xFF;
1837 byte VAR_VERSION_KEY = 0xFF;
1838 byte VAR_DEFAULT_TALK_DELAY = 0xFF;
1839 byte VAR_CUSTOMSCALETABLE = 0xFF;
1840 byte VAR_BLAST_ABOVE_TEXT = 0xFF;
1841 byte VAR_VOICE_MODE = 0xFF;
1842 byte VAR_MUSIC_BUNDLE_LOADED = 0xFF;
1843 byte VAR_VOICE_BUNDLE_LOADED = 0xFF;
1845 byte VAR_LEFTBTN_DOWN = 0xFF;
1846 byte VAR_RIGHTBTN_DOWN = 0xFF;
1847 byte VAR_LEFTBTN_HOLD = 0xFF;
1848 byte VAR_RIGHTBTN_HOLD = 0xFF;
1849 byte VAR_PRE_SAVELOAD_SCRIPT = 0xFF;
1850 byte VAR_POST_SAVELOAD_SCRIPT = 0xFF;
1851 byte VAR_SAVELOAD_PAGE = 0xFF;
1852 byte VAR_OBJECT_LABEL_FLAG = 0xFF;
1855 byte VAR_CHARSET_MASK = 0xFF;
1858 byte VAR_V6_SOUNDMODE = 0xFF;
1861 byte VAR_CHARCOUNT = 0xFF;
1862 byte VAR_VERB_ALLOWED = 0xFF;
1863 byte VAR_ACTIVE_VERB = 0xFF;
1864 byte VAR_ACTIVE_OBJECT1 = 0xFF;
1865 byte VAR_ACTIVE_OBJECT2 = 0xFF;
1868 byte VAR_ALWAYS_REDRAW_ACTORS = 0xFF;
1869 byte VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
1871 byte VAR_SOUND_CHANNEL = 0xFF;
1872 byte VAR_TALK_CHANNEL = 0xFF;
1873 byte VAR_SOUND_TOKEN_OFFSET = 0xFF;
1874 byte VAR_START_DYN_SOUND_CHANNELS = 0xFF;
1875 byte VAR_SOUND_CALLBACK_SCRIPT = 0xFF;
1877 byte VAR_EARLY_TALKIE_CALLBACK = 0xFF;
1878 byte VAR_EARLY_CHAN_0_CALLBACK = 0xFF;
1879 byte VAR_EARLY_CHAN_1_CALLBACK = 0xFF;
1880 byte VAR_EARLY_CHAN_2_CALLBACK = 0xFF;
1881 byte VAR_EARLY_CHAN_3_CALLBACK = 0xFF;
1883 byte VAR_MAIN_SCRIPT = 0xFF;
1885 byte VAR_DEFAULT_SCRIPT_PRIORITY = 0xFF;
1886 byte VAR_LAST_SCRIPT_PRIORITY = 0xFF;
1888 byte VAR_QUIT_SCRIPT = 0xFF;
1889 byte VAR_ERROR_FLAG = 0xFF;
1890 byte VAR_OPERATION_FAILURE = 0xFF;
1892 byte VAR_COLOR_BLACK = 0xFF;
1895 byte VAR_NUM_GLOBAL_OBJS = 0xFF;
1897 #ifdef USE_RGB_COLOR 1899 Graphics::FontSJIS *_cjkFont =
nullptr;
1903 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE 1905 bool towns_isRectInStringBox(
int x1,
int y1,
int x2,
int y2);
1906 byte _townsPaletteFlags = 0;
1907 byte _townsCharsetColorMap[16];
1910 void towns_drawStripToScreen(
VirtScreen *vs,
int dstX,
int dstY,
int srcX,
int srcY,
int w,
int h);
1911 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col);
1912 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h);
1913 void towns_clearStrip(
int strip);
1914 #ifdef USE_RGB_COLOR 1915 void towns_setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1916 void towns_setTextPaletteFromPtr(
const byte *ptr);
1918 void towns_setupPalCycleField(
int x1,
int y1,
int x2,
int y2);
1919 void towns_processPalCycleField();
1920 void towns_resetPalCycleFields();
1921 void towns_restoreCharsetBg();
1922 void towns_scriptScrollEffect(
int dir);
1924 void requestScroll(
int dir);
1925 void scrollLeft() { requestScroll(-1); }
1926 void scrollRight() { requestScroll(1); }
1927 void towns_waitForScroll(
int waitForDirection,
int threshold = 0);
1928 void towns_updateGfx();
1931 int _numCyclRects = 0;
1932 int _scrollRequest = 0;
1933 int _scrollDeltaAdjust = 0;
1934 bool _scrollNeedDeltaAdjust = 0;
1935 int _refreshDuration[20];
1936 int _refreshArrayPos = 0;
1937 bool _refreshNeedCatchUp =
false;
1938 bool _enableSmoothScrolling =
false;
1939 bool _forceFMTownsHiResMode =
false;
1940 uint32 _scrollTimer = 0;
1941 uint32 _scrollDestOffset = 0;
1942 uint16 _scrollFeedStrips[3];
1946 byte _townsOverrideShadowColor = 0;
1947 byte _textPalette[48];
1948 byte _townsClearLayerFlag = 1;
1949 byte _townsActiveLayerFlags = 3;
1950 static const uint8 _townsLayer2Mask[];
1954 void scrollLeft() { redrawBGStrip(_gdi->_numStrips - 1, 1); }
1955 void scrollRight() { redrawBGStrip(0, 1); }
1956 void towns_updateGfx() {}
1957 void towns_waitForScroll(
int waitForDirection,
int threshold = 0) {}
1958 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col) {}
1959 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h) {}
1960 #endif // DISABLE_TOWNS_DUAL_LAYER_MODE #define ARRAYSIZE(x)
Definition: util.h:103
Definition: macgui_impl.h:52
VirtScreenNumber
Definition: gfx.h:161
EngineFeature
Definition: engine.h:260
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:1069
Definition: resource.h:80
ResType
Definition: scumm.h:243
Definition: macgui_indy3.h:37
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:1609
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:989
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:571
Common::RandomSource _rnd
Definition: scumm.h:539
Definition: macgui_loom.h:33
Definition: base-costume.h:49
Definition: detection.h:133
Language
Definition: language.h:45