the title should change with the language. It’s not the same title between US and Japanstill not perfect lol - game should NOT say "Special" at title screen.
I think he means that the announcer should not be saying "special" for it to be a truly perfect hack.the title should change with the language. It’s not the same title between US and Japan
Thanks. The check is actually if $10E015 == 0, skip patch. Not sure if that matters to folks are not, just means if you pick spanish or portuguese it will still apply the patch.Much thanks to ack for the bulk of the deciphering and additional patching, and to elrayzeur for the "PERFECT" graphical mod.
My small contribution here is to have the issue Layer33 highlighted. (we want Japan BIOS to also run English if set in Options)
Summary of the current (CCD0DB7A):
Patch result (3941028F):
At address $9DDD6, change 837D to 1560.
To ack, I just changed the BIOS check for Japan to a check if $10E015 != 01 (English), skip patch. Nice and neat.
I don't plan on looking myself. My memory dump shows there are 36 hooks, 34 of which are in the p rom, and 2 in the (us) bios. They get mapped to 1 of 26 different functions in the exe. If you or someone else is interested in pursuing it I can probably provide a hook to exe offset mapping. Then I guess you could us something like ghidra to try and figure out what the exe function is doing.Yes, you're right. Careless copy-paste from my working text.
And yes about the Portuguese and Spanish showing up the English text as well.
Regarding the other hooks, do you reckon they are worth investigating?
(I suspect some would have to do with the higher resolution zooming, which we know cannot be applied on original hardware.)
not a big dealI can probably provide a hook to exe offset mapping
ss5fe_patches[0].type = 1;
qword_140447238 = (__int64)sub_14005BCC0;
ss5fe_patches[0].func = (__int64)sub_14005CC20;
ss5fe_patches[1].func = (__int64)sub_14005CC20;
ss5fe_patches[2].func = (__int64)sub_14005CC30;
ss5fe_patches[3].func = (__int64)sub_14005B780;
*(_QWORD *)&ss5fe_patches[4].type = 0i64;
ss5fe_patches[4].func = (__int64)sub_14005C660;
*(_QWORD *)&ss5fe_patches[5].type = 0i64;
ss5fe_patches[5].func = (__int64)sub_14005BCF0;
*(_QWORD *)&ss5fe_patches[6].type = 0i64;
ss5fe_patches[6].func = (__int64)sub_14005BD00;
*(_QWORD *)&ss5fe_patches[7].type = 0i64;
ss5fe_patches[7].func = (__int64)sub_14005B890;
*(_QWORD *)&ss5fe_patches[8].type = 0i64;
ss5fe_patches[8].func = (__int64)sub_14005CCE0;
*(_QWORD *)&ss5fe_patches[9].type = 0i64;
ss5fe_patches[9].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[10].type = 0i64;
ss5fe_patches[10].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[11].type = 0i64;
ss5fe_patches[11].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[12].type = 0i64;
ss5fe_patches[12].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[13].type = 0i64;
ss5fe_patches[13].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[14].type = 0i64;
ss5fe_patches[14].func = (__int64)sub_14005BF40;
*(_QWORD *)&ss5fe_patches[15].type = 0i64;
ss5fe_patches[15].func = (__int64)sub_14005C9D0;
ss5fe_patches[0].address = 0x10A56;
ss5fe_patches[1].type = 1;
ss5fe_patches[1].address = 0x10B1C;
ss5fe_patches[2].type = 1;
ss5fe_patches[2].address = 0x105FE;
ss5fe_patches[3].type = 1;
ss5fe_patches[3].address = 0x11232;
ss5fe_patches[4].address = 0x3817A;
ss5fe_patches[5].address = 0x3775A;
ss5fe_patches[6].address = 0x3775E;
ss5fe_patches[7].address = 0x1145C;
ss5fe_patches[8].address = 0x112F2;
ss5fe_patches[9].address = 0x10BDE;
ss5fe_patches[10].address = 0x10F2C;
ss5fe_patches[11].address = 0x10F6E;
ss5fe_patches[12].address = 0x1117C;
ss5fe_patches[13].address = 0x11212;
ss5fe_patches[14].address = 0x11390;
ss5fe_patches[15].address = 0x94F0;
ss5fe_patches[16].type = 1;
ss5fe_patches[16].address = 0x3803C;
ss5fe_patches[16].func = (__int64)sub_14005CD50;
ss5fe_patches[17].type = 0;
ss5fe_patches[17].func = (__int64)sub_14005CD50;
ss5fe_patches[18].func = (__int64)sub_14005AE70;
ss5fe_patches[19].func = (__int64)sub_14005AE90;
*(_QWORD *)&ss5fe_patches[20].type = 0i64;
ss5fe_patches[20].func = (__int64)j_ss4fe_pbin_replace;
ss5fe_patches[21].func = (__int64)set_M68k_ZF;
ss5fe_patches[22].func = (__int64)set_M68k_ZF;
ss5fe_patches[23].func = (__int64)sub_14005CD80;
ss5fe_patches[24].func = (__int64)sub_14005CD80;
ss5fe_patches[25].func = (__int64)sub_14005CD90;
ss5fe_patches[26].func = (__int64)sub_14005CDA0;
ss5fe_patches[27].func = (__int64)sub_14005B0E0;
ss5fe_patches[28].func = (__int64)sub_14005C6B0;
*(_QWORD *)&ss5fe_patches[29].type = 0i64;
ss5fe_patches[29].func = (__int64)sub_14005C710;
*(_QWORD *)&ss5fe_patches[30].type = 0i64;
ss5fe_patches[30].func = (__int64)sub_14005C770;
*(_QWORD *)&ss5fe_patches[31].type = 0i64;
ss5fe_patches[31].func = (__int64)sub_14005C7D0;
*(_QWORD *)&ss5fe_patches[32].type = 0i64;
ss5fe_patches[32].func = (__int64)sub_14005CE20;
*(_QWORD *)&ss5fe_patches[33].type = 0i64;
*(_QWORD *)&ss5fe_patches[33].address = 0i64;
ss5fe_patches[33].func = 0i64;
qword_140447570 = 0i64;
ss5fe_patches[17].address = 0x38028;
ss5fe_patches[18].type = 0;
ss5fe_patches[18].address = 0x10624;
ss5fe_patches[19].type = 0;
ss5fe_patches[19].address = 0x10938;
ss5fe_patches[20].address = 0x68C8;
ss5fe_patches[21].type = 1;
ss5fe_patches[21].address = 0x10A80;
ss5fe_patches[22].type = 0;
ss5fe_patches[22].address = 0x11330;
ss5fe_patches[23].type = 0;
ss5fe_patches[23].address = 0x17DBE;
ss5fe_patches[24].type = 0;
ss5fe_patches[24].address = 0x1826E;
ss5fe_patches[25].type = 0;
ss5fe_patches[25].address = 0x25342;
ss5fe_patches[26].type = 0;
ss5fe_patches[26].address = 0x9534;
ss5fe_patches[27].type = 0;
ss5fe_patches[27].address = 0xEB6C;
ss5fe_patches[28].type = 1;
ss5fe_patches[28].address = 0x8A744;
ss5fe_patches[29].address = 0x5044A;
ss5fe_patches[30].address = 0x926FA;
ss5fe_patches[31].address = 0x54FAC;
ss5fe_patches[32].address = 0x95246;
I'm sorry I don't have as much experience as you with these things. This is first time I have even looked at making changes to a game, let alone dicking around with a windows program having hooks into the games cpu.is it a big deal ?I can probably provide a hook to exe offset mapping
tbh, me either had quite few practice with x86 RE, but these days cool toys like IDA/HexRays or Ghidra makes these things much easier and lowering entry level.I'm sorry I don't have as much experience as you with these things