Add patches in game config file.

This commit is contained in:
Jean-Philip Desjardins 2025-01-14 15:30:58 -05:00
parent 3dafb40510
commit 06db080a5f
2 changed files with 34 additions and 0 deletions

View file

@ -1,4 +1,8 @@
<GameConfigs> <GameConfigs>
<GameConfig Executable="SLUS_200.24;1" Title="Blood Omen 2">
<Patch Address="0x00463018" Value="0x03E00008" Description="Nullify custom exception handler." />
<Patch Address="0x0046301C" Value="0x24020001" Description="Nullify custom exception handler." />
</GameConfig>
<GameConfig Executable="SLUS_204.71;1" Title="Rygar - The Legendary Adventure"> <GameConfig Executable="SLUS_204.71;1" Title="Rygar - The Legendary Adventure">
<BlockFpRoundingMode Address="0x00147D88" Mode="NEAREST" Description="Fixes hang when entering first door." /> <BlockFpRoundingMode Address="0x00147D88" Mode="NEAREST" Description="Fixes hang when entering first door." />
</GameConfig> </GameConfig>
@ -11,4 +15,16 @@
<GameConfig Executable="SLUS_213.06;1" Title="Ghost Rider"> <GameConfig Executable="SLUS_213.06;1" Title="Ghost Rider">
<IdleLoopBlock Address="0x002F43E8" /> <IdleLoopBlock Address="0x002F43E8" />
</GameConfig> </GameConfig>
<GameConfig Executable="SLES_501.76;1" Title="Oni">
<Patch Address="0x001cef7c" Value="0x00000000 // bc0f $001cef7c" Description="Fix hang by skip branch if copro 0 condition false." />
</GameConfig>
<GameConfig Executable="SLPM_551.91;1" Title="L2 - Love x Loop">
<Patch Address="0x001B4828" Value="0x10000008" Description="Avoid bug in code that fiddles with SP and causes the stack to be clobbered by SifCallRpc. Requires proper data cache handling to avoid issue." />
</GameConfig>
<GameConfig Executable="SCES_500.03;1" Title="Dead or Alive 2">
<Patch Address="0x002b4c44" Value="0x24060000" Description="Make the file reading RPC call synchronous. Requires proper data cache handling to avoid issue." />
</GameConfig>
<GameConfig Executable="SLPS_250.02;1" Title="Dead or Alive 2">
<Patch Address="0x00290408" Value="0x24060000" Description="Make the file reading RPC call synchronous. Requires proper data cache handling to avoid issue." />
</GameConfig>
</GameConfigs> </GameConfigs>

View file

@ -676,6 +676,24 @@ void CPS2OS::ApplyGameConfig()
//Found the right executable, apply config //Found the right executable, apply config
for(Framework::Xml::CFilteringNodeIterator itNode(gameConfigNode, "Patch");
!itNode.IsEnd(); itNode++)
{
auto patch = (*itNode);
const char* addressString = patch->GetAttribute("Address");
const char* valueString = patch->GetAttribute("Value");
if(!addressString) continue;
if(!valueString) continue;
uint32 value = 0, address = 0;
if(sscanf(addressString, "%x", &address) == 0) continue;
if(sscanf(valueString, "%x", &value) == 0) continue;
*reinterpret_cast<uint32*>(m_ram + address) = value;
}
for(Framework::Xml::CFilteringNodeIterator itNode(gameConfigNode, "BlockFpRoundingMode"); for(Framework::Xml::CFilteringNodeIterator itNode(gameConfigNode, "BlockFpRoundingMode");
!itNode.IsEnd(); itNode++) !itNode.IsEnd(); itNode++)
{ {