mirror of https://github.com/PCSX2/pcsx2.git
zzogl-pg: Revamp the crc code to pull from a table, and add a few crc codes. Based off of code from GSdx.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2902 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
07a16bc76d
commit
2daee33eae
|
@ -330,9 +330,12 @@ void CALLBACK GSsetSettingsDir(const char* dir) {
|
||||||
|
|
||||||
extern int VALIDATE_THRESH;
|
extern int VALIDATE_THRESH;
|
||||||
extern u32 TEXDESTROY_THRESH;
|
extern u32 TEXDESTROY_THRESH;
|
||||||
|
|
||||||
int g_LastCRC = 0;
|
int g_LastCRC = 0;
|
||||||
|
|
||||||
void CALLBACK GSsetGameCRC(int crc, int options)
|
void CALLBACK GSsetGameCRC(int crc, int options)
|
||||||
{
|
{
|
||||||
|
// TEXDESTROY_THRESH starts out at 16.
|
||||||
VALIDATE_THRESH = 8;
|
VALIDATE_THRESH = 8;
|
||||||
conf.mrtdepth = ((conf.gamesettings & GAME_DISABLEMRTDEPTH) != 0);
|
conf.mrtdepth = ((conf.gamesettings & GAME_DISABLEMRTDEPTH) != 0);
|
||||||
|
|
||||||
|
@ -343,63 +346,24 @@ void CALLBACK GSsetGameCRC(int crc, int options)
|
||||||
|
|
||||||
g_GameSettings |= GAME_PATH3HACK;
|
g_GameSettings |= GAME_PATH3HACK;
|
||||||
|
|
||||||
bool RunningFirstTime = (g_LastCRC == crc);
|
bool CRCValueChanged = (g_LastCRC != crc);
|
||||||
g_LastCRC = crc;
|
g_LastCRC = crc;
|
||||||
|
|
||||||
if (RunningFirstTime) {
|
ZZLog::Error_Log("CRC = %x", crc);
|
||||||
switch(crc) {
|
if (CRCValueChanged && (crc != 0))
|
||||||
case 0x54A548B4: // crash n burn
|
{
|
||||||
// overbright
|
for (int i = 0; i < GAME_INFO_INDEX; i++)
|
||||||
break;
|
{
|
||||||
|
if (crc_game_list[i].crc == crc)
|
||||||
|
{
|
||||||
|
if (crc_game_list[i].v_thresh > 0) VALIDATE_THRESH = crc_game_list[i].v_thresh;
|
||||||
|
if (crc_game_list[i].t_thresh > 0) TEXDESTROY_THRESH = crc_game_list[i].t_thresh;
|
||||||
|
|
||||||
case 0xA3D63039: // xenosaga(j)
|
conf.gamesettings |= crc_game_list[i].flags;
|
||||||
case 0x0E7807B2: // xenosaga(u)
|
g_GameSettings = conf.gamesettings | options;
|
||||||
g_GameSettings |= GAME_DOPARALLELCTX;
|
ZZLog::Error_Log("Found CRC[%x] in crc game list.", crc);
|
||||||
VALIDATE_THRESH = 64;
|
return;
|
||||||
TEXDESTROY_THRESH = 32;
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x7D2FE035: // espgaluda (j)
|
|
||||||
VALIDATE_THRESH = 24;
|
|
||||||
//g_GameSettings |= GAME_BIGVALIDATE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x21068223: //Okami, US,
|
|
||||||
case 0x891f223f: //Okami, FR
|
|
||||||
case 0xC5DEFEA0: //Okami, JP,
|
|
||||||
case 0xe0426fc6: //Okage Shadow King
|
|
||||||
conf.gamesettings |= 0x01000000; // Specular highlight;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xD6385328: // GodOfWar
|
|
||||||
case 0xFB0E6D72: // GodOfWar, EU,
|
|
||||||
case 0xEB001875: // GodOfWar, EU,
|
|
||||||
case 0xA61A4C6D: // GodOfWar,
|
|
||||||
case 0xE23D532B: // GodOfWar,
|
|
||||||
conf.gamesettings |= 0x00010000; // full 16 bit
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xF0A6D880: // HarvestMoon, US
|
|
||||||
conf.gamesettings |= 0x00002000; // Disable stencil buffer
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xFB236A46: // SonicUnleashed, US
|
|
||||||
case 0xa5d29941: // Shadow the Hedgehog
|
|
||||||
conf.gamesettings |= 0x00040100; // Fast update + no Alpha fail
|
|
||||||
|
|
||||||
case 0x7acf7e03: // Atelier Iris 1
|
|
||||||
case 0x9AC65D6A: // Atelier Iris 2, US
|
|
||||||
case 0x4ccc9212: // Atelier Iris 3
|
|
||||||
case 0xF95F37EE: // Ar Tonelico 2, US
|
|
||||||
case 0x77b0236f: // Mana Khemia
|
|
||||||
case 0x433951e7: // Mana Khemia 2
|
|
||||||
conf.gamesettings |= 0x10000000; // GustFix
|
|
||||||
|
|
||||||
case 0xbaa8dd8: // Dark Cloud 1
|
|
||||||
conf.gamesettings |= 0x00000010; // No Target Resolves
|
|
||||||
|
|
||||||
case 0x95cc86ef: // Ghost in the Shell
|
|
||||||
conf.gamesettings |= 0x00000100; // no Alpha fail
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -223,6 +223,10 @@ static bool SPAM_PASS;
|
||||||
#define ZEROGS_DEVBUILD
|
#define ZEROGS_DEVBUILD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ZEROGS_DEVBUILD
|
||||||
|
//#define DEVBUILD
|
||||||
|
#endif
|
||||||
|
|
||||||
extern void __LogToConsole(const char *fmt, ...);
|
extern void __LogToConsole(const char *fmt, ...);
|
||||||
|
|
||||||
namespace ZZLog
|
namespace ZZLog
|
||||||
|
|
|
@ -187,8 +187,8 @@ ZeroGS::VB::CheckFrame32bitRes(int maxpos)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the main code of frame resising.
|
// This is the main code for frame resizing.
|
||||||
// It's check several reasons for resize and resize if it needs.
|
// It checks for several reasons to resize and resizes if it needs to.
|
||||||
// 4Mb memory in 64 bit (4 bytes) words.
|
// 4Mb memory in 64 bit (4 bytes) words.
|
||||||
// |------------------------|---------------------|----------|----------|---------------------|
|
// |------------------------|---------------------|----------|----------|---------------------|
|
||||||
// 0 gsfb.fbp zbuff.zpb tbp frame.fbp 2^20/64
|
// 0 gsfb.fbp zbuff.zpb tbp frame.fbp 2^20/64
|
||||||
|
@ -213,8 +213,11 @@ ZeroGS::VB::CheckFrameAddConstraints(int tbp)
|
||||||
if( maxpos > 256 )
|
if( maxpos > 256 )
|
||||||
maxpos &= ~0x1f;
|
maxpos &= ~0x1f;
|
||||||
|
|
||||||
//int noscissorpos = maxpos;
|
#ifdef DEVBUILD
|
||||||
//int ConstrainR1 = ConstraintReson;
|
int noscissorpos = maxpos;
|
||||||
|
int ConstrainR1 = ConstraintReson;
|
||||||
|
#endif
|
||||||
|
|
||||||
maxpos = FindMinimalHeightConstrain(maxpos);
|
maxpos = FindMinimalHeightConstrain(maxpos);
|
||||||
|
|
||||||
frame = gsfb;
|
frame = gsfb;
|
||||||
|
|
|
@ -49,7 +49,7 @@ extern u32 s_uFramebuffer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEVBUILD
|
#ifdef DEVBUILD
|
||||||
static int g_bSaveResolved = 0;
|
//static int g_bSaveResolved = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int s_nResolved;
|
extern int s_nResolved;
|
||||||
|
|
|
@ -467,6 +467,164 @@ enum GAME_HACK_OPTIONS
|
||||||
|
|
||||||
#define USEALPHATESTING (!(g_GameSettings&GAME_NOALPHATEST))
|
#define USEALPHATESTING (!(g_GameSettings&GAME_NOALPHATEST))
|
||||||
|
|
||||||
|
|
||||||
|
// CRC Information
|
||||||
|
enum Title_Info
|
||||||
|
{
|
||||||
|
Unknown_Title,
|
||||||
|
MetalSlug6,
|
||||||
|
TomoyoAfter,
|
||||||
|
Clannad,
|
||||||
|
Lamune,
|
||||||
|
KyuuketsuKitanMoonties,
|
||||||
|
PiaCarroteYoukosoGPGakuenPrincess,
|
||||||
|
KazokuKeikakuKokoroNoKizuna,
|
||||||
|
DuelSaviorDestiny,
|
||||||
|
FFX,
|
||||||
|
FFX2,
|
||||||
|
FFXII,
|
||||||
|
ShadowHearts,
|
||||||
|
Okami,
|
||||||
|
MetalGearSolid3,
|
||||||
|
DBZBT2,
|
||||||
|
DBZBT3,
|
||||||
|
SFEX3,
|
||||||
|
Bully,
|
||||||
|
BullyCC,
|
||||||
|
SoTC,
|
||||||
|
OnePieceGrandAdventure,
|
||||||
|
OnePieceGrandBattle,
|
||||||
|
ICO,
|
||||||
|
GT4,
|
||||||
|
WildArms5,
|
||||||
|
Manhunt2,
|
||||||
|
CrashBandicootWoC,
|
||||||
|
ResidentEvil4,
|
||||||
|
Spartan,
|
||||||
|
AceCombat4,
|
||||||
|
Drakengard2,
|
||||||
|
Tekken5,
|
||||||
|
IkkiTousen,
|
||||||
|
GodOfWar,
|
||||||
|
GodOfWar2,
|
||||||
|
JackieChanAdv,
|
||||||
|
HarvestMoon,
|
||||||
|
NamcoXCapcom,
|
||||||
|
GiTS,
|
||||||
|
Onimusha3,
|
||||||
|
MajokkoALaMode2,
|
||||||
|
TalesOfAbyss,
|
||||||
|
SonicUnleashed,
|
||||||
|
SimpsonsGame,
|
||||||
|
Genji,
|
||||||
|
StarOcean3,
|
||||||
|
ValkyrieProfile2,
|
||||||
|
RadiataStories,
|
||||||
|
SMTNocturne,
|
||||||
|
SMTDDS1,
|
||||||
|
SMTDDS2,
|
||||||
|
RozenMaidenGebetGarden,
|
||||||
|
Xenosaga,
|
||||||
|
Espgaluda,
|
||||||
|
OkageShadowKing,
|
||||||
|
ShadowTheHedgehog,
|
||||||
|
AtelierIris1,
|
||||||
|
AtelierIris2,
|
||||||
|
AtelierIris3,
|
||||||
|
ArTonelico1,
|
||||||
|
ArTonelico2,
|
||||||
|
ManaKhemia1,
|
||||||
|
ManaKhemia2,
|
||||||
|
DarkCloud1,
|
||||||
|
DarkCloud2,
|
||||||
|
GhostInTheShell,
|
||||||
|
TitleCount,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Region_Info
|
||||||
|
{
|
||||||
|
Unknown_Region,
|
||||||
|
US,
|
||||||
|
EU,
|
||||||
|
JP,
|
||||||
|
JPUNDUB,
|
||||||
|
RU,
|
||||||
|
FR,
|
||||||
|
DE,
|
||||||
|
IT,
|
||||||
|
ES,
|
||||||
|
ASIA,
|
||||||
|
RegionCount,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Game_Info
|
||||||
|
{
|
||||||
|
u32 crc;
|
||||||
|
Title_Info title;
|
||||||
|
Region_Info region;
|
||||||
|
u32 flags;
|
||||||
|
s32 v_thresh, t_thresh;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Note; all the options surrounded by /**/ are ones that were getting chosen previously because of missing break statements, and might not be appropriate.
|
||||||
|
// I'll have to check and see if they work better with or without them.
|
||||||
|
static const Game_Info crc_game_list[] =
|
||||||
|
{
|
||||||
|
{0xA3D63039, Xenosaga, JP, GAME_DOPARALLELCTX, 64, 32},
|
||||||
|
{0x0E7807B2, Xenosaga, US, GAME_DOPARALLELCTX, 64, 32},
|
||||||
|
{0x7D2FE035, Espgaluda, JP, 0/*GAME_BIGVALIDATE*/, 24, -1},
|
||||||
|
{0x21068223, Okami, US, GAME_XENOSPECHACK, -1, -1},
|
||||||
|
{0x891f223f, Okami, FR, GAME_XENOSPECHACK, -1, -1},
|
||||||
|
{0xC5DEFEA0, Okami, JP, GAME_XENOSPECHACK, -1, -1},
|
||||||
|
{0xe0426fc6, OkageShadowKing, Unknown_Region, GAME_XENOSPECHACK, -1, -1},
|
||||||
|
|
||||||
|
{0xD6385328, GodOfWar, US, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xFB0E6D72, GodOfWar, EU, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xEB001875, GodOfWar, EU, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xA61A4C6D, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xE23D532B, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xDF1AF973, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
{0xD6385328, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
|
||||||
|
//{0x2F123FD8, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
//{0x44A8A22A, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
//{0x4340C7C6, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
//{0xF8CD3DF6, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
//{0x0B82BFF7, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1},
|
||||||
|
|
||||||
|
{0xF0A6D880, HarvestMoon, US, GAME_NOSTENCIL, -1, -1},
|
||||||
|
{0xFB236A46, SonicUnleashed, US, GAME_FASTUPDATE | GAME_NOALPHAFAIL /**/ | GAME_GUSTHACK | GAME_NOTARGETRESOLVE /**/, -1, -1},
|
||||||
|
{0xa5d29941, ShadowTheHedgehog, US, GAME_FASTUPDATE | GAME_NOALPHAFAIL /**/ | GAME_GUSTHACK | GAME_NOTARGETRESOLVE /**/, -1, -1},
|
||||||
|
|
||||||
|
{0x7acf7e03, AtelierIris1, Unknown_Region, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0xE3981DBB, AtelierIris1, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0x9AC65D6A, AtelierIris2, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0x4CCC9212, AtelierIris3, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
//{0x4437F4B1, ArTonelico1, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0xF95F37EE, ArTonelico2, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0xF46142D3, ArTonelico2, JPUNDUB, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0x77b0236f, ManaKhemia1, US, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0x433951e7, ManaKhemia2, Unknown_Region, GAME_GUSTHACK /**/| GAME_NOTARGETRESOLVE | GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
|
||||||
|
{0xbaa8dd8, DarkCloud1, US, GAME_NOTARGETRESOLVE /**/| GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
{0xA5C05C78, DarkCloud1, Unknown_Region, GAME_NOTARGETRESOLVE /**/| GAME_NOALPHAFAIL/**/, -1, -1},
|
||||||
|
//{0x1DF41F33, DarkCloud2, US, 0, -1, -1},
|
||||||
|
{0x95cc86ef, GhostInTheShell, Unknown_Region, GAME_NOALPHAFAIL, -1, -1}
|
||||||
|
|
||||||
|
//{0xC164550A, WildArms5, JPUNDUB, 0, -1, -1},
|
||||||
|
//{0xC1640D2C, WildArms5, US, 0, -1, -1},
|
||||||
|
//{0x0FCF8FE4, WildArms5, EU, 0, -1, -1},
|
||||||
|
//{0x2294D322, WildArms5, JP, 0, -1, -1},
|
||||||
|
//{0x565B6170, WildArms5, JP, 0, -1, -1},
|
||||||
|
//{0xD7273511, SMTDDS1, US, 0, -1, -1}, // SMT Digital Devil Saga
|
||||||
|
//{0x1683A6BE, SMTDDS1, EU, 0, -1, -1}, // SMT Digital Devil Saga
|
||||||
|
//{0x44865CE1, SMTDDS1, JP, 0, -1, -1}, // SMT Digital Devil Saga
|
||||||
|
//{0xD382C164, SMTDDS2, US, 0, -1, -1}, // SMT Digital Devil Saga 2
|
||||||
|
//{0xE47C1A9C, SMTDDS2, JP, 0, -1, -1}, // SMT Digital Devil Saga 2
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GAME_INFO_INDEX (sizeof(crc_game_list)/sizeof(Game_Info))
|
||||||
|
|
||||||
extern int nBackbufferWidth, nBackbufferHeight;
|
extern int nBackbufferWidth, nBackbufferHeight;
|
||||||
extern u8* g_pbyGSMemory;
|
extern u8* g_pbyGSMemory;
|
||||||
extern u8* g_pbyGSClut; // the temporary clut buffer
|
extern u8* g_pbyGSClut; // the temporary clut buffer
|
||||||
|
|
Loading…
Reference in New Issue