[FE7] Designating Weapon Effectiveness

First - Open the Item Editor Module in Nightmare.

See that “Effectiveness Pointer”?

It’s a pointer to somewhere in the ROM. If you look at any bow, you’d see it as 0x8C97ED2.

Go to 0xC97ED2 in any Hex Editor.

At that address you should see the following bytes - 32 33 34 35 36 37 00

This is a list of classes to be effective against, terminated by a 00.

0x32 = Pegasus Knight
0x33 = Falcon Knight
0x34 = Wyvern Rider
0x35 = Wyvern Rider Female
0x36 = Wyvern Lord
0x37 = Wyvern Lord Female

All of which are (tada!) fliers.

So, to create a new list for weapon effectiveness (Say, I want to make a weapon effective against Shamans and Druids)
I would…

  1. Open ROM in Hex Editor.
  2. Navigate to Free Space.
  3. In that free space, write

24 25 26 27 00

Where:

0x24 - Male Shaman
0x25 - Female Shaman
0x26 - Male Druid
0x27 - Female Druid

00 - Terminates the sequence.

  1. Go back to the Item Editor.
  2. Write the address of the list you just made in the Effectiveness Pointer section.
1 Like

protip: When adding new classes to existing effectiveness lists (like the Great Knight, for example), you can usually go in and replace the values for some unused female classes if you aren’t using them. No need to go rewriting the existing lists unless you’re doing some pretty extensive additions.

I found where the game reads effectiveness. Might already be known, but I’ll stick it here for documentation

@r0 = equipped weapon(uses&type), r1 = &defending unit’s battle data
08028B36 F7EDFE73 bl #0x8016820
@Gets Class Number of defending unit…
@Effectiveness pointer of weapon,
@Loops over effectivenesses unless zero…
@Returns 0 if not effective; I didn’t trace if it is effective.

Also, I think this might be the routine we want to target if we want to alter the delphi shield.

Edit: There’s a cmp r0, #0x1 below that branch, so I assume that it return 0x1 if it is effective.