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);
     }
 }