public static void WriteDragoonMagic(double damage, int spell, Emulator emulator) { int[] bases = new int[] { 800, 600, 500, 400, 300, 200, 100, 75, 50 }; byte[] base_table = new byte[] { 1, 2, 4, 8, 16, 32, 0, 64, 128 }; Nullable <double>[] modulos = new Nullable <double> [9]; for (int i = 0; i < 9; i++) { if (damage >= bases[i] && damage <= bases[i] * 2.275) { modulos[i] = (damage - (double)bases[i]) % ((double)bases[i] / 200); } else { if (damage < bases[i]) { modulos[i] = (double)bases[i] - damage; } else { modulos[i] = damage - (double)bases[i] * 2.275; } } int index = Array.IndexOf(modulos, modulos.Min()); double increment = (double)bases[index] / 200; byte multi = (byte)((damage - bases[index]) / increment); emulator.WriteByteU(Constants.GetAddress("SPELL_TABLE") + 0x4 + (int)Constants.OFFSET + spell * 0xC, base_table[index]); emulator.WriteByteU(Constants.GetAddress("SPELL_TABLE") + 0x5 + (int)Constants.OFFSET + spell * 0xC, multi); } }