From f48b76b0fd5e2492ce0b33eff832b83dda04df8d Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 17 Aug 2010 06:00:24 +0000 Subject: [PATCH] add hotkey for quick screenshot, and re-add "force as current" save feature, but hide it (along with all of the save size selections) behind a dev+ only config>advanced menu, since hardly anyone needs to use this feature and it is too powerful. --- desmume/src/mc.cpp | 12 +++++++++ desmume/src/mc.h | 2 ++ desmume/src/windows/hotkey.cpp | 37 ++++++++++++++++++++++++++++ desmume/src/windows/hotkey.h | 2 ++ desmume/src/windows/main.cpp | 41 +++++++++---------------------- desmume/src/windows/resource.h | Bin 84378 -> 42456 bytes desmume/src/windows/resources.rc | Bin 932744 -> 932394 bytes desmume/src/windows/winutil.cpp | 35 ++++++++++++++++++++++++++ desmume/src/windows/winutil.h | 4 +++ 9 files changed, 104 insertions(+), 29 deletions(-) diff --git a/desmume/src/mc.cpp b/desmume/src/mc.cpp index 87afe5b76..f10c84277 100644 --- a/desmume/src/mc.cpp +++ b/desmume/src/mc.cpp @@ -119,6 +119,12 @@ const char *save_names[] = { "FLASH 512Mbit" }; +//forces the currently selected backup type to be current +//(can possibly be used to repair poorly chosen save types discovered late in gameplay i.e. pokemon gamers) +void backup_forceManualBackupType() +{ + MMU_new.backupDevice.forceManualBackupType(); +} void backup_setManualBackupType(int type) { @@ -1073,3 +1079,9 @@ bool BackupDevice::load_movie(EMUFILE* is) { return true; } + +void BackupDevice::forceManualBackupType() +{ + addr_size = addr_size_for_old_save_size(save_types[CommonSettings.manualBackupType][1]); + state = RUNNING; +} \ No newline at end of file diff --git a/desmume/src/mc.h b/desmume/src/mc.h index b102dd7aa..0642a2473 100644 --- a/desmume/src/mc.h +++ b/desmume/src/mc.h @@ -82,6 +82,7 @@ public: void reset(); void close_rom(); + void forceManualBackupType(); void reset_hardware(); bool save_state(EMUFILE* os); @@ -155,6 +156,7 @@ void fw_reset_com(memory_chip_t *mc); /* reset communication with mc */ u8 fw_transfer(memory_chip_t *mc, u8 data); void backup_setManualBackupType(int type); +void backup_forceManualBackupType(); extern const char *save_names[]; diff --git a/desmume/src/windows/hotkey.cpp b/desmume/src/windows/hotkey.cpp index 29059bfaa..778bb9bae 100644 --- a/desmume/src/windows/hotkey.cpp +++ b/desmume/src/windows/hotkey.cpp @@ -91,6 +91,36 @@ void HK_ReloadROM(int, bool justPressed) void OpenRecentROM(int listNum); OpenRecentROM(0); } +void HK_QuickScreenShot(int param, bool justPressed) +{ + char buffer[MAX_PATH]; + ZeroMemory(buffer, sizeof(buffer)); + path.getpath(path.SCREENSHOTS, buffer); + + char file[MAX_PATH]; + ZeroMemory(file, sizeof(file)); + path.formatname(file); + + strcat(buffer, file); + if( strlen(buffer) > (MAX_PATH - 4)) + buffer[MAX_PATH - 4] = '\0'; + + switch(path.imageformat()) + { + case path.PNG: + { + strcat(buffer, ".png"); + NDS_WritePNG(buffer); + } + break; + case path.BMP: + { + strcat(buffer, ".bmp"); + NDS_WriteBMP(buffer); + } + break; + } +} void HK_PrintScreen(int param, bool justPressed) { char outFilename[MAX_PATH]; @@ -507,6 +537,13 @@ void InitCustomKeys (SCustomKeys *keys) keys->PrintScreen.page = HOTKEY_PAGE_MAIN; keys->PrintScreen.key = VK_F12; + keys->QuickPrintScreen.handleKeyDown = HK_QuickScreenShot; + keys->QuickPrintScreen.code = "QuickScreenshot"; + keys->QuickPrintScreen.name = STRW(ID_LABEL_HK13b); + keys->QuickPrintScreen.page = HOTKEY_PAGE_MAIN; + keys->QuickPrintScreen.key = VK_F12; + keys->QuickPrintScreen.modifiers = CUSTKEY_CTRL_MASK; + keys->ToggleReadOnly.handleKeyDown = HK_ToggleReadOnly; keys->ToggleReadOnly.code = "ToggleReadOnly"; keys->ToggleReadOnly.name = STRW(ID_LABEL_HK24); diff --git a/desmume/src/windows/hotkey.h b/desmume/src/windows/hotkey.h index 66063fef6..b26efc95b 100644 --- a/desmume/src/windows/hotkey.h +++ b/desmume/src/windows/hotkey.h @@ -78,6 +78,7 @@ struct SCustomKeys SCustomKey ToggleRasterizer; SCustomKey PrintScreen; //Screenshot + SCustomKey QuickPrintScreen; SCustomKey RecordWAV, RecordAVI; @@ -112,6 +113,7 @@ int GetModifiers(int key); //HOTKEY HANDLERS void HK_PrintScreen(int, bool); +void HK_QuickScreenShot(int, bool); void HK_StateSaveSlot(int, bool); void HK_StateLoadSlot(int, bool); void HK_StateSetSlot(int, bool); diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 5e7c69adb..f66ab5400 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -1996,12 +1996,17 @@ int MenuInit() ResetSaveStateTimes(); + HMENU configMenu = GetSubMenuByIdOfFirstChild(mainMenu,IDM_3DCONFIG); + HMENU advancedMenu = GetSubMenuByIdOfFirstChild(configMenu,ID_ADVANCED); + DeleteMenu(advancedMenu,ID_ADVANCED,MF_BYCOMMAND); + #ifndef DEVELOPER_MENU_ITEMS // menu items that are only useful for desmume developers (maybe) HMENU fileMenu = GetSubMenu(mainMenu, 0); DeleteMenu(fileMenu, IDM_FILE_RECORDUSERSPUWAV, MF_BYCOMMAND); #endif +#ifdef DEVELOPER for(int i=0; iaddMenuItem(IDC_SAVETYPE, false, &mm); +#else + DeleteMenu(configMenu,GetSubMenuIndexByHMENU(configMenu,advancedMenu),MF_BYPOSITION); +#endif return 1; } @@ -4373,35 +4381,7 @@ DOKEYDOWN: HK_PrintScreen(0, true); return 0; case IDM_QUICK_PRINTSCREEN: - { - char buffer[MAX_PATH]; - ZeroMemory(buffer, sizeof(buffer)); - path.getpath(path.SCREENSHOTS, buffer); - - char file[MAX_PATH]; - ZeroMemory(file, sizeof(file)); - path.formatname(file); - - strcat(buffer, file); - if( strlen(buffer) > (MAX_PATH - 4)) - buffer[MAX_PATH - 4] = '\0'; - - switch(path.imageformat()) - { - case path.PNG: - { - strcat(buffer, ".png"); - NDS_WritePNG(buffer); - } - break; - case path.BMP: - { - strcat(buffer, ".bmp"); - NDS_WriteBMP(buffer); - } - break; - } - } + HK_QuickScreenShot(0, true); return 0; case IDM_FILE_RECORDAVI: if (AVI_IsRecording()) @@ -5196,6 +5176,8 @@ DOKEYDOWN: } return 0; + case IDC_SAVETYPE_FORCE: backup_forceManualBackupType(); return 0; + default: { u32 id = LOWORD(wParam); @@ -6002,6 +5984,7 @@ void UpdateHotkeyAssignments() { UpdateHotkeyAssignment(CustomKeys.OpenROM, IDM_OPEN); UpdateHotkeyAssignment(CustomKeys.PrintScreen, IDM_PRINTSCREEN); + UpdateHotkeyAssignment(CustomKeys.QuickPrintScreen, IDM_QUICK_PRINTSCREEN); UpdateHotkeyAssignment(CustomKeys.RecordAVI, IDM_FILE_RECORDAVI); UpdateHotkeyAssignment(CustomKeys.Pause, IDM_PAUSE); UpdateHotkeyAssignment(CustomKeys.Reset, IDM_RESET); diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 6906470290e682c95acc65a76ef3a492c88c5fcc..99fd44246590e64dc511e08fe99c4a36717458da 100644 GIT binary patch literal 42456 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 literal 84378 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 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 5b77930581b2bc6a2bc8bf2fd2dd1be04bc05c9b..bbb9e7e042f63b8fa09aa9f034ef753f8d4448f7 100644 GIT binary patch delta 1355 zcmeD9Zn5f%MZ*@xNw--I7%CVHw_A(yDl$UZ`C`1RY*6;cM~ras-LkywFmd}=jH)p8 zysEs?FmY>bUbuK-H9K5ST)Dk9!kAn~gmQjPCYbW=2dA^c)pL9C zK4hJ);LOCbJxYw}%uz

58|Rq#2VY7gk74Z+UdZue-y% z#0As8(}DgK-`=3a@{V;VdAj{oGz$>30x{e6SJCV`9GG6)K6Ik;JAY;)-z{ZV zSTcP=DwEiD32%;1g3}YUImGxK8B!R^7!n!s7?K%M8B(TS+{zTln}{qp{a_)7_O#!; zT-=TfE(~D|jtqVb&eI)tGAT~K@Qzntx||n>#^i&-r&WNF+HJ< zNnrYfGA0MGn5-K^K0^`M5(S_U#S97z&J3kMks_eAdD9c6IAo_6+~VY#K2MTcfHR)K zjlrKG2xw1X8I%0hE?XiG%h_8 zv$)u?>k(AuRmEZIC{*$IeWW;Dc?56?R_!aQatUK7IJLAw2(99z-Y?AQOpjCq8TY= gNbEz3#dcsU0%MX#X2)p!4UzccVBbC`l(+8*0K{J3`Tzg` diff --git a/desmume/src/windows/winutil.cpp b/desmume/src/windows/winutil.cpp index 516b9f5c4..45e83524a 100644 --- a/desmume/src/windows/winutil.cpp +++ b/desmume/src/windows/winutil.cpp @@ -115,3 +115,38 @@ void CheckDlgItem(HWND hDlg, int id, bool checked) CheckDlgButton(hDlg, id, checked ? BST_CHECKED : BST_UNCHECKED); } +HMENU GetSubMenuByIdOfFirstChild(HMENU menu, UINT child) +{ + int count = GetMenuItemCount(menu); + for(int i=0;i