diff --git a/desmume/src/cheatSystem.cpp b/desmume/src/cheatSystem.cpp index edeb837d1..e62ef9b62 100644 --- a/desmume/src/cheatSystem.cpp +++ b/desmume/src/cheatSystem.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2009-2015 DeSmuME team + Copyright (C) 2009-2016 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ BOOL CHEATS::add(u8 size, u32 address, u32 val, char *description, BOOL enabled) { size_t num = list.size(); list.push_back(CHEATS_LIST()); - list[num].code[0][0] = address & 0x00FFFFFF; + list[num].code[0][0] = address & 0x0FFFFFFF; list[num].code[0][1] = val; list[num].num = 1; list[num].type = 0; @@ -63,7 +63,7 @@ BOOL CHEATS::add(u8 size, u32 address, u32 val, char *description, BOOL enabled) BOOL CHEATS::update(u8 size, u32 address, u32 val, char *description, BOOL enabled, u32 pos) { if (pos >= list.size()) return FALSE; - list[pos].code[0][0] = address & 0x00FFFFFF; + list[pos].code[0][0] = address & 0x0FFFFFFF; list[pos].code[0][1] = val; list[pos].num = 1; list[pos].type = 0; @@ -727,7 +727,7 @@ BOOL CHEATS::load() if (tmp_cht.type == 0) { tmp_cht.size = std::min(3, ((tmp_cht.code[i][0] & 0xF0000000) >> 28)); - tmp_cht.code[i][0] &= 0x00FFFFFF; + tmp_cht.code[i][0] &= 0x0FFFFFFF; } strncpy(tmp_buf, &codeStr[(i * 16) + 8], 8); @@ -765,8 +765,8 @@ void CHEATS::process(int targetType) { case 0: // internal cheat system { - //INFO("list at 0x02|%06X value %i (size %i)\n",list[i].code[0], list[i].lo[0], list[i].size); - u32 addr = list[i].code[0][0] | 0x02000000; + //INFO("list at 0x0|%07X value %i (size %i)\n",list[i].code[0], list[i].lo[0], list[i].size); + u32 addr = list[i].code[0][0]; u32 val = list[i].code[0][1]; switch (list[i].size) { diff --git a/desmume/src/windows/cheatsWin.cpp b/desmume/src/windows/cheatsWin.cpp index 40a9dd424..4aeed1547 100644 --- a/desmume/src/windows/cheatsWin.cpp +++ b/desmume/src/windows/cheatsWin.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2009-2015 DeSmuME team + Copyright (C) 2009-2016 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -96,7 +96,16 @@ void generateAR(HWND dialog, u32 addr, u32 val, u8 size) // Action Replay code generate if (size > 3) size = 3; char buf[64] = {0}; - sprintf(buf, "%X%07X %08X", 3-size, addr | 0x02000000, val); + + //I don't think this is needed, really + //we'll just accurately produce an AR code that faithfully doesn't work + //if((addr&0x02000000) != 0x02000000) + //{ + // SetWindowText(GetDlgItem(dialog, IDC_AR_CODE), ""); + // return; + //} + + sprintf(buf, "%X%07X %08X", 3-size, addr, val); SetWindowText(GetDlgItem(dialog, IDC_AR_CODE), buf); } @@ -177,7 +186,7 @@ INT_PTR CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam memset(editBuf, 0, sizeof(editBuf)); memset(&tempCheat, 0, sizeof(tempCheat)); saveOldEditProc = oldEditProc; - SendMessage(GetDlgItem(dialog, IDC_EDIT1), EM_SETLIMITTEXT, 6, 0); + SendMessage(GetDlgItem(dialog, IDC_EDIT1), EM_SETLIMITTEXT, 7, 0); SendMessage(GetDlgItem(dialog, IDC_EDIT2), EM_SETLIMITTEXT, 11, 0); SendMessage(GetDlgItem(dialog, IDC_EDIT3), EM_SETLIMITTEXT, 75, 0); oldEditProcHEX = SetWindowLongPtr(GetDlgItem(dialog, IDC_EDIT1), GWLP_WNDPROC, (LONG_PTR)EditValueHEXProc); @@ -186,8 +195,8 @@ INT_PTR CALLBACK CheatsAddProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam if (searchAddMode == 1 || searchAddMode == 2) { char buf[12]; - searchAddAddress &= 0x00FFFFFF; - wsprintf(buf, "%06X", searchAddAddress); + searchAddAddress &= 0x0FFFFFFF; + wsprintf(buf, "%07X", searchAddAddress); SetWindowText(GetDlgItem(dialog, IDC_EDIT1), buf); wsprintf(buf, "%i", searchAddValue); SetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf); @@ -371,7 +380,7 @@ INT_PTR CALLBACK CheatsEditProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpara memset(editBuf, 0, sizeof(editBuf)); memset(&tempCheat, 0, sizeof(tempCheat)); saveOldEditProc = oldEditProc; - SendMessage(GetDlgItem(dialog, IDC_EDIT1), EM_SETLIMITTEXT, 6, 0); + SendMessage(GetDlgItem(dialog, IDC_EDIT1), EM_SETLIMITTEXT, 7, 0); SendMessage(GetDlgItem(dialog, IDC_EDIT2), EM_SETLIMITTEXT, 10, 0); SendMessage(GetDlgItem(dialog, IDC_EDIT3), EM_SETLIMITTEXT, 75, 0); oldEditProcHEX = SetWindowLongPtr(GetDlgItem(dialog, IDC_EDIT1), GWLP_WNDPROC, (LONG_PTR)EditValueHEXProc); @@ -381,8 +390,8 @@ INT_PTR CALLBACK CheatsEditProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpara memset(buf, 0, 100); memset(buf2, 0, 100); - tempCheat.code[0][0] &= 0x00FFFFFF; - wsprintf(buf, "%06X", tempCheat.code[0][0]); + tempCheat.code[0][0] &= 0x0FFFFFFF; + wsprintf(buf, "%07X", tempCheat.code[0][0]); SetWindowText(GetDlgItem(dialog, IDC_EDIT1), buf); wsprintf(buf, "%i", tempCheat.code[0][1]); SetWindowText(GetDlgItem(dialog, IDC_EDIT2), buf); @@ -428,7 +437,7 @@ INT_PTR CALLBACK CheatsEditProc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lpara u32 val = 0; sscanf_s(editBuf[0], "%x", &val); - val &= 0x00FFFFFF; + val &= 0x0FFFFFFF; CheatAddVerify(dialog,editBuf[0],editBuf[1],tempCheat.size); tempCheat.code[0][0] = val; } @@ -710,7 +719,7 @@ INT_PTR CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM l { u32 row = ListView_InsertItem(cheatListView, &lvi); ListView_SetCheckState(cheatListView, row, tempCheat.enabled); - wsprintf(buf, "0x02%06X", tempCheat.code[0][0]); + wsprintf(buf, "0x0%07X", tempCheat.code[0][0]); ListView_SetItemText(cheatListView, row, 1, buf); ltoa(tempCheat.code[0][1], buf, 10); ListView_SetItemText(cheatListView, row, 2, buf); @@ -836,7 +845,7 @@ INT_PTR CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM l lvi.iItem = INT_MAX; u32 row = ListView_InsertItem(cheatListView, &lvi); - wsprintf(buf, "0x02%06X", searchAddAddress); + wsprintf(buf, "0x0%07X", searchAddAddress); ListView_SetItemText(cheatListView, row, 1, buf); ltoa(searchAddValue, buf, 10); ListView_SetItemText(cheatListView, row, 2, buf); @@ -899,7 +908,7 @@ INT_PTR CALLBACK CheatsListBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM l char buf[256]; cheats->get(&tempCheat, cheatEditPos); ListView_SetCheckState(cheatListView, cheatEditPos, tempCheat.enabled); - wsprintf(buf, "0x02%06X", tempCheat.code[0][0]); + wsprintf(buf, "0x0%07X", tempCheat.code[0][0]); ListView_SetItemText(cheatListView, cheatEditPos, 1, buf); ltoa(tempCheat.code[0][1], buf, 10); ListView_SetItemText(cheatListView, cheatEditPos, 2, buf); @@ -998,7 +1007,7 @@ void CheatsAddDialog(HWND parentHwnd, u32 address, u32 value, u8 size, const cha //char buf[256]; //cheats->get(&tempCheat, cheatEditPos); //ListView_SetCheckState(cheatListView, cheatEditPos, 0, tempCheat.enabled); - //wsprintf(buf, "0x02%06X", tempCheat.code[0][0]); + //wsprintf(buf, "0x0%07X", tempCheat.code[0][0]); //ListView_SetItemText(cheatListView, cheatEditPos, 1, buf); //ltoa(tempCheat.code[0][1], buf, 10); //ListView_SetItemText(cheatListView, cheatEditPos, 2, buf); @@ -1157,7 +1166,7 @@ INT_PTR CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM while (cheatSearch->getList(&address, &val)) { char buf[256]; - wsprintf(buf, "0x02%06X", address); + wsprintf(buf, "0x0%07X", address); lvi.pszText= buf; u32 row = SendMessage(searchListView, LVM_INSERTITEM, 0, (LPARAM)&lvi); _ltoa(val, buf, 10); @@ -1184,7 +1193,7 @@ INT_PTR CALLBACK CheatsSearchViewWnd(HWND dialog, UINT msg,WPARAM wparam,LPARAM u32 pos = ListView_GetNextItem(searchListView, -1, LVNI_SELECTED|LVNI_FOCUSED); ListView_GetItemText(searchListView, pos, 0, buf, 12); sscanf_s(buf, "%x", &val); - searchAddAddress = val & 0x00FFFFFF; + searchAddAddress = val & 0x0FFFFFFF; ListView_GetItemText(searchListView, pos, 1, buf, 12); searchAddValue = atol(buf); searchAddMode = 1; @@ -1358,14 +1367,15 @@ void CheatAddVerify(HWND dialog,char* addre, char* valu,u8 size) { u32 fix = 0; sscanf_s(addre, "%x", &fix); - fix &= 0x00FFFFFF; + fix &= 0x0FFFFFFF; int parseOffset = 0; if(valu[0] && valu[1] == '-') parseOffset = 1; // typed something in front of - u32 fix2 = strtoul(valu+parseOffset,NULL,10); - if ( (strlen(addre) < 6) || (!strlen(valu)) || fix > 0x400000 + if ( (strlen(addre) < 7) || (!strlen(valu)) + //|| fix > 0x400000 //zero 23-may-2016 - if you want to freeze an address that's nonsense, it's your own funeral || (fix2 > searchRange[size][1] && !(valu[0] == '-' && u32(-s32(fix2))-1 <= searchRange[size][1]/2)) ) { EnableWindow(GetDlgItem(dialog, IDOK), FALSE); diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 9e21e8863..14971c687 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -162,7 +162,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTI CAPTION "Add cheat" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - EDITTEXT IDC_EDIT1,26,17,88,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDIT1,22,17,92,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT2,7,42,107,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT3,7,67,107,30,ES_MULTILINE CONTROL "freeze value",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,47,101,67,10 @@ -175,7 +175,7 @@ BEGIN LTEXT "Address:",IDC_STATIC,9,9,30,8 LTEXT "Value:",IDC_STATIC,9,34,21,8 LTEXT "Description:",IDC_STATIC,9,59,39,8 - LTEXT "0x02",IDC_STATIC,7,19,17,8 + LTEXT "0x0",IDC_STATIC,7,19,13,8 GROUPBOX " Select size ",IDC_STATIC,7,114,107,57 LTEXT "[0..255]",IDC_STATIC_S1,53,124,60,8 LTEXT "[0..65535]",IDC_STATIC_S2,53,134,60,8 @@ -213,7 +213,7 @@ BEGIN DEFPUSHBUTTON "Save",IDOK,109,263,50,14,WS_DISABLED PUSHBUTTON "Cancel",IDCANCEL,163,263,50,14 GROUPBOX " Add cheats code as... ",IDC_STATIC,7,230,205,31 - PUSHBUTTON "Cheats base",IDC_EXPORT,246,263,61,14 + PUSHBUTTON "Cheats Database",IDC_EXPORT,246,263,63,14 END IDD_CHEAT_SEARCH DIALOGEX 0, 0, 177, 211