1
0
mirror of synced 2025-02-23 21:43:35 +01:00

Add support for DariusBurst 1.16

- Add support for DariusBurst 1.16
- Fix test menu in DariusBurst 1.05
- Fix a typo
This commit is contained in:
Nezarn 2020-05-11 11:46:05 +02:00
parent ab4a5abe1c
commit f25e1574bc
6 changed files with 75 additions and 10 deletions

View File

@ -99,7 +99,7 @@ static InitFunction initFunction_DariusBurst([]()
// Ignore cryptopipe check. // Ignore cryptopipe check.
// NOTE: This could be cause for the non-working TEST MODE. No time to analyze since dump was released and we want to give instant support. // NOTE: This could be cause for the non-working TEST MODE. No time to analyze since dump was released and we want to give instant support.
injector::WriteMemory<BYTE>(imageBase + 0x2CC753, 0xEB, true); //injector::WriteMemory<BYTE>(imageBase + 0x2CC753, 0xEB, true);
// D: // D:
injector::WriteMemoryRaw(imageBase + 0x482F38, "\x2E\x5C\x44", 3, true); // D:\%s%04d%02d%02d_%02d%02d%02d_ injector::WriteMemoryRaw(imageBase + 0x482F38, "\x2E\x5C\x44", 3, true); // D:\%s%04d%02d%02d_%02d%02d%02d_
@ -119,9 +119,59 @@ static InitFunction initFunction_DariusBurst([]()
// NOTE: Nezarn is pro // NOTE: Nezarn is pro
injector::WriteMemoryRaw(imageBase + 0x4D4E34, "\x30\x2E\x30\x66\x20\x20\x20\x20", 8, true); // 0.0f injector::WriteMemoryRaw(imageBase + 0x4D4E34, "\x30\x2E\x30\x66\x20\x20\x20\x20", 8, true); // 0.0f
injector::WriteMemoryRaw(imageBase + 0x4D4E4C, "\x2A\x20\x30\x2E\x30\x66\x20\x20\x20\x20\x20\x2D", 12, true); // * 0.0f - injector::WriteMemoryRaw(imageBase + 0x4D4E4C, "\x2A\x20\x30\x2E\x30\x66\x20\x20\x20\x20\x20\x2D", 12, true); // * 0.0f -
#if _M_IX86
init_CryptoPipe(GameDetect::NesicaKey);
#endif
}, GameID::DariusBurst); }, GameID::DariusBurst);
static InitFunction initFunction_DariusBurst116([]()
{
init_FastIoEmu();
init_RegHooks();
init_NesysEmu(true);
uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0);
// Ignore cryptopipe check.
// NOTE: This could be cause for the non-working TEST MODE. No time to analyze since dump was released and we want to give instant support.
//injector::WriteMemory<BYTE>(imageBase + 0x302743, 0xEB, true);
// D:
injector::WriteMemoryRaw(imageBase + 0x4EEF68, "\x2E\x5C\x44", 3, true); // D:\%s%04d%02d%02d_%02d%02d%02d_
injector::WriteMemoryRaw(imageBase + 0x4EF0D0, "\x2E\x5C\x44", 3, true); // D:\%s/%s/*
injector::WriteMemoryRaw(imageBase + 0x4EF0DC, "\x2E\x5C\x44", 3, true); // D:\%s/%s
injector::WriteMemoryRaw(imageBase + 0x4EF0E8, "\x2E\x5C\x44", 3, true); // D:\%s/*
injector::WriteMemoryRaw(imageBase + 0x4EF0F0, "\x2E\x5C\x44", 3, true); // D:\%s
injector::WriteMemoryRaw(imageBase + 0x50E980, "\x2E\x5C\x44", 3, true); // D:\EDData
injector::WriteMemoryRaw(imageBase + 0x50EB58, "\x2E\x5C\x44", 3, true); // D:\EDData
injector::WriteMemoryRaw(imageBase + 0x5145E0, "\x2E\x5C\x44", 3, true); // D:\EDData
injector::WriteMemoryRaw(imageBase + 0x539190, "\x2E\x5C\x44", 3, true); // D:\EDData
injector::WriteMemoryRaw(imageBase + 0x539240, "\x2E\x5C\x44", 3, true); // Proclog
injector::WriteMemoryRaw(imageBase + 0x50DD84, "\x2E\x5C\x44", 3, true); // D:\EDData\event000.pxk
injector::WriteMemoryRaw(imageBase + 0x50DD9C, "\x2E\x5C\x44", 3, true); // D:\EDData\ev
injector::WriteMemoryRaw(imageBase + 0x50E8EC, "\x2E\x5C\x44", 3, true); // D:\EDData\ev
injector::WriteMemoryRaw(imageBase + 0x50E8FC, "\x2E\x5C\x44", 3, true); // D:\EDData\ev\event000.sxr
injector::WriteMemoryRaw(imageBase + 0x50EB64, "\x2E\x5C\x44", 3, true); // D:\EDData\ev\event000.sxr
injector::WriteMemoryRaw(imageBase + 0x50EBE8, "\x2E\x5C\x44", 3, true); // D:\EDData\ev
injector::WriteMemoryRaw(imageBase + 0x50EBF8, "\x2E\x5C\x44", 3, true); // D:\EDData\ev\event000.sxr
injector::WriteMemoryRaw(imageBase + 0x517464, "\x2E\x5C\x44", 3, true); // D:\EDData\news000.tx2
injector::WriteMemoryRaw(imageBase + 0x51747C, "\x2E\x5C\x44", 3, true); // D:\EDData\news000.tx2
injector::WriteMemoryRaw(imageBase + 0x517494, "\x2E\x5C\x44", 3, true); // D:\EDData\news000.tx2
injector::WriteMemoryRaw(imageBase + 0x518524, "\x2E\x5C\x44", 3, true); // D:\EDData\ev
injector::WriteMemoryRaw(imageBase + 0x5660FC, "\x2E\x5C\x44", 3, true); // D:\EDData\ev
injector::WriteMemoryRaw(imageBase + 0x56610C, "\x2E\x5C\x44", 3, true); // D:\EDData\ev\event000.sxr
// D:/
injector::WriteMemoryRaw(imageBase + 0x539020, "\x2E\x5C\x44", 3, true);
// Disable invertion of 2nd screen area
injector::WriteMemoryRaw(imageBase + 0x5399CC, "\x30\x2E\x30\x66\x20\x20\x20\x20", 8, true); // 0.0f
injector::WriteMemoryRaw(imageBase + 0x5399E4, "\x2A\x20\x30\x2E\x30\x66\x20\x20\x20\x20\x20\x2D", 12, true); // * 0.0f -
#if _M_IX86
init_CryptoPipe(GameDetect::NesicaKey);
#endif
}, GameID::DariusBurst116);
static InitFunction initFunction_PB([]() static InitFunction initFunction_PB([]()
{ {
uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0); uintptr_t imageBase = (uintptr_t)GetModuleHandleA(0);
@ -216,16 +266,14 @@ static InitFunction initFunction_Theatrhythm([]()
}, GameID::Theatrhythm); }, GameID::Theatrhythm);
#if _M_IX86
static InitFunction initFunction_KOFXIIIClimax([]() static InitFunction initFunction_KOFXIIIClimax([]()
{ {
#if _M_IX86
init_CryptoPipe(GameDetect::NesicaKey); init_CryptoPipe(GameDetect::NesicaKey);
#endif
}, GameID::KOFXIIIClimax); }, GameID::KOFXIIIClimax);
static InitFunction initFunction_KOFXIII([]() static InitFunction initFunction_KOFXIII([]()
{ {
#if _M_IX86
init_CryptoPipe(GameDetect::NesicaKey); init_CryptoPipe(GameDetect::NesicaKey);
#endif
}, GameID::KOFXIII); }, GameID::KOFXIII);
#endif

View File

@ -12,6 +12,7 @@ const char *key_bbcp = "0702000000a400005253413200020000010001008f35cf7db98ccacf
const char *key_kofxiiiclimax = "0702000000A400005253413200020000010001000D20722B0858DCFAE9783F33E67BED82A0C1A3FE17FBB733B056A2337ADA9DAAE028079B07EE25CBCC9C2B72AA6154CEEF898C8CA9F168684D9A3806D6F622D4FF5CFFDDA03325FD7322D1CBF9CD8E45773E116B353871EEF7E5DCAAE3DCE1F8F326C1922DE4B76F1DD075DB788D67B6719126FBB2497FA0CB855F56651334DA152F3AED5D8A53C92A83F08177535B44420FEB2617E932791DC9DB0A26250755FDC37B74BCFF5DDDFDB2E52AE59D7E52042A022D37A9D73339ECA29F0DF60C1F792BCB25A3BCC5ED53D6A0DA2D403246C12EA958C4F5DAE9FFA0D10B7C31ECC3E5DC9A2418104B3A7825FBC527177EE00056176A3176323DE62CC834D36095D26CC9841D331A72814FE0D04BCE0B3A666C6896E0571E77323D5B6797B20168B9"; const char *key_kofxiiiclimax = "0702000000A400005253413200020000010001000D20722B0858DCFAE9783F33E67BED82A0C1A3FE17FBB733B056A2337ADA9DAAE028079B07EE25CBCC9C2B72AA6154CEEF898C8CA9F168684D9A3806D6F622D4FF5CFFDDA03325FD7322D1CBF9CD8E45773E116B353871EEF7E5DCAAE3DCE1F8F326C1922DE4B76F1DD075DB788D67B6719126FBB2497FA0CB855F56651334DA152F3AED5D8A53C92A83F08177535B44420FEB2617E932791DC9DB0A26250755FDC37B74BCFF5DDDFDB2E52AE59D7E52042A022D37A9D73339ECA29F0DF60C1F792BCB25A3BCC5ED53D6A0DA2D403246C12EA958C4F5DAE9FFA0D10B7C31ECC3E5DC9A2418104B3A7825FBC527177EE00056176A3176323DE62CC834D36095D26CC9841D331A72814FE0D04BCE0B3A666C6896E0571E77323D5B6797B20168B9";
const char *key_persona4ultimix = "0702000000a40000525341320002000001000100359073c4ef2b8e9556ffded09e5e1c4374169ba2a2077e9993c34e7fb3b499d9624f620018afaeeed697d7e72432b488e8e4a2a1b648ee24c9e878d9145a36d87f39dfcfd4aa3751c70039dfb4ce022a85a81d7440287538a41eb3b3d9a0f0fd4b481e274b71af8bdd36ac6f7a930cc67e41be6e65628a50f3779082555ff7d97fb45e4d6973beb316d220bc45e2f20fbd1fd9271cea65ac14b09136d99a31a179ce1933f5343fe930d858769fd7b861c7bf3ecc187792a9c200856822c1ab2138628cb7183dbce115589a4a0f213fd77b91758d13d762714666b97a428723895512e57c29ab3c68113120d7cb3269a605ac483601bd6b1bdac238759d564ea6da64a445fc502251fbeaa2621bd157040c60637371096a6b261d0fcb767f9f7c"; const char *key_persona4ultimix = "0702000000a40000525341320002000001000100359073c4ef2b8e9556ffded09e5e1c4374169ba2a2077e9993c34e7fb3b499d9624f620018afaeeed697d7e72432b488e8e4a2a1b648ee24c9e878d9145a36d87f39dfcfd4aa3751c70039dfb4ce022a85a81d7440287538a41eb3b3d9a0f0fd4b481e274b71af8bdd36ac6f7a930cc67e41be6e65628a50f3779082555ff7d97fb45e4d6973beb316d220bc45e2f20fbd1fd9271cea65ac14b09136d99a31a179ce1933f5343fe930d858769fd7b861c7bf3ecc187792a9c200856822c1ab2138628cb7183dbce115589a4a0f213fd77b91758d13d762714666b97a428723895512e57c29ab3c68113120d7cb3269a605ac483601bd6b1bdac238759d564ea6da64a445fc502251fbeaa2621bd157040c60637371096a6b261d0fcb767f9f7c";
const char *key_usf4 = "0702000000a40000525341320002000001000100b77cb7dfef27ca5ed4895576c6a68518bab782e60dae9dffad94434fb9366125e46630352261afe960e8401a3c5ee1cfc15ec2b1849e02a3dcc30e47ea3100a5c7175f9207aab497a9c9c0bf19d30a9fbb294a761147607927163685624dced391d3ae2211c6c11350077070386a195a8641f0e7920ddbcb200f990f55c76dc73de119d62751e5cb6cfa3653481d3e711b666c9a6cc9c2a4e50f4e55ce2831a821d75448cda3a2d6f3b359012bff571842c34a844989a4af0a4a5081cb8dc0780173865658cd8b999f9baaa3febc9c95b1477cd6af5060af603e597b3547fd0021a422c3a2cd0028523b5bd12b23bd4a6d2924ca920870cba2f38477631589cc4251590fba955d114f2ce0d6228c4932c1f2d9b753cda2d646591c48e164820e"; const char *key_usf4 = "0702000000a40000525341320002000001000100b77cb7dfef27ca5ed4895576c6a68518bab782e60dae9dffad94434fb9366125e46630352261afe960e8401a3c5ee1cfc15ec2b1849e02a3dcc30e47ea3100a5c7175f9207aab497a9c9c0bf19d30a9fbb294a761147607927163685624dced391d3ae2211c6c11350077070386a195a8641f0e7920ddbcb200f990f55c76dc73de119d62751e5cb6cfa3653481d3e711b666c9a6cc9c2a4e50f4e55ce2831a821d75448cda3a2d6f3b359012bff571842c34a844989a4af0a4a5081cb8dc0780173865658cd8b999f9baaa3febc9c95b1477cd6af5060af603e597b3547fd0021a422c3a2cd0028523b5bd12b23bd4a6d2924ca920870cba2f38477631589cc4251590fba955d114f2ce0d6228c4932c1f2d9b753cda2d646591c48e164820e";
const char *key_darius = "0702000000A40000525341320002000001000100659798436F4181BA70679A7849BBA874F385D3DB0C0930309A0953EDDAD69BD9A84AF03E51079AB63ACB0995A91E622BAAD5F929ED76F2FAB0BCE84AA6632AD4C1E08B131E39996E5B725E9A26517C7DA340F6AE3A7D5143C73A796FC437C8EDA57B741EF0496986F69DA4B721F3C949DD067DD87FC75DB5612AB440BABC6BE40159A2679C1436FA6FF05B102ACD2D01C4EDAE5FE24887E26E821BE0DA0D6EAEC579D8FACE455DB749D9A7F663BF7872B9C372E07FF47E32F6C3F9D6E45D2054DC96AE1349F80485CB631D81510197C40B18494EC8B83CD2FD5D4C08CC8922C701C556D993469CEEBBBA7515E4626AF002FE59E0E13F20288730EF2763E71F793DF2790B58F0FF7E226AF3F57AB40CD98894173F16FC97099C05CBC86BF060AC";
DWORD dword_44DEC4; DWORD dword_44DEC4;
DWORD dword_44DEC0; DWORD dword_44DEC0;
@ -78,6 +79,13 @@ DWORD LinkRC5Data(const char* file, void* buf, int gameId)
key[i] = num; key[i] = num;
} }
break; break;
case 7:
for (int i = 0; i < 308; i++)
{
sscanf(&key_darius[i * 2], "%02x", &num);
key[i] = num;
}
break;
default: default:
for (int i = 0; i < 308; i++) for (int i = 0; i < 308; i++)
{ {

View File

@ -9,7 +9,8 @@ enum class NesicaKey
KOFXIIIClimax = 4, KOFXIIIClimax = 4,
Persona4Ultimix = 5, Persona4Ultimix = 5,
USF4 = 6, USF4 = 6,
NoNet = 7, DariusBurst = 7,
NoNet = 8,
}; };
void init_CryptoPipe(NesicaKey id); void init_CryptoPipe(NesicaKey id);

View File

@ -53,7 +53,7 @@ int __cdecl iDmacDrvRegisterRead(int DeviceId, DWORD CommandCode, LPVOID OutBuff
result = 0x00FF00FF; result = 0x00FF00FF;
break; break;
case 0x4004: case 0x4004:
if (GameDetect::currentGame == GameID::DariusBurst) if (GameDetect::currentGame == GameID::DariusBurst || GameDetect::currentGame == GameID::DariusBurst116)
{ {
// I/O error without this switch // I/O error without this switch
result = 0x00FF00FF; result = 0x00FF00FF;
@ -67,7 +67,7 @@ int __cdecl iDmacDrvRegisterRead(int DeviceId, DWORD CommandCode, LPVOID OutBuff
result = g_fastIOValues[0] + ((DWORD)g_fastIOValues[1] * 0x100) + ((DWORD)g_fastIOValues[2] * 0x10000) + ((DWORD)g_fastIOValues[3] * 0x1000000); result = g_fastIOValues[0] + ((DWORD)g_fastIOValues[1] * 0x100) + ((DWORD)g_fastIOValues[2] * 0x10000) + ((DWORD)g_fastIOValues[3] * 0x1000000);
break; break;
case 0x4124: // Analogs 1 case 0x4124: // Analogs 1
if (GameDetect::currentGame == GameID::DariusBurst) if (GameDetect::currentGame == GameID::DariusBurst || GameDetect::currentGame == GameID::DariusBurst116)
{ {
// Sound volume to maximum // Sound volume to maximum
result = 0xFF; result = 0xFF;

View File

@ -424,6 +424,13 @@ void GameDetect::DetectCurrentGame()
if (*(uint32_t*)(moduleBase + 0x2CC751) == 0x6B75C084) if (*(uint32_t*)(moduleBase + 0x2CC751) == 0x6B75C084)
{ {
currentGame = GameID::DariusBurst; currentGame = GameID::DariusBurst;
NesicaKey = NesicaKey::DariusBurst;
break;
}
if (*(uint32_t*)(moduleBase + 0x302741) == 0x7075C084)
{
currentGame = GameID::DariusBurst116;
NesicaKey = NesicaKey::DariusBurst;
break; break;
} }
} }

View File

@ -49,6 +49,7 @@ enum class GameID
Daytona3, Daytona3,
MB4, MB4,
DariusBurst, DariusBurst,
DariusBurst116,
GTIClub3, GTIClub3,
GRID, GRID,
UltraStreetFighterIV, UltraStreetFighterIV,