diff --git a/bin/GameIndex.dbf b/bin/GameIndex.dbf index 82e5e4d629..261309b14b 100644 --- a/bin/GameIndex.dbf +++ b/bin/GameIndex.dbf @@ -6302,6 +6302,7 @@ Serial = SLUS-21059 Name = Tekken 5 Region = NTSC-U Compat = 5 +eeClampMode = 1 --------------------------------------------- Serial = SLUS-21060 Name = WWE SmackDown! vs. RAW @@ -6765,6 +6766,7 @@ Compat = 5 Serial = SLUS-21160 Name = Tekken 5 [Demo] Region = NTSC-U +eeClampMode = 1 --------------------------------------------- Serial = SLUS-21161 Name = Fight Night - Round 2 @@ -11358,10 +11360,12 @@ Region = NTSC-Unk Serial = SCAJ-20125 Name = Tekken 5 Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- Serial = SCAJ-20126 Name = Tekken 5 Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- Serial = SCAJ-20127 Name = EyeToy - Play 2 [with Camera] @@ -11643,6 +11647,7 @@ Region = NTSC-Unk Serial = SCAJ-20199 Name = Tekken 5 [PlayStation 2 the Best] Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- Serial = SCAJ-25002 Name = Shinobi @@ -11800,6 +11805,7 @@ Region = NTSC-K Serial = SCKA-20049 Name = Tekken 5 Region = NTSC-K +eeClampMode = 1 --------------------------------------------- Serial = SCKA-20050 Name = Tales of Legendia @@ -11879,6 +11885,7 @@ VuAddSubHack = 1 Serial = SCKA-20081 Name = Tekken 5 [PlayStation 2 Big Hit Series] Region = NTSC-K +eeClampMode = 1 --------------------------------------------- Serial = SCKA-20086 Name = Shin Onimusha - Dawn of Dreams [Disc1of2] @@ -26581,6 +26588,7 @@ Serial = SLPS-25510 Name = Tekken 5 Region = NTSC-J Compat = 5 +eeClampMode = 1 --------------------------------------------- Serial = SLPS-25511 Name = Rasetsu Alternative @@ -28153,6 +28161,7 @@ Region = NTSC-J Serial = SLPS-73223 Name = Tekken 5 [PlayStation 2 The Best] Region = NTSC-J +eeClampMode = 1 --------------------------------------------- Serial = SLPS-73224 Name = Xenosaga Episode II - Jenseits von Gut und Bose [PlayStation 2 The Best] [Disc1of2] @@ -29437,6 +29446,7 @@ Serial = SCES-53202 Name = Tekken 5 Region = PAL-Unk Compat = 5 +eeClampMode = 1 --------------------------------------------- Serial = SCES-53247 Name = WRC - World Rally Championship - Rally Evolved diff --git a/plugins/GSdx/GSCrc.cpp b/plugins/GSdx/GSCrc.cpp index ce66b729a6..b31c992025 100644 --- a/plugins/GSdx/GSCrc.cpp +++ b/plugins/GSdx/GSCrc.cpp @@ -209,6 +209,10 @@ CRC::Game CRC::m_games[] = {0xC818BEC2, LordOfTheRingsTwoTowers, US, 0}, {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, {0xC0E909E9, LordOfTheRingsTwoTowers, JP, 0}, + {0xE169BAF8, RedDeadRevolver, US, 0}, + {0xE2E67E23, RedDeadRevolver, EU, 0}, + {0xEDDD6573, SpidermanWoS, US, 0}, //Web of Shadows + {0xF56C7948, HeavyMetalThunder, JP, 0}, }; hash_map CRC::m_map; diff --git a/plugins/GSdx/GSCrc.h b/plugins/GSdx/GSCrc.h index 255e2f1d87..b24bc1d2af 100644 --- a/plugins/GSdx/GSCrc.h +++ b/plugins/GSdx/GSCrc.h @@ -93,6 +93,9 @@ public: TimeSplitters2, ReZ, LordOfTheRingsTwoTowers, + RedDeadRevolver, + SpidermanWoS, + HeavyMetalThunder, TitleCount, }; diff --git a/plugins/GSdx/GSRendererHW.h b/plugins/GSdx/GSRendererHW.h index 4bb4a5766d..71ba55228c 100644 --- a/plugins/GSdx/GSRendererHW.h +++ b/plugins/GSdx/GSRendererHW.h @@ -245,6 +245,22 @@ class GSRendererHW : public GSRendererT return true; } + bool OI_SpidermanWoS(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) + { + uint32 FBP = m_context->FRAME.Block(); + uint32 FPSM = m_context->FRAME.PSM; + + if((FBP == 0x025a0 || FBP == 0x02a60) && FPSM == PSM_PSMCT32) + { + //only top half of the screen clears + m_dev->ClearDepth(ds, 0); + + return false; + } + + return true; + } + bool OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) { if(m_vt.m_primclass == GS_POINT_CLASS && !PRIM->TME) @@ -425,6 +441,7 @@ class GSRendererHW : public GSRendererT m_oi_list.push_back(HackEntry(CRC::GodOfWar2, CRC::RegionCount, &GSRendererHW::OI_GodOfWar2)); m_oi_list.push_back(HackEntry(CRC::SimpsonsGame, CRC::RegionCount, &GSRendererHW::OI_SimpsonsGame)); m_oi_list.push_back(HackEntry(CRC::RozenMaidenGebetGarden, CRC::RegionCount, &GSRendererHW::OI_RozenMaidenGebetGarden)); + m_oi_list.push_back(HackEntry(CRC::SpidermanWoS, CRC::RegionCount, &GSRendererHW::OI_SpidermanWoS)); m_oo_list.push_back(HackEntry(CRC::DBZBT2, CRC::RegionCount, &GSRendererHW::OO_DBZBT2)); m_oo_list.push_back(HackEntry(CRC::MajokkoALaMode2, CRC::RegionCount, &GSRendererHW::OO_MajokkoALaMode2)); diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp index 10574ee91a..0cef3077ba 100644 --- a/plugins/GSdx/GSState.cpp +++ b/plugins/GSdx/GSState.cpp @@ -2264,16 +2264,20 @@ bool GSC_Tekken5(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && (fi.FBP == 0x02d60 || fi.FBP == 0x02d80 || fi.FBP == 0x02ea0 || fi.FBP == 0x03620) && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) + if(fi.TME && (fi.FBP == 0x02d60 || fi.FBP == 0x02d80 || fi.FBP == 0x02ea0 || fi.FBP == 0x03620) && fi.FPSM == fi.TPSM && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) { skip = 95; } - else if(fi.TME && (fi.FBP == 0x02bc0 || fi.FBP == 0x02be0) && fi.FPSM == fi.TPSM && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) + else if(fi.TME && (fi.FBP == 0x02bc0 || fi.FBP == 0x02be0 || fi.FBP == 0x02d00) && fi.FPSM == fi.TPSM && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) { skip = 2; } + else if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x00FFFFFF) + { + skip = 5; //city at sunset's... sun... + } } - + return true; } @@ -2682,6 +2686,54 @@ bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip) return true; } +bool GSC_RedDeadRevolver(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(!fi.TME && (fi.FBP == 0x02420 || fi.FBP == 0x025e0) && fi.FPSM == PSM_PSMCT24) + { + skip = 1200; + } + else if(fi.TME && (fi.FBP == 0x00800 || fi.FBP == 0x009c0) && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x01600 || fi.TBP0 == 0x017c0) && fi.TPSM == PSM_PSMCT32) + { + skip = 2; //filter + } + else if(fi.FBP == 0x03700 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMCT24) + { + skip = 2; //blur + } + } + else + { + if(fi.TME && (fi.FBP == 0x00800 || fi.FBP == 0x009c0) && fi.FPSM == PSM_PSMCT32) + { + skip = 1; + } + } + + return true; +} + +bool GSC_HeavyMetalThunder(const GSFrameInfo& fi, int& skip) +{ + if(skip == 0) + { + if(fi.TME && fi.FBP == 0x03100 && fi.FPSM == fi.TPSM && fi.TBP0 == 0x01c00 && fi.TPSM == PSM_PSMZ32) + { + skip = 100; + } + } + else + { + if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == fi.TPSM && fi.TBP0 == 0x02a00 && fi.TPSM == PSM_PSMCT32) + { + skip = 1; + } + } + + return true; +} + bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) { GSFrameInfo fi; @@ -2748,6 +2800,8 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) map[CRC::TimeSplitters2] = GSC_TimeSplitters2; map[CRC::ReZ] = GSC_ReZ; map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; + map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; + map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; } // TODO: just set gsc in SetGameCRC once