rlm@1: // MainWnd.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include rlm@1: rlm@1: #include "resource.h" rlm@1: #include "MainWnd.h" rlm@1: rlm@1: #include "CmdAccelOb.h" rlm@1: #include "FileDlg.h" rlm@1: #include "ModeConfirm.h" rlm@1: #include "Reg.h" rlm@1: #include "WinResUtil.h" rlm@1: #include "WinMiscUtil.h" rlm@1: #include "Input.h" rlm@1: #include "7zip/7zip.h" rlm@1: #include "7zip/OpenArchive.h" rlm@1: #include "LuaOpenDialog.h" rlm@1: #include "ram_search.h" rlm@1: #include "ramwatch.h" rlm@1: #include "Sound.h" rlm@1: #include "VBA.h" rlm@1: rlm@1: #include "../version.h" rlm@1: #include "../common/Util.h" rlm@1: #include "../common/movie.h" rlm@1: #include "../common/vbalua.h" rlm@1: #include "../gba/GBASound.h" rlm@1: #include "../gba/GBAGlobals.h" rlm@1: #include "../gb/gbGlobals.h" rlm@1: rlm@1: #define VBA_CONFIRM_MODE WM_APP + 100 rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // MainWnd rlm@1: rlm@1: MainWnd::MainWnd() rlm@1: { rlm@1: m_hAccelTable = NULL; rlm@1: arrow = LoadCursor(NULL, IDC_ARROW); rlm@1: rlm@1: InitDecoder(); rlm@1: } rlm@1: rlm@1: MainWnd::~MainWnd() rlm@1: { rlm@1: CleanupDecoder(); rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(MainWnd, CWnd) rlm@1: //{{AFX_MSG_MAP(MainWnd) rlm@1: ON_WM_MOVE() rlm@1: ON_WM_SIZE() rlm@1: ON_WM_CLOSE() rlm@1: ON_WM_INITMENUPOPUP() rlm@1: ON_WM_INITMENU() rlm@1: ON_WM_CONTEXTMENU() rlm@1: ON_WM_MOUSEMOVE() rlm@1: ON_WM_ACTIVATE() rlm@1: ON_WM_ACTIVATEAPP() rlm@1: ON_WM_DROPFILES() rlm@1: ON_WM_PAINT() rlm@1: rlm@1: ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout) rlm@1: ON_COMMAND(ID_HELP_FAQ, OnHelpFaq) rlm@1: ON_COMMAND(ID_FILE_OPEN, OnFileOpen) rlm@1: ON_COMMAND(ID_FILE_OPENGAMEBOY, OnFileOpenGBx) rlm@1: ON_COMMAND(ID_FILE_PAUSE, OnFilePause) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_PAUSE, OnUpdateFilePause) rlm@1: ON_COMMAND(ID_FILE_RESET, OnFileReset) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_RESET, OnUpdateFileReset) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_RECENT_FREEZE, OnUpdateFileRecentFreeze) rlm@1: ON_COMMAND(ID_FILE_RECENT_RESET, OnFileRecentReset) rlm@1: ON_COMMAND(ID_FILE_RECENT_FREEZE, OnFileRecentFreeze) rlm@1: ON_COMMAND(ID_FILE_EXIT, OnFileExit) rlm@1: ON_COMMAND(ID_FILE_CLOSE, OnFileClose) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose) rlm@1: ON_COMMAND(ID_FILE_LOAD, OnFileLoad) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOAD, OnUpdateFileLoad) rlm@1: ON_COMMAND(ID_FILE_SAVE, OnFileSave) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) rlm@1: ON_COMMAND(ID_FILE_IMPORT_BATTERYFILE, OnFileImportBatteryfile) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_BATTERYFILE, OnUpdateFileImportBatteryfile) rlm@1: ON_COMMAND(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnFileImportGamesharkcodefile) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKCODEFILE, OnUpdateFileImportGamesharkcodefile) rlm@1: ON_COMMAND(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnFileImportGamesharksnapshot) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_IMPORT_GAMESHARKSNAPSHOT, OnUpdateFileImportGamesharksnapshot) rlm@1: ON_COMMAND(ID_FILE_EXPORT_BATTERYFILE, OnFileExportBatteryfile) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_BATTERYFILE, OnUpdateFileExportBatteryfile) rlm@1: ON_COMMAND(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnFileExportGamesharksnapshot) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_EXPORT_GAMESHARKSNAPSHOT, OnUpdateFileExportGamesharksnapshot) rlm@1: ON_COMMAND(ID_FILE_QUICKSCREENCAPTURE, OnFileQuickScreencapture) rlm@1: ON_COMMAND(ID_FILE_SCREENCAPTURE, OnFileScreencapture) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SCREENCAPTURE, OnUpdateFileScreencapture) rlm@1: ON_COMMAND(ID_FILE_ROMINFORMATION, OnFileRominformation) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_ROMINFORMATION, OnUpdateFileRominformation) rlm@1: ON_COMMAND(ID_FILE_TOGGLEMENU, OnFileTogglemenu) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_TOGGLEMENU, OnUpdateFileTogglemenu) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_6, OnUpdateOptionsFrameskipThrottle6) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_15, OnUpdateOptionsFrameskipThrottle15) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnUpdateOptionsFrameskipThrottle25) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnUpdateOptionsFrameskipThrottle50) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_75, OnUpdateOptionsFrameskipThrottle75) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnUpdateOptionsFrameskipThrottle100) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_125, OnUpdateOptionsFrameskipThrottle125) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnUpdateOptionsFrameskipThrottle150) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnUpdateOptionsFrameskipThrottle200) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_300, OnUpdateOptionsFrameskipThrottle300) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_400, OnUpdateOptionsFrameskipThrottle400) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_600, OnUpdateOptionsFrameskipThrottle600) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_1000, OnUpdateOptionsFrameskipThrottle1000) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnUpdateOptionsFrameskipThrottleOther) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_INCREASE, OnUpdateOptionsFrameskipThrottleIncrease) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_THROTTLE_DECREASE, OnUpdateOptionsFrameskipThrottleDecrease) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_6, OnOptionsFrameskipThrottle6) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_15, OnOptionsFrameskipThrottle15) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_25, OnOptionsFrameskipThrottle25) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_50, OnOptionsFrameskipThrottle50) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_75, OnOptionsFrameskipThrottle75) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_100, OnOptionsFrameskipThrottle100) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_125, OnOptionsFrameskipThrottle125) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_150, OnOptionsFrameskipThrottle150) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_200, OnOptionsFrameskipThrottle200) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_300, OnOptionsFrameskipThrottle300) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_400, OnOptionsFrameskipThrottle400) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_600, OnOptionsFrameskipThrottle600) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_1000, OnOptionsFrameskipThrottle1000) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_OTHER, OnOptionsFrameskipThrottleOther) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_INCREASE, OnOptionsFrameskipThrottleIncrease) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_THROTTLE_DECREASE, OnOptionsFrameskipThrottleDecrease) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_ACCURATEPITCH, OnOptionsFrameskipAccuratePitch) rlm@1: ON_COMMAND(ID_OPTIONS_FRAMESKIP_ACCURATESPEED, OnOptionsFrameskipAccurateSpeed) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_ACCURATEPITCH, OnUpdateOptionsFrameskipAccuratePitch) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FRAMESKIP_ACCURATESPEED, OnUpdateOptionsFrameskipAccurateSpeed) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_0, OnUpdateOptionsVideoFrameskip0) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_1, OnUpdateOptionsVideoFrameskip1) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_2, OnUpdateOptionsVideoFrameskip2) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_3, OnUpdateOptionsVideoFrameskip3) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_4, OnUpdateOptionsVideoFrameskip4) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_5, OnUpdateOptionsVideoFrameskip5) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_6, OnUpdateOptionsVideoFrameskip6) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_7, OnUpdateOptionsVideoFrameskip7) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_8, OnUpdateOptionsVideoFrameskip8) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FRAMESKIP_9, OnUpdateOptionsVideoFrameskip9) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_VSYNC, OnOptionsVideoVsync) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_VSYNC, OnUpdateOptionsVideoVsync) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X1, OnUpdateOptionsVideoX1) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X2, OnUpdateOptionsVideoX2) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X3, OnUpdateOptionsVideoX3) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_X4, OnUpdateOptionsVideoX4) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnUpdateOptionsVideoFullscreen320x240) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnUpdateOptionsVideoFullscreen640x480) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnUpdateOptionsVideoFullscreen800x600) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN320X240, OnOptionsVideoFullscreen320x240) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN640X480, OnOptionsVideoFullscreen640x480) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN800X600, OnOptionsVideoFullscreen800x600) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREEN, OnOptionsVideoFullscreen) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREEN, OnUpdateOptionsVideoFullscreen) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_DISABLESFX, OnOptionsVideoDisablesfx) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DISABLESFX, OnUpdateOptionsVideoDisablesfx) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnOptionsVideoFullscreenstretchtofit) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_FULLSCREENSTRETCHTOFIT, OnUpdateOptionsVideoFullscreenstretchtofit) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_GDI, OnOptionsVideoRendermethodGdi) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_GDI, OnUpdateOptionsVideoRendermethodGdi) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECTDRAW, OnOptionsVideoRendermethodDirectdraw) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECTDRAW, OnUpdateOptionsVideoRendermethodDirectdraw) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnOptionsVideoRendermethodDirect3d) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_DIRECT3D, OnUpdateOptionsVideoRendermethodDirect3d) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnOptionsVideoRendermethodOpengl) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDERMETHOD_OPENGL, OnUpdateOptionsVideoRendermethodOpengl) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnOptionsVideoTriplebuffering) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_TRIPLEBUFFERING, OnUpdateOptionsVideoTriplebuffering) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_DDRAWEMULATIONONLY, OnOptionsVideoDdrawemulationonly) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DDRAWEMULATIONONLY, OnUpdateOptionsVideoDdrawemulationonly) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_DDRAWUSEVIDEOMEMORY, OnOptionsVideoDdrawusevideomemory) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DDRAWUSEVIDEOMEMORY, OnUpdateOptionsVideoDdrawusevideomemory) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnOptionsVideoRenderoptionsD3dnofilter) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DNOFILTER, OnUpdateOptionsVideoRenderoptionsD3dnofilter) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnOptionsVideoRenderoptionsD3dbilinear) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_D3DBILINEAR, OnUpdateOptionsVideoRenderoptionsD3dbilinear) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnOptionsVideoRenderoptionsGlnearest) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLNEAREST, OnUpdateOptionsVideoRenderoptionsGlnearest) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnOptionsVideoRenderoptionsGlbilinear) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLBILINEAR, OnUpdateOptionsVideoRenderoptionsGlbilinear) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLTRIANGLE, OnOptionsVideoRenderoptionsGltriangle) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLTRIANGLE, OnUpdateOptionsVideoRenderoptionsGltriangle) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLQUADS, OnOptionsVideoRenderoptionsGlquads) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_GLQUADS, OnUpdateOptionsVideoRenderoptionsGlquads) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_SELECTSKIN, OnOptionsVideoRenderoptionsSelectskin) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_SELECTSKIN, OnUpdateOptionsVideoRenderoptionsSelectskin) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_RENDEROPTIONS_SKIN, OnOptionsVideoRenderoptionsSkin) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_RENDEROPTIONS_SKIN, OnUpdateOptionsVideoRenderoptionsSkin) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_ASSOCIATE, OnOptionsEmulatorAssociate) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_DIRECTORIES, OnOptionsEmulatorDirectories) rlm@1: ON_COMMAND_RANGE(ID_OPTIONS_PREFER_ARCHIVE_NAME, ID_OPTIONS_PREFER_ROM_NAME, OnOptionsEmulatorFilenamePreference) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_PREFER_ARCHIVE_NAME, ID_OPTIONS_PREFER_ROM_NAME, OnUpdateOptionsEmulatorFilenamePreference) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_DISABLESTATUSMESSAGES, OnOptionsVideoDisablestatusmessages) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_DISABLESTATUSMESSAGES, OnUpdateOptionsVideoDisablestatusmessages) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnOptionsEmulatorSynchronize) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SYNCHRONIZE, OnUpdateOptionsEmulatorSynchronize) rlm@1: rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_ALWAYSONTOP, OnOptionsEmulatorAlwaysOnTop) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_ALWAYSONTOP, OnUpdateOptionsEmulatorAlwaysOnTop) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnOptionsEmulatorPausewheninactive) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PAUSEWHENINACTIVE, OnUpdateOptionsEmulatorPausewheninactive) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_BACKGROUNDINPUT, OnOptionsEmulatorEnableBackgroundInput) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_BACKGROUNDINPUT, OnUpdateOptionsEmulatorEnableBackgroundInput) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnOptionsEmulatorSpeeduptoggle) rlm@1: rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SPEEDUPTOGGLE, OnUpdateOptionsEmulatorSpeeduptoggle) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_REMOVEINTROSGBA, OnOptionsEmulatorRemoveintrosgba) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_REMOVEINTROSGBA, OnUpdateOptionsEmulatorRemoveintrosgba) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnOptionsEmulatorAutomaticallyipspatch) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AUTOMATICALLYIPSPATCH, OnUpdateOptionsEmulatorAutomaticallyipspatch) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_AGBPRINT, OnOptionsEmulatorAgbprint) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AGBPRINT, OnUpdateOptionsEmulatorAgbprint) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnOptionsEmulatorRealtimeclock) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_REALTIMECLOCK, OnUpdateOptionsEmulatorRealtimeclock) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_AUTOHIDEMENU, OnOptionsEmulatorAutohidemenu) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_AUTOHIDEMENU, OnUpdateOptionsEmulatorAutohidemenu) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_REWINDINTERVAL, OnOptionsEmulatorRewindinterval) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnOptionsEmulatorSavetypeAutomatic) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_AUTOMATIC, OnUpdateOptionsEmulatorSavetypeAutomatic) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnOptionsEmulatorSavetypeEeprom) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROM, OnUpdateOptionsEmulatorSavetypeEeprom) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnOptionsEmulatorSavetypeSram) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_SRAM, OnUpdateOptionsEmulatorSavetypeSram) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnOptionsEmulatorSavetypeFlash) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH, OnUpdateOptionsEmulatorSavetypeFlash) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnOptionsEmulatorSavetypeEepromsensor) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_EEPROMSENSOR, OnUpdateOptionsEmulatorSavetypeEepromsensor) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnOptionsEmulatorSavetypeNone) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_NONE, OnUpdateOptionsEmulatorSavetypeNone) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnOptionsEmulatorSavetypeFlash512k) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH512K, OnUpdateOptionsEmulatorSavetypeFlash512k) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnOptionsEmulatorSavetypeFlash1m) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SAVETYPE_FLASH1M, OnUpdateOptionsEmulatorSavetypeFlash1m) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_USEBIOSFILE, OnOptionsEmulatorUsebiosfile) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_USEBIOSFILE, OnUpdateOptionsEmulatorUsebiosfile) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SKIPBIOS, OnOptionsEmulatorSkipbios) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_SKIPBIOS, OnUpdateOptionsEmulatorSkipbios) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_SELECTBIOSFILE, OnOptionsEmulatorSelectbiosfile) rlm@1: rlm@1: ON_COMMAND(ID_EMULATOR_USE_OLD_FRAME_TIMING, OnOptionsEmulatorUseOldGBTiming) rlm@1: ON_UPDATE_COMMAND_UI(ID_EMULATOR_USE_OLD_FRAME_TIMING, OnUpdateOptionsEmulatorUseOldGBTiming) rlm@1: ON_COMMAND(ID_EMULATOR_USE_GB_INPUT_KLUDGE, OnOptionsEmulatorUseGBNullInputKludge) rlm@1: ON_UPDATE_COMMAND_UI(ID_EMULATOR_USE_GB_INPUT_KLUDGE, OnUpdateOptionsEmulatorUseGBNullInputKludge) rlm@1: ON_COMMAND(ID_EMULATOR_GBALAG, OnOptionsEmulatorGBALag) rlm@1: ON_UPDATE_COMMAND_UI(ID_EMULATOR_GBALAG, OnUpdateOptionsEmulatorGBALag) rlm@1: rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_PNGFORMAT, OnOptionsEmulatorPngformat) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_PNGFORMAT, OnUpdateOptionsEmulatorPngformat) rlm@1: ON_COMMAND(ID_OPTIONS_EMULATOR_BMPFORMAT, OnOptionsEmulatorBmpformat) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_EMULATOR_BMPFORMAT, OnUpdateOptionsEmulatorBmpformat) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_DISABLE, OnOptionsSoundDisable) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DISABLE, OnUpdateOptionsSoundDisable) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_MUTE, OnOptionsSoundMute) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTE, OnUpdateOptionsSoundMute) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_OFF, OnOptionsSoundOff) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_OFF, OnUpdateOptionsSoundOff) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_ON, OnOptionsSoundOn) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ON, OnUpdateOptionsSoundOn) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_USEOLDSYNCHRONIZATION, OnOptionsSoundUseoldsynchronization) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_USEOLDSYNCHRONIZATION, OnUpdateOptionsSoundUseoldsynchronization) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_ECHO, OnOptionsSoundEcho) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_ECHO, OnUpdateOptionsSoundEcho) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_LOWPASSFILTER, OnOptionsSoundLowpassfilter) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_LOWPASSFILTER, OnUpdateOptionsSoundLowpassfilter) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_REVERSESTEREO, OnOptionsSoundReversestereo) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_REVERSESTEREO, OnUpdateOptionsSoundReversestereo) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_MUTEFRAMEADVANCE, OnOptionsSoundMuteFrameAdvance) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTEFRAMEADVANCE, OnUpdateOptionsSoundMuteFrameAdvance) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_MUTEWHENINACTIVE, OnOptionsSoundMuteWhenInactive) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_MUTEWHENINACTIVE, OnUpdateOptionsSoundMuteWhenInactive) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_11KHZ, OnOptionsSound11khz) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_11KHZ, OnUpdateOptionsSound11khz) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_22KHZ, OnOptionsSound22khz) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_22KHZ, OnUpdateOptionsSound22khz) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_44KHZ, OnOptionsSound44khz) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_44KHZ, OnUpdateOptionsSound44khz) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL1, OnOptionsSoundChannel1) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL1, OnUpdateOptionsSoundChannel1) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL2, OnOptionsSoundChannel2) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL2, OnUpdateOptionsSoundChannel2) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL3, OnOptionsSoundChannel3) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL3, OnUpdateOptionsSoundChannel3) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_CHANNEL4, OnOptionsSoundChannel4) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_CHANNEL4, OnUpdateOptionsSoundChannel4) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnOptionsSoundDirectsounda) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDA, OnUpdateOptionsSoundDirectsounda) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnOptionsSoundDirectsoundb) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_DIRECTSOUNDB, OnUpdateOptionsSoundDirectsoundb) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDER, OnOptionsGameboyBorder) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDER, OnUpdateOptionsGameboyBorder) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_PRINTER, OnOptionsGameboyPrinter) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_PRINTER, OnUpdateOptionsGameboyPrinter) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnOptionsGameboyBorderAutomatic) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_BORDERAUTOMATIC, OnUpdateOptionsGameboyBorderAutomatic) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnOptionsGameboyAutomatic) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_AUTOMATIC, OnUpdateOptionsGameboyAutomatic) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_GBA, OnOptionsGameboyGba) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GBA, OnUpdateOptionsGameboyGba) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_CGB, OnOptionsGameboyCgb) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_CGB, OnUpdateOptionsGameboyCgb) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB, OnOptionsGameboySgb) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB, OnUpdateOptionsGameboySgb) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_SGB2, OnOptionsGameboySgb2) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_SGB2, OnUpdateOptionsGameboySgb2) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_GB, OnOptionsGameboyGb) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GB, OnUpdateOptionsGameboyGb) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_REALCOLORS, OnOptionsGameboyRealcolors) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_REALCOLORS, OnUpdateOptionsGameboyRealcolors) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnOptionsGameboyGameboycolors) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_GAMEBOY_GAMEBOYCOLORS, OnUpdateOptionsGameboyGameboycolors) rlm@1: ON_COMMAND(ID_OPTIONS_GAMEBOY_COLORS, OnOptionsGameboyColors) rlm@1: ON_COMMAND(ID_OPTIONS_FILTER_DISABLEMMX, OnOptionsFilterDisablemmx) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_FILTER_DISABLEMMX, OnUpdateOptionsFilterDisablemmx) rlm@1: ON_COMMAND(ID_OPTIONS_LANGUAGE_SYSTEM, OnOptionsLanguageSystem) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_SYSTEM, OnUpdateOptionsLanguageSystem) rlm@1: ON_COMMAND(ID_OPTIONS_LANGUAGE_ENGLISH, OnOptionsLanguageEnglish) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_ENGLISH, OnUpdateOptionsLanguageEnglish) rlm@1: ON_COMMAND(ID_OPTIONS_LANGUAGE_OTHER, OnOptionsLanguageOther) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_LANGUAGE_OTHER, OnUpdateOptionsLanguageOther) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnOptionsJoypadConfigure1) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_1, OnUpdateOptionsJoypadConfigure1) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnOptionsJoypadConfigure2) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_2, OnUpdateOptionsJoypadConfigure2) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnOptionsJoypadConfigure3) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_3, OnUpdateOptionsJoypadConfigure3) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnOptionsJoypadConfigure4) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_CONFIGURE_4, OnUpdateOptionsJoypadConfigure4) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnOptionsJoypadMotionconfigure) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_MOTIONCONFIGURE, OnUpdateOptionsJoypadMotionconfigure) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_ALLOWLEFTRIGHT, OnOptionsJoypadAllowLeftRight) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_ALLOWLEFTRIGHT, OnUpdateOptionsJoypadAllowLeftRight) rlm@1: ON_COMMAND(ID_OPTIONS_JOYPAD_AUTOFIRE_ACCOUNTFORLAG, OnOptionsJoypadAutofireAccountForLag) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_JOYPAD_AUTOFIRE_ACCOUNTFORLAG, OnUpdateOptionsJoypadAutofireAccountForLag) rlm@1: ON_COMMAND(ID_CHEATS_SEARCHFORCHEATS, OnCheatsSearchforcheats) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_SEARCHFORCHEATS, OnUpdateCheatsSearchforcheats) rlm@1: ON_COMMAND(ID_CHEATS_CHEATLIST, OnCheatsCheatlist) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_CHEATLIST, OnUpdateCheatsCheatlist) rlm@1: ON_COMMAND(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnCheatsAutomaticsaveloadcheats) rlm@1: ON_COMMAND(ID_CHEATS_PAUSEDURINGCHEATSEARCH, OnCheatsPauseDuringCheatSearch) rlm@1: ON_COMMAND(ID_CHEATS_LOADCHEATLIST, OnCheatsLoadcheatlist) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_LOADCHEATLIST, OnUpdateCheatsLoadcheatlist) rlm@1: ON_COMMAND(ID_CHEATS_SAVECHEATLIST, OnCheatsSavecheatlist) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_SAVECHEATLIST, OnUpdateCheatsSavecheatlist) rlm@1: ON_COMMAND(ID_TOOLS_DISASSEMBLE, OnToolsDisassemble) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_DISASSEMBLE, OnUpdateToolsDisassemble) rlm@1: ON_COMMAND(ID_TOOLS_LOGGING, OnToolsLogging) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_LOGGING, OnUpdateToolsLogging) rlm@1: ON_COMMAND(ID_TOOLS_IOVIEWER, OnToolsIoviewer) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_IOVIEWER, OnUpdateToolsIoviewer) rlm@1: ON_COMMAND(ID_TOOLS_MAPVIEW, OnToolsMapview) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_MAPVIEW, OnUpdateToolsMapview) rlm@1: ON_COMMAND(ID_TOOLS_MEMORYVIEWER, OnToolsMemoryviewer) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_MEMORYVIEWER, OnUpdateToolsMemoryviewer) rlm@1: ON_COMMAND(ID_TOOLS_OAMVIEWER, OnToolsOamviewer) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_OAMVIEWER, OnUpdateToolsOamviewer) rlm@1: ON_COMMAND(ID_TOOLS_PALETTEVIEW, OnToolsPaletteview) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_PALETTEVIEW, OnUpdateToolsPaletteview) rlm@1: ON_COMMAND(ID_TOOLS_TILEVIEWER, OnToolsTileviewer) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_TILEVIEWER, OnUpdateToolsTileviewer) rlm@1: rlm@1: ON_COMMAND(ID_DEBUG_NEXTFRAME, OnDebugNextframe) rlm@1: ON_UPDATE_COMMAND_UI(ID_DEBUG_NEXTFRAME, OnUpdateDebugNextframe) rlm@1: ON_COMMAND(ID_DEBUG_NEXTFRAME_ACCOUNTFORLAG, OnDebugNextframeAccountForLag) rlm@1: ON_UPDATE_COMMAND_UI(ID_DEBUG_NEXTFRAME_ACCOUNTFORLAG, OnUpdateDebugNextframeAccountForLag) rlm@1: ON_COMMAND(ID_DEBUG_FRAMESEARCH, OnDebugFramesearch) rlm@1: ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCH, OnUpdateDebugFramesearch) rlm@1: ON_COMMAND(ID_DEBUG_FRAMESEARCHPREV, OnDebugFramesearchPrev) rlm@1: ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCHPREV, OnUpdateDebugFramesearchPrev) rlm@1: ON_COMMAND(ID_DEBUG_FRAMESEARCHLOAD, OnDebugFramesearchLoad) rlm@1: ON_UPDATE_COMMAND_UI(ID_DEBUG_FRAMESEARCHLOAD, OnUpdateDebugFramesearchLoad) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_AUTOMATICSAVELOADCHEATS, OnUpdateCheatsAutomaticsaveloadcheats) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_PAUSEDURINGCHEATSEARCH, OnUpdateCheatsPauseDuringCheatSearch) rlm@1: ON_COMMAND(ID_TOOLS_FRAMECOUNTER, OnToolsFrameCounter) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_FRAMECOUNTER, OnUpdateToolsFrameCounter) rlm@1: ON_COMMAND(ID_TOOLS_LAGCOUNTER, OnToolsLagCounter) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_LAGCOUNTER, OnUpdateToolsLagCounter) rlm@1: ON_COMMAND(ID_TOOLS_EXTRACOUNTER, OnToolsExtraCounter) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_EXTRACOUNTER, OnUpdateToolsExtraCounter) rlm@1: ON_COMMAND(ID_TOOLS_EXTRACOUNTERRESET, OnToolsExtraCounterReset) rlm@1: ON_COMMAND(ID_TOOLS_INPUTDISPLAY, OnToolsInputDisplay) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_INPUTDISPLAY, OnUpdateToolsInputDisplay) rlm@1: ON_COMMAND(ID_TOOLS_DEBUG_GDB, OnToolsDebugGdb) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_GDB, OnUpdateToolsDebugGdb) rlm@1: ON_COMMAND(ID_TOOLS_DEBUG_LOADANDWAIT, OnToolsDebugLoadandwait) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_LOADANDWAIT, OnUpdateToolsDebugLoadandwait) rlm@1: ON_COMMAND(ID_TOOLS_DEBUG_BREAK, OnToolsDebugBreak) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_BREAK, OnUpdateToolsDebugBreak) rlm@1: ON_COMMAND(ID_TOOLS_DEBUG_DISCONNECT, OnToolsDebugDisconnect) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_DEBUG_DISCONNECT, OnUpdateToolsDebugDisconnect) rlm@1: rlm@1: ON_COMMAND(ID_TOOLS_SOUNDRECORDING, OnToolsSoundRecording) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_SOUNDRECORDING, OnUpdateToolsSoundRecording) rlm@1: ON_COMMAND(ID_TOOLS_AVIRECORDING, OnToolsAVIRecording) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_AVIRECORDING, OnUpdateToolsAVIRecording) rlm@1: ON_COMMAND(ID_TOOLS_PAUSEAVIRECORDING, OnToolsPauseAVIRecording) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_PAUSEAVIRECORDING, OnUpdateToolsPauseAVIRecording) rlm@1: rlm@1: ON_COMMAND(ID_MOVIE_RECORD, OnToolsRecordMovie) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_RECORD, OnUpdateToolsRecordMovie) rlm@1: ON_COMMAND(ID_MOVIE_STOP, OnToolsStopMovie) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_STOP, OnUpdateToolsStopMovie) rlm@1: ON_COMMAND(ID_MOVIE_PLAY, OnToolsPlayMovie) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_PLAY, OnUpdateToolsPlayMovie) rlm@1: ON_COMMAND(ID_MOVIE_READONLY, OnToolsPlayReadOnly) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_READONLY, OnUpdateToolsPlayReadOnly) rlm@1: ON_COMMAND(ID_MOVIE_ASSC_WITH_SAVESTATE, OnAsscWithSaveState) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_ASSC_WITH_SAVESTATE, OnUpdateAsscWithSaveState) rlm@1: ON_COMMAND(ID_MOVIE_RESUME_RECORD, OnToolsResumeRecord) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_RESUME_RECORD, OnUpdateToolsResumeRecord) rlm@1: ON_COMMAND(ID_MOVIE_RESTART_PLAY, OnToolsPlayRestart) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_RESTART_PLAY, OnUpdateToolsPlayRestart) rlm@1: rlm@1: ON_COMMAND(ID_MOVIE_END_PAUSE, OnToolsOnMovieEndPause) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_END_PAUSE, OnUpdateToolsOnMovieEndPause) rlm@1: ON_COMMAND(ID_MOVIE_END_STOP, OnToolsOnMovieEndStop) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_END_STOP, OnUpdateToolsOnMovieEndStop) rlm@1: ON_COMMAND(ID_MOVIE_END_RESTART, OnToolsOnMovieEndRestart) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_END_RESTART, OnUpdateToolsOnMovieEndRestart) rlm@1: ON_COMMAND(ID_MOVIE_END_APPEND, OnToolsOnMovieEndAppend) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_END_APPEND, OnUpdateToolsOnMovieEndAppend) rlm@1: ON_COMMAND(ID_MOVIE_END_KEEP, OnToolsOnMovieEndKeep) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_END_KEEP, OnUpdateToolsOnMovieEndKeep) rlm@1: rlm@1: ON_COMMAND(ID_MOVIE_TOOL_SET_PAUSE_AT, OnToolsMovieSetPauseAt) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_SET_PAUSE_AT, OnUpdateToolsSetMoviePauseAt) rlm@1: ON_COMMAND(ID_MOVIE_TOOL_CONVERT, OnToolsMovieConvertCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_CONVERT, OnUpdateToolsMovieConvertCurrent) rlm@1: ON_COMMAND(ID_MOVIE_TOOL_AUTO_CONVERT, OnToolsMovieAutoConvert) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_AUTO_CONVERT, OnUpdateToolsMovieAutoConvert) rlm@1: ON_COMMAND(ID_MOVIE_TOOL_FIX_HEADER, OnToolsMovieFixHeader) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_FIX_HEADER, OnUpdateToolsMovieFixHeader) rlm@1: ON_COMMAND(ID_MOVIE_TOOL_TRUNCATE, OnToolsMovieTruncateAtCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_TRUNCATE, OnUpdateToolsMovieTruncateAtCurrent) rlm@1: ON_COMMAND(ID_MOVIE_TOOL_EXTRACT_FROM_SAVEGAME, OnToolsMovieExtractFromSavegame) rlm@1: ON_UPDATE_COMMAND_UI(ID_MOVIE_TOOL_EXTRACT_FROM_SAVEGAME, OnUpdateToolsMovieExtractFromSavegame) rlm@1: rlm@1: ON_COMMAND(ID_TOOLS_REWIND, OnToolsRewind) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_REWIND, OnUpdateToolsRewind) rlm@1: ON_COMMAND(ID_TOOLS_CUSTOMIZE, OnToolsCustomize) rlm@1: ON_UPDATE_COMMAND_UI(ID_TOOLS_CUSTOMIZE, OnUpdateToolsCustomize) rlm@1: // ON_COMMAND(ID_TOOLS_CUSTOMIZE_COMMON, OnToolsCustomizeCommon) rlm@1: // ON_UPDATE_COMMAND_UI(ID_TOOLS_CUSTOMIZE_COMMON, OnUpdateToolsCustomizeCommon) rlm@1: ON_COMMAND(ID_HELP_BUGREPORT, OnHelpBugreport) rlm@1: rlm@1: ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE10, OnFileRecentFile) rlm@1: ON_COMMAND_EX_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnFileLoadSlot) rlm@1: ON_COMMAND_EX_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnFileSaveSlot) rlm@1: ON_COMMAND_EX_RANGE(ID_SELECT_SLOT1, ID_SELECT_SLOT10, OnSelectSlot) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE10, OnUpdateFileRecentFile) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_LOADGAME_SLOT1, ID_FILE_LOADGAME_SLOT10, OnUpdateFileLoadSlot) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_SAVEGAME_SLOT1, ID_FILE_SAVEGAME_SLOT10, OnUpdateFileSaveSlot) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_SELECT_SLOT1, ID_SELECT_SLOT10, OnUpdateSelectSlot) rlm@1: rlm@1: ON_COMMAND(ID_FILE_SAVEGAME_OLDESTSLOT, OnFileSavegameOldestslot) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_OLDESTSLOT, OnUpdateFileSavegameOldestslot) rlm@1: ON_COMMAND(ID_FILE_LOADGAME_MOSTRECENT, OnFileLoadgameMostrecent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MOSTRECENT, OnUpdateFileLoadgameMostrecent) rlm@1: ON_COMMAND(ID_FILE_SAVEGAME_CURRENT, OnFileSavegameCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_CURRENT, OnUpdateFileSavegameCurrent) rlm@1: ON_COMMAND(ID_FILE_LOADGAME_CURRENT, OnFileLoadgameCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_CURRENT, OnUpdateFileLoadgameCurrent) rlm@1: ON_COMMAND(ID_FILE_LOADGAME_MAKECURRENT, OnFileLoadgameMakeCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MAKECURRENT, OnUpdateFileLoadgameMakeCurrent) rlm@1: ON_COMMAND(ID_FILE_SAVEGAME_MAKECURRENT, OnFileSavegameMakeCurrent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_MAKECURRENT, OnUpdateFileSavegameMakeCurrent) rlm@1: rlm@1: ON_COMMAND(ID_FILE_SAVEGAME_INCREMENTSLOT, OnFileSavegameIncrementSlot) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_INCREMENTSLOT, OnUpdateFileSavegameIncrementSlot) rlm@1: ON_COMMAND(ID_FILE_SAVEGAME_DECREMENTSLOT, OnFileSavegameDecrementSlot) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SAVEGAME_DECREMENTSLOT, OnUpdateFileSavegameDecrementSlot) rlm@1: ON_COMMAND(ID_FILE_SLOT_DISPLAYMODIFICATIONTIME, OnFileSlotDisplayModificationTime) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_SLOT_DISPLAYMODIFICATIONTIME, OnUpdateFileSlotDisplayModificationTime) rlm@1: rlm@1: ON_COMMAND(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnFileLoadgameAutoloadmostrecent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_AUTOLOADMOSTRECENT, OnUpdateFileLoadgameAutoloadmostrecent) rlm@1: ON_COMMAND(ID_FILE_LOADGAME_MAKERECENT, OnFileLoadgameMakeRecent) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LOADGAME_MAKERECENT, OnUpdateFileLoadgameMakeRecent) rlm@1: rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_25X, OnOptionsSoundVolume25x) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_25X, OnUpdateOptionsSoundVolume25x) rlm@1: ON_COMMAND(ID_OPTIONS_SOUND_VOLUME_5X, OnOptionsSoundVolume5x) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_SOUND_VOLUME_5X, OnUpdateOptionsSoundVolume5x) rlm@1: ON_COMMAND(ID_CHEATS_DISABLECHEATS, OnCheatsDisablecheats) rlm@1: ON_UPDATE_COMMAND_UI(ID_CHEATS_DISABLECHEATS, OnUpdateCheatsDisablecheats) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_FULLSCREENMAXSCALE, OnOptionsVideoFullscreenmaxscale) rlm@1: rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_FRAMESKIP_0, ID_OPTIONS_VIDEO_FRAMESKIP_9, OnOptionsFrameskip) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_X1, ID_OPTIONS_VIDEO_X4, OnOptionVideoSize) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnVideoLayer) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_VIDEO_LAYERS_BG0, ID_OPTIONS_VIDEO_LAYERS_OBJWIN, OnUpdateVideoLayer) rlm@1: ON_COMMAND(ID_SYSTEM_MINIMIZE, OnSystemMinimize) rlm@1: ON_COMMAND(ID_SYSTEM_MAXIMIZE, OnSystemMaximize) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, OnOptionsEmulatorShowSpeed) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_EMULATOR_SHOWSPEED_NONE, rlm@1: ID_OPTIONS_EMULATOR_SHOWSPEED_TRANSPARENT, rlm@1: OnUpdateOptionsEmulatorShowSpeed) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnOptionsSoundVolume) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_SOUND_VOLUME_1X, ID_OPTIONS_SOUND_VOLUME_4X, OnUpdateOptionsSoundVolume) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnOptionsPriority) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_PRIORITY_HIGHEST, ID_OPTIONS_PRIORITY_BELOWNORMAL, OnUpdateOptionsPriority) rlm@1: rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_LQ2X, ID_OPTIONS_FILTER_HQ3X2, OnOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER16BIT_SIMPLE3X, ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL4X, OnOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_NORMAL, ID_OPTIONS_FILTER_TVMODE, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL, ID_OPTIONS_FILTER16BIT_MOTIONBLUREXPERIMENTAL, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_ADVANCEMAMESCALE2X, ID_OPTIONS_FILTER16BIT_SIMPLE2X, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_BILINEAR, ID_OPTIONS_FILTER_BILINEARPLUS, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_SCANLINES, ID_OPTIONS_FILTER_SCANLINES, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_LQ2X, ID_OPTIONS_FILTER_HQ3X2, OnUpdateOptionsFilter) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER16BIT_SIMPLE3X, ID_OPTIONS_FILTER16BIT_PIXELATEEXPERIMENTAL4X, OnUpdateOptionsFilter) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, OnOptionsFilterIFB) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_FILTER_INTERFRAMEBLENDING_NONE, rlm@1: ID_OPTIONS_FILTER_INTERFRAMEBLENDING_SMART, rlm@1: OnUpdateOptionsFilterIFB) rlm@1: rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnOptionsJoypadDefault) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_1, ID_OPTIONS_JOYPAD_DEFAULTJOYPAD_4, OnUpdateOptionsJoypadDefault) rlm@1: ON_COMMAND_EX_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_CLEAR, OnOptionsJoypadAutofire) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_JOYPAD_AUTOFIRE_A, ID_OPTIONS_JOYPAD_AUTOFIRE_CLEAR, OnUpdateOptionsJoypadAutofire) rlm@1: ON_COMMAND_EX_RANGE(ID_STICKY_A, ID_STICKY_CLEAR, OnOptionsJoypadSticky) rlm@1: ON_UPDATE_COMMAND_UI_RANGE(ID_STICKY_A, ID_STICKY_CLEAR, OnUpdateOptionsJoypadSticky) rlm@1: ON_MESSAGE(VBA_CONFIRM_MODE, OnConfirmMode) rlm@1: ON_MESSAGE(WM_SYSCOMMAND, OnMySysCommand) rlm@1: ON_COMMAND(ID_OPTIONS_VIDEO_TEXTDISPLAYOPTIONS, OnOptionsVideoTextdisplayoptions) rlm@1: ON_UPDATE_COMMAND_UI(ID_OPTIONS_VIDEO_TEXTDISPLAYOPTIONS, OnUpdateOptionsVideoTextdisplayoptions) rlm@1: rlm@1: ON_COMMAND(ID_FILE_LUA_OPEN, OnFileLuaOpen) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LUA_OPEN, OnUpdateFileLuaOpen) rlm@1: ON_COMMAND(ID_FILE_LUA_CLOSE_ALL, OnFileLuaCloseAll) rlm@1: ON_UPDATE_COMMAND_UI(ID_FILE_LUA_CLOSE_ALL, OnUpdateFileLuaCloseAll) rlm@1: ON_COMMAND(ID_FILE_LUA_RELOAD, OnFileLuaReload) rlm@1: ON_COMMAND(ID_FILE_LUA_STOP, OnFileLuaStop) rlm@1: ON_COMMAND(ID_RAM_SEARCH, OnFileRamSearch) rlm@1: ON_UPDATE_COMMAND_UI(ID_RAM_SEARCH, OnUpdateFileRamSearch) rlm@1: ON_COMMAND(ID_RAM_WATCH, OnFileRamWatch) rlm@1: ON_UPDATE_COMMAND_UI(ID_RAM_WATCH, OnUpdateFileRamWatch) rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // MainWnd message handlers rlm@1: rlm@1: bool vbaShuttingDown = false; rlm@1: rlm@1: void MainWnd::OnClose() rlm@1: { rlm@1: vbaShuttingDown = true; // HACK to fix crash on exit while memory viewer is open rlm@1: rlm@1: CWnd::OnClose(); rlm@1: rlm@1: delete this; rlm@1: } rlm@1: rlm@1: void MainWnd::OnMove(int x, int y) rlm@1: { rlm@1: CWnd::OnMove(x, y); rlm@1: rlm@1: if (!theApp.changingVideoSize) rlm@1: { rlm@1: if (this) rlm@1: { rlm@1: if (!IsIconic() && !IsZoomed()) rlm@1: { rlm@1: RECT r; rlm@1: rlm@1: GetWindowRect(&r); rlm@1: theApp.windowPositionX = r.left; rlm@1: theApp.windowPositionY = r.top; rlm@1: theApp.adjustDestRect(); rlm@1: regSetDwordValue("windowX", theApp.windowPositionX); rlm@1: regSetDwordValue("windowY", theApp.windowPositionY); rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: void MainWnd::OnSize(UINT nType, int cx, int cy) rlm@1: { rlm@1: CWnd::OnSize(nType, cx, cy); rlm@1: rlm@1: static int lastType = -1; rlm@1: rlm@1: // FIXME: hack to re-maximize window after it auto-unmaximizes while loading a ROM rlm@1: if (nType == SIZE_MAXIMIZED && lastType == SIZE_MAXIMIZED) rlm@1: { rlm@1: lastType = -1; rlm@1: ShowWindow(SW_SHOWMAXIMIZED); rlm@1: MoveWindow(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); rlm@1: return; rlm@1: } rlm@1: rlm@1: lastType = nType; rlm@1: rlm@1: if (IsIconic()) rlm@1: { rlm@1: theApp.iconic = true; rlm@1: return; rlm@1: } rlm@1: else if (theApp.iconic) rlm@1: { rlm@1: theApp.iconic = false; rlm@1: } rlm@1: rlm@1: if (!theApp.changingVideoSize) rlm@1: { rlm@1: if (this) rlm@1: { rlm@1: if (theApp.videoOption <= VIDEO_4X) rlm@1: { rlm@1: theApp.surfaceSizeX = cx; rlm@1: theApp.surfaceSizeY = cy; rlm@1: theApp.adjustDestRect(); rlm@1: if (theApp.display) rlm@1: theApp.display->resize(theApp.dest.right - theApp.dest.left, theApp.dest.bottom - theApp.dest.top); rlm@1: systemRefreshScreen(); // useful when shrinking rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: void MainWnd::OnContextMenu(CWnd *pWnd, CPoint point) rlm@1: { rlm@1: winMouseOn(); rlm@1: } rlm@1: rlm@1: void MainWnd::OnSystemMinimize() rlm@1: { rlm@1: ShowWindow(SW_SHOWMINIMIZED); rlm@1: } rlm@1: rlm@1: void MainWnd::OnSystemMaximize() rlm@1: { rlm@1: ShowWindow(SW_SHOWMAXIMIZED); rlm@1: } rlm@1: rlm@1: void MainWnd::OnPaint() rlm@1: { rlm@1: CPaintDC dc(this); // device context for painting, calling BeginPaint/EndPaint internally rlm@1: if (emulating && (!theApp.active || theApp.paused)) rlm@1: { rlm@1: systemRedrawScreen(); rlm@1: } rlm@1: } rlm@1: rlm@1: static bool translatingAccelerator = false; rlm@1: rlm@1: // FIXME: this fix for accel keys is ugly rlm@1: // using too many static variables for a single accel key kludge rlm@1: static bool recursiveCall = true; rlm@1: static bool fullUpdated = false; rlm@1: static bool lastKeyModifier = false; // maybe better check current key press status instead rlm@1: static WPARAM lastKey = 0; rlm@1: rlm@1: BOOL MainWnd::PreTranslateMessage(MSG *pMsg) rlm@1: { rlm@1: if (RamSearchHWnd && ::IsDialogMessage(RamSearchHWnd, pMsg)) rlm@1: { rlm@1: return TRUE; rlm@1: } rlm@1: else if (RamWatchHWnd && ::IsDialogMessage(RamWatchHWnd, pMsg)) rlm@1: { rlm@1: if (RamWatchAccels) rlm@1: TranslateAccelerator(RamWatchHWnd, RamWatchAccels, pMsg); rlm@1: return TRUE; rlm@1: } rlm@1: else if (LuaConsoleHWnd && ::IsDialogMessage(LuaConsoleHWnd, pMsg)) rlm@1: { rlm@1: return TRUE; rlm@1: } rlm@1: else if (CWnd::PreTranslateMessage(pMsg)) rlm@1: { rlm@1: return TRUE; rlm@1: } rlm@1: else if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) rlm@1: { rlm@1: translatingAccelerator = true; rlm@1: rlm@1: bool bHit = theApp.hAccel != NULL && ::TranslateAccelerator(m_hWnd, theApp.hAccel, pMsg); rlm@1: bool isModifier = pMsg->wParam == VK_SHIFT || pMsg->wParam == VK_CONTROL || pMsg->wParam == VK_MENU; rlm@1: rlm@1: // HACK to get around the fact that TranslateAccelerator can't handle modifier-only accelerators rlm@1: // (it would be better to fix TranslateAccelerator, but its code is in a Microsoft library...) rlm@1: if (!bHit) rlm@1: { rlm@1: if (isModifier) rlm@1: { rlm@1: // do a linear loop through all accelerators to find modifier-only ones... rlm@1: CCmdAccelOb *pCmdAccel; rlm@1: WORD wKey; rlm@1: CAccelsOb * pAccelOb; rlm@1: POSITION pos = theApp.winAccelMgr.m_mapAccelTable.GetStartPosition(); rlm@1: const int modifiers = ((pMsg->wParam == VK_SHIFT) ? FSHIFT : ((pMsg->wParam == VK_CONTROL) ? FCONTROL : FALT)); rlm@1: while (pos != NULL) rlm@1: { rlm@1: theApp.winAccelMgr.m_mapAccelTable.GetNextAssoc(pos, wKey, pCmdAccel); rlm@1: POSITION pos = pCmdAccel->m_Accels.GetHeadPosition(); rlm@1: while (pos != NULL) rlm@1: { rlm@1: pAccelOb = pCmdAccel->m_Accels.GetNext(pos); rlm@1: rlm@1: if (pAccelOb->m_wKey == 0) // if accelerator-only rlm@1: { rlm@1: if ((pAccelOb->m_cVirt & modifiers) == modifiers) // if modifier matches rlm@1: { rlm@1: bHit = true; rlm@1: SendMessage(WM_COMMAND, pCmdAccel->m_wIDCommand, 0); // tell Windows to call the right function rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: if (!bHit) rlm@1: { rlm@1: lastKeyModifier = true; rlm@1: } rlm@1: } rlm@1: rlm@1: if (bHit) rlm@1: { rlm@1: if (lastKeyModifier && !isModifier) rlm@1: { rlm@1: fullUpdated = false; rlm@1: lastKeyModifier = false; rlm@1: } rlm@1: rlm@1: if (lastKey != pMsg->wParam) rlm@1: { rlm@1: fullUpdated = false; rlm@1: lastKey = pMsg->wParam; rlm@1: } rlm@1: } rlm@1: rlm@1: translatingAccelerator = false; rlm@1: return bHit ? TRUE : FALSE; rlm@1: } rlm@1: rlm@1: return FALSE; rlm@1: } rlm@1: rlm@1: void MainWnd::OnMouseMove(UINT nFlags, CPoint point) rlm@1: { rlm@1: winMouseOn(); rlm@1: rlm@1: CWnd::OnMouseMove(nFlags, point); rlm@1: } rlm@1: rlm@1: // recursive kludge rlm@1: static void InitMenuKludge(CMenu *pParentMenu, CMenu *pMenu, CCmdTarget *pWnd) rlm@1: { rlm@1: ASSERT(pMenu != NULL); rlm@1: rlm@1: CCmdUI state; rlm@1: state.m_pParentMenu = pParentMenu; rlm@1: state.m_pMenu = pMenu; rlm@1: ASSERT(state.m_pOther == NULL); rlm@1: rlm@1: state.m_nIndexMax = pMenu->GetMenuItemCount(); rlm@1: for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; rlm@1: state.m_nIndex++) rlm@1: { rlm@1: state.m_nID = pMenu->GetMenuItemID(state.m_nIndex); rlm@1: if (state.m_nID == 0) rlm@1: continue; // menu separator or invalid cmd - ignore it rlm@1: rlm@1: ASSERT(state.m_pOther == NULL); rlm@1: ASSERT(state.m_pMenu != NULL); rlm@1: if (state.m_nID == (UINT)-1) rlm@1: { rlm@1: // possibly a popup menu, route to first item of that popup rlm@1: state.m_pSubMenu = pMenu->GetSubMenu(state.m_nIndex); rlm@1: if (state.m_pSubMenu == NULL) rlm@1: { rlm@1: continue; // first item of popup can't be routed to rlm@1: } rlm@1: rlm@1: state.DoUpdate(pWnd, false); rlm@1: if (recursiveCall) rlm@1: { rlm@1: // FIXME: slow recursive calls to fix enabling/disabling of accel keys rlm@1: InitMenuKludge(state.m_pMenu, state.m_pSubMenu, pWnd); rlm@1: } rlm@1: } rlm@1: else rlm@1: { rlm@1: // normal menu item rlm@1: // Auto enable/disable if frame window has 'm_bAutoMenuEnable' rlm@1: // set and command is _not_ a system command. rlm@1: state.m_pSubMenu = NULL; rlm@1: state.DoUpdate(pWnd, state.m_nID < 0xF000); rlm@1: } rlm@1: rlm@1: // adjust for menu deletions and additions rlm@1: UINT nCount = pMenu->GetMenuItemCount(); rlm@1: if (nCount < state.m_nIndexMax) rlm@1: { rlm@1: state.m_nIndex -= (state.m_nIndexMax - nCount); rlm@1: while (state.m_nIndex < nCount && rlm@1: pMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) rlm@1: { rlm@1: state.m_nIndex++; rlm@1: } rlm@1: } rlm@1: state.m_nIndexMax = nCount; rlm@1: } rlm@1: } rlm@1: rlm@1: void MainWnd::OnInitMenuPopup(CMenu *pMenu, UINT nIndex, BOOL bSysMenu) rlm@1: { rlm@1: ASSERT(pMenu != NULL); rlm@1: rlm@1: CCmdUI state; rlm@1: state.m_pMenu = pMenu; rlm@1: ASSERT(state.m_pOther == NULL); rlm@1: ASSERT(state.m_pParentMenu == NULL); rlm@1: rlm@1: // determine if menu is popup in top-level menu and set m_pOther to rlm@1: // it if so (m_pParentMenu == NULL indicates that it is secondary popup) rlm@1: HMENU hParentMenu; rlm@1: if (AfxGetThreadState()->m_hTrackingMenu == pMenu->m_hMenu) rlm@1: state.m_pParentMenu = pMenu; // parent == child for tracking popup rlm@1: else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) rlm@1: { rlm@1: CWnd *pParent = GetTopLevelParent(); rlm@1: // children windows don't have menus -- need to go to the top! rlm@1: if (pParent != NULL && rlm@1: (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) rlm@1: { rlm@1: int nIndexMax = ::GetMenuItemCount(hParentMenu); rlm@1: for (int nIndex = 0; nIndex < nIndexMax; nIndex++) rlm@1: { rlm@1: if (::GetSubMenu(hParentMenu, nIndex) == pMenu->m_hMenu) rlm@1: { rlm@1: // when popup is found, m_pParentMenu is containing menu rlm@1: state.m_pParentMenu = CMenu::FromHandle(hParentMenu); rlm@1: break; rlm@1: } rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: // FIXME: magic to workaround the accel key bug without slowing down too much rlm@1: if (translatingAccelerator && !fullUpdated && state.m_pParentMenu == &theApp.m_menu) rlm@1: { rlm@1: state.m_pMenu = state.m_pParentMenu; rlm@1: recursiveCall = true; rlm@1: fullUpdated = true; rlm@1: } rlm@1: else if (!translatingAccelerator && fullUpdated) rlm@1: { rlm@1: fullUpdated = false; rlm@1: } rlm@1: rlm@1: InitMenuKludge(state.m_pParentMenu, state.m_pMenu, this); rlm@1: rlm@1: recursiveCall = false; rlm@1: } rlm@1: rlm@1: void MainWnd::OnInitMenu(CMenu *pMenu) rlm@1: { rlm@1: // CWnd::OnInitMenu(pMenu); rlm@1: rlm@1: if (translatingAccelerator) rlm@1: {} rlm@1: else rlm@1: { rlm@1: // HACK: we only want to call this if the user is pulling down the menu, rlm@1: // but TranslateAccelerator also causes OnInitMenu to be called, so ignore that rlm@1: rlm@1: systemSoundPause(); rlm@1: } rlm@1: } rlm@1: rlm@1: void MainWnd::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized) rlm@1: { rlm@1: CWnd::OnActivate(nState, pWndOther, bMinimized); rlm@1: rlm@1: bool activated = (nState == WA_ACTIVE || nState == WA_CLICKACTIVE) && !bMinimized; rlm@1: rlm@1: theApp.active = activated || !theApp.pauseWhenInactive; rlm@1: rlm@1: extern bool inputActive; rlm@1: inputActive = activated || (!theApp.pauseWhenInactive && theApp.enableBackgroundInput); rlm@1: rlm@1: if (theApp.active) rlm@1: { rlm@1: if (theApp.input) rlm@1: { rlm@1: theApp.input->activate(); rlm@1: } rlm@1: rlm@1: if (!theApp.paused && emulating) rlm@1: { rlm@1: systemSoundResume(); rlm@1: } rlm@1: } rlm@1: else rlm@1: { rlm@1: theApp.wasPaused = true; rlm@1: rlm@1: if (!theApp.paused && emulating) rlm@1: { rlm@1: systemSoundPause(); rlm@1: } rlm@1: rlm@1: memset(theApp.delta, 255, sizeof(theApp.delta)); rlm@1: } rlm@1: rlm@1: if (theApp.muteWhenInactive) rlm@1: { rlm@1: theApp.winMuteForNow = !activated; rlm@1: } rlm@1: rlm@1: if (theApp.paused && emulating) rlm@1: { rlm@1: systemRefreshScreen(); rlm@1: } rlm@1: } rlm@1: rlm@1: #if _MSC_VER <= 1200 rlm@1: void MainWnd::OnActivateApp(BOOL bActive, HTASK hTask) rlm@1: #else rlm@1: void MainWnd::OnActivateApp(BOOL bActive, DWORD hTask) rlm@1: #endif rlm@1: { rlm@1: CWnd::OnActivateApp(bActive, hTask); rlm@1: rlm@1: if (theApp.tripleBuffering && theApp.videoOption > VIDEO_4X) rlm@1: { rlm@1: if (bActive) rlm@1: { rlm@1: if (theApp.display) rlm@1: theApp.display->clear(); rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: LRESULT MainWnd::OnMySysCommand(WPARAM wParam, LPARAM lParam) rlm@1: { rlm@1: if (emulating && !theApp.paused) rlm@1: { rlm@1: if ((wParam & 0xFFF0) == SC_SCREENSAVE || (wParam & 0xFFF0) == SC_MONITORPOWER) rlm@1: return 0; rlm@1: } rlm@1: return Default(); rlm@1: } rlm@1: rlm@1: void MainWnd::OnDropFiles(HDROP hDropInfo) rlm@1: { rlm@1: // FIXME: required for the accel key fix rlm@1: fullUpdated = false; rlm@1: rlm@1: systemSoundClearBuffer(); rlm@1: rlm@1: char szFile[1024]; rlm@1: char ext[1024]; rlm@1: rlm@1: if (DragQueryFile(hDropInfo, 0, szFile, 1024)) rlm@1: { rlm@1: DragFinish(hDropInfo); rlm@1: rlm@1: _splitpath(szFile, NULL, NULL, NULL, ext); rlm@1: if (strcasecmp(ext, ".lua") == 0) rlm@1: { rlm@1: if (VBALoadLuaCode(szFile)) rlm@1: { rlm@1: // success, there is nothing to do rlm@1: } rlm@1: else rlm@1: { rlm@1: // Errors are displayed by the Lua code. rlm@1: } rlm@1: } rlm@1: else if (strcasecmp(ext, ".vbm") == 0) rlm@1: { rlm@1: SMovie movieInfo; rlm@1: char * movieName = szFile; rlm@1: char romTitle [12]; rlm@1: uint32 romGameCode; rlm@1: uint16 checksum; rlm@1: uint8 crc; rlm@1: rlm@1: if (VBAMovieGetInfo(movieName, &movieInfo) != MOVIE_SUCCESS) rlm@1: { rlm@1: return; rlm@1: } rlm@1: rlm@1: int cartType = movieInfo.header.typeFlags & 1 ? 0 : 1; rlm@1: rlm@1: if (!emulating) rlm@1: { rlm@1: theApp.winCheckFullscreen(); rlm@1: if (winFileOpenSelect(cartType)) rlm@1: { rlm@1: if (VBAMovieActive()) rlm@1: VBAMovieStop(false); // will only get here on user selecting to play a ROM, canceling movie rlm@1: if (!winFileRun()) rlm@1: return; rlm@1: } rlm@1: else rlm@1: return; rlm@1: } rlm@1: VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); rlm@1: rlm@1: while (movieInfo.header.romCRC != crc rlm@1: || strncmp(movieInfo.header.romTitle, romTitle, 12) != 0 rlm@1: || movieInfo.header.romOrBiosChecksum != checksum rlm@1: && !((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == 0 && checksum == 0)) rlm@1: { rlm@1: char msg[1024], warning1[1024], warning2[1024], buffer[1024]; rlm@1: rlm@1: strcpy(warning1, ""); rlm@1: strcpy(warning2, ""); rlm@1: { rlm@1: char str [13]; rlm@1: strncpy(str, movieInfo.header.romTitle, 12); rlm@1: str[12] = '\0'; rlm@1: sprintf(buffer, "title=%s ", str); rlm@1: strcat(warning1, buffer); rlm@1: rlm@1: strncpy(str, romTitle, 12); rlm@1: str[12] = '\0'; rlm@1: sprintf(buffer, "title=%s ", str); rlm@1: strcat(warning2, buffer); rlm@1: } rlm@1: { rlm@1: sprintf(buffer, "type=%s ", rlm@1: (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) ? rlm@1: "GBA" : (movieInfo.header.typeFlags & MOVIE_TYPE_GBC) ? rlm@1: "GBC" : (movieInfo.header.typeFlags & MOVIE_TYPE_SGB) ? "SGB" : "GB"); rlm@1: strcat(warning1, buffer); rlm@1: rlm@1: sprintf(buffer, "type=%s ", systemCartridgeType == rlm@1: 0 ? "GBA" : (gbRom[0x143] & 0x80 ? "GBC" : (gbRom[0x146] == 0x03 ? "SGB" : "GB"))); rlm@1: strcat(warning2, buffer); rlm@1: } rlm@1: { rlm@1: sprintf(buffer, "crc=%02x ", movieInfo.header.romCRC); rlm@1: strcat(warning1, buffer); rlm@1: rlm@1: sprintf(buffer, "crc=%02x ", crc); rlm@1: strcat(warning2, buffer); rlm@1: } rlm@1: { rlm@1: char code [5]; rlm@1: if (movieInfo.header.typeFlags & MOVIE_TYPE_GBA) rlm@1: { rlm@1: memcpy(code, &movieInfo.header.romGameCode, 4); rlm@1: code[4] = '\0'; rlm@1: sprintf(buffer, "code=%s ", code); rlm@1: strcat(warning1, buffer); rlm@1: } rlm@1: rlm@1: if (systemCartridgeType == 0) rlm@1: { rlm@1: memcpy(code, &romGameCode, 4); rlm@1: code[4] = '\0'; rlm@1: sprintf(buffer, "code=%s ", code); rlm@1: strcat(warning2, buffer); rlm@1: } rlm@1: } rlm@1: { rlm@1: sprintf(buffer, rlm@1: movieInfo.header.typeFlags & rlm@1: MOVIE_TYPE_GBA ? ((movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) == rlm@1: 0 ? "(bios=none) " : "(bios=%04x) ") : "check=%04x ", rlm@1: movieInfo.header.romOrBiosChecksum); rlm@1: strcat(warning1, buffer); rlm@1: rlm@1: sprintf(buffer, rlm@1: checksum == 0 ? "(bios=none) " : systemCartridgeType == 0 ? "(bios=%04x) " : "check=%04x ", rlm@1: checksum); rlm@1: strcat(warning2, buffer); rlm@1: } rlm@1: rlm@1: strcpy(msg, ""); rlm@1: sprintf(buffer, "Movie ROM: %s\n", warning1); rlm@1: strcat(msg, buffer); rlm@1: sprintf(buffer, "Your ROM: %s\n", warning2); rlm@1: strcat(msg, buffer); rlm@1: strcat(msg, "still want to play the movie?"); rlm@1: rlm@1: int sel = MessageBox(msg, TEXT("ROM Mismatch"), MB_ABORTRETRYIGNORE | MB_ICONQUESTION); rlm@1: switch (sel) rlm@1: { rlm@1: case IDABORT: rlm@1: return; rlm@1: case IDRETRY: rlm@1: theApp.winCheckFullscreen(); rlm@1: if (winFileOpenSelect(cartType)) rlm@1: { rlm@1: if (VBAMovieActive()) rlm@1: VBAMovieStop(false); // will only get here on user selecting to play a ROM, canceling movie rlm@1: if (!winFileRun()) rlm@1: return; rlm@1: VBAMovieGetRomInfo(movieInfo, romTitle, romGameCode, checksum, crc); rlm@1: } rlm@1: else rlm@1: return; rlm@1: break; rlm@1: default: rlm@1: goto romcheck_exit; rlm@1: } rlm@1: } rlm@1: romcheck_exit: rlm@1: rlm@1: bool useBIOSFile = (movieInfo.header.optionFlags & MOVIE_SETTING_USEBIOSFILE) != 0; rlm@1: if (useBIOSFile) rlm@1: { rlm@1: extern bool systemLoadBIOS(const char *biosFileName, bool useBiosFile); rlm@1: if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) rlm@1: { rlm@1: systemMessage(0, "This movie requires a valid GBA BIOS file to play.\nPlease locate a BIOS file."); rlm@1: ((MainWnd *)theApp.m_pMainWnd)->OnOptionsEmulatorSelectbiosfile(); rlm@1: if (!systemLoadBIOS(theApp.biosFileName, useBIOSFile)) rlm@1: { rlm@1: systemMessage(0, "\"%s\" is not a valid BIOS file; cannot play movie without one.", theApp.biosFileName); rlm@1: return; rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: int code = VBAMovieOpen(movieName, TRUE); rlm@1: rlm@1: if (code != MOVIE_SUCCESS) rlm@1: { rlm@1: if (code == MOVIE_FILE_NOT_FOUND) rlm@1: systemMessage(0, "Could not find movie file \"%s\".", (const char *)movieName); rlm@1: else if (code == MOVIE_WRONG_FORMAT) rlm@1: systemMessage(0, "Movie file \"%s\" is not in proper VBM format.", (const char *)movieName); rlm@1: else if (code == MOVIE_WRONG_VERSION) rlm@1: systemMessage(0, "Movie file \"%s\" is not a supported version.", (const char *)movieName); rlm@1: else rlm@1: systemMessage(0, "Failed to open movie \"%s\".", (const char *)movieName); rlm@1: return; rlm@1: } rlm@1: } rlm@1: else if (strcasecmp(ext, ".wch") == 0) rlm@1: { rlm@1: if (emulating) rlm@1: { rlm@1: MainWnd::OnFileRamWatch(); rlm@1: Load_Watches(true, szFile); rlm@1: } rlm@1: } rlm@1: else rlm@1: { rlm@1: theApp.romFilename = szFile; rlm@1: if (winFileRun()) rlm@1: { rlm@1: SetForegroundWindow(); rlm@1: } rlm@1: } rlm@1: } rlm@1: else rlm@1: DragFinish(hDropInfo); rlm@1: } rlm@1: rlm@1: ///////////////////// rlm@1: rlm@1: void MainWnd::winMouseOn() rlm@1: { rlm@1: SetCursor(arrow); rlm@1: if (theApp.videoOption > VIDEO_4X) rlm@1: { rlm@1: theApp.mouseCounter = 120; rlm@1: } rlm@1: else rlm@1: theApp.mouseCounter = 0; rlm@1: } rlm@1: rlm@1: void MainWnd::winConfirmMode() rlm@1: { rlm@1: if (theApp.renderMethod == DIRECT_DRAW && theApp.videoOption > VIDEO_4X) rlm@1: { rlm@1: theApp.winCheckFullscreen(); rlm@1: ModeConfirm dlg(this); rlm@1: rlm@1: if (!dlg.DoModal()) rlm@1: { rlm@1: theApp.updateVideoSize(ID_OPTIONS_VIDEO_X2); rlm@1: } rlm@1: } rlm@1: } rlm@1: rlm@1: bool MainWnd::winFileOpenSelect(int cartridgeType) rlm@1: { rlm@1: int selectedFilter = regQueryDwordValue("selectedFilter", 0); rlm@1: if (selectedFilter < 0 || selectedFilter > 2) rlm@1: selectedFilter = 0; rlm@1: rlm@1: LPCTSTR exts[] = { NULL }; rlm@1: CString filter = winResLoadFilter(IDS_FILTER_ROM); rlm@1: CString title = winResLoadString(IDS_SELECT_ROM); rlm@1: rlm@1: bool isOverrideEmpty = false; rlm@1: CString initialDir = regQueryStringValue(cartridgeType == 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, NULL); rlm@1: if (initialDir.IsEmpty()) rlm@1: { rlm@1: isOverrideEmpty = true; rlm@1: CString altDir = regQueryStringValue(cartridgeType != 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, NULL); rlm@1: initialDir = altDir.IsEmpty() ? theApp.exeDir : altDir; rlm@1: } rlm@1: rlm@1: FileDlg dlg(this, "", filter, selectedFilter, "ROM", exts, initialDir, title, false, true); rlm@1: rlm@1: if (dlg.DoModal() == IDOK) rlm@1: { rlm@1: regSetDwordValue("selectedFilter", dlg.m_ofn.nFilterIndex); rlm@1: theApp.romFilename = dlg.GetPathName(); rlm@1: initialDir = winGetDirFromFilename(theApp.romFilename); rlm@1: rlm@1: // we have directory override for that purpose rlm@1: // but this can be...desirable rlm@1: if (isOverrideEmpty) rlm@1: regSetStringValue(cartridgeType == 0 ? IDS_ROM_DIR : IDS_GBXROM_DIR, initialDir); rlm@1: return true; rlm@1: } rlm@1: return false; rlm@1: } rlm@1: rlm@1: // some extensions that might commonly be near emulation-related files that we almost certainly can't open, or at least not rlm@1: // directly. rlm@1: // also includes definitely non-ROM extensions we know about, since we only use this variable in a ROM opening function. rlm@1: // we do this by exclusion instead of inclusion because we don't want to exclude extensions used for any archive files, even rlm@1: // extensionless or unusually-named archives. rlm@1: static const char *s_romIgnoreExtensions[] = { rlm@1: "vbm", "sgm", "clt", "dat", "gbs", "gcf", "spc", "xpc", "pal", "act", "dmp", "avi", "ini", "txt", "nfo", rlm@1: "htm", "html", "jpg", "jpeg", "png", "bmp", "gif", "mp3", "wav", "lnk", "exe", "bat", "sav", "luasav" rlm@1: }; rlm@1: rlm@1: #include "GBACheatsDlg.h" rlm@1: #include "GBCheatsDlg.h" rlm@1: rlm@1: #include "../common/CheatSearch.h" rlm@1: #include "../gba/GBA.h" rlm@1: #include "../gb/GB.h" rlm@1: #include "../gba/Flash.h" rlm@1: #include "../gba/RTC.h" rlm@1: rlm@1: void MainWnd::winFileClose(bool reopening) rlm@1: { rlm@1: if (rom != NULL || gbRom != NULL) rlm@1: { rlm@1: if (theApp.autoSaveLoadCheatList) rlm@1: winSaveCheatListDefault(); rlm@1: rlm@1: if (!reopening) rlm@1: { rlm@1: // save battery file before we change the filename... rlm@1: winWriteBatteryFile(); rlm@1: cheatSearchCleanup(&cheatSearchData); rlm@1: capturePrevious = 0; rlm@1: captureNumber = 0; rlm@1: } rlm@1: rlm@1: theApp.emulator.emuCleanUp(); rlm@1: rlm@1: extern void remoteCleanUp(); rlm@1: remoteCleanUp(); rlm@1: } rlm@1: rlm@1: if (VBAMovieActive()) rlm@1: VBAMovieStop(false); // will only get here on user selecting to open a ROM, canceling movie rlm@1: rlm@1: theApp.frameSearching = false; rlm@1: theApp.frameSearchSkipping = false; rlm@1: emulating = 0; rlm@1: rlm@1: if (this) rlm@1: RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN); rlm@1: systemSetTitle(VBA_NAME_AND_VERSION); rlm@1: } rlm@1: rlm@1: bool MainWnd::winFileRun(bool reopening) rlm@1: { rlm@1: int prevCartridgeType = systemCartridgeType; rlm@1: rlm@1: //bool requiresInitRAMSearch = (rom == NULL && gbRom == NULL) || !reopening; rlm@1: winFileClose(reopening); rlm@1: rlm@1: // use ObtainFile to support opening files within archives (.7z, .rar, .zip, .zip.rar.7z, etc.) rlm@1: if (theApp.romFilename.GetLength() > 2048) theApp.romFilename.Truncate(2048); rlm@1: rlm@1: char logicalName[2048], physicalName[2048]; rlm@1: rlm@1: // FIXME: assertion failure in fopen.c if canceled rlm@1: if (ObtainFile(theApp.romFilename, logicalName, physicalName, "rom", s_romIgnoreExtensions, rlm@1: sizeof(s_romIgnoreExtensions) / sizeof(*s_romIgnoreExtensions))) rlm@1: { rlm@1: // theApp.romFilename is exactly the filename used for opening, while theApp.gameFilename is always the logical name rlm@1: theApp.romFilename = theApp.gameFilename = logicalName; rlm@1: ReleaseTempFileCategory("rom", physicalName); rlm@1: } rlm@1: else rlm@1: { rlm@1: return false; rlm@1: } rlm@1: rlm@1: IMAGE_TYPE type = utilFindType(physicalName); rlm@1: rlm@1: if (type == IMAGE_UNKNOWN) rlm@1: { rlm@1: systemMessage(IDS_UNSUPPORTED_FILE_TYPE, rlm@1: "The file \"%s\" is an unsupported type.", logicalName); rlm@1: return false; rlm@1: } rlm@1: systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; rlm@1: systemCartridgeType = (int)type; rlm@1: if (type == IMAGE_GB) rlm@1: { rlm@1: if (!gbLoadRom(physicalName)) rlm@1: return false; rlm@1: rlm@1: gbBorderOn = theApp.winGbBorderOn; rlm@1: theApp.emulator = GBSystem; rlm@1: theApp.romSize = gbRomSize; rlm@1: if (theApp.autoIPS) rlm@1: { rlm@1: CString ipsname = winGetDestFilename(logicalName, IDS_IPS_DIR, ".ips"); rlm@1: int size = gbRomSize; rlm@1: utilApplyIPS(ipsname, &gbRom, &size); rlm@1: if (size != gbRomSize) rlm@1: { rlm@1: extern bool gbUpdateSizes(); rlm@1: gbUpdateSizes(); rlm@1: theApp.romSize = size; rlm@1: } rlm@1: } rlm@1: rlm@1: useBios = false; // FIXME rlm@1: rlm@1: if (reopening) rlm@1: { rlm@1: bool winGbCheatReaddress(); rlm@1: winGbCheatReaddress(); rlm@1: } rlm@1: } rlm@1: else rlm@1: { rlm@1: int size = CPULoadRom(physicalName); rlm@1: if (!size) rlm@1: return false; rlm@1: rlm@1: flashSetSize(theApp.winFlashSize); rlm@1: rtcEnable(theApp.winRtcEnable); rlm@1: cpuSaveType = theApp.winSaveType; rlm@1: rlm@1: // if(cpuEnhancedDetection && winSaveType == 0) { rlm@1: // utilGBAFindSave(rom, size); rlm@1: // } rlm@1: rlm@1: char buffer[5]; rlm@1: strncpy(buffer, (const char *)&rom[0xac], 4); rlm@1: buffer[4] = 0; rlm@1: rlm@1: // vba-over.ini rlm@1: CString vbaOverINI = theApp.exeDir; rlm@1: vbaOverINI += "\\vba-over.ini"; rlm@1: rlm@1: UINT i = GetPrivateProfileInt(buffer, "rtcEnabled", -1, vbaOverINI); rlm@1: if (i != (UINT)-1) rlm@1: rtcEnable(i == 0 ? false : true); rlm@1: rlm@1: i = GetPrivateProfileInt(buffer, "flashSize", -1, vbaOverINI); rlm@1: if (i != (UINT)-1 && (i == 0x10000 || i == 0x20000)) rlm@1: flashSetSize((int)i); rlm@1: rlm@1: i = GetPrivateProfileInt(buffer, "saveType", -1, vbaOverINI); rlm@1: if (i != (UINT)-1 && (i <= 5)) rlm@1: cpuSaveType = (int)i; rlm@1: rlm@1: /* disabled due to problems rlm@1: if(theApp.removeIntros && rom != NULL) { rlm@1: *((u32 *)rom)= 0xea00002e; rlm@1: } rlm@1: */ rlm@1: theApp.emulator = GBASystem; rlm@1: theApp.romSize = size; rlm@1: if (theApp.autoIPS) rlm@1: { rlm@1: CString ipsname = winGetDestFilename(logicalName, IDS_IPS_DIR, ".ips"); rlm@1: int size = 0x2000000; rlm@1: utilApplyIPS(ipsname, &rom, &size); rlm@1: } rlm@1: rlm@1: skipBios = theApp.skipBiosFile ? true : false; rlm@1: CPUInit(); rlm@1: CPULoadBios(theApp.biosFileName, theApp.useBiosFile ? true : false); rlm@1: CPUReset(); rlm@1: rlm@1: if (reopening) rlm@1: { rlm@1: bool winGbaCheatReaddress(); rlm@1: winGbaCheatReaddress(); rlm@1: } rlm@1: } rlm@1: rlm@1: if (theApp.soundInitialized) rlm@1: { rlm@1: if (systemCartridgeType == 1) rlm@1: gbSoundReset(); rlm@1: else rlm@1: soundReset(); rlm@1: } rlm@1: else rlm@1: { rlm@1: if (!soundOffFlag) rlm@1: soundInit(); rlm@1: theApp.soundInitialized = true; rlm@1: } rlm@1: rlm@1: winReadBatteryFile(); rlm@1: rlm@1: emulating = true; rlm@1: rlm@1: if (theApp.autoSaveLoadCheatList) rlm@1: winLoadCheatListDefault(); rlm@1: rlm@1: if (theApp.filenamePreference == 0) rlm@1: theApp.addRecentFile(winGetOriginalFilename(logicalName)); rlm@1: else rlm@1: theApp.addRecentFile(logicalName); rlm@1: rlm@1: theApp.updateWindowSize(theApp.videoOption); rlm@1: rlm@1: theApp.updateFrameSkip(); rlm@1: rlm@1: if (theApp.autoHideMenu && theApp.videoOption > VIDEO_4X && theApp.menuToggle) rlm@1: OnFileTogglemenu(); rlm@1: rlm@1: if (theApp.autoLoadMostRecent && !VBAMovieActive() && !VBAMovieLoading()) // would cause desync in movies... rlm@1: OnFileLoadgameMostrecent(); rlm@1: rlm@1: theApp.renderedFrames = 0; rlm@1: rlm@1: theApp.rewindCount = 0; rlm@1: theApp.rewindCounter = 0; rlm@1: theApp.rewindSaveNeeded = false; rlm@1: rlm@1: { rlm@1: extern bool playMovieFile, playMovieFileReadOnly, outputWavFile, outputAVIFile, flagHideMenu; // from VBA.cpp rlm@1: extern char movieFileToPlay[1024], wavFileToOutput[1024]; // from VBA.cpp rlm@1: extern int pauseAfterTime; // from VBA.cpp rlm@1: if (playMovieFile) rlm@1: { rlm@1: playMovieFile = false; rlm@1: VBAMovieOpen(movieFileToPlay, playMovieFileReadOnly); rlm@1: } rlm@1: if (outputWavFile) rlm@1: { rlm@1: outputWavFile = false; rlm@1: theApp.soundRecordName = wavFileToOutput; rlm@1: theApp.soundRecording = true; rlm@1: } rlm@1: if (outputAVIFile) rlm@1: { rlm@1: outputAVIFile = false; rlm@1: OnToolsStartAVIRecording(); rlm@1: } rlm@1: if (pauseAfterTime >= 0) rlm@1: { rlm@1: VBAMovieSetPauseAt(pauseAfterTime); rlm@1: } rlm@1: if (flagHideMenu) rlm@1: { rlm@1: OnFileTogglemenu(); rlm@1: theApp.updateWindowSize(theApp.videoOption); rlm@1: } rlm@1: } rlm@1: rlm@1: if (systemCartridgeType != prevCartridgeType) rlm@1: { rlm@1: extern GBACheatSearch gbaDlg; rlm@1: extern GBCheatSearch gbDlg; rlm@1: if (!theApp.pauseDuringCheatSearch && theApp.modelessCheatDialogIsOpen) rlm@1: { rlm@1: gbaDlg.DestroyWindow(); rlm@1: gbDlg.DestroyWindow(); rlm@1: theApp.modelessCheatDialogIsOpen = false; rlm@1: } rlm@1: } rlm@1: rlm@1: theApp.winCheckFullscreen(); rlm@1: ReopenRamWindows(); rlm@1: rlm@1: // FIXME rlm@1: reset_address_info(); rlm@1: //if (requiresInitRAMSearch) rlm@1: { rlm@1: // extern void soft_reset_address_info(); rlm@1: // soft_reset_address_info(); rlm@1: } rlm@1: rlm@1: VBAUpdateButtonPressDisplay(); rlm@1: VBAUpdateFrameCountDisplay(); rlm@1: systemRefreshScreen(); rlm@1: rlm@1: return true; rlm@1: } rlm@1: