GSdx: Adjust CRC hacks.

Purge Sengoku Basara crc hacks. Texture shuffle is emulated correctly on
d3d11/ogl. d3d9 skips the bad draw call.

Move Eternal Poison crc hack to d3d level. Not needed on ogl since
the game is emulated correctly.

Move hack that removes texture shuffle for Demon Stoneback back to ogl level,
half screen bottom issue remains.

Extent CRC hack for The Getaway and The Getaway Black Monday to work on
EU regions.
This commit is contained in:
lightningterror 2018-03-29 08:45:04 +02:00 committed by refractionpcsx2
parent ee3038c5b7
commit 4cb164b795
1 changed files with 62 additions and 63 deletions

View File

@ -91,8 +91,7 @@ bool GSC_DBZBT3(const GSFrameInfo& fi, int& skip)
}
else if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00e00 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMZ16)
{
// Texture shuffling works on OpenGL only for the NTSC version. The PAL version still has some issues.
// Sky texture (depth related). On Direct3D the blue sky texture is shown on the whole screen in front of the player if hack is disabled.
// Sky texture (Depth) is properly rendered on OpenGL only for the NTSC version. The PAL version still has some issues (half screen bottom issue).
if(g_crc_region == CRC::EU || Dx_only)
{
skip = 5;
@ -109,6 +108,27 @@ bool GSC_DBZBT3(const GSFrameInfo& fi, int& skip)
return true;
}
bool GSC_DemonStone(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x01400 && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSM_PSMCT16)
{
// Texture shuffle half screen bottom issue.
skip = 1000;
}
}
else
{
if(Dx_only && fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT32)
{
skip = 2;
}
}
return true;
}
bool GSC_WildArmsGames(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
@ -382,19 +402,6 @@ bool GSC_Naruto(const GSFrameInfo& fi, int& skip)
return true;
}
bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
// Texture shuffle ???
if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200)
{
skip = 1;
}
}
return true;
}
bool GSC_SakuraTaisen(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
@ -433,10 +440,13 @@ bool GSC_ShadowofRome(const GSFrameInfo& fi, int& skip)
{
if(fi.FBP && fi.TPSM == PSM_PSMT8H && ( fi.FBMSK ==0x00FFFFFF))
{
// Depth issues on all renders, white wall and white duplicate characters.
skip = 1;
}
else if(fi.TME ==0x0001 && (fi.TBP0==0x1300 || fi.TBP0==0x0f00) && fi.FBMSK>=0xFFFFFF)
{
// Cause a grey transparent wall (D3D) and a transparent vertical grey line (all renders) on the left side of the screen.
// Blur effect maybe ?
skip = 1;
}
else if(fi.TME && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 ==0x0160 ||fi.TBP0==0x01e0 || fi.TBP0<=0x0800) && fi.TPSM == PSM_PSMT8)
@ -1034,19 +1044,6 @@ bool GSC_HummerBadlands(const GSFrameInfo& fi, int& skip)
return true;
}
bool GSC_SengokuBasara(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.TBP0==0x1800 ) && fi.FBMSK==0xFF000000)
{
skip = 1;
}
}
return true;
}
bool GSC_TalesofSymphonia(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
@ -1122,6 +1119,21 @@ bool GSC_SteambotChronicles(const GSFrameInfo& fi, int& skip)
// Correctly emulated on OpenGL but can be used as potential speed hack
////////////////////////////////////////////////////////////////////////////////
bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
// Texture shuffle or hdr colclip ???
if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200)
{
// Removes shadows.
skip = 1;
}
}
return true;
}
bool GSC_FinalFightStreetwise(const GSFrameInfo& fi, int& skip)
{
if (skip == 0)
@ -1180,9 +1192,9 @@ bool GSC_GetaWay(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if ((fi.FBP == 0 || fi.FBP == 0x1180) && fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0)
if((fi.FBP == 0 || fi.FBP == 0x1180 || fi.FBP == 0x1400) && fi.TPSM == PSM_PSMT8H && fi.FBMSK == 0)
{
skip = 1; // US version only. Removes fog wall.
skip = 1; // Removes fog wall.
}
}
@ -1664,6 +1676,7 @@ bool GSC_Tenchu(const GSFrameInfo& fi, int& skip)
{
if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
{
// Depth issues. D3D only.
skip = 3;
}
}
@ -1711,26 +1724,6 @@ bool GSC_Sly2(const GSFrameInfo& fi, int& skip)
return true;
}
bool GSC_DemonStone(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x01400 && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSM_PSMCT16)
{
skip = 1000;
}
}
else
{
if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT32)
{
skip = 2;
}
}
return true;
}
bool GSC_BigMuthaTruckers(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
@ -2234,15 +2227,11 @@ void GSState::SetupCrcHack()
lut[CRC::BurnoutTakedown] = GSC_Burnout;
lut[CRC::CaptainTsubasa] = GSC_CaptainTsubasa;
lut[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC;
lut[CRC::DBZBT2] = GSC_DBZBT2;
lut[CRC::DBZBT3] = GSC_DBZBT3;
lut[CRC::DevilMayCry3] = GSC_DevilMayCry3;
lut[CRC::EternalPoison] = GSC_EternalPoison;
lut[CRC::EvangelionJo] = GSC_EvangelionJo;
lut[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong;
lut[CRC::FrontMission5] = GSC_FrontMission5;
lut[CRC::Genji] = GSC_Genji;
lut[CRC::GiTS] = GSC_GiTS;
lut[CRC::GodHand] = GSC_GodHand;
lut[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder;
lut[CRC::HummerBadlands] = GSC_HummerBadlands;
@ -2260,17 +2249,14 @@ void GSState::SetupCrcHack()
lut[CRC::SacredBlaze] = GSC_SacredBlaze;
lut[CRC::SakuraTaisen] = GSC_SakuraTaisen;
lut[CRC::SakuraWarsSoLongMyLove] = GSC_SakuraWarsSoLongMyLove;
lut[CRC::SengokuBasara] = GSC_SengokuBasara;
lut[CRC::ShadowofRome] = GSC_ShadowofRome;
lut[CRC::ShinOnimusha] = GSC_ShinOnimusha;
lut[CRC::Simple2000Vol114] = GSC_Simple2000Vol114;
lut[CRC::Spartan] = GSC_Spartan;
lut[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed;
lut[CRC::SteambotChronicles] = GSC_SteambotChronicles;
lut[CRC::SFEX3] = GSC_SFEX3;
lut[CRC::TalesOfLegendia] = GSC_TalesOfLegendia;
lut[CRC::TalesofSymphonia] = GSC_TalesofSymphonia;
lut[CRC::Tekken5] = GSC_Tekken5;
lut[CRC::TimeSplitters2] = GSC_TimeSplitters2;
lut[CRC::TombRaiderAnniversary] = GSC_TombRaider;
lut[CRC::TombRaiderLegend] = GSC_TombRaiderLegend;
@ -2282,10 +2268,22 @@ void GSState::SetupCrcHack()
lut[CRC::Yakuza2] = GSC_Yakuza2;
lut[CRC::Yakuza] = GSC_Yakuza;
lut[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2;
// Channel Effect
lut[CRC::GiTS] = GSC_GiTS;
lut[CRC::SteambotChronicles] = GSC_SteambotChronicles;
// Half Screen bottom issue
lut[CRC::DBZBT2] = GSC_DBZBT2;
lut[CRC::DBZBT3] = GSC_DBZBT3;
lut[CRC::DemonStone] = GSC_DemonStone;
lut[CRC::Tekken5] = GSC_Tekken5;
// These games emulate a stencil buffer with the alpha channel of the RT (too slow to move to DX only)
lut[CRC::RadiataStories] = GSC_RadiataStories;
lut[CRC::StarOcean3] = GSC_StarOcean3;
lut[CRC::ValkyrieProfile2] = GSC_ValkyrieProfile2;
// Only Aggressive
lut[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers;
lut[CRC::FFX2] = GSC_FFXGames;
@ -2304,7 +2302,7 @@ void GSState::SetupCrcHack()
// Depth
lut[CRC::Bully] = GSC_Bully;
lut[CRC::BullyCC] = GSC_BullyCC;
lut[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise;
lut[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; // + blending
lut[CRC::GodOfWar2] = GSC_GodOfWar2;
lut[CRC::ICO] = GSC_ICO;
lut[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers;
@ -2312,6 +2310,8 @@ void GSState::SetupCrcHack()
lut[CRC::SoulCalibur2] = GSC_SoulCaliburGames;
lut[CRC::SoulCalibur3] = GSC_SoulCaliburGames;
lut[CRC::SuikodenTactics] = GSC_SuikodenTactics;
lut[CRC::TenchuFS] = GSC_Tenchu;
lut[CRC::TenchuWoH] = GSC_Tenchu;
lut[CRC::XE3] = GSC_XE3;
// Depth + Texture cache issue + Date (AKA a real mess)
@ -2319,16 +2319,14 @@ void GSState::SetupCrcHack()
// Not tested but must be fixed with texture shuffle
lut[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers;
lut[CRC::DemonStone] = GSC_DemonStone;
lut[CRC::CrashNburn] = GSC_CrashNburn; // seem to be a basic depth effect
lut[CRC::EternalPoison] = GSC_EternalPoison;
lut[CRC::LegoBatman] = GSC_LegoBatman;
lut[CRC::OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure;
lut[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle;
lut[CRC::SpyroEternalNight] = GSC_SpyroEternalNight;
lut[CRC::SpyroNewBeginning] = GSC_SpyroNewBeginning;
lut[CRC::SonicUnleashed] = GSC_SonicUnleashed;
lut[CRC::TenchuFS] = GSC_Tenchu;
lut[CRC::TenchuWoH] = GSC_Tenchu;
// Those games might requires accurate fbmask
lut[CRC::Sly2] = GSC_Sly2;
@ -2352,6 +2350,7 @@ void GSState::SetupCrcHack()
lut[CRC::SkyGunner] = GSC_SkyGunner;
lut[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2;
lut[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront;
// Dedicated shader for channel effect
lut[CRC::TalesOfAbyss] = GSC_TalesOfAbyss;