diff --git a/plugins/GSdx/GSCrc.cpp b/plugins/GSdx/GSCrc.cpp index f0d201bfb0..0453b5aaef 100644 --- a/plugins/GSdx/GSCrc.cpp +++ b/plugins/GSdx/GSCrc.cpp @@ -104,6 +104,8 @@ CRC::Game CRC::m_games[] = {0x0FCF8FE4, WildArms5, EU, 0}, {0x2294D322, WildArms5, JP, 0}, {0x565B6170, WildArms5, JP, 0}, + {0xBBC3EFFA, WildArms4, US, 0}, + {0xBBC396EC, WildArms4, US, 0}, //hmm such a small diff in the CRC.. {0x8B029334, Manhunt2, Unknown, 0}, {0x09F49E37, CrashBandicootWoC, Unknown, 0}, {0x013E349D, ResidentEvil4, US, 0}, diff --git a/plugins/GSdx/GSCrc.h b/plugins/GSdx/GSCrc.h index dbb15612f5..af69d12dc8 100644 --- a/plugins/GSdx/GSCrc.h +++ b/plugins/GSdx/GSCrc.h @@ -52,6 +52,7 @@ public: ICO, GT4, WildArms5, + WildArms4, Manhunt2, CrashBandicootWoC, ResidentEvil4, diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp index c2835ea85f..3e639b8ae9 100644 --- a/plugins/GSdx/GSState.cpp +++ b/plugins/GSdx/GSState.cpp @@ -2161,6 +2161,26 @@ bool GSC_GT4(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_WildArms4(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x03100 && fi.FPSM == PSM_PSMZ32 && fi.TBP0 == 0x01c00 && fi.TPSM == PSM_PSMZ32) + { + skip = 100; + } + } + else + { + if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x02a00 && fi.TPSM == PSM_PSMCT32) + { + skip = 1; + } + } + + return true; +} + bool GSC_WildArms5(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -2538,6 +2558,7 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle; map[CRC::ICO] = GSC_ICO; map[CRC::GT4] = GSC_GT4; + map[CRC::WildArms4] = GSC_WildArms4; map[CRC::WildArms5] = GSC_WildArms5; map[CRC::Manhunt2] = GSC_Manhunt2; map[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC;