From 0713de844c77ba048a2058e458a262b31cc3bf99 Mon Sep 17 00:00:00 2001 From: owomomo Date: Fri, 10 May 2019 02:17:16 +0800 Subject: [PATCH] 1. New cheat list box 0.0.0.4 Alpha, separated the normal cheat adding method and the cheat code/game genie method. While you're inputting the values, they are synced to the formatted string which is very convinience. In the past, the game genie was added from the name edit control, now the name is separated and the code can have a name even if it's a game genie. 2. Solved a problem of the add/editing watch dialog when pop up repeatedly from multiple places, because there are 3 places can pop up it now. 3. Fixed a bug when loading cheats from file crashes the emulator. 4. Detail. --- src/cheat.cpp | 4 +- src/drivers/win/cheat.cpp | 293 ++++++++++++++++++++--------------- src/drivers/win/cheat.h | 6 +- src/drivers/win/ramwatch.cpp | 59 ++++--- src/drivers/win/ramwatch.h | 5 + src/drivers/win/res.rc | 86 +++++----- src/drivers/win/resource.h | 16 +- 7 files changed, 274 insertions(+), 195 deletions(-) diff --git a/src/cheat.cpp b/src/cheat.cpp index 3dc6aa2e..031f0c04 100644 --- a/src/cheat.cpp +++ b/src/cheat.cpp @@ -189,8 +189,8 @@ void FCEU_LoadGameCheats(FILE *override, int override_existing) unsigned int compare; int x; - char linebuf[2048]; - char namebuf[128]; + char linebuf[2048] = { 0 }; + char namebuf[128] = { 0 }; int tc = 0; char *fn; diff --git a/src/drivers/win/cheat.cpp b/src/drivers/win/cheat.cpp index ba3f0fdc..8327f3a9 100644 --- a/src/drivers/win/cheat.cpp +++ b/src/drivers/win/cheat.cpp @@ -31,7 +31,7 @@ static HWND pwindow = 0; //Handle to Cheats dialog HWND hCheat = 0; //mbg merge 7/19/06 had to add -static HMENU hCheatcontext; //Handle to cheat context menu +HMENU hCheatcontext = 0; //Handle to cheat context menu bool pauseWhileActive = false; //For checkbox "Pause while active" extern bool wasPausedByCheats; @@ -67,7 +67,7 @@ char GGcode[10]; int GGlist[GGLISTSIZE]; static int dontupdateGG; //this eliminates recursive crashing -bool dodecode; +// bool dodecode; HWND hGGConv; @@ -106,15 +106,7 @@ char *U8ToStr(uint8 a) int RedoCheatsCallB(char *name, uint32 a, uint8 v, int c, int s, int type, void* data) { char str[256] = { 0 }; - - if(a >= 0x8000) - EncodeGG(str, a, v, c); - else { - if(c == -1) - sprintf(str, "%04X:%02X", (int)a, (int)v); - else - sprintf(str, "%04X?%02X:%02X", (int)a, (int)c, (int)v); - } + GetCheatStr(str, a, v, c); LVITEM lvi = { 0 }; lvi.mask = LVIF_TEXT; @@ -255,12 +247,20 @@ int ShowResults(HWND hwndDlg, bool supressUpdate = false) void EnableCheatButtons(HWND hwndDlg, int enable) { - EnableWindow(GetDlgItem(hwndDlg,IDC_CHEAT_VAL_KNOWN),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_KNOWN),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_EQ),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_NE),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_GT),enable); - EnableWindow(GetDlgItem(hwndDlg,IDC_BTN_CHEAT_LT),enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_LABEL_KNOWN), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_EQ), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_NE), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_NE_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_NE_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_GT), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_GT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_GT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_LT), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_CHECK_LT_BY), enable); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_LT_BY), enable); + } HWND InitializeCheatList(HWND hwnd) @@ -313,6 +313,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_NE_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_GT_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_LT_BY, WM_SETFONT, (WPARAM)hNewFont, FALSE); + SendDlgItemMessage(hwndDlg, IDC_CHEAT_TEXT, WM_SETFONT, (WPARAM)hNewFont, FALSE); //text limits SendDlgItemMessage(hwndDlg, IDC_CHEAT_ADDR, EM_SETLIMITTEXT, 4, 0); @@ -323,15 +324,16 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_NE_BY, EM_SETLIMITTEXT, 2, 0); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_GT_BY, EM_SETLIMITTEXT, 2, 0); SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_LT_BY, EM_SETLIMITTEXT, 2, 0); + SendDlgItemMessage(hwndDlg, IDC_CHEAT_TEXT, EM_SETLIMITTEXT, 10, 0); //disable or enable buttons - EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_KNOWN), FALSE); + CheckDlgButton(hwndDlg, IDC_RADIO_ADDRESS, MF_CHECKED); possiTotalCount = 0; possiItemCount = SendDlgItemMessage(hwndDlg, IDC_CHEAT_LIST_POSSIBILITIES, LVM_GETCOUNTPERPAGE, 0, 0); - EnableCheatButtons(hwndDlg, possiTotalCount != 0); ShowResults(hwndDlg); + EnableCheatButtons(hwndDlg, possiTotalCount != 0); //add header for cheat list and possibilities InitializeCheatList(hwndDlg); @@ -427,13 +429,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l RECT wrect; wrect.left = LVIR_BOUNDS; SendMessage(itemHwnd, LVM_GETITEMRECT, sel, (LPARAM)&wrect); - POINT point; point.x = wrect.left + (wrect.right - wrect.left) / 2; point.y = wrect.top + (wrect.bottom - wrect.top) / 2; ClientToScreen(itemHwnd, &point); } TrackPopupMenu(hCheatcontextsub, TPM_RIGHTBUTTON, point.x, point.y, 0, hwndDlg, 0); //Create menu - } } break; @@ -552,33 +552,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l break; case IDC_BTN_CHEAT_ADD: { - char str[256] = { 0 }; - uint32 a = 0; - uint8 v = 0; - int c = 0; - dodecode = true; + char name[256] = { 0 }; uint32 a; uint8 v = 0; int c = 0; + GetUICheatInfo(hwndDlg, name, &a, &v, &c); - GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, str, 5); - if(str[0] != 0) - dodecode = false; - a = StrToU16(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, str, 3); - if(str[0] != 0) - dodecode = false; - v = StrToU8(str); - GetDlgItemText(hwndDlg,IDC_CHEAT_COM, str, 3); - if(str[0] != 0) - dodecode = false; - c = (str[0] == 0) ? -1 : StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, str, 256); - if(dodecode && (strlen(str) == 6 || strlen(str) == 8)) - if(FCEUI_DecodeGG(str, &GGaddr, &GGval, &GGcomp)) { - a = GGaddr; - v = GGval; - c = GGcomp; - } - if (FCEUI_AddCheat(str, a, v, c, 1)) { - RedoCheatsCallB(str, a, v, c, 1, 1, NULL); + if (FCEUI_AddCheat(name, a, v, c, 1)) { + RedoCheatsCallB(name, a, v, c, 1, 1, NULL); int newselcheat = SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_GETITEMCOUNT, 0, 0) - 1; ListView_MoveSelectionMark(GetDlgItem(hwndDlg, IDC_LIST_CHEATS), selcheat, newselcheat); @@ -628,35 +606,14 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l case IDC_BTN_CHEAT_UPD: { selcheat = SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_GETSELECTIONMARK, 0, 0); - - dodecode = true; - char str[256] = { 0 }; - char* name = ""; uint32 a; uint8 v; int s; int c; - if (selcheat < 0) break; - GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, str, 5); - if (str[0] != 0) - dodecode = false; - a = StrToU16(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, str, 3); - if (str[0] != 0) - dodecode = false; - v = StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_COM, str, 3); - if (str[0] != 0) - dodecode = false; - c = (str[0] == 0) ? -1 : StrToU8(str); - GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, str, 256); - if (dodecode && (strlen(str) == 6 || strlen(str) == 8)) { - if (FCEUI_DecodeGG(str, &GGaddr, &GGval, &GGcomp)) { - a = GGaddr; - v = GGval; - c = GGcomp; - } - } - FCEUI_SetCheat(selcheat, str, a, v, c, -1, 1); - FCEUI_GetCheat(selcheat, &name, &a, &v, &c, &s, NULL); + + char name[256]; uint32 a; uint8 v; int s; int c; + GetUICheatInfo(hwndDlg, name, &a, &v, &c); + + FCEUI_SetCheat(selcheat, name, a, v, c, -1, 1); + FCEUI_GetCheat(selcheat, NULL, &a, &v, &c, &s, NULL); RedoCheatsCallB(name, a, v, c, s, 1, &selcheat); SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_SETSELECTIONMARK, 0, selcheat); @@ -700,8 +657,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l savecheats = 1; } } - break; } + break; case IDC_BTN_CHEAT_RESET: FCEUI_CheatSearchBegin(); ShowResults(hwndDlg); @@ -715,8 +672,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l knownvalue = StrToU8(str); FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_KNOWN, knownvalue, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_EQ: searchdone = 1; FCEUI_CheatSearchEnd(FCEU_SEARCH_PUERLY_RELATIVE_CHANGE,0,0); @@ -732,8 +689,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_ANY_CHANGE, 0, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_GT: { char str[256] = { 0 }; @@ -744,8 +701,8 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_GT, 0, 0); ShowResults(hwndDlg); - break; } + break; case IDC_BTN_CHEAT_LT: { char str[256] = { 0 }; @@ -756,10 +713,63 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l } else FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_LT, 0, 0); ShowResults(hwndDlg); - break; + } + break; + case IDC_RADIO_ADDRESS: + case IDC_RADIO_TEXT_CODE: + ToggleCheatInputMode(hwndDlg, LOWORD(wParam)); + break; + } + break; + case EN_UPDATE: + switch (LOWORD(wParam)) + { + case IDC_CHEAT_ADDR: + case IDC_CHEAT_VAL: + case IDC_CHEAT_COM: + { + if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_ADDRESS)) + { + char buf[16]; uint32 a; uint8 v; int c; + GetUICheatInfo(hwndDlg, NULL, &a, &v, &c); + GetCheatStr(buf, a, v, c); + SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf); + } + + // it was saparated to the text/game genie position + /* + if (dodecode && (strlen(buf) == 6 || strlen(buf) == 8)) + if (FCEUI_DecodeGG(buf, &GGaddr, &GGval, &GGcomp)) { + a = GGaddr; + v = GGval; + c = GGcomp; + } + */ + } + break; + case IDC_CHEAT_TEXT: + { + if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_TEXT_CODE)) + { + char buf[16]; + GetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf, 16); + int a = -1, v = -1; int c = -1; + if (strchr(buf, ':')) + { + if (strchr(buf, '?')) + sscanf(buf, "%X:%X?%X", &a, &c, &v); + else + sscanf(buf, "%X:%X", &a, &v); + } + else if (strlen(buf) == 6 || strlen(buf) == 8) + FCEUI_DecodeGG(buf, &a, &v, &c); + + SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)(a == -1 ? "" : U16ToStr(a))); + SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)(v == -1 ? "" : U8ToStr(v))); + SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c))); + } } } - break; } break; case WM_NOTIFY: @@ -788,6 +798,11 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)U16ToStr(a)); SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)U8ToStr(v)); SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c))); + + char code[32]; + GetCheatStr(code, a, v, c); + + SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, code); } EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_DEL), selcheatcount > 0); @@ -960,6 +975,16 @@ void UpdateCheatsAdded() UpdateCheatListGroupBoxUI(); } +void ToggleCheatInputMode(HWND hwndDlg, int modeId) +{ + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_ADDR), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_COM), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_LABEL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_COM_LABEL), modeId == IDC_RADIO_ADDRESS); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHEAT_TEXT), modeId == IDC_RADIO_TEXT_CODE); +} + BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { char str[100]; @@ -981,66 +1006,63 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) }; case WM_INITDIALOG: //todo: set text limits - if (GGConv_wndx==-32000) GGConv_wndx=0; //Just in case - if (GGConv_wndy==-32000) GGConv_wndy=0; - SetWindowPos(hwndDlg,0,GGConv_wndx,GGConv_wndy,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER); - break; - case WM_CREATE: - - break; - case WM_PAINT: + if (GGConv_wndx == -32000) + GGConv_wndx = 0; //Just in case + if (GGConv_wndy == -32000) + GGConv_wndy = 0; + SetWindowPos(hwndDlg, 0, GGConv_wndx, GGConv_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); + SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_CODE, EM_SETLIMITTEXT, 8, 0); break; case WM_CLOSE: case WM_QUIT: DestroyWindow(hGGConv); hGGConv = 0; break; - case WM_COMMAND: - switch(HIWORD(wParam)) { - case EN_UPDATE: - if(dontupdateGG)break; - dontupdateGG = 1; - switch(LOWORD(wParam)){ //lets find out what edit control got changed - case IDC_GAME_GENIE_CODE: //The Game Genie Code - in this case decode it. - GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9); - if((strlen(GGcode) != 8) && (strlen(GGcode) != 6))break; + switch(HIWORD(wParam)) { + case EN_UPDATE: + if(dontupdateGG)break; + dontupdateGG = 1; + switch(LOWORD(wParam)){ //lets find out what edit control got changed + case IDC_GAME_GENIE_CODE: //The Game Genie Code - in this case decode it. + GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9); + if((strlen(GGcode) != 8) && (strlen(GGcode) != 6))break; - FCEUI_DecodeGG(GGcode, &GGaddr, &GGval, &GGcomp); + FCEUI_DecodeGG(GGcode, &GGaddr, &GGval, &GGcomp); - sprintf(str,"%04X",GGaddr); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str); + sprintf(str,"%04X",GGaddr); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str); - if(GGcomp != -1) - sprintf(str,"%02X",GGcomp); - else str[0] = 0; + if(GGcomp != -1) + sprintf(str,"%02X",GGcomp); + else str[0] = 0; SetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str); - sprintf(str,"%02X",GGval); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str); + sprintf(str,"%02X",GGval); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str); //ListGGAddresses(); - break; + break; - case IDC_GAME_GENIE_ADDR: - case IDC_GAME_GENIE_COMP: - case IDC_GAME_GENIE_VAL: + case IDC_GAME_GENIE_ADDR: + case IDC_GAME_GENIE_COMP: + case IDC_GAME_GENIE_VAL: - GetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str,5); - if(strlen(str) != 4) break; + GetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str,5); + if(strlen(str) != 4) break; - GetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str,5); - if(strlen(str) != 2) {GGval = -1; break;} + GetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str,5); + if(strlen(str) != 2) {GGval = -1; break;} - GGaddr = GetEditHex(hGGConv,IDC_GAME_GENIE_ADDR); - GGval = GetEditHex(hGGConv,IDC_GAME_GENIE_VAL); + GGaddr = GetEditHex(hGGConv,IDC_GAME_GENIE_ADDR); + GGval = GetEditHex(hGGConv,IDC_GAME_GENIE_VAL); - GetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str,5); - if(strlen(str) != 2) GGcomp = -1; - else GGcomp = GetEditHex(hGGConv,IDC_GAME_GENIE_COMP); + GetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str,5); + if(strlen(str) != 2) GGcomp = -1; + else GGcomp = GetEditHex(hGGConv,IDC_GAME_GENIE_COMP); - EncodeGG(GGcode, GGaddr, GGval, GGcomp); - SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode); - //ListGGAddresses(); + EncodeGG(GGcode, GGaddr, GGval, GGcomp); + SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode); + //ListGGAddresses(); break; } ListGGAddresses(); @@ -1074,7 +1096,6 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) } } break; - case LBN_DBLCLK: switch (LOWORD(wParam)) { case IDC_LIST_GGADDRESSES: @@ -1192,11 +1213,31 @@ void DoGGConv() return; } -/* -void ListBox::OnRButtonDown(UINT nFlags, CPoint point) +inline void GetCheatStr(char* buf, int a, int v, int c) { -CPoint test = point; -} */ + if (a >= 0x8000) + EncodeGG(buf, a, v, c); + else { + if (c == -1) + sprintf(buf, "%04X:%02X", (int)a, (int)v); + else + sprintf(buf, "%04X?%02X:%02X", (int)a, (int)c, (int)v); + } + +} + +void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c) +{ + char buf[16]; + GetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, buf, 5); + *a = StrToU16(buf); + GetDlgItemText(hwndDlg, IDC_CHEAT_VAL, buf, 3); + *v = StrToU8(buf); + GetDlgItemText(hwndDlg, IDC_CHEAT_COM, buf, 3); + *c = (buf[0] == 0) ? -1 : StrToU8(buf); + if (name) + GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, name, 256); +} void DisableAllCheats() { diff --git a/src/drivers/win/cheat.h b/src/drivers/win/cheat.h index 7a24a5d7..99939705 100644 --- a/src/drivers/win/cheat.h +++ b/src/drivers/win/cheat.h @@ -15,6 +15,9 @@ void SetGGConvFocus(int address,int compare); void UpdateCheatList(); void UpdateCheatListGroupBoxUI(); void UpdateCheatsAdded(); +void ToggleCheatInputMode(HWND hwndDlg, int modeId); +void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c); +inline void GetCheatStr(char* buf, int a, int v, int c); extern unsigned int FrozenAddressCount; extern std::vector FrozenAddresses; @@ -35,5 +38,6 @@ SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, newIndex) (SetDlgItemText(hwnd, IDC_CHEAT_ADDR, (LPTSTR)"") & \ SetDlgItemText(hwnd, IDC_CHEAT_VAL, (LPTSTR)"") & \ SetDlgItemText(hwnd, IDC_CHEAT_COM, (LPTSTR)"") & \ -SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPTSTR)"")) +SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPTSTR)"") & \ +SetDlgItemText(hwnd, IDC_CHEAT_TEXT, (LPTSTR)"")) diff --git a/src/drivers/win/ramwatch.cpp b/src/drivers/win/ramwatch.cpp index 489f32ae..306c6406 100644 --- a/src/drivers/win/ramwatch.cpp +++ b/src/drivers/win/ramwatch.cpp @@ -131,7 +131,6 @@ bool InsertWatch(const AddressWatcher& Watch) return true; } - bool InsertWatch(const AddressWatcher& Watch, HWND parent) { if(!VerifyWatchNotAlreadyAdded(Watch)) @@ -144,9 +143,20 @@ bool InsertWatch(const AddressWatcher& Watch, HWND parent) int prevWatchCount = WatchCount; - rswatches[WatchCount] = Watch; - rswatches[WatchCount].CurValue = GetCurrentValue(rswatches[WatchCount]); - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, (LPARAM)WatchCount); + int tmpWatchIndex; + if (parent == RamWatchHWnd) + tmpWatchIndex = WatchCount; + else if (parent == RamSearchHWnd) + tmpWatchIndex = -2; + else if (parent == hCheat) + tmpWatchIndex = -3; + else + tmpWatchIndex = -4; + + rswatches[tmpWatchIndex] = Watch; + rswatches[tmpWatchIndex].CurValue = GetCurrentValue(rswatches[tmpWatchIndex]); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, tmpWatchIndex); + rswatches.erase(tmpWatchIndex); return WatchCount > prevWatchCount; } @@ -158,7 +168,9 @@ bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count) else { bool success = false; + char comment[256]; rswatches[-1] = watches[0]; + rswatches[-1].comment = comment; if(DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), parent, (DLGPROC)EditWatchProc, (LPARAM)-1)) for (int i = 0; i < count; ++i) { @@ -166,7 +178,6 @@ bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count) watcher.comment = rswatches[-1].comment; success |= InsertWatch(watcher); } - free(rswatches[-1].comment); rswatches.erase(-1); return success; } @@ -768,7 +779,9 @@ void RefreshWatchListSelectedItemControlStatus(HWND hDlg) LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets info for a RAM Watch, and then inserts it into the Watch List { - static int index; + // since there are 3 windows can pops up the add watch dialog, we should store them separately. + // 0 for ram watch, 1 for ram search, 2 for cheat dialog. + static int indexes[4]; switch(uMsg) { @@ -777,12 +790,12 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara RECT r; GetWindowRect(hWnd, &r); SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); - - index = (int)lParam; - AddressWatcher& watcher = rswatches[index]; + + AddressWatcher& watcher = rswatches[lParam]; if (watcher.Type != 'S') { char Str_Tmp[1024]; - if (index != -1) + // -1 means batch add + if (lParam != -1) { sprintf(Str_Tmp, "%04X", watcher.Address); SetDlgItemText(hDlg, IDC_EDIT_COMPAREADDRESS, Str_Tmp); @@ -821,6 +834,8 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara SetDlgItemText(hDlg, IDC_PROMPT_EDIT, watcher.comment); HWND parent = GetParent(hDlg); + indexes[GetDlgStoreIndex(parent)] = lParam; + if (watcher.Type == 'S' || parent == RamSearchHWnd || parent == hCheat) { EnableWindow(GetDlgItem(hDlg, IDC_SPECIFICADDRESS), FALSE); @@ -845,21 +860,25 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara { case IDOK: { - char Str_Tmp[1024]; + char Str_Tmp[256]; + + HWND parent = GetParent(hDlg); + int index = indexes[GetDlgStoreIndex(parent)]; + // not a single watch editing operation if (index != -1) { // a normal watch, copy it to a temporary one AddressWatcher watcher = rswatches[index]; - if (watcher.comment != NULL) - watcher.comment = strcpy((char*)malloc(strlen(watcher.comment) + 2), watcher.comment); + // if (watcher.comment != NULL) + // watcher.comment = strcpy((char*)malloc(strlen(watcher.comment) + 2), watcher.comment); // It's from ram watch window, not a separator - // When it's from ram search window, all the information required is already set, + // When it's from ram search or cheat window, all the information required is already set, // so this is also unecessary if (RamWatchHWnd && RamWatchHWnd == GetParent(hDlg) && watcher.Type != 'S') { - GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 1024); + GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 256); // type if (SendDlgItemMessage(hDlg, IDC_SIGNED, BM_GETCHECK, 0, 0) == BST_CHECKED) @@ -910,9 +929,9 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara watcher.comment = Str_Tmp; // finallly update the watch list - if (index < WatchCount) + if (index >= 0 && index < WatchCount) // it's a watch editing operation. - // Only ram watch window can edit a watch, the ram search window only add watch. + // Only ram watch window can edit a watch, the ram search window and cheat window only add watch. EditWatch(index, watcher); else InsertWatch(watcher); @@ -924,7 +943,7 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara AddressWatcher& watcher = rswatches[index]; // comment GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 80); - watcher.comment = strcpy((char*) malloc(strlen(Str_Tmp) + 2), Str_Tmp); + strcpy(watcher.comment, Str_Tmp); } EndDialog(hDlg, true); @@ -1289,7 +1308,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam watchIndex = ListView_GetSelectionMark(GetDlgItem(hDlg,IDC_WATCHLIST)); if(watchIndex != -1) { - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC) EditWatchProc,(LPARAM)watchIndex); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, watchIndex); SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST)); } return true; @@ -1300,7 +1319,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam target.WrongEndian = 0; target.Size = 'b'; target.Type = 's'; - DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, (LPARAM)WatchCount); + DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_EDITWATCH), hDlg, (DLGPROC)EditWatchProc, WatchCount); SetFocus(GetDlgItem(hDlg, IDC_WATCHLIST)); return true; } diff --git a/src/drivers/win/ramwatch.h b/src/drivers/win/ramwatch.h index b93981ac..2df1638d 100644 --- a/src/drivers/win/ramwatch.h +++ b/src/drivers/win/ramwatch.h @@ -78,4 +78,9 @@ extern HWND RamWatchHWnd; #define WatchSizeConv(watch) (watch.Type == 'S' ? 0 : watch.Size == 'd' ? 4 : watch.Size == 'w' ? 2 : watch.Size == 'b' ? 1 : 0) #define SizeConvWatch(size) (size == 4 ? 'd' : size == 2 ? 'w' : size == 1 : 'b' : 0) +#define GetDlgStoreIndex(parent) \ + (parent == RamWatchHWnd ? 0 : \ + parent == RamSearchHWnd ? 1 : \ + parent == hCheat ? 2 : 3) + #endif diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index e1cb83ae..30192e26 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -12,7 +12,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Neutral resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL @@ -25,8 +25,8 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -IDI_ICON3 ICON "res\\taseditor-icon.ico" -IDI_ICON4 ICON "res\\taseditor-icon32.ico" +IDI_ICON3 ICON "res/taseditor-icon.ico" +IDI_ICON4 ICON "res/taseditor-icon32.ico" ICON_1 ICON "res/ICON_1.ico" ICON_2 ICON "res/ICON_2.ico" @@ -1567,7 +1567,7 @@ STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS CAPTION "Game Genie Encoder/Decoder Tool" FONT 8, "Tahoma", 0, 0, 0x0 BEGIN - EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_AUTOHSCROLL + EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_UPPERCASE | ES_AUTOHSCROLL GROUPBOX "Game Genie Code",-1,107,5,69,42 GROUPBOX "Address/Compare/Value",65534,9,5,91,75 LTEXT "Address:",65533,18,24,35,8 @@ -1973,45 +1973,47 @@ BEGIN LTEXT "New Selection Name:",-1,5,240,68,8 END -CHEATCONSOLE DIALOGEX 0, 0, 431, 198 +CHEATCONSOLE DIALOGEX 0, 0, 395, 216 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",IDC_GROUPBOX_CHEATLIST,5,2,171,191,WS_TABSTOP - GROUPBOX "Cheat Search",IDC_GROUPBOX_CHEATSEARCH,181,2,244,191,WS_TABSTOP - CONTROL "",IDC_LIST_CHEATS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,11,11,159,131 + GROUPBOX "Active Cheats",IDC_GROUPBOX_CHEATLIST,5,2,178,209,WS_TABSTOP + GROUPBOX "Cheat Search",IDC_GROUPBOX_CHEATSEARCH,188,2,201,209,WS_TABSTOP + CONTROL "",IDC_LIST_CHEATS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,11,11,167,131 LTEXT "Name:",IDC_STATIC,13,147,22,10 - LTEXT "Address:",IDC_STATIC,13,162,30,8 - LTEXT "Value:",IDC_STATIC,74,162,22,8 - LTEXT "Compare:",IDC_STATIC,117,162,34,8 - EDITTEXT IDC_CHEAT_NAME,37,145,132,12,ES_AUTOHSCROLL | ES_WANTRETURN - EDITTEXT IDC_CHEAT_ADDR,45,160,25,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_VAL,98,160,16,12,ES_UPPERCASE | ES_WANTRETURN - EDITTEXT IDC_CHEAT_COM,153,160,16,12,ES_UPPERCASE | ES_WANTRETURN - DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,12,174,36,16 - PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,48,174,36,16 - PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,84,174,36,16 - PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,187,12,55,15 - PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,187,35,55,15 - LTEXT "0x",IDC_STATIC,246,38,9,8 - EDITTEXT IDC_CHEAT_VAL_KNOWN,256,36,18,12,ES_UPPERCASE - GROUPBOX "Previous Compare",204,186,57,113,119 - PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,192,74,55,15,WS_GROUP - PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,192,101,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,104,22,10 - EDITTEXT IDC_CHEAT_VAL_NE_BY,275,103,18,12,ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,192,128,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,131,22,10 - EDITTEXT IDC_CHEAT_VAL_GT_BY,275,130,18,12,ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,192,155,55,15 - CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,251,158,22,10 - EDITTEXT IDC_CHEAT_VAL_LT_BY,275,157,18,12,ES_UPPERCASE | ES_WANTRETURN - GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,304,8,116,168,WS_TABSTOP - CONTROL "",IDC_CHEAT_LIST_POSSIBILITIES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,309,18,106,153 + LTEXT "Value:",IDC_CHEAT_VAL_LABEL,83,162,22,8 + LTEXT "Compare:",IDC_CHEAT_COM_LABEL,126,162,34,8 + EDITTEXT IDC_CHEAT_NAME,37,145,141,12,ES_AUTOHSCROLL | ES_WANTRETURN + EDITTEXT IDC_CHEAT_ADDR,54,160,25,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_VAL,107,160,16,12,ES_UPPERCASE | ES_WANTRETURN + EDITTEXT IDC_CHEAT_COM,162,160,16,12,ES_UPPERCASE | ES_WANTRETURN + DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,11,192,36,16 + PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,49,192,36,16 + PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,87,192,36,16 + PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,200,12,55,15 + PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,200,32,55,15 + LTEXT "0x",IDC_CHEAT_LABEL_KNOWN,225,51,9,8 + EDITTEXT IDC_CHEAT_VAL_KNOWN,236,49,18,12,ES_UPPERCASE + GROUPBOX "Previous Compare",IDC_GROUP_PREV_COM,193,63,69,132 + PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,200,75,55,15,WS_GROUP + PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,200,96,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,114,22,10 + EDITTEXT IDC_CHEAT_VAL_NE_BY,236,113,18,12,ES_UPPERCASE | ES_WANTRETURN + PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,200,129,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,147,22,10 + EDITTEXT IDC_CHEAT_VAL_GT_BY,236,146,18,12,ES_UPPERCASE | ES_WANTRETURN + PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,200,162,55,15 + CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,180,22,10 + EDITTEXT IDC_CHEAT_VAL_LT_BY,236,179,18,12,ES_UPPERCASE | ES_WANTRETURN + GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,266,8,117,187,WS_TABSTOP + CONTROL "",IDC_CHEAT_LIST_POSSIBILITIES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,272,18,106,172 CONTROL " Pause emulation when this window is active",IDC_CHEAT_PAUSEWHENACTIVE, - "Button",BS_AUTOCHECKBOX,188,179,157,10 - PUSHBUTTON "Import...",IDC_BTN_CHEAT_ADDFROMFILE,128,174,43,16 + "Button",BS_AUTOCHECKBOX,198,198,157,10 + PUSHBUTTON "Import...",IDC_BTN_CHEAT_ADDFROMFILE,136,192,43,16 + CONTROL "Address:",IDC_RADIO_ADDRESS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,161,42,10 + CONTROL "Cheat Code / Game Genie:",IDC_RADIO_TEXT_CODE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,176,101,10 + EDITTEXT IDC_CHEAT_TEXT,115,175,63,12,ES_UPPERCASE | ES_AUTOHSCROLL | WS_DISABLED END IDD_LUA DIALOGEX 0, 0, 270, 150 @@ -2431,8 +2433,8 @@ BEGIN "CHEATCONSOLE", DIALOG BEGIN - RIGHTMARGIN, 430 - BOTTOMMARGIN, 197 + RIGHTMARGIN, 394 + BOTTOMMARGIN, 215 END "VIDEOCONFIG", DIALOG @@ -2682,12 +2684,12 @@ IDB_BITMAP_SELECTED17 BITMAP "res\\te_17_selected.bmp" IDB_BITMAP_SELECTED18 BITMAP "res\\te_18_selected.bmp" IDB_BITMAP_SELECTED19 BITMAP "res\\te_19_selected.bmp" IDB_BRANCH_SPRITESHEET BITMAP "res\\branch_spritesheet.bmp" -#endif // English (U.S.) resources +#endif // Neutral resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// English (U.S) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US @@ -2716,7 +2718,7 @@ END #endif // APSTUDIO_INVOKED -#endif // English (U.S.) resources +#endif // English (U.S) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index c94445c3..8f8f6adc 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} -// Microsoft Visual C++ 生成的包含文件。 -// 供 res.rc 使用 +// Microsoft Visual C++ generated file +// for res.rc // #define CLOSE_BUTTON 1 #define BUTTON_CLOSE 1 @@ -273,6 +273,7 @@ #define COMBO_NETMOO_LOCAL_PLAYERS 204 #define MENU_MV_EDIT_FIND_NEXT 204 #define IDC_DEBUGGER_FLAG_D 204 +#define IDC_GROUP_PREV_COM 204 #define IDC_NETMOO_KEY 205 #define IDC_DEBUGGER_FLAG_I 205 #define IDB_BITMAP20 205 @@ -584,6 +585,7 @@ #define IDC_NOTE_TO_FIND 1147 #define IDC_AUTOSAVE_PERIOD 1147 #define IDC_EXTRA_SCANLINES 1147 +#define IDC_CHEAT_TEXT 1147 #define IDC_BUTTON9 1148 #define TASEDITOR_FIND_NEXT_SIMILAR_MARKER 1148 #define IDC_SYMBOLIC_ADDRESS 1148 @@ -792,6 +794,12 @@ #define IDC_EXTRA_SCANLINES_TEXT 1309 #define IDC_DATASIZE_GROUPBOX 1310 #define IDC_DATATYPE_GROUPBOX 1311 +#define IDC_RADIO_ADDRESS 1312 +#define IDC_RADIO_TEXT_CODE 1313 +#define IDC_CHEAT_VAL_LABEL 1314 +#define IDC_CHEAT_COM_LABEL 1315 +#define IDC_CHEAT_KNOWN_LABEL 1316 +#define IDC_CHEAT_LABEL_KNOWN 1316 #define MENU_NETWORK 40040 #define MENU_PALETTE 40041 #define MENU_SOUND 40042 @@ -1273,7 +1281,7 @@ #define MENU_MV_FILE_LOAD_OAM 40599 #define DISASM_CONTEXT_SELECTALL 40599 #define CHEAT_CONTEXT_POSSI_ADDTOMEMORYWATCH 40600 -#define CHEAT_CONTEXT_POSSI_ADDCHEAT 40601 +#define CHEAT_CONTEXT_POSSI_ADDCHEAT 40601 #define CHEAT_CONTEXT_POSSI_GOTOINHEXEDITOR 40602 #define CHEAT_CONTEXT_POSSI_ADDTORAMWATCH 40603 #define IDC_DEBUGGER_ICONTRAY 55535 @@ -1290,7 +1298,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 304 #define _APS_NEXT_COMMAND_VALUE 40611 -#define _APS_NEXT_CONTROL_VALUE 1312 +#define _APS_NEXT_CONTROL_VALUE 1317 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif