So I tried messing around with my game and something happened.
I edited the gameData.bin and changed the parent ID for male Kana and female Kana so that the character block for male Kana has male Corrin as the parent and the character block for female Kana has female Corrin as parent. So. Yeah. I still got female Kana with my male Corrin. (I used an already existing save file to test it if that's important.)
Buuuuut. The game does not recognize my male Corrin as female Kana's Dad. It does not recognize Corrin's spouse as parent as well. Female Kana came with no inherited skills and I guess no inherited nothing else, just like she had no parents at all. No support convos, nothing.
Well. Now I know there are other files I would need to change for male Corrin to get male Kana.
But I have no clue where to look. Can anybody point me to the right direction? Right now I'm pretty much stuck and have no clue at all. D:
You'd still need to edit the map spawn data to alter which Kana shows up.
Kana's spawn is handled by the chapter script, there are 2 Kana spawns, first is the map spawn for Kana, which are tagged as "Ally_Male" and "Ally_Female".
To swap this, you'd first need to understand how labels and pointers work in this game.
So first off, the file you want for this is romfs/GameData/Dispos/X002.bin.lz
Once you decompress the file and obtain X002.bin, run it through HxD, you will find that the labels are located in the following addresses:
Ally_Male = 0x2CF1
Ally_Female = 0x2CFB
Next, we need to find out where these labels are being called, via a pointer, but how do we figure out what the pointer is?
Simple, first you take the address and subtract 0x20 to it, so with that in mind the subtractions would be;
Ally_Male = 0x2CF1 - 0x20 = 0x2CD1
Ally_Female = 0x2CFB - 0x20 = 0x2CDB
An easier way is, in HxD, go to where the label starts, press the up arrow twice on your keyboard, and note down that address, since it's basically the same thing.
We're not done yet!
Next, we need to order these new values in Big Endian, basically, biggest values go first, or more simply, you "flip" the bytes, like so;
Ally_Male = 0x2CD1 = 2CD1 = D1 2C 00 00
Ally_Female = 0x2CDB = 2CDB = DB 2C 00 00
All pointers are 4 bytes, so any leftovers are filled with 00s.
So now that you know what the pointer values for both labels is, it's just a matter of locating where the game calls for both labels and swapping the pointer values, so with that in mind, search both values;
If you search D1 2C 00 00 (Ally_Male), you'll find this pointer on address 0x38
If you search DB 2C 00 00 (Ally_Female), you'll find this pointer on address 0x44
Now, just swap the pointers,
in 0x38 the pointer is D1 2C, change it to DB 2C
in 0x44 the pointer is DB 2C, change it to D1 2C
And this is just the map spawn data! When Kana joins at the end of the chapter, this is an entirely new different spawn block, meaning that even if you now changed Female Kana to spawn with Female Corrin, at the end of the map you'd still get Male Kana!
Luckily, for this step, you only need to swap a letter because both labels have the same exact length, so with that in mind;
look for the following 2 labels,
Support01_M
Support01_F
All you'd need to do is swap the M/F, so go to Support01_M and just write an F over the M, and do the same with Support01_F, and that should be enough!
Now you just need to save your file, compress it and run it ingame.
TL;DR
Obtain file romfs/GameData/Dispos/X002.bin.lz
Decompress the file and open it on HxD
Go to 0x38 and write DB 2C 00 00
Go to 0x44 and write D1 2C 00 00
Near the end of the file, locate Support01_M, write an F over the M
After that should be another label called Support01_F, write an M over the F
Save and compress
Profit!