News:

11 March 2016 - Forum Rules

Main Menu

ASM Coding in Aria of Sorrow

Started by caminopreacher, March 02, 2018, 01:18:03 PM

Previous topic - Next topic

caminopreacher

Hello all, I was hoping to get some assistance with locating a specific address within the Castlevania Aria of Sorrow (US) rom.
The hack that I am assisting with will have certain souls removed since the sprites don't look right. Since that is the case, I was hoping to be able to find the location of the trigger for the True ending. In this case, it would be collecting 100% of souls. I want to change that condition to having a certain weapon equipped if I could.

Thanks to LagoLunatic, I have to location of the three souls that are required to defeat Graham and continue, but I haven't been able to locate the 100% souls condition yet.
I'll continue to look, but every little bit helps. If someone has an idea or suggestion, I'm open to them! Thanks much! ;D

FAST6191

Is there some kind of soul counter in the game? Might well be somewhere near where it stores what souls you have or with your other stats.

If so not that many things will likely look at the soul counter. Do a disassembly and look for everything that wants to reach out and touch that value. One of those will then be the thing the game checks.
Once you have that should not be so hard to change the read value from the soul counter to the currently equipped value (it is all memory after all) and the compare check and possibly the branch.

caminopreacher

LagoLunatic sent me some docs that might help, but the closest thing I have found is:


List of which souls you own and how many (owned skill info):

0201331C-02013337 - Red souls.

02013338-02013353 - Red souls (unused second list, gets added to first list).

02013354-02013360 - Blue souls.

02013361-0201336D - Blue souls (unused second list, gets added to first list).

0201336E-0201337F - Yellow souls.

02013380-02013391 - Yellow souls (unused second list, gets added to first list).

02013392-02013394 - Ability souls.

Each soul takes up a nibble (half a byte). So you can have up to 15 of each soul (or up to 30 if you use the unused second lists as well) (note that double digits slightly bug out the display number).
02013396 - Bitfield of currently equipped ability souls.




080D4C98 CheckDraculaSoulsEquipped?

; Checks if the player has the 3 souls required for the good ending equipped.

; 080D4CF0 hardcodes the red soul index required.

; 080D4CF6 hardcodes the blue soul index required.

; 080D4CFC hardcodes the yellow soul index required.


FAST6191

Nice info.

That might be small enough that the devs could have got creative with a mask and some boolean logic. While I am no fan of GBA and DS era Konami coders such a thing is well within their wheelhouse and style of coding from other fiddling I have seen with these games, or indeed the very bitfield mentioned in those notes.

Grab a savestate before you enter the room (or possibly point of no return if there is such a thing beforehand) and maybe another just before you kill the boss. I would probably bet on it being the killing* but best to have a room one just in case.

*prior to the previous post I read a souls faq. It mentioned legion only dropping a soul when all the segments were killed first. Such a thing then speaking to the sorts of logic available when killing bosses.

From there you should be able to see if it does anything to those areas with a standard breakpoint type setup. If you want to get a bit excessive just in case there is still a souls counter or something either side of those areas then by all means do, if it gets too annoying then so be it but I would probably go there first.