diff --git a/plugins/zzogl-pg/opengl/GSmain.cpp b/plugins/zzogl-pg/opengl/GSmain.cpp index b93f421717..35f3800abb 100644 --- a/plugins/zzogl-pg/opengl/GSmain.cpp +++ b/plugins/zzogl-pg/opengl/GSmain.cpp @@ -330,9 +330,12 @@ void CALLBACK GSsetSettingsDir(const char* dir) { extern int VALIDATE_THRESH; extern u32 TEXDESTROY_THRESH; + int g_LastCRC = 0; + void CALLBACK GSsetGameCRC(int crc, int options) { + // TEXDESTROY_THRESH starts out at 16. VALIDATE_THRESH = 8; conf.mrtdepth = ((conf.gamesettings & GAME_DISABLEMRTDEPTH) != 0); @@ -343,63 +346,24 @@ void CALLBACK GSsetGameCRC(int crc, int options) g_GameSettings |= GAME_PATH3HACK; - bool RunningFirstTime = (g_LastCRC == crc); + bool CRCValueChanged = (g_LastCRC != crc); g_LastCRC = crc; - - if (RunningFirstTime) { - switch(crc) { - case 0x54A548B4: // crash n burn - // overbright - break; - - case 0xA3D63039: // xenosaga(j) - case 0x0E7807B2: // xenosaga(u) - g_GameSettings |= GAME_DOPARALLELCTX; - VALIDATE_THRESH = 64; - 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 + + ZZLog::Error_Log("CRC = %x", crc); + if (CRCValueChanged && (crc != 0)) + { + for (int i = 0; i < GAME_INFO_INDEX; i++) + { + 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; + + conf.gamesettings |= crc_game_list[i].flags; + g_GameSettings = conf.gamesettings | options; + ZZLog::Error_Log("Found CRC[%x] in crc game list.", crc); + return; + } } } diff --git a/plugins/zzogl-pg/opengl/Util.h b/plugins/zzogl-pg/opengl/Util.h index 1857ae39fa..ef968c3905 100644 --- a/plugins/zzogl-pg/opengl/Util.h +++ b/plugins/zzogl-pg/opengl/Util.h @@ -223,6 +223,10 @@ static bool SPAM_PASS; #define ZEROGS_DEVBUILD #endif +#ifdef ZEROGS_DEVBUILD +//#define DEVBUILD +#endif + extern void __LogToConsole(const char *fmt, ...); namespace ZZLog @@ -358,5 +362,5 @@ public: }; #endif - + #endif // UTIL_H_INCLUDED diff --git a/plugins/zzogl-pg/opengl/ZZoglVB.cpp b/plugins/zzogl-pg/opengl/ZZoglVB.cpp index a3a0084e62..a82a3bf1ee 100644 --- a/plugins/zzogl-pg/opengl/ZZoglVB.cpp +++ b/plugins/zzogl-pg/opengl/ZZoglVB.cpp @@ -187,8 +187,8 @@ ZeroGS::VB::CheckFrame32bitRes(int maxpos) } -// This is the main code of frame resising. -// It's check several reasons for resize and resize if it needs. +// This is the main code for frame resizing. +// It checks for several reasons to resize and resizes if it needs to. // 4Mb memory in 64 bit (4 bytes) words. // |------------------------|---------------------|----------|----------|---------------------| // 0 gsfb.fbp zbuff.zpb tbp frame.fbp 2^20/64 @@ -213,8 +213,11 @@ ZeroGS::VB::CheckFrameAddConstraints(int tbp) if( maxpos > 256 ) maxpos &= ~0x1f; - //int noscissorpos = maxpos; - //int ConstrainR1 = ConstraintReson; +#ifdef DEVBUILD + int noscissorpos = maxpos; + int ConstrainR1 = ConstraintReson; +#endif + maxpos = FindMinimalHeightConstrain(maxpos); frame = gsfb; diff --git a/plugins/zzogl-pg/opengl/targets.cpp b/plugins/zzogl-pg/opengl/targets.cpp index 878dfda0c1..51fcac131e 100644 --- a/plugins/zzogl-pg/opengl/targets.cpp +++ b/plugins/zzogl-pg/opengl/targets.cpp @@ -49,7 +49,7 @@ extern u32 s_uFramebuffer; #endif #ifdef DEVBUILD -static int g_bSaveResolved = 0; +//static int g_bSaveResolved = 0; #endif extern int s_nResolved; diff --git a/plugins/zzogl-pg/opengl/zerogs.h b/plugins/zzogl-pg/opengl/zerogs.h index 2a7e8da9f7..abce69ebf5 100644 --- a/plugins/zzogl-pg/opengl/zerogs.h +++ b/plugins/zzogl-pg/opengl/zerogs.h @@ -467,6 +467,164 @@ enum GAME_HACK_OPTIONS #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 u8* g_pbyGSMemory; extern u8* g_pbyGSClut; // the temporary clut buffer