diff --git a/plugins/GSdx/GSCrc.cpp b/plugins/GSdx/GSCrc.cpp index 64fd873341..25cf0697db 100644 --- a/plugins/GSdx/GSCrc.cpp +++ b/plugins/GSdx/GSCrc.cpp @@ -173,9 +173,6 @@ CRC::Game CRC::m_games[] = {0xA32F7CD0, AceCombat4, US, 0}, {0x5ED8FB53, AceCombat4, JP, 0}, {0x1B9B7563, AceCombat4, EU, 0}, - {0xEC432B24, Drakengard2, EU, 0}, - {0x1648E3C9, Drakengard2, US, 0}, - {0xB7ADB13A, Drakengard2, CH, 0}, {0xFC46EA61, Tekken5, JP, 0}, {0x1F88EE37, Tekken5, EU, 0}, {0x1F88BECD, Tekken5, EU, 0}, //language selector... @@ -296,9 +293,6 @@ CRC::Game CRC::m_games[] = {0x90F0D852, BigMuthaTruckers, US, 0}, {0x5CC9BF81, TimeSplitters2, EU, 0}, {0x12532F1C, TimeSplitters2, US, 0}, - {0xA33748AA, ReZ, US, 0}, - {0xAE1152EB, ReZ, EU, 0}, - {0xD2EA890A, ReZ, JP, 0}, {0xC818BEC2, LordOfTheRingsTwoTowers, US, 0}, {0xDC43F2B8, LordOfTheRingsTwoTowers, EU, 0}, {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, @@ -354,9 +348,6 @@ CRC::Game CRC::m_games[] = // DMC(1)? {0x79B8A95F, DevilMayCry3, US, 0}, {0x7F3D692D, DevilMayCry3, CH, 0}, // {0x1A85E924, DevilMayCry3, CH, 0}, // same CRC as {GodOfWar, NoRegion} - {0x0a8ef911, ArctheLad, US, 0}, // cutie comment - {0x2C5E7DEA, ArctheLad, CH, 0}, - {0xE69E7F58, ArctheLad, US, 0}, // cutie comment {0xB1995E29, ShadowofRome, EU, 0}, // cutie comment {0x958DCA28, ShadowofRome, EU, 0}, {0x57818AF6, ShadowofRome, US, 0}, diff --git a/plugins/GSdx/GSCrc.h b/plugins/GSdx/GSCrc.h index 498a90b9dd..7b7e43aed4 100644 --- a/plugins/GSdx/GSCrc.h +++ b/plugins/GSdx/GSCrc.h @@ -61,7 +61,6 @@ public: ResidentEvil4, Spartan, AceCombat4, - Drakengard2, Tekken5, IkkiTousen, GodOfWar, @@ -97,11 +96,9 @@ public: Sly3, Sly2, ShadowofRome, - ArctheLad, DemonStone, BigMuthaTruckers, TimeSplitters2, - ReZ, LordOfTheRingsTwoTowers, LordOfTheRingsThirdAge, RedDeadRevolver, diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp index b3ff6783f6..df608141ab 100644 --- a/plugins/GSdx/GSState.cpp +++ b/plugins/GSdx/GSState.cpp @@ -3045,6 +3045,7 @@ bool GSC_Okami(const GSFrameInfo& fi, int& skip) bool GSC_MetalGearSolid3(const GSFrameInfo& fi, int& skip) { + // Game requires sub RT support (texture cache limitation) if(skip == 0) { if(fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSM_PSMCT24) @@ -3117,7 +3118,11 @@ 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) { - skip = 5; + // Texture shuffling must work on openGL + if (Dx_only) + skip = 5; + else + return false; } else if(fi.TME && fi.FPSM == fi.TPSM && fi.TBP0 == 0x03f00 && fi.TPSM == PSM_PSMCT32) { @@ -3278,6 +3283,7 @@ bool GSC_ICO(const GSFrameInfo& fi, int& skip) bool GSC_GT4(const GSFrameInfo& fi, int& skip) { + // Game requires to extract source from RT (block boundary) (texture cache limitation) if(skip == 0) { if(fi.TME && fi.FBP >= 0x02f00 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180 /*|| fi.TBP0 == 0x01a40*/) && fi.TPSM == PSM_PSMT8) //TBP0 0x1a40 progressive @@ -3300,6 +3306,7 @@ bool GSC_GT4(const GSFrameInfo& fi, int& skip) bool GSC_GT3(const GSFrameInfo& fi, int& skip) { + // Same issue as GSC_GT4 ??? if(skip == 0) { if(fi.TME && fi.FBP >= 0x02de0 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180) && fi.TPSM == PSM_PSMT8) @@ -3313,6 +3320,7 @@ bool GSC_GT3(const GSFrameInfo& fi, int& skip) bool GSC_GTConcept(const GSFrameInfo& fi, int& skip) { + // Same issue as GSC_GT4 ??? if(skip == 0) { if(fi.TME && fi.FBP >= 0x03420 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01400) && fi.TPSM == PSM_PSMT8) @@ -3414,7 +3422,7 @@ bool GSC_ResidentEvil4(const GSFrameInfo& fi, int& skip) { skip = 176; } - else if(fi.TME && fi.FBP ==0x03100 && (fi.TBP0==0x2a00 ||fi.TBP0==0x3480) && fi.TPSM ==0 && fi.FBMSK == 0) + else if(fi.TME && fi.FBP ==0x03100 && (fi.TBP0==0x2a00 ||fi.TBP0==0x3480) && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0) { skip = 1; } @@ -3428,7 +3436,7 @@ bool GSC_SacredBlaze(const GSFrameInfo& fi, int& skip) //Fix Sacred Blaze rendering glitches if(skip == 0) { - if(fi.TME && (fi.FBP==0x0000 || fi.FBP==0x0e00) && (fi.TBP0==0x2880 || fi.TBP0==0x2a80 ) && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.TPSM ==0 && fi.FBMSK == 0x0) + if(fi.TME && (fi.FBP==0x0000 || fi.FBP==0x0e00) && (fi.TBP0==0x2880 || fi.TBP0==0x2a80 ) && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x0) { skip = 1; } @@ -3504,25 +3512,6 @@ bool GSC_AceCombat4(const GSFrameInfo& fi, int& skip) return true; } -bool GSC_Drakengard2(const GSFrameInfo& fi, int& skip) -{ - // Below hack breaks the GUI - - /*if(skip == 0) - { - if(g_crc_region == CRC::CH && fi.TME && fi.FBP == 0x026c0 && fi.TBP0 == 0x00a00 && fi.FPSM ==2) - { - skip =34; - } - if((g_crc_region == CRC::US || g_crc_region == CRC::EU) && fi.TME && fi.FBP == 0x026c0 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00a00 && fi.TPSM == PSM_PSMCT32) - { - skip = 64; - } - }*/ - - return true; -} - bool GSC_Tekken5(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3749,7 +3738,11 @@ bool GSC_Genji(const GSFrameInfo& fi, int& skip) { if(fi.TME && fi.FBP == 0x01500 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00e00 && fi.TPSM == PSM_PSMZ16) { - skip = 6; + // likely fixed in openGL (texture shuffle) + if (Dx_only) + skip = 6; + else + return false; } else if(fi.TPSM == PSM_PSMCT24 && fi.TME ==0x0001 && fi.TBP0==fi.FBP) { @@ -3837,7 +3830,7 @@ bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip) { skip = 1; } - else if(Dx_only && fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) + else if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) { // GH: Hack is quite similar to GSC_StarOcean3. It is potentially the same issue. // Fixed on openGL @@ -3861,7 +3854,10 @@ bool GSC_HauntingGround(const GSFrameInfo& fi, int& skip) { if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x03FFF) { - skip = 1; + if (Dx_only) + skip = 1; + else + return false; } else if(fi.TME && fi.FBP == 0x3000 && fi.TBP0 == 0x3380) { @@ -3994,6 +3990,7 @@ bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip) { if(skip == 0) { + // Texture shuffle ??? if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200) { skip = 1; @@ -4178,18 +4175,6 @@ bool GSC_FFX(const GSFrameInfo& fi, int& skip) return true; } -bool GSC_ArctheLad(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - /*if(fi.TPSM == PSM_PSMT8H && fi.FBMSK >= 0xFFFFFFF) - { - skip = 1; - }*/ - } - return true; -} - bool GSC_DemonStone(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -4236,20 +4221,6 @@ bool GSC_TimeSplitters2(const GSFrameInfo& fi, int& skip) return true; } -bool GSC_ReZ(const GSFrameInfo& fi, int& skip) -{ - //not needed anymore - /*if(skip == 0) - { - if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x008c0 || fi.FBP == 0x00a00) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) - { - skip = 1; - } - }*/ - - return true; -} - bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -4384,6 +4355,7 @@ bool GSC_Black(const GSFrameInfo& fi, int& skip) { if(skip == 0) { + // Note: the first part of the hack must be fixed in openGL (texture shuffle). Remains the 2nd part (HasSharedBits) if(fi.TME /*&& (fi.FBP == 0x00000 || fi.FBP == 0x008c0)*/ && fi.FPSM == PSM_PSMCT16 && (fi.TBP0 == 0x01a40 || fi.TBP0 == 0x01b80 || fi.TBP0 == 0x030c0) && fi.TPSM == PSM_PSMZ16 || (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM))) { skip = 5; @@ -4516,7 +4488,7 @@ bool GSC_DevilMayCry3(const GSFrameInfo& fi, int& skip) if(skip == 0) { - if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) + if(Dx_only && fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) { skip = 32; } @@ -4588,7 +4560,7 @@ bool GSC_BlackHawkDown(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01800 && fi.TPSM == PSM_PSMZ16) + if(Dx_only && fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01800 && fi.TPSM == PSM_PSMZ16) { skip = 2; //wall of fog } @@ -4611,6 +4583,8 @@ bool GSC_Burnout(const GSFrameInfo& fi, int& skip) } else if(fi.TME && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMZ16) //fog { + if (!Dx_only) return false; + if(fi.FBP == 0x00a00 && fi.TBP0 == 0x01e00) { skip = 4; //pal @@ -4834,6 +4808,8 @@ bool GSC_ZettaiZetsumeiToshi2(const GSFrameInfo& fi, int& skip) } else if((fi.FBP | fi.TBP0)&& fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x3FFF) { + // Note start of the effect (texture shuffle) is fixed in openGL but maybe not the extra draw + // call.... skip = 1000; } @@ -5430,131 +5406,137 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) memset(map, 0, sizeof(map)); if (s_crc_hack_level > 1) { - map[CRC::Okami] = GSC_Okami; - map[CRC::MetalGearSolid3] = GSC_MetalGearSolid3; + map[CRC::AceCombat4] = GSC_AceCombat4; + map[CRC::AlpineRacer3] = GSC_AlpineRacer3; + map[CRC::Black] = GSC_Black; + map[CRC::BlackHawkDown] = GSC_BlackHawkDown; + map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; + map[CRC::BullyCC] = GSC_BullyCC; // Bully is fixed, maybe this one too? + map[CRC::BurnoutDominator] = GSC_Burnout; + map[CRC::BurnoutRevenge] = GSC_Burnout; + map[CRC::BurnoutTakedown] = GSC_Burnout; + map[CRC::CaptainTsubasa] = GSC_CaptainTsubasa; + map[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC; + map[CRC::CrashNburn] = GSC_CrashNburn; map[CRC::DBZBT2] = GSC_DBZBT2; map[CRC::DBZBT3] = GSC_DBZBT3; - map[CRC::SFEX3] = GSC_SFEX3; - map[CRC::Bully] = GSC_Bully; - map[CRC::BullyCC] = GSC_BullyCC; - map[CRC::SoTC] = GSC_SoTC; - map[CRC::OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure; - map[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle; - map[CRC::ICO] = GSC_ICO; - map[CRC::GT4] = GSC_GT4; - map[CRC::GT3] = GSC_GT3; - map[CRC::GTConcept] = GSC_GTConcept; - map[CRC::WildArms4] = GSC_WildArms4; - map[CRC::WildArms5] = GSC_WildArms5; - map[CRC::Manhunt2] = GSC_Manhunt2; - map[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC; - map[CRC::ResidentEvil4] = GSC_ResidentEvil4; - map[CRC::Spartan] = GSC_Spartan; - map[CRC::AceCombat4] = GSC_AceCombat4; - map[CRC::Drakengard2] = GSC_Drakengard2; - map[CRC::Tekken5] = GSC_Tekken5; - map[CRC::IkkiTousen] = GSC_IkkiTousen; - map[CRC::GodOfWar] = GSC_GodOfWar; - map[CRC::GodOfWar2] = GSC_GodOfWar2; - map[CRC::GiTS] = GSC_GiTS; - map[CRC::Onimusha3] = GSC_Onimusha3; - map[CRC::TalesOfAbyss] = GSC_TalesOfAbyss; - map[CRC::SonicUnleashed] = GSC_SonicUnleashed; - map[CRC::SimpsonsGame] = GSC_SimpsonsGame; - map[CRC::Genji] = GSC_Genji; - map[CRC::RadiataStories] = GSC_RadiataStories; - map[CRC::HauntingGround] = GSC_HauntingGround; + map[CRC::DeathByDegreesTekkenNinaWilliams] = GSC_DeathByDegreesTekkenNinaWilliams; + map[CRC::DevilMayCry3] = GSC_DevilMayCry3; + map[CRC::EternalPoison] = GSC_EternalPoison; map[CRC::EvangelionJo] = GSC_EvangelionJo; - map[CRC::SuikodenTactics] = GSC_SuikodenTactics; - map[CRC::CaptainTsubasa] = GSC_CaptainTsubasa; - map[CRC::Oneechanbara2Special] = GSC_Oneechanbara2Special; + map[CRC::FFVIIDoC] = GSC_FFVIIDoC; + map[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong; + map[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; + map[CRC::FrontMission5] = GSC_FrontMission5; + map[CRC::Genji] = GSC_Genji; + map[CRC::GetaWayBlackMonday] = GSC_GetaWay; + map[CRC::GetaWay] = GSC_GetaWay; + map[CRC::GodHand] = GSC_GodHand; + map[CRC::GodOfWar2] = GSC_GodOfWar2; + map[CRC::GT3] = GSC_GT3; + map[CRC::GT4] = GSC_GT4; + map[CRC::GTASanAndreas] = GSC_GTASanAndreas; + map[CRC::GTConcept] = GSC_GTConcept; + map[CRC::HauntingGround] = GSC_HauntingGround; + map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; + map[CRC::HummerBadlands] = GSC_HummerBadlands; + map[CRC::ICO] = GSC_ICO; + map[CRC::IkkiTousen] = GSC_IkkiTousen; + map[CRC::JamesBondEverythingOrNothing] = GSC_JamesBondEverythingOrNothing; + map[CRC::KnightsOfTheTemple2] = GSC_KnightsOfTheTemple2; + map[CRC::Kunoichi] = GSC_Kunoichi; + map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge; + map[CRC::Manhunt2] = GSC_Manhunt2; + map[CRC::MetalGearSolid3] = GSC_MetalGearSolid3; + map[CRC::MidnightClub3] = GSC_MidnightClub3; + map[CRC::NanoBreaker] = GSC_NanoBreaker; map[CRC::NarutimateAccel] = GSC_NarutimateAccel; map[CRC::Naruto] = GSC_Naruto; - map[CRC::EternalPoison] = GSC_EternalPoison; - map[CRC::LegoBatman] = GSC_LegoBatman; - map[CRC::SakuraTaisen] = GSC_SakuraTaisen; - map[CRC::TenchuWoH] = GSC_Tenchu; - map[CRC::TenchuFS] = GSC_Tenchu; - map[CRC::Sly3] = GSC_Sly3; - map[CRC::Sly2] = GSC_Sly2; - map[CRC::ShadowofRome] = GSC_ShadowofRome; - map[CRC::FFXII] = GSC_FFXII; - map[CRC::FFX2] = GSC_FFX2; - map[CRC::FFX] = GSC_FFX; - map[CRC::ArctheLad] = GSC_ArctheLad; - map[CRC::DemonStone] = GSC_DemonStone; - map[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers; - map[CRC::TimeSplitters2] = GSC_TimeSplitters2; - map[CRC::ReZ] = GSC_ReZ; - map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; - map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge; + map[CRC::Oneechanbara2Special] = GSC_Oneechanbara2Special; + map[CRC::Onimusha3] = GSC_Onimusha3; map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; - map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; - map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; - map[CRC::CrashNburn] = GSC_CrashNburn; - map[CRC::TombRaiderUnderworld] = GSC_TombRaiderUnderWorld; - map[CRC::TombRaiderAnniversary] = GSC_TombRaider; - map[CRC::TombRaiderLegend] = GSC_TombRaiderLegend; - map[CRC::SSX3] = GSC_SSX3; - map[CRC::Black] = GSC_Black; - map[CRC::FFVIIDoC] = GSC_FFVIIDoC; - map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; - map[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront; - map[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2; - map[CRC::BlackHawkDown] = GSC_BlackHawkDown; - map[CRC::DevilMayCry3] = GSC_DevilMayCry3; - map[CRC::BurnoutTakedown] = GSC_Burnout; - map[CRC::BurnoutRevenge] = GSC_Burnout; - map[CRC::BurnoutDominator] = GSC_Burnout; - map[CRC::MidnightClub3] = GSC_MidnightClub3; - map[CRC::SpyroNewBeginning] = GSC_SpyroNewBeginning; - map[CRC::SpyroEternalNight] = GSC_SpyroEternalNight; - map[CRC::TalesOfLegendia] = GSC_TalesOfLegendia; - map[CRC::NanoBreaker] = GSC_NanoBreaker; - map[CRC::Kunoichi] = GSC_Kunoichi; - map[CRC::Yakuza] = GSC_Yakuza; - map[CRC::Yakuza2] = GSC_Yakuza2; - map[CRC::SkyGunner] = GSC_SkyGunner; - map[CRC::JamesBondEverythingOrNothing] = GSC_JamesBondEverythingOrNothing; - map[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2; - map[CRC::ShinOnimusha] = GSC_ShinOnimusha; - map[CRC::XE3] = GSC_XE3; - map[CRC::GetaWay] = GSC_GetaWay; - map[CRC::GetaWayBlackMonday] = GSC_GetaWay; + map[CRC::ResidentEvil4] = GSC_ResidentEvil4; + map[CRC::SacredBlaze] = GSC_SacredBlaze; + map[CRC::SakuraTaisen] = GSC_SakuraTaisen; map[CRC::SakuraWarsSoLongMyLove] = GSC_SakuraWarsSoLongMyLove; - map[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong; - map[CRC::TouristTrophy] = GSC_TouristTrophy; - map[CRC::GTASanAndreas] = GSC_GTASanAndreas; - map[CRC::FrontMission5] = GSC_FrontMission5; - map[CRC::GodHand] = GSC_GodHand; - map[CRC::KnightsOfTheTemple2] = GSC_KnightsOfTheTemple2; - map[CRC::UltramanFightingEvolution] = GSC_UltramanFightingEvolution; - map[CRC::DeathByDegreesTekkenNinaWilliams] = GSC_DeathByDegreesTekkenNinaWilliams; - map[CRC::AlpineRacer3] = GSC_AlpineRacer3; - map[CRC::HummerBadlands] = GSC_HummerBadlands; map[CRC::SengokuBasara] = GSC_SengokuBasara; - map[CRC::Grandia3] = GSC_Grandia3; - map[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; - map[CRC::TalesofSymphonia] = GSC_TalesofSymphonia; + map[CRC::ShadowofRome] = GSC_ShadowofRome; + map[CRC::ShinOnimusha] = GSC_ShinOnimusha; + map[CRC::Simple2000Vol114] = GSC_Simple2000Vol114; + map[CRC::SkyGunner] = GSC_SkyGunner; map[CRC::SoulCalibur2] = GSC_SoulCalibur2; map[CRC::SoulCalibur3] = GSC_SoulCalibur3; - map[CRC::Simple2000Vol114] = GSC_Simple2000Vol114; - map[CRC::UrbanReign] = GSC_UrbanReign; + map[CRC::Spartan] = GSC_Spartan; + map[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2; + map[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront; + map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; map[CRC::SteambotChronicles] = GSC_SteambotChronicles; - map[CRC::SacredBlaze] = GSC_SacredBlaze; - map[CRC::SMTNocturne] = GSC_SMTNocturneDDS<0x2054E870>; + map[CRC::SuikodenTactics] = GSC_SuikodenTactics; + map[CRC::TalesOfAbyss] = GSC_TalesOfAbyss; + map[CRC::TalesOfLegendia] = GSC_TalesOfLegendia; + map[CRC::TalesofSymphonia] = GSC_TalesofSymphonia; + map[CRC::Tekken5] = GSC_Tekken5; + map[CRC::TimeSplitters2] = GSC_TimeSplitters2; + map[CRC::TombRaiderAnniversary] = GSC_TombRaider; + map[CRC::TombRaiderLegend] = GSC_TombRaiderLegend; + map[CRC::TombRaiderUnderworld] = GSC_TombRaiderUnderWorld; + map[CRC::TouristTrophy] = GSC_TouristTrophy; + map[CRC::UltramanFightingEvolution] = GSC_UltramanFightingEvolution; + map[CRC::UrbanReign] = GSC_UrbanReign; + map[CRC::WildArms4] = GSC_WildArms4; + map[CRC::WildArms5] = GSC_WildArms5; + map[CRC::XE3] = GSC_XE3; + map[CRC::Yakuza2] = GSC_Yakuza2; + map[CRC::Yakuza] = GSC_Yakuza; + map[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2; + // Only Aggresive + map[CRC::FFX2] = GSC_FFX2; + map[CRC::FFX] = GSC_FFX; + map[CRC::FFXII] = GSC_FFXII; map[CRC::SMTDDS1] = GSC_SMTNocturneDDS<0x203BA820>; map[CRC::SMTDDS2] = GSC_SMTNocturneDDS<0x20435BF0>; + map[CRC::SMTNocturne] = GSC_SMTNocturneDDS<0x2054E870>; + map[CRC::SoTC] = GSC_SoTC; + map[CRC::SSX3] = GSC_SSX3; } // Hack that were fixed on openGL if (Dx_only) { - // This one requires accurate_colclip + map[CRC::Bully] = GSC_Bully; + map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; + map[CRC::Okami] = GSC_Okami; + map[CRC::SimpsonsGame] = GSC_SimpsonsGame; + + // Not tested but must be fixed with texture shuffle + map[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers; + map[CRC::DemonStone] = GSC_DemonStone; + map[CRC::GiTS] = GSC_GiTS; + map[CRC::LegoBatman] = GSC_LegoBatman; + map[CRC::OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure; + map[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle; + map[CRC::SFEX3] = GSC_SFEX3; + map[CRC::SpyroEternalNight] = GSC_SpyroEternalNight; + map[CRC::SpyroNewBeginning] = GSC_SpyroNewBeginning; + map[CRC::SonicUnleashed] = GSC_SonicUnleashed; + map[CRC::TenchuFS] = GSC_Tenchu; + map[CRC::TenchuWoH] = GSC_Tenchu; + + // Those games might requires accurate fbmask + map[CRC::Sly2] = GSC_Sly2; + map[CRC::Sly3] = GSC_Sly3; + + // Those games require accurate_colclip (perf) map[CRC::CastlevaniaCoD] = GSC_Castlevania; map[CRC::CastlevaniaLoI] = GSC_Castlevania; + map[CRC::GodOfWar] = GSC_GodOfWar; + // Those games emulate a stencil buffer with the alpha channel of the RT (Slow) + map[CRC::RadiataStories] = GSC_RadiataStories; map[CRC::StarOcean3] = GSC_StarOcean3; map[CRC::ValkyrieProfile2] = GSC_ValkyrieProfile2; + + // Deprecated hack could be removed (Cutie) + map[CRC::Grandia3] = GSC_Grandia3; } }