Jump to content
VincentASM

FE: Awakening Hacking Topic

Recommended Posts

Hmm, that feels like a roundabout solution though. Is there a particular reason you want to do it that way?

What I would do is just replace a Logbook character. Get rid of the Logbook pointer, then fix the parent pointer and hair colour manually.

Share this post


Link to post
Share on other sites

Hmm, that feels like a roundabout solution though. Is there a particular reason you want to do it that way?

What I would do is just replace a Logbook character. Get rid of the Logbook pointer, then fix the parent pointer and hair colour manually.

I want sibling Morgans in their recruitment chapter. I'm obsessive like that.

Share this post


Link to post
Share on other sites

I want sibling Morgans in their recruitment chapter. I'm obsessive like that.

I think I understand.

Sadly, I can't really test for ya, since I don't have a save with that chapter available. (I do have digital backups, but they're on the 3DS with the latest firmware, so no RAM hacking.)

Have you tried changing an enemy in that chapter to the other Morgan?

TBH, I have a bad feeling the conversations won't work properly, as in you won't be able to recruit both XD

EDIT: I see you done it already or something similar.

Edited by VincentASM

Share this post


Link to post
Share on other sites

Here's the question... Is there some way to figure out the "Teams"?

Because I know while there are two "red" groups in that chapter... their team pointers seem to be the same.

Yet there must be something differentiating them.

That might be the key to the pointers I'm screwing up for adding units.

Maybe I'm just fated to have to recruit the daughter separately.

TBH, I have a bad feeling the conversations won't work properly, as in you won't be able to recruit both XD

I'm guessing they have the same Event ID.

... frick I'm going to have to RAM hack that too.

Edited by shadowofchaos

Share this post


Link to post
Share on other sites

Had a really strange time getting the parent pointer on my generated Morgan working.

For whatever reason, I can't get the FCRAM dumper working again.

(if there's another good online one, I would appreciate the link. Was using the one at dukesrg.no-ip.org)

So I'm dealing with pointers by loading a known one from another character,

+/- the pointer the correct distance to reach what I need it to be, then write to my target.

Kept trying to set her pointer to Nowi, it wouldn't take.

Finally decided to sanity check and just copied the parent pointer off Nah...and it worked.

So yah.

Share this post


Link to post
Share on other sites

I don't really know much about teams, but I'm pretty sure there's some affiliation data saved somewhere. Maybe in GameData.bin. I think that file is probably saved in the RAM too.

Speaking of events, I think I know how to read them kinda. They look kinda like the ones in FE9-12. Luckily for you, I think I see the event files in the RAM.

So theoretically you could hack it. Maybe the easiest way is to somehow get the game to ignore the flag check. Like how you can automatically get the sidequests in FE11 just by zeroing out checks.

Had a really strange time getting the parent pointer on my generated Morgan working.

For whatever reason, I can't get the FCRAM dumper working again.

(if there's another good online one, I would appreciate the link. Was using the one at dukesrg.no-ip.org)

So I'm dealing with pointers by loading a known one from another character,

+/- the pointer the correct distance to reach what I need it to be, then write to my target.

Kept trying to set her pointer to Nowi, it wouldn't take.

Finally decided to sanity check and just copied the parent pointer off Nah...and it worked.

So yah.

Not sure how much you know about parent pointers, but there are two things to note.

1. Their order and thus position changes depending on the data stored. I think Jacien noticed this.

2. The parent pointer is more than just one character ID. It's one character ID, followed by some data and then the second character ID (and presumably more data). So you can't just point to Nowi and be done with it; you need to point to the space reserved for parent data.

Edited by VincentASM

Share this post


Link to post
Share on other sites

Cool, the event files aren't too hard to read. I think I found the bit you're looking for too...

3D2 -> D4C
ev::bgmvolume
221 -> B9B
[not pointer]
256 -> BD0
PID_[Morgan M]
1FD -> B77
ev::getbypid
3C7 -> D41
PID_[Chrom]
3E0 -> D5A
ev::unitisfatherpid
3F4 -> D6E
MID_X012_TK1_Male_02
2A0 -> C1A
ev::Talk
409 -> D83
MID_X012_TK1_Male
2A0 -> C1A
ev::Talk
3E8 -> D62
[Not pointer]
13D -> AB7
ev::BGMStop
256 -> BD0
PID_[Morgan M]
1FD -> B77
ev::unitgetbypid
273 -> BED
ev::UnitTransferByIndex
15B -> AD5
[Morgan M ally flag] <------------------------------
41B -> D95
ev::flagset

Let me know if you find "X012.cmb" in the RAM. If you can, send me a dump that's 2,060 bytes in size from the "cmb" string a few bytes before "X012.cmb".

Edited by VincentASM

Share this post


Link to post
Share on other sites

Cool, the event files aren't too hard to read. I think I found the bit you're looking for too...

3D2 -> D4C
ev::bgmvolume
221 -> B9B
[not pointer]
256 -> BD0
PID_[Morgan M]
1FD -> B77
ev::getbypid
3C7 -> D41
PID_[Chrom]
3E0 -> D5A
ev::unitisfatherpid
3F4 -> D6E
MID_X012_TK1_Male_02
2A0 -> C1A
ev::Talk
409 -> D83
MID_X012_TK1_Male
2A0 -> C1A
ev::Talk
3E8 -> D62
[Not pointer]
13D -> AB7
ev::BGMStop
256 -> BD0
PID_[Morgan M]
1FD -> B77
ev::unitgetbypid
273 -> BED
ev::UnitTransferByIndex
15B -> AD5
[Morgan M ally flag] <------------------------------
41B -> D95
ev::flagset

Let me know if you find "X012.cmb" in the RAM. If you can, send me a dump that's 2,060 bytes in size from the "cmb" string a few bytes before "X012.cmb".

Yeah, I found it.

0x80C bytes, right?

https://dl.dropboxusercontent.com/u/5490460/FE13%20Related/RAM%20Hacking/RAM%20X012.cmb%20dump.bin

Edited by shadowofchaos

Share this post


Link to post
Share on other sites

Nothing. Lucina will always come as Lord.

Now, Morgan can vary a bit based on parents, though not parents class.

Case in point: vanilla game with MU⨯Nowi pairing, Morgan will start as manakete.

Share this post


Link to post
Share on other sites

Find the "ev::flagset" string. It should be after all of this:

ev::BGMVolume.ev::UnitIsFatherPID.MID_X012_TK1_Male_02.MID_X012_TK1_Male
Then create a code to zero out the string.

Not sure what effect it will have, so get ready for a crash, etc.

If that doesn't work, I'm sure there are other ways to alter the event. Just gotta be careful not to make the game complain...

https://www.youtube.com/watch?v=AXMW_s3T_PU

It worked.

Haha.

IT WORKED.

hmmmm making a non-dancer a dancer didnt give me the dance option.... why is that?

Funny, it should work:

Did you suspend into a battle save or bookmark and reload it?

Edited by shadowofchaos

Share this post


Link to post
Share on other sites

For whatever reason, I can't get the FCRAM dumper working again.

Same, this is odd.

I guess it's the site acting up.

EDIT: It works for me now, used this https://chart.googleapis.com/chart?cht=qr&chs=220x220&chl=http://dukesrg.no-ip.org/3ds/rop?memdump.dat%26

Which is basically the usual site with no filename chosen. The way it dumps is changed, it doesn't just flicker, it shows the progress of the dump now.

http://dukesrg.no-ip.org/3ds/rop.html

So now I realized that the Logbook Pointer points to the Logbook data for an avatar (you don't say), which basically leads you to the hair color, which I did a previously convoluted way to find it. Now I figured out how to quickly change hair color totally in both spots for an Avatar.

So I started with the Roster slot and find the avatar.

qzzXoJr.png

I see Logbook pointer right below the Character pointer. For me it's E0 BE 8E 15. Flip it and minus 14 00 00 00, and I get 01 8E BE E0, which is the offset. Then when I do Go To, it leads me to where the saved info is for the Logbook.

1urd7p5.png

Two lines below that destination is the hair color. Easy.

Like I mentioned before, the hair color in roster data affects everything ingame, and the Logbook data is for streetpass, logbook, and viewing Supports from the main menu.

Edited by Jacien

Share this post


Link to post
Share on other sites

which part of the logbook data affects stat bonuses? can we breach the cap this way? (hopeful as always lol)

i really wish i could figure out parent data.... as of last night, everyone is Chrom & Olivia's child for teh lulz

Edit: Correction everyone is now Yarne + Anna's kid ^ ~ ^

Edited by Missing Number

Share this post


Link to post
Share on other sites

This may be a stupid question, but does the "x" in "0x134DE9C" stand for? (I'm new to hacking)

Edited by VincentASM
Saving space

Share this post


Link to post
Share on other sites

Please don't quote the entire opening post when asking a small question.

'0x' at the start of a number is the standard notation for saying the number is in hexadecimal, ie. base 16.

The actual number in this case would be 134DE9C, which is obviously in hex, but something like 0x1245008 is ambiguous without the 0x at the front.

Share this post


Link to post
Share on other sites

so i paired Chrom x Olivia, and popped out Lucina..... gave me a pointer and such....

later i caught her brother Inigo and to my surprise, the game made him his own.....

Lucina's 009B46B0

Inigo's 0224BC88

and aside from the papa n mama matching, not much else does

what other data do these parent codes give us?

Share this post


Link to post
Share on other sites

Remember, for every child, one parent doesn't need to be stored since it's always the same.

For most of them it's the mother, so only the father is stored.

For Lucina and Morgan, the father is known, so it stores the mother.

So here, Lucina has a parent pointer to Olivia, and Inigo has one for Chrom.

As for what the data means, pointers just list another section in memory.

In this case, it's likely listing a spot in the static character data.

To find the offset it's pointing to so you can go look at it in your dump,

flip it from little-endian (the byte order in the dump) to big-endian (ie. human order).

Then add 0x14000000 (because FCRAM dump starts at 0x14000000, so offsets in the dump are off by that much).

That said, what you've listed don't make much sense.

Even assuming those are already in big-endian, that'd be addresses of 0x149B46B0 and 0x1624BC88,

which are much too far apart.

Are you sure you're pulling from the right spot?

For reference (since I'm getting tired of the screenshot offset lists):

[spoiler=roster block offsets]

0x00::0x16 (17 bytes) unknown
0x17::0x23 (15 bytes) learned skills
0x5C (4 bytes) character
0x60 (4 bytes) class
0x64 (4 bytes) team
0x6C (4 bytes) logbook
0x70 (4 bytes) parent
0x74 (4 bytes) enemy portrait?
0x78 (4 bytes) unknown
0x7C::0x83 (8 bytes) stats
0x84 (1 byte) roster position
0x85 (1 byte) level
0x86 (1 byte) xp
0x87 (1 byte) hp
0x88::0x97 (12 bytes) unknown
0x98::0xAB (20 bytes) inventory
0xAC::0xB5 (10 bytes) equipped skills
0xB6::0xBB (6 bytes) weapon ranks
0xBC::0xFB (64 bytes) support levels
0xFC hair color
0x100::0x10F (16 bytes) unknown

These are offsets from the start of each roster block.
So, parent pointer should be the 4 bytes at 0x70.

Share this post


Link to post
Share on other sites

Hmm, I'm pretty sure parent data has both parents.

Just above, somebody had all of their children be the parent of Yarne and Anna.

Likewise, I had Inigo's parents set to Gregor and Panne, even though his mother is always Olivia.

I also followed a parent pointer for Morgan with Avatar and Olivia as their parents and saw pointers for Avatar and Olivia around that area.

EDIT: As for what's in the parent data... maybe sibling data? Extra support data? I have no idea to be honest XD

Edited by VincentASM

Share this post


Link to post
Share on other sites

0x88::0x97 (12 bytes) unknown

Yoooo is no one paying attention to the crap I post?

yxcaaCE.png

This is Jacien's image, edited.

Found the X and Y coordinate.

I don't know what the one after that is though.

Maybe it's destination coordinate while you're commanding them? *Testing*

I wonder where the internal levels are kept.

Found the X and Y coordinates.

Also for reference, I'm doubting the start of each character for the roster.

Each team pointer is referencing 12 bytes before where all of us are assuming the character starts.

Team pointer would be pointing to 0x13D0220 on Jacien's image there.

Jacien, do you still have that dump?

I'm willing to bet the Team pointer there at 0x1283754 (Team pointer 54 37 28 15 for Slot 1) is pointing to 0x13D0220 (20 02 3D 15).

Edited by shadowofchaos

Share this post


Link to post
Share on other sites

Hmm, I'm pretty sure parent data has both parents.

Just above, somebody had all of their children be the parent of Yarne and Anna.

Likewise, I had Inigo's parents set to Gregor and Panne, even though his mother is always Olivia.

I also followed a parent pointer for Morgan with Avatar and Olivia as their parents and saw pointers for Avatar and Olivia around that area.

EDIT: As for what's in the parent data... maybe sibling data? Extra support data? I have no idea to be honest XD

Hmm. So parent pointer leads to a patch table with both parents? Interesting, would explain some of the issue I had with getting extra Morgan pointing to the right set.

I'll have to take a look at that later.

Yoooo is no one paying attention to the crap I post?

Found the X and Y coordinates.

Also for reference, I'm doubting the start of each character for the roster.

Each team pointer is referencing 12 bytes after where all of us are assuming the character starts.

Team pointer would be pointing to 0x13D0220 on Jacien's image there.

Ach, sorry. Lotta interleaving replies in here.

[spoiler=current roster offset list]

0x00::0x16 (17 bytes) unknown
0x17::0x23 (15 bytes) learned skills
0x5C (4 bytes) character
0x60 (4 bytes) class
0x64 (4 bytes) team
0x6C (4 bytes) logbook
0x70 (4 bytes) parent
0x74 (4 bytes) enemy portrait?
0x78 (4 bytes) unknown
0x7C::0x83 (8 bytes) stats
0x84 (1 byte) roster position
0x85 (1 byte) level
0x86 (1 byte) xp
0x87 (1 byte) hp
0x88 (2 bytes) map position
0x8A (2 bytes) unknown
0x8C::0x97 (8 bytes) unknown
0x98::0xAB (20 bytes) inventory
0xAC::0xB5 (10 bytes) equipped skills
0xB6::0xBB (6 bytes) weapon ranks
0xBC::0xFB (64 bytes) support levels
0xFC hair color
0x100::0x10F (16 bytes) unknown

As for the alignment...hmm. If we knew some more of the leading/trailing data, we could narrow it down.
For the locations we do know, so long as we start from the table header these offsets + 0x110 for each block will work fine, even if our offsets are...offset. from the true structure.
Edited by Rilne

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...