The Communal To-Do List


#113

IIRC I used fe8 as an example because I don’t think it exists there


#114

Research has you covered :wink:


#115

wait who has don’t attack natasha O_o
if it’s joshua man i wasted so many years baiting him with seth


#116

I think it is Joshua. And same.


#117

Hello folks. After a loooong hiatus from playing FE hacks, I’m back and feeling interested towards sharpening my ASM skills while at it. I’ve done some basic FE hacking, but my understanding of how the games work deep down is very lacking. Nevertheless, I’d like to contribute to the community, especially since it always seemed like there’s a demand for more low-level implementations.

In a nutshell, what I want to know is where to start from - is there some documentation available? What hacks are under development nowadays? Is there any need for byte-wizardry anymore, in the year 2015? And when’s EN going to be released?


#118

Most of the stuff he have is scattered either about this forum or in the dropbox: Unified FE Hacking Doc Dropbox


#119

Remember when @Arch was making FireShell, and he tried repointing the Event Pointer table, but only the indices that were meant to be events could be used for events? Or rather, that they are even automatically loaded for the chapter? Change this routine to read off of some table so we can make an arbitrary number of events.


#120

I checked some of your code and have a few questions - bear in mind that I’m pretty new to all this stuff. For the sake of an example, I’m using the give all items (with wipe) as reference.

First of all, the directives are all unknown to me. What assembler do you use?

What registers are commonly available for use? I see you pushed r1-r5 and r14 to the stack, but why did you pop the original value of r14 into r0?

Values starting with a hashtag are immediate data, correct? Values surrounded with brackets… Refer to on-board memory?

What is the function of strh, ldr and ldrb?

Last, is there documentation of FE-relevant offsets and freely usable areas of memory available?

It might be a while before I’m able to get something useful done, but I’m looking forward to learning more so please be patient with me :smile:


#121

devkitPro ARM. Icecube does his stuff directly in a disassembler so idk. But devkitARM is standard for most of us.

To bx to. You can’t bx to r14. A common pattern is

push {r14}
@code
pop {r0} @or r1 if r0 is a return value
bx r0

This is seen in the in game code as well.

If you’re familiar with c++:
mov r0, #0x1 is r0 = 1
ldr r0, [r1] is r0 = *r1

store halfword (strh r0, [r1] -> short* r0 = 0xSOMETHING; *r0 = r1), load word (ldr r0, [r1]->int* r1 = 0xSOMETHING; int r0 = *r1) load byte. Too lazy to type out an example again.

Browse around. FEU has searching for most things. We have a few things strictly documented, but most is scattered in the appropriate hacks… or search this forum. Search is great here, unlike SF.


#122

my assembler is whatever build of gas comes with devkitARM

also

bx lr is perfectly valid in thumb

actually a good pattern (you won’t see this in the ROM for reasons I don’t know) is that you can do

push {lr}
...
pop {pc}

and it accomplishes the same thing as the other pattern except two ops shorter

(lr and pc are aliases for r14 and r15, if you couldn’t tell. also sp is an alias for r13)


#123

Oh, right, oops I was thinking of “you can’t push {pc} or pop {lr}”


#124

So apparently the code for enemy ranges was sitting unused in the FE7 rom this whole time:

Routine seems to begin at 0x801C65C, called it with ASMC just to test it out.

Problems: Can’t get dismiss it with B, screws up minimug palettes, and squares are opaque. But it’s a start.


#125

I fucking knew it!!! All these years people thought I was crazy… Well, they probably still do but who cares?

Ryrumeli got it to work in FE8 once upon a time, so it makes sense that the leftover code would be in FE7, too.


#126

That’s surprising, I couldn’t find the routine in the FE8 rom.


#127

Okay, enemy ranges are now working perfectly! All I need now is to bind it to Select, or at least get the menu option to show up.

EDIT:
And now I have it working in FE8 too!


#128

That feature contains many cool beans. I approve.


#129

Totally going to use this in EN. Great stuff!


#130

Binding it to Select turned out to be simple (for FE7, at least). If anyone wants to try it out, just write 05 F0 F8 F8 2A E0 to $1C3E0. FE8 doesn’t seem to use the Select button so I had to improvise a bit. The FE8 patch is working but not ready for release.

The problem is that calling the routine with select instead of the menu does something to screw up the minimugs. Notice that in the two screenshots I had before, info windows like terrain and unit data are disabled while enemy range is active.
Now we get this:


#131

Can you write a brief description of how the binding works? This is something I’ve not known about how to do.


#132

Sure, it’s simple enough. I started with a break on read on the IO pointer (0x08B857F8 for FE7, 0x0858791c for FE8).

Right below the break you can see what it’s checking for (AND 0x1 checks for A button, AND 0x4 checks for Select, AND 0xF checks for A+B+Start+Select). From there you can do whatever you want after the branch.

For FE8 it was harder because there is no check for the Select button. So I changed the Start check to Start OR Select, and checked which one it was later.