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/serializer.h" 37 #include "common/str.h" 38 #include "common/textconsole.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" 57 #define DISABLE_TOWNS_DUAL_LAYER_MODE 65 class SeekableReadStream;
67 class SeekableWriteStream;
88 class BaseCostumeLoader;
89 class BaseCostumeRenderer;
91 class CharsetRenderer;
101 class GlyphRenderer_v7;
105 struct FindObjectInRoom;
108 extern ScummEngine *g_scumm;
113 NUM_SHADOW_PALETTE = 8
120 DEBUG_GENERAL = 1 << 0,
121 DEBUG_SCRIPTS = 1 << 2,
122 DEBUG_OPCODES = 1 << 3,
124 DEBUG_RESOURCE = 1 << 5,
125 DEBUG_IMUSE = 1 << 6,
126 DEBUG_SOUND = 1 << 7,
127 DEBUG_ACTORS = 1 << 8,
128 DEBUG_INSANE = 1 << 9,
129 DEBUG_SMUSH = 1 << 10,
130 DEBUG_MOONBASE_AI = 1 << 11,
131 DEBUG_NETWORK = 1 << 12
171 MBS_LEFT_CLICK = 0x8000,
172 MBS_RIGHT_CLICK = 0x4000,
173 MBS_MOUSE_MASK = (MBS_LEFT_CLICK | MBS_RIGHT_CLICK),
217 uint _objectRedrawCount;
218 uint _objectStripRedrawCount;
219 uint _actorRedrawCount;
220 uint _actorLimbRedrawDrawCount;
240 USERSTATE_SET_FREEZE = 0x01,
241 USERSTATE_SET_CURSOR = 0x02,
242 USERSTATE_SET_IFACE = 0x04,
243 USERSTATE_FREEZE_ON = 0x08,
244 USERSTATE_CURSOR_ON = 0x10,
245 USERSTATE_IFACE_SENTENCE = 0x20,
246 USERSTATE_IFACE_INVENTORY = 0x40,
247 USERSTATE_IFACE_VERBS = 0x80
250 #define USERSTATE_IFACE_ALL (USERSTATE_IFACE_SENTENCE | USERSTATE_IFACE_INVENTORY | USERSTATE_IFACE_VERBS) 284 typedef uint16 ResId;
328 #define PIT_BASE_FREQUENCY 1193182.0 // In Hz 329 #define PIT_V1_DIVISOR 65536.0 330 #define PIT_V2_4_DIVISOR 5041.0 331 #define PIT_V5_6_ORCHESTRATOR_DIVISOR 4096.0 332 #define PIT_V5_6_SUBTIMER_INC 3433.0 333 #define PIT_V5_SUBTIMER_THRESH 4167.0 334 #define PIT_V6_SAMNMAX_SUBTIMER_THRESH 4167.0 335 #define PIT_V6_DOTT_SUBTIMER_THRESH 4237.0 336 #define PIT_V7_ORCHESTRATOR_DIVISOR 3977.0 337 #define PIT_V7_SUBTIMER_INC 3977.0 338 #define PIT_V7_SUBTIMER_THRESH 4971.0 340 #define LOOM_STEAM_CDDA_RATE 240.0 355 #define AMIGA_NTSC_VBLANK_RATE 240.0 356 #define AMIGA_PAL_VBLANK_RATE 200.0 362 #define GAME_PROPER_SAVE 201 363 #define GAME_FAILED_SAVE 202 364 #define GAME_PROPER_LOAD 203 365 #define GAME_FAILED_LOAD 204 371 #define GUI_PAGE_MAIN 0 372 #define GUI_PAGE_SAVE 1 373 #define GUI_PAGE_LOAD 2 374 #define GUI_PAGE_RESTART 3 // Sega CD 375 #define GUI_PAGE_CODE_CONFIRM 4 // Sega CD 376 #define GUI_PAGE_INVALID_CODE 5 // Sega CD 378 #define GUI_CTRL_FIRST_SG 1 379 #define GUI_CTRL_LAST_SG 9 380 #define GUI_CTRL_SAVE_BUTTON 10 381 #define GUI_CTRL_LOAD_BUTTON 11 382 #define GUI_CTRL_PLAY_BUTTON 12 383 #define GUI_CTRL_QUIT_BUTTON 13 384 #define GUI_CTRL_OK_BUTTON 14 385 #define GUI_CTRL_CANCEL_BUTTON 15 386 #define GUI_CTRL_ARROW_UP_BUTTON 16 387 #define GUI_CTRL_ARROW_DOWN_BUTTON 17 388 #define GUI_CTRL_PATH_BUTTON 18 389 #define GUI_CTRL_MUSIC_SLIDER 19 390 #define GUI_CTRL_SPEECH_SLIDER 20 391 #define GUI_CTRL_SFX_SLIDER 21 392 #define GUI_CTRL_TEXT_SPEED_SLIDER 22 393 #define GUI_CTRL_DISPLAY_TEXT_CHECKBOX 23 394 #define GUI_CTRL_SPOOLED_MUSIC_CHECKBOX 24 395 #define GUI_CTRL_OUTER_BOX 26 396 #define GUI_CTRL_INNER_BOX 27 399 #define GUI_CTRL_NUMPAD_1 1 400 #define GUI_CTRL_NUMPAD_2 2 401 #define GUI_CTRL_NUMPAD_3 3 402 #define GUI_CTRL_NUMPAD_4 4 403 #define GUI_CTRL_NUMPAD_5 5 404 #define GUI_CTRL_NUMPAD_6 6 405 #define GUI_CTRL_NUMPAD_7 7 406 #define GUI_CTRL_NUMPAD_8 8 407 #define GUI_CTRL_NUMPAD_9 9 408 #define GUI_CTRL_NUMPAD_0 10 409 #define GUI_CTRL_RESTART_BUTTON 13 410 #define GUI_CTRL_ARROW_LEFT_BUTTON 16 411 #define GUI_CTRL_ARROW_RIGHT_BUTTON 17 412 #define GUI_CTRL_NUMPAD_BACK 23 417 gsTextSpeedSlider = 2,
428 gsGameNotLoaded = 13,
432 gsSelectLoadPrompt = 17,
433 gsReplacePrompt = 18,
438 gsTextDisplayOnly = 24,
441 gsMusicVolumeSlider = 27,
442 gsVoiceVolumeSlider = 28,
443 gsSfxVolumeSlider = 29,
454 gsInsertSaveDisk = 40,
457 gsRecalJoystick = 43,
470 gsCurrentPasscode = 56,
471 gsEnterPasscode = 57,
472 gsConfirmPasscode = 58,
473 gsInvalidPasscode = 59,
490 int highlightedTextColor;
491 int highlightedFillColor;
494 bool doubleLinesFlag;
499 kScummActionInsaneDownLeft,
500 kScummActionInsaneDown,
501 kScummActionInsaneDownRight,
502 kScummActionInsaneLeft,
503 kScummActionInsaneRight,
504 kScummActionInsaneUpLeft,
505 kScummActionInsaneUp,
506 kScummActionInsaneUpRight,
507 kScummActionInsaneAttack,
508 kScummActionInsaneSwitch,
509 kScummActionInsaneCheat,
514 extern const char *
const insaneKeymapId;
523 friend class CharsetRendererTownsClassic;
529 friend class LogicHEBasketball;
535 IMuse *_imuse =
nullptr;
536 IMuseDigital *_imuseDigital =
nullptr;
539 Sound *_sound =
nullptr;
556 int _insideCreateResource = 0;
558 bool _useOriginalGUI =
true;
559 bool _enableAudioOverride =
false;
560 bool _enableCOMISong =
false;
561 bool _isAmigaPALSystem =
false;
562 bool _quitFromScriptCmd =
false;
563 bool _isHE995 =
false;
564 bool _enableHECompetitiveOnlineMods =
false;
571 bool _needsSoundUnpause =
false;
589 void errorString(
const char *buf_input,
char *buf_output,
int buf_output_size)
override;
591 bool gameSupportsQuitDialogOverride()
const;
592 void syncSoundSettings()
override;
599 void pauseEngineIntern(
bool pause)
override;
602 virtual void setupScumm(
const Common::Path &macResourceFile);
603 virtual void resetScumm();
605 virtual void setupScummVars();
606 virtual void resetScummVars();
607 void setVideoModeVarToCurrentConfig();
608 void setSoundCardVarToCurrentConfig();
610 void setupCharsetRenderer(
const Common::Path &macFontFile);
611 void setupCostumeRenderer();
613 virtual void loadLanguageBundle();
616 void setupMusic(
int midi);
617 void setTalkSpeed(
int talkspeed);
621 virtual void scummLoop(
int delta);
622 virtual void scummLoop_updateScummVars();
623 virtual void scummLoop_handleSaveLoad();
624 virtual void scummLoop_handleDrawing();
625 virtual void scummLoop_handleActors() = 0;
626 virtual void scummLoop_handleEffects();
627 virtual void scummLoop_handleSound();
629 virtual void runBootscript();
631 virtual void terminateSaveMenuScript() {};
635 void beginTextInput();
642 void waitForTimer(
int quarterFrames,
bool freezeMacGui =
false);
643 uint32 _lastWaitTime;
645 void setTimerAndShakeFrequency();
652 uint32 getIntegralTime(
double fMsecs);
653 double _msecFractParts = 0.0;
655 virtual void processInput();
657 virtual void clearClickedStatus();
660 virtual void updateCursor();
661 virtual void animateCursor() {}
662 virtual void updatePalette();
663 virtual void setDefaultCursor() {};
664 virtual void setCursorTransparency(
int a) {};
665 virtual void resetCursors() {}
666 virtual void setCursorHotspot(
int x,
int y) {}
667 virtual void setCursorFromBuffer(
const byte *ptr,
int width,
int height,
int pitch,
bool preventScale =
false) {}
670 byte _macGammaCorrectionLookUp[256] = {
671 0x00, 0x05, 0x09, 0x0B, 0x0E, 0x10, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1E, 0x20, 0x22, 0x24,
672 0x25, 0x27, 0x28, 0x2A, 0x2C, 0x2D, 0x2F, 0x30, 0x31, 0x33, 0x34, 0x36, 0x37, 0x38, 0x3A, 0x3B,
673 0x3C, 0x3E, 0x3F, 0x40, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4D, 0x4E, 0x4F,
674 0x50, 0x51, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5E, 0x5F, 0x60, 0x61,
675 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
676 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
677 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8C, 0x8D, 0x8E, 0x8F,
678 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9C, 0x9D,
679 0x9E, 0x9F, 0xA0, 0xA1, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
680 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8,
681 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC0, 0xC1, 0xC2, 0xC3, 0xC3, 0xC4,
682 0xC5, 0xC6, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCA, 0xCB, 0xCC, 0xCD, 0xCD, 0xCE, 0xCF, 0xD0, 0xD0,
683 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD5, 0xD6, 0xD6, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDB, 0xDC, 0xDC,
684 0xDD, 0xDE, 0xDF, 0xDF, 0xE0, 0xE1, 0xE1, 0xE2, 0xE3, 0xE4, 0xE4, 0xE5, 0xE6, 0xE7, 0xE7, 0xE8,
685 0xE9, 0xE9, 0xEA, 0xEB, 0xEC, 0xEC, 0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF1, 0xF1, 0xF2, 0xF3, 0xF3,
686 0xF4, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, 0xF8, 0xF9, 0xFA, 0xFA, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF
692 bool isUsingOriginalGUI()
const;
693 bool isMessageBannerActive();
695 bool _isIndy4Jap =
false;
698 Dialog *_pauseDialog =
nullptr;
699 Dialog *_messageDialog =
nullptr;
700 Dialog *_versionDialog =
nullptr;
702 void confirmExitDialog();
703 void confirmRestartDialog();
706 void versionDialog();
709 int32 _bannerColors[50];
710 byte *_bannerMem =
nullptr;
711 uint32 _bannerMemSize = 0;
712 int _bannerSaveYStart = 0;
714 bool _messageBannerActive =
false;
715 bool _comiQuitMenuIsOpen =
false;
716 bool _closeBannerAndQueryQuitFlag =
false;
719 byte *_textSurfBannerMem =
nullptr;
720 uint32 _textSurfBannerMemSize = 0;
725 const char _emptyMsg[1] = {
'\0'};
726 const char _uncheckedBox[2] = {
' ',
'\0'};
727 const char _checkedBox[2] = {
'x',
'\0'};
728 const char _arrowUp[2] = {
'\x18',
'\0'};
729 const char _arrowDown[2] = {
'\x19',
'\0'};
730 const char _arrowLeft[2] = {
'\x3c',
'\0'};
731 const char _arrowRight[2] = {
'\x3d',
'\0'};
735 int _mainMenuSavegameLabel = 1;
736 int _curDisplayedSaveSlotPage = 0;
737 int _firstSaveStateOfList = 0;
738 bool _mainMenuIsActive =
false;
739 bool _quitByGUIPrompt =
false;
740 char _mainMenuMusicSlider[17];
741 char _mainMenuSpeechSlider[17];
742 char _mainMenuSfxSlider[17];
743 char _mainMenuTextSpeedSlider[17];
744 char _mainMenuSegaCDPasscode[5];
745 int _spooledMusicIsToBeEnabled = 1;
746 int _saveScriptParam = 0;
747 int _guiCursorAnimCounter = 0;
748 int _v5VoiceMode = 0;
751 int _internalSpeakerSoundsAreOn = 1;
752 int _guiMouseFlag = 1;
753 int _guiJoystickFlag = 1;
755 bool _mixerMutedByGUI =
false;
758 byte *_tempTextSurface =
nullptr;
759 byte *_tempMainSurface =
nullptr;
760 byte *_tempVerbSurface =
nullptr;
761 bool _postGUICharMask =
false;
764 byte *_curGrabbedCursor =
nullptr;
765 int8 _oldCursorState = 0;
766 int _curCursorState = 0;
767 int _curCursorWidth = 0;
768 int _curCursorHeight = 0;
769 int _curCursorHotspotX = 0;
770 int _curCursorHotspotY = 0;
772 virtual void setSnailCursor() {}
775 Common::KeyState showBannerAndPause(
int bannerId, int32 waitTime,
const char *msg, ...);
776 Common::KeyState showOldStyleBannerAndPause(
const char *msg,
int color, int32 waitTime);
777 Common::KeyState printMessageAndPause(
const char *msg,
int color, int32 waitTime,
bool drawOnSentenceLine);
780 void setBannerColors(
int bannerId, byte r, byte g, byte b);
781 virtual int getBannerColor(
int bannerId);
782 void setUpInternalGUIControl(
int id,
int normalFillColor,
int normalTextColor,
783 int topLineColor,
int bottomLineColor,
int leftLineColor,
int rightLineColor,
784 int highlightedTextColor,
int highlightedFillColor,
785 int anchorPointX,
int anchorPointY,
int x,
int y,
const char *label,
bool centerFlag,
bool unknownFlag);
786 void drawInternalGUIControl(
int id,
bool highlightColor);
787 int getInternalGUIControlFromCoordinates(
int x,
int y);
788 virtual bool isSmushActive() {
return false; }
789 virtual bool isInsaneActive() {
return false; }
791 virtual void queryQuit(
bool returnToLauncher);
792 virtual void queryRestart();
793 virtual const char *getGUIString(
int stringId);
794 void waitForBannerInput(int32 waitTime,
Common::KeyState &ks,
bool &leftBtnClicked,
bool &rightBtnClicked,
bool handleMouseWheel =
false);
795 virtual int getGUIStringHeight(
const char *str);
796 virtual int getGUIStringWidth(
const char *str);
797 virtual void drawGUIText(
const char *buttonString,
Common::Rect *clipRect,
int textXPos,
int textYPos,
int textColor,
bool centerFlag);
798 void getSliderString(
int stringId,
int value,
char *sliderString,
int size);
799 virtual int getMusicVolume();
800 virtual int getSpeechVolume();
801 virtual int getSFXVolume();
802 virtual void setMusicVolume(
int volume);
803 virtual void setSpeechVolume(
int volume);
804 virtual void setSFXVolume(
int volume);
805 virtual void toggleVoiceMode();
806 virtual void handleLoadDuringSmush() {}
807 virtual void setSkipVideo(
int value) {}
810 virtual void setUpMainMenuControls();
811 void setUpMainMenuControlsSegaCD();
812 void setUpMainMenuControlsIndy4Jap();
813 void drawMainMenuControls();
814 void drawMainMenuControlsSegaCD();
815 void updateMainMenuControls();
816 void updateMainMenuControlsSegaCD();
817 void drawMainMenuTitle(
const char *title);
818 bool executeMainMenuOperation(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
819 bool executeMainMenuOperationSegaCD(
int op,
int mouseX,
int mouseY,
bool &hasLoadedState);
820 bool shouldHighlightLabelAndWait(
int clickedControl);
821 void fillSavegameLabels();
822 bool canWriteGame(
int slotId);
823 bool userWriteLabelRoutine(
Common::KeyState &ks,
bool &leftMsClicked,
bool &rightMsClicked);
824 void saveCursorPreMenu();
825 void restoreCursorPostMenu();
826 void saveSurfacesPreGUI();
827 void restoreSurfacesPostGUI();
828 void showDraftsInventory();
829 void setUpDraftsInventory();
830 void drawDraftsInventory();
833 char displayMessage(
const char *altButton, MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(3, 4);
834 bool displayMessageYesNo(MSVC_PRINTF
const char *message, ...)
GCC_PRINTF(2, 3);
840 Actor **_actors =
nullptr;
841 Actor **_sortedActors =
nullptr;
843 byte *_arraySlot =
nullptr;
844 uint16 *_inventory =
nullptr;
845 uint16 *_newNames =
nullptr;
849 #define VAR(x) scummVar(x, #x, __FILE__, __LINE__) 850 int32& scummVar(byte var,
const char *varName,
const char *file,
int line) {
852 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
854 return _scummVars[var];
856 int32 scummVar(byte var,
const char *varName,
const char *file,
int line)
const {
858 error(
"Illegal access to variable %s in file %s, line %d", varName, file, line);
860 return _scummVars[var];
865 int32 *_roomVars =
nullptr;
866 int32 *_scummVars =
nullptr;
867 byte *_bitVars =
nullptr;
870 int _numVariables = 0;
871 int _numBitVariables = 0;
872 int _numLocalObjects = 0;
873 int _numGlobalObjects = 0;
876 int _numFlObject = 0;
877 int _numInventory = 0;
878 int _numNewNames = 0;
879 int _numGlobalScripts = 0;
880 int _numRoomVariables = 0;
881 int _numPalettes = 0;
887 int _numLocalScripts = 60, _numImages = 0, _numRooms = 0, _numScripts = 0, _numSounds = 0;
888 int _numCostumes = 0;
889 int32 _numCharsets = 0;
894 int _NESCostumeSet = 0;
895 void NES_loadCostumeSet(
int n);
896 byte *_NEScostdesc =
nullptr, *_NEScostlens =
nullptr, *_NEScostoffs =
nullptr, *_NEScostdata =
nullptr;
897 byte _NESPatTable[2][4096];
898 byte _NESPalette[2][16];
899 byte _NESBaseTiles = 0;
901 int _NESStartStrip = 0;
904 int _curPalIndex = 0;
907 byte _currentRoom = 0;
908 int _roomResource = 0;
909 bool _egoPositioned =
false;
913 virtual Common::Path generateFilename(
const int room)
const;
917 bool _keyDownMap[512];
918 bool _actionMap[kScummActionCount];
923 uint16 _mouseAndKeyboardStat = 0;
924 byte _leftBtnPressed = 0, _rightBtnPressed = 0;
926 int _mouseWheelFlag = 0;
928 bool _setupIsComplete =
false;
934 uint32 _lastInputScriptTime = 0;
940 bool _dumpScripts =
false;
941 bool _hexdumpScripts =
false;
942 bool _showStack =
false;
943 bool _debugMode =
false;
946 byte _saveLoadFlag = 0, _saveLoadSlot = 0;
947 uint32 _lastSaveTime = 0;
948 bool _saveTemporaryState =
false;
949 bool _pauseSoundsDuringSave =
true;
950 bool _loadFromLauncher =
false;
951 bool _videoModeChanged =
false;
957 bool loadState(
int slot,
bool compat);
964 void copyHeapSaveGameToFile(
int slot,
const char *saveName);
965 bool changeSavegameName(
int slot,
char *newName);
970 return makeSavegameName(_targetName, slot, temporary);
973 int getKeyState(
int key);
974 int getActionState(ScummAction action);
980 void listSavegames(
bool *marks,
int num);
983 void requestLoad(
int slot);
986 bool canPauseSoundsDuringSave()
const {
return _pauseSoundsDuringSave; }
998 uint32 _localScriptOffsets[1024];
999 const byte *_scriptPointer =
nullptr;
1000 const byte *_scriptOrgPointer =
nullptr;
1001 const byte *
const *_lastCodePtr =
nullptr;
1003 bool _debug =
false;
1004 byte _currentScript = 0xFF;
1005 int _scummStackPos = 0;
1008 char _engineVersionString[50];
1009 char _dataFileVersionString[50];
1013 virtual void setupOpcodes() = 0;
1014 void executeOpcode(byte i);
1015 const char *getOpcodeDesc(byte i);
1017 void initializeLocals(
int slot,
int *vars);
1018 int getScriptSlot();
1020 void startScene(
int room,
Actor *a,
int b);
1024 void runScript(
int script,
bool freezeResistant,
bool recursive,
int *lvarptr,
int cycle = 0);
1025 void stopScript(
int script);
1026 void nukeArrays(byte scriptSlot);
1029 void runObjectScript(
int script,
int entry,
bool freezeResistant,
bool recursive,
int *vars,
int slot = -1,
int cycle = 0);
1030 void runScriptNested(
int script);
1031 void executeScript();
1032 void updateScriptPtr();
1033 virtual void runInventoryScript(
int i);
1034 virtual void runInventoryScriptEx(
int i);
1035 virtual void checkAndRunSentenceScript();
1036 void runExitScript();
1037 void runEntryScript();
1038 void runQuitScript();
1039 void runAllScripts();
1040 void freezeScripts(
int scr);
1041 void unfreezeScripts();
1043 bool isScriptInUse(
int script)
const;
1044 bool isRoomScriptRunning(
int script)
const;
1045 bool isScriptRunning(
int script)
const;
1047 void killAllScriptsExceptCurrent();
1048 void killScriptsAndResources();
1049 void decreaseScriptDelay(
int amount);
1051 void stopObjectCode();
1052 void stopObjectScript(
int script);
1054 void getScriptBaseAddress();
1055 void resetScriptPointer();
1056 int getVerbEntrypoint(
int obj,
int entry);
1058 void refreshScriptPointer();
1059 byte fetchScriptByte();
1060 virtual uint fetchScriptWord();
1061 virtual int fetchScriptWordSigned();
1062 uint fetchScriptDWord();
1063 int fetchScriptDWordSigned();
1064 void ignoreScriptWord() { fetchScriptWord(); }
1065 void ignoreScriptByte() { fetchScriptByte(); }
1068 virtual int readVar(uint var);
1069 virtual void writeVar(uint var,
int value);
1071 virtual void resetSentence() {}
1074 virtual void beginCutscene(
int *args);
1075 virtual void endCutscene();
1076 void abortCutscene();
1077 void beginOverride();
1080 void copyScriptString(byte *dst);
1081 int resStrLen(
const byte *src);
1082 void doSentence(
int c,
int b,
int a);
1086 uint32 _fileOffset = 0;
1093 ScummFile *instantiateScummFile(
bool indexPAKFiles =
true);
1096 int _resourceHeaderSize = 8;
1097 byte _resourceMapper[128];
1098 const byte *_resourceLastSearchBuf;
1099 uint32 _resourceLastSearchSize;
1101 virtual void allocateArrays();
1102 void openRoom(
int room);
1104 void deleteRoomOffsets();
1105 virtual void readRoomsOffsets();
1106 void askForDisk(
const Common::Path &filename,
int disknum);
1107 bool openResourceFile(
const Common::Path &filename, byte encByte);
1109 void loadPtrToResource(
ResType type, ResId idx,
const byte *ptr);
1110 virtual int readResTypeList(
ResType type);
1113 int loadResource(
ResType type, ResId idx);
1115 int getResourceRoomNr(
ResType type, ResId idx);
1116 virtual uint32 getResourceRoomOffset(
ResType type, ResId idx);
1119 int getResourceSize(
ResType type, ResId idx);
1120 byte *getResourceAddress(
ResType type, ResId idx);
1121 virtual byte *getStringAddress(ResId idx);
1122 byte *getStringAddressVar(
int i);
1123 void ensureResourceLoaded(
ResType type, ResId idx);
1130 int readSoundResource(ResId idx);
1131 int readSoundResourceSmallHeader(ResId idx);
1132 bool isResourceInUse(
ResType type, ResId idx)
const;
1134 virtual void setupRoomSubBlocks();
1135 virtual void resetRoomSubBlocks();
1137 virtual void clearRoomObjects();
1138 virtual void resetRoomObjects();
1139 virtual void resetRoomObject(
ObjectData *od,
const byte *room,
const byte *searchptr = NULL);
1141 virtual void readArrayFromIndexFile();
1142 virtual void readMAXS(
int blockSize) = 0;
1143 virtual void readGlobalObjects();
1144 virtual void readIndexFile();
1145 virtual void readIndexBlock(uint32 block, uint32 itemsize);
1146 virtual void loadCharset(
int i);
1147 void nukeCharset(
int i);
1149 int _lastLoadedRoom = 0;
1151 const byte *findResourceData(uint32 tag,
const byte *ptr);
1152 const byte *findResource(uint32 tag,
const byte *ptr);
1153 void applyWorkaroundIfNeeded(
ResType type,
int idx);
1154 bool verifyMI2MacBootScript();
1155 bool verifyMI2MacBootScript(byte *buf,
int size);
1156 bool tryPatchMI1CannibalScript(byte *buf,
int size);
1158 int getResourceDataSize(
const byte *ptr)
const;
1159 void dumpResource(
const char *tag,
int index,
const byte *ptr,
int length = -1);
1163 byte OF_OWNER_ROOM = 0;
1164 int getInventorySlot();
1165 int findInventory(
int owner,
int index);
1166 int getInventoryCount(
int owner);
1169 byte *_objectOwnerTable =
nullptr, *_objectRoomTable =
nullptr, *_objectStateTable =
nullptr;
1170 int _numObjectsInRoom = 0;
1173 uint32 *_classData =
nullptr;
1176 void markObjectRectAsDirty(
int obj);
1177 virtual void loadFlObject(uint
object, uint room);
1178 void nukeFlObjects(
int min,
int max);
1179 int findFlObjectSlot();
1180 int findLocalObjectSlot();
1181 void addObjectToInventory(uint obj, uint room);
1182 void updateObjectStates();
1184 bool getClass(
int obj,
int cls)
const;
1186 void putClass(
int obj,
int cls,
bool set);
1187 int getState(
int obj);
1188 void putState(
int obj,
int state);
1189 void setObjectState(
int obj,
int state,
int x,
int y);
1190 int getOwner(
int obj)
const;
1191 void putOwner(
int obj,
int owner);
1192 void setOwnerOf(
int obj,
int owner);
1193 void clearOwnerOf(
int obj);
1194 int getObjectRoom(
int obj)
const;
1195 virtual bool objIsActor(
int obj);
1196 virtual int objToActor(
int obj);
1197 virtual int actorToObj(
int actor);
1198 int getObjX(
int obj);
1199 int getObjY(
int obj);
1200 void getObjectWidth(
int object,
int &width) {
int x, y, dir; getObjectXYPos(
object, x, y, dir, width); }
1201 void getObjectXYPos(
int object,
int &x,
int &y) {
int dir, width; getObjectXYPos(
object, x, y, dir, width); }
1202 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir) {
int width; getObjectXYPos(
object, x, y, dir, width); }
1203 void getObjectXYPos(
int object,
int &x,
int &y,
int &dir,
int &width);
1204 int getObjOldDir(
int obj);
1205 int getObjNewDir(
int obj);
1206 int getObjectIndex(
int object)
const;
1207 int getObjectImageCount(
int object);
1208 int whereIsObject(
int object)
const;
1209 int findObject(
int x,
int y);
1210 void findObjectInRoom(
FindObjectInRoom *fo, byte findWhat, uint
object, uint room);
1212 int getObjectOrActorWidth(
int object,
int &width);
1213 int getObjectOrActorXY(
int object,
int &x,
int &y);
1214 int getDist(
int x,
int y,
int x2,
int y2);
1217 int getObjActToObjActDist(
int a,
int b);
1218 const byte *getObjOrActorName(
int obj);
1219 void setObjectName(
int obj);
1221 void addObjectToDrawQue(
int object);
1222 void removeObjectFromDrawQue(
int object);
1223 void clearDrawObjectQueue();
1224 void processDrawQue();
1226 virtual void clearDrawQueues();
1228 uint32 getOBCDOffs(
int object)
const;
1229 byte *getOBCDFromObject(
int obj,
bool v0CheckInventory =
true);
1230 const byte *getOBIMFromObjectData(
const ObjectData &od);
1231 const byte *getObjectImage(
const byte *ptr,
int state);
1232 virtual int getObjectIdFromOBIM(
const byte *obim);
1236 uint16 _verbMouseOver = 0;
1238 uint16 _userState = 0;
1240 virtual void handleMouseOver(
bool updateInventory);
1241 virtual void redrawVerbs();
1242 virtual void checkExecVerbs();
1244 void verbMouseOver(
int verb);
1245 int findVerbAtPos(
int x,
int y)
const;
1246 virtual void drawVerb(
int verb,
int mode);
1247 virtual void runInputScript(
int clickArea,
int val,
int mode);
1248 void restoreVerbBG(
int verb);
1249 void drawVerbBitmap(
int verb,
int x,
int y);
1250 int getVerbSlot(
int id,
int mode)
const;
1251 void killVerb(
int slot);
1252 void setVerbObject(uint room, uint
object, uint verb);
1255 bool isValidActor(
int id)
const;
1258 Actor *derefActor(
int id,
const char *errmsg = 0)
const;
1259 Actor *derefActorSafe(
int id,
const char *errmsg)
const;
1263 void playActorSounds();
1264 void redrawAllActors();
1265 virtual void setActorRedrawFlags();
1268 void resetV1ActorTalkColor();
1269 virtual void resetActorBgs();
1270 virtual void processActors();
1271 void processUpperActors();
1272 virtual int getActorFromPos(
int x,
int y);
1276 byte _actorToPrintStrFor = 0, _V1TalkingActor = 0;
1277 int _sentenceNum = 0;
1281 int16 _talkDelay = 0;
1282 int _NES_lastTalkingActor = 0;
1283 int _NES_talkColor = 0;
1285 virtual void actorTalk(
const byte *msg);
1287 int getTalkingActor();
1288 void setTalkingActor(
int variable);
1291 bool isCostumeInUse(
int i)
const;
1295 uint16 _screenB = 0, _screenH = 0;
1297 int _roomHeight = 0, _roomWidth = 0;
1298 int _screenHeight = 0, _screenWidth = 0;
1301 bool _cameraIsFrozen =
false;
1303 int _screenStartStrip = 0, _screenEndStrip = 0;
1305 bool _forceBannerVirtScreen =
false;
1316 bool _useMacScreenCorrectHeight =
true;
1317 int _macScreenDrawOffset = 20;
1320 uint8 _bytesPerPixel = 1;
1325 uint8 _colorUsedByCycle[256];
1328 uint32 _ENCD_offs = 0, _EXCD_offs = 0;
1329 uint32 _CLUT_offs = 0, _EPAL_offs = 0;
1330 uint32 _IM00_offs = 0, _PALS_offs = 0;
1333 bool _fullRedraw =
false, _bgNeedsRedraw =
false;
1334 bool _screenEffectFlag =
false, _completeScreenRedraw =
false;
1335 bool _disableFadeInEffect =
false;
1338 int hotspotX, hotspotY, width, height;
1339 byte animate, animateIndex;
1345 byte _grabbedCursor[16384];
1346 byte _macGrabbedCursor[16384 * 4];
1347 byte _currentCursor = 0;
1349 byte _newEffect = 0, _switchRoomEffect2 = 0, _switchRoomEffect = 0;
1350 bool _doEffect =
false;
1352 bool _snapScroll =
false;
1354 virtual void setBuiltinCursor(
int index) {}
1356 bool isLightOn()
const;
1358 virtual int getCurrentLights()
const;
1361 void initScreens(
int b,
int h);
1362 void initVirtScreen(
VirtScreenNumber slot,
int top,
int width,
int height,
bool twobufs,
bool scrollable);
1363 void initBGBuffers(
int height);
1364 void initCycl(
const byte *ptr);
1366 void decodeNESBaseTiles();
1368 void drawObject(
int obj,
int scrollType);
1369 void drawRoomObjects(
int arg);
1370 void drawRoomObject(
int i,
int arg);
1371 void drawBox(
int x,
int y,
int x2,
int y2,
int color);
1372 void drawLine(
int x1,
int y1,
int x2,
int y2,
int color);
1373 void drawPixel(
VirtScreen *vs,
int x,
int y, int16 color,
bool useBackbuffer =
false);
1375 void moveScreen(
int dx,
int dy,
int height);
1377 void restoreBackground(
Common::Rect rect, byte backcolor = 0);
1378 void redrawBGStrip(
int start,
int num);
1379 virtual void redrawBGAreas();
1382 void setCameraAtEx(
int at);
1383 virtual void setCameraAt(
int pos_x,
int pos_y);
1384 virtual void setCameraFollows(
Actor *a,
bool setCamera =
false);
1385 virtual void moveCamera();
1386 virtual void panCameraTo(
int x,
int y);
1388 void actorFollowCamera(
int act);
1390 const byte *getPalettePtr(
int palindex,
int room);
1392 void setPaletteFromTable(
const byte *ptr,
int numcolor,
int firstIndex = 0);
1393 void resetPalette();
1395 void setCurrentPalette(
int pal);
1396 void setRoomPalette(
int pal,
int room);
1397 void setPCEPaletteFromPtr(
const byte *ptr);
1398 void setAmigaPaletteFromPtr(
const byte *ptr);
1399 virtual void setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1400 void setV1ColorTable(
int renderMode);
1402 virtual void setPalColor(
int index,
int r,
int g,
int b);
1403 void setDirtyColors(
int min,
int max);
1404 const byte *findPalInPals(
const byte *pal,
int index);
1405 void swapPalColors(
int a,
int b);
1406 virtual void copyPalColor(
int dst,
int src);
1407 void cyclePalette();
1408 void stopCycle(
int i);
1409 virtual void palManipulateInit(
int resID,
int start,
int end,
int time);
1410 void palManipulate();
1411 uint32 findClosestPaletteColor(byte *palette,
int paletteLength, byte r, byte g, byte b);
1412 void applyGrayscaleToPaletteRange(
int min,
int max);
1413 bool haveToApplyMonkey1PaletteFix();
1416 uint8 *getHEPaletteSlot(uint16 palSlot);
1417 uint16 get16BitColor(uint8 r, uint8 g, uint8 b);
1418 uint32 getPaletteColorFromRGB(byte *palette, byte r, byte g, byte b);
1419 uint32 getPackedRGBColorFromPalette(byte *palette, uint32 color);
1420 void fetchBlackAndWhite(uint32 &black, uint32 &white, byte *palette,
int paletteEntries);
1421 int remapPaletteColor(
int r,
int g,
int b,
int threshold);
1422 void readPCEPalette(
const byte **ptr, byte **dest,
int numEntries);
1423 void colorPCEToRGB(uint16 color, byte *r, byte *g, byte *b);
1424 void setPCETextPalette(uint8 color);
1426 void moveMemInPalRes(
int start,
int end, byte direction);
1427 void setShadowPalette(
int slot,
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1428 void setShadowPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor,
int start,
int end);
1429 virtual void darkenPalette(
int redScale,
int greenScale,
int blueScale,
int startColor,
int endColor);
1432 void markRectAsDirty(
VirtScreenNumber virt,
int left,
int right,
int top,
int bottom,
int dirtybit = 0);
1434 markRectAsDirty(virt, rect.
left, rect.
right, rect.top, rect.bottom, dirtybit);
1438 byte *_compositeBuf;
1439 byte *_hercCGAScaleBuf =
nullptr;
1440 bool _enableEGADithering =
false;
1441 bool _supportsEGADithering =
false;
1443 virtual void drawDirtyScreenParts();
1445 void drawStripToScreen(
VirtScreen *vs,
int x,
int width,
int top,
int bottom);
1447 void mac_markScreenAsDirty(
int x,
int y,
int w,
int h);
1448 void mac_drawStripToScreen(
VirtScreen *vs,
int top,
int x,
int y,
int width,
int height);
1449 void mac_drawIndy3TextBox();
1450 void mac_undrawIndy3TextBox();
1451 void mac_undrawIndy3CreditsText();
1452 void mac_drawBufferToScreen(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1453 void mac_updateCompositeBuffer(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1454 void mac_blitDoubleResImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height);
1455 void mac_applyDoubleResToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch);
1456 void mac_blitEPXImage(
const byte *buffer,
int pitch,
int x,
int y,
int width,
int height,
bool epxRectangleExpansion =
true);
1457 void mac_applyEPXToBuffer(
const byte *inputBuffer, byte *outputBuffer,
int width,
int height,
int inputPitch,
int outputPitch,
int xOffset,
int yOffset,
int bufferWidth,
int bufferHeight);
1458 void mac_scaleCursor(byte *&outCursor,
int &outHotspotX,
int &outHotspotY,
int &outWidth,
int &outHeight);
1459 void mac_toggleSmoothing();
1461 Common::KeyState mac_showOldStyleBannerAndPause(
const char *msg, int32 waitTime);
1463 const byte *postProcessDOSGraphics(
VirtScreen *vs,
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1464 const byte *ditherVGAtoEGA(
int &pitch,
int &x,
int &y,
int &width,
int &height)
const;
1468 byte *getMaskBuffer(
int x,
int y,
int z);
1471 void fadeIn(
int effect);
1472 void fadeOut(
int effect);
1474 void dissolveEffectSelector();
1475 void transitionEffect(
int a);
1476 void dissolveEffect(
int width,
int height);
1477 void scrollEffect(
int dir);
1479 void updateScreenShakeEffect();
1482 double getTimerFrequency();
1483 double getAmigaMusicTimerFrequency();
1486 bool _shakeEnabled =
false;
1487 bool _shakeTempSavedState =
false;
1488 uint _shakeFrame = 0;
1489 uint32 _shakeNextTick = 0;
1490 uint32 _shakeTickCounter = 0;
1491 double _shakeTimerRate;
1492 double _timerFrequency;
1494 void setShake(
int mode);
1496 int _drawObjectQueNr = 0;
1497 byte _drawObjectQue[200];
1510 uint32 gfxUsageBits[410 * 3];
1512 void upgradeGfxUsageBits();
1513 void setGfxUsageBit(
int strip,
int bit);
1514 void clearGfxUsageBit(
int strip,
int bit);
1517 bool testGfxUsageBit(
int strip,
int bit) {
1518 assert(strip >= 0 && strip <
ARRAYSIZE(gfxUsageBits) / 3);
1519 assert(1 <= bit && bit <= 96);
1521 return (gfxUsageBits[3 * strip + bit / 32] & (1 << (bit % 32))) != 0;
1524 bool testGfxAnyUsageBits(
int strip);
1525 bool testGfxObjectUsageBits(
int strip);
1526 bool testGfxOtherUsageBits(
int strip,
int bit);
1529 byte _roomPalette[256];
1530 byte *_shadowPalette =
nullptr;
1531 bool _skipDrawObject = 0;
1535 byte _HEV7ActorPalette[256];
1536 uint8 *_hePalettes =
nullptr;
1537 uint16 _hePaletteSlot = 0;
1538 uint16 *_16BitPalette =
nullptr;
1541 byte *_verbPalette =
nullptr;
1546 int _shadowPaletteSize = 0;
1547 byte _currentPalette[3 * 256];
1548 byte _darkenPalette[3 * 256];
1549 int _paletteChangedCounter = 1;
1551 int _palDirtyMin = 0, _palDirtyMax = 0;
1553 byte _palManipStart = 0, _palManipEnd = 0;
1554 uint16 _palManipCounter = 0;
1555 byte *_palManipPalette =
nullptr;
1556 byte *_palManipIntermediatePal =
nullptr;
1558 bool _haveActorSpeechMsg =
false;
1559 bool _useTalkAnims =
false;
1560 uint16 _defaultTextSpeed = 0;
1562 bool _native_mt32 =
false;
1563 bool _copyProtection =
false;
1564 bool _shadowPalRemap =
false;
1567 uint16 _amigaFirstUsedColor = 0;
1568 byte _amigaPalette[3 * 64];
1569 void amigaPaletteFindFirstUsedColor();
1570 void mapRoomPalette(
int idx);
1571 int remapRoomPaletteColor(
int r,
int g,
int b);
1572 void mapVerbPalette(
int idx);
1573 int remapVerbPaletteColor(
int r,
int g,
int b);
1576 byte *_egaColorMap[2];
1579 uint16 _extraBoxFlags[65];
1582 byte *getBoxMatrixBaseAddr();
1583 byte *getBoxConnectionBase(
int box);
1585 int getNextBox(byte from, byte to);
1587 void setBoxFlags(
int box,
int val);
1588 void setBoxScale(
int box,
int b);
1590 bool checkXYInBoxBounds(
int box,
int x,
int y);
1592 BoxCoords getBoxCoordinates(
int boxnum);
1594 byte getMaskFromBox(
int box);
1595 Box *getBoxBaseAddr(
int box);
1596 byte getBoxFlags(
int box);
1597 int getBoxScale(
int box);
1599 int getScale(
int box,
int x,
int y);
1600 int getScaleFromSlot(
int slot,
int x,
int y);
1610 void setScaleSlot(
int slot,
int x1,
int y1,
int scale1,
int x2,
int y2,
int scale2);
1611 void setBoxScaleSlot(
int box,
int slot);
1612 void convertScaleTableToScaleSlot(
int slot);
1614 void calcItineraryMatrix(byte *itineraryMatrix,
int num);
1615 void createBoxMatrix();
1616 virtual bool areBoxesNeighbors(
int i,
int j);
1621 byte _charsetColorMap[16];
1628 int _textSurfaceMultiplier = 0;
1631 MacGui *_macGui =
nullptr;
1632 bool _useMacGraphicsSmoothing =
true;
1633 byte _completeScreenBuffer[320 * 200];
1636 byte _charsetColor = 0;
1637 byte _charsetData[23][16];
1639 int _charsetBufPos = 0;
1640 byte _charsetBuffer[512];
1642 bool _keepText =
false;
1645 int _nextLeft = 0, _nextTop = 0;
1649 void restoreCharsetBg();
1650 void clearCharsetMask();
1651 void clearTextSurface();
1653 virtual void initCharset(
int charset);
1655 virtual void printString(
int m,
const byte *msg);
1657 virtual bool handleNextCharsetCode(
Actor *a,
int *c);
1658 virtual void drawSentence() {}
1659 virtual void displayDialog();
1661 void drawString(
int a,
const byte *msg);
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);
1667 virtual int convertMessageToString(
const byte *msg, byte *dst,
int dstSize);
1668 int convertIntMessage(byte *dst,
int dstSize,
int var);
1669 int convertVerbMessage(byte *dst,
int dstSize,
int var);
1670 int convertNameMessage(byte *dst,
int dstSize,
int var);
1671 int convertStringMessage(byte *dst,
int dstSize,
int var);
1677 virtual void translateText(
const byte *text, byte *trans_buff,
int transBufferSize);
1679 bool reverseIfNeeded(
const byte *text, byte *reverseBuf,
int reverseBufSize)
const;
1681 Common::CodePage getDialogCodePage()
const;
1684 bool _useCJKMode =
false;
1685 bool _useMultiFont =
false;
1686 int _numLoadedFont = 0;
1687 int _2byteShadow = 0;
1688 bool _force2ByteCharHeight =
false;
1690 int _2byteHeight = 0;
1691 int _2byteWidth = 0;
1693 byte _newLineCharacter = 0;
1694 byte *get2byteCharPtr(
int idx);
1696 bool isScummvmKorTarget();
1697 bool hasLocalizer();
1700 byte *_2byteFontPtr =
nullptr;
1701 byte *_2byteMultiFontPtr[20];
1702 int _2byteMultiHeight[20];
1703 int _2byteMultiWidth[20];
1704 int _2byteMultiShadow[20];
1707 struct TranslatedLine {
1708 uint32 originalTextOffset;
1709 uint32 translatedTextOffset;
1712 struct TranslationRange {
1716 TranslationRange(uint32 left_, uint32 right_) : left(left_), right(right_) {}
1717 TranslationRange() : left(0), right(0) {}
1720 struct TranslationRoom {
1724 bool _existLanguageFile =
false;
1725 bool _isRTL =
false;
1726 byte *_languageBuffer =
nullptr;
1727 int _numTranslatedLines = 0;
1728 TranslatedLine *_translatedLines =
nullptr;
1729 uint16 *_languageLineIndex =
nullptr;
1732 const byte *searchTranslatedLine(
const byte *text,
const TranslationRange &range,
bool useIndex);
1734 virtual void createTextRenderer(GlyphRenderer_v7 *gr) {}
1739 byte VAR_KEYPRESS = 0xFF;
1740 byte VAR_SYNC = 0xFF;
1741 byte VAR_EGO = 0xFF;
1742 byte VAR_CAMERA_POS_X = 0xFF;
1743 byte VAR_HAVE_MSG = 0xFF;
1744 byte VAR_ROOM = 0xFF;
1745 byte VAR_OVERRIDE = 0xFF;
1746 byte VAR_MACHINE_SPEED = 0xFF;
1748 byte VAR_NUM_ACTOR = 0xFF;
1749 byte VAR_CURRENT_LIGHTS = 0xFF;
1750 byte VAR_CURRENTDRIVE = 0xFF;
1751 byte VAR_CURRENTDISK = 0xFF;
1752 byte VAR_TMR_1 = 0xFF;
1753 byte VAR_TMR_2 = 0xFF;
1754 byte VAR_TMR_3 = 0xFF;
1755 byte VAR_MUSIC_TIMER = 0xFF;
1756 byte VAR_ACTOR_RANGE_MIN = 0xFF;
1757 byte VAR_ACTOR_RANGE_MAX = 0xFF;
1758 byte VAR_CAMERA_MIN_X = 0xFF;
1759 byte VAR_CAMERA_MAX_X = 0xFF;
1760 byte VAR_TIMER_NEXT = 0xFF;
1761 byte VAR_VIRT_MOUSE_X = 0xFF;
1762 byte VAR_VIRT_MOUSE_Y = 0xFF;
1763 byte VAR_ROOM_RESOURCE = 0xFF;
1764 byte VAR_LAST_SOUND = 0xFF;
1765 byte VAR_CUTSCENEEXIT_KEY = 0xFF;
1766 byte VAR_OPTIONS_KEY = 0xFF;
1767 byte VAR_TALK_ACTOR = 0xFF;
1768 byte VAR_CAMERA_FAST_X = 0xFF;
1769 byte VAR_SCROLL_SCRIPT = 0xFF;
1770 byte VAR_ENTRY_SCRIPT = 0xFF;
1771 byte VAR_ENTRY_SCRIPT2 = 0xFF;
1772 byte VAR_EXIT_SCRIPT = 0xFF;
1773 byte VAR_EXIT_SCRIPT2 = 0xFF;
1774 byte VAR_VERB_SCRIPT = 0xFF;
1775 byte VAR_SENTENCE_SCRIPT = 0xFF;
1776 byte VAR_INVENTORY_SCRIPT = 0xFF;
1777 byte VAR_CUTSCENE_START_SCRIPT = 0xFF;
1778 byte VAR_CUTSCENE_END_SCRIPT = 0xFF;
1779 byte VAR_CHARINC = 0xFF;
1780 byte VAR_WALKTO_OBJ = 0xFF;
1781 byte VAR_DEBUGMODE = 0xFF;
1782 byte VAR_HEAPSPACE = 0xFF;
1783 byte VAR_RESTART_KEY = 0xFF;
1784 byte VAR_PAUSE_KEY = 0xFF;
1785 byte VAR_MOUSE_X = 0xFF;
1786 byte VAR_MOUSE_Y = 0xFF;
1787 byte VAR_TIMER = 0xFF;
1788 byte VAR_TIMER_TOTAL = 0xFF;
1789 byte VAR_SOUNDCARD = 0xFF;
1790 byte VAR_VIDEOMODE = 0xFF;
1791 byte VAR_MAINMENU_KEY = 0xFF;
1792 byte VAR_FIXEDDISK = 0xFF;
1793 byte VAR_CURSORSTATE = 0xFF;
1794 byte VAR_USERPUT = 0xFF;
1795 byte VAR_SOUNDRESULT = 0xFF;
1796 byte VAR_TALKSTOP_KEY = 0xFF;
1797 byte VAR_FADE_DELAY = 0xFF;
1798 byte VAR_NOSUBTITLES = 0xFF;
1801 byte VAR_SOUNDPARAM = 0xFF;
1802 byte VAR_SOUNDPARAM2 = 0xFF;
1803 byte VAR_SOUNDPARAM3 = 0xFF;
1804 byte VAR_INPUTMODE = 0xFF;
1805 byte VAR_MEMORY_PERFORMANCE = 0xFF;
1806 byte VAR_VIDEO_PERFORMANCE = 0xFF;
1807 byte VAR_ROOM_FLAG = 0xFF;
1808 byte VAR_GAME_LOADED = 0xFF;
1809 byte VAR_NEW_ROOM = 0xFF;
1812 byte VAR_V5_TALK_STRING_Y = 0xFF;
1815 byte VAR_ROOM_WIDTH = 0xFF;
1816 byte VAR_ROOM_HEIGHT = 0xFF;
1817 byte VAR_SUBTITLES = 0xFF;
1818 byte VAR_V6_EMSSPACE = 0xFF;
1821 byte VAR_CAMERA_POS_Y = 0xFF;
1822 byte VAR_CAMERA_MIN_Y = 0xFF;
1823 byte VAR_CAMERA_MAX_Y = 0xFF;
1824 byte VAR_CAMERA_THRESHOLD_X = 0xFF;
1825 byte VAR_CAMERA_THRESHOLD_Y = 0xFF;
1826 byte VAR_CAMERA_SPEED_X = 0xFF;
1827 byte VAR_CAMERA_SPEED_Y = 0xFF;
1828 byte VAR_CAMERA_ACCEL_X = 0xFF;
1829 byte VAR_CAMERA_ACCEL_Y = 0xFF;
1830 byte VAR_CAMERA_DEST_X = 0xFF;
1831 byte VAR_CAMERA_DEST_Y = 0xFF;
1832 byte VAR_CAMERA_FOLLOWED_ACTOR = 0xFF;
1835 byte VAR_VERSION_KEY = 0xFF;
1836 byte VAR_DEFAULT_TALK_DELAY = 0xFF;
1837 byte VAR_CUSTOMSCALETABLE = 0xFF;
1838 byte VAR_BLAST_ABOVE_TEXT = 0xFF;
1839 byte VAR_VOICE_MODE = 0xFF;
1840 byte VAR_MUSIC_BUNDLE_LOADED = 0xFF;
1841 byte VAR_VOICE_BUNDLE_LOADED = 0xFF;
1843 byte VAR_LEFTBTN_DOWN = 0xFF;
1844 byte VAR_RIGHTBTN_DOWN = 0xFF;
1845 byte VAR_LEFTBTN_HOLD = 0xFF;
1846 byte VAR_RIGHTBTN_HOLD = 0xFF;
1847 byte VAR_PRE_SAVELOAD_SCRIPT = 0xFF;
1848 byte VAR_POST_SAVELOAD_SCRIPT = 0xFF;
1849 byte VAR_SAVELOAD_PAGE = 0xFF;
1850 byte VAR_OBJECT_LABEL_FLAG = 0xFF;
1853 byte VAR_CHARSET_MASK = 0xFF;
1856 byte VAR_V6_SOUNDMODE = 0xFF;
1859 byte VAR_CHARCOUNT = 0xFF;
1860 byte VAR_VERB_ALLOWED = 0xFF;
1861 byte VAR_ACTIVE_VERB = 0xFF;
1862 byte VAR_ACTIVE_OBJECT1 = 0xFF;
1863 byte VAR_ACTIVE_OBJECT2 = 0xFF;
1866 byte VAR_ALWAYS_REDRAW_ACTORS = 0xFF;
1867 byte VAR_SKIP_RESET_TALK_ACTOR = 0xFF;
1869 byte VAR_SOUND_CHANNEL = 0xFF;
1870 byte VAR_TALK_CHANNEL = 0xFF;
1871 byte VAR_SOUND_TOKEN_OFFSET = 0xFF;
1872 byte VAR_START_DYN_SOUND_CHANNELS = 0xFF;
1873 byte VAR_SOUND_CALLBACK_SCRIPT = 0xFF;
1875 byte VAR_EARLY_TALKIE_CALLBACK = 0xFF;
1876 byte VAR_EARLY_CHAN_0_CALLBACK = 0xFF;
1877 byte VAR_EARLY_CHAN_1_CALLBACK = 0xFF;
1878 byte VAR_EARLY_CHAN_2_CALLBACK = 0xFF;
1879 byte VAR_EARLY_CHAN_3_CALLBACK = 0xFF;
1881 byte VAR_MAIN_SCRIPT = 0xFF;
1883 byte VAR_DEFAULT_SCRIPT_PRIORITY = 0xFF;
1884 byte VAR_LAST_SCRIPT_PRIORITY = 0xFF;
1886 byte VAR_QUIT_SCRIPT = 0xFF;
1887 byte VAR_ERROR_FLAG = 0xFF;
1888 byte VAR_OPERATION_FAILURE = 0xFF;
1890 byte VAR_COLOR_BLACK = 0xFF;
1893 byte VAR_NUM_GLOBAL_OBJS = 0xFF;
1895 #ifdef USE_RGB_COLOR 1897 Graphics::FontSJIS *_cjkFont =
nullptr;
1901 #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE 1903 bool towns_isRectInStringBox(
int x1,
int y1,
int x2,
int y2);
1904 byte _townsPaletteFlags = 0;
1905 byte _townsCharsetColorMap[16];
1908 void towns_drawStripToScreen(
VirtScreen *vs,
int dstX,
int dstY,
int srcX,
int srcY,
int w,
int h);
1909 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col);
1910 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h);
1911 void towns_clearStrip(
int strip);
1912 #ifdef USE_RGB_COLOR 1913 void towns_setPaletteFromPtr(
const byte *ptr,
int numcolor = -1);
1914 void towns_setTextPaletteFromPtr(
const byte *ptr);
1916 void towns_setupPalCycleField(
int x1,
int y1,
int x2,
int y2);
1917 void towns_processPalCycleField();
1918 void towns_resetPalCycleFields();
1919 void towns_restoreCharsetBg();
1920 void towns_scriptScrollEffect(
int dir);
1922 void requestScroll(
int dir);
1923 void scrollLeft() { requestScroll(-1); }
1924 void scrollRight() { requestScroll(1); }
1925 void towns_waitForScroll(
int waitForDirection,
int threshold = 0);
1926 void towns_updateGfx();
1929 int _numCyclRects = 0;
1930 int _scrollRequest = 0;
1931 int _scrollDeltaAdjust = 0;
1932 bool _scrollNeedDeltaAdjust = 0;
1933 int _refreshDuration[20];
1934 int _refreshArrayPos = 0;
1935 bool _refreshNeedCatchUp =
false;
1936 bool _enableSmoothScrolling =
false;
1937 bool _forceFMTownsHiResMode =
false;
1938 uint32 _scrollTimer = 0;
1939 uint32 _scrollDestOffset = 0;
1940 uint16 _scrollFeedStrips[3];
1944 byte _townsOverrideShadowColor = 0;
1945 byte _textPalette[48];
1946 byte _townsClearLayerFlag = 1;
1947 byte _townsActiveLayerFlags = 3;
1948 static const uint8 _townsLayer2Mask[];
1952 void scrollLeft() { redrawBGStrip(_gdi->_numStrips - 1, 1); }
1953 void scrollRight() { redrawBGStrip(0, 1); }
1954 void towns_updateGfx() {}
1955 void towns_waitForScroll(
int waitForDirection,
int threshold = 0) {}
1956 void towns_fillTopLayerRect(
int x1,
int y1,
int x2,
int y2,
int col) {}
1957 void towns_swapVirtScreenArea(
VirtScreen *vs,
int x,
int y,
int w,
int h) {}
1958 #endif // DISABLE_TOWNS_DUAL_LAYER_MODE #define ARRAYSIZE(x)
Definition: util.h:91
Definition: macgui_impl.h:55
VirtScreenNumber
Definition: gfx.h:161
EngineFeature
Definition: engine.h:253
ErrorCode getCode() const
Definition: error.h:115
Definition: detection.h:118
int16 right
Definition: rect.h:146
Definition: palette.h:153
RenderMode
Definition: rendermode.h:48
No error occurred.
Definition: error.h:48
Common::Path _containerFile
Definition: scumm.h:1089
Definition: resource.h:75
ResType
Definition: scumm.h:257
Definition: macgui_indy3.h:37
Definition: serializer.h:79
Graphics::Surface _textSurface
Definition: scumm.h:1627
int FORCEINLINE GCC_PRINTF(2, 0) int vsprintf_s(T(&dst)[N]
Definition: detection.h:45
Definition: player_towns.h:32
Definition: debugger.h:33
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: macgui_v5.h:33
int16 left
Definition: rect.h:145
Definition: serializer.h:308
Definition: charset.h:155
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
Common::Error run() override
Definition: scumm.h:581
Common::RandomSource _rnd
Definition: scumm.h:549
Definition: macgui_loom.h:33
void void void void void debugC(int level, uint32 debugChannels, MSVC_PRINTF const char *s,...) GCC_PRINTF(3
Definition: base-costume.h:49
Definition: detection.h:132
Language
Definition: language.h:45