notaz.gp2x.de
/
fceu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
smb3 and addams family hacks
[fceu.git]
/
fce.c
diff --git
a/fce.c
b/fce.c
index
38680f9
..
5ad965d
100644
(file)
--- a/
fce.c
+++ b/
fce.c
@@
-562,7
+562,6
@@
void BGRender(uint8 *target)
}
#ifdef FRAMESKIP
}
#ifdef FRAMESKIP
-int FSkip_setting=-1; // auto
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
int FSkip=0;
void FCEUI_FrameSkip(int x)
{
@@
-978,9
+977,9
@@
static void DoHBlank(void)
{
X6502_Run(6);
Fixit2();
{
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();
GameHBIRQHook();
- X6502_Run(85-1
6-10
);
+ X6502_Run(85-1
0-16-3
);
}
else
{
}
else
{
@@
-1081,6
+1080,7
@@
void ResetGameLoaded(void)
}
char lastLoadedGameName [2048];
}
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 UNIFLoad(const char *name, int fp);
int iNESLoad(const char *name, int fp);
int FDSLoad(const char *name, int fp);
@@
-1093,6
+1093,7
@@
FCEUGI *FCEUI_LoadGame(char *name)
int fp;
//Exit=1;
int fp;
//Exit=1;
+ LoadGameLastError = 0;
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
ResetGameLoaded();
strncpy(name2, name, sizeof(name2));
@@
-1102,6
+1103,7
@@
FCEUGI *FCEUI_LoadGame(char *name)
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
+ LoadGameLastError = 1;
return 0;
}
return 0;
}
@@
-1118,14
+1120,13
@@
FCEUGI *FCEUI_LoadGame(char *name)
fp=FCEU_fopen(name2,"rb");
if (!fp) {
printf("no ROM for movie\n");
fp=FCEU_fopen(name2,"rb");
if (!fp) {
printf("no ROM for movie\n");
+ LoadGameLastError = 2;
return 0;
}
have_movie = 1;
}
}
return 0;
}
have_movie = 1;
}
}
- strcpy(lastLoadedGameName, name2);
-
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
GetFileBase(name2);
if(iNESLoad(name2,fp))
goto endlseq;
@@
-1138,6
+1139,8
@@
FCEUGI *FCEUI_LoadGame(char *name)
FCEU_PrintError("An error occurred while loading the file.");
FCEU_fclose(fp);
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:
return 0;
endlseq:
@@
-1165,6
+1168,9
@@
FCEUGI *FCEUI_LoadGame(char *name)
if (have_movie)
FCEUI_LoadMovie(name, 1);
if (have_movie)
FCEUI_LoadMovie(name, 1);
+
+ strcpy(lastLoadedGameName, name2);
+
return(&FCEUGameInfo);
}
return(&FCEUGameInfo);
}
@@
-1215,14
+1221,17
@@
static INLINE void Thingo(void)
if(MMC5Hack && (ScreenON || SpriteON)) MMC5_hb(scanline);
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
{
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);
X6502_Run(tosprite);
PPU[2]|=0x40;
X6502_Run(256-tosprite);