Merge pull request #51 from owomomo/master

Updated some features of Cheat Dialog
This commit is contained in:
CaH4e3 2019-05-11 21:43:29 +03:00 committed by GitHub
commit 5dc4f288a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 1433 additions and 1512 deletions

View File

@ -40,7 +40,7 @@ static uint8 *CheatRPtrs[64];
vector<uint16> FrozenAddresses; //List of addresses that are currently frozen
void UpdateFrozenList(void); //Function that populates the list of frozen addresses
unsigned int FrozenAddressCount=0; //Keeps up with the Frozen address count, necessary for using in other dialogs (such as hex editor)
unsigned int FrozenAddressCount = 0; //Keeps up with the Frozen address count, necessary for using in other dialogs (such as hex editor)
void FCEU_CheatResetRAM(void)
{
@ -60,9 +60,9 @@ void FCEU_CheatAddRAM(int s, uint32 A, uint8 *p)
}
CHEATF_SUBFAST SubCheats[256];
uint32 numsubcheats=0;
struct CHEATF *cheats=0,*cheatsl=0;
CHEATF_SUBFAST SubCheats[256] = { 0 };
uint32 numsubcheats = 0;
struct CHEATF *cheats = 0, *cheatsl = 0;
#define CHEATC_NONE 0x8000
@ -74,7 +74,7 @@ int savecheats = 0;
static DECLFR(SubCheatsRead)
{
CHEATF_SUBFAST *s=SubCheats;
CHEATF_SUBFAST *s = SubCheats;
int x=numsubcheats;
do
@ -99,40 +99,35 @@ static DECLFR(SubCheatsRead)
void RebuildSubCheats(void)
{
uint32 x;
struct CHEATF *c=cheats;
for(x=0;x<numsubcheats;x++)
SetReadHandler(SubCheats[x].addr,SubCheats[x].addr,SubCheats[x].PrevRead);
struct CHEATF *c = cheats;
for(x = 0; x < numsubcheats; x++)
SetReadHandler(SubCheats[x].addr, SubCheats[x].addr, SubCheats[x].PrevRead);
numsubcheats=0;
numsubcheats = 0;
while(c)
{
if(c->type==1 && c->status)
if(c->type == 1 && c->status)
{
if(GetReadHandler(c->addr)==SubCheatsRead)
if(GetReadHandler(c->addr) != SubCheatsRead)
{
/* Prevent a catastrophe by this check. */
//FCEU_DispMessage("oops",0);
}
else
{
SubCheats[numsubcheats].PrevRead=GetReadHandler(c->addr);
SubCheats[numsubcheats].addr=c->addr;
SubCheats[numsubcheats].val=c->val;
SubCheats[numsubcheats].compare=c->compare;
SetReadHandler(c->addr,c->addr,SubCheatsRead);
SubCheats[numsubcheats].PrevRead = GetReadHandler(c->addr);
SubCheats[numsubcheats].addr = c->addr;
SubCheats[numsubcheats].val = c->val;
SubCheats[numsubcheats].compare = c->compare;
SetReadHandler(c->addr, c->addr, SubCheatsRead);
numsubcheats++;
}
}
c=c->next;
c = c->next;
}
FrozenAddressCount = numsubcheats; //Update the frozen address list
UpdateFrozenList();
//FCEUI_DispMessage("Active Cheats: %d",0, FrozenAddresses.size()/*FrozenAddressCount*/); //Debug
}
void FCEU_PowerCheats()
{
numsubcheats=0; /* Quick hack to prevent setting of ancient read addresses. */
numsubcheats = 0; /* Quick hack to prevent setting of ancient read addresses. */
RebuildSubCheats();
}
@ -144,41 +139,47 @@ int FCEU_CalcCheatAffectedBytes(uint32 address, uint32 size) {
return count;
}
static int AddCheatEntry(char *name, uint32 addr, uint8 val, int compare, int status, int type);
static int AddCheatEntry(const char *name, uint32 addr, uint8 val, int compare, int status, int type);
static void CheatMemErr(void)
{
FCEUD_PrintError("Error allocating memory for cheat data.");
}
/* This function doesn't allocate any memory for "name" */
static int AddCheatEntry(char *name, uint32 addr, uint8 val, int compare, int status, int type)
static int AddCheatEntry(const char *name, uint32 addr, uint8 val, int compare, int status, int type)
{
struct CHEATF *temp;
if(!(temp=(struct CHEATF *)FCEU_dmalloc(sizeof(struct CHEATF))))
if(!(temp = (struct CHEATF *)FCEU_dmalloc(sizeof(struct CHEATF))))
{
CheatMemErr();
return(0);
}
temp->name=name;
temp->addr=addr;
temp->val=val;
temp->status=status;
temp->compare=compare;
temp->type=type;
temp->next=0;
temp->name = strcpy((char*) FCEU_dmalloc(strlen(name) + 1), name);
temp->addr = addr;
temp->val = val;
temp->status = status;
temp->compare = compare;
temp->type = type;
temp->next = 0;
if(cheats)
{
cheatsl->next=temp;
cheatsl=temp;
cheatsl->next = temp;
cheatsl = temp;
}
else
cheats=cheatsl=temp;
cheats = cheatsl = temp;
return(1);
return (1);
}
void FCEU_LoadGameCheats(FILE *override)
/* The "override_existing" parameter is used only in cheat dialog import.
Since the default behaviour will reset numsubcheats to 0 everytime,
In game loading, this is absolutely right, but when importing in cheat window,
resetting numsubcheats to 0 will override existed cheat items to make them
invalid.
*/
void FCEU_LoadGameCheats(FILE *override, int override_existing)
{
FILE *fp;
unsigned int addr;
@ -188,85 +189,90 @@ void FCEU_LoadGameCheats(FILE *override)
unsigned int compare;
int x;
char linebuf[2048];
char *namebuf;
int tc=0;
char linebuf[2048] = { 0 };
char namebuf[128] = { 0 };
int tc = 0;
char *fn;
numsubcheats=savecheats=0;
savecheats = 0;
if (override_existing)
numsubcheats = 0;
if(override)
fp = override;
else
{
fn=strdup(FCEU_MakeFName(FCEUMKF_CHEAT,0,0).c_str());
fp=FCEUD_UTF8fopen(fn,"rb");
fn = strdup(FCEU_MakeFName(FCEUMKF_CHEAT, 0, 0).c_str());
fp = FCEUD_UTF8fopen(fn, "rb");
free(fn);
if(!fp) return;
if (!fp) {
return;
}
}
FCEU_DispMessage("Cheats file loaded.",0); //Tells user a cheats file was loaded.
while(fgets(linebuf,2048,fp) != nullptr)
while(fgets(linebuf, 2048, fp) != nullptr)
{
char *tbuf=linebuf;
int doc=0;
char *tbuf = linebuf;
int doc = 0;
addr=val=compare=status=type=0;
addr = val = compare = status = type = 0;
if(tbuf[0]=='S')
if(tbuf[0] == 'S')
{
tbuf++;
type=1;
type = 1;
}
else type=0;
else
type = 0;
if(tbuf[0]=='C')
if(tbuf[0] == 'C')
{
tbuf++;
doc=1;
doc = 1;
}
if(tbuf[0]==':')
if(tbuf[0] == ':')
{
tbuf++;
status=0;
status = 0;
}
else status=1;
else status = 1;
if(doc)
{
char *neo=&tbuf[4+2+2+1+1+1];
if(sscanf(tbuf,"%04x%*[:]%02x%*[:]%02x",&addr,&val,&compare)!=3)
char *neo = &tbuf[4+2+2+1+1+1];
if(sscanf(tbuf, "%04x%*[:]%02x%*[:]%02x", &addr, &val, &compare) != 3)
continue;
if (!(namebuf=(char *)FCEU_dmalloc(strlen(neo)+1)))
return;
strcpy(namebuf,neo);
char namebuf[128];
strcpy(namebuf, neo);
}
else
{
char *neo=&tbuf[4+2+1+1];
if(sscanf(tbuf,"%04x%*[:]%02x",&addr,&val)!=2)
char *neo = &tbuf[4+2+1+1];
if(sscanf(tbuf, "%04x%*[:]%02x", &addr, &val) != 2)
continue;
if (!(namebuf=(char *)FCEU_dmalloc(strlen(neo)+1)))
return;
strcpy(namebuf,neo);
strcpy(namebuf, neo);
}
for(x=0;x<(int)strlen(namebuf);x++)
for(x = 0; x < (int)strlen(namebuf); x++)
{
if(namebuf[x]==10 || namebuf[x]==13)
if(namebuf[x] == 10 || namebuf[x] == 13)
{
namebuf[x]=0;
namebuf[x] = 0;
break;
}
else if(namebuf[x] > 0x00 && namebuf[x] < 0x20)
namebuf[x]=0x20;
namebuf[x] = 0x20;
}
AddCheatEntry(namebuf,addr,val,doc?compare:-1,status,type);
AddCheatEntry(namebuf, addr, val, doc ? compare : -1, status, type);
tc++;
}
RebuildSubCheats();
FCEU_DispMessage("Cheats file loaded.", 0); //Tells user a cheats file was loaded.
if(!override)
fclose(fp);
}
@ -355,23 +361,13 @@ void FCEU_FlushGameCheats(FILE *override, int nosave)
int FCEUI_AddCheat(const char *name, uint32 addr, uint8 val, int compare, int type)
{
char *t;
if(!(t=(char *)FCEU_dmalloc(strlen(name)+1)))
{
CheatMemErr();
return(0);
}
strcpy(t,name);
if(!AddCheatEntry(t,addr,val,compare,1,type))
{
free(t);
return(0);
}
savecheats=1;
if(!AddCheatEntry(name, addr, val, compare, 1, type))
return 0;
savecheats = 1;
RebuildSubCheats();
return(1);
return 1;
}
int FCEUI_DelCheat(uint32 which)
@ -588,43 +584,40 @@ int FCEUI_DecodePAR(const char *str, int *a, int *v, int *c, int *type)
int FCEUI_SetCheat(uint32 which, const char *name, int32 a, int32 v, int c, int s, int type)
{
struct CHEATF *next=cheats;
uint32 x=0;
struct CHEATF *next = cheats;
uint32 x = 0;
while(next)
{
if(x==which)
if(x == which)
{
if(name)
{
char *t;
if((t=(char *)realloc(next->name, strlen(name)+1)))
{
next->name=t;
strcpy(next->name,name);
}
if((t = (char *)realloc(next->name, strlen(name) + 1)))
strcpy(next->name = t, name);
else
return(0);
return 0;
}
if(a>=0)
next->addr=a;
if(v>=0)
next->val=v;
if(s>=0)
next->status=s;
if(c>=-1)
next->compare=c;
next->type=type;
if(a >= 0)
next->addr = a;
if(v >= 0)
next->val = v;
if(s >= 0)
next->status = s;
if(c >= -1)
next->compare = c;
next->type = type;
savecheats=1;
savecheats = 1;
RebuildSubCheats();
return(1);
return 1;
}
next=next->next;
next = next->next;
x++;
}
return(0);
return 0;
}
/* Convenience function. */
@ -731,7 +724,7 @@ void FCEUI_CheatSearchGet(int (*callb)(uint32 a, uint8 last, uint8 current, void
void FCEUI_CheatSearchGetRange(uint32 first, uint32 last, int (*callb)(uint32 a, uint8 last, uint8 current))
{
uint32 x;
uint32 in=0;
uint32 in = 0;
if(!CheatComp)
{
@ -740,14 +733,15 @@ void FCEUI_CheatSearchGetRange(uint32 first, uint32 last, int (*callb)(uint32 a,
return;
}
for(x=0;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW) && CheatRPtrs[x>>10])
for(x = 0; x < 0x10000; x++)
if(!(CheatComp[x] & CHEATC_NOSHOW) && CheatRPtrs[x >> 10])
{
if(in>=first)
if(!callb(x,CheatComp[x],CheatRPtrs[x>>10][x]))
if(in >= first)
if(!callb(x, CheatComp[x], CheatRPtrs[x >> 10][x]))
break;
in++;
if(in>last) return;
if(in > last)
return;
}
}
@ -793,130 +787,56 @@ void FCEUI_CheatSearchEnd(int type, uint8 v1, uint8 v2)
}
}
if(!type) // Change to a specific value.
switch (type)
{
for(x=0;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatComp[x]==v1 && CheatRPtrs[x>>10][x]==v2)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==1) // Search for relative change(between values).
{
for(x=0;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatComp[x]==v1 && CAbs(CheatComp[x]-CheatRPtrs[x>>10][x])==v2)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==2) // Purely relative change.
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CAbs(CheatComp[x]-CheatRPtrs[x>>10][x])==v2)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==3) // Any change.
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatComp[x]!=CheatRPtrs[x>>10][x])
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
default:
case FCEU_SEARCH_SPECIFIC_CHANGE: // Change to a specific value
for (x = 0; x < 0x10000; ++x)
if (!(CheatComp[x] & CHEATC_NOSHOW) && (CheatComp[x] != v1 || CheatRPtrs[x >> 10][x] != v2))
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_RELATIVE_CHANGE: // Search for relative change (between values).
for (x = 0; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && (CheatComp[x] != v1 || CAbs(CheatComp[x] - CheatRPtrs[x >> 10][x]) != v2))
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_PUERLY_RELATIVE_CHANGE: // Purely relative change.
for (x = 0x000; x<0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CAbs(CheatComp[x] - CheatRPtrs[x >> 10][x]) != v2)
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_ANY_CHANGE: // Any change.
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CheatComp[x] == CheatRPtrs[x >> 10][x])
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_NEWVAL_KNOWN: // new value = known
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CheatRPtrs[x >> 10][x] != v1)
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_NEWVAL_GT: // new value greater than
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CheatComp[x] >= CheatRPtrs[x >> 10][x])
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_NEWVAL_LT: // new value less than
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CheatComp[x] <= CheatRPtrs[x >> 10][x])
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_NEWVAL_GT_KNOWN: // new value greater than by known value
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && CheatRPtrs[x >> 10][x] - CheatComp[x] != v2)
CheatComp[x] |= CHEATC_EXCLUDED;
break;
case FCEU_SEARCH_NEWVAL_LT_KNOWN: // new value less than by known value
for (x = 0x000; x < 0x10000; x++)
if (!(CheatComp[x] & CHEATC_NOSHOW) && (CheatComp[x] - CheatRPtrs[x >> 10][x]) != v2)
CheatComp[x] |= CHEATC_EXCLUDED;
break;
}
}
else if(type==4) // new value = known
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatRPtrs[x>>10][x]==v1)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==5) // new value greater than
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatComp[x]<CheatRPtrs[x>>10][x])
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==6) // new value less than
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if(CheatComp[x]>CheatRPtrs[x>>10][x])
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==7) // new value greater than by known value
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if((CheatRPtrs[x>>10][x]-CheatComp[x])==v2)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
else if(type==8) // new value less than by known value
{
for(x=0x000;x<0x10000;x++)
if(!(CheatComp[x]&CHEATC_NOSHOW))
{
if((CheatComp[x]-CheatRPtrs[x>>10][x])==v2)
{
}
else
CheatComp[x]|=CHEATC_EXCLUDED;
}
}
}
int FCEU_CheatGetByte(uint32 A)
@ -947,7 +867,7 @@ void UpdateFrozenList(void)
uint32 x;
FrozenAddresses.clear(); //Clear vector and repopulate
for(x=0;x<numsubcheats;x++)
for(x = 0; x < numsubcheats; x++)
{
FrozenAddresses.push_back(SubCheats[x].addr);
//FCEU_printf("Address %d: %d \n",x,FrozenAddresses[x]); //Debug
@ -958,7 +878,7 @@ void UpdateFrozenList(void)
// disable all cheats
int FCEU_DisableAllCheats(){
int count = 0;
struct CHEATF *next=cheats;
struct CHEATF *next = cheats;
while(next)
{
if(next->status){
@ -967,7 +887,7 @@ int FCEU_DisableAllCheats(){
next->status = 0;
next = next->next;
}
savecheats=1;
savecheats = 1;
RebuildSubCheats();
return count;
}

View File

@ -1,7 +1,7 @@
void FCEU_CheatResetRAM(void);
void FCEU_CheatAddRAM(int s, uint32 A, uint8 *p);
void FCEU_LoadGameCheats(FILE *override);
void FCEU_LoadGameCheats(FILE *override, int override_existing = 1);
void FCEU_FlushGameCheats(FILE *override, int nosave);
void FCEU_ApplyPeriodicCheats(void);
void FCEU_PowerCheats(void);
@ -24,7 +24,7 @@ typedef struct {
struct CHEATF {
struct CHEATF *next;
char *name;
char *name = "";
uint16 addr;
uint8 val;
int compare; /* -1 for no compare. */
@ -32,9 +32,26 @@ struct CHEATF {
int status;
};
struct SEARCHPOSSIBLE {
uint16 addr;
uint8 previous;
uint8 current;
bool update;
};
#define FCEU_SEARCH_SPECIFIC_CHANGE 0
#define FCEU_SEARCH_RELATIVE_CHANGE 1
#define FCEU_SEARCH_PUERLY_RELATIVE_CHANGE 2
#define FCEU_SEARCH_ANY_CHANGE 3
#define FCEU_SEARCH_NEWVAL_KNOWN 4
#define FCEU_SEARCH_NEWVAL_GT 5
#define FCEU_SEARCH_NEWVAL_LT 6
#define FCEU_SEARCH_NEWVAL_GT_KNOWN 7
#define FCEU_SEARCH_NEWVAL_LT_KNOWN 8
#define CalcAddressRangeCheatCount(count, address, size) \
count = 0; \
for (int i = 0; i < numsubcheats && count < size; ++i) \
if (SubCheats[i].addr >= address && SubCheats[i].addr < address + size) \
++count;
++count

View File

@ -14,7 +14,9 @@ inline FILE *FCEUD_UTF8fopen(const std::string &n, const char *mode) { return FC
EMUFILE_FILE* FCEUD_UTF8_fstream(const char *n, const char *m);
inline EMUFILE_FILE* FCEUD_UTF8_fstream(const std::string &n, const char *m) { return FCEUD_UTF8_fstream(n.c_str(),m); }
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex);
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex, bool* userCancel);
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename);
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, bool* userCancel);
ArchiveScanRecord FCEUD_ScanArchive(std::string fname);
//mbg 7/23/06

View File

@ -275,10 +275,6 @@ public:
}
};
// indicator for the open in archive dialog that if the load was canceled by the user.
// TODO: Since I can't think of a better way to indicate it, hope someone could imporve it.
extern bool archiveManuallyCanceled;
static BOOL CALLBACK ArchiveFileSelectorCallback(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
@ -289,7 +285,7 @@ static BOOL CALLBACK ArchiveFileSelectorCallback(HWND hwndDlg, UINT uMsg, WPARAM
for(uint32 i=0;i<currFileSelectorContext->size();i++)
{
std::string& name = (*currFileSelectorContext)[i].name;
SendMessage(hwndListbox,LB_ADDSTRING,0,(LPARAM)name.c_str());
SendMessage(hwndListbox, LB_ADDSTRING, 0, (LPARAM)name.c_str());
}
}
break;
@ -310,9 +306,6 @@ static BOOL CALLBACK ArchiveFileSelectorCallback(HWND hwndDlg, UINT uMsg, WPARAM
case IDCANCEL:
EndDialog(hwndDlg, LB_ERR);
// Tell the parent window that the operation was canceled rather than loading error
// TODO: find a better way to do this.
archiveManuallyCanceled = true;
return TRUE;
}
break;
@ -493,7 +486,7 @@ extern HWND hAppWnd;
//TODO - factor out the filesize and name extraction code from below (it is already done once above)
static FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, int innerIndex)
static FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, int innerIndex, bool* userCancel)
{
FCEUFILE* fp = 0;
@ -565,7 +558,11 @@ static FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, s
delete ms;
}
} //if returned a file from the fileselector
}
else {
if(userCancel)
*userCancel = true;
}//if returned a file from the fileselector
} //if we opened the 7z correctly
object->Release();
@ -574,11 +571,26 @@ static FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, s
return fp;
}
static FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, int innerIndex)
{
return FCEUD_OpenArchive(asr, fname, innerFilename, innerIndex, NULL);
}
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex, bool* userCancel)
{
return FCEUD_OpenArchive(asr, fname, 0, innerIndex, userCancel);
}
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex)
{
return FCEUD_OpenArchive(asr, fname, 0, innerIndex);
}
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, bool* userCancel)
{
return FCEUD_OpenArchive(asr, fname, innerFilename, -1, userCancel);
}
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename)
{
return FCEUD_OpenArchive(asr, fname, innerFilename, -1);

View File

@ -11,8 +11,10 @@ void initArchiveSystem();
//if you want to autopilot this, pass in an innerfilename to try and automatically load
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename);
FCEUFILE* FCEUD_OpenArchive(ArchiveScanRecord& asr, std::string& fname, std::string* innerFilename, bool* userCancel);
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex);
FCEUFILE* FCEUD_OpenArchiveIndex(ArchiveScanRecord& asr, std::string& fname, int innerIndex, bool* userCancel);
//scans a file to see if it is an archive you can handle
ArchiveScanRecord FCEUD_ScanArchive(std::string fname);

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,21 @@
extern int CheatWindow,CheatStyle; //bbit edited: this line added
extern HWND hCheat;
HWND InitializeCheatList(HWND hwndDlg);
void RedoCheatsLB(HWND hwndDlg);
typedef unsigned int HWAddressType;
void ConfigCheats(HWND hParent);
void DoGGConv();
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<uint16> FrozenAddresses;
@ -17,4 +25,19 @@ extern std::vector<uint16> FrozenAddresses;
void DisableAllCheats();
void UpdateCheatWindowRelatedWindow();
void UpdateCheatRelatedWindow();
// deselect the old one and select the new one
#define ListView_MoveSelectionMark(hwnd, prevIndex, newIndex) \
LVITEM lvi; \
SendMessage(hwnd, LVM_SETITEMSTATE, prevIndex, (LPARAM)&(lvi.mask = LVIF_STATE, lvi.stateMask = LVIS_SELECTED, lvi.state = 0, lvi)), \
SendMessage(hwnd, LVM_SETITEMSTATE, newIndex, (LPARAM)&(lvi.state = LVIS_SELECTED, lvi)), \
SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, newIndex)
#define ClearCheatListText(hwnd) \
(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_TEXT, (LPTSTR)""))

View File

@ -23,7 +23,7 @@ else if (filter > EMUCMDTYPE_MISC && filter < EMUCMDTYPE_MAX || filter == EMUCMD
else \
lpListView->iSubItem = mapInputSortCol; \
if (SendMessage(hwndListView, LVM_SORTITEMS, (WPARAM)lpListView, (LPARAM)MapInputItemSortFunc)) \
UpdateSortColumnIcon(hwndListView, mapInputSortCol, mapInputSortAsc);
UpdateSortColumnIcon(hwndListView, mapInputSortCol, mapInputSortAsc)
void KeyboardUpdateState(void); //mbg merge 7/17/06 yech had to add this
@ -602,23 +602,18 @@ HWND InitializeListView(HWND hwndDlg)
// Init ListView columns.
memset(&lv, 0, sizeof(lv));
lv.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
lv.fmt = LVCFMT_LEFT;
lv.mask = LVCF_TEXT | LVCF_WIDTH;
lv.pszText = "Type";
lv.cx = 80;
SendMessage(hwndListView, LVM_INSERTCOLUMN, (WPARAM)0, (LPARAM)&lv);
memset(&lv, 0, sizeof(lv));
lv.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;
lv.fmt = LVCFMT_LEFT;
lv.pszText = "Command";
lv.cx = 240;
SendMessage(hwndListView, LVM_INSERTCOLUMN, (WPARAM)1, (LPARAM)&lv);
memset(&lv, 0, sizeof(lv));
lv.mask = LVCF_FMT | LVCF_TEXT;
lv.mask ^= LVCF_WIDTH;
lv.fmt = LVCFMT_LEFT;
lv.pszText = "Input";
@ -768,9 +763,10 @@ BOOL CALLBACK MapInputDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
break;
case WM_CLOSE:
EndDialog(hwndDlg, 0);
break;
case WM_DESTROY:
case WM_QUIT:
EndDialog(hwndDlg, 0);
break;
case WM_NOTIFY:

View File

@ -933,23 +933,19 @@ void FreezeRam(int address, int mode, int final){
if (mode == 0 || mode == -1)
{
//mbg merge 6/29/06 - added argument
FCEUI_ListCheats(DeleteCheatCallB,0);
if(mode == 0 && cheatwasdeleted != -1)FCEUI_AddCheat("",address,GetMem(address),-1,1);
FCEUI_ListCheats(DeleteCheatCallB, 0);
if(mode == 0 && cheatwasdeleted != -1)
FCEUI_AddCheat("", address, GetMem(address), -1, 1);
}
else
{
//mbg merge 6/29/06 - added argument
FCEUI_ListCheats(DeleteCheatCallB,0);
FCEUI_AddCheat("",address,GetMem(address),-1,1);
FCEUI_ListCheats(DeleteCheatCallB, 0);
FCEUI_AddCheat("", address, GetMem(address), -1, 1);
}
//if (final)
//{
//if(hCheat)RedoCheatsLB(hCheat);
UpdateColorTable();
//}
UpdateCheatsAdded();
UpdateCheatRelatedWindow();
}
}

View File

@ -702,7 +702,7 @@ static BOOL CALLBACK MemWatchCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA
const int FMAX = 6;
string formula[FMAX] = {"> than", "> by 1", "< than", "< by 1", "equal", "!equal"};
const int kLabelControls[] = {MW_ValueLabel1,MW_ValueLabel2};
const int kLabelControls[] = {MW_VALUELABEL1,MW_VALUELABEL2};
switch(uMsg)
{
@ -847,9 +847,6 @@ static BOOL CALLBACK MemWatchCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARA
RamChange();
break;
case MEMW_FILE_RECENT:
break;
case MEMW_OPTIONS_LOADSTART: //Load on Start up
MemWatchLoadOnStart ^= 1;
CheckMenuItem(memwmenu, MEMW_OPTIONS_LOADSTART, MemWatchLoadOnStart ? MF_CHECKED : MF_UNCHECKED);

View File

@ -32,9 +32,9 @@
#include "../../cheat.h"
#include "resource.h"
#include "cheat.h"
#include "ram_search.h"
#include "ramwatch.h"
#include "cheat.h"
#include <assert.h>
#include <commctrl.h>
#include <list>
@ -1078,9 +1078,6 @@ void signal_new_frame ()
bool RamSearchClosed = false;
bool RamWatchClosed = false;
void ResetResults()
{
reset_address_info();
@ -1093,39 +1090,26 @@ void CloseRamWindows() //Close the Ram Search & Watch windows when rom closes
ResetWatches();
ResetResults();
if (RamSearchHWnd)
{
SendMessage(RamSearchHWnd,WM_CLOSE,NULL,NULL);
RamSearchClosed = true;
}
if (RamWatchHWnd)
{
SendMessage(RamWatchHWnd,WM_CLOSE,NULL,NULL);
RamWatchClosed = true;
}
}
void ReopenRamWindows() //Reopen them when a new Rom is loaded
{
HWND hwnd = GetActiveWindow();
if (RamSearchClosed)
{
RamSearchClosed = false;
if(!RamSearchHWnd)
{
reset_address_info();
LRESULT CALLBACK RamSearchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
RamSearchHWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_RAMSEARCH), hWnd, (DLGPROC) RamSearchProc);
}
}
if (RamWatchClosed || AutoRWLoad)
{
RamWatchClosed = false;
if(!RamWatchHWnd)
{
if (AutoRWLoad) OpenRWRecentFile(0);
if (AutoRWLoad)
OpenRWRecentFile(0);
if (!RamWatchHWnd)
RamWatchHWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_RAMWATCH), hWnd, (DLGPROC) RamWatchProc);
}
}
if (hwnd == hWnd && hwnd != GetActiveWindow())
SetActiveWindow(hWnd); // restore focus to the main window if it had it before
@ -1835,22 +1819,23 @@ LRESULT CALLBACK RamSearchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
// Don't open cheat dialog
switch (sizeType) {
case 0: {
FCEUI_AddCheat("",address,curvalue,-1,1);
break; }
case 1: {
case 0:
FCEUI_AddCheat("",address,curvalue, -1, 1);
break;
case 1:
FCEUI_AddCheat("",address,curvalue & 0xFF, -1, 1);
FCEUI_AddCheat("",address + 1,(curvalue & 0xFF00) / 0x100, -1, 1);
break;
case 2:
FCEUI_AddCheat("",address,curvalue & 0xFF,-1,1);
FCEUI_AddCheat("",address + 1,(curvalue & 0xFF00) / 0x100,-1,1);
break; }
case 2: {
FCEUI_AddCheat("",address,curvalue & 0xFF,-1,1);
FCEUI_AddCheat("",address + 1,(curvalue & 0xFF00) / 0x100,-1,1);
FCEUI_AddCheat("",address + 2,(curvalue & 0xFF0000) / 0x10000,-1,1);
FCEUI_AddCheat("",address + 3,(curvalue & 0xFF000000) / 0x1000000,-1,1);
break; }
FCEUI_AddCheat("",address + 1,(curvalue & 0xFF00) / 0x100, -1, 1);
FCEUI_AddCheat("",address + 2,(curvalue & 0xFF0000) / 0x10000, -1, 1);
FCEUI_AddCheat("",address + 3,(curvalue & 0xFF000000) / 0x1000000, -1, 1);
break;
}
UpdateCheatsAdded();
UpdateCheatRelatedWindow();
watchItemIndex = ListView_GetNextItem(ramListControl, watchItemIndex, LVNI_SELECTED);
@ -1959,30 +1944,36 @@ invalid_field:
case IDC_C_WATCH:
{
HWND ramListControl = GetDlgItem(hDlg,IDC_RAMLIST);
int selCount = ListView_GetSelectedCount(ramListControl);
bool inserted = false;
int watchItemIndex = ListView_GetNextItem(ramListControl, -1, LVNI_SELECTED);
while (watchItemIndex >= 0)
int selCount = SendMessage(ramListControl, LVM_GETSELECTEDCOUNT, 0, 0);
if (selCount > 0)
{
AddressWatcher tempWatch;
tempWatch.Address = CALL_WITH_T_SIZE_TYPES_1(GetHardwareAddressFromItemIndex, rs_type_size,rs_t=='s',noMisalign, watchItemIndex);
tempWatch.Size = rs_type_size;
tempWatch.Type = rs_t;
tempWatch.WrongEndian = 0; //Replace when I get little endian working
tempWatch.comment = NULL;
if (selCount == 1)
inserted |= InsertWatch(tempWatch, hDlg);
else
inserted |= InsertWatch(tempWatch);
bool inserted = false;
watchItemIndex = ListView_GetNextItem(ramListControl, watchItemIndex, LVNI_SELECTED);
AddressWatcher* watches = (AddressWatcher*)malloc(selCount * sizeof(AddressWatcher));
int i = 0;
int watchItemIndex = -1;
while ((watchItemIndex = SendMessage(ramListControl, LVM_GETNEXTITEM, watchItemIndex, LVNI_SELECTED)) >= 0)
{
tempWatch.Address = CALL_WITH_T_SIZE_TYPES_1(GetHardwareAddressFromItemIndex, rs_type_size, rs_t == 's', noMisalign, watchItemIndex);
watches[i] = tempWatch;
++i;
}
// bring up the ram watch window if it's not already showing so the user knows where the watch went
if(inserted && !RamWatchHWnd)
if ((selCount == 1 ?
InsertWatch(watches[0], hDlg) : InsertWatches(watches, hDlg, selCount))
&& !RamWatchHWnd)
SendMessage(hWnd, WM_COMMAND, ID_RAM_WATCH, 0);
SetForegroundWindow(RamSearchHWnd);
free(watches);
}
{rv = true; break;}
}
@ -2045,15 +2036,6 @@ invalid_field:
signal_new_size();
{rv = true; break;}
}
//case IDOK:
case IDCANCEL:
RamSearchHWnd = NULL;
/* if (theApp.pauseDuringCheatSearch)
EndDialog(hDlg, true); // this should never be called on a modeless dialog
else
*/
DestroyWindow(hDlg);
{rv = true; break;}
}
// check refresh for comparison preview color update
@ -2097,12 +2079,12 @@ invalid_field:
return rv;
} break;
// case WM_CLOSE:
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
RamSearchHWnd = NULL;
// theApp.modelessCheatDialogIsOpen = false;
// return true;
break;
}

View File

@ -4,7 +4,6 @@
extern char rs_type_size;
extern int ResultCount;
typedef unsigned int HWAddressType;
unsigned int sizeConv(unsigned int index,char size, char *prevSize = &rs_type_size, bool usePrev = false);
unsigned int GetRamValue(unsigned int Addr,char Size);

View File

@ -5,9 +5,9 @@
using namespace std;
#include "resource.h"
#include "ram_search.h"
#include "ramwatch.h"
#include "cheat.h"
#include "ramwatch.h"
#include "ram_search.h"
#include <assert.h>
#include <windows.h>
#include <commctrl.h>
@ -34,7 +34,7 @@ bool RWSaveWindowPos = false; //Keeps track of whether Save Window position is c
char currentWatch[1024];
int ramw_x, ramw_y; //Used to store ramwatch dialog window positions
std::map<int, AddressWatcher> rswatches;
int WatchCount=0;
int WatchCount = 0;
char applicationPath[2048];
struct InitRamWatch
@ -119,73 +119,18 @@ bool InsertWatch(const AddressWatcher& Watch)
NewWatch.Cheats = FCEU_CalcCheatAffectedBytes(NewWatch.Address, WatchSizeConv(NewWatch));
NewWatch.comment = strcpy((char*)malloc(strlen(Watch.comment) + 2), Watch.comment);
// currently it's impossible to add a separator from outside RAM Watch, so no need to check the handle
if (NewWatch.Type == 'S')
separatorCache[i] = SeparatorCache(RamWatchHWnd, NewWatch.comment);
ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount);
// In case the window is not open and somebody call this method outside.
if (RamWatchHWnd)
ListView_SetItemCount(GetDlgItem(RamWatchHWnd, IDC_WATCHLIST), WatchCount);
RWfileChanged = true;
return true;
}
/*
LRESULT CALLBACK PromptWatchNameProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets the description of a watched address
{
RECT r;
RECT r2;
int dx1, dy1, dx2, dy2;
switch(uMsg)
{
case WM_INITDIALOG:
//Clear_Sound_Buffer();
GetWindowRect(hWnd, &r);
dx1 = (r.right - r.left) / 2;
dy1 = (r.bottom - r.top) / 2;
GetWindowRect(hDlg, &r2);
dx2 = (r2.right - r2.left) / 2;
dy2 = (r2.bottom - r2.top) / 2;
//SetWindowPos(hDlg, NULL, max(0, r.left + (dx1 - dx2)), max(0, r.top + (dy1 - dy2)), NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
strcpy(Str_Tmp,"Enter a name for this RAM address.");
SendDlgItemMessage(hDlg,IDC_PROMPT_TEXT,WM_SETTEXT,0,(LPARAM)Str_Tmp);
strcpy(Str_Tmp,"");
SendDlgItemMessage(hDlg,IDC_PROMPT_TEXT2,WM_SETTEXT,0,(LPARAM)Str_Tmp);
return true;
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
{
GetDlgItemText(hDlg,IDC_PROMPT_EDIT,Str_Tmp,80);
InsertWatch(rswatches[WatchCount],Str_Tmp);
EndDialog(hDlg, true);
return true;
break;
}
case IDCANCEL:
EndDialog(hDlg, false);
return false;
break;
}
break;
case WM_CLOSE:
EndDialog(hDlg, false);
return false;
break;
}
return false;
}
*/
bool InsertWatch(const AddressWatcher& Watch, HWND parent)
{
if(!VerifyWatchNotAlreadyAdded(Watch))
@ -198,13 +143,47 @@ 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;
}
bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count)
{
if (count == 1)
return InsertWatch(watches[0], parent);
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)
{
AddressWatcher watcher = watches[i];
watcher.comment = rswatches[-1].comment;
success |= InsertWatch(watcher);
}
rswatches.erase(-1);
return success;
}
return false;
}
void Update_RAM_Watch()
{
BOOL watchChanged[MAX_WATCH_COUNT] = {0};
@ -800,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)
{
@ -810,12 +791,18 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
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];
// -1 means batch add
if (lParam != -1)
{
sprintf(Str_Tmp, "%04X", watcher.Address);
SetDlgItemText(hDlg, IDC_EDIT_COMPAREADDRESS, Str_Tmp);
} else
// Add multiple watches
SetDlgItemText(hDlg, IDC_EDIT_COMPAREADDRESS, "(multiple)");
switch (watcher.Size)
{
case 'b':
@ -847,7 +834,9 @@ LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
SetDlgItemText(hDlg, IDC_PROMPT_EDIT, watcher.comment);
HWND parent = GetParent(hDlg);
if (watcher.Type == 'S' || parent == RamSearchHWnd)
indexes[GetDlgStoreIndex(parent)] = lParam;
if (watcher.Type == 'S' || parent == RamSearchHWnd || parent == hCheat)
{
EnableWindow(GetDlgItem(hDlg, IDC_SPECIFICADDRESS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_DATATYPE_GROUPBOX), FALSE);
@ -871,18 +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)
@ -933,14 +929,22 @@ 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);
if (RamWatchHWnd)
ListView_SetItemCount(GetDlgItem(RamWatchHWnd, IDC_WATCHLIST), WatchCount);
}
else {
// a multiple watches insert operation, just asking for a comment
AddressWatcher& watcher = rswatches[index];
// comment
GetDlgItemText(hDlg, IDC_PROMPT_EDIT, Str_Tmp, 80);
strcpy(watcher.comment, Str_Tmp);
}
EndDialog(hDlg, true);
RWfileChanged = true;
@ -1021,7 +1025,8 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
//regSetDwordValue(RAMWY, ramw_y); TODO
} break;
case WM_INITDIALOG: {
case WM_INITDIALOG:
{
RECT r, r2;
int dx1, dy1, dx2, dy2;
@ -1126,20 +1131,18 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
{
case LVN_ITEMCHANGED: // selection changed event
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lP;
NMLISTVIEW* pNMListView = (NMLISTVIEW*)lP;
if(pNMListView->uNewState & LVIS_FOCUSED ||
(pNMListView->uNewState ^ pNMListView->uOldState) & LVIS_SELECTED)
{
// disable buttons that we don't have the right number of selected items for
RefreshWatchListSelectedCountControlStatus(hDlg, pNMListView->iItem);
}
} break;
case LVN_GETDISPINFO:
{
LV_DISPINFO *Item = (LV_DISPINFO *)lParam;
NMLVDISPINFO *Item = (NMLVDISPINFO*)lParam;
const unsigned int iNum = Item->item.iItem;
if (rswatches[iNum].Type != 'S')
{
@ -1278,17 +1281,13 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
case RAMMENU_FILE_SAVE:
QuickSaveWatches();
break;
case RAMMENU_FILE_SAVEAS:
//case IDC_C_SAVE:
return Save_Watches();
case RAMMENU_FILE_OPEN:
return Load_Watches(true);
case RAMMENU_FILE_APPEND:
//case IDC_C_LOAD:
return Load_Watches(false);
case RAMMENU_FILE_NEW:
//case IDC_C_RESET:
ResetWatches();
return true;
case IDC_C_WATCH_REMOVE:
@ -1301,7 +1300,7 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
ListView_DeleteItem(watchListControl, watchIndex);
watchIndex = ListView_GetNextItem(watchListControl, -1, LVNI_ALL | LVNI_SELECTED);
}
RWfileChanged=true;
RWfileChanged = true;
SetFocus(GetDlgItem(hDlg,IDC_WATCHLIST));
return true;
}
@ -1309,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;
@ -1320,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;
}
@ -1462,8 +1461,10 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
FCEUI_AddCheat("", address + 3, (rswatches[watchIndex].CurValue & 0xFF000000) / 0x1000000, -1, 1);
break;
}
UpdateCheatsAdded();
UpdateCheatWindowRelatedWindow();
UpdateCheatRelatedWindow();
}
else
MessageBox(hDlg, "Sorry, you can't add cheat to a separator.", "Ram Watch", MB_ICONERROR | MB_OK);
@ -1493,12 +1494,9 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
return true;
} break;
// case WM_CLOSE:
// RamWatchHWnd = NULL;
// DragAcceptFiles(hDlg, FALSE);
// DestroyWindow(hDlg);
// return false;
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
// this is the correct place
RamWatchHWnd = NULL;
@ -1507,7 +1505,6 @@ LRESULT CALLBACK RamWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
// release the hdc related objects
SeparatorCache::DeInit();
break;
case WM_DROPFILES:
@ -1532,6 +1529,8 @@ void UpdateWatchCheats() {
void SeparatorCache::Init(HWND hBox)
{
if (!iHeight)
{
RECT ir;
ir.left = LVIR_BOUNDS;
@ -1540,14 +1539,23 @@ void SeparatorCache::Init(HWND hBox)
SendMessage(hBox, LVM_GETITEMRECT, 0, (LPARAM)&ir);
SendMessage(hBox, LVM_SETITEMCOUNT, count, 0);
sepOffY = (iHeight = ir.bottom - ir.top) / 2;
iHeight = ir.bottom - ir.top;
}
if (!sepOffY)
sepOffY = iHeight / 2;
if (!sepPen)
sepPen = CreatePen(PS_SOLID, 1, RGB(160, 160, 160));
if (!sepPenSel)
sepPenSel = CreatePen(PS_SOLID, 1, RGB(224, 224, 224));
if (!sepFon)
{
LOGFONT logFont;
GetObject((HANDLE)SendMessage(hBox, WM_GETFONT, NULL, NULL), sizeof(logFont), &logFont);
sepFon = (HFONT)CreateFontIndirect((logFont.lfWeight = FW_SEMIBOLD, &logFont));
}
}
void SeparatorCache::DeInit()
@ -1555,6 +1563,10 @@ void SeparatorCache::DeInit()
DeleteObject(sepPen);
DeleteObject(sepPenSel);
DeleteObject(sepFon);
sepPen = NULL;
sepPenSel = NULL;
sepFon = NULL;
}

View File

@ -17,18 +17,6 @@ extern bool RWfileChanged;
#define RAMWX "RamwX"
#define RAMWY "RamwY"
// AddressWatcher is self-contained now
struct AddressWatcher
{
unsigned int Address; // hardware address
unsigned int CurValue;
char* comment = NULL; // NULL means no comment, non-NULL means allocated comment
bool WrongEndian;
char Size; //'d' = 4 bytes, 'w' = 2 bytes, 'b' = 1 byte, and 'S' means it's a separator.
char Type;//'s' = signed integer, 'u' = unsigned, 'h' = hex, 'S' = separator
short Cheats; // how many bytes are affected by cheat
};
// Cache all the things required for drawing separator
// to prevent creating and destroying them repeatedly when painting
struct SeparatorCache
@ -58,9 +46,23 @@ extern char Watch_Dir[1024];
extern HWND RamWatchHWnd;
extern HACCEL RamWatchAccels;
// AddressWatcher is self-contained now
struct AddressWatcher
{
unsigned int Address; // hardware address
unsigned int CurValue;
char* comment = NULL; // NULL means no comment, non-NULL means allocated comment
bool WrongEndian;
char Size; //'d' = 4 bytes, 'w' = 2 bytes, 'b' = 1 byte, and 'S' means it's a separator.
char Type;//'s' = signed integer, 'u' = unsigned, 'h' = hex, 'S' = separator
short Cheats; // how many bytes are affected by cheat
};
bool InsertWatch(const AddressWatcher& Watch);
bool InsertWatch(const AddressWatcher& Watch, HWND parent); // asks user for comment)
bool EditWatch(int watchIndex, AddressWatcher& watcher);
bool InsertWatch(const AddressWatcher& Watch, HWND parent); // asks user for comment
bool InsertWatches(const AddressWatcher* watches, HWND parent, const int count);
bool InsertWatch(int watchIndex, const AddressWatcher& watcher);
bool EditWatch(int watchIndex, const AddressWatcher& watcher);
bool RemoveWatch(int watchIndex);
void Update_RAM_Watch();
@ -76,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

View File

@ -269,11 +269,6 @@ void UpdateReplayDialog(HWND hwndDlg)
free(fn);
}
else
{
EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT_OFFSET),FALSE);
EnableWindow(GetDlgItem(hwndDlg,IDC_EDIT_FROM),FALSE);
}
if(doClear)
{
@ -731,8 +726,8 @@ BOOL CALLBACK ReplayDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
case IDYES:
extern void DisableAllCheats();
DisableAllCheats();
extern void UpdateCheatWindowRelatedWindow();
UpdateCheatWindowRelatedWindow();
extern void UpdateCheatRelatedWindow();
UpdateCheatRelatedWindow();
}
}
@ -957,6 +952,23 @@ static BOOL CALLBACK RecordDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
{
case IDOK:
{
extern unsigned int FrozenAddressCount;
if (FrozenAddressCount)
{
char ch[512];
sprintf(ch, "You have %d activated cheats. If this is not your intentional, it can cause playback prblems! Do you want to disable all of them and continue?", FrozenAddressCount);
switch (MessageBox(hwndDlg, ch, "Movie recording problem", MB_YESNOCANCEL | MB_ICONEXCLAMATION))
{
case IDCANCEL:
return TRUE;
case IDYES:
extern void DisableAllCheats();
DisableAllCheats();
extern void UpdateCheatRelatedWindow();
UpdateCheatRelatedWindow();
}
}
LONG lIndex = SendDlgItemMessage(hwndDlg, IDC_COMBO_RECORDFROM, CB_GETCURSEL, 0, 0);
p->szFilename = GetRecordPath(hwndDlg);
p->recordFrom = (int)lIndex;

View File

@ -12,8 +12,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
@ -25,8 +24,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"
@ -206,14 +205,14 @@ BEGIN
MENUITEM "1 on, 1 off", MENU_AUTOFIRE_PATTERN_1
MENUITEM "1 on, 2 off", MENU_AUTOFIRE_PATTERN_2
MENUITEM "1 on, 3 off", MENU_AUTOFIRE_PATTERN_3
MENUITEM "1 on, 4 off", ID_DEBUG_DEBUGGER
MENUITEM "1 on, 5 off", ID_DEBUG_PPUVIEWER
MENUITEM "2 on, 1 off", ID_DEBUG_NAMETABLEVIEWER
MENUITEM "2 on, 2 off", ID_DEBUG_HEXEDITOR
MENUITEM "2 on, 3 off", ID_DEBUG_TRACELOGGER
MENUITEM "1 on, 4 off", MENU_AUTOFIRE_PATTERN_4
MENUITEM "1 on, 5 off", MENU_AUTOFIRE_PATTERN_5
MENUITEM "2 on, 1 off", MENU_AUTOFIRE_PATTERN_6
MENUITEM "2 on, 2 off", MENU_AUTOFIRE_PATTERN_7
MENUITEM "2 on, 3 off", MENU_AUTOFIRE_PATTERN_8
MENUITEM "2 on, 4 off", MENU_AUTOFIRE_PATTERN_9
MENUITEM "3 on, 1 off", ID_DEBUG_GAMEGENIEDECODER
MENUITEM "3 on, 2 off", ID_DEBUG_CDLOGGER
MENUITEM "3 on, 1 off", MENU_AUTOFIRE_PATTERN_10
MENUITEM "3 on, 2 off", MENU_AUTOFIRE_PATTERN_11
MENUITEM "3 on, 3 off", MENU_AUTOFIRE_PATTERN_12
MENUITEM "4 on, 1 off", MENU_AUTOFIRE_PATTERN_13
MENUITEM "4 on, 2 off", MENU_AUTOFIRE_PATTERN_14
@ -633,10 +632,17 @@ CHEATCONTEXTMENUS MENU
BEGIN
POPUP "CheatListPopup"
BEGIN
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
MENUITEM "Toggle selected Cheats", CHEAT_CONTEXT_LIST_TOGGLECHEAT
MENUITEM "Poke Cheat Value", CHEAT_CONTEXT_LIST_POKECHEATVALUE
MENUITEM "Goto in Hex Editor", CHEAT_CONTEXT_LIST_GOTOINHEXEDITOR
MENUITEM "Delete selected Cheats", CHEAT_CONTEXT_LIST_DELETESELECTEDCHEATS
END
POPUP "CheatPossiPopup"
BEGIN
MENUITEM "Add to Memory Watch", CHEAT_CONTEXT_POSSI_ADDTOMEMORYWATCH
MENUITEM "Add cheat", CHEAT_CONTEXT_POSSI_ADDCHEAT
MENUITEM "Add to RAM Watch", CHEAT_CONTEXT_POSSI_ADDTORAMWATCH
MENUITEM "Go to in Hex Editor", CHEAT_CONTEXT_POSSI_GOTOINHEXEDITOR
END
END
@ -1071,7 +1077,7 @@ BEGIN
GROUPBOX "Output/Output Format:",302,10,9,131,93,WS_GROUP
CONTROL "Sound enabled.",CHECK_SOUND_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,22,117,12
GROUPBOX "Buffering:",127,150,9,131,93,WS_GROUP
CONTROL "Use Global Focus",124,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,22,100,12
CONTROL "Use Global Focus",CHECK_SOUND_GLOBAL_FOCUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,22,100,12
CTEXT "Sound Latency",65459,162,50,107,8
CONTROL "",CTL_LATENCY_TRACKBAR,"msctls_trackbar32",WS_TABSTOP,162,70,107,13
GROUPBOX "Master",125,19,142,44,93,WS_GROUP
@ -1327,10 +1333,10 @@ BEGIN
EDITTEXT 1069,171,182,55,14,ES_AUTOHSCROLL
LTEXT "Name",65428,41,7,20,8
LTEXT "Address",65427,6,7,26,8
LTEXT "Value",MW_ValueLabel1,101,7,19,8
LTEXT "Value",MW_VALUELABEL1,101,7,19,8
LTEXT "Name",65425,171,7,20,8
LTEXT "Address",65424,135,7,26,8
LTEXT "Value",MW_ValueLabel2,231,7,19,8
LTEXT "Value",MW_VALUELABEL2,231,7,19,8
LTEXT " ",EDIT00_RESULTS,89,225,26,8
GROUPBOX "Memory Change Monitoring",IDC_STATIC,0,202,129,57,BS_CENTER
LTEXT "Address",IDC_STATIC,6,213,26,8
@ -1560,7 +1566,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
@ -1820,10 +1826,10 @@ BEGIN
CONTROL " Piano Roll",IDC_CHECK_PIANO_ROLL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,68,67,10
CONTROL " Selection",IDC_CHECK_SELECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,83,67,10
GROUPBOX "Greenzone saving options",IDC_STATIC,13,98,97,72
CONTROL " all frames",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,23,109,77,10
CONTROL " every 16th frame",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,23,124,77,10
CONTROL " marked frames",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,23,139,77,10
CONTROL " don't save",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,23,154,77,10
CONTROL " all frames",IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES,"Button",BS_AUTORADIOBUTTON,23,109,77,10
CONTROL " every 16th frame",IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME,"Button",BS_AUTORADIOBUTTON,23,124,77,10
CONTROL " marked frames",IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES,"Button",BS_AUTORADIOBUTTON,23,139,77,10
CONTROL " don't save",IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE,"Button",BS_AUTORADIOBUTTON,23,154,77,10
END
ASSEMBLER DIALOGEX 0, 0, 202, 135
@ -1966,46 +1972,47 @@ BEGIN
LTEXT "New Selection Name:",-1,5,240,68,8
END
CHEATCONSOLE DIALOGEX 0, 0, 379, 189
CHEATCONSOLE DIALOGEX 0, 0, 386, 217
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,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
EDITTEXT IDC_CHEAT_VAL_KNOWN,215,32,18,12,ES_UPPERCASE
GROUPBOX "Previous Compare",204,145,49,113,115
PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,151,62,55,15,WS_GROUP
PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,151,87,55,15
CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,210,90,22,10
EDITTEXT IDC_CHEAT_VAL_NE_BY,234,89,18,12,ES_UPPERCASE | ES_WANTRETURN
PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,151,114,55,15
CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,210,117,22,10
EDITTEXT IDC_CHEAT_VAL_GT_BY,234,116,18,12,ES_UPPERCASE | ES_WANTRETURN
PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,151,141,55,15
CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,210,144,22,10
EDITTEXT IDC_CHEAT_VAL_LT_BY,234,143,18,12,ES_UPPERCASE | ES_WANTRETURN
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
GROUPBOX "Active Cheats",IDC_GROUPBOX_CHEATLIST,5,2,169,209,WS_TABSTOP
GROUPBOX "Cheat Search",IDC_GROUPBOX_CHEATSEARCH,179,2,201,209,WS_TABSTOP
CONTROL "",IDC_LIST_CHEATS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,11,11,157,133
LTEXT "Name:",IDC_STATIC,12,149,22,10
LTEXT "Value:",IDC_CHEAT_VAL_LABEL,73,163,22,8
LTEXT "Compare:",IDC_CHEAT_COM_LABEL,117,163,34,8
EDITTEXT IDC_CHEAT_NAME,37,147,131,12,ES_AUTOHSCROLL | ES_WANTRETURN
EDITTEXT IDC_CHEAT_ADDR,44,161,25,12,ES_UPPERCASE | ES_WANTRETURN
EDITTEXT IDC_CHEAT_VAL,97,161,16,12,ES_UPPERCASE | ES_WANTRETURN
EDITTEXT IDC_CHEAT_COM,152,161,16,12,ES_UPPERCASE | ES_WANTRETURN
DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,9,192,36,16
PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,45,192,36,16
PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,81,192,36,16
PUSHBUTTON "Reset",IDC_BTN_CHEAT_RESET,191,12,55,15
PUSHBUTTON "Known Value:",IDC_BTN_CHEAT_KNOWN,191,32,55,15
LTEXT "0x",IDC_CHEAT_LABEL_KNOWN,216,51,9,8
EDITTEXT IDC_CHEAT_VAL_KNOWN,227,49,18,12,ES_UPPERCASE
GROUPBOX "Previous Compare",IDC_GROUP_PREV_COM,184,63,69,132
PUSHBUTTON "Equal",IDC_BTN_CHEAT_EQ,191,75,55,15,WS_GROUP
PUSHBUTTON "Not Equal",IDC_BTN_CHEAT_NE,191,96,55,15
CONTROL "By:",IDC_CHEAT_CHECK_NE_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,203,114,22,10
EDITTEXT IDC_CHEAT_VAL_NE_BY,227,113,18,12,ES_UPPERCASE | ES_WANTRETURN
PUSHBUTTON "Greater Than",IDC_BTN_CHEAT_GT,191,129,55,15
CONTROL "By:",IDC_CHEAT_CHECK_GT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,203,147,22,10
EDITTEXT IDC_CHEAT_VAL_GT_BY,227,146,18,12,ES_UPPERCASE | ES_WANTRETURN
PUSHBUTTON "Less Than",IDC_BTN_CHEAT_LT,191,162,55,15
CONTROL "By:",IDC_CHEAT_CHECK_LT_BY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,203,180,22,10
EDITTEXT IDC_CHEAT_VAL_LT_BY,227,179,18,12,ES_UPPERCASE | ES_WANTRETURN
GROUPBOX "Possibilities",IDC_CHEAT_BOX_POSSIBILITIES,257,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,263,18,106,172
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
"Button",BS_AUTOCHECKBOX,185,198,157,10
PUSHBUTTON "Import...",IDC_BTN_CHEAT_ADDFROMFILE,126,192,43,16
EDITTEXT IDC_CHEAT_TEXT,105,175,63,12,ES_UPPERCASE | ES_AUTOHSCROLL
LTEXT "Address:",IDC_CHEAT_ADDRESS_LABEL,12,163,30,8
LTEXT "Cheat code / Game Genie:",IDC_CHEAT_CODE_GG_LABEL,12,177,87,8
END
IDD_LUA DIALOGEX 0, 0, 270, 150
@ -2142,7 +2149,7 @@ END
IDD_RAMWATCH DIALOGEX 0, 0, 269, 298
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " RAM Watch"
CAPTION "RAM Watch"
MENU RAMWATCH_MENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
@ -2214,10 +2221,10 @@ BEGIN
CONTROL " Selection",IDC_CHECK_SELECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,122,92,67,10
GROUPBOX "File contents",IDC_STATIC,105,4,111,177
GROUPBOX "Greenzone saving options",IDC_STATIC,112,106,97,69
CONTROL " all frames",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,122,117,77,10
CONTROL " every 16th frame",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,122,131,77,10
CONTROL " marked frames",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,122,145,77,10
CONTROL " don't save",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,122,159,77,10
CONTROL " all frames",IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES,"Button",BS_AUTORADIOBUTTON,122,117,77,10
CONTROL " every 16th frame", IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME,"Button",BS_AUTORADIOBUTTON,122,131,77,10
CONTROL " marked frames", IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES,"Button",BS_AUTORADIOBUTTON,122,145,77,10
CONTROL " don't save", IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE,"Button",BS_AUTORADIOBUTTON,122,159,77,10
CONTROL " Autosave project",IDC_AUTOSAVE_PROJECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,17,81,10
CONTROL " silently",IDC_SILENT_AUTOSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,47,42,10
LTEXT "every",IDC_AUTOSAVE_PERIOD_EVERY_TEXT,14,32,21,8
@ -2425,7 +2432,8 @@ BEGIN
"CHEATCONSOLE", DIALOG
BEGIN
BOTTOMMARGIN, 188
RIGHTMARGIN, 385
BOTTOMMARGIN, 216
END
"VIDEOCONFIG", DIALOG
@ -2499,6 +2507,11 @@ BEGIN
0
END
CHEATCONSOLE AFX_DIALOG_LAYOUT
BEGIN
0
END
/////////////////////////////////////////////////////////////////////////////
//
@ -2670,12 +2683,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
#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
@ -2704,7 +2717,7 @@ END
#endif // APSTUDIO_INVOKED
#endif // English(U.S.) resources
#endif // English (U.S) resources
/////////////////////////////////////////////////////////////////////////////

View File

@ -1,11 +1,10 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 res.rc 使用
// Microsoft Visual C++ generated file
// for res.rc
//
#define CLOSE_BUTTON 1
#define BUTTON_CLOSE 1
#define BTN_CLOSE 1
#define IDB_CLOSE_LOG 1
#define MENU_OPEN_FILE 100
#define EDIT_ROMS 100
#define LBL_LOG_TEXT 100
@ -16,11 +15,9 @@
#define GRP_GAMEPAD1 100
#define IDC_TRACER_LOG 100
#define MENU_MV_FILE_SAVE 100
#define IDC_VIDEOCONFIG_MODE 100
#define IDC_ROMPATCHER_OFFSET_BOX 100
#define IDC_ASSEMBLER_HISTORY 100
#define MENU_CLOSE_FILE 101
#define IDI_ICON1 101
#define CB_DISABLE_SPEED_THROTTLING 101
#define LBL_CDLOGGER_DATACOUNT 101
#define GRP_PPUVIEW_TABLES 101
@ -34,7 +31,6 @@
#define IDC_ROMPATCHER_DOTNES_OFFSET 101
#define IDC_NTVIEW_TABLE_BOX 101
#define IDC_ASSEMBLER_DISASSEMBLY 101
#define IDI_ICON2 102
#define MENU_RECENT_FILES 102
#define CB_LOAD_FILE_OPEN 102
#define LBL_CDLOGGER_UNDEFCOUNT 102
@ -95,7 +91,6 @@
#define IDC_TEXT_LINES_TO_THIS_WINDOW 106
#define BTN_PORT2 107
#define BTN_CDLOGGER_SAVE 107
#define IDC_CHEAT_SCRL_POSSIBILITIES 107
#define IDC_DEBUGGER_STEP_OVER 107
#define IDC_ADDBP_MEM_SPR 107
#define IDC_ROMPATCHER_DISASSEMBLY 107
@ -109,10 +104,8 @@
#define IDC_CHEAT_VAL_GT_BY 109
#define IDC_DEBUGGER_SEEK_TO 109
#define IDC_ROMPATCHER_PATCH_DATA 109
#define IDC_ADDBP_MODE_X2 109
#define IDC_ADDBP_MODE_F 109
#define BTN_CDLOGGER_SAVE_UNUSED 109
#define IDC_VIDEOCONFIG_43 109
#define IDC_VIDEOCONFIG_TVASPECT 109
#define IDC_GROUP_LOG_OPTIONS 109
#define IDC_CHEAT_VAL_LT_BY 110
@ -131,7 +124,6 @@
#define IDC_CHECK_LOG_PROCESSOR_STATUS 111
#define IDC_DEBUGGER_RELOAD_SYMS 111
#define IDC_ROMPATCHER_BTN_SAVE 111
#define IDC_CHEAT_VAL2 111
#define IDC_CHEAT_COM 111
#define IDC_VIDEOCONFIG_DIRECTDRAW_FS 111
#define BTN_AUTO_HOLD 112
@ -142,49 +134,36 @@
#define IDC_EXTRA_LOG_OPTIONS 113
#define BTN_CLEAR_AH 114
#define IDC_CHECK_LOG_NEW_INSTRUCTIONS 114
#define IDD_DIALOG1 114
#define IDC_DEBUGGER_RUN_LINE 114
#define LBL_CDLOGGER_VROMREADCOUNT 114
#define LBL_AUTO_HOLD 115
#define IDC_CHECK_LOG_NEW_DATA 115
#define IDD_DIALOG2 115
#define IDC_DEBUGGER_STEP_OUT3 115
#define IDC_DEBUGGER_RUN_FRAME2 115
#define LBL_CDLOGGER_UNDEFVROMCOUNT 115
#define LBL_CLEAR_AH 116
#define IDC_CHECK_LOG_UPDATE_WINDOW 116
#define IDC_DEBUGGER_RESET_CYCLES_COUNTER 116
#define IDC_DEBUGGER_RESET_COUNTERS 116
#define CHEAT_CONTEXT_TOGGLECHEAT 117
#define IDC_DEBUGGER_RESET_ON_STEP 117
#define CHEAT_CONTEXT_LIST_TOGGLECHEAT 117
#define IDC_DEBUGGER_BREAK_ON_CYCLES 117
#define IDC_CHECK_LINES_TABBING 117
#define IDC_CHECK_CODE_TABBING 117
#define CHEAT_CONTEXT_POKECHEATVALUE 118
#define IDC_DEBUGGER_RESET_ON_BP0 118
#define CHEAT_CONTEXT_LIST_POKECHEATVALUE 118
#define IDC_CHECK_LOG_STATUSES_TO_THE_LEFT 118
#define IDC_DEBUGGER_BOOKMARK_DEL2 118
#define IDC_DEBUGGER_BOOKMARK_NAME 118
#define CHEAT_CONTEXT_GOTOINHEXEDITOR 119
#define CHEAT_CONTEXT_LIST_GOTOINHEXEDITOR 119
#define IDC_DEBUGGER_BREAK_ON_INSTRUCTIONS 119
#define IDC_CHECK_LOG_FRAME_NUMBER 119
#define IDC_CHECK_LOG_FRAMES_COUNT 119
#define IDC_CHECK_LOG_CYCLES_COUNT 120
#define IDC_CHECK_LOG_FRAME_NUMBER3 121
#define CHEAT_CONTEXT_LIST_DELETESELECTEDCHEATS 120
#define IDC_CHECK_LOG_INSTRUCTIONS_COUNT 121
#define COMBO_SOUND_8BIT 122
#define IDD_DIALOG3 123
#define IDC_CHECK_SYMBOLIC_TRACING 123
#define CHECK_SOUND_GLOBAL_FOCUS 124
#define INSERTCOMMENTSUBTITLE 124
#define IDC_CHECK_LOG_MESSAGES 124
#define IDC_CHECK_LOG_BREAKPOINTS 125
#define CHECK_SOUND_ENABLED 126
#define CTL_LATENCY_TRACKBAR 128
#define COMBO_SOUND_QUALITY 129
#define CHECK_SOUND_MUTEFA 130
#define IDC_DISABLE_HW_ACCEL_WIN 130
#define IDC_DISABLE_HW_ACCEL_FS 131
#define DEBUGGER_CONTEXT_TOGGLEBREAK 132
#define MENU_RECORD_MOVIE 141
#define MENU_REPLAY_MOVIE 142
@ -238,6 +217,7 @@
#define IDC_DEBUGGER_FLAG_N 200
#define IDC_ADDBP_ADDR_START 200
#define MENU_POWER 201
#define IDC_GROUPBOX_CHEATLIST 201
#define TXT_PAD2 201
#define IDC_BUTTON_BROWSEFILE 201
#define IDC_CHECK_READONLY 201
@ -260,6 +240,7 @@
#define IDC_ADDBP_CONDITION 202
#define IDC_ASSEMBLER_SAVE 202
#define IDD_TASEDITOR_NEWPROJECT 202
#define IDC_GROUPBOX_CHEATSEARCH 202
#define MENU_SWITCH_DISK 203
#define IDC_NETMOO_NICK 203
#define IDC_CHEAT_BOX_POSSIBILITIES 203
@ -269,11 +250,10 @@
#define IDC_ASSEMBLER_UNDO 203
#define MENU_INSERT_COIN 204
#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
#define IDB_TE_GREEN_ARROW 205
#define IDC_NETMOO_PASS 206
#define IDC_DEBUGGER_FLAG_Z 206
@ -365,13 +345,10 @@
#define IDD_TASEDITOR_SAVINGOPTIONS 289
#define IDD_SYMBOLIC_DEBUG_NAMING 290
#define DLG_SNESPAD 291
#define IDB_PNG2 298
#define MENU_HIDE_MENU 300
#define COMBO_FILTER 300
#define IDC_EDIT_AUTHORINFO 300
#define IDC_LABEL_LENGTH 300
#define MENU_MV_VIEW_RAM 300
#define IDC_RADIO_SCALE 300
#define IDC_DEBUGGER_DISASSEMBLY 300
#define IDC_ASSEMBLER_DEFPUSHBUTTON 300
#define MENU_RUN_IN_BACKGROUND 301
@ -379,20 +356,14 @@
#define IDC_LABEL_FRAMES 301
#define IDC_BTN_CHEAT_ADD 301
#define MENU_MV_VIEW_PPU 301
#define IDC_RADIO_STRETCH 301
#define IDC_DEBUGGER_DISASSEMBLY_VSCR 301
#define MENU_BACKGROUND_INPUT 302
#define IDC_LABEL_UNDOCOUNT 302
#define IDC_BTN_CHEAT_DEL 302
#define IDC_VIDEOCONFIG_XSCALE 302
#define IDC_DEBUGGER_BP_LIST 302
#define MENU_MV_VIEW_OAM 302
#define MENU_MV_VIEW_ROM 303
#define MENU_SHOW_STATUS_ICON 303
#define IDC_LABEL_AUTHORINFO 303
#define IDC_BTN_CHEAT_UPD 303
#define IDC_VIDEOCONFIG_YSCALE 303
#define IDC_DEBUGGER_DISASSEMBLY2 303
#define IDC_DEBUGGER_DISASSEMBLY_LEFT_PANEL 303
#define MENU_ENABLE_AUTOSAVE 304
#define IDC_LABEL_ROMUSED 304
@ -416,10 +387,8 @@
#define IDC_LABEL_PALUSED 309
#define MENU_GAME_GENIE 310
#define IDC_DEBUGGER_VAL_PPU 310
#define IDC_LABEL_PALUSED2 310
#define IDC_LABEL_NEWPPUUSED 310
#define IDC_DEBUGGER_VAL_SPR 311
#define IDC_LABEL_TWEAKCOUNT 311
#define IDC_BTN_CHEAT_ADDFROMFILE 311
#define IDC_DEBUGGER_BOOKMARK 312
#define IDC_DEBUGGER_CYCLES_EXCEED 313
@ -430,7 +399,6 @@
#define MENU_NTSC 330
#define MENU_PAL 331
#define MENU_DENDY 332
#define CHECK_DISABLE_FOURSCORE 400
#define MENU_MV_BOOKMARKS_RM_ALL 400
#define IDC_WINSIZE_MUL_X 400
#define IDC_CHEAT_CHECK_NE_BY 401
@ -442,9 +410,7 @@
#define IDC_CHEAT_CHECK_LT_BY 403
#define IDC_FORCE_ASPECT_CORRECTION 403
#define IDC_DEBUGGER_VAL_S 403
#define IDC_VIDEOCONFIG_ASPECT_X 404
#define IDC_TVASPECT_X 404
#define IDC_VIDEOCONFIG_ASPECT_Y 405
#define IDC_DEBUGGER_VAL_S2 405
#define IDC_TVASPECT_Y 405
#define IDC_VIDEOCONFIG_SCALER_WIN 406
@ -464,29 +430,23 @@
#define IDC_DEBUGGER_VAL_CYCLES_COUNT 503
#define CTL_VOLUME_TRACKBAR_NOISE 504
#define IDC_DEBUGGER_VAL_PPUPIXEL 504
#define IDC_SCANLINE_FIRST_NTSC2 504
#define CTL_VOLUME_TRACKBAR_NOISE2 505
#define CTL_VOLUME_TRACKBAR_PCM 505
#define IDC_DEBUGGER_VAL_CYCLES_COUNT2 505
#define IDC_DEBUGGER_VAL_CYCLES_COUNT3 506
#define IDC_DEBUGGER_VAL_INSTRUCTIONS_COUNT 506
#define IDC_DEBUGGER_VAL_INSTRUCTIONS_COUNT2 507
#define IDC_VIDEOCONFIG_NO8LIM 600
#define IDC_DEBUGGER_ROM_PATCHER 602
#define LIST_DEBUGGER_BOOKMARKS 701
#define BTN_CANCEL 800
#define IDC_EDIT_OFFSET 1000
#define IDC_GAME_GENIE_CODE 1000
#define IDC_MEMVIEWFIND_WHAT 1000
#define IDC_BOOKMARK_DESCRIPTION 1000
#define MW_ADDR00 1001
#define IDC_EDIT_FROM 1001
#define IDC_GAME_GENIE_ADDR 1001
#define IDC_MEMVIEWFIND_TYPE_HEX 1001
#define IDC_NTVIEW_MIRROR_HORIZONTAL 1001
#define IDC_CHECK_STOPMOVIE 1002
#define IDC_GAME_GENIE_COMP 1002
#define IDC_TRACER_STATS 1002
#define IDC_MEMVIEWFIND_TYPE_TEXT 1002
#define IDC_NTVIEW_MIRROR_VERTICAL 1002
#define LV_MAPPING 1003
@ -512,7 +472,6 @@
#define MW_ADDR05 1016
#define MW_ADDR06 1019
#define MW_ADDR07 1022
#define GUI_BOT_BOTMODE 1025
#define MW_ADDR08 1025
#define MW_ADDR09 1028
#define MW_ADDR10 1031
@ -529,7 +488,6 @@
#define MW_ADDR21 1064
#define MW_ADDR22 1067
#define MW_ADDR23 1070
#define GUI_BOT_PART_LAST 1090
#define BTN_ALLOW_LRUD 1117
#define BTN_PRESET_SET1 1119
#define BTN_PRESET_SET2 1120
@ -541,48 +499,36 @@
#define BTN_PRESET_EXPORT2 1126
#define BTN_PRESET_EXPORT3 1127
#define IDC_LIST1 1130
#define IDC_HACKY2 1131
#define IDC_HACKY1 1132
#define IDC_BUTTON_METADATA 1132
#define IDC_HACKYEXPORT 1133
#define IDC_BUTTON1 1133
#define MEMW_EXPANDCOLLAPSE 1133
#define IDC_SOUND_RESTOREDEFAULTVOL 1133
#define TASEDITOR_REWIND 1133
#define IDC_BUTTON2 1134
#define TASEDITOR_FORWARD 1134
#define IDC_BUTTON3 1135
#define TASEDITOR_REWIND_FULL 1135
#define IDC_BUTTON4 1136
#define TASEDITOR_FORWARD_FULL 1136
#define TASEDITOR_PLAYSTOP 1137
#define IDC_RADIO1 1138
#define IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES 1138
#define IDC_RADIO_UP 1138
#define IDC_RADIO2 1139
#define IDC_RADIO_ALL 1139
#define IDC_RADIO3 1140
#define IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME 1139
#define IDC_RADIO_1P 1140
#define IDC_RADIO4 1141
#define IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES 1140
#define IDC_RADIO_2P 1141
#define IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE 1141
#define MEMW_EDIT00FORMULA 1142
#define IDC_RADIO5 1142
#define IDC_RADIO_3P 1142
#define MEMW_EDIT01FORMULA 1143
#define IDC_RADIO6 1143
#define IDC_RADIO_4P 1143
#define IDC_PROGRESS_BUTTON 1144
#define MEMW_EDIT02FORMULA 1144
#define IDC_BUTTON7 1145
#define MEMW_EDIT03FORMULA 1145
#define TASEDITOR_PREV_MARKER 1145
#define IDC_BUTTON8 1146
#define TASEDITOR_FIND_BEST_SIMILAR_MARKER 1146
#define IDC_EDIT1 1147
#define IDC_SELECTION_MARKER_EDIT 1147
#define IDC_NOTE_TO_FIND 1147
#define IDC_AUTOSAVE_PERIOD 1147
#define IDC_EXTRA_SCANLINES 1147
#define IDC_BUTTON9 1148
#define IDC_CHEAT_TEXT 1147
#define TASEDITOR_FIND_NEXT_SIMILAR_MARKER 1148
#define IDC_SYMBOLIC_ADDRESS 1148
#define IDC_VBLANK_SCANLINES 1148
@ -593,15 +539,10 @@
#define TASEDITOR_NEXT_MARKER 1151
#define IDC_SYMBOLIC_COMMENT 1151
#define IDC_BRANCHES_BUTTON 1152
#define IDC_JUMP_PLAYBACK_BUTTON 1153
#define IDC_EDIT2 1154
#define IDC_PLAYBACK_MARKER_EDIT 1154
#define IDC_JUMP_SELECTION_BUTTON 1155
#define TASEDITOR_RUN_MANUAL 1156
#define CHECK_SOUND_MUTETURBO 1179
#define IDC_EDIT_AUTHOR 1180
#define MEMW_STATIC 1181
#define MEMW_RESULTS 1184
#define MEMW_EDIT00RESET 1184
#define MEMW_EDIT01RESET 1185
#define MEMW_EDIT02RESET 1186
@ -611,24 +552,19 @@
#define MEMW_EDIT02RMADDRESS 1190
#define MEMW_EDIT03RMADDRESS 1191
#define IDC_DEBUGGER_RESTORESIZE 1191
#define MEMW_EDIT04RMADDRESS 1192
#define IDC_MOVIE_CLOSE 1192
#define EDIT00_RESULTS 1193
#define IDC_MOVIE_PAUSEAFTERPLAYBACK 1193
#define EDIT01_RESULTS 1194
#define IDC_MOVIE_BINDSAVESTATES 1194
#define EDIT02_RESULTS 1195
#define IDC_MOVIE_DISPLAYSTATUSICON 1195
#define EDIT03_RESULTS 1196
#define IDC_MOVIE_DISPLAYSUBTITLES 1196
#define IDC_MOVIE_SUBTITLESINAVI 1197
#define IDC_MOVIE_AUTOBACKUP 1198
#define IDC_SOUNDS_RESTOREDEFAULTS 1199
#define BTN_CANCELED 1200
#define ID_SOUND_TRITOP 1201
#define IDC_MOVIE_SUGGEST_READONLY 1201
#define ID_SOUND_QUALITYNOTIFY 1202
#define IDC_CHECK1 1203
#define CB_ENABLECONTEXTMENU 1203
#define DEBUGAUTOLOAD 1203
#define IDC_CHEAT_PAUSEWHENACTIVE 1203
@ -645,36 +581,24 @@
#define CHECK_DEEMPH_SWAP 1203
#define IDC_CHECK_LOG_BANK_NUMBER 1203
#define IDC_VOLUMEGROUP 1204
#define IDC_OMITBLANK 1204
#define IDC_CHECK3 1204
#define IDC_CHECK_MARKERS 1204
#define IDC_RECORDING 1204
#define IDC_COPY_MARKERS 1204
#define IDC_AUTORESUMECDLOGGING2 1204
#define IDC_AUTOSAVECDL 1204
#define IDC_INVERT_THE_MASK 1204
#define IDC_DEBUGGER_PREDEFINEDREGS 1204
#define IDC_DEBUGGER_PREDEFINED_REGS 1204
#define IDC_RAMLIST 1205
#define IDC_CHECK4 1205
#define IDC_CHECK_BOOKMARKS 1205
#define IDC_SUPERIMPOSE2 1205
#define IDC_RUN_AUTO 1205
#define IDC_AUTOLOADCDL 1205
#define IDC_INVERT_THE_MASK2 1205
#define IDC_SPRITE16_MODE 1205
#define IDC_C_SEARCH 1206
#define IDC_CHECK5 1206
#define IDC_CHECK_GREENZONE 1206
#define IDC_USEPATTERN 1206
#define IDC_C_ADDCHEAT 1207
#define IDC_CHECK6 1207
#define IDC_CHECK_HISTORY 1207
#define IDC_C_WATCH 1208
#define IDC_CHECK7 1208
#define IDC_CHECK_SELECTION 1208
#define IDC_C_RESET 1209
#define IDC_CHECK8 1209
#define IDC_CHECK_PIANO_ROLL 1209
#define IDC_C_ELIMINATE 1210
#define IDC_LESSTHAN 1211
@ -705,18 +629,14 @@
#define IDC_C_RESET_CHANGES 1236
#define IDC_C_UNDO 1237
#define IDC_WATCHLIST 1238
#define IDC_C_ELIMINATE2 1238
#define IDC_C_HEXEDITOR 1238
#define IDC_C_WATCH_EDIT 1239
#define IDC_C_WATCH_REMOVE 1240
#define IDC_C_WATCH_DUPLICATE 1241
#define ID_WATCHES_UPDOWN 1242
#define IDC_C_WATCH_UP 1243
#define IDC_C_WATCH_DUPLICATE2 1243
#define IDC_C_WATCH_Separator 1243
#define IDC_C_WATCH_DOWN 1244
#define IDC_PROMPT_TEXT 1245
#define IDC_PROMPT_TEXT2 1246
#define IDC_PROMPT_EDIT 1247
#define IDC_BUTTON_LUABROWSE 1248
#define IDC_BUTTON_LUARUN 1249
@ -733,26 +653,20 @@
#define IDC_SINGLEINSTANCE 1258
#define IDC_MOVIE_CLOSEAFTERPLAYBACK 1258
#define IDC_C_WATCH_SEPARATE 1259
#define IDC_TWEAKCOUNT 1260
#define CHECK_AUTORESTORE_PLAYBACK 1261
#define CB_FS_BY_DOUBLECLICK 1261
#define IDC_PROGRESS1 1262
#define CHECK_FOLLOW_CURSOR 1263
#define IDC_BOOKMARKS_BOX 1264
#define IDC_BRANCHES_BITMAP 1265
#define IDC_SCREENSHOT_BITMAP 1266
#define CHECK_TURBO_SEEK 1266
#define IDC_TEXT_SELECTION 1267
#define IDC_TEXT_CLIPBOARD 1268
#define IDC_RADIO_1PLAYER 1269
#define IDC_TEXT_SELECTION2 1269
#define CHECK_AUTOADJUSTINPUTDUETOLAG 1269
#define IDC_RADIO_2PLAYERS 1270
#define IDC_PLAYBACK_MARKER 1270
#define IDC_RADIO_FOURSCORE 1271
#define IDC_SELECTION_MARKER 1271
#define IDC_NOTE_TOOLTIP_EDIT 1272
#define IDC_SELECTION_MARKER2 1272
#define IDC_RADIO_DOWN 1273
#define IDC_PLAYBACK_BOX 1275
#define IDC_RECORDER_BOX 1276
@ -767,8 +681,6 @@
#define ID_CHR2 1284
#define ID_CHR3 1285
#define ID_STATIC 1286
#define ID_CDL_OPTIONS 1287
#define ID_CDL_GENERATEROM 1288
#define CTL_PALSAT_TRACKBAR 1291
#define CB_SKIP_7BIT 1293
#define STATIC_SATVALUE 1294
@ -780,9 +692,6 @@
#define STATIC_CONTRASTVALUE 1300
#define CTL_PALBRIGHT_TRACKBAR 1301
#define STATIC_BRIGHTVALUE 1302
#define IDC_RICHEDIT21 1304
#define IDC_RICHEDIT_DISASM 1304
#define IDC_CHECK2 1305
#define DEBUGIDAFONT 1305
#define IDC_AUTOSAVE_PERIOD_EVERY_TEXT 1306
#define IDC_AUTOSAVE_PERIOD_MINUTES_TEXT 1307
@ -790,6 +699,11 @@
#define IDC_EXTRA_SCANLINES_TEXT 1309
#define IDC_DATASIZE_GROUPBOX 1310
#define IDC_DATATYPE_GROUPBOX 1311
#define IDC_CHEAT_CODE_GG_LABEL 1312
#define IDC_CHEAT_ADDRESS_LABEL 1313
#define IDC_CHEAT_VAL_LABEL 1314
#define IDC_CHEAT_COM_LABEL 1315
#define IDC_CHEAT_LABEL_KNOWN 1316
#define MENU_NETWORK 40040
#define MENU_PALETTE 40041
#define MENU_SOUND 40042
@ -799,7 +713,6 @@
#define MENU_ABOUT 40046
#define MENU_MSGLOG 40047
#define MENU_CHEATS 40048
#define MENU_BASIC_BOT 40049
#define MENU_AUTOFIRE_PATTERN_1 40050
#define MENU_AUTOFIRE_PATTERN_2 40051
#define MENU_AUTOFIRE_PATTERN_3 40052
@ -829,7 +742,6 @@
#define MENU_AUTOFIRE_OFFSET_5 40069
#define MENU_AUTOFIRE_OFFSET_6 40070
#define MENU_ALTERNATE_AB 40071
#define MENU_EXTERNAL_INPUT 40072
#define MENU_PPUVIEWER 40074
#define MENU_NAMETABLEVIEWER 40075
#define MENU_HEXEDITOR 40076
@ -838,7 +750,6 @@
#define MENU_GAMEGENIEDECODER 40079
#define MENU_DEBUGGER 40080
#define MENU_MEMORY_WATCH 40081
#define MENU_RAMFILTER 40082
#define ID_FILE_RECENT 40100
#define MEMW_HELP_WCOMMANDS 40101
#define MEMW_OPTIONS_LOADLASTFILE 40102
@ -846,71 +757,33 @@
#define MEMW_FILE_OPEN 40104
#define MEMW_FILE_SAVE 40105
#define MEMW_FILE_SAVEAS 40106
#define MEMW_FILE_RECENT 40107
#define MEMW_FILE_CLOSE 40108
#define MEMW_OPTIONS_LOADSTART 40109
#define ID_FILE_RECORDMODE_TRUNCATE 40110
#define ID_FILE_RECORDMODE_OVERWRITE 40111
#define ID_FILE_RECORDMODE_INSERT 40112
#define ID_FILE_RECORDMODE_XOR 40113
#define FCEUX_CONTEXT_RECORDMODE_TRUNCATE 40115
#define FCEUX_CONTEXT_RECORDMODE_OVERWRITE 40116
#define FCEUX_CONTEXT_RECORDMODE_INSERT 40117
#define FCEUX_CONTEXT_RECORDMODE_XOR 40118
#define MENU_RECORD_WAV 40120
#define MENU_STOP_WAV 40121
#define MENU_TASEDIT 40124
#define MENU_PAUSEAFTERPLAYBACK 40126
#define ID_FILE_NEXTRECORDMODE 40127
#define ID_FILE_PREVRECORDMODE 40128
#define ACCEL_CTRL_O 40130
#define ACCEL_CTRL_E 40131
#define ACCEL_CTRL_W 40132
#define ACCEL_CTRL_S 40134
#define ACCEL_CTRL_SHIFT_S 40135
#define ACCEL_CTRL_N 40136
#define ACCEL_CTRL_C 40138
#define MENU_HELP 40140
#define ID_FILE_OOADFM2 40141
#define ID_FILE_OPENFM2 40142
#define ID_FILE_SAVEFM2 40143
#define ID_TWEAKS_DISPLAYBG 40144
#define ID_TWEAKS_DISPLAYOBJ 40145
#define ID_ 40146
#define MENU_DISPLAY_BG 40147
#define MENU_DISPLAY_OBJ 40148
#define ID_FILE_CONVERTMOVIE 40149
#define MENU_CONVERT_MOVIE 40150
#define ID_STRAY_INSERTFRAMES 40151
#define MENU_INSERTFRAMES 40152
#define ID_SELECTED_INSERTFRAME 40153
#define ID_SELECTED_DELETEFRAME 40154
#define MENU_DELETEFRAME 40155
#define MENU_DELETEFRAMES 40156
#define MENU_STRAY_INSERTFRAMES 40157
#define ID_TOOLS_TEXTHOOKER 40158
#define ID_Menu 40159
#define ID_STRAY_TRUNCATE 40160
#define ID_SELECTED_BRANCH 40161
#define ID_SELECTED_INSERTMARKER 40162
#define ID_SELECTED_CREATEMACRO 40163
#define ID_EDIT 40164
#define ID_EDIT_COPY40165 40165
#define ID_EDIT_PASTE40166 40166
#define ID_EDIT_CUT40167 40167
#define ID_EDIT_COPYTONEW 40168
#define ID_EDIT_DELETE 40169
#define ID_HELP_TASEDITHELP 40170
#define ID_FILE_NEWPROJECTCTRL 40171
#define ID_FILE_SAVEPROJECT 40172
#define ID_FILE_SAVEAS 40173
#define ID_FILE_CLOSECTRL 40174
#define ID_Menu40175 40175
#define ID_Menu40176 40176
#define ID_EDIT_TRUNCATE 40177
#define ID_FILE_IMPORT 40178
#define ID_FILE_NEWPROJECT 40179
#define ID_FILE_OPEN_PROJECT 40180
#define ID_FILE_OPENPROJECT 40181
#define ID_FILE_SAVEPROJECTAS 40182
#define ID_FILE_EXPORTFM2 40183
@ -918,27 +791,13 @@
#define ACCEL_CTRL_V 40195
#define ACCEL_CTRL_SHIFT_V 40196
#define ACCEL_CTRL_DELETE 40197
#define ID_ACCEL_CTRL_T 40198
#define ACCEL_CTRL_T 40198
#define ACCEL_CTRL_B 40199
#define ID_CONTEXT_SELECTED_TRUNCATE 40200
#define ID_CONTEXT_STRAY_TRUNCATE 40201
#define ID_VIEW 40202
#define MENU_CONTEXT_STRAY_INSERTFRAMES 40203
#define ID_CONTEXT_SELECTED_INSERTFRAMES 40204
#define ID_CONTEXT_SELECTED_DELETEFRAMES 40205
#define ID_SELECTED_REMOVEMARKER 40206
#define ID_CONTEXT_SELECTED_PASTETONEW 40207
#define ID_CONTEXT_SELECTED_BRANCH 40210
#define ID_EDIT_BRANCHCTRL 40211
#define ID_EDIT_BRANCH 40212
#define ID_EDIT_SELECTALL 40214
#define ID_EDIT_REMOVEMARKER 40215
#define ID_FILE_CLOSECTRL40216 40216
#define ID_MEMWVIEW_FILE_CLOSE 40217
#define ID_FILE_CLOSE40218 40218
#define MENU_MV_FILE_GOTO_ADDRESS 40219
#define MENU_BASIC_BOT2 40220
#define ID_FILE_TRUNCATE_MOVIE 40221
#define FCEUX_CONTEXT_TRUNCATE_MOVIE 40222
#define ID_FILE_INSERT_1_FRAME 40223
@ -947,140 +806,54 @@
#define FCEUX_CONTEXT_DELETE_1_FRAME 40226
#define ID_FILE_OPENLUAWINDOW 40229
#define ID_FILE_CLOSELUAWINDOWS 40230
#define ID_CONFIG_DISPLAY 40231
#define ID_DISPLAY_INPUTDISPLAY 40232
#define ID_DISPLAY_LAGCOUNTER 40233
#define FCUE_DISPLAY_INPUTDISPLAY 40234
#define FCEU_DISPLAY_LAGCOUNTER 40235
#define MENU_DISPLAY_INPUTDISPLAY 40236
#define MENU_DISPLAY_LAGCOUNTER 40237
#define ID_DISPLAY_FRAMEADV 40238
#define MENU_DISPLAY_FA_LAGSKIP 40239
#define ID_DISPLAY_INPUTDISPLAY40240 40240
#define ID_LAGCOUNTER_OFF 40241
#define ID_LAGCOUNTER_1PLAYER 40242
#define ID_LAGCOUNTER_2PLAYER 40243
#define ID_LAGCOUNTER_4PLAYER 40244
#define ID_DISPLAY_LAGCOUNTER40245 40245
#define MENU_INPUTDISPLAY_OFF 40246
#define MENU_INPUTDISPLAY_1P 40247
#define MENU_INPUTDISPLAY_2P 40248
#define MENU_INPUTDISPLAY_4P 40249
#define MENU_INPUTDISPLAY_0 40250
#define MENU_INPUTDISPLAY_1 40251
#define MENU_INPUTDISPLAY_2 40252
#define MENU_INPUTDISPLAY_4 40253
#define ID_DISPLAY_FRAMECOUNTER 40254
#define ID_CONFIG_BINDSAVESTATESTOMOVIE 40255
#define MENU_CONFIG_BINDSAVES 40256
#define MEMVIEW_HELP 40257
#define MENU_MV_HELP 40258
#define ID_DISPLAY_MOVESUBTITLES 40259
#define ID_DISPLAY_MOVIESUBTITLES 40260
#define ID_DISPLAY_MOVIESUBTITLESINAVI 40261
#define ID_DISPLAY_MOVIESUBTITLES_AVI 40262
#define ID_NES_PAUSE 40263
#define ID_NES_FRAMEADVANCE 40264
#define ID_NES_SPEEDUP 40265
#define ID_NES_SLOWDOWN 40266
#define ID_NES_FASTESTSPEED 40267
#define ID_NES_NORMALSPEED 40268
#define ID_NES_TURBO 40269
#define ID_NES_SLOWESTSPEED 40270
#define ID_NES_EMULATIONSPEED 40271
#define ID_FILE_SCREENSHOT 40272
#define ID_FILE_RESTARTMOVIE 40273
#define ID_FILE_PLAYMOVIEFROMBEGINNING 40274
#define ID_GAME_INSERTSUBTITLE 40275
#define ID_GAME_INSERTCOMMENT 40276
#define ID_GAME_HELP 40277
#define ID_GAME_REPLAYMOVIE 40278
#define ID_GAME_HELP40279 40279
#define FCEU_CONTEXT_INSERTSUBTITLE 40280
#define FCEU_CONTEXT_MOVIEHELP 40281
#define FCEUX_CONTEXT_REPLAYMOVIE 40282
#define FCEU_CONTEXT_ROMHELP 40283
#define ID_NOGAME_OPENROM 40284
#define ID_NOGAME_HELP 40285
#define FCEU_CONTEXT_OPENROM 40286
#define FCEU_CONTEXT_FCEUHELP 40287
#define FCEU_CONTEXT_INSERTCOMMENT 40288
#define ID_FILE_MOVIE 40289
#define ID_FILE_RECORDAVI 40290
#define ID_FILE_LUA 40291
#define ID_NES_EMULATION 40292
#define ID_GAME_PLAYMOVIEFROMBEGINNING 40293
#define ID_GAME_STOPMOVIE 40294
#define FCEU_CONTEXT_PLAYMOVIEFROMBEGINNING 40295
#define FCEU_CONTEXT_STOPMOVIE 40296
#define ID_GAME_CLOSEROM 40297
#define FCEU_CONTEXT_CLOSEROM 40298
#define ID_GAME_PLAYMOVIEFROMBEGINNING40299 40299
#define ID_GAME_STOPMOVIERECORDING 40300
#define ID_GAME_HELP40301 40301
#define ID_GAME_RECORDMOVIE 40302
#define FCEUX_CONTEXT_RECORDMOVIE 40303
#define ID_GAME_SCREENSHOT 40304
#define FCEUX_CONTEXT_SCREENSHOT 40305
#define ID_GAME_REWINDTOLASTAUTO 40306
#define FCEUX_CONTEXT_REWINDTOLASTAUTO 40307
#define ID_GAME_REWINDTOLASTAUTO40308 40308
#define ID_GAME_REWINDTOLASTAUTO40309 40309
#define ID_GAME_VIEWCOMMENTSSUBTITLES 40310
#define FCEUX_CONTEXT_VIEWCOMMENTSSUBTITLES 40311
#define ID_GAME_VIEWCOMMENTSSUBTITLES40312 40312
#define ID_OPTIONS_COLLAPSETO1COLUMN 40313
#define MEMW_OPTIONS_EXPANDCOLLAPSE 40314
#define ID_GAME_UNDOLOADSTATE 40315
#define FCEUX_CONTEXT_UNDOLOADSTATE 40316
#define ID_GAME_UNDOLOADSTATE40317 40317
#define ID_GAME_UNDOLOADSTATE40318 40318
#define ID_GAME_MAKEBACKUP 40319
#define FCEUX_CONTEXT_MAKEBACKUP 40320
#define ID_CONFIG_MOVIEOPTIONS 40321
#define MENU_MOVIEOPTIONS 40322
#define ID_GAME_UNDOSAVESTATE 40323
#define FCEUX_CONTEXT_UNDOSAVESTATE 40324
#define ID_GAME_UNDOSAVESTATE40325 40325
#define ID_GAME_UNDOSAVESTATE40326 40326
#define ID_NOGAME_OPENMOSTRECENTROM 40327
#define FCEUX_CONTEXT_RECENTROM1 40328
#define ID_NES_EMULATION40329 40329
#define ID_MOVIE_TOGGLEREAD 40330
#define ID_FILE_MOVIE_TOGGLEREAD 40331
#define ID_LUA_RELOADLUASCRIPT 40332
#define ID_FILE_LUA_RELOADLUASCRIPT 40333
#define ID_GAME_SWITCHTOREAD 40334
#define FCEUX_CONTEXT_READONLYTOGGLE 40335
#define ID_GAME_TOGGLETOREAD 40336
#define ID_FILE_SAVESTATE 40337
#define ID_CONFIG_ENABLE 40338
#define ID_SAVESTATE_QUICKSAVE 40339
#define ID_SAVESTATE_QUICKLOAD 40340
#define ID_SAVESTATE 40341
#define ID_LOADSTATE 40342
#define MENU_LOADSTATE 40343
#define MENU_SAVESTATE 40344
#define ID_SAVESTATE_NEXTSAVESLOT 40345
#define ID_SAVESTATE_PREVIOUSSAVESLOT 40346
#define MENU_NEXTSAVESTATE 40347
#define MENU_PREVIOUSSAVESTATE 40348
#define ID_SAVESTATE_VIEWSAVESLOTS 40349
#define MENU_VIEWSAVESLOTS 40350
#define ID_LUA_RECENT 40351
#define MENU_LUA_RECENT 40352
#define ID_Menu40353 40353
#define MENU_MOVIE_RECENT 40354
#define ID_GAME_LOADLASTMOVIE 40355
#define FCEUX_CONTEXT_LOADLASTMOVIE 40356
#define ID_GAME_SAVEMOVIEAS 40357
#define FCEUX_CONTEXT_SAVEMOVIEAS 40358
#define ID_FILE_TOGGLE_RECORDING_MOVIE 40359
#define FCEUX_CONTEXT_TOGGLE_RECORDING 40360
#define ID_OPTIONS_BINDTOMAINWINDOW 40361
#define ID_CONFIG_PPU 40362
#define ID_PPU_NEWPPU 40363
#define ID_PPU_OLDPPU 40364
#define ID_NEWPPU 40365
#define ID_OLDPPU 40366
#define ID_CONFIG_SAVECONFIGFILE 40367
@ -1098,67 +871,40 @@
#define RW_MENU_LAST_RECENT_FILE 40400
#define ID_ENABLE_BACKUPSAVESTATES 40401
#define ID_ENABLE_COMPRESSSAVESTATES 40402
#define ID_AVI_DISABLEMOV 40403
#define ID_AVI_DISMOVIEMESS 40404
#define ID_AVI_DISMOVIEMESSAGE 40405
#define ID_INPUTDISPLAY_OLDSTYLEDISP 40406
#define ID_GAME_RECOVERY 40407
#define ID_SAVESTATE_RECOVERY 40408
#define ID_CONTEXT_FULLSAVESTATES 40409
#define ID_CHEATLISTPOPUP_DELETESELECTEDCHEATS 40410
#define ID_FILE_SAVESCREENSHOTAS 40411
#define ID_WATCHES_ADDSEPARATOR 40412
#define ID_WATCHES_SEPARATOR 40413
#define IDC_C_WATCHES_SEPARATOR 40414
#define IDC_C_WATCH_SEPARATORS 40415
#define IDC_C_WATCH_Separa 40416
#define ID_GAME_USECONFIG 40417
#define FCEUX_CONTEXT_GUICONFIG 40418
#define ID_SELECTED_INSERTFRAMES 40422
#define ID_CONTEXT_SELECTED_INSERTFRAME 40423
#define ID_SELECTED_INSERTFRAMES40424 40424
#define ID_CONTEXT_SELECTED_INSERTFRAMES2 40425
#define ACCEL_CTRL_F 40429
#define ACCEL_CTRL_P 40430
#define ID_CONFIG_SETGREENZONECAPACITY 40432
#define ACCEL_CTRL_INSERT 40433
#define ID_DISPLAY_RERECORDCOUNTER 40436
#define ID_DISPLAY_MOVIESTATUSICON 40437
#define ID_AVI_DISPLAYHUD 40438
#define ID_AVI_STOPWAV 40439
#define ID_AVI_ENABLEHUDRECORDING 40440
#define ID_VIEW_SHOWDOTINEMPTYCELLS 40441
#define ACCEL_INS 40442
#define ACCEL_DEL 40443
#define ID_SELECTED_CLEARSELECTION 40445
#define ID_CONTEXT_SELECTED_CLEARSELECTION 40446
#define ID_CONTEXT_SELECTED_CLEARFRAMES 40447
#define ID_VIEW_SHOW 40448
#define ID_EDIT_CLEAR 40450
#define ID_EDIT_INSERTFRAMES 40451
#define ID_EDIT_INSERT 40452
#define ID_EDIT_SELECTBETWEENMARKERS 40453
#define ID_CONFIG_BINDMARKERSTOINPUT 40454
#define ACCEL_CTRL_A 40455
#define ID_EDIT_SELECTMIDMARKERS 40457
#define ID_SELECTED_SELECTMIDMARKERS 40458
#define ID_EDIT_CLONEFRAME 40459
#define ID_EDIT_CLONEFRAMES 40460
#define ACCEL_SHIFT_INS 40461
#define ACCEL_CTRL_SHIFT_INS 40461
#define ID_SELECTED_CLONE 40463
#define ID_CONFIG_Q 40464
#define ACCEL_CTRL_Z 40465
#define ACCEL_CTRL_Y 40466
#define ID_EDIT_UNDO 40468
#define ID_EDIT_REDO 40469
#define ID_CONFIG_SETMAXUNDOLEVELS 40470
#define ID_VIEW_X 40471
#define ID_VIEW_JUMPWHENMAKINGUNDO 40472
#define ID_CONFIG_BRANCHESRESTOREFULLMOVIE 40473
#define ID_CONFIG_OLDBRANCHINGCONTROLS 40474
#define ID_CONFIG_HUDINBRANCHSCREENSHOTS 40475
#define ID_CONFIG_SETAUTOSAVEPERIOD 40476
#define ACCEL_CTRL_Q 40478
#define ID_EDIT_SELECTIONUNDO 40481
#define ID_EDIT_SELECTIONREDO 40482
@ -1167,49 +913,29 @@
#define ID_HELP_ABOUT 40485
#define ID_VIEW_ENABLEHOTCHANGES 40488
#define ID_VIEW_SHOWBRANCHSCREENSHOTS 40489
#define ID_CONFIG_USE1PFORRECORDING2P 40490
#define ID_CONFIG_USE1PFORRECORDING 40491
#define ID_CONFIG_COMBINECONSECUTIVERECORDINGS 40492
#define ACCEL_SHIFT_V 40493
#define ID_EDIT_PASTEINSERT 40495
#define ID_SELECTED_SETMARKER 40498
#define ID_SELECTED_CLEARMARKER 40499
#define ID_SELECTED_REMOVEMARKER40500 40500
#define ID_CONFIG_KEYBOARDCONTROLSINPIANOROLL 40501
#define ACCEL_CTRL_PGUP 40502
#define ACCEL_CTRL_PGDN 40503
#define ACCEL_SHIFT_PGUP 40504
#define ACCEL_SHIFT_PGDN 40505
#define ID_ACCELERATOR40506 40506
#define ID_VIEW_FOLLOWMARKERNOTECONTEXT 40507
#define ID_VIEW_SHOWBRANCHTOOLTIPS 40508
#define ID_CONFIG_USEINPUTKEYSFORCOLUMNSET 40509
#define ID_CONFIG_EMPTYNEWMARKERNOTES 40510
#define ID_EDIT_FINDNOTE 40513
#define ID_CONFIG_REAPPEARINGFINDNOTEDIALOG 40514
#define ID_VIEW_FINDNOTE 40515
#define ID_CONFIG_SILENTAUTOSAVE 40516
#define ID_FILE_CLOSE 40517
#define ID_EDIT_PASTE 40520
#define ID_EDIT_COPY 40521
#define ID_EDIT_CUT 40522
#define ID_HELP_TASEDITORHELP 40523
#define MENU_TASEDITOR 40524
#define ID_FILE_NEW 40525
#define ID_HELP_SHOWTOOLTIPS 40526
#define ID_HELP_TOOLTIPS 40527
#define ID_STRAY_UNPAUSEEMULATOR 40528
#define ID_STRAY_UNPAUSE 40529
#define ID_STRAY_TRUNCATE40530 40530
#define ID_PATTERN 40531
#define ID_PATTERN_TESTPATTERN 40532
#define ID_PATTERN40533 40533
#define ID_PATTERN_TEST 40534
#define ID_CONFIG_COLUMNSETPATTERNSKIPSLAG 40535
#define ID_EDIT_DESELECT 40536
#define ID_SELECTED_DESELECT 40537
#define ID_CONFIG_DRAWINPUTBYDRAGGING 40539
#define ID_CONFIG_DOUBLECLICKONFRAME 40540
#define ACCEL_CTRL_UP 40541
#define ACCEL_CTRL_DOWN 40542
#define ACCEL_CTRL_LEFT 40543
@ -1229,54 +955,42 @@
#define ID_CONFIG_AUTOPAUSEATTHEENDOFMOVIE 40559
#define ID_SELECTED_SETMARKERS 40560
#define ID_SELECTED_REMOVEMARKERS 40561
#define ACCEL_CTRL_SPACEBAR 40563
#define ACCEL_CTRL_SPACE 40563
#define ID_HELP_OPEN_MANUAL 40564
#define ID_DISPLAY_FPS 40565
#define ID_CONFIG_AUTO 40566
#define ID_CONFIG_ADJUSTLAG 40567
#define ID_CONFIG_PATTERNSKIPSLAG 40568
#define CLEAR_LOG 40569
#define CLOSE_LOG 40570
#define ID_SELECTED_UNGREENZONE 40571
#define ID_SELECTED_F 40572
#define CHEAT_CONTEXT_POSSI_GOTOINHEXEDITOR 40572
#define ID_CONFIG_ENABLEGREENZONING 40573
#define ID_EMULATIONSPEED_SETFRAMEADVANCEDELAY 40574
#define ID_Menu40575 40575
#define ID_EMULATIONSPEED_SETCUSTOMSPEEDFORFRAMEADVANCE 40576
#define ID_EMULATIONSPEED_CUSTOMSPEED 40577
#define ID_ENABLE_AUTO 40578
#define ID_ENABLE_AUTORESUME 40579
#define ID_CONFIG_COMPACTQUICKSAVING 40580
#define ID_CONFIG_SAVING_OPTIONS 40581
#define ID_CDLFILENAME 40582
#define ID_VIEW_A 40583
#define ID_VIEW_HIGHLIGHT 40584
#define ID_VIEW_HIGHLIGHT_ACTIVITY 40585
#define ID_HIGHLIGHTING_FADEWHENPAUSED 40586
#define ID_HIGHLIGHTING_SETFADINGPERIOD 40587
#define ID_HIGHLIGHTING_HIGHLIGHT_ACTIVITY 40588
#define ID_DUMPTOFILE_CPUBUS 40589
#define MENU_MV_FILE_DUMP_64K 40590
#define ID_CONFIG_REGION 40591
#define MENU_MV_FILE_DUMP_OAM 40592
#define MENU_RAMINIT_DEFAULT 40593
#define MENU_RAMINIT_FF 40594
#define MENU_RAMINIT_00 40595
#define MENU_RAMINIT_RANDOM 40596
#define ID_COPY_SELECTALL 40596
#define MENU_MV_FILE_LOAD_RAM 40597
#define ID_COPY_COPY 40597
#define MENU_MV_FILE_LOAD_PPU 40598
#define DISASM_CONTEXT_COPY 40598
#define MENU_MV_FILE_LOAD_OAM 40599
#define DISASM_CONTEXT_SELECTALL 40599
#define IDC_DEBUGGER_ICONTRAY 55535
#define MW_ValueLabel2 65423
#define MW_ValueLabel1 65426
#define CHEAT_CONTEXT_POSSI_ADDTOMEMORYWATCH 40600
#define CHEAT_CONTEXT_POSSI_ADDCHEAT 40601
#define CHEAT_CONTEXT_POSSI_ADDTORAMWATCH 40603
#define MW_VALUELABEL2 65423
#define MW_VALUELABEL1 65426
#define IDC_STATIC_SLASHTEXT 65442
#define IDC_BOOKMARK_NAME_TEXT 65532
#define ID_CDL 65533
#define IDC_NTVIEW_SCANLINE_TEXT 65534
// Next default values for new objects
@ -1284,8 +998,8 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 303
#define _APS_NEXT_COMMAND_VALUE 40600
#define _APS_NEXT_CONTROL_VALUE 1312
#define _APS_NEXT_COMMAND_VALUE 40000
#define _APS_NEXT_CONTROL_VALUE 1011
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -485,7 +485,21 @@ void SaveCompact_SetDialogItems(HWND hwndDlg)
CheckDlgButton(hwndDlg, IDC_CHECK_HISTORY, taseditorConfig.saveCompact_SaveHistory?BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK_PIANO_ROLL, taseditorConfig.saveCompact_SavePianoRoll?BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK_SELECTION, taseditorConfig.saveCompact_SaveSelection?BST_CHECKED : BST_UNCHECKED);
CheckRadioButton(hwndDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO1 + (taseditorConfig.saveCompact_GreenzoneSavingMode % GREENZONE_SAVING_MODES_TOTAL));
switch (taseditorConfig.saveCompact_GreenzoneSavingMode % GREENZONE_SAVING_MODES_TOTAL)
{
case GREENZONE_SAVING_MODE_ALL:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES);
break;
case GREENZONE_SAVING_MODE_16TH:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME);
break;
case GREENZONE_SAVING_MODE_MARKED:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES);
break;
case GREENZONE_SAVING_MODE_NO:
default:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE);
}
}
void SaveCompact_GetDialogItems(HWND hwndDlg)
{
@ -495,11 +509,11 @@ void SaveCompact_GetDialogItems(HWND hwndDlg)
taseditorConfig.saveCompact_SaveHistory = (SendDlgItemMessage(hwndDlg, IDC_CHECK_HISTORY, BM_GETCHECK, 0, 0) == BST_CHECKED);
taseditorConfig.saveCompact_SavePianoRoll = (SendDlgItemMessage(hwndDlg, IDC_CHECK_PIANO_ROLL, BM_GETCHECK, 0, 0) == BST_CHECKED);
taseditorConfig.saveCompact_SaveSelection = (SendDlgItemMessage(hwndDlg, IDC_CHECK_SELECTION, BM_GETCHECK, 0, 0) == BST_CHECKED);
if (SendDlgItemMessage(hwndDlg, IDC_RADIO1, BM_GETCHECK, 0, 0) == BST_CHECKED)
if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.saveCompact_GreenzoneSavingMode = GREENZONE_SAVING_MODE_ALL;
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO2, BM_GETCHECK, 0, 0) == BST_CHECKED)
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.saveCompact_GreenzoneSavingMode = GREENZONE_SAVING_MODE_16TH;
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO3, BM_GETCHECK, 0, 0) == BST_CHECKED)
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.saveCompact_GreenzoneSavingMode = GREENZONE_SAVING_MODE_MARKED;
else
taseditorConfig.saveCompact_GreenzoneSavingMode = GREENZONE_SAVING_MODE_NO;
@ -681,7 +695,21 @@ BOOL CALLBACK savingOptionsWndProc(HWND hwndDlg, UINT message, WPARAM wParam, LP
CheckDlgButton(hwndDlg, IDC_CHECK_HISTORY, taseditorConfig.projectSavingOptions_SaveHistory?BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK_PIANO_ROLL, taseditorConfig.projectSavingOptions_SavePianoRoll?BST_CHECKED : BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_CHECK_SELECTION, taseditorConfig.projectSavingOptions_SaveSelection?BST_CHECKED : BST_UNCHECKED);
CheckRadioButton(hwndDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO1 + (taseditorConfig.projectSavingOptions_GreenzoneSavingMode % GREENZONE_SAVING_MODES_TOTAL));
switch (taseditorConfig.saveCompact_GreenzoneSavingMode % GREENZONE_SAVING_MODES_TOTAL)
{
case GREENZONE_SAVING_MODE_ALL:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES);
break;
case GREENZONE_SAVING_MODE_16TH:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME);
break;
case GREENZONE_SAVING_MODE_MARKED:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES);
break;
case GREENZONE_SAVING_MODE_NO:
default:
CheckRadioButton(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE, IDC_RADIO_GREENZONE_SAVINGMODE_DONTSAVE);
}
EnableWindow(GetDlgItem(hwndDlg, IDC_AUTOSAVE_PERIOD), taseditorConfig.autosaveEnabled);
EnableWindow(GetDlgItem(hwndDlg, IDC_AUTOSAVE_PERIOD_EVERY_TEXT), taseditorConfig.autosaveEnabled);
EnableWindow(GetDlgItem(hwndDlg, IDC_AUTOSAVE_PERIOD_MINUTES_TEXT), taseditorConfig.autosaveEnabled);
@ -719,11 +747,11 @@ BOOL CALLBACK savingOptionsWndProc(HWND hwndDlg, UINT message, WPARAM wParam, LP
taseditorConfig.projectSavingOptions_SaveHistory = (SendDlgItemMessage(hwndDlg, IDC_CHECK_HISTORY, BM_GETCHECK, 0, 0) == BST_CHECKED);
taseditorConfig.projectSavingOptions_SavePianoRoll = (SendDlgItemMessage(hwndDlg, IDC_CHECK_PIANO_ROLL, BM_GETCHECK, 0, 0) == BST_CHECKED);
taseditorConfig.projectSavingOptions_SaveSelection = (SendDlgItemMessage(hwndDlg, IDC_CHECK_SELECTION, BM_GETCHECK, 0, 0) == BST_CHECKED);
if (SendDlgItemMessage(hwndDlg, IDC_RADIO1, BM_GETCHECK, 0, 0) == BST_CHECKED)
if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_ALLFRAMES, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.projectSavingOptions_GreenzoneSavingMode = GREENZONE_SAVING_MODE_ALL;
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO2, BM_GETCHECK, 0, 0) == BST_CHECKED)
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_EVERY16FRAME, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.projectSavingOptions_GreenzoneSavingMode = GREENZONE_SAVING_MODE_16TH;
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO3, BM_GETCHECK, 0, 0) == BST_CHECKED)
else if (SendDlgItemMessage(hwndDlg, IDC_RADIO_GREENZONE_SAVINGMODE_MARKEDFRAMES, BM_GETCHECK, 0, 0) == BST_CHECKED)
taseditorConfig.projectSavingOptions_GreenzoneSavingMode = GREENZONE_SAVING_MODE_MARKED;
else
taseditorConfig.projectSavingOptions_GreenzoneSavingMode = GREENZONE_SAVING_MODE_NO;

View File

@ -1138,19 +1138,19 @@ BOOL CALLBACK TASEditorWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
FCEUI_MovieToggleReadOnly();
CheckDlgButton(taseditorWindow.hwndTASEditor, IDC_RECORDING, movie_readonly?BST_UNCHECKED : BST_CHECKED);
break;
case IDC_RADIO2:
case IDC_RADIO_ALL:
recorder.multitrackRecordingJoypadNumber = MULTITRACK_RECORDING_ALL;
break;
case IDC_RADIO3:
case IDC_RADIO_1P:
recorder.multitrackRecordingJoypadNumber = MULTITRACK_RECORDING_1P;
break;
case IDC_RADIO4:
case IDC_RADIO_2P:
recorder.multitrackRecordingJoypadNumber = MULTITRACK_RECORDING_2P;
break;
case IDC_RADIO5:
case IDC_RADIO_3P:
recorder.multitrackRecordingJoypadNumber = MULTITRACK_RECORDING_3P;
break;
case IDC_RADIO6:
case IDC_RADIO_4P:
recorder.multitrackRecordingJoypadNumber = MULTITRACK_RECORDING_4P;
break;
case IDC_SUPERIMPOSE:

View File

@ -39,12 +39,12 @@
#include "input.h"
#include "fceu.h"
#include "cheat.h"
#include "ram_search.h"
#include "ramwatch.h"
#include "memwatch.h"
#include "ppuview.h"
#include "debugger.h"
#include "cheat.h"
#include "debug.h"
#include "ntview.h"
#include "memview.h"
@ -408,7 +408,7 @@ void UpdateCheckedMenuItems()
FCEUI_GetRenderPlanes(spr,bg);
static int *polo[] = { &genie, &status_icon};
static int polo2[]={ MENU_GAME_GENIE, MENU_SHOW_STATUS_ICON };
static int polo2[]={ MENU_GAME_GENIE, ID_DISPLAY_MOVIESTATUSICON };
int x;
// Check or uncheck the necessary menu items

View File

@ -114,10 +114,6 @@ bool AutoResumePlay = false;
char romNameWhenClosingEmulator[2048] = {0};
// indicator for the open in archive dialog that if the load was canceled by the user.
// TODO: Since I can't think of a better way to indicate it, hope someone could imporve it.
bool archiveManuallyCanceled = false;
FCEUGI::FCEUGI()
: filename(0),
archiveFilename(0) {
@ -404,9 +400,6 @@ int iNESLoad(const char *name, FCEUFILE *fp, int OverwriteVidMode);
int FDSLoad(const char *name, FCEUFILE *fp);
int NSFLoad(const char *name, FCEUFILE *fp);
//char lastLoadedGameName [2048] = {0,}; // hack for movie WRAM clearing on record from poweron
extern bool archiveManuallyCanceled;
//name should be UTF-8, hopefully, or else there may be trouble
FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silent)
{
@ -418,16 +411,18 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
int lastdendy = dendy;
const char* romextensions[] = { "nes", "fds", 0 };
fp = FCEU_fopen(name, 0, "rb", 0, -1, romextensions);
// indicator for if the operaton was canceled by user
// currently there's only one situation:
// the user clicked cancel form the open from archive dialog
bool userCancel = false;
fp = FCEU_fopen(name, 0, "rb", 0, -1, romextensions, &userCancel);
if (!fp)
{
// Although !fp, if the operation was canceled from archive select dialog box, don't show the error message;
if (!silent && !archiveManuallyCanceled)
if (!silent && !userCancel)
FCEU_PrintError("Error opening \"%s\"!", name);
// Set it back to false, since user might not load ROM from dialog the next time.
// TODO: find a better way to do this.
archiveManuallyCanceled = false;
return 0;
}
@ -441,10 +436,11 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
strcpy(fullname, name);
}
// reset loaded game BEFORE it's loading.
ResetGameLoaded();
//file opened ok. start loading.
FCEU_printf("Loading %s...\n\n", fullname);
GetFileBase(fp->filename.c_str());
ResetGameLoaded();
//reset parameters so they're cleared just in case a format's loader doesn't know to do the clearing
MasterRomInfoParams = TMasterRomInfoParams();
@ -561,7 +557,11 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
DoDebuggerDataReload(); // Reloads data without reopening window
CDLoggerROMChanged();
if (hMemView) UpdateColorTable();
if (hCheat) UpdateCheatsAdded();
if (hCheat)
{
UpdateCheatsAdded();
UpdateCheatRelatedWindow();
}
if (FrozenAddressCount)
FCEU_DispMessage("%d cheats active", 0, FrozenAddressCount);
#endif
@ -739,7 +739,10 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski
#ifdef WIN32
//These Windows only dialogs need to be updated only once per frame so they are included here
UpdateCheatList(); // CaH4e3: can't see why, this is only cause problems with selection - adelikat: selection is only a problem when not paused, it shoudl be paused to select, we want to see the values update
// CaH4e3: can't see why, this is only cause problems with selection
// adelikat: selection is only a problem when not paused, it should be paused to select, we want to see the values update
// owomomo: use an OWNERDATA CListCtrl to partially solve the problem
UpdateCheatList();
UpdateTextHooker();
Update_RAM_Search(); // Update_RAM_Watch() is also called.
RamChange();

View File

@ -256,7 +256,7 @@ zpfail:
return 0;
}
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, int index, const char** extensions)
FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, int index, const char** extensions, bool* userCancel)
{
FILE *ipsfile=0;
FCEUFILE *fceufp=0;
@ -360,11 +360,11 @@ FCEUFILE * FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext
//open an archive file
if(archive == "")
if(index != -1)
fceufp = FCEUD_OpenArchiveIndex(asr, fileToOpen, index);
fceufp = FCEUD_OpenArchiveIndex(asr, fileToOpen, index, userCancel);
else
fceufp = FCEUD_OpenArchive(asr, fileToOpen, 0);
fceufp = FCEUD_OpenArchive(asr, fileToOpen, 0, userCancel);
else
fceufp = FCEUD_OpenArchive(asr, archive, &fname);
fceufp = FCEUD_OpenArchive(asr, archive, &fname, userCancel);
if(!fceufp) return 0;

View File

@ -11,11 +11,6 @@
extern bool bindSavestate;
// indicator for the open in archive dialog that if the load was canceled by the user.
// TODO: Since I can't think of a better way to indicate it, hope someone could imporve it.
extern bool archiveManuallyCanceled;
struct FCEUFILE {
//the stream you can use to access the data
//std::iostream *stream;
@ -127,7 +122,7 @@ struct ArchiveScanRecord
};
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, int index=-1, const char** extensions = 0);
FCEUFILE *FCEU_fopen(const char *path, const char *ipsfn, char *mode, char *ext, int index=-1, const char** extensions = 0, bool* userCancel = NULL);
bool FCEU_isFileInArchive(const char *path);
int FCEU_fclose(FCEUFILE*);
uint64 FCEU_fread(void *ptr, size_t size, size_t nmemb, FCEUFILE*);

View File

@ -45,6 +45,7 @@
//TODO - we really need some kind of global platform-specific options api
#ifdef WIN32
#include "drivers/win/main.h"
#include "drivers/win/cheat.h"
#include "drivers/win/ram_search.h"
#include "drivers/win/ramwatch.h"
#endif