GSdx: CRC hackfix for Burnout games, removes garbage from screen.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4790 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
shadowladyngemu 2011-07-04 05:31:47 +00:00
parent 7ecd913a7d
commit 5f20a11cd5
3 changed files with 33 additions and 0 deletions

View File

@ -279,6 +279,12 @@ CRC::Game CRC::m_games[] =
{0x7ADCB24A, DevilMayCry3, EU, 0},
{0x79C952B0, DevilMayCry3, JP, 0}, //SE
{0x7F3DDEAB, DevilMayCry3, JP, 0},
{0xBEBF8793, BurnoutTakedown, US, 0},
{0x75BECC18, BurnoutTakedown, EU, 0},
{0xD224D348, BurnoutRevenge, US, 0},
{0x7E83CC5B, BurnoutRevenge, EU, 0},
{0x8C9576A1, BurnoutDominator, US, 0},
{0x8C9576B4, BurnoutDominator, EU, 0},
};
hash_map<uint32, CRC::Game*> CRC::m_map;

View File

@ -111,6 +111,9 @@ public:
StarWarsBattlefront2,
BlackHawkDown,
DevilMayCry3,
BurnoutTakedown,
BurnoutRevenge,
BurnoutDominator,
TitleCount,
};

View File

@ -2998,6 +2998,27 @@ bool GSC_DevilMayCry3(const GSFrameInfo& fi, int& skip)
return true;
}
bool GSC_Burnout(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.FBP == 0x01dc0 || fi.FBP == 0x02200) && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x01dc0 || fi.TBP0 == 0x02200) && fi.TPSM == PSM_PSMCT32)
{
skip = 4;
}
else if (fi.TME && (fi.FBP == 0x008c0 || fi.FBP == 0x00a00) && fi.FPSM == PSM_PSMCT16 && (fi.TBP0 == 0x01a40 || fi.TBP0 == 0x01e00) && fi.TPSM == PSM_PSMZ16)
{
skip = 4; //fog
}
else if (fi.TME && (fi.FBP == 0x02d60 || fi.FBP == 0x033a0) && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x02d60 || fi.TBP0 == 0x033a0) && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x0)
{
skip = 2; //impact screen
}
}
return true;
}
bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw)
{
@ -3079,6 +3100,9 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw)
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;
}
// TODO: just set gsc in SetGameCRC once