GSdx: CRC hackixes for...

The Lord of the Rings: the Third Age (Removing fat stripes on screen).
Digimon Rumble Arena 2 (Half screen issue).
Star Wars - The Force Unleashed (Hiding HUD and 3d issues. Not perfect and NTSC-U only, not sure if it works with PAL).
Star Wars Battlefront 1/2 (Huge VRAM usage issue. NTSC-U only, not sure if it works with others).
Black Hawk Down - Team Sabre (Half screen issue and removes the night vision filter which was broken and using a lot of VRAM).

Minimal changes to other CRC hackfixes and GameDB.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4766 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
shadowladyngemu 2011-06-25 08:31:42 +00:00
parent 2bb7704fbd
commit 4f89f21f99
5 changed files with 227 additions and 36 deletions

View File

@ -4810,6 +4810,7 @@ Name = Drakengard
Region = NTSC-U Region = NTSC-U
Compat = 5 Compat = 5
eeClampMode = 3 //characters are visible in-game. eeClampMode = 3 //characters are visible in-game.
EETimingHack = 1 //flickering textures.
--------------------------------------------- ---------------------------------------------
Serial = SLUS-20733 Serial = SLUS-20733
Name = Castlevania - Lament of Innocence Name = Castlevania - Lament of Innocence
@ -6357,7 +6358,7 @@ Compat = 5
Serial = SLUS-21067 Serial = SLUS-21067
Name = Digimon Rumble Arena 2 Name = Digimon Rumble Arena 2
Region = NTSC-U Region = NTSC-U
Compat = 1 Compat = 5
FpuCompareHack = 1 FpuCompareHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLUS-21068 Serial = SLUS-21068
@ -7809,6 +7810,7 @@ Serial = SLUS-21373
Name = Drakengard 2 Name = Drakengard 2
Region = NTSC-U Region = NTSC-U
Compat = 5 Compat = 5
EETimingHack = 1 //flickering textures.
--------------------------------------------- ---------------------------------------------
Serial = SLUS-21374 Serial = SLUS-21374
Name = Marvel - Ultimate Alliance Name = Marvel - Ultimate Alliance
@ -8403,7 +8405,8 @@ Region = NTSC-U
Serial = SLUS-21498 Serial = SLUS-21498
Name = Naruto - Uzumaki Chronicles Name = Naruto - Uzumaki Chronicles
Region = NTSC-U Region = NTSC-U
Compat = 4 Compat = 5
OPHFLagHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLUS-21499 Serial = SLUS-21499
Name = Evolution GT Name = Evolution GT
@ -8695,6 +8698,7 @@ Compat = 4
Serial = SLUS-21594 Serial = SLUS-21594
Name = Naruto - Uzumaki Chronicles 2 Name = Naruto - Uzumaki Chronicles 2
Region = NTSC-U Region = NTSC-U
OPHFLagHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLUS-21595 Serial = SLUS-21595
Name = T.M.N.T. - Teenage Mutant Ninja Turtles Name = T.M.N.T. - Teenage Mutant Ninja Turtles
@ -8786,7 +8790,7 @@ Compat = 5
Serial = SLUS-21614 Serial = SLUS-21614
Name = Star Wars - The Force Unleashed Name = Star Wars - The Force Unleashed
Region = NTSC-U Region = NTSC-U
Compat = 4 Compat = 5
--------------------------------------------- ---------------------------------------------
Serial = SLUS-21615 Serial = SLUS-21615
Name = Wild Arms 5 Name = Wild Arms 5
@ -19446,6 +19450,7 @@ Region = NTSC-J
Serial = SLPM-65926 Serial = SLPM-65926
Name = Y's IV - Mask of the Sun - A New Theory Name = Y's IV - Mask of the Sun - A New Theory
Region = NTSC-J Region = NTSC-J
eeClampMode = 3
--------------------------------------------- ---------------------------------------------
Serial = SLPM-65927 Serial = SLPM-65927
Name = Forgotten Realms - Demon Stone Name = Forgotten Realms - Demon Stone
@ -25153,7 +25158,7 @@ Region = NTSC-J
Serial = SLPS-25074 Serial = SLPS-25074
Name = Project Zero Name = Project Zero
Region = NTSC-J Region = NTSC-J
Compat = 4 Compat = 5
--------------------------------------------- ---------------------------------------------
Serial = SLPS-25075 Serial = SLPS-25075
Name = Sidewinder F Name = Sidewinder F
@ -25858,7 +25863,7 @@ Region = NTSC-J
Serial = SLPS-25303 Serial = SLPS-25303
Name = Zero - Crimson Butterfly Name = Zero - Crimson Butterfly
Region = NTSC-J Region = NTSC-J
Compat = 4 Compat = 5
--------------------------------------------- ---------------------------------------------
Serial = SLPS-25304 Serial = SLPS-25304
Name = Beast Sapp Name = Beast Sapp
@ -26759,6 +26764,7 @@ Serial = SLPS-25542
Name = Naruto Uzumaki Ninden Name = Naruto Uzumaki Ninden
Region = NTSC-J Region = NTSC-J
Compat = 4 Compat = 4
OPHFLagHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLPS-25543 Serial = SLPS-25543
Name = Futakoi - Koi to Mizugi no Survival Name = Futakoi - Koi to Mizugi no Survival
@ -27419,6 +27425,7 @@ Region = NTSC-J
Serial = SLPS-25714 Serial = SLPS-25714
Name = Naruto - Konoha Spirits Name = Naruto - Konoha Spirits
Region = NTSC-J Region = NTSC-J
OPHFLagHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLPS-25715 Serial = SLPS-25715
Name = Tales of Destiny Name = Tales of Destiny
@ -34889,7 +34896,7 @@ Region = PAL-Unk
Serial = SLES-52467 Serial = SLES-52467
Name = dot Hack - Part 2 - Mutation Name = dot Hack - Part 2 - Mutation
Region = PAL-M5 Region = PAL-M5
Compat = 4 Compat = 5
--------------------------------------------- ---------------------------------------------
Serial = SLES-52468 Serial = SLES-52468
Name = dot Hack - Part 4 - Quarantine Name = dot Hack - Part 4 - Quarantine
@ -35290,6 +35297,7 @@ Region = PAL-Unk
Serial = SLES-52631 Serial = SLES-52631
Name = Digimon Rumble Arena 2 Name = Digimon Rumble Arena 2
Region = PAL-Unk Region = PAL-Unk
Compat = 5
FpuCompareHack = 1 FpuCompareHack = 1
--------------------------------------------- ---------------------------------------------
Serial = SLES-52636 Serial = SLES-52636
@ -37667,6 +37675,7 @@ Region = PAL-Unk
Serial = SLES-53794 Serial = SLES-53794
Name = Drakengard 2 Name = Drakengard 2
Region = PAL-Unk Region = PAL-Unk
EETimingHack = 1 //flickering textures.
--------------------------------------------- ---------------------------------------------
Serial = SLES-53796 Serial = SLES-53796
Name = FIFA Street 2 Name = FIFA Street 2
@ -39465,8 +39474,20 @@ Name = Armored Core - Nexus
Region = PAL-Unk Region = PAL-Unk
--------------------------------------------- ---------------------------------------------
Serial = SLES-82038 Serial = SLES-82038
Name = Onimusha - Dawn of Dreams Name = Onimusha - Dawn of Dreams [Disc1]
Region = PAL-Unk Region = PAL-Unk
[patches = 812C5A96]
comment= patch by Shadow Lady
patch=0,EE,00104170,word,00000000
[/patches]
---------------------------------------------
Serial = SLES-82039
Name = Onimusha - Dawn of Dreams [Disc2]
Region = PAL-Unk
[patches = 812C5A96]
comment= patch by Shadow Lady
patch=0,EE,00104170,word,00000000
[/patches]
--------------------------------------------- ---------------------------------------------
Serial = SLES-82042 Serial = SLES-82042
Name = Metal Gear Solid 3 - Subsistance [Disc1of2] Name = Metal Gear Solid 3 - Subsistance [Disc1of2]

View File

@ -137,7 +137,8 @@ CRC::Game CRC::m_games[] =
{0x26689C87, Spartan, JP, 0}, {0x26689C87, Spartan, JP, 0},
{0x5ED8FB53, AceCombat4, JP, 0}, {0x5ED8FB53, AceCombat4, JP, 0},
{0x1B9B7563, AceCombat4, NoRegion, 0}, {0x1B9B7563, AceCombat4, NoRegion, 0},
{0xEC432B24, Drakengard2, NoRegion, 0}, {0xEC432B24, Drakengard2, EU, 0},
{0x1648E3C9, Drakengard2, US, 0},
{0xFC46EA61, Tekken5, JP, 0}, {0xFC46EA61, Tekken5, JP, 0},
{0x1F88EE37, Tekken5, EU, 0}, {0x1F88EE37, Tekken5, EU, 0},
{0x1F88BECD, Tekken5, EU, 0}, //language selector... {0x1F88BECD, Tekken5, EU, 0}, //language selector...
@ -160,6 +161,8 @@ CRC::Game CRC::m_games[] =
{0xE96E55BD, GodOfWar2, JP, 0}, {0xE96E55BD, GodOfWar2, JP, 0},
{0xF8CD3DF6, GodOfWar2, NoRegion, 0}, {0xF8CD3DF6, GodOfWar2, NoRegion, 0},
{0x0B82BFF7, GodOfWar2, NoRegion, 0}, {0x0B82BFF7, GodOfWar2, NoRegion, 0},
{0x5990866f, GodOfWar2, NoRegion, 0},
{0xDCD9A9F7, GodOfWar2, NoRegion, 0},
{0x5D482F18, JackieChanAdv, NoRegion, 0}, {0x5D482F18, JackieChanAdv, NoRegion, 0},
{0xf0a6d880, HarvestMoon, US, 0}, {0xf0a6d880, HarvestMoon, US, 0},
{0x75c01a04, NamcoXCapcom, US, 0}, {0x75c01a04, NamcoXCapcom, US, 0},
@ -221,6 +224,7 @@ CRC::Game CRC::m_games[] =
{0x8164C614, Sly3, EU, 0}, {0x8164C614, Sly3, EU, 0},
{0x07652DD9, Sly2, US, 0}, {0x07652DD9, Sly2, US, 0},
{0xFDA1CBF6, Sly2, EU, 0}, {0xFDA1CBF6, Sly2, EU, 0},
{0x15DD1F6F, Sly2, NoRegion, 0},
{0xA9C82AB9, DemonStone, US, 0}, {0xA9C82AB9, DemonStone, US, 0},
{0x7C7578F3, DemonStone, EU, 0}, {0x7C7578F3, DemonStone, EU, 0},
{0x506644B3, BigMuthaTruckers, EU, 0}, {0x506644B3, BigMuthaTruckers, EU, 0},
@ -234,6 +238,8 @@ CRC::Game CRC::m_games[] =
{0xDC43F2B8, LordOfTheRingsTwoTowers, EU, 0}, {0xDC43F2B8, LordOfTheRingsTwoTowers, EU, 0},
{0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0},
{0xC0E909E9, LordOfTheRingsTwoTowers, JP, 0}, {0xC0E909E9, LordOfTheRingsTwoTowers, JP, 0},
{0xEB198738, LordOfTheRingsThirdAge, US, 0},
{0x614F4CF4, LordOfTheRingsThirdAge, EU, 0},
{0xE169BAF8, RedDeadRevolver, US, 0}, {0xE169BAF8, RedDeadRevolver, US, 0},
{0xE2E67E23, RedDeadRevolver, EU, 0}, {0xE2E67E23, RedDeadRevolver, EU, 0},
{0xEDDD6573, SpidermanWoS, US, 0}, //Web of Shadows {0xEDDD6573, SpidermanWoS, US, 0}, //Web of Shadows
@ -258,6 +264,15 @@ CRC::Game CRC::m_games[] =
{0xB3A9F9ED, Black, JP, 0}, {0xB3A9F9ED, Black, JP, 0},
{0x4F755D39, TyTasmanianTiger, US, 0}, {0x4F755D39, TyTasmanianTiger, US, 0},
{0xD59D3252, TyTasmanianTiger, EU, 0}, {0xD59D3252, TyTasmanianTiger, EU, 0},
{0x44A5FA15, FFVIIDoC, US, 0},
{0x33F7D21A, FFVIIDoC, EU, 0},
{0xAFAC88EF, FFVIIDoC, JP, 0},
{0x568A5C78, DigimonRumbleArena2, US, 0},
{0x785E22BB, DigimonRumbleArena2, EU, 0},
{0x879CDA5E, StarWarsForceUnleashed, US, 0},
{0x503BF9E1, StarWarsBattlefront, US, 0},
{0x02F4B541, StarWarsBattlefront2, US, 0},
{0xA8DB29DF, BlackHawkDown, EU, 0},
}; };
hash_map<uint32, CRC::Game*> CRC::m_map; hash_map<uint32, CRC::Game*> CRC::m_map;

View File

@ -93,6 +93,7 @@ public:
TimeSplitters2, TimeSplitters2,
ReZ, ReZ,
LordOfTheRingsTwoTowers, LordOfTheRingsTwoTowers,
LordOfTheRingsThirdAge,
RedDeadRevolver, RedDeadRevolver,
SpidermanWoS, SpidermanWoS,
HeavyMetalThunder, HeavyMetalThunder,
@ -103,6 +104,12 @@ public:
CastlevaniaLoI, CastlevaniaLoI,
Black, Black,
TyTasmanianTiger, TyTasmanianTiger,
FFVIIDoC,
DigimonRumbleArena2,
StarWarsForceUnleashed,
StarWarsBattlefront,
StarWarsBattlefront2,
BlackHawkDown,
TitleCount, TitleCount,
}; };

View File

@ -158,7 +158,7 @@ class GSRendererHW : public GSRendererT<Vertex>
uint32 FBW = m_context->FRAME.FBW; uint32 FBW = m_context->FRAME.FBW;
uint32 FPSM = m_context->FRAME.PSM; uint32 FPSM = m_context->FRAME.PSM;
if((FBP == 0x00f00 || FBP == 0x00100) && FPSM == PSM_PSMZ24) // ntsc 0xf00, pal 0x100 if((FBP == 0x00f00 || FBP == 0x00100 || FBP == 0x01280) && FPSM == PSM_PSMZ24) // ntsc 0xf00, pal 0x100, ntsc "HD" 0x1280
{ {
// z buffer clear // z buffer clear
@ -254,14 +254,12 @@ class GSRendererHW : public GSRendererT<Vertex>
{ {
//only top half of the screen clears //only top half of the screen clears
m_dev->ClearDepth(ds, 0); m_dev->ClearDepth(ds, 0);
return false;
} }
return true; return true;
} }
bool OI_TyTasmanianTiger(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) //fbp 0x3680 ntsc, 0x3200 pal , PSM_PSMCT24 bool OI_TyTasmanianTiger(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t)
{ {
uint32 FBP = m_context->FRAME.Block(); uint32 FBP = m_context->FRAME.Block();
uint32 FBW = m_context->FRAME.FBW; uint32 FBW = m_context->FRAME.FBW;
@ -278,6 +276,59 @@ class GSRendererHW : public GSRendererT<Vertex>
return true; return true;
} }
bool OI_DigimonRumbleArena2(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t)
{
uint32 FBP = m_context->FRAME.Block();
uint32 FPSM = m_context->FRAME.PSM;
if(!PRIM->TME)
{
if((FBP == 0x02300 || FBP == 0x03fc0) && FPSM == PSM_PSMCT32)
{
//half height buffer clear
m_dev->ClearDepth(ds, 0);
}
}
return true;
}
bool OI_BlackHawkDown(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t)
{
uint32 FBP = m_context->FRAME.Block();
uint32 FPSM = m_context->FRAME.PSM;
if(FBP == 0x02000 && FPSM == PSM_PSMZ24)
{
//half height buffer clear
m_dev->ClearDepth(ds, 0);
return false;
}
return true;
}
bool OI_StarWarsForceUnleashed(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t)
{
uint32 FBP = m_context->FRAME.Block();
uint32 FPSM = m_context->FRAME.PSM;
if(FPSM == PSM_PSMCT24 && FBP == 0x2bc0)
{
m_dev->ClearDepth(ds, 0);
return false;
}
else if((FBP == 0x36e0 || FBP == 0x34a0) && FPSM == PSM_PSMCT24)
{
m_dev->ClearDepth(ds, 0);
}
return true;
}
bool OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) bool OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t)
{ {
if(m_vt.m_primclass == GS_POINT_CLASS && !PRIM->TME) if(m_vt.m_primclass == GS_POINT_CLASS && !PRIM->TME)
@ -460,6 +511,9 @@ class GSRendererHW : public GSRendererT<Vertex>
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::RozenMaidenGebetGarden, CRC::RegionCount, &GSRendererHW::OI_RozenMaidenGebetGarden)); m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::RozenMaidenGebetGarden, CRC::RegionCount, &GSRendererHW::OI_RozenMaidenGebetGarden));
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::SpidermanWoS, CRC::RegionCount, &GSRendererHW::OI_SpidermanWoS)); m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::SpidermanWoS, CRC::RegionCount, &GSRendererHW::OI_SpidermanWoS));
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::TyTasmanianTiger, CRC::RegionCount, &GSRendererHW::OI_TyTasmanianTiger)); m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::TyTasmanianTiger, CRC::RegionCount, &GSRendererHW::OI_TyTasmanianTiger));
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::DigimonRumbleArena2, CRC::RegionCount, &GSRendererHW::OI_DigimonRumbleArena2));
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::StarWarsForceUnleashed, CRC::RegionCount, &GSRendererHW::OI_StarWarsForceUnleashed));
m_oi_list.push_back(HackEntry<OI_Ptr>(CRC::BlackHawkDown, CRC::RegionCount, &GSRendererHW::OI_BlackHawkDown));
m_oo_list.push_back(HackEntry<OO_Ptr>(CRC::DBZBT2, CRC::RegionCount, &GSRendererHW::OO_DBZBT2)); m_oo_list.push_back(HackEntry<OO_Ptr>(CRC::DBZBT2, CRC::RegionCount, &GSRendererHW::OO_DBZBT2));
m_oo_list.push_back(HackEntry<OO_Ptr>(CRC::MajokkoALaMode2, CRC::RegionCount, &GSRendererHW::OO_MajokkoALaMode2)); m_oo_list.push_back(HackEntry<OO_Ptr>(CRC::MajokkoALaMode2, CRC::RegionCount, &GSRendererHW::OO_MajokkoALaMode2));

View File

@ -343,7 +343,7 @@ GSVector2i GSState::GetDeviceSize(int i)
}*/ }*/
//Fixme : Just slightly better than the hack above //Fixme : Just slightly better than the hack above
if(m_regs->SMODE2.INT && m_regs->SMODE2.FFMD && h > 1) if(m_regs->SMODE2.INT && !m_regs->SMODE2.FFMD && h > 1)
{ {
if (IsEnabled(0) || IsEnabled(1)) if (IsEnabled(0) || IsEnabled(1))
{ {
@ -2402,13 +2402,12 @@ bool GSC_GodOfWar2(const GSFrameInfo& fi, int& skip)
{ {
if(fi.TME) if(fi.TME)
{ {
if( (fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00100 && fi.TPSM == PSM_PSMCT16 // ntsc if( fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00100 && fi.TPSM == PSM_PSMCT16 // ntsc
|| fi.FBP == 0x02100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x02100 && fi.TPSM == PSM_PSMCT16) // pal || fi.FBP == 0x02100 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x02100 && fi.TPSM == PSM_PSMCT16) // pal
&& (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) )
{ {
skip = 1000; // shadows skip = 1000; // shadows
} }
if(fi.FBP == 0x00100 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 & 0x03000) == 0x03000 if((fi.FBP == 0x00100 || fi.FBP == 0x02100) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 & 0x03000) == 0x03000
&& (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4) && (fi.TPSM == PSM_PSMT8 || fi.TPSM == PSM_PSMT4)
&& ((fi.TZTST == 2 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 1 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 3 && fi.FBMSK == 0xFF000000))) && ((fi.TZTST == 2 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 1 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 3 && fi.FBMSK == 0xFF000000)))
{ {
@ -2481,14 +2480,14 @@ bool GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip)
{ {
if(skip == 0) if(skip == 0)
{ {
if(fi.TME && fi.FPSM == PSM_PSMCT16S && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x00000) if(fi.TME && fi.FPSM == PSM_PSMCT16S && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT16)
{ {
skip = 1000; // shadow skip = 1000; // shadow
} }
} }
else else
{ {
if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x00000) if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMCT16S)
{ {
skip = 2; skip = 2;
} }
@ -2636,20 +2635,7 @@ bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip)
return true; return true;
} }
bool GSC_TenchuWoH(const GSFrameInfo& fi, int& skip) bool GSC_Tenchu(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
{
skip = 3;
}
}
return true;
}
bool GSC_TenchuFS(const GSFrameInfo& fi, int& skip)
{ {
if(skip == 0) if(skip == 0)
{ {
@ -2786,6 +2772,26 @@ bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip)
return true; return true;
} }
bool GSC_LordOfTheRingsThirdAge(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(!fi.TME && fi.FBP == 0x03000 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4 && fi.FBMSK == 0xFF000000)
{
skip = 1000; //shadows
}
}
else
{
if (fi.TME && (fi.FBP == 0x0 || fi.FBP == 0x00e00 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x03000 && fi.TPSM == PSM_PSMCT24)
{
skip = 1;
}
}
return true;
}
bool GSC_RedDeadRevolver(const GSFrameInfo& fi, int& skip) bool GSC_RedDeadRevolver(const GSFrameInfo& fi, int& skip)
{ {
if(skip == 0) if(skip == 0)
@ -2884,6 +2890,88 @@ bool GSC_Black(const GSFrameInfo& fi, int& skip)
return true; return true;
} }
bool GSC_FFVIIDoC(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x01c00 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x02c00 && fi.TPSM == PSM_PSMCT24)
{
skip = 1;
}
}
return true;
}
bool GSC_StarWarsForceUnleashed(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.FBP == 0x038a0 || fi.FBP == 0x03ae0) && fi.FPSM == fi.TPSM && fi.TBP0 == 0x02300 && fi.TPSM == PSM_PSMZ24)
{
skip = 1000; //9, shadows
}
}
else
{
if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == fi.TPSM && (fi.TBP0 == 0x034a0 || fi.TBP0 == 0x36e0) && fi.TPSM == PSM_PSMCT16)
{
skip = 2;
}
}
return true;
}
bool GSC_StarWarsBattlefront(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.FBP > 0x0 && fi.FBP < 0x00e00) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 > 0x02000 && fi.TBP0 < 0x02e00) && fi.TPSM == PSM_PSMT8)
{
skip = 1;
}
}
return true;
}
bool GSC_StarWarsBattlefront2(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.FBP > 0x01000 && fi.FBP < 0x01e00) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 > 0x0 && fi.TBP0 < 0x00e00) && fi.TPSM == PSM_PSMT8)
{
skip = 1;
}
if(fi.TME && (fi.FBP > 0x01000 && fi.FBP < 0x01e00) && fi.FPSM == PSM_PSMZ32 && (fi.TBP0 > 0x0 && fi.TBP0 < 0x0e00) && fi.TPSM == PSM_PSMT8)
{
skip = 1;
}
}
return true;
}
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)
{
skip = 2; //wall of fog
}
if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT8)
{
skip = 5; //night filter
}
}
return true;
}
bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw) bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw)
{ {
GSFrameInfo fi; GSFrameInfo fi;
@ -2942,8 +3030,8 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw)
map[CRC::RadiataStories] = GSC_RadiataStories; map[CRC::RadiataStories] = GSC_RadiataStories;
map[CRC::HauntingGround] = GSC_HauntingGround; map[CRC::HauntingGround] = GSC_HauntingGround;
map[CRC::SuikodenTactics] = GSC_SuikodenTactics; map[CRC::SuikodenTactics] = GSC_SuikodenTactics;
map[CRC::TenchuWoH] = GSC_TenchuWoH; map[CRC::TenchuWoH] = GSC_Tenchu;
map[CRC::TenchuFS] = GSC_TenchuFS; map[CRC::TenchuFS] = GSC_Tenchu;
map[CRC::Sly3] = GSC_Sly3; map[CRC::Sly3] = GSC_Sly3;
map[CRC::Sly2] = GSC_Sly2; map[CRC::Sly2] = GSC_Sly2;
map[CRC::DemonStone] = GSC_DemonStone; map[CRC::DemonStone] = GSC_DemonStone;
@ -2951,12 +3039,18 @@ bool GSState::IsBadFrame(int& skip, int UserHacks_SkipDraw)
map[CRC::TimeSplitters2] = GSC_TimeSplitters2; map[CRC::TimeSplitters2] = GSC_TimeSplitters2;
map[CRC::ReZ] = GSC_ReZ; map[CRC::ReZ] = GSC_ReZ;
map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers;
map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge;
map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver;
map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder;
map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers;
map[CRC::CastlevaniaCoD] = GSC_Castlevania; map[CRC::CastlevaniaCoD] = GSC_Castlevania;
map[CRC::CastlevaniaLoI] = GSC_Castlevania; map[CRC::CastlevaniaLoI] = GSC_Castlevania;
map[CRC::Black] = GSC_Black; 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;
} }
// TODO: just set gsc in SetGameCRC once // TODO: just set gsc in SetGameCRC once