diff --git a/src/cheat.cpp b/src/cheat.cpp index 3cca41e8..1f6f56c1 100644 --- a/src/cheat.cpp +++ b/src/cheat.cpp @@ -86,8 +86,8 @@ struct CHEATF *cheats=0,*cheatsl=0; #define CHEATC_EXCLUDED 0x4000 #define CHEATC_NOSHOW 0xC000 -static uint16 *CheatComp=0; -static int savecheats; +static uint16 *CheatComp = 0; +int savecheats = 0; static DECLFR(SubCheatsRead) { @@ -215,7 +215,6 @@ void FCEU_LoadGameCheats(FILE *override) } FCEU_DispMessage("Cheats file loaded.",0); //Tells user a cheats file was loaded. - FCEU_printf("Cheats file loaded.\n",0); //Sends message to message log. while(fgets(linebuf,2048,fp)>0) { char *tbuf=linebuf; diff --git a/src/cheat.h b/src/cheat.h index 3e300ac6..431ff0a5 100644 --- a/src/cheat.h +++ b/src/cheat.h @@ -8,3 +8,5 @@ void FCEU_PowerCheats(void); int FCEU_CheatGetByte(uint32 A); void FCEU_CheatSetByte(uint32 A, uint8 V); + +extern int savecheats; \ No newline at end of file diff --git a/src/drivers/win/cheat.cpp b/src/drivers/win/cheat.cpp index e54fb2a2..66070a81 100644 --- a/src/drivers/win/cheat.cpp +++ b/src/drivers/win/cheat.cpp @@ -25,6 +25,7 @@ #include "debugger.h" #include "../../fceu.h" #include "../../cart.h" +#include "../../cheat.h" // For FCEU_LoadGameCheats() static HWND pwindow = 0; //Handle to Cheats dialog HWND hCheat = 0; //mbg merge 7/19/06 had to add @@ -541,6 +542,39 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l else SetDlgItemText(hwndDlg,IDC_CHEAT_COM,(LPTSTR)U8ToStr(c)); if(hMemView)UpdateColorTable(); //if the memory viewer is open then update any blue freeze locations in it as well break; + case IDC_BTN_CHEAT_ADDFROMFILE: + { + OPENFILENAME ofn; + memset(&ofn, 0, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hwndDlg; + ofn.hInstance = fceu_hInstance; + ofn.lpstrTitle = "Open Cheats file"; + const char filter[] = "Cheat files (*.cht)\0*.cht\0All Files (*.*)\0*.*\0\0"; + ofn.lpstrFilter = filter; + + char nameo[2048] = {0}; + ofn.lpstrFile = nameo; + ofn.nMaxFile = 2048; + ofn.Flags = OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_FILEMUSTEXIST; + std::string initdir = FCEU_GetPath(FCEUMKF_CHEAT); + ofn.lpstrInitialDir = initdir.c_str(); + + if (GetOpenFileName(&ofn)) + { + FILE* file = FCEUD_UTF8fopen(nameo, "rb"); + if (file) + { + FCEU_LoadGameCheats(file); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_DEL),TRUE); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_UPD),TRUE); + if (hMemView) UpdateColorTable(); //if the memory viewer is open then update any blue freeze locations in it as well + UpdateCheatsAdded(); + savecheats = 1; + } + } + break; + } case IDC_BTN_CHEAT_RESET: FCEUI_CheatSearchBegin(); ShowResults(hwndDlg); @@ -726,19 +760,20 @@ void InitializeCheatsAdded(HWND hwndDlg) char temp[64]; if (FrozenAddressCount < 256) sprintf(temp,"Active Cheats %d", FrozenAddressCount); - - else if (FrozenAddressCount == 256) - { - sprintf(temp,"Active Cheats %d (Max Limit)", FrozenAddressCount); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADD),FALSE); - } - else - { - sprintf(temp,"%d Error: Too many cheats loaded!", FrozenAddressCount); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADD),FALSE); - } - SetDlgItemText(hwndDlg,201,temp); - RedoCheatsLB(hwndDlg); + else if (FrozenAddressCount == 256) + { + sprintf(temp,"Active Cheats %d (Max Limit)", FrozenAddressCount); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADD),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADDFROMFILE),FALSE); + } + else + { + sprintf(temp,"%d Error: Too many cheats loaded!", FrozenAddressCount); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADD),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_ADDFROMFILE),FALSE); + } + SetDlgItemText(hwndDlg,201,temp); + RedoCheatsLB(hwndDlg); } //Used by cheats and external dialogs such as hex editor to update items in the cheat search dialog @@ -756,11 +791,13 @@ void UpdateCheatsAdded() { sprintf(temp,"Active Cheats %d (Max Limit)", FrozenAddressCount); EnableWindow(GetDlgItem(hCheat,IDC_BTN_CHEAT_ADD),FALSE); + EnableWindow(GetDlgItem(hCheat,IDC_BTN_CHEAT_ADDFROMFILE),FALSE); } else { sprintf(temp,"%d Error: Too many cheats loaded!", FrozenAddressCount); EnableWindow(GetDlgItem(hCheat,IDC_BTN_CHEAT_ADD),FALSE); + EnableWindow(GetDlgItem(hCheat,IDC_BTN_CHEAT_ADDFROMFILE),FALSE); } SetDlgItemText(hCheat,201,temp); RedoCheatsLB(hCheat); diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index fc54579e..23f9223b 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -498,7 +498,7 @@ CHEATCONTEXTMENUS MENU BEGIN POPUP "CheatListPopup" BEGIN - MENUITEM "Toggle Cheat\tDbl-Clk", CHEAT_CONTEXT_TOGGLECHEAT + MENUITEM "Toggle selected Cheats\tDbl-Clk", CHEAT_CONTEXT_TOGGLECHEAT MENUITEM "Poke Cheat Value", CHEAT_CONTEXT_POKECHEATVALUE MENUITEM "Goto In Hex Editor", CHEAT_CONTEXT_GOTOINHEXEDITOR MENUITEM "Delete Selected Cheats", ID_CHEATLISTPOPUP_DELETESELECTEDCHEATS @@ -1670,25 +1670,25 @@ BEGIN LTEXT "New Selection Name:",-1,5,240,68,8 END -CHEATCONSOLE DIALOGEX 0, 0, 379, 186 +CHEATCONSOLE DIALOGEX 0, 0, 379, 189 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Cheat Search" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Active Cheats",201,5,1,129,168,WS_TABSTOP - GROUPBOX "Cheat Search",202,139,1,234,168,WS_TABSTOP - LISTBOX IDC_LIST_CHEATS,11,11,118,102,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL - LTEXT "Name:",IDC_STATIC,12,118,22,10 - LTEXT "Addr:",IDC_STATIC,12,134,18,10 - LTEXT "Val:",IDC_STATIC,61,134,12,10 - LTEXT "Cmp:",IDC_STATIC,95,134,16,10 - EDITTEXT IDC_CHEAT_NAME,35,116,94,12,ES_AUTOHSCROLL | ES_WANTRETURN - EDITTEXT IDC_CHEAT_ADDR,31,132,25,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_VAL,74,132,16,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_COM,113,132,16,12,ES_UPPERCASE | ES_WANTRETURN - DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,11,148,36,16 - PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,52,148,36,16 - PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,93,148,36,16 + GROUPBOX "Active Cheats",201,5,2,129,182,WS_TABSTOP + GROUPBOX "Cheat Search",202,140,2,233,182,WS_TABSTOP + LISTBOX IDC_LIST_CHEATS,11,11,118,98,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL + LTEXT "Name:",IDC_STATIC,12,114,22,10 + LTEXT "Addr:",IDC_STATIC,12,130,18,10 + LTEXT "Val:",IDC_STATIC,61,130,12,10 + LTEXT "Cmp:",IDC_STATIC,95,130,16,10 + EDITTEXT IDC_CHEAT_NAME,35,112,94,12,ES_AUTOHSCROLL | ES_WANTRETURN + EDITTEXT IDC_CHEAT_ADDR,31,128,25,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_VAL,74,128,16,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_COM,113,128,16,12,ES_UPPERCASE | ES_WANTRETURN + DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,11,144,36,16 + PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,52,144,36,16 + PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,93,144,36,16 PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,146,12,55,15 PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,146,31,55,15 LTEXT "0x",IDC_STATIC,205,34,9,8 @@ -1707,7 +1707,9 @@ BEGIN GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,263,8,105,156,WS_TABSTOP LISTBOX IDC_CHEAT_LIST_POSSIBILITIES,268,18,85,142,LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_TABSTOP SCROLLBAR IDC_CHEAT_SCRL_POSSIBILITIES,354,18,10,142,SBS_VERT - CONTROL "Pause when active",IDC_CHEAT_PAUSEWHENACTIVE,"Button",BS_AUTOCHECKBOX,10,172,76,10 + CONTROL " Pause emulation when this window is active",IDC_CHEAT_PAUSEWHENACTIVE, + "Button",BS_AUTOCHECKBOX,147,169,157,10 + PUSHBUTTON "Add from CHT file...",IDC_BTN_CHEAT_ADDFROMFILE,23,163,93,16 END IDD_LUA DIALOGEX 0, 0, 270, 150 @@ -2102,7 +2104,7 @@ BEGIN "CHEATCONSOLE", DIALOG BEGIN - TOPMARGIN, 7 + BOTTOMMARGIN, 188 END IDD_LUA, DIALOG diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index 0d1c8243..49406676 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -403,6 +403,8 @@ #define MENU_PAL 311 #define IDC_DEBUGGER_VAL_SPR 311 #define IDC_LABEL_TWEAKCOUNT 311 +#define IDC_BTN_CHEAT_UPD2 311 +#define IDC_BTN_CHEAT_ADDFROMFILE 311 #define IDC_DEBUGGER_BOOKMARK 312 #define IDC_DEBUGGER_CYCLES_EXCEED 313 #define IDC_DEBUGGER_INSTRUCTIONS_EXCEED 314