[FE7/FE8] Difficulty stat changes

On hard mode, enemies get a level bonus. On easy AND normal mode, enemies get a level penalty.
The level penalty is what triggers those weak promoted enemies that only have class bases for their stats.

In order for unit to be eligible for a bonus/penalty:

  1. Unit must be an enemy.
  2. Unit’s character number must be > 0x3B. This is used to prevent recruitable enemies from getting stat adjustments. You can edit the 0x3B value at 00F818.
  3. Unit’s class cannot be 0x34 (Gorgon Egg) or 0x62 (Gorgon Egg)

Variables:
unit_level: set in Chapter Unit Editor
base_level: set in Character Editor (this is 1 for generic enemies)
level_bonus/penalty: set in Chapter Data Editor
Byte 0x20 : upper nibble = hard mode bonus, lower nibble = easy mode penalty
Byte 0x21 : lower nibble = normal mode penalty

Routine 080180CC: calls 08017FC4 for applying bonuses, calls 08018064 for penalties.

Reducing stats:

  1. Calculate enemy stats using unit_level. (Promoted units get +9 levels on easy/normal and +19 levels on hard)
  2. Check if there is a level penalty based on difficulty and current chapter.
  3. If unit_level <= base_level then stop; do not reduce stats.
  4. Reset enemy stats to class base stats + character base stats.
  5. If (unit_level - level_penalty) > base_level then recalculate level-ups using (unit_level - level_penalty)

On easy mode, most chapters have a 4 level penalty, so generic enemies level 2-5 are reduced to base stats.
On normal mode, most chapters have a 2 level penalty, so generic enemies level 2-3 are reduced to base stats.
On hard mode, chapters have 1-4 level bonus.

In the Japanese version, most easy mode chapters have a 2 level penalty, there is no normal mode level penalty, and hard mode chapters have a 3-6 level bonus. Also, the easy mode level penalty won’t create weak promoted enemies that are just class bases.

The routine that deals with level penalty is different in the Japanese version:

FE8U:
If (unit_level - level_penalty) <= base_level then SKIP enemy level-up routine.
Else, call enemy level-up routine with (unit_level - level_penalty) as parameter.

FE8J:
If (unit_level - level_penalty) < base_level then call enemy level-up routine with base_level as parameter.
Else, call enemy level-up routine with (unit_level - level_penalty) as parameter.

My theory is this change was made to improve code efficiency by cutting out “unnecessary” calls to the enemy level-up routine. However, I think they overlooked that routine is also responsible for giving the +9/+19 level promotion bonuses (which were lost when the enemy stats got reset to bases). So this is why the localized version has those weak promoted enemies.

8 Likes

It would be nice if Easy had a penalty, Normal was normal stats, and Hard had stronger stats.

1 Like

Byte 0x21 of the Chapter Data Editor is the normal mode penalty, so you can change that to zero for a normal mode with unaltered stats.

1 Like

Fix the weak promoted enemies caused by level penalty:
At 0180B4 paste 00 2A 00 DC 01 22
If (unit_level - level_penalty) <= 0, then call enemy level-up routine with level = 1

1 Like

This is very useful, thank you!

Do you have any idea how to make it so easy/normal mode gives 19 levels to promoted generics, as opposed to 9? Same story for FE7’s normal modes.
(if your hack in your last post addresses this, then it didn’t work for me).

Also while we’re on the subject, giving hard mode bonuses to enemies in Lyn’s mode? I do know there’s a hack for Eliwood’s hard mode, so I’m guessing doing it for Lyn’s shouldn’t be too hard either?

FE7
034878 : Normal promoted enemy level bonus
034880 : Hard promoted enemy level bonus

FE8
037B52 : Easy + Normal promoted enemy level bonus
037B5C : Hard promoted enemy level bonus

This makes enemies on Lyn Hard get bonuses too. (Also, you want to replace 6 bytes, not 12)

4 Likes

Awesome! Thank you so much!