it seems like the second byte is a certain stat/parameter, and the first byte is how that stat/parameter is modified.
So it seems the second byte meanings are: 50 is the parameter for damage, 52 is for Damage multiplier, and 54 is defense
And the first byte meanings are: 06 = multiply by 2, 46 = divide by 2, and 86 = set to 0, correct?
You're
sort of right. The first byte is the opcode (06 = ASL $dp, 46 = LSR $dp, 86= STX $dp) and the second byte is the parameter 'dp'. These opcodes, respectively, perform an arithmetic left bitshift on a RAM address, perform a logical right bitshift on a RAM address, or store the value in the X register to a RAM address, where the RAM address is specified by a "direct page" combined with the value of the direct page register, so only two bytes are needed in the instruction instead of three. Furthermore, as assassin pointed out, the values themselves that are affected may be either 8-bit or 16-bit depending on the CPU flags for the accumulator register (ASL, LSR) or the X & Y registers (STX). You can learn more about SNES operations by clicking
here.
C2/86C0: 64 54 STZ $54 (Defense = 0)
C2/86C2: 64 55 STZ $55
This only handles the case of a target absorbing an element. You'll also need to make these edits and nothing else:
C2/86F6: 46 54 LSR $54
C2/871F: 46 54 LSR $54
C2/872F: 46 54 LSR $54
Do this and it should work.