Miscellaneous => Projects => Topic started by: bankbank on September 03, 2021, 08:23:44 AM

Title: kof98 ratio
Post by: bankbank on September 03, 2021, 08:23:44 AM
just beginning this hack. need to analyze the aes version since that p rom is unencrypted.
found this memory map: https://www.chibiakumas.com/68000/neogeo.php
so we can see there
Code: [Select]
BIOS_P1STATUS $10FD94 (byte) Controller 1 statusin MAME debugger I use the command "wp 10FD94,1,rw,wpdata!=00" (if leaving off the wpdata!=00 it will always trigger, I only want it to trigger when I press a button)
so after I pressed button 1 (start didn't trigger the wp), I see "stopped at watchpoint reading 0010 from 0010FD94 (PC=C185E4)
so I know that 0x0010FD94 is probably where the game will store player 1's input. and now I have a PC to check out in ghidra for some decompilation.
Title: Re: kof98 ratio
Post by: bankbank on September 03, 2021, 08:54:39 AM
so I stopped at that watchpoint and got a PC for me to disassemble in ghidra. when I got to that address in ghidra and pressed 'd', it was disassembling incorrectly offset by 1. 68k CPU is big-endian and I was importing it as such, so I guess when MAME runs the game kof98h it runs it as little endian. not exactly sure what the exact explanation is, but anyway I used this program to swap endianness

and now the file can be disassembled properly. so now I will combine the input watchpoint with ghidra to determine what code is run when a player presses a button to select a character. that's where the injection will go of new code to check if the player has enough points to take that character.

note that the below screenshot is of the PC stopped at vblank - it's not the area of code I'm interested in modifying right now.
Title: Re: kof98 ratio
Post by: bankbank on September 04, 2021, 02:00:42 AM
I found the timer address for kof98, it's a word at 0x1085d0

and I found it in kof98h romset, which is aes and not encrypted. so now I can remove most of this timer code, giving me a nice section of free code I can play with.
Title: Re: kof98 ratio
Post by: bankbank on September 04, 2021, 04:11:51 AM
ok, we're making progress. I NOP'd 3 instructions, netting 6 bytes to be used later. there's likely more timer-related code that I could remove later, if need be.

so that's one goal complete:
*remove EX mode (auto-selection at start)
*remove timer
*remove Omega Rugal
*implement ratio selection via table
*implement points/cost text (using CREDITS 0X) text draw function
*remove random select
Title: Re: kof98 ratio
Post by: bankbank on September 04, 2021, 11:43:37 AM
so one of my goals is to remove EX mode. I had the choice of either A) selecting it immediately for the player OR B) allow the player to select it like they would normally, but just remove the joystick controls to change the mode. I went with A cus it seems like a waste to have a toggle for something that can't be toggled. and my first try worked perfectly. I simply NOP'd the beq at 284d6. so as soon as a player enters, the default mode is chosen for them.
Title: Re: kof98 ratio
Post by: dink on September 04, 2021, 12:36:52 PM
I enjoy following your progress, very cool

best regards,
- dink
Title: Re: kof98 ratio
Post by: bankbank on September 05, 2021, 01:17:21 AM
I enjoy following your progress, very cool

thank you! hopefully people will find this effort to be informative and maybe it can help others get into the exciting world of romhacking.

now I'm digging into the character IDs and the cursor. as you may or may not know, KOF98 has a whole bunch of alternate versions of characters that are accessed by holding start prior to selecting. on the 3 "orochi" characters, their icon changes when you hold start, but for the other 9 "old versions", their icon does not change. as well, on the AES home version only, the boss character omega rugal is selectable using this method. one of the rules of the game under the 'ratio' system is that omega rugal is banned, so I would like to remove him completely from the game if possible. https://srk.shib.live/w/The_King_of_Fighters_%2798/FAQ

the omega rugal exclusion should be easy, but the more significant challenge I'm facing is that the normal/old versions of characters play differently and at least some are different in the points cost. so I need to see how the game categorizes them and make sure that the respective costs are able to be read.

after a little while I came across this piece of code and it seems to correspond with the ex/orochi characters:
Title: Re: kof98 ratio
Post by: bankbank on September 05, 2021, 11:56:01 AM
well as I said previously I expected to be able to return to the timer function - this code is actually initialization and not only for timer but also for other things like an aspect of random select. so I chopped out 34 bytes, which I will need for at least one purpose but hopefully I will have room for a second as well.

I'm going to be writing my new code at the end of the file, where they put FF padding to fill up the ROM. there's tons of space there, and I need to have lots of space to write my spaghetti! because I'm jumping a certain distance, basically from about 25% into the ROM to around the last 15%, I need to write out the full address I'm jumping to. so I'll need 6 or 8 bytes for that, and I only had 4 to replace at the injection site of where the player presses a button to select a character. so what I'm doing is putting code in the timer initialization area which will jump to my free code writing area at the end. and I can use 4 bytes to jump from button press to timer initialization area.

if I still have room left over after doing that, I will put the points initialization code in the initialization timer area - it's a perfect fit. I need to call this only once at the beginning of character select to give both players 20 points. so we'll see what happens, I'm playing with vasm now.
Title: Re: kof98 ratio
Post by: Kev on September 06, 2021, 08:16:38 AM
This is a really interesting thread!
Title: Re: kof98 ratio
Post by: bankbank on September 18, 2021, 09:23:15 AM
This is a really interesting thread!

thanks for the feedback!

sorry I haven't been posting here lately, got busy with IRL stuff. tonight I finally finished the first "phase" of the mod - the points/cost system is fully functional and working properly.


the next phase, and the one that could potentially take just as long or longer than the actual points/cost system, is hacking the text to display how many points each player has and to draw the cost for the characters at each player's cursor.

I have to say that writing the 68000 ASM code for the points/cost injection was really satisfying. there were a lot of little complications too - like for example, because this cost list does not have a zero cost character, I had to make it so that upon a player's second character pick, they temporarily had to lose 2 points. otherwise, a player could spend all 20 of their points on characters one and two and put the game into a softlock state. it's possible that players will find this frustrating or unintuitive when the game states that they have X points and they're only able to spend X-2 points, but that's the only way I can think about doing it.

also, I have decided to change the labeling of the mod. I would love any feedback on this point. well after finishing my mvc2 ratio mod I thought about what the 'ratio' actually meant and I don't necessarily think it is an appropriate label. the translation of the Chinese title of the points/cost list is
restricted points system character points table
right now I've changed it to POINTS MOD (title) and POINTS SYSTEM (during gameplay), but I'd love to hear any other ideas. alternatives I thought of are 'COST MOD' and 'POINTS BATTLE'.

edit: added the Chinese cost list
Title: Re: kof98 ratio
Post by: bankbank on September 25, 2021, 01:01:19 PM

well, it's pretty much done. the only thing left to hack is the roulette function. so in this game, you can choose to have up to 3 of your character slots as 'roulette'. if you do so, that/those slots will randomize before each battle. from my preliminary analysis, the game does the initial character select randomization with different code than the randomization at the 'order select' screen. so that's two hacks rather than one, thanks SNK!

so in summation, thus far it's been 3 hacks:
1) initialization, give both players 20 points each (0x14)
2) points/cost restriction system via table
3) overwriting of text to display the points and cost

and #4 will be the two roulette hacks.
Title: Re: kof98 ratio
Post by: Kev on October 01, 2021, 09:08:43 AM
That is very cool work. Looking forward to what you do next!
Title: Re: kof98 ratio
Post by: dink on October 01, 2021, 09:20:48 AM
bankbank, when you are completely done with your kof98 hack, we will add to fbneo if you like :)

best regards,
- dink
Title: Re: kof98 ratio
Post by: bankbank on October 25, 2021, 06:40:29 AM
here it is folks, the completed kof98 ratio hack:
IPS patch should be applied to file '242-pn1.p1' from kof98h.zip
when you run kof98h in FBNeo it should give you a warning that the CRC is different from what it expected - ratio is 9171669D, original is 61AC868A

A) I hacked kof98h binary instead of kof98 because kof98 is encrypted. I should have forced myself to get better at C and write a decrypt/re-encrypt program, but I didn't! it should hopefully not make any difference, and if it does, I can port the hack to kof98 set.
B) I didn't set up the roulette to adhere to the points system, so it's just disabled. it seemed really complicated. sorry!

so one neat thing to take note of this that, for the alternate versions of characters you select by holding start, in vanilla KoF98 there is no visual feedback on most of them - only the Orochi characters change their portrait when start is held. but with this mod, everyone except for Ryo (who has the same cost in alt and regular) will display visual feedback when start is held on them.

I'm very hype to watch people playing this hack!
Title: Re: kof98 ratio
Post by: dink on October 25, 2021, 02:12:07 PM
Hi bankbank,
Congrats on the release!
I would like to add this hack to FBNeo - is that OK with you?
If yes, please tell me what you would like the name of your hack to be called in the game list :)

best regards,
- dink
Title: Re: kof98 ratio
Post by: bankbank on October 25, 2021, 07:24:04 PM
hi dink, thank you very much!  :biggrin:
it has been added by barbudreadmon as 'kof98ratio':
Title: Re: kof98 ratio
Post by: dink on October 25, 2021, 08:10:53 PM
Very nice :)

best regards,
- dink