}
#ifdef FRAMESKIP
-int FSkip_setting=-1; // auto
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
{
X6502_Run(6);
Fixit2();
- X6502_Run(4);
+ X6502_Run(4+3); // original value was 4, but adding 3 fixes glitch in smb3 (and breaks something?)
GameHBIRQHook();
- X6502_Run(85-16-10);
+ X6502_Run(85-10-16-3);
}
else
{
}
char lastLoadedGameName [2048];
+int LoadGameLastError = 0;
int UNIFLoad(const char *name, int fp);
int iNESLoad(const char *name, int fp);
int FDSLoad(const char *name, int fp);
int have_movie = 0;
int fp;
- Exit=1;
+ //Exit=1;
+ LoadGameLastError = 0;
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
+ LoadGameLastError = 1;
return 0;
}
FCEU_fclose(fp);
*p = 0;
fp=FCEU_fopen(name2,"rb");
+ if (!fp && p - name2 > 2) p[-2] = 0;
+ fp=FCEU_fopen(name2,"rb");
if (!fp) {
printf("no ROM for movie\n");
+ LoadGameLastError = 2;
return 0;
}
have_movie = 1;
}
}
- strcpy(lastLoadedGameName, name2);
-
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
FCEU_PrintError("An error occurred while loading the file.");
FCEU_fclose(fp);
+ // format handlers may set LoadGameLastError themselves.
+ if (LoadGameLastError == 0) LoadGameLastError = 3;
return 0;
endlseq:
if (have_movie)
FCEUI_LoadMovie(name, 1);
+
+ strcpy(lastLoadedGameName, name2);
+
return(&FCEUGameInfo);
}
if(MMC5Hack && (ScreenON || SpriteON)) MMC5_hb(scanline);
- // check: Battletoads & Double Dragon
+ // check: Battletoads & Double Dragon, Addams Family
+ // sky glitches in SMB1 if done wrong
if(tosprite>=256)
{
X6502_Run(256);
}
else
{
- // sky glitches in SMB1 if done wrong
+ // a dirty hack for Addams Family and inaccurate sprite hit emulation
+ if(tosprite<8) tosprite-=tosprite*3>>2;
+
X6502_Run(tosprite);
PPU[2]|=0x40;
X6502_Run(256-tosprite);
if(Exit)
{
- CloseGame();
+ //CloseGame();
break;
}