Variable Level Caps

This assembly patch allows you to pull off things like “Marth’s level cap is different than the rest of this team’s”. By altering the value at 0xD5C000 + N, you can change the maximum level that units of class ID N can reach.

Example:

If I want Lyn’s lord class to have a level cap of 30, the following steps are taken:

Lyn’s lord class has ID 0x3
The offset of this class’s level cap is 0xD5C000 + 0x3 = 0xD5C003
30 in hex is 0x1E
so I go to 0xD5C003 in a hex editor and input value 0x1E

Now, any unit with the Lyn Lord class will cap his/her level at 30.

link

the patch itself is “impl.dmp”

right now it writes code to 0xD50000 and the table is located at 0xD5C000

3 Likes

Also useful if you’d like trainee classes in FE7. You just gotta give them a promotion item of some kind.

Two things.

  1. Does this work for FE8?
  2. Your link is broken :B

The link should be fixed.

It’s FE7-only for now, although it should be fairly trivial to port (considering it’s largely homebrew code anyway)

And then over skype we found out it was not, in fact, trivial (Maybe even possible) to port. Lol.

Oh? What was the issue? I might take a crack at it.

1 Like

The issue is that FE8 rewrote leveling or someshit for trainees so it requires completely different code. Feel free to take a stab, I could really use this routine if possible.

my original plan was to just directly look for the code that i had linked from (with a hex editor)

we couldn’t find it, though, i assumed that was because there was some native handling for trainees or some shit that ended up changing things a bit

if you can find the right routine it shouldn’t be too hard to port (although i’m not convinced that it won’t break trainees)

So find where it levels up units or gains exp and look for a check against some cap? Got it.

Okay, I found the equivalent section of code in FE8 and wrote a routine to replace it. The following code will take as your level cap the value at (0x8.B60000 + class ID). If the value is zero or negative, it will use the default 20 as the cap. This might obsolete the ‘Max level 10’ ability depending on if the trainee autopromotion routine checks for it.

Paste this at 0x2BA58. The 0000B608 is the location of the level cap table:

09 49 78 68 00 79 09 56 00 29 00 DC 14 21 10 06 00 16 88 42 0D D1 39 1C 6E 31 08 78 C0 1A 08 70 FF 20 78 72 05 E0 C0 46 00 00 B6 08 00 00 00 00 00 00
2 Likes

Awesome! So this means I need to paste this into 0x2BA58, then go to 0xB60000 and type a class ID (Like 01 for Eirika Lord) and then a value up to 30in hex afterwards to set a class and level cap? Or wait, maybe I’m misunderstanding how to write this.

Ah, no, you need a byte for every class in the game, one after the other. The class ID functions as an index in the table. So for Eirika Lord, which has a class ID of 0x1, that class’s level cap would be read from 0xB60001.

Oh ok, great! That means a lot of copypasting 14’s so I have the correct level 20 caps, but otherwise extremely useful! Thanks a bunch :slight_smile:

in the future you should make your utility patches actually not change the function of the game by having your data initialized with the correct values needed to preserve it (i.e. klok shouldn’t be copying and pasting 0x14s; that’s the hacker’s job)

i.e. if the value is 0, make it default to 20

i think he just meant have the patch write the table in for them

e:

this patch is also like a million years old

To be fair, it took all of 20 seconds to do that. I can see newer hackers having issues tho.

I mean, Klok’s the only one asking for this in FE8, and Venno was kind enough to give him the hex to make the change. Klok’s hacking the game, so yes that is the hacker’s job. His job. People shouldn’t expect to be spoonfed no matter their experience level. I think Cam’s original patch for FE7 handled that, which was nice of him to do.

1 Like

Well my instructions weren’t as clear as they could have been. I updated the hex slightly; now if it reads zero or a negative value for the level cap, it will use 20 instead.

Making it only use a non-20 value if you specifically define one for a class, like Klok’s original suggestion, would be easy but it also wouldn’t fit within the space that the original routine affords. This way it’s pretty easy to install.

1 Like

mmm no when a hacker makes a utility hack they should make it not actually change the game

anything less is tacky and unprofessional

all the more reason