patched gsdx "cm" build
#1
Hi,

it seems some guy at a chinese forum has patched gsdx which supposed to fix some games, and posted some patches (but not all) here:
*removed*
(as not all source patches are posted there, the binary he distributed at skydrive is in violation of GPL so remove the link if inappropriate)

It would be nice to have the patches into official trunk (if the patches work) and maybe contact the author for the source changes which he didn't release as well.

----

(just to rely all source patches he posted - not sure about the CRC value of the game as I don't have them and he didn't post the values either)

Code:
bool GSC_EvangelionJo(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.TBP0 == 0x2BC0 && (fi.FBP == 0 || fi.FBP == 0x1180) && (fi.FPSM | fi.TPSM) == 0)
{
skip = 1;
}
}

return true;
}

bool GSC_NarutimateAccel2(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0 && (fi.FPSM | fi.TPSM) == 0)
{
skip = 105;
}
else if(!fi.TME && fi.FBP == 0x3800 && fi.TBP0 == 0x1E00 && fi.FPSM == 0 && fi.TPSM == 49 && fi.FBMSK == 0xFF000000)
{
skip = 1;
}
}
else
{
if(fi.FBP == 0 && fi.TBP0 == 0x3800 && fi.TME && (fi.FPSM | fi.TPSM) == 0)
{
skip = 1;
}
}

return true;
}

bool GSC_SakuraTaisen(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && (fi.FBP == 0 || fi.FBP == 0x1180) && fi.TBP0 == 0x35B8 && fi.TPSM == PSM_PSMT4)
{
skip = 1;
}
}

return true;
}

bool GSC_Castlevania(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0 && fi.TBP0 && fi.TPSM == 10 && fi.FBMSK == 0xFFFFFF)
{
skip = 2;
}
}

return true;
}

bool GSC_Tekken5(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x02ea0 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32)
{
skip = 95;
}
else if(fi.TME && fi.FBP == 0 && fi.TBP0 && (fi.FPSM | fi.TPSM) == PSM_PSMCT32 && fi.FBMSK == 0xFF000000)
{
skip = 1;
}
}

return true;
}

bool GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
{
skip = 1; // CMV的竖纹
}
else if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH)
{
skip = 1000; // }
}
else
{
if(!(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH))
{
skip = 0;
}
}

return true;
}

bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if( !fi.TME && fi.TPSM == PSM_PSMT8H && fi.FPSM == 0 &&
fi.FBMSK == 0x0FF000000 && fi.TBP0 == 0 && GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM))
{
skip = 4;
}
}

return true;
}

bool GSC_CaptainTsubasa(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == 0x1C00 && !fi.FBMSK)
{
skip = 1;
}
}
return true;
}

bool GSC_Oneechanbara2Special(const GSFrameInfo& fi, int& skip)
{
// 高分辨率下重影
if(skip == 0)
{
if(fi.TPSM == PSM_PSMCT24 && fi.TME && fi.FBP == 0x01180)
{
skip = 1; // 重影
}
}

return true;
}

bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200)
{
skip = 1; //阴影
}
}
return true;
}

bool GSC_ShadowOfTheColossus(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.TBP0 == 0x02A00 && fi.FBP == 0x01C00 && fi.TPSM == PSM_PSMCT32)
{
skip = 1; //阴影
}
}
return true;
}

bool GSC_FFX(const GSFrameInfo& fi, int& skip)
{
// 高分辨率下的重影
if(skip == 0)
{
if(GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM) && fi.TME &&
fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT24 && fi.TPSM == PSM_PSMCT24)
{
skip = 2; //重影
}
}

return true;
}

bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x03FFF)
{
skip = 1; // 竖纹
}
else if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH)
{
skip = 1000; // }
}
else
{
if(!(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH))
{
skip = 0;
}
}

return true;
}

bool GSC_GensouSuikodenIV(const GSFrameInfo& fi, int& skip)
{
if(skip == 0)
{
if(fi.TME && fi.FBP == fi.FPSM && fi.TBP0 == 0x2E80 && fi.FBMSK==0xFF000000)
{
skip = 20; //阴影
}
}

return true;
}
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;
}
Reply

Sponsored links

#2
I'm quite sure all that is simply hacks and not proper fixes, in which case they are totally useless.
In the far fetched case that these are actual fixes, no one from the team knows Japanese to contact or understand what these are supposed to be. Maybe they could review the code only
[Image: newsig.jpg]
Reply
#3
well I thought there are already similar hacks for various games in GSState.cpp in gsdx. Not sure if the hacks are actually useful though.

btw, I can _try_ to help by eg. pointing him to here if necessary Smile
Reply
#4
Yeah indeed there are but for stuff that can't be emulated due to tremendous speed hits (like all games working at 5 fps) or because no one has any idea how to properly fix them (and it got worse with gabest being away for so long)
I'm not sure we would still be able to communicate properly if they don't know english Tongue
Edit: yeah it's all game specific hacks, nothing we are not aware of or interested it...
[Image: newsig.jpg]
Reply




Users browsing this thread: 1 Guest(s)