Jump to content

FE8 - About disabling the mode coefficient


Tables
 Share

Recommended Posts

So recently I learned that FE8 has a mode coefficient in it's EXP formula from the Prologue until Chapter 8, which is something I'd like to disable. The fact it disappears after chapter 8 gives me some hope this could be done without ASM or other complex stuff, or even that someone might have already done it, by somehow tricking the game into disabling it because it thinks it's later in the game, but I can't work out a way of doing it in Nightmare of events.

Any suggestions?

Link to comment
Share on other sites

At 0x2C474, you'll see 01 28 0D D0.

Change that to 00 00 00 00.

When I was looking for the section of code that dealt with the mode coefficient, I did so by locating the section of code that read the enemy's relative class power. From the calculation page for Sacred Stones, we know that the enemy's class power and the mode coefficient only come into play if the enemy is defeated.

So, using the no$gba debugger, I went into the Prologue chapter and set a break on read on the Fighter's class power in the ROM and attacked one of those Fighters with Seth. The debugger broke (ie paused emulation) on 0x23CA0, part of a subroutine that calculates the enemy's effective level for experience game.

From there, I was able to look forwards and backwards within the routine to find a section of code that checks your mode byte. If your mode byte was equal to 1 - which corresponds to the section of game before the route split - the game would use an alternate routine that cut your calculated level in half for the purposes of experience gain. By zeroing out this check at 0x2C474, the game will always use the normal routine.

Of course, if you know that the game checks your mode byte and you know where the mode byte is in memory (0x0202BD0B by the way) you could just search directly for that byte being read during combat. I didn't know this at the time, so I used a more indirect method.

Edited by Vennobennu
Link to comment
Share on other sites

At 0x2C474, you'll see 01 28 0D D0.

Change that to 00 00 00 00.

You are the pure, liquid awesome that flows through this forum. Works like a treat.

Incidentally, what would be the sensible way of editing specific hex addresses? I did it by writing a nightmare module, which is probably a dumb way (especially as that's something I've never done before, fortunately it only took about 5 minutes because the format of an nmm looked obvious once I opened it in nightmare) but it was the simplest thing I could think of that I knew would work.

Link to comment
Share on other sites

btw in you first post you wrote "mode coefficient in it's EXP formula"

you seem like the sort of person who is more attentive than that

Normally I'm fairly on the ball with them, but for some reason getting its and it's right still catches me out. Well, more that I always end up using it's. I feel like "its" should have an apostrophe in it, though, since it's referring to something (the it) in the possessive, which normally takes an apostrophe. Ah well.

Link to comment
Share on other sites

I bet if you put in a bit of effort you could figure out how to use a debugger and find things like the mode coefficient yourself. I've seen people with less wisdom and conviction accomplish more. There are times when even I ask questions I could answer on my own because it's just plain faster (and may take someone else less effort if it's something they're already working on), but most of the time it's more convenient to be learn how to do things yourself and then do them.

English bugs the crap out of me too, but if it's between consistency and making sense I'll choose the former (I do make exceptions though...like if I am "quoting something". Notice how I put the quotation closing punctuation before the sentence ending punctuation since the sentence came first - I'm trying to have my cake and eat it too).

At least with "it's" it's still a contraction, so it still makes sense to use an apostrophe. After that I'm just like "okay if it's not it's it's the other one"

Link to comment
Share on other sites

I've got a bit of programming knowledge and talent, so yeah, I likely could figure out a lot of things if I really wanted. The question is time and fun, but perhaps in the future I'll have a look into it. But thanks for the advice.

Link to comment
Share on other sites

incidentally Venno could probably edit a small walkthrough of the steps he did into his post for future reference which would aid anyone curious about learning to use a debugger

Link to comment
Share on other sites

At 0x2C474, you'll see 01 28 0D D0.

Change that to 00 00 00 00.

From the calculation page for Sacred Stones, we know that the enemy's class power and the mode coefficient only come into play if the enemy is defeated.

When I was looking for the section of code that dealt with the mode coefficient, I did so by locating the section of code that read the enemy's relative class power.:

So, using the no$gba debugger, I went into the Prologue chapter and set a break on read on the Fighter's class power in the ROM (this can be located by using the information in the nightmare module (.nmm) file to calculate the address of this particular "member" ("class power", as opposed to base strength or base hp etc.) for the particular class (Fighter, in this case) and attacked one of those Fighters with Seth. The debugger broke (ie paused emulation) on execution of the instruction at 0x08023CA0, part of a subroutine that calculates the enemy's effective level for experience game gain.

From there, I was able to look forwards and backwards within the routine to find a section of code that checks your mode byte (how was this done? Probably by looking for nearby cmp instructions comparing to obvious values like "0", "1" and "2"?). If your mode byte was equal to 1 - which corresponds to the section of game before the route split - the game would use an alternate routine that cut your calculated level in half for the purposes of experience gain. By zeroing out removing (doesn't matter how, the intent is what is important) this check at 0x0802C474, the game will always use the normal routine.

Of course, if you know that the game checks your mode byte and you know where the mode byte is in memory (0x0202BD0B by the way) you could just search directly for that byte being read during combat (by setting a break on reads of that address, as was done for the "class power" of Fighter). I didn't know this at the time, so I used a more indirect method.

I adjusted the post a bit to see if I could make it more clear

Link to comment
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.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...