[FE8] Weapon effectiveness encoding

Hi
I’m doing spreadsheet analysis of FE8 using FE Builder and I’m struggling to find an easy way to deduce weapon effectiveness based on its “effectiveness” hex value.

Example : the hammer’s effectiveness code is 008ADEBB which corresponds to effectiveness against classes 09, 0A, 0B, 0C, 35, 36. How do I go from one to the other? I tried looking in to FE Builder’s code but it’s beyond my skills.

I could manually dump all effectiveness values per weapon but I’m looking for a more practical / replicable way.

Thanks for the help

1 Like

There are only a few groups of classes that items are effective against, although each group has a fair few classes in it.

Might be worth referencing this:

That “effectiveness code” isn’t an encoded version of the list of affected classes, but a pointer to it. It’s telling the game where to look in the code for the actual list, which isn’t encoded to my knowledge. It’s just a series of bytes corresponding to each affected class ID followed by a terminator byte, I believe. That’s also why the value is the same for weapons that affect identical lists of classes; it’s just telling them all to look up the same list.

1 Like

@topazlight Sorry if my technical knowledge about these things is a bit limited, but how come any random input code outputs a different list of classes if it’s just a pointer?

example : 88ADED1 ouputs 04, 29, 2A, 5D, 5E which doesn’t correspond to any list of effective classes in game

@Vesly if forgot to say that I’m looking for a way that’s moderately easy to replicate to another game / hack which may have a different table of effective weapons

Same principle as how things like Missingno. and especially its fellow glitch Pokémon exist: the game is being told to try and read something else as weapon effectiveness target data, which is why you get such a random, arbitrary selection. It’s checking address 0x88ADED1 in the game software file and finding 04 29 2A 5D 5E 00. The first five are read as class IDs, and then the “00” is what the effectiveness list-parsing code treats as the marker of the end of a list, so the list stops there.

I would strongly, strongly recommend against fiddling with pointers directly in FEBuilderGBA. The program is actually very good about keeping them all updated dynamically to point to what you want them to after making edits to the data they point to. It’s generally safe to copy-paste pointers within the same “data type” (i.e. copying the pointer to the Armor effectiveness list to make another Armor-effective weapon or something like that), but doing it across data types or especially editing pointers to point to random other parts of the ROM is going to cause problems.

1 Like

Well today I learned something, thanks.

1 Like

Separate question on a closely related topic so I’ll just ask here:

It’s my understanding that the super effectiveness calculations against armoured units differs from, say, bow against flyers and other cases of super effectiveness.

Armour → AttackerPow + WpnMgt + WpnTriangle (ignores Def/RES)
Other types → AttackerPow + (WpnMgt + WpnTriangle) * 3 - DefenderDef/Res

Does anyone know where this information is stored or if there’s a way to extract if from FE Builder?

Rapiers for instance are both super effective against armour and cavalry but nothing indicates that the calculation differs from what I can find.

That is not correct, no. Effectiveness in FE7 is always

(attackerStrMag + (wpnMight * 2)) - targetDefRes

regardless of the weapon or the enemy type being attacked. Most games in the series use this formula, although weapon Might is usually multiplied by 3 rather than 2. Basically, it’s just a multiplier on the weapon’s Might against vulnerable enemies.

The high Defense of armor units can make the effectiveness bonus seem larger, since it generally accounts for a larger portion of the damage actually being dealt to them, but the math is the same as for other effective weapons.