Sí, hasta que salga la versión JAP del juego y obligue a meter otro parcheo... la test_c es la definitiva
No se mucho de c pero no entiendo porque el juego no admite el parcheo de este tipo:
void __Patch_NSMB(void *buffer, u32 len)
{
const u8 SearchPattern[] = { 0x94, 0x21, 0xFF, 0xD0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30 };
const u8 PatchData[] = { 0x4E, 0x80, 0x00, 0x20, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30 };
int n;
/* Patch data*/
for(n=0;n<(len-sizeof(SearchPattern));n+=4)
{
if (memcmp(buffer+n, (void *) SearchPattern, sizeof(SearchPattern)) == 0)
{
memcpy(buffer+n, (void *) PatchData, sizeof(PatchData));
}
}
}
Y sin embargo sí con la cadena completa:
void __Patch_NSMB(void *buffer, u32 len)
{
const u8 SearchPattern[] = { 0x94, 0x21, 0xFF, 0xD0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30, 0x48, 0x12, 0xD9, 0x39, 0x7C, 0x7B, 0x1B, 0x78, 0x7C, 0x9C, 0x23, 0x78, 0x7C, 0xBD, 0x2B, 0x78 };
const u8 PatchData[] = { 0x4E, 0x80, 0x00, 0x20, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30, 0x48, 0x12, 0xD9, 0x39, 0x7C, 0x7B, 0x1B, 0x78, 0x7C, 0x9C, 0x23, 0x78, 0x7C, 0xBD, 0x2B, 0x78 };
int n;
/* Patch data*/
for(n=0;n<(len-sizeof(SearchPattern));n+=4)
{
if (memcmp(buffer+n, (void *) SearchPattern, sizeof(SearchPattern)) == 0)
{
memcpy(buffer+n, (void *) PatchData, sizeof(PatchData));
}
}
}
void __Patch_NSMB2(void *buffer, u32 len)
{
const u8 SearchPattern[] = { 0x94, 0x21, 0xFF, 0xD0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30, 0x48, 0x12, 0xD7, 0x89, 0x7C, 0x7B, 0x1B, 0x78, 0x7C, 0x9C, 0x23, 0x78, 0x7C, 0xBD, 0x2B, 0x78 };
const u8 PatchData[] = { 0x4E, 0x80, 0x00, 0x20, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x34, 0x39, 0x61, 0x00, 0x30, 0x48, 0x12, 0xD7, 0x89, 0x7C, 0x7B, 0x1B, 0x78, 0x7C, 0x9C, 0x23, 0x78, 0x7C, 0xBD, 0x2B, 0x78 };
int n;
/* Patch data*/
for(n=0;n<(len-sizeof(SearchPattern));n+=4)
{
if (memcmp(buffer+n, (void *) SearchPattern, sizeof(SearchPattern)) == 0)
{
memcpy(buffer+n, (void *) PatchData, sizeof(PatchData));
}
}
}
Lo que me obliga a meter dos parches por culpa de los valores 19 y 20 (0xD9, 0x39 frente a 0xD7, 0x89).
Si realmente Nintendo mete esta nueva protección en otros juegos, mientras coincidan las secuencias (tanto EUR como USA), no habrá problema... si no... ya me estoy viendo un editor de parches para cada juego.
En fin, imagino que el autor del programa podrá solventarnos algo mejor la papeleta si lo ve conveniente.
PD: JdR al final te hice caso, aunque por lo visto funcionaba de las dos maneras.....