Wiki Warframe

Utilisation du Wiki

Pour une meilleure utilisation du Wiki Warframe FR, merci d'activer les scripts Javascript lors de la consultation de certains pages, pour assurer le fonctionnement de certaines fonctionnalités.
Si vous souhaitez contribuer au Wiki, rejoignez-nous sur le Discord Warframe FR (espace wiki)

- Yazu 17:00 01/10/2022

EN SAVOIR PLUS

Wiki Warframe
Advertisement

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
/* jshint maxerr: 1000 */
//Creates tables for use in Abilities and Augments maximization

//Credits: Kselia, TunaInABottle, #javascript channel of DevWiki's Discord
//Source: https://jsfiddle.net/TunaInABottle/47enrfuc/

//Last stable: https://jsfiddle.net/TunaInABottle/47enrfuc/967/

$(function() {
  // Warframes
  var AshMap = {
    shuriken: [
      ["ash1_str1", "Base damage"],
      ["ash1_str2", "Bleed DoT"],
      ["ash1_str3", "Total damage"],
      ["ash1_eff", "Energy"]
    ],
    seeking_shuriken: [
      ["ash1_aug_dur", "Debuff duration"],
      ["ash1_aug_str", "Armor reduction"]
    ],
    smoke_screen: [
      ["ash2_dur", "Duration"],
      ["ash2_rng", "Range"],
      ["ash2_eff", "Energy"]
    ],
    smoke_shadow: "N/A",
    teleport: [
      ["ash3_rng", "Range"],
      ["ash3_eff", "Energy"]
    ],
    fatal_teleport: [
      ["ash3_aug_str", "Bonus damage"]
    ],
    blade_storm: [
      ["ash4_str1", "Base damage"],
      ["ash4_str2", "Bleed DoT"],
      ["ash4_str3", "Total damage"],
      ["ash4_rng", "Range"],
      ["ash4_eff1", "Energy per mark"],
      ["ash4_eff2", "Energy per mark while invisible"]
    ],
    rising_storm: [
      ["ash4_aug_str", "Combo per hit"]
    ]
  };
  var AtlasMap = {
    landslide: [
      ["atlas1_str", "Damage"],
      ["atlas1_dur", "Combo window"],
      ["atlas1_rng1", "Dash range"],
      ["atlas1_rng2", "Impact radius"],
      ["atlas1_eff", "Energy"]
    ],
    path_of_statues: [
      ["atlas1_aug_dur1", "Path duration"],
      ["atlas1_aug_dur2", "Petrify duration"]
    ],
    tectonics: [
      ["atlas2_health", "Health"],
      ["atlas2_str1", "Roll damage"],
      ["atlas2_str2", "Explosion damage"],
      ["atlas2_rng", "Explosion radius"],
      ["atlas2_eff", "Energy"]
    ],
    tectonic_fracture: "N/A",
    petrify: [
      ["atlas3_dur", "Petrify duration"],
      ["atlas3_rng", "Cone length"],
      ["atlas3_eff", "Energy"]
    ],
    ore_gaze: [
      ["atlas3_aug_str", "Loot chance"]
    ],
    rumblers: [
      ["atlas4_dur", "Duration"],
      ["atlas4_health", "Health"],
      ["atlas4_armor", "Armor"],
      ["atlas4_str1", "Melee damage"],
      ["atlas4_str2", "Rock damage"],
      ["atlas4_str3", "Explosion damage"],
      ["atlas4_rng1", "Stone/Explosion radius"],
      ["atlas4_rng2", "Speed multiplier"],
      ["atlas4_eff", "Energy"]
    ],
    titanic_rumbler: [
      ["atlas4_aug_health", "Health"],
      ["atlas4_aug_str1", "Melee damage"],
      ["atlas4_aug_str2", "Rock damage"],
      ["atlas4_aug_str3", "Explosion damage"],
      ["atlas4_aug_rng", "Speed multiplier"]
    ]
  };
  var BansheeMap = {
    sonic_boom: [
      ["banshee1_str", "Damage"],
      ["banshee1_rng", "Cone length"],
      ["banshee1_eff", "Energy"]
    ],
    sonic_fracture: [
      ["banshee1_aug_str", "Armor reduction"],
      ["banshee1_aug_dur", "Debuff duration"]
    ],
    sonar: [
      ["banshee2_dur", "Duration"],
      ["banshee2_str", "Damage multiplier"],
      ["banshee2_rng", "Range"],
      ["banshee2_eff", "Energy"]
    ],
    resonance: "N/A",
    silence: [
      ["banshee3_dur", "Duration"],
      ["banshee3_rng", "Range"],
      ["banshee3_eff", "Energy"]
    ],
    savage_silence: [
      ["banshee3_aug_str", "Damage multiplier"]
    ],
    sound_quake: [
      ["banshee4_str", "Damage"],
      ["banshee4_rng", "Range"],
      ["banshee4_eff", "Energy"],
      ["banshee4_cha", "Energy drain"]
    ],
    resonating_quake: [
      ["banshee4_aug_str", "Damage"],
      ["banshee4_aug_rng", "Range"],
      ["banshee4_aug_eff", "Energy"]
    ]
  };
  var BaruukMap = {
    "": "",
    elude: [
      ["baruuk1_rng", "Evasion angle"],
      ["baruuk1_eff", "Energy"],
      ["baruuk1_cha", "Energy drain"]
    ],
    lull: [
      ["baruuk2_dur1", "Wave duration"],
      ["baruuk2_dur2", "Sleep duration"],
      ["baruuk2_rng", "Range"],
      ["baruuk2_eff", "Energy"]
    ],
    desolate_hands: [
      ["baruuk3_str1", "Damage"],
      ["baruuk3_str2", "Charges"],
      ["baruuk3_str3", "Damage reduction"],
      ["baruuk3_rng1", "Seek range"],
      ["baruuk3_rng2", "Explosion range"],
      ["baruuk3_eff", "Energy"]
    ],
    serene_storm: [
      ["baruuk4_str1", "Damage"],
      ["baruuk4_str2", "Damage reduction"]
    ],
  };
  var ChromaMap = {
    "": "",
    spectral_scream: [
      ["chroma1_str", "Damage"],
      ["chroma1_rng", "Range"],
      ["chroma1_eff", "Energy"],
      ["chroma1_cha", "Energy drain"]
    ],
    afterburn: [
      ["chroma1_aug_str", "Damage"]
    ],
    elemental_ward: [
      ["chroma2_dur", "Duration"],
      ["chroma2_toxin_dur1", "Holster/reload bonus"],
      ["chroma2_heat_str1", "Damage"],
      ["chroma2_heat_str2", "Health bonus"],
      ["chroma2_electric_str1", "Reflection multiplier"],
      ["chroma2_electric_str2", "Shields bonus"],
      ["chroma2_electric_str3", "Status chance"],
      ["chroma2_electric_str4", "Minumum arc damage"],
      ["chroma2_toxin_str", "Damage chance"],
      ["chroma2_cold_str1", "Reflection multiplier"],
      ["chroma2_cold_str2", "Armor multiplier"],
      ["chroma2_cold_str3", "Status chance"],
      ["chroma2_rng", "Aura range"],
      ["chroma2_electric_rng", "Discharge range"],
      ["chroma2_eff", "Energy"]
    ],
    everlasting_ward: "N/A",
    vex_armor: [
      ["chroma3_str1", "Maximum armor bonus"],
      ["chroma3_str2", "Maximum damage bonus"],
      ["chroma3_dur", "Duration"],
      ["chroma3_rng", "Range"],
      ["chroma3_eff", "Energy"]
    ],
    vexing_retaliation: [
      ["chroma3_aug_rng", "Range"]
    ],
    effigy: [
      ["chroma4_str1", "Damage"],
      ["chroma4_str2", "Health"],
      ["chroma4_eff", "Energy"],
      ["chroma4_cha", "Energy drain"]
    ],
    guided_effigy: [
      ["chroma4_aug_str", "Damage"]
    ],

  }
  var EmberMap = {
    fireball: [
      ["ember1_str1", "Impact Damage"],
      ["ember1_str2", "Area Damage"],
      ["ember1_eff", "Energy"]
    ],
    fireball_frenzy: [
      ["ember1_aug_str", "Damage bonus"],
      ["ember1_aug_dur", "Duration"],
      ["ember1_aug_rng", "Range"]
    ],
    accelerant: [
      ["ember2_str", "Fire damage multiplier"],
      ["ember2_dur", "Duration"],
      ["ember2_rng", "Range"],
      ["ember2_eff", "Energy"]
    ],
    flash_accelerant: [
      ["ember2_aug_str", "Fire damage multiplier"]
    ],
    fire_blast: [
      ["ember3_str1", "Wave damage"],
      ["ember3_str2", "Ring damage"],
      ["ember3_dur", "Duration"],
      ["ember3_eff", "Energy"]
    ],
    fire_fright: "N/A",
    world_on_fire: [
      ["ember4_str1", "Damage"],
      ["ember4_str2", "Status chance"],
      ["ember4_rng", "Range"],
      ["ember4_eff", "Energy"],
      ["ember4_cha", "Energy drain"]
    ],
    firequake: "N/A"
  };
  var EquinoxMap = {
    metamorphosis: [
      ["equinox1_night_str1", "Armor bonus"],
      ["equinox1_night_str2", "Shields bonus"],
      ["equinox1_day_str1", "Damage bonus"],
      ["equinox1_day_str2", "Speed bonus"],
      ["equinox1_dur", "Duration"],
      ["equinox1_eff", "Energy"]
    ],
    duality: [
      ["equinox1_aug_dur", "Duration"]
    ],
    rest_and_rage: [
      ["equinox2_day_str1", "Damage vulnerability"],
      ["equinox2_day_str2", "Enemy speed bonus"],
      ["equinox2_dur", "Duration"],
      ["equinox2_rng1", "Cast range"],
      ["equinox2_rng2", "Area range"],
      ["equinox2_eff", "Energy"]
    ],
    calm_and_frenzy: [
      ["equinox2_aug_rng", "Diffusion range"]
    ],
    pacify_and_provoke: [
      ["equinox3_night_str", "Enemy damage reduction"],
      ["equinox3_day_str", "Ability strength bonus"],
      ["equinox3_rng", "Range"],
      ["equinox3_eff", "Energy"],
      ["equinox3_night_eff1", "Energy drain per enemy"],
      ["equinox3_day_eff1", "Energy per ability"]
    ],
    peaceful_provocation: [
      ["equinox3_aug_night_str", "Max enemy speed reduction"],
      ["equinox3_aug_day_str", "Max Ability strength bonus"]
    ],
    mend_and_maim: [
      ["equinox4_night_str", "Shields per kill"],
      ["equinox4_day_str", "Aura damage"],
      ["equinox4_rng", "Range"],
      ["equinox4_eff", "Energy"],
      ["equinox4_cha", "Energy drain"]
    ],
    energy_transfer: "N/A"
  };
  var ExcaliburMap = {
    slash_dash: [
      ["excalibur1_str", "Damage"],
      ["excalibur1_rng", "Range"],
      ["excalibur1_eff", "Energy"]
    ],
    surging_dash: [
      ["excalibur1_aug_str", "Combo counter hits"]
    ],
    radial_blind: [
      ["excalibur2_dur", "Duration"],
      ["excalibur2_rng", "Range"],
      ["excalibur2_eff", "Energy"]
    ],
    radial_finish: [
      ["excalibur2_aug_str", "Damage multiplier"]
    ],
    radial_javelin: [
      ["excalibur3_str", "Damage"],
      ["excalibur3_rng", "Range"],
      ["excalibur3_eff", "Energy"]
    ],
    furious_javelin: [
      ["excalibur3_aug_str", "Bonus melee damage"],
      ["excalibur3_aug_dur", "Buff duration"]
    ],
    exalted_blade: [
      ["excalibur4_str", "Damage"],
      ["excalibur4_dur", "Duration"],
      ["excalibur4_rng", "Range"],
      ["excalibur4_eff", "Energy"],
      ["excalibur4_cha", "Energy drain"]
    ],
    chromatic_blade: [
      ["excalibur4_aug_str", "Status chance"]
    ]
  };
  var FrostMap = {
    freeze: [
      ["frost1_str1", "Impact damage"],
      ["frost1_str2", "Area damage"],
      ["frost1_dur1", "Freeze duration"],
      ["frost1_dur2", "Ice duration"],
      ["frost1_eff", "Energy"]
    ],
    freeze_force: [
      ["frost1_aug_str", "Damage bonus"],
      ["frost1_aug_dur", "Duration"],
      ["frost1_aug_rng", "Range"]
    ],
    ice_wave: [
      ["frost2_str", "Damage"],
      ["frost2_rng1", "Angle"],
      ["frost2_rng2", "Initial width"],
      ["frost2_rng3", "Length"],
      ["frost2_eff", "Energy"]
    ],
    ice_wave_impedance: [
      ["frost2_aug_dur", "Duration"]
    ],
    snow_globe: [
      ["frost3_health", "Health"],
      ["frost3_str", "Explosion Damage"],
      ["frost3_rng", "Range"],
      ["frost3_eff", "Energy"]
    ],
    chilling_globe: [
      ["frost3_aug_dur", "Duration"]
    ],
    avalanche: [
      ["frost4_str1", "Initial damage"],
      ["frost4_str2", "Explosion damage"],
      ["frost4_str3", "Armor Reduction"],
      ["frost4_rng1", "Freeze range"],
      ["frost4_rng2", "Explosion range"],
      ["frost4_dur", "Duration"],
      ["frost4_eff", "Energy"]
    ],
    icy_avalanche: [
      ["frost4_aug_str", "Shield health"]
    ]
  };
  var GaraMap = {
    "": "",
    shattered_lash: [
      ["gara1_str", "Damage"],
      ["gara1_rng", "Range"],
      ["gara1_eff", "Energy"]
    ],
    splinter_storm: [
      ["gara2_str1", "Damage"],
      ["gara2_str2", "Damage Reduction"],
      ["gara2_str3", "Damage Multiplier"],
      ["gara2_dur", "Duration"],
      ["gara2_rng1", "Cast range"],
      ["gara2_rng2", "Ability range"],
      ["gara2_eff", "Energy"]
    ],
    mending_splinters: [
      ["gara2_aug_str4", "Health regen"]
    ],
    spectrorage: [
      ["gara3_str1", "Mirror damage"],
      ["gara3_str2", "Collapse damage"],
      ["gara3_dur", "Duration"],
      ["gara3_rng1", "Mirrors"],
      ["gara3_rng2", "Collapse threshold"],
      ["gara3_rng3", "Charm radius"],
      ["gara3_eff", "Energy"]
    ],
    spectrosiphon: "N/A",
    mass_vitrify: [
      ["gara4_str1", "Damage multiplier"],
      ["gara4_str2", "Segment base health"],
      ["gara4_str3", "Segment explosion damage"],
      ["gara4_str4", "Shatter explosion damage"],
      ["gara4_dur1", "Expansion duration"],
      ["gara4_dur2", "Vitrify duration"],
      ["gara4_rng1", "Initial radius"],
      ["gara4_rng2", "Max radius"],
      ["gara4_rng3", "Segment explosion range"],
      ["gara4_rng4", "Shatter explosion range"],
      ["gara4_eff", "Energy"],
      ["gara4_cha", "Energy drain"]
    ]
  };
  var GarudaMap = {
    "": "",
    dread_mirror: [
      ["garuda1_str", "Damage multiplier"],
      ["garuda1_dur", "Duration"],
      ["garuda1_rng1", "Pounce range"],
      ["garuda1_rng2", "Explosion radius"],
      ["garuda1_eff", "Energy"],
      ["garuda1_cha", "Energy drain"]
    ],
    dread_ward: [
      ["garuda1_aug_dur", "Duration"]
    ],
    blood_altar: [
      ["garuda2_str", "Health regen"],
      ["garuda2_dur", "Duration"],
      ["garuda2_rng1", "Pounce range"],
      ["garuda2_rng2", "Heal radius"],
      ["garuda2_eff", "Energy"]
    ],
    bloodletting: [
      ["garuda3_eff", "Energy gain"]
    ],
    seeking_talons: [
      ["garuda4_str1", "Damage"],
      ["garuda4_str2", "Bleed chance"],
      ["garuda4_dur", "Duration"],
      ["garuda4_eff", "Energy"]
    ]
  };
  var GaussMap = {
    "": "",
    mach_rush: [
      ["gauss1_str", "Damage"],
      ["gauss1_rng1", "Knockdown range"],
      ["gauss1_rng2", "Shockwave range"],
      ["gauss1_eff", "Energy"]
    ],
    kinetic_plating: [
      ["gauss2_str", "Damage reduction"],
      ["gauss2_dur", "Duration"],
      ["gauss2_eff", "Energy"]
    ],
    thermal_sunder: [
      ["gauss3_str1", "Cold/Heat damage"],
      ["gauss3_str2", "Blast damage"],
      ["gauss3_dur1", "Area duration"],
      ["gauss3_dur2", "Status duration"],
      ["gauss3_rng", "Range"],
      ["gauss3_eff", "Energy"]
    ],
    redline: [
      ["gauss4_str", "Damage"],
      ["gauss4_dur1", "Duration"],
      ["gauss4_dur2", "Fire rate buff"],
      ["gauss4_dur3", "Attack speed buff"],
      ["gauss4_dur4", "Reload speed buff"],
      ["gauss4_dur5", "Holster speed buff"],
      ["gauss4_eff", "Energy"]
    ]
  };
  var HarrowMap = {
    "": "",
    condemn: [
      ["harrow1_str", "Shields"],
      ["harrow1_dur", "Duration"],
      ["harrow1_rng", "Range"],
      ["harrow1_eff", "Energy"]
    ],
    penance: [
      ["harrow2_str1", "Lifesteal"],
      ["harrow2_str2", "Bonus fire rate"],
      ["harrow2_str3", "Bonus reload speed"],
      ["harrow2_dur1", "Base duration"],
      ["harrow2_dur2", "Duration every 100 shields"],
      ["harrow2_eff", "Energy"]
    ],
    thurible: [
      ["harrow3_str", "Conversion efficiency"],
      ["harrow3_dur", "Duration"],
      ["harrow3_rng", "Range"],
      ["harrow3_eff", "Energy"]
    ],
    warding_thurible: [
      ["harrow3_aug_str1", "Damage reduction"],
      ["harrow3_aug_str2", "Energy per hit"]
    ],
    covenant: [
      ["harrow4_str", "critical chance every 100 damage"],
      ["harrow4_dur1", "Invulnerability duration"],
      ["harrow4_dur2", "Critical chance duration"],
      ["harrow4_eff", "Energy"]
    ],
    lasting_covenant: [
      ["harrow4_aug_dur", "Bonus duration per headshot"]
    ]
  };
  var HildrynMap = {
    "": "",
    balefire: [
      ["hildryn1_str", "Damage per bolt"],
      ["hildryn1_rng", "Explosion radius"],
      ["hildryn1_eff1", "Shields"],
      ["hildryn1_eff2", "Shields per shot"]
    ],
    shield_pillage: [
      ["hildryn2_str", "Shields/Armor reduction"],
      ["hildryn2_dur", "Duration"],
      ["hildryn2_rng", "Final pulse radius"],
      ["hildryn2_eff", "Shields"]
    ],
    haven: [
      ["hildryn3_str1", "Ally bonus shields"],
      ["hildryn3_str2", "Damage"],
      ["hildryn3_dur", "Recharge rate bonus"],
      ["hildryn3_eff", "Shields"],
      ["hildryn3_cha1", "Shields drain per ally"],
      ["hildryn3_cha2", "Shields drain per enemy"]
    ],
    aegis_storm: [
      ["hildryn4_str1", "Damage/sec"],
      ["hildryn4_str2", "Damage on deactivation"],
      ["hildryn4_rng", "Max field radius"],
      ["hildryn4_eff", "Shields"],
      ["hildryn4_cha1", "Shields drain per second"],
      ["hildryn4_cha2", "Shields drain per enemy"]
    ]
  };
  var HydroidMap = {
    tempest_barrage: [
      ["hydroid1_str", "Damage"],
      ["hydroid1_dur", "Duration"],
      ["hydroid1_rng", "Explosion range"],
      ["hydroid1_eff", "Energy"]
    ],
    corroding_barrage: "N/A",
    tidal_surge: [
      ["hydroid2_str", "Damage"],
      ["hydroid2_dur", "Duration"],
      ["hydroid2_rng", "Speed"],
      ["hydroid2_eff", "Energy"]
    ],
    tidal_impunity: [
      ["hydroid2_aug_dur", "Duration"]
    ],
    undertow: [
      ["hydroid3_str1", "Damage"],
      ["hydroid3_str2", "Damage increase"],
      ["hydroid3_rng1", "Puddle size"],
      ["hydroid3_rng2", "Grab range"],
      ["hydroid3_eff1", "Energy"],
      ["hydroid3_eff2", "Energy/grab"],
      ["hydroid3_eff3", "Meters/Energy"],
      ["hydroid3_cha", "Energy drain"]
    ],
    curative_undertow: [
      ["hydroid3_aug_str1", "ally max health restored"],
      ["hydroid3_aug_str2", "self max health restored"]
    ],
    tentacle_swarm: [
      ["hydroid4_str1", "Contact amage"],
      ["hydroid4_str2", "Capture damage"],
      ["hydroid4_dur", "Duration"],
      ["hydroid4_rng", "Range"],
      ["hydroid4_eff", "Energy"]
    ],
    pilfering_swarm: "N/A"
  };
  var InarosMap = {
    "": "",
    desiccation: [
      ["inaros1_str", "Damage"],
      ["inaros1_dur", "Duration"],
      ["inaros1_rng", "Range"],
      ["inaros1_eff", "Energy"]
    ],
    desiccations_curse: "N/A",
    devour: [
      ["inaros2_str", "Damage"],
      ["inaros2_dur", "Duration"],
      ["inaros2_rng", "Range"],
      ["inaros2_eff", "Energy"]
    ],
    sandstorm: [
      ["inaros3_str", "Damage"],
      ["inaros3_rng", "Range"],
      ["inaros3_eff", "Energy"],
      ["inaros3_cha", "Energy drain"]
    ],
    elemental_sandstorm: [
      ["inaros3_aug_str", "Status chance/sec"]
    ],
    scarab_swarm: [
      ["inaros4_str", "Damage"],
      ["inaros4_dur", "Duration"],
      ["inaros4_rng1", "Cast range"],
      ["inaros4_rng2", "Heal range"],
      ["inaros4_eff", "Energy"]
    ],
    negation_swarm: "N/A"
  };
  var IvaraMap = {
    quiver: [
      ["ivara1_dur1", "Bubble duration"],
      ["ivara1_dur2", "Sleep duration"],
      ["ivara1_rng1", "Bubble range"],
      ["ivara1_rng2", "Noise range"],
      ["ivara1_rng3", "Sleep range"],
      ["ivara1_eff", "Energy"]
    ],
    empowered_quiver: [
      ["ivara1_aug_str1", "Critical damage bonus"],
      ["ivara1_aug_str2", "Chance to resistist statuses"]
    ],
    navigator: [
      ["ivara2_str", "Maximum damage multiplier"],
      ["ivara2_dur", "Multiplier growth"],
      ["ivara2_eff", "Energy"],
      ["ivara2_cha", "Energy drain"]
    ],
    piercing_navigator: [
      ["ivara2_aug_str1", "Critical chance per hit"],
      ["ivara2_aug_str2", "Maximum Critical chance"]
    ],
    prowl: [
      ["ivara3_str1", "Bonus headshot damage"],
      ["ivara3_str2", "Loot chance"],
      ["ivara3_dur", "Steal time"],
      ["ivara3_rng", "Steal range"],
      ["ivara3_eff", "Energy"],
      ["ivara3_cha", "Energy drain"]
    ],
    infiltrate: [
      ["ivara3_aug_str", "Movement speed bonus"]
    ],
    artemis_bow: [
      ["ivara4_str", "Base damage"],
      ["ivara4_eff1", "Energy"],
      ["ivara4_eff2", "Energy/shot"]
    ],
    concentrated_arrow: [
      ["ivara4_aug_rng", "Range"]
    ]
  };
  var KhoraMap = {
    "": "",
    whipclaw: [
      ["khora1_str", "Base damage"],
      ["khora1_rng1", "Cast range"],
      ["khora1_rng2", "Explosion range"],
      ["khora1_eff", "Energy"]
    ],
    accumulating_whipclaw: [
      ["khora1_aug_str", "Maximum damage"]
    ],
    ensnare: [
      ["khora2_dur1", "Duration"],
      ["khora2_dur2", "Spread delay"],
      ["khora2_rng1", "Cast range"],
      ["khora2_rng2", "Spread range"],
      ["khora2_eff", "Energy"]
    ],
    venari: [
      ["khora3_str1", "Speed multiplier"],
      ["khora3_str2", "Snare damage"],
      ["khora3_str3", "Health regen"],
      ["khora3_eff1", "Command energy"],
      ["khora3_eff2", "Revive energy"]
    ],
    venari_bodyguard: "N/A",
    strangledome: [
      ["khora4_str", "Damage"],
      ["khora4_dur", "Duration"],
      ["khora4_rng1", "Dome range"],
      ["khora4_rng2", "Grab range"],
      ["khora4_eff", "Energy"]
    ],
    pilfering_strangledome: "N/A"
  };
  var LimboMap = {
    "": "",
    banish: [
      ["limbo1_str", "Damage"],
      ["limbo1_dur", "Duration"],
      ["limbo1_rng", "Range"],
      ["limbo1_eff", "Energy"]
    ],
    rift_haven: [
      ["limbo1_aug_str", "Health restored"]
    ],
    stasis: [
      ["limbo2_dur", "Duration"],
      ["limbo2_eff", "Energy"]
    ],
    rift_surge: [
      ["limbo3_dur1", "Surge duration"],
      ["limbo3_dur2", "Banish duration"],
      ["limbo3_rng1", "Surge/transfer radius"],
      ["limbo3_rng2", "Banish radius"],
      ["limbo3_eff", "Energy"]
    ],
    rift_torrent: [
      ["limbo3_aug_str", "Damage bonus while rifted"],
    ],
    cataclysm: [
      ["limbo4_str", "Damage"],
      ["limbo4_dur", "Duration"],
      ["limbo4_rng1", "Initial radius"],
      ["limbo4_rng2", "Final radius"],
      ["limbo4_eff", "Energy"]
    ],
    cataclysm_continuum: "N/A",
  };
  var LokiMap = {
    decoy: [
      ["loki1_dur", "Duration"],
      ["loki1_eff", "Energy"]
    ],
    savior_decoy: "N/A",
    invisibility: [
      ["loki2_dur", "Duration"],
      ["loki2_eff", "Energy"]
    ],
    hushed_invisibility: "N/A",
    switch_teleport: [
      ["loki3_rng", "Range"],
      ["loki3_eff", "Energy"]
    ],
    safeguard_switch: [
      ["loki3_aug_dur", "Range"]
    ],
    radial_disarm: [
      ["loki4_str", "Damage"],
      ["loki4_rng", "Range"],
      ["loki4_eff", "Energy"]
    ],
    irradiating_disarm: "N/A",
  };
  var MagMap = {
    pull: [
      ["mag1_str1", "Damage"],
      ["mag1_str2", "Energy drop chance"],
      ["mag1_rng", "Range"],
      ["mag1_eff", "Energy"]
    ],
    greedy_pull: "N/A",
    magnetize: [
      ["mag2_str1", "Multiplier"],
      ["mag2_str2", "Explosion damage"],
      ["mag2_dur", "Duration"],
      ["mag2_rng1", "Field radius"],
      ["mag2_rng2", "Explosion radius"],
      ["mag2_eff", "Energy"]
    ],
    magnetized_discharge: [
      ["mag2_aug_str", "Disarm chance"]
    ],
    polarize: [
      ["mag3_str1", "Damage"],
      ["mag3_str2", "Damage multiplier"],
      ["mag3_dur", "Duration"],
      ["mag3_rng1", "Initial/explosion radius"],
      ["mag3_rng2", "Maximum pulse range"],
      ["mag3_eff", "Energy"]
    ],
    counter_pulse: [
      ["mag3_aug_dur", "Disable/jamming duration"]
    ],
    crush: [
      ["mag4_str1", "Damage"],
      ["mag4_str2", "Shields restored"],
      ["mag4_rng", "Range"],
      ["mag4_eff", "Energy"]
    ],
    fracturing_crush: [
      ["mag4_aug_str", "Armor reduction"],
      ["mag4_aug_dur", "Root duration"]
    ],
  };
  var MesaMap = {
    ballistic_battery: [
      ["mesa1_str1", "Damage conversion"],
      ["mesa1_str2", "Max damage per instance"],
      ["mesa1_str3", "Max stored damage"],
      ["mesa1_eff", "Energy"]
    ],
    ballistic_bullseye: "N/A",
    shooting_gallery: [
      ["mesa2_str", "Damage bonus"],
      ["mesa2_dur", "Duration"],
      ["mesa2_rng", "Range"],
      ["mesa2_eff", "Energy"],
    ],
    muzzle_flash: [
      ["mesa2_aug_rng", "Blind range"],
      ["mesa2_aug_dur", "Blind duration"]
    ],
    shatter_shield: [
      ["mesa3_str", "Damage reduction"],
      ["mesa3_dur", "Duration"],
      ["mesa3_rng", "Range"],
      ["mesa3_eff", "Energy"]
    ],
    staggering_shield: "N/A",
    peacemaker: [
      ["mesa4_str", "Damage bonus"],
      ["mesa4_eff", "Energy"],
      ["mesa4_cha", "Energy drain"]
    ],
    mesas_waltz: "N/A",
  };
  var MirageMap = {
    "": "",
    hall_of_mirrors: [
      ["mirage1_str", "Damage"],
      ["mirage1_dur", "Duration"],
      ["mirage1_eff", "Energy"]
    ],
    hall_of_malevolence: "N/A",
    sleight_of_hand: [
      ["mirage2_str", "Pickup/Jewel explosion damage"],
      ["mirage2_dur1", "Trap duration"],
      ["mirage2_dur2", "Blind duration"],
      ["mirage2_rng1", "Trap radius"],
      ["mirage2_rng2", "Jewel charm radius"],
      ["mirage2_rng3", "Explosion/blind radius"],
      ["mirage2_eff", "Energy"]
    ],
    explosive_legerdemain: [
      ["mirage2_aug_str", "Mine damage"]
    ],
    eclipse: [
      ["mirage3_str1", "Maximum damage bonus"],
      ["mirage3_str2", "Maximum damage reduction"],
      ["mirage3_dur", "Duration"],
      ["mirage3_eff", "Energy"]
    ],
    total_eclipse: [
      ["mirage3_aug_rng", "Range"]
    ],
    prism: [
      ["mirage4_str1", "Minimum damage"],
      ["mirage4_str2", "Minimum damage"],
      ["mirage4_dur1", "Prism duration"],
      ["mirage4_dur2", "Blind duration"],
      ["mirage4_rng1", "Laser range"],
      ["mirage4_rng2", "Blind radius"],
      ["mirage4_eff", "Energy"],
      ["mirage4_cha", "Energy drain"],

    ],
  };
  var NekrosMap = {
    soul_punch: [
      ["nekros1_str", "Initial damage"],
      ["nekros1_rng", "Cast range"],
      ["nekros1_eff", "Energy"]
    ],
    soul_survivor: [
      ["nekros1_aug_str", "Health restored"]
    ],
    terrify: [
      ["nekros2_str1", "Affected enemies"],
      ["nekros2_str2", "Armor reduction"],
      ["nekros2_dur", "Duration"],
      ["nekros2_rng", "Range"],
      ["nekros2_eff", "Energy"]
    ],
    creeping_terrify: [
      ["nekros2_aug_str", "Movement speed reduction"]
    ],
    desecrate: [
      ["nekros3_rng", "Range"],
      ["nekros3_eff", "Energy/energy per corpse"]
    ],
    despoil: [
      ["nekros3_aug_eff", "Health per corpse"]
    ],
    shadows_of_the_dead: [
      ["nekros4_str1", "Damage bonus"],
      ["nekros4_str2", "Shield/health bonus"],
      ["nekros4_dur", "Health decay"],
      ["nekros4_eff", "Energy"]
    ],
    shield_of_shadows: [
      ["nekros4_aug_str1", "Damage reduction per shadow"],
      ["nekros4_aug_str2", "Max damage reduction"],
      ["nekros4_aug_rng", "Link range"]
    ],
  };

  var NezhaMap = {
    "": "",
    fire_walker: [
      ["nezha1_str1", "Damage"],
      ["nezha1_str2", "Explosion damage"],
      ["nezha1_dur1", "Ability duration"],
      ["nezha1_dur2", "Flame duration"],
      ["nezha1_rng", "Explosion radius"],
      ["nezha1_eff", "Energy"]
    ],
    pyroclastic_flow: [
      ["nezha1_aug_dur", "Trail duration"],
    ],
    blazing_chakram: [
      ["nezha2_str1", "Damage"],
      ["nezha2_str2", "Boosted damage"],
      ["nezha2_str3", "Damage multiplier"],
      ["nezha2_dur", "Duration"],
      ["nezha2_eff", "Energy"]
    ],
    reaping_chakram: "N/A",
    warding_halo: [
      ["nezha3_str1", "Base health"],
      ["nezha3_str2", "Damage"],
      ["nezha3_str3", "Absorption multiplier"],
      ["nezha3_rng", "Range"],
      ["nezha3_eff", "Energy"]
    ],
    safeguard: "N/A",
    divine_spears: [
      ["nezha4_str", "Impale/slam damage"],
      ["nezha4_dur", "Duration"],
      ["nezha4_rng", "Range"],
      ["nezha4_eff", "Energy"]
    ],
  };
  var NidusMap = {
    "": "",
    virulence: [
      ["nidus1_str", "Damage"],
      ["nidus1_rng", "Range"],
      ["nidus1_eff", "Energy"]
    ],
    teeming_virulence: [
      ["nidus1_aug_str", "Critical chance bonus"],
      ["nidus1_aug_dur", "Duration"]
    ],
    larva: [
      ["nidus2_dur", "Duration"],
      ["nidus2_rng", "Range"],
      ["nidus2_eff", "Energy"]
    ],
    larva_burst: [
      ["nidus2_aug_str", "Damage"],
      ["nidus2_aug_rng", "Range"],
    ],
    parasitic_link: [
      ["nidus3_str1", "Ability Strength multiplier"],
      ["nidus3_str2", "Damage redirection"],
      ["nidus3_dur", "Duration"],
      ["nidus3_rng1", "Ally link"],
      ["nidus3_rng2", "Enemy link"],
    ],
    ravenous: [
      ["nidus4_str1", "Explosion damage"],
      ["nidus4_str2", "Health regen"],
      ["nidus4_dur", "Duration"],
      ["nidus4_rng", "Explosion radius"],
    ],
    insatiable: "N/A",
  };

  var NovaMap = {
    null_star: [
      ["nova1_str", "Damage"],
      ["nova1_dur1", "Particles"],
      ["nova1_dur2", "Maximum damage reduction"],
      ["nova1_rng", "Range"],
      ["nova1_eff", "Energy"]
    ],
    neutron_star: [
      ["nova1_aug_str1", "Damage per particle"],
      ["nova1_aug_str2", "Maximum damage"],
      ["nova1_aug_rng", "explosion range"],
    ],
    antimatter_drop: [
      ["nova2_str1", "Base damage"],
      ["nova2_str2", "Contact damage"],
      ["nova2_eff", "Energy"]
    ],
    antimatter_absorb: [
      ["nova2_aug_rng", "Absorb radius"],
    ],
    worm_hole: [
      ["nova3_dur", "Duration"],
      ["nova3_eff", "Energy"]
    ],
    escape_velocity: [
      ["nova3_aug_dur", "Duration"],
    ],
    molecular_prime: [
      ["nova4_str1", "Damage"],
      ["nova4_str2", "Movement speed reduction"],
      ["nova4_dur1", "Wave duration"],
      ["nova4_dur2", "Maximum range"],
      ["nova4_dur3", "Prime duration"],
      ["nova4_rng", "Explosion radius"],
      ["nova4_eff", "Energy"],
    ],
    molecular_fission: "N/A",
  };
  var NyxMap = {
    mind_control: [
      ["nyx1_dur", "Duration"],
      ["nyx1_rng", "Range"],
      ["nyx1_eff", "Energy"],
    ],
    mind_freak: [
      ["nyx1_aug_str", "Damage bonus"]
    ],
    psychic_bolts: [
      ["nyx2_str", "Debuff"],
      ["nyx2_dur", "Duration"],
      ["nyx2_eff", "Energy"],
    ],
    pacifying_bolts: [
      ["nyx2_aug_dur", "Duration"]
    ],
    chaos: [
      ["nyx3_dur", "Duration"],
      ["nyx3_rng", "Range"],
      ["nyx3_eff", "Energy"],
    ],
    chaos_sphere: "N/A",
    absorb: [
      ["nyx4_str1", "Passive damage gain"],
      ["nyx4_str2", "Minimum damage"],
      ["nyx4_str3", "Damage conversion"],
      ["nyx4_rng", "Range"],
      ["nyx4_eff1", "Energy"],
      ["nyx4_eff2", "Energy per 1000 damage"],
      ["nyx4_cha", "Energy drain"],
    ],
    assimilate: "N/A",
  };
  var OberonMap = {
    smite: [
      ["oberon1_str1", "Initial damage"],
      ["oberon1_str2", "Orb base damage"],
      ["oberon1_str3", "Number of orbs"],
      ["oberon1_dur", "Duration"],
      ["oberon1_rng1", "Cast range"],
      ["oberon1_rng2", "Orb range"],
      ["oberon1_eff", "Energy"]
    ],
    smite_infusion: [
      ["oberon1_aug_str", "Damage bonus"],
      ["oberon1_aug_dur", "Duration"],
      ["oberon1_aug_rng", "Range"]
    ],
    hallowed_ground: [
      ["oberon2_str1", "Damage"],
      ["oberon2_str2", "Status chance"],
      ["oberon2_dur", "Duration"],
      ["oberon2_rng1", "Angle"],
      ["oberon2_rng2", "Radius"],
      ["oberon2_eff", "Energy"]
    ],
    hallowed_eruption: [
      ["oberon2_aug_dur", "Duration"],
      ["oberon2_aug_str", "Maximum damage"]
    ],
    renewal: [
      ["oberon3_str1", "Wave duration"],
      ["oberon3_str2", "Armor buff"],
      ["oberon3_str3", "Initial heal"],
      ["oberon3_str4", "Health regen"],
      ["oberon3_dur1", "Bleedout slow"],
      ["oberon3_dur2", "Duration"],
      ["oberon3_rng", "Range"],
      ["oberon3_eff", "Energy"],
      ["oberon3_cha", "Energy drain"]
    ],
    phoenix_renewal: [
      ["oberon3_aug_str", "Health restored"]
    ],
    reckoning: [
      ["oberon4_str1", "Armor reduction"],
      ["oberon4_str2", "Damage"],
      ["oberon4_str3", "Extra damage"],
      ["oberon4_dur", "Duration"],
      ["oberon4_rng1", "Blind range"],
      ["oberon4_rng2", "Cast range"],
      ["oberon4_eff", "Energy"]
    ],
    hallowed_reckoning: [
      ["oberon4_aug_str1", "Damage"],
      ["oberon4_aug_str2", "Armor bonus"],
      ["oberon4_aug_dur", "Duration"]
    ],
  };
  var OctaviaMap = {
    "": "",
    mallet: [
      ["octavia1_str", "Damage multiplier"],
      ["octavia1_dur", "Duration"],
      ["octavia1_rng", "Range"],
      ["octavia1_eff", "Energy"],
    ],
    partitioned_mallet: "N/A",
    resonator: [
      ["octavia2_str", "Damage"],
      ["octavia2_dur", "Duration"],
      ["octavia2_rng", "Charm radius"],
      ["octavia2_eff", "Energy"],
    ],
    conductor: "N/A",
    metronome: [
      ["octavia3_str1", "Armor bonus"],
      ["octavia3_str2", "Speed/multishot/melee damage bonus"],
      ["octavia3_dur1", "Ability duration"],
      ["octavia3_dur2", "Buff duration"],
      ["octavia3_rng", "Range"],
      ["octavia3_eff", "Energy"],
    ],
    amp: [
      ["octavia4_str", "Damage multiplier"],
      ["octavia4_dur", "Duration"],
      ["octavia4_rng", "Range"],
      ["octavia4_eff", "Energy"],
    ],
  };
  var RevenantMap = {
    "": "",
    enthrall: [
      ["revenant1_str", "Damage"],
      ["revenant1_dur1", "Thrall duration"],
      ["revenant1_dur2", "Pillar duration"],
      ["revenant1_rng1", "Cast range"],
      ["revenant1_rng2", "Effect range"],
      //["revenant1_rng3", "Projectile range"],
      ["revenant1_eff", "Energy"],
    ],
    mesmer_skin: [
      ["revenant2_str", "Charges"],
      ["revenant2_dur", "stun duration"],
      ["revenant2_eff", "Energy"],
    ],
    reave: [
      ["revenant3_str1", "Hitpoints drain/restore"],
      ["revenant3_str2", "Thrall hitpoints drain/restore"],
      ["revenant3_dur", "Duration"],
      ["revenant3_rng", "Width"],
      ["revenant3_eff", "Energy"],
    ],
    blinding_reave: [
      ["revenant3_aug_dur", "Duration"],
    ],
    danse_macabre: [
      ["revenant4_str", "Damage"],
      ["revenant4_rng", "Beam radius"],
      ["revenant4_eff", "Energy"],
      ["revenant4_cha", "Energy drain"],
    ],
  };
  var RhinoMap = {
    rhino_charge: [
      ["rhino1_str", "Damage"],
      ["rhino1_dur", "Combo Window"],
      ["rhino1_rng1", "Charge radius"],
      ["rhino1_rng2", "Impact radius"],
      ["rhino1_eff", "Energy"]
    ],
    ironclad_charge: [
      ["rhino1_aug_str", "Armor bonus"],
      ["rhino1_aug_dur", "Duration"]
    ],
    iron_skin: [
      ["rhino2_str", "Base health"],
      ["rhino2_eff", "Energy"]
    ],
    iron_shrapnel: [
      ["rhino2_aug_rng", "Range"]
    ],
    roar: [
      ["rhino3_str", "Bonus damage"],
      ["rhino3_rng", "Range"],
      ["rhino3_eff", "Energy"],
    ],
    piercing_roar: [
      ["rhino3_aug_str", "Damage"],
      ["rhino3_aug_dur", "Duration"],
      ["rhino3_aug_rng", "Range"]
    ],
    rhino_stomp: [
      ["rhino4_str", "Damage"],
      ["rhino4_dur", "Duration"],
      ["rhino4_rng", "Range"],
      ["rhino4_eff", "Energy"]
    ],
    reinforcing_stomp: [
      ["rhino4_aug_str", "Iron Skin restoration"]
    ]
  };
  var SarynMap = {
    "": "",
    spores: [
      ["saryn1_str1", "Damage"],
      ["saryn1_str2", "Damage growth per enemy"],
      ["saryn1_str3", "Status chance"],
      ["saryn1_str4", "Reset decay"],
      ["saryn1_dur", "Damage decay rate"],
      ["saryn1_rng1", "Cast range"],
      ["saryn1_rng2", "Spread range"],
      ["saryn1_eff", "Energy"],
    ],
    venom_dose: [
      ["saryn1_aug_str", "Damage bonus"],
      ["saryn1_aug_dur", "Duration"],
      ["saryn1_aug_rng", "Range"]
    ],
    molt: [
      ["saryn2_str1", "Health"],
      ["saryn2_str2", "Explosion damage"],
      ["saryn2_str3", "Speed multiplier"],
      ["saryn2_dur1", "Decoy duration"],
      ["saryn2_dur2", "Speed duration"],
      ["saryn2_rng", "Range"],
      ["saryn2_eff", "Energy"],
    ],
    regenerative_molt: [
      ["saryn2_aug_str", "Health regen"],
    ],
    toxic_lash: [
      ["saryn3_str1", "Bonus gun damage"],
      ["saryn3_str2", "Bonus melee damage"],
      ["saryn3_str3", "Damage block"],
      ["saryn3_dur", "Duration"],
      ["saryn3_eff", "Energy"],
    ],
    contagion_cloud: [
      ["saryn3_aug_str", "Damage"],
      ["saryn3_aug_dur", "Duration"],
      ["saryn3_aug_rng", "Range"],
    ],
    miasma: [
      ["saryn4_str", "Damage"],
      ["saryn4_dur", "Duration"],
      ["saryn4_rng", "Range"],
      ["saryn4_eff", "Energy"],
    ],
  };
  var TitaniaMap = {
    "": "",
    spellbind: [
      ["titania1_dur", "Duration"],
      ["titania1_rng1", "Ability range"],
      ["titania1_rng2", "Cast range"],
      ["titania1_eff", "Energy"]
    ],
    tribute: [
      ["titania2_str", "Damage"],
      ["titania2_dur", "Duration"],
      ["titania2_rng", "Range"],
      ["titania2_eff", "Energy"]
    ],
    lantern: [
      ["titania3_str1", "Damage"],
      ["titania3_str2", "Explosion damage"],
      ["titania3_dur", "Duration"],
      ["titania3_rng1", "Cast range"],
      ["titania3_rng2", "Attract range"],
      ["titania3_rng3", "Blast range"],
      ["titania3_rng4", "DoT range"],
      ["titania3_eff", "Energy"]
    ],
    beguiling_lantern: [
      ["titania3_aug_str", "Bonus melee damage"]
    ],
    razorwing: [
      ["titania4_str1", "Gun damage"],
      ["titania4_str2", "Melee damage"],
      ["titania4_str3", "Drone damage"],
      ["titania4_eff", "Energy"],
      ["titania4_cha", "Energy drain"]
    ],
    razorwing_blitz: [
      ["titania4_aug_str", "Flight speed/fire rate increase"],
      ["titania4_aug_dur", "Duration"]
    ],
  };
  var TrinityMap = {
    "": "",
    well_of_life: [
      ["trinity1_str1", "Lifesteal"],
      ["trinity1_str2", "Max health"],
      ["trinity1_dur", "Duration"],
      ["trinity1_rng", "Range"],
      ["trinity1_eff", "Energy"]
    ],
    pool_of_life: [
      ["trinity1_aug_str", "Energy orb chance"]
    ],
    energy_vampire: [
      ["trinity2_str1", "Restored energy"],
      ["trinity2_str2", "Damage"],
      ["trinity2_dur", "Duration"],
      ["trinity2_rng1", "Cast range"],
      ["trinity2_rng2", "Pulse range"],
      ["trinity2_eff", "Energy"]
    ],
    vampire_leech: "N/A",
    link: [
      ["trinity3_dur", "Duration"],
      ["trinity3_rng", "Range"],
      ["trinity3_eff", "Energy"]
    ],
    abating_link: [
      ["trinity3_aug_str", "Armor reduction"]
    ],
    blessing: [
      ["trinity4_str1", "Shields/health restored"],
      ["trinity4_str2", "Damage reduction"],
      ["trinity4_dur", "Duration"],
      ["trinity4_eff", "Energy"]
    ],
  };
  var ValkyrMap = {
    rip_line: [
      ["valkyr1_str", "Damage"],
      ["valkyr1_dur", "Duration"],
      ["valkyr1_rng", "Range"],
      ["valkyr1_eff", "Energy"]
    ],
    swing_line: "N/A",
    warcry: [
      ["valkyr2_str1", "Attack speed/Armor buff"],
      ["valkyr2_str2", "Movement speed reduction"],
      ["valkyr2_dur", "Duration"],
      ["valkyr2_rng", "Range"],
      ["valkyr2_eff", "Energy"]
    ],
    eternal_war: [
      ["valkyr2_aug_dur", "Duration per kill"]
    ],
    paralysis: [
      ["valkyr3_str1", "Damage multiplier"],
      ["valkyr3_str2", "knockback strength"],
      ["valkyr3_rng", "Range"],
      ["valkyr3_eff", "Energy"]
    ],
    prolonged_paralysis: [
      ["valkyr3_aug_str", "Stun duration"]
    ],
    hysteria: [
      ["valkyr4_str", "Damage"],
      ["valkyr4_eff", "Energy"],
      ["valkyr4_cha", "Energy drain"]
    ],
    hysterical_assault: [
      ["valkyr4_aug_rng", "Range"]
    ],
  };
  var VoltMap = {
    shock: [
      ["volt1_str", "Damage"],
      ["volt1_rng", "Chain range"],
      ["volt1_eff", "Energy"]
    ],
    shock_trooper: [
      ["volt1_aug_str", "Damage bonus"],
      ["volt1_aug_dur", "Duration"],
      ["volt1_aug_rng", "Range"]
    ],
    speed: [
      ["volt2_str1", "Attack/movement Speed buff"],
      ["volt2_str2", "Reload speed buff"],
      ["volt2_dur", "Duration"],
      ["volt2_rng", "Range"],
      ["volt2_eff", "Energy"]
    ],
    shocking_speed: [
      ["volt2_aug_str", "Damage"]
    ],
    electric_shield: [
      ["volt3_dur", "Duration"],
      ["volt3_eff1", "Energy"],
      ["volt3_eff2", "Meters per energy"]
    ],
    transistor_shield: [
      ["volt3_aug_str", "Damage conversion"]
    ],
    discharge: [
      ["volt4_str", "Damage"],
      ["volt4_dur", "Duration"],
      ["volt4_rng1", "Ability range"],
      ["volt4_rng2", "Tesla range"],
      ["volt4_eff", "Energy"]
    ],
    capacitance: "N/A",
  };
  var WispMap = {
    "": "",
    reservoirs: [
      ["wisp1_str1", "Max health"],
      ["wisp1_str2", "Health regen"],
      ["wisp1_str3", "Bonus movement speed"],
      ["wisp1_str4", "Bonus attack speed"],
      ["wisp1_str5", "Shock damage"],
      ["wisp1_rng1", "Reservoir range"],
      ["wisp1_rng2", "Shock range"],
      ["wisp1_dur", "Mote lifespan"],
      ["wisp1_eff", "Energy"]
    ],
    wil_o_wisp: [
      ["wisp2_dur", "Duration"],
      ["wisp2_eff", "Energy"]
    ],
    breach_surge: [
      ["wisp3_str1", "Damage multiplier"],
      ["wisp3_str2", "Status chance"],
      ["wisp3_dur", "Blind duration"],
      ["wisp3_rng", "Range"],
      ["wisp3_eff", "Energy"],
    ],
    sol_gate: [
      ["wisp4_str", "Damage"],
      ["wisp4_rng", "Beam length"],
      ["wisp4_eff", "Energy"],
      ["wisp4_cha", "Energy drain"],
    ]
  };
  var WukongMap = {
    "": "",
    celestial_twin: [
      ["wukong1_str", "Health multiplier"],
      ["wukong1_eff", "Energy"]
    ],
    celestial_stomp: [
      ["wukong1_aug_rng", "Range"],
      ["wukong1_aug_eff", "Energy"]
    ],
    cloud_walker: [
      ["wukong2_str", "Health regen"],
      ["wukong2_dur", "Duration"],
      ["wukong2_rng", "Range"],
      ["wukong2_eff", "Energy"]
    ],
    enveloping_cloud: [
      ["wukong2_aug_dur", "Duration"],
      ["wukong2_aug_rng", "Range"]
    ],
    defy: [
      ["wukong3_str1", "Damage multiplier"],
      ["wukong3_str2", "Armor multiplier"],
      ["wukong3_dur1", "Invulnerability duration"],
      ["wukong3_dur2", "Armor duration"],
      ["wukong3_rng", "Range"],
      ["wukong3_eff", "Energy"]
    ],
    primal_fury: [
      ["wukong4_str", "Damage"],
      ["wukong4_eff", "Energy"],
      ["wukong4_cha", "Energy drain"]
    ],
    primal_rage: [
      ["wukong4_aug_str", "Critical chance per kill"],
      ["wukong4_aug_dur", "Decay"],
    ],
  };
  var ZephyrMap = {
    "": "",
    tail_wind: [
      ["zephyr1_str", "Damage"],
      ["zephyr1_dur1", "Speed"],
      ["zephyr1_dur2", "Hover height"],
      ["zephyr1_rng1", "Contact range"],
      ["zephyr1_rng2", "Explosion range"],
      ["zephyr1_eff", "Energy"]
    ],
    target_fixation: "N/A",
    airburst: [
      ["zephyr2_str", "Contact/explosion damage"],
      ["zephyr2_rng", "Range"],
      ["zephyr2_eff", "Energy"]
    ],
    turbulence: [
      ["zephyr3_dur", "Duration"],
      ["zephyr3_rng", "Range"],
      ["zephyr3_eff", "Energy"]
    ],
    jet_stream: [
      ["zephyr3_aug_str1", "Movement speed bonus"],
      ["zephyr3_aug_str2", "Projectile speed bonus"]
    ],
    tornado: [
      ["zephyr4_str", "Damage"],
      ["zephyr4_dur", "Duration"],
      ["zephyr4_rng", "Spawn range"],
      ["zephyr4_eff", "Energy"]
    ],
    funnel_clouds: "N/A",
  };

  // with every updade, gives a value to every stat
  function update_table() {
    var STR = reasonableInput('#in_STR') / 100;
    var RNG = reasonableInput('#in_RNG') / 100;
    var base_EFF = 2 - reasonableInput('#in_EFF') / 100;
    var EFF = Math.max(base_EFF, 0.25);
    var DUR = reasonableInput('#in_DUR') / 100;
    var CHA = Math.max(base_EFF / DUR, 0.25);
    var xARMOR = reasonableInput('#in_xARMOR') / 100;
    var aARMOR = reasonableInput('#in_aARMOR');
    var HEALTH = reasonableInput('#in_HEALTH') / 100;
    var SHIELDS = reasonableInput('#in_SHIELDS') / 100;
    var TARGET = reasonableInput('#in_TARGET');
    var COMBO = comboCheck(parseInt($('#in_COMBO').val()));

    var STACK = Math.min(Math.max(reasonableInput('#in_STACK'), 0), 100);
    var IRONCLAD_CHARGE = (STR * 50 * TARGET) / 100;


    // limits the input to a [0, 9999] range
    function reasonableInput(num) {
      var value = parseInt($(num).val());
      if (value < 0) {
        return 0;
      } else if (value > 9999) {
        return 9999;
      } else {
        return value;
      }
    }

    // gives 1, 2, or 4. Used for COMBO
    function comboCheck(num) {
      if (num <= 1) {
        return 1;
      } else if (num == 2) {
        return 2;
      } else {
        return 4;
      }
    }

    // Every cell is assigned with a formula

    switch ($("#in_OPTION").val()) { // Section dedicated to Warframes that use a drop down input, such as Chroma for his elements
      case "heat":
        table_loader("chroma2", abilityGenerator(ChromaMap.elemental_ward, "heat"), true);
        table_loader("chroma2_aug", augmentGenerator(ChromaMap, "Elemental Ward", "Everlasting Ward", "heat"), true);
        table_loader("chroma", warframeGenerator(
          ChromaMap,
          "Spectral Scream",
          "Afterburn",
          "Elemental Ward",
          "Everlasting Ward",
          "Vex Armor",
          "Vexing Retaliation",
          "Effigy",
          "Guided Effigy",
          "heat"
        ), true);
        formula_loader(['chroma', 'chroma2_aug', 'chroma2'], [
          ['str1', (STR * 100).toFixed(0) + "/s"],
          ['str2', (STR * 200).toFixed(0) + "%"]
        ], "heat");
        break;

      case "electric":
        table_loader("chroma2", abilityGenerator(ChromaMap.elemental_ward, "electric"), true);
        table_loader("chroma2_aug", augmentGenerator(ChromaMap, "Elemental Ward", "Everlasting Ward", "electric"), true);
        table_loader("chroma", warframeGenerator(
          ChromaMap,
          "Spectral Scream",
          "Afterburn",
          "Elemental Ward",
          "Everlasting Ward",
          "Vex Armor",
          "Vexing Retaliation",
          "Effigy",
          "Guided Effigy",
          "electric"
        ), true);
        formula_loader(['chroma', 'chroma2_aug', 'chroma2'], [
          ['str1', (STR * 10).toFixed(2) + "x"],
          ['str2', (STR * 100).toFixed(2) + "%"],
          ['str3', Math.min((STR * 25), 100).toFixed(2) + "%"],
          ['str4', (STR * 200).toFixed(0)],
          ['rng', (RNG * 15).toFixed(2) + "m"]
        ], "electric");
        break;

      case "toxin":
        table_loader("chroma2", abilityGenerator(ChromaMap.elemental_ward, "toxin"), true);
        table_loader("chroma2_aug", augmentGenerator(ChromaMap, "Elemental Ward", "Everlasting Ward", "toxin"), true);
        table_loader("chroma", warframeGenerator(
          ChromaMap,
          "Spectral Scream",
          "Afterburn",
          "Elemental Ward",
          "Everlasting Ward",
          "Vex Armor",
          "Vexing Retaliation",
          "Effigy",
          "Guided Effigy",
          "toxin"
        ), true);
        formula_loader(['chroma', 'chroma2_aug', 'chroma2'], [
          ['str', Math.min((STR * 50), 100).toFixed(2) + "%"],
          ['dur1', (DUR * 35).toFixed(2) + "%"]
        ], "toxin");
        break;

      case "cold":
        table_loader("chroma2", abilityGenerator(ChromaMap.elemental_ward, "cold"), true);
        table_loader("chroma2_aug", augmentGenerator(ChromaMap, "Elemental Ward", "Everlasting Ward", "cold"), true);
        table_loader("chroma", warframeGenerator(
          ChromaMap,
          "Spectral Scream",
          "Afterburn",
          "Elemental Ward",
          "Everlasting Ward",
          "Vex Armor",
          "Vexing Retaliation",
          "Effigy",
          "Guided Effigy",
          "cold"
        ), true);
        formula_loader(['chroma', 'chroma2_aug', 'chroma2'], [
          ['str1', (STR * 3).toFixed(2) + "x"],
          ['str2', (STR * 150).toFixed(2) + "%"],
          ['str3', Math.min((STR * 25), 100).toFixed(2) + "%"]
        ], "cold");
        break;

      case "night":
        table_loader("equinox1", abilityGenerator(EquinoxMap.metamorphosis, "night"), true);
        table_loader("equinox2", abilityGenerator(EquinoxMap.rest_and_rage, "night"), true);
        table_loader("equinox3", abilityGenerator(EquinoxMap.pacify_and_provoke, "night"), true);
        table_loader("equinox4", abilityGenerator(EquinoxMap.mend_and_maim, "night"), true);
        table_loader("equinox1_aug", augmentGenerator(EquinoxMap, "Metamorphosis", "Duality", "night"), true);
        table_loader("equinox2_aug", augmentGenerator(EquinoxMap, "Rest & Rage", "Calm & Frenzy", "night"), true);
        table_loader("equinox3_aug", augmentGenerator(EquinoxMap, "Pacify & Provoke", "Peaceful Provocation", "night"), true);
        table_loader("equinox", warframeGenerator(
          EquinoxMap,
          "Metamorphosis",
          "Duality",
          "Rest & Rage",
          "Calm & Frenzy",
          "Pacify & Provoke",
          "Peaceful Provocation",
          "Mend & Maim",
          "Energy Transfer",
          "night"
        ), true);

        formula_loader(['equinox', 'equinox1_aug', 'equinox1'], [
          ['str1', (STR * 250).toFixed(0)],
          ['str2', (STR * 150).toFixed(0)],
        ], "night");
        formula_loader(['equinox', 'equinox3_aug', 'equinox3'], [
          ['str', Math.min((1 - (0.5 / STR)) * 100 / 2, 100).toFixed(2) + "% - " + Math.min((1 - (0.5 / STR)) * 100, 100).toFixed(2) + "%"],
          ['eff1', (EFF * 0.5).toFixed(2) + "/s"]
        ], "night");
        formula_loader(['equinox', 'equinox3_aug'], [
          ['str', Math.min((STR * 40), 80).toFixed(2) + "%"]
        ], "night");
        formula_loader(['equinox', 'equinox4_aug', 'equinox4'], [
          ['str', (STR * 25).toFixed(0)]
        ], "night");
        break;

      case "day":
        table_loader("equinox1", abilityGenerator(EquinoxMap.metamorphosis, "day"), true);
        table_loader("equinox2", abilityGenerator(EquinoxMap.rest_and_rage, "day"), true);
        table_loader("equinox3", abilityGenerator(EquinoxMap.pacify_and_provoke, "day"), true);
        table_loader("equinox4", abilityGenerator(EquinoxMap.mend_and_maim, "day"), true);
        table_loader("equinox1_aug", augmentGenerator(EquinoxMap, "Metamorphosis", "Duality", "day"), true);
        table_loader("equinox2_aug", augmentGenerator(EquinoxMap, "Rest & Rage", "Calm & Frenzy", "day"), true);
        table_loader("equinox3_aug", augmentGenerator(EquinoxMap, "Pacify & Provoke", "Peaceful Provocation", "day"), true);
        table_loader("equinox", warframeGenerator(
          EquinoxMap,
          "Metamorphosis",
          "Duality",
          "Rest & Rage",
          "Calm & Frenzy",
          "Pacify & Provoke",
          "Peaceful Provocation",
          "Mend & Maim",
          "Energy Transfer",
          "day"
        ), true);

        formula_loader(['equinox', 'equinox1_aug', 'equinox1'], [
          ['str1', (STR * 25).toFixed(2) + "%"],
          ['str2', (STR * 15).toFixed(2) + "%"],
        ], "day");
        formula_loader(['equinox', 'equinox2_aug', 'equinox2'], [
          ['str1', (STR * 50).toFixed(2) + "%"],
          ['str2', (STR * 20).toFixed(2) + "%"],
        ], "day");
        formula_loader(['equinox', 'equinox3_aug', 'equinox3'], [
          ['str', Math.min(STR * 20, 50).toFixed(2) + "%"],
          ['eff1', (EFF * 3).toFixed(2) + "/s"]
        ], "day");
        formula_loader(['equinox', 'equinox3_aug'], [
          ['str', Math.min(STR * 35, 80).toFixed(2) + "%"]
        ], "day");
        formula_loader(['equinox', 'equinox4_aug', 'equinox4'], [
          ['str', (STR * 150).toFixed(0)]
        ], "day");
        break;
    } // switch end



    // Ash
    formula_loader(['ash', 'ash1_aug', 'ash1'], [
      ['str1', (STR * 500).toFixed(0)],
      ['str2', (STR * 500 * 0.4375).toFixed(0) + "/s"],
      ['str3', (STR * 500 + 10 * (STR * 500 * 0.437)).toFixed(0)],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['ash', 'ash1_aug'], [
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['str', Math.min((STR * 70), 100).toFixed(2) + "%"]
    ]);
    formula_loader(['ash', 'ash2_aug', 'ash2'], [
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 35).toFixed(2)]
    ]);
    formula_loader(['ash', 'ash2_aug'], [
      ['rng', (RNG * 15).toFixed(2) + "m"],
    ]);
    formula_loader(['ash', 'ash3_aug', 'ash3'], [
      ['rng', (RNG * 60).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['ash', 'ash3_aug'], [
      ['str', (STR * 2).toFixed(2) + "x"]
    ]);
    formula_loader(['ash', 'ash4_aug', 'ash4'], [
      ['str1', (STR * 2000).toFixed(0)],
      ['str2', (STR * 2000 * 0.4375).toFixed(0) + "/s"],
      ['str3', (STR * 2000 + 10 * (STR * 2000 * 0.437)).toFixed(0)],
      ['rng', (RNG * 60).toFixed(2) + "m"],
      ['eff1', (EFF * 12).toFixed(2)],
      ['eff2', (EFF * 6).toFixed(2)]
    ]);
    formula_loader(['ash', 'ash4_aug'], [
      ['str', (STR * 4).toFixed(0)]
    ]);
    // Atlas
    formula_loader(['atlas', 'atlas1_aug', 'atlas1'], [
      ['str', (STR * 350 * COMBO).toFixed(0)],
      ['dur', (DUR).toFixed(2) + "s"],
      ['rng1', (RNG * 15).toFixed(2) + "m"],
      ['rng2', (RNG * 2 * Math.min(3, COMBO)).toFixed(2) + "m"],
      ['eff', (EFF * 25 * (1 / COMBO)).toFixed(2)]
    ]);
    formula_loader(['atlas', 'atlas1_aug'], [
      ['dur1', (DUR * 7).toFixed(2) + "s"],
      ['dur2', (DUR * 14).toFixed(2) + "s"]
    ]);
    formula_loader(['atlas', 'atlas2_aug', 'atlas2'], [
      ['health', (3750 + 5 * (450 * xARMOR * STR + aARMOR)).toFixed(0)],
      ['str1', (STR * 600).toFixed(0)],
      ['str2', (STR * 500).toFixed(0)],
      ['rng', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['atlas', 'atlas3_aug', 'atlas3'], [
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 14).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['atlas', 'atlas3_aug'], [
      ['str', Math.min(STR * 25, 100).toFixed(2) + "%"]
    ]);
    formula_loader(['atlas', 'atlas4_aug', 'atlas4'], [
      ['dur', (45 * DUR).toFixed(2) + "s"],
      ['health', (1200 * (4 + HEALTH + SHIELDS + STR)).toFixed(0)],
      ['armor', (500 * (xARMOR + STR) + aARMOR).toFixed(0)],
      ['str1', (STR * 2000).toFixed(0)],
      ['str2', (STR * 500).toFixed(0)],
      ['str3', (STR * 1250).toFixed(0)],
      ['rng1', (RNG * 6).toFixed(2) + "m"],
      ['rng2', RNG.toFixed(2) + "x"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['atlas', 'atlas4_aug'], [
      ['health', (1.5 * 1200 * (4 + HEALTH + SHIELDS + STR)).toFixed(0)],
      ['str1', (STR * 2000 * 1.35).toFixed(0)],
      ['str2', (STR * 500 * 1.35).toFixed(0)],
      ['str3', (STR * 1250 * 1.35).toFixed(0)],
      ['rng', (RNG * 0.65).toFixed(2) + "x"]
    ]);
    // Banshee
    formula_loader(['banshee', 'banshee1_aug', 'banshee1'], [
      ['str', (STR * 50).toFixed(0)],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['banshee', 'banshee1_aug'], [
      ['str', Math.min((STR * 70), 100).toFixed(2) + "%"],
      ['dur', (DUR * 8).toFixed(2) + "s"]
    ]);
    formula_loader(['banshee', 'banshee2'], [
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['str', (STR * 5).toFixed(2) + "x"],
      ['rng', (RNG * 35).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['banshee', 'banshee3_aug', 'banshee3'], [
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['banshee', 'banshee3_aug'], [
      ['str', (STR * 3).toFixed(2) + "x"]
    ]);
    formula_loader(['banshee', 'banshee4_aug', 'banshee4'], [
      ['str', (STR * 200).toFixed(0) + "/s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 12).toFixed(2) + "/s"]
    ]);
    formula_loader(['banshee', 'banshee4_aug'], [
      ['str', "~" + (STR * 4000 * 2 / 3).toFixed(0) + " - " + (STR * 4000).toFixed(0)],
      ['rng', (RNG * 35).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Baruuk
    formula_loader(['baruuk', 'baruuk1'], [
      ['rng', Math.min((RNG * 180), 360).toFixed(2) + "°"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 2.5).toFixed(2) + "/s"]
    ]);
    formula_loader(['baruuk', 'baruuk2'], [
      ['dur1', (DUR * 5).toFixed(2) + "s"],
      ['dur2', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['baruuk', 'baruuk3'], [
      ['str1', (STR * 250).toFixed(0)],
      ['str2', (STR * 8).toFixed(0)],
      ['str3', Math.min(((STR * 8).toFixed(0) * 10), 90).toFixed(0) + "%"],
      ['rng1', (RNG * 6).toFixed(2) + "m"],
      ['rng2', (RNG * 3).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['baruuk', 'baruuk4'], [
      ['str1', (STR * 250).toFixed(0)],
      ['str2', Math.min((STR * 25), 40).toFixed(2) + "%"]
    ]);
    //Chroma
    formula_loader(['chroma', 'chroma1_aug', 'chroma1'], [
      ['str', (STR * 200).toFixed(0) + "/s"],
      ['rng', (Math.cbrt(RNG) * 10).toFixed(2) + "m"],
      ['eff', (EFF * 10).toFixed(2)],
      ['cha', (CHA * 3).toFixed(2) + "/s"]
    ]);
    formula_loader(['chroma', 'chroma1_aug'], [
      ['str', (STR * 100).toFixed(0) + " - " + (STR * 500).toFixed(0)]
    ]);
    formula_loader(['chroma', 'chroma2_aug', 'chroma2'], [
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['chroma', 'chroma3_aug', 'chroma3'], [
      ['str1', (STR * 350).toFixed(2) + "%"],
      ['str2', (STR * 275).toFixed(2) + "%"],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 18).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['chroma', 'chroma3_aug'], [
      ['rng', (RNG * 9).toFixed(2) + "m"]
    ]);
    formula_loader(['chroma', 'chroma4_aug', 'chroma4'], [
      ['str1', (STR * 2000).toFixed(0) + "/s"],
      ['str2', (STR * 8000).toFixed(0)],
      ['eff', (EFF * 10).toFixed(2)],
      ['cha', (CHA * 10).toFixed(2) + "/s"]
    ]);
    formula_loader(['chroma', 'chroma4_aug'], [
      ['str', (STR * 2000).toFixed(0) + "/s"]
    ]);
    //Ember
    formula_loader(['ember', 'ember1_aug', 'ember1'], [
      ['str1', (STR * 400).toFixed(0) + " - " + (STR * 800).toFixed(0)],
      ['str2', (STR * 150).toFixed(0) + " - " + (STR * 300).toFixed(0)],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['ember', 'ember1_aug'], [
      ['str', (STR * 100).toFixed(0) + "%"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['ember', 'ember2_aug', 'ember2'], [
      ['str', (STR * 2.5).toFixed(2) + "x"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['ember', 'ember2_aug'], [
      ['str', (STR * 0.5).toFixed(2) + "x"]
    ]);
    formula_loader(['ember', 'ember3'], [
      ['str1', (STR * 200).toFixed(0)],
      ['str2', (STR * 225).toFixed(0) + "/s"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['ember', 'ember4'], [
      ['str1', (STR * 400).toFixed(0) + " - " + (STR * 800).toFixed(0)],
      ['str2', Math.min((STR * 35), 100).toFixed(2) + "%"],
      ['rng', (RNG * 15).toFixed(2) + "m - " + (RNG * 7.5).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)],
      ['cha', (CHA * 3).toFixed(2) + "/s - " + (CHA * 6).toFixed(2) + "/s"],
    ]);
    //Equinox
    formula_loader(['equinox', 'equinox1_aug', 'equinox1'], [
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['equinox', 'equinox1_aug'], [
      ['dur', (DUR * 10).toFixed(2) + "s"]
    ]);
    formula_loader(['equinox', 'equinox2_aug', 'equinox2'], [
      ['dur', (DUR * 22).toFixed(2) + "s"],
      ['rng1', (RNG * 5).toFixed(2) + "m"],
      ['rng2', (RNG * 50).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['equinox', 'equinox2_aug'], [
      ['rng', (RNG * 5).toFixed(2) + "m"]
    ]);
    formula_loader(['equinox', 'equinox3_aug', 'equinox3'], [
      ['rng', (RNG * 16).toFixed(2) + "m"],
      ['eff', (EFF * 10).toFixed(2)]
    ]);
    formula_loader(['equinox', 'equinox4_aug', 'equinox4'], [
      ['rng', (RNG * 18).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)],
      ['cha', (CHA * 3.5).toFixed(2) + "/s"]
    ]);
    //Excalibur
    formula_loader(['excalibur', 'excalibur1_aug', 'excalibur1'], [
      ['str', (STR * 250).toFixed(0)],
      ['rng', (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['excalibur', 'excalibur1_aug'], [
      ['str', ((STR * 4 + 1) * TARGET).toFixed(0)]
    ]);
    formula_loader(['excalibur', 'excalibur2_aug', 'excalibur2'], [
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['excalibur', 'excalibur2_aug'], [
      ['str', (STR * 300).toFixed(0) + "%"]
    ]);
    formula_loader(['excalibur', 'excalibur3_aug', 'excalibur3'], [
      ['str', (STR * 1000).toFixed(0)],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['excalibur', 'excalibur3_aug'], [
      ['str', (STR * 10 * Math.min(TARGET, 12)).toFixed(2) + "%"],
      ['dur', (DUR * 16).toFixed(2) + "s"]
    ]);
    formula_loader(['excalibur', 'excalibur4_aug', 'excalibur4'], [
      ['str', (STR * 250).toFixed(0)],
      ['dur', (DUR * 6).toFixed(2) + "s"],
      ['rng', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (EFF * 2.5).toFixed(2) + "/s"]
    ]);
    formula_loader(['excalibur', 'excalibur4_aug'], [
      ['str', Math.min((10 + 50 * STR), 100).toFixed(2) + "%"]
    ]);
    //Frost
    formula_loader(['frost', 'frost1_aug', 'frost1'], [
      ['str1', (STR * 350).toFixed(0)],
      ['str2', (STR * 150).toFixed(0)],
      ['dur1', (DUR * 15).toFixed(2) + "s"],
      ['dur2', (DUR * 12).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['frost', 'frost1_aug'], [
      ['str', (STR * 100).toFixed(0) + "%"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['frost', 'frost2_aug', 'frost2'], [
      ['str', (STR * 700).toFixed(0)],
      ['rng1', Math.min((50 * RNG), 60).toFixed(2) + "°"],
      ['rng2', (RNG * 3).toFixed(2) + "m"],
      ['rng3', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['frost', 'frost2_aug'], [
      ['dur', (DUR * 12).toFixed(2) + "s"]
    ]);
    formula_loader(['frost', 'frost3_aug', 'frost3'], [
      ['health', ((5000 + 5 * (300 * xARMOR + aARMOR)) * STR).toFixed(0)],
      ['str', (STR * 150).toFixed(0)],
      ['rng', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['frost', 'frost3_aug'], [
      ['dur', (DUR * 8).toFixed(2) + "s"]
    ]);
    formula_loader(['frost', 'frost4_aug', 'frost4'], [
      ['str1', (STR * 1500).toFixed(0)],
      ['str2', (STR * 400).toFixed(0)],
      ['str3', Math.min((STR * 40), 100).toFixed(2) + "%"],
      ['rng1', (RNG * 15).toFixed(2) + "m"],
      ['rng2', (RNG * 4.5).toFixed(2) + "m"],
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['frost', 'frost4_aug'], [
      ['str', (STR * 60 * TARGET).toFixed(0)]
    ]);
    //Gara
    formula_loader(['gara', 'gara1'], [
      ['str', (STR * 800).toFixed(0)],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['gara', 'gara2_aug', 'gara2'], [
      ['str1', (STR * 250).toFixed(0)],
      ['str2', Math.min((STR * 70), 90).toFixed(2) + "%"],
      ['str3', (STR * 35).toFixed(2) + "%"],
      ['dur', (DUR * 22).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 2.5).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['gara', 'gara2_aug'], [
      ['str4', (STR * 3).toFixed(2) + "/s"],
    ]);
    formula_loader(['gara', 'gara3'], [
      ['str1', (STR * 800).toFixed(0)],
      ['str2', (STR * 1500).toFixed(0)],
      ['dur', (DUR * 22).toFixed(2) + "s"],
      ['rng1', (RNG * 12).toFixed(0)],
      ['rng2', (RNG * 6).toFixed(0)],
      ['rng3', (RNG * 4).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['gara', 'gara4'], [
      ['str1', (STR * 50).toFixed(2) + "%"],
      ['str2', (STR * 2225).toFixed(0)],
      ['str3', (STR * 350).toFixed(0)],
      ['str4', (STR * 800).toFixed(0)],
      ['dur1', (DUR * 3).toFixed(2) + "s"],
      ['dur2', (DUR * 16).toFixed(2) + "s"],
      ['rng1', (RNG * 2).toFixed(2) + "m"],
      ['rng2', (RNG * 11).toFixed(2) + "m"],
      ['rng3', (RNG * 8).toFixed(2) + "m"],
      ['rng4', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)],
      ['cha', (CHA * 3).toFixed(2) + "/s - " + (CHA * 5).toFixed(2) + "/s"]
    ]);
    //Garuda
    formula_loader(['garuda', 'garuda1_aug', 'garuda1'], [
      ['str', (STR * 200).toFixed(0) + "%"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 50).toFixed(2) + "/s"]
    ]);
    formula_loader(['garuda', 'garuda1_aug'], [
      ['dur', (DUR * 5).toFixed(2) + "s"],
    ]);
    formula_loader(['garuda', 'garuda2'], [
      ['str', (STR * 25).toFixed(0) + "%/s"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)],
    ]);
    formula_loader(['garuda', 'garuda3'], [
      ['eff', (25 / EFF).toFixed(2) + "%"],
    ]);
    formula_loader(['garuda', 'garuda4'], [
      ['str1', (STR * 150).toFixed(0)],
      ['str2', Math.min((STR * 50), 100).toFixed(2) + "%"],
      ['dur', (DUR * 10).toFixed(2)],
      ['eff', (EFF * 100).toFixed(2)],
    ]);
    // Gauss  
    formula_loader(['gauss', 'gauss1'], [
      ['str', (STR * 800).toFixed(0)],
      ['rng1', (RNG * 4).toFixed(2) + "m"],
      ['rng2', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 15).toFixed(2)]
    ]);
    formula_loader(['gauss', 'gauss2'], [
      ['str', Math.min((STR * 20), 50).toFixed(0) + "% - " + Math.min((STR * 100), 100).toFixed(0) + "%"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['gauss', 'gauss3'], [
      ['str1', (STR * 150).toFixed(0) + " - " + (STR * 750).toFixed(0)],
      ['str2', (STR * 300).toFixed(0) + " - " + (STR * 1500).toFixed(0)],
      ['dur1', (DUR * 10).toFixed(2) + "s"],
      ['dur2', (DUR * 8).toFixed(2) + "s"],
      ['rng', (RNG * 4).toFixed(2) + "m - " + (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['gauss', 'gauss4'], [
      ['str', (STR * 400).toFixed(0)],
      ['dur1', (DUR * 30).toFixed(2) + "s"],
      ['dur2', (DUR * 15).toFixed(2) + "% - " + (DUR * 75).toFixed(2) + "%"],
      ['dur3', (DUR * 8).toFixed(2) + "% - " + (DUR * 40).toFixed(2) + "%"],
      ['dur4', (DUR * 10).toFixed(2) + "% - " + (DUR * 50).toFixed(2) + "%"],
      ['dur5', (DUR * 20).toFixed(2) + "% - " + (DUR * 100).toFixed(2) + "%"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    // Harrow  
    formula_loader(['harrow', 'harrow1'], [
      ['str', (STR * 150 * TARGET).toFixed(0)],
      ['dur', (DUR * 6).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['harrow', 'harrow2'], [
      ['str1', (STR * 5).toFixed(2) + "%"],
      ['str2', (STR * 35).toFixed(2) + "%"],
      ['str3', (STR * 70).toFixed(2) + "%"],
      ['dur1', (DUR * 6).toFixed(2) + "s"],
      ['dur2', (DUR * 1.54).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)],
    ]);
    formula_loader(['harrow', 'harrow3_aug', 'harrow3'], [
      ['str', (5 / EFF * STR).toFixed(2) + "%"],
      ['dur', (DUR * 35).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['harrow', 'harrow3_aug'], [
      ['str1', Math.min((STR * 40), 90).toFixed(2) + "%"],
      ['str2', (STR * 0.5).toFixed(2)]
    ]);
    formula_loader(['harrow', 'harrow4_aug', 'harrow4'], [
      ['str', (STR * 1.5).toFixed(2) + "%"],
      ['dur1', (DUR * 6).toFixed(2) + "s"],
      ['dur2', (DUR * 12).toFixed(2) + "s"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['harrow', 'harrow4_aug'], [
      ['dur', (DUR * 3).toFixed(2) + "s"]
    ]);
    //Hildryn
    formula_loader(['hildryn', 'hildryn1_aug', 'hildryn1'], [
      ['str', (STR * 500).toFixed(0)],
      ['rng', (RNG * 3).toFixed(2) + "m"],
      ['eff1', (EFF * 50).toFixed(2)],
      ['eff2', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['hildryn', 'hildryn2_aug', 'hildryn2'], [
      ['str', Math.min((STR * 25), 100).toFixed(2) + "%"],
      ['dur', (DUR * 2).toFixed(2) + "s"],
      ['rng', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['hildryn', 'hildryn3_aug', 'hildryn3'], [
      ['str1', (STR * 500).toFixed(0)],
      ['str2', (STR * 200).toFixed(0) + "/s"],
      ['dur', (DUR * 80).toFixed(2) + "%"],
      ['eff', (EFF * 250).toFixed(2)],
      ['cha1', (CHA * 5).toFixed(2) + "/s"],
      ['cha2', (CHA * 25).toFixed(2) + "/s"]
    ]);
    formula_loader(['hildryn', 'hildryn4_aug', 'hildryn4'], [
      ['str1', (STR * 200).toFixed(0) + "/s"],
      ['str2', (STR * 500).toFixed(0)],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)],
      ['cha1', (CHA * 25).toFixed(2) + "/s"],
      ['cha2', (CHA * 25).toFixed(2) + "/s"]
    ]);
    //Hydroid
    formula_loader(['hydroid', 'hydroid1'], [
      ['str', (STR * 150).toFixed(0) + " - " + (STR * 300).toFixed(0)],
      ['dur', (DUR * 5).toFixed(2) + "s - " + (DUR * 10).toFixed(2) + "s"],
      ['rng', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2) + " - " + (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['hydroid', 'hydroid2_aug', 'hydroid2'], [
      ['str', (STR * 300).toFixed(0)],
      ['dur', (DUR * 30).toFixed(2) + "m/s"],
      ['rng', (RNG * 6).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['hydroid', 'hydroid2_aug'], [
      ['dur', (DUR * 12).toFixed(2) + "s"],
    ]);
    formula_loader(['hydroid', 'hydroid3_aug', 'hydroid3'], [
      ['str1', (STR * 25).toFixed(0) + "/s"],
      ['str2', (STR * 2).toFixed(2) + "%/s"],
      ['rng1', (Math.sqrt(RNG * 4)).toFixed(2) + "m"],
      ['rng2', (RNG * 15).toFixed(2) + "m"],
      ['eff1', (EFF * 15).toFixed(2)],
      ['eff2', (EFF * 5).toFixed(2)],
      ['eff3', (0.2 / EFF).toFixed(2) + "m"],
      ['cha', (CHA * 2).toFixed(2)]
    ]);
    formula_loader(['hydroid', 'hydroid3_aug'], [
      ['str1', Math.min((STR * 30), 100).toFixed(2) + "%"],
      ['str2', Math.min((STR * 10), 100).toFixed(2) + "%"],
    ]);
    formula_loader(['hydroid', 'hydroid4'], [
      ['str1', (STR * 300).toFixed(0)],
      ['str2', (STR * 200).toFixed(0) + "/s"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 5).toFixed(2) + "m - " + (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2) + " - " + (EFF * 100).toFixed(2)]
    ]);
    //Inaros
    formula_loader(['inaros', 'inaros1'], [
      ['str', (STR * 150).toFixed(0) + " + " + (STR * 8).toFixed(0) + "/s"],
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['inaros', 'inaros2'], [
      ['str', (STR * 125).toFixed(0) + "/s - " + (STR * 250).toFixed(0) + "/s"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 50).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['inaros', 'inaros3_aug', 'inaros3'], [
      ['str', (STR * 500).toFixed(0) + "/s"],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)],
      ['cha', (CHA * 10).toFixed(2)]
    ]);
    formula_loader(['inaros', 'inaros3_aug'], [
      ['str', Math.min((STR * 50), 100).toFixed(0) + "%"]
    ]);
    formula_loader(['inaros', 'inaros4'], [
      ['str', (STR * 500).toFixed(0) + "/s"],
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    //Ivara
    formula_loader(['ivara', 'ivara1_aug', 'ivara1'], [
      ['dur1', (DUR * 12).toFixed(2) + "s"],
      ['dur2', (DUR * 10).toFixed(2) + "s"],
      ['rng1', (RNG * 2.5).toFixed(2) + "m"],
      ['rng2', (RNG * 20).toFixed(2) + "m"],
      ['rng3', (RNG * 6).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['ivara', 'ivara1_aug'], [
      ['str1', (STR * 100).toFixed(2) + "%"],
      ['str2', Math.min((STR * 100), 100).toFixed(2) + "%"],
    ]);
    formula_loader(['ivara', 'ivara2_aug', 'ivara2'], [
      ['str', (STR * 5).toFixed(2) + "x"],
      ['dur', (DUR * 1).toFixed(2) + "x/s"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 3).toFixed(2) + "/s + " + (CHA * 2).toFixed(2) + "/s\xB2"]
    ]);
    formula_loader(['ivara', 'ivara2_aug'], [
      ['str1', (STR * 10).toFixed(2) + "%"],
      ['str2', (STR * 50).toFixed(2) + "%"],
    ]);
    formula_loader(['ivara', 'ivara3_aug', 'ivara3'], [
      ['str1', (STR * 40).toFixed(2) + "%"],
      ['str2', Math.min((STR * 100), 100).toFixed(2) + "%"],
      ['dur', (2.5/DUR).toFixed(2) + "s"],
      ['rng', (RNG * 4).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 1).toFixed(2) + "/s - " + (CHA * 3).toFixed(2) + "/s"]
    ]);
    formula_loader(['ivara', 'ivara3_aug'], [
      ['str', (STR * 25).toFixed(2) + "%"],
    ]);
    formula_loader(['ivara', 'ivara4_aug', 'ivara4'], [
      ['str', (STR * 160).toFixed(0)],
      ['eff1', (EFF * 50).toFixed(2)],
      ['eff2', (EFF * 15).toFixed(2)]
    ]);
    formula_loader(['ivara', 'ivara4_aug'], [
      ['rng', (RNG * 7).toFixed(2) + "m"]
    ]);
    //Khora
    formula_loader(['khora', 'khora1_aug', 'khora1'], [
      ['str', (STR * 300).toFixed(0)],
      ['rng1', (RNG * 10).toFixed(2) + "m"],
      ['rng2', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['khora', 'khora1_aug'], [
      ['str', ((STR + 3.5) * 300).toFixed(0)]
    ]);
    formula_loader(['khora', 'khora2'], [
      ['dur1', (DUR * 15).toFixed(2) + "s"],
      ['dur2', (0.5 / DUR).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['khora', 'khora3'], [
      ['str1', (1 + STR * 0.15).toFixed(2) + "%"],
      ['str2', (STR * 350).toFixed(2)],
      ['str3', (STR * 50).toFixed(2) + "/s"],
      ['eff1', (EFF * 25).toFixed(2)],
      ['eff2', "≤" + (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['khora', 'khora4'], [
      ['str', (STR * 250).toFixed(0) + "/s"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng1', (RNG * 5).toFixed(2) + "m"],
      ['rng2', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Limbo
    formula_loader(['limbo', 'limbo1_aug', 'limbo1'], [
      ['str', (STR * 250).toFixed(0)],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 35).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['limbo', 'limbo1_aug'], [
      ['str', Math.min((STR * 25), 100).toFixed(2) + "%"]
    ]);
    formula_loader(['limbo', 'limbo2'], [
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['limbo', 'limbo3_aug', 'limbo3'], [
      ['dur1', (DUR * 25).toFixed(2) + "s"],
      ['dur2', (DUR * 18).toFixed(2) + "s"],
      ['rng1', (RNG * 25).toFixed(2) + "m"],
      ['rng2', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['limbo', 'limbo3_aug'], [
      ['str', (STR * 30 * TARGET).toFixed(2) + "%"]
    ]);
    formula_loader(['limbo', 'limbo4'], [
      ['str', (STR * 500).toFixed(0)],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng1', (RNG * 16).toFixed(2) + "m"],
      ['rng2', (RNG * 5).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Loki
    formula_loader(['loki', 'loki1'], [
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['loki', 'loki2'], [
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['loki', 'loki3_aug', 'loki3'], [
      ['rng', (RNG * 75).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['loki', 'loki3_aug'], [
      ['dur', (DUR * 6).toFixed(2) + "s"]
    ]);
    formula_loader(['loki', 'loki4'], [
      ['str', (STR * 500).toFixed(0)],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Mag
    formula_loader(['mag', 'mag1'], [
      ['str1', (STR * 300).toFixed(0)],
      ['str2', Math.min(STR * 25, 100).toFixed(0) + "%"],
      ['rng', (RNG * 25).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['mag', 'mag2_aug', 'mag2'], [
      ['str1', (STR * 2).toFixed(2) + "%"],
      ['str2', (STR * 300).toFixed(0)],
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['rng1', (RNG * 4).toFixed(2) + "m"],
      ['rng2', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['mag', 'mag2_aug'], [
      ['str', Math.min(STR * 50, 100).toFixed(2) + "%"]
    ]);
    formula_loader(['mag', 'mag3_aug', 'mag3'], [
      ['str1', (STR * 400).toFixed(0)],
      ['str2', (STR * 2.5).toFixed(2) + "x"],
      ['dur', (DUR * 5).toFixed(2) + "s"],
      ['rng1', (RNG * 8).toFixed(2) + "m"],
      ['rng2', (RNG * 8 + DUR * 5 * 5.9).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['mag', 'mag3_aug'], [
      ['dur', (DUR * 4).toFixed(2) + "s"]
    ]);
    formula_loader(['mag', 'mag4_aug', 'mag4'], [
      ['str1', (STR * 1500).toFixed(0)],
      ['str2', (STR * 25 * TARGET).toFixed(2)],
      ['rng', (RNG * 18).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['mag', 'mag4_aug'], [
      ['str', Math.min(STR * 50, 100).toFixed(2) + "%"],
      ['dur', (RNG * 7).toFixed(2) + "s"]
    ]);
    //Mesa
    formula_loader(['mesa', 'mesa1'], [
      ['str1', (STR * 30).toFixed(2) + "%"],
      ['str2', (STR * 140).toFixed(0)],
      ['str3', (STR * 1600).toFixed(0)],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['mesa', 'mesa2_aug', 'mesa2'], [
      ['str', (STR * 25).toFixed(2) + "%"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 16).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['mesa', 'mesa2_aug'], [
      ['rng', (RNG * 8).toFixed(2) + "m"],
      ['dur', (DUR * 7).toFixed(2) + "s"]
    ]);
    formula_loader(['mesa', 'mesa3'], [
      ['str', Math.min(STR * 80, 95).toFixed(2) + "%"],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 11).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['mesa', 'mesa4'], [
      ['str', (STR * 150).toFixed(2) + "%"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 15).toFixed(2) + "/s"]
    ]);
    //Mirage
    formula_loader(['mirage', 'mirage1'], [
      ['str', (STR * 20).toFixed(2) + "%"],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['mirage', 'mirage2_aug', 'mirage2'], [
      ['str', (STR * 200).toFixed(0)],
      ['dur1', (DUR * 18).toFixed(2) + "s"],
      ['dur2', (DUR * 5).toFixed(2) + "s"],
      ['rng1', (RNG * 40).toFixed(2) + "m"],
      ['rng2', (RNG * 12).toFixed(2) + "m"],
      ['rng3', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['mirage', 'mirage2_aug'], [
      ['str', (STR * 500).toFixed(0)],
    ]);
    formula_loader(['mirage', 'mirage3_aug', 'mirage3'], [
      ['str1', (STR * 200).toFixed(2) + "%"],
      ['str2', Math.min(STR * 75, 95).toFixed(2) + "%"],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['mirage', 'mirage3_aug'], [
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['mirage', 'mirage4'], [
      ['str1', (STR * 250).toFixed(0)],
      ['str2', (STR * 500).toFixed(0)],
      ['dur1', (DUR * 12).toFixed(2) + "s"],
      ['dur2', (DUR * 15).toFixed(2) + "s"],
      ['rng1', (RNG * 30).toFixed(2) + "m"],
      ['rng2', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)],
      ['cha', (CHA * 10).toFixed(2) + "/s"]
    ]);
    //Nekros
    formula_loader(['nekros', 'nekros1_aug', 'nekros1'], [
      ['str', (STR * 500).toFixed(0)],
      ['rng', (RNG * 50).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nekros', 'nekros1_aug'], [
      ['str', Math.min(STR * 30, 100).toFixed(2) + "%"]
    ]);
    formula_loader(['nekros', 'nekros2_aug', 'nekros2'], [
      ['str1', (STR * 20).toFixed(0)],
      ['str2', Math.min(STR * 20, 100).toFixed(2) + "%"],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['nekros', 'nekros2_aug'], [
      ['str', Math.min(STR * 60, 80).toFixed(2) + "%"]
    ]);
    formula_loader(['nekros', 'nekros3_aug', 'nekros3'], [
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 10).toFixed(2)]
    ]);
    formula_loader(['nekros', 'nekros3_aug'], [
      ['eff', (EFF * 10).toFixed(2)]
    ]);
    formula_loader(['nekros', 'nekros4_aug', 'nekros4'], [
      ['str1', (STR * 150).toFixed(2) + "%"],
      ['str2', (STR * 100).toFixed(2) + "%"],
      ['dur', (3 / DUR).toFixed(2) + "%/s"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['nekros', 'nekros4_aug'], [
      ['str1', (STR * 6).toFixed(2) + "%"],
      ['str2', Math.min(STR * 6 * 7, 90).toFixed(2) + "%"],
      ['rng', (RNG * 50).toFixed(2) + "m"],
    ]);
    //Nezha
    formula_loader(['nezha', 'nezha1_aug', 'nezha1'], [
      ['str1', (STR * 200).toFixed(0) + "/s"],
      ['str2', (STR * 1250).toFixed(0)],
      ['dur1', (DUR * 30).toFixed(2) + "s"],
      ['dur2', (DUR * 10).toFixed(2) + "s"],
      ['rng', (RNG * 6).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nezha', 'nezha1_aug'], [
      ['dur', (DUR * 10).toFixed(2) + "s"],
    ]);
    formula_loader(['nezha', 'nezha2'], [
      ['str1', (STR * 250).toFixed(0)],
      ['str2', (STR * 1000).toFixed(0)],
      ['str3', (STR * 100).toFixed(2) + "%"],
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nezha', 'nezha3'], [
      ['str1', ((1000 + 2.5 * (175 * (1 + xARMOR) + aARMOR)) * STR).toFixed(0)],
      ['str2', (STR * 125).toFixed(0) + "/s"],
      ['str3', (STR * 2.5).toFixed(2) + "%"],
      ['rng', (RNG * 2).toFixed(2) + "s"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['nezha', 'nezha4'], [
      ['str', (STR * 600).toFixed(0)],
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng', (RNG * 19).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Nidus
    formula_loader(['nidus', 'nidus1_aug', 'nidus1'], [
      ['str', (STR * 200 * (1 + STACK)).toFixed(0)],
      ['rng', (RNG * 16).toFixed(2) + "m"],
      ['eff', (EFF * 40).toFixed(2)]
    ]);
    formula_loader(['nidus', 'nidus1_aug'], [
      ['str', (STR * 120).toFixed(0) + "%"],
      ['dur', (DUR * 15).toFixed(2) + "s"]
    ]);
    formula_loader(['nidus', 'nidus2_aug', 'nidus2'], [
      ['dur', (DUR * 7).toFixed(2) + "s"],
      ['rng', (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nidus', 'nidus2_aug'], [
      ['str', (STR * 300).toFixed(0)],
      ['rng', (RNG * 5).toFixed(2) + "m"]
    ]);
    formula_loader(['nidus', 'nidus3'], [
      ['str1', "+" + (STR * 25).toFixed(2) + "%"],
      ['str2', Math.min(STR * 50, 90).toFixed(2) + "%"],
      ['dur', (DUR * 60).toFixed(2) + "s"],
      ['rng1', (RNG * 40).toFixed(2) + "m"],
      ['rng2', (RNG * 20).toFixed(2) + "m"]
    ]);
    formula_loader(['nidus', 'nidus4'], [
      ['str1', (STR * 150 * Math.max((1 + STACK - 3), 0)).toFixed(2)], //-3 because the ability refers to the value after the cast, which is always 3 less than actual value
      ['str2', (STR * 20).toFixed(2) + "/s"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 4).toFixed(2) + "m"]
    ]);
    //Nova
    formula_loader(['nova', 'nova1_aug', 'nova1'], [
      ['str', (STR * 200).toFixed(0)],
      ['dur1', (DUR * 6).toFixed(0)],
      ['dur2', Math.min((Math.round(DUR * 6) * 5), 100).toFixed(0) + "%"],
      ['rng', (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nova', 'nova1_aug'], [
      ['str1', (STR * 120).toFixed(0)],
      ['str2', (Math.round(DUR * 6) * STR * 120).toFixed(0)],
      ['rng', (RNG * 8).toFixed(2) + "m"],
    ]);
    formula_loader(['nova', 'nova2_aug', 'nova2'], [
      ['str1', (STR * 200).toFixed(0)],
      ['str2', (STR * 10).toFixed(0)],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['nova', 'nova2_aug'], [
      ['rng', (RNG * 3).toFixed(2) + "m"],
    ]);
    formula_loader(['nova', 'nova3_aug', 'nova3'], [
      ['dur', (DUR * 16).toFixed(2) + "s"],
      ['rng', (RNG * 50).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['nova', 'nova3_aug'], [
      ['dur', (DUR * 7).toFixed(2) + "s"]
    ]);
    formula_loader(['nova', 'nova4'], [
      ['str1', (STR * 800).toFixed(0)],
      ['str2', Math.min((30 + (STR * 100 - 100)), 75).toFixed(2) + "%"],
      ['dur1', (DUR * 6).toFixed(2) + "s"],
      ['dur2', (5 + DUR * 6 * 5).toFixed(2) + "m"],
      ['dur3', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Nyx
    formula_loader(['nyx', 'nyx1_aug', 'nyx1'], [
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 60).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['nyx', 'nyx1_aug'], [
      ['str', (STR * 500).toFixed(2) + "%"]
    ]);
    formula_loader(['nyx', 'nyx2_aug', 'nyx2'], [
      ['str', Math.min((STR * 80), 100).toFixed(2) + "%"],
      ['dur', (DUR * 11).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['nyx', 'nyx2_aug'], [
      ['dur', (DUR * 10).toFixed(2) + "s"]
    ]);
    formula_loader(['nyx', 'nyx3'], [
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['nyx', 'nyx4'], [
      ['str1', (STR * 200).toFixed(0) + "/s"],
      ['str2', (STR * 1500).toFixed(0)],
      ['str3', (STR * 0.03).toFixed(2) + "%"],
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff1', (EFF * 25).toFixed(2)],
      ['eff2', (EFF * 8).toFixed(2)],
      ['cha', (CHA * 4).toFixed(2) + "/s"],
    ]);
    //Oberon
    formula_loader(['oberon', 'oberon1_aug', 'oberon1'], [
      ['str1', (STR * 500).toFixed(0)],
      ['str2', (STR * 150).toFixed(0)],
      ['str3', (STR * 6).toFixed(0)],
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng1', (RNG * 50).toFixed(2) + "m"],
      ['rng2', (RNG * 12.5).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['oberon', 'oberon1_aug'], [
      ['str', (STR * 100).toFixed(2) + "%"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['oberon', 'oberon2_aug', 'oberon2'], [
      ['str1', (STR * 100).toFixed(0) + "/s"],
      ['str2', Math.min((STR * 15), 100).toFixed(2) + "%"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng1', (Math.min(180 + 135 * (RNG - 1), 360)).toFixed(2) + "°"],
      ['rng2', (15 + 11.25 * (RNG - 1)).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['oberon', 'oberon2_aug'], [
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['str', (STR * 100 * DUR * 40).toFixed(0)],
    ]);
    formula_loader(['oberon', 'oberon3_aug', 'oberon3'], [
      ['str1', (4 / STR).toFixed(2) + "s"],
      ['str2', "+" + (STR * 200).toFixed(0)],
      ['str3', (STR * 125).toFixed(0)],
      ['str4', (STR * 40).toFixed(0) + "/s"],
      ['dur1', (DUR * 45).toFixed(2) + "%"],
      ['dur2', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * (2 + 3 * TARGET)).toFixed(2) + "/s"]
    ]);
    formula_loader(['oberon', 'oberon3_aug'], [
      ['str', Math.min((STR * 50), 100).toFixed(2) + "%"]
    ]);
    formula_loader(['oberon', 'oberon4_aug', 'oberon4'], [
      ['str1', Math.min((STR * 30), 100).toFixed(2) + "%"],
      ['str2', (STR * 1250).toFixed(0)],
      ['str3', (STR * 625).toFixed(0)],
      ['dur', (DUR * 4).toFixed(2) + "s"],
      ['rng1', (RNG * 4).toFixed(2) + "m"],
      ['rng2', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['oberon', 'oberon4_aug'], [
      ['str1', (STR * 150).toFixed(0) + "/s"],
      ['str2', "+" + (STR * 250).toFixed(0)],
      ['dur', (DUR * 10).toFixed(2) + "s"]
    ]);
    //Octavia
    formula_loader(['octavia', 'octavia1'], [
      ['str', (STR * 2.5).toFixed(2) + "%"],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['octavia', 'octavia2'], [
      ['str', (STR * 125).toFixed(2)],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 6).toFixed(2) + "m - " + (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['octavia', 'octavia3'], [
      ['str1', (STR * 35).toFixed(2) + "%"],
      ['str2', (STR * 30).toFixed(2) + "%"],
      ['dur1', (DUR * 20).toFixed(2) + "s"],
      ['dur2', (DUR * 15).toFixed(2) + "s"],
      ['rng', (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['octavia', 'octavia4'], [
      ['str', (STR * 0.25).toFixed(2) + "x - " + (STR * 2).toFixed(2) + "x"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['rng', (RNG * 14).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Revenant
    formula_loader(['revenant', 'revenant1'], [
      ['str', (STR * 1000).toFixed(0) + "/s"],
      ['dur1', (DUR * 30).toFixed(2) + "s"],
      ['dur2', (DUR * 10).toFixed(2) + "s"],
      ['rng1', (RNG * 25).toFixed(2) + "m"],
      ['rng2', (RNG * 2).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['revenant', 'revenant2'], [
      ['str', (Math.floor(STR * 6))],
      ['dur', (DUR * 5).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['revenant', 'revenant3_aug', 'revenant3'], [
      ['str1', Math.min((STR * 8), 100).toFixed(0) + "%"],
      ['str2', Math.min((STR * 40), 100).toFixed(0) + "%"],
      ['dur', (DUR).toFixed(2) + "s"],
      ['rng', (RNG * 6).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['revenant', 'revenant3_aug'], [
      ['dur', (DUR * 10).toFixed(2) + "s"]
    ]);
    formula_loader(['revenant', 'revenant4'], [
      ['str', (STR * 1250).toFixed(0) + "/s - " + (STR * 2500).toFixed(0) + "/s"],
      ['rng', (RNG * 0.1).toFixed(2) + "m - " + (RNG * 0.2).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)],
      ['cha', (CHA * 20).toFixed(2) + "/s - " + (CHA * 40).toFixed(2) + "/s"],
    ]);
    //Rhino
    formula_loader(['rhino', 'rhino1_aug', 'rhino1'], [
      ['str', (STR * 650 * COMBO).toFixed(0)],
      ['dur', (DUR).toFixed(2) + "s"],
      ['rng1', (RNG * 12 * (1 + 0.25 * Math.min(COMBO - 1, 2))).toFixed(2) + "m"],
      ['rng2', (RNG * 2).toFixed(2) + "m"],
      ['eff', (EFF * 25 / COMBO).toFixed(2)]
    ]);
    formula_loader(['rhino', 'rhino1_aug'], [
      ['str', (STR * 50 * TARGET).toFixed(2) + "%"],
      ['dur', (DUR * 10).toFixed(2) + "s"]
    ]);
    formula_loader(['rhino', 'rhino2_aug', 'rhino2'], [
      ['str', ((1200 + (2.5 * ((190 + aARMOR) * (1 + xARMOR)) * (1 + existance(IRONCLAD_CHARGE)))) * STR).toFixed(0)],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['rhino', 'rhino2_aug'], [
      ['rng', (RNG * 8).toFixed(2) + "m"]
    ]);
    formula_loader(['rhino', 'rhino3_aug', 'rhino3'], [
      ['str', (STR * 50).toFixed(2) + "%"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['rhino', 'rhino3_aug'], [
      ['str', (STR * 150).toFixed(0)],
      ['dur', (DUR * 6).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"]
    ]);
    formula_loader(['rhino', 'rhino4_aug', 'rhino4'], [
      ['str', (STR * 800).toFixed(0)],
      ['dur', (DUR * 8).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    formula_loader(['rhino', 'rhino4_aug'], [
      ['str', (STR * 80 * TARGET).toFixed(0)]
    ]);
    //Saryn
    formula_loader(['saryn', 'saryn1_aug', 'saryn1'], [
      ['str1', (STR * 10).toFixed(0)],
      ['str2', (STR * 2).toFixed(2)],
      ['str3', Math.min((STR * 50), 100).toFixed(2) + "%"],
      ['str4', (20 / STR).toFixed(2) + "%"],
      ['dur', (10 / DUR).toFixed(2) + "%"],
      ['rng1', (RNG * 60).toFixed(2) + "m"],
      ['rng2', (RNG * 16).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['saryn', 'saryn1_aug'], [
      ['str', (STR * 100).toFixed(2) + "%"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['saryn', 'saryn2_aug', 'saryn2'], [
      ['str1', (STR * 500).toFixed(0)],
      ['str2', (STR * 400).toFixed(2)],
      ['str3', (STR * 1.5).toFixed(2) + "x"],
      ['dur1', (DUR * 10).toFixed(2) + "s"],
      ['dur2', (DUR * 5).toFixed(2) + "s"],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['saryn', 'saryn2_aug'], [
      ['str', (STR * 50).toFixed(0) + "/s"],
    ]);
    formula_loader(['saryn', 'saryn3_aug', 'saryn3'], [
      ['str1', (STR * 30).toFixed(2) + "%"],
      ['str2', (STR * 60).toFixed(2) + "%"],
      ['str3', Math.min((STR * 40), 90).toFixed(2) + "%"],
      ['dur', (DUR * 45).toFixed(2) + "s"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['saryn', 'saryn3_aug'], [
      ['str', (STR * 300).toFixed(0) + " - " + (STR * 600).toFixed(0)],
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng', (RNG * 5).toFixed(2) + "m"],
    ]);
    formula_loader(['saryn', 'saryn4'], [
      ['str', (STR * 150).toFixed(0) + "/s - " + (STR * 600).toFixed(0) + "/s"],
      ['dur', (DUR * 6).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2) + "m"]
    ]);
    //Titania
    formula_loader(['titania', 'titania1'], [
      ['dur', (DUR * 16).toFixed(2) + "s"],
      ['rng1', (RNG * 5).toFixed(2) + "m"],
      ['rng2', (RNG * 50).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['titania', 'titania2'], [
      ['str', (STR * 500).toFixed(0)],
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['titania', 'titania3_aug', 'titania3'], [
      ['str1', (STR * 350).toFixed(0) + "/s"],
      ['str2', (STR * 2500).toFixed(0)],
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['rng1', (RNG * 25).toFixed(2) + "m"],
      ['rng2', (RNG * 20).toFixed(2) + "m"],
      ['rng3', (RNG * 8).toFixed(2) + "m"],
      ['rng4', (RNG * 2.5).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['titania', 'titania3_aug', ], [
      ['str', (STR * 100).toFixed(2) + "%"]
    ]);
    formula_loader(['titania', 'titania4_aug', 'titania4'], [
      ['str1', (STR * 160).toFixed(0)],
      ['str2', (STR * 200).toFixed(0)],
      ['str3', (STR * 80).toFixed(0)],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (EFF * 5).toFixed(2) + "/s"]
    ]);
    formula_loader(['titania', 'titania4_aug'], [
      ['str', (STR * 25).toFixed(0) + "% - " + (STR * 100).toFixed(0) + "%"],
      ['dur', (DUR * 8).toFixed(2) + "s"]
    ]);
    //Trinity
    formula_loader(['trinity', 'trinity1_aug', 'trinity1'], [
      ['str1', (STR * 45).toFixed(2) + "%"],
      ['str2', (STR * 400).toFixed(0)],
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng', (RNG * 100).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['trinity', 'trinity1_aug'], [
      ['str', (STR * 25).toFixed(2) + "%"]
    ]);
    formula_loader(['trinity', 'trinity2'], [
      ['str1', (STR * 25).toFixed(0)],
      ['str2', (STR * 6.25).toFixed(2) + "%"],
      ['dur', (DUR * 9).toFixed(2) + "s"],
      ['rng1', (RNG * 100).toFixed(2) + "m"],
      ['rng2', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['trinity', 'trinity3_aug', 'trinity3'], [
      ['dur', (DUR * 12).toFixed(2) + "s"],
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['trinity', 'trinity3_aug'], [
      ['str', Math.min((STR * 45), 100).toFixed(2) + "%"]
    ]);
    formula_loader(['trinity', 'trinity4'], [
      ['str1', Math.min((STR * 80), 100).toFixed(2) + "%"],
      ['str2', Math.min((STR * 50), 75).toFixed(2) + "%"],
      ['dur', (DUR * 10).toFixed(2) + "s"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Valkyr
    formula_loader(['valkyr', 'valkyr1'], [
      ['str', (STR * 500 * COMBO).toFixed(0)],
      ['dur', (DUR).toFixed(2) + "s"],
      ['rng', (RNG * 75).toFixed(2) + "m"],
      ['eff', (EFF * 25 * (1 / COMBO)).toFixed(2)]
    ]);
    formula_loader(['valkyr', 'valkyr2_aug', 'valkyr2'], [
      ['str1', (STR * 50).toFixed(2) + "%"],
      ['str2', Math.min((STR * 30), 75).toFixed(2) + "%"],
      ['dur', (DUR * 15).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['valkyr', 'valkyr2_aug'], [
      ['dur', (DUR * 2).toFixed(2) + "s"]
    ]);
    formula_loader(['valkyr', 'valkyr3_aug', 'valkyr3'], [
      ['str1', (STR * 3.5).toFixed(2) + "x"],
      ['str2', (STR * 1000).toFixed(0)],
      ['rng', (RNG * 10).toFixed(2) + "m"],
      ['eff', (EFF * 5).toFixed(2)]
    ]);
    formula_loader(['valkyr', 'valkyr3_aug'], [
      ['str', (STR * 200).toFixed(2) + "%"]
    ]);
    formula_loader(['valkyr', 'valkyr4_aug', 'valkyr4'], [
      ['str', (STR * 250).toFixed(0)],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (CHA * 2.5).toFixed(2) + "/s - " + (CHA * 15).toFixed(2) + "/s"]
    ]);
    formula_loader(['valkyr', 'valkyr4_aug'], [
      ['rng', (RNG * 50).toFixed(2) + "m"]
    ]);
    //Volt
    formula_loader(['volt', 'volt1_aug', 'volt1'], [
      ['str', (STR * 200).toFixed(0)],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['volt', 'volt1_aug'], [
      ['str', (STR * 100).toFixed(2) + "%"],
      ['dur', (DUR * 40).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"]
    ]);
    formula_loader(['volt', 'volt2_aug', 'volt2'], [
      ['str1', (STR * 50).toFixed(2) + "%"],
      ['str2', (STR * 17).toFixed(2) + "%"],
      ['dur', (DUR * 10).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['volt', 'volt2_aug'], [
      ['str', (STR * 175).toFixed(0)]
    ]);
    formula_loader(['volt', 'volt3_aug', 'volt3'], [
      ['dur', (DUR * 25).toFixed(2) + "s"],
      ['eff1', (EFF * 50).toFixed(2)],
      ['eff2', (4 / EFF).toFixed(2) + "m"]
    ]);
    formula_loader(['volt', 'volt3_aug'], [
      ['str', (STR * 300).toFixed(2) + "%"]
    ]);
    formula_loader(['volt', 'volt4'], [
      ['str', (STR * 1000).toFixed(0)],
      ['dur', (DUR * 6).toFixed(2) + "s"],
      ['rng1', (RNG * 20).toFixed(2) + "m"],
      ['rng2', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
    //Wisp
    formula_loader(['wisp', 'wisp1'], [
      ['str1', (STR * 300).toFixed(0)],
      ['str2', (STR * 30).toFixed(2) + "/s"],
      ['str3', (STR * 20).toFixed(2) + "%"],
      ['str4', (STR * 30).toFixed(2) + "%"],
      ['str5', (STR * 5).toFixed(0)],
      ['rng1', (RNG * 5).toFixed(2) + "m"],
      ['rng2', (RNG * 15).toFixed(2) + "m"],
      ['dur', (DUR * 30).toFixed(2) + "s"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['wisp', 'wisp2'], [
      ['dur', (DUR * 4).toFixed(2) + "s"],
      ['eff', (EFF * 35).toFixed(2)]
    ]);
    formula_loader(['wisp', 'wisp3'], [
      ['str1', (STR * 2).toFixed(2) + "x"],
      ['str2', Math.min((STR * 20), 100).toFixed(2) + "/s"],
      ['dur', (DUR * 16).toFixed(2) + "s"],
      ['rng', (RNG * 15).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['wisp', 'wisp4'], [
      ['str', (STR * 1500).toFixed(0) + "/s"],
      ['rng', (RNG * 40).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)],
      ['cha', (EFF * 12).toFixed(2) + "/s"]
    ]);
    //Wukong
    formula_loader(['wukong', 'wukong1_aug', 'wukong1'], [
      ['str', (STR * 2).toFixed(2) + "x"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['wukong', 'wukong1_aug'], [
      ['rng', (RNG * 20).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['wukong', 'wukong2_aug', 'wukong2'], [
      ['str', (STR * 1).toFixed(2) + "%/m"],
      ['dur', (DUR * 2).toFixed(2) + "s"],
      ['rng', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['wukong', 'wukong2_aug'], [
      ['rng', (RNG * 4).toFixed(2) + "m"],
      ['dur', (DUR * 14).toFixed(2) + "s"]
    ]);
    formula_loader(['wukong', 'wukong3'], [
      ['str1', (STR * 7.5).toFixed(2) + "x"],
      ['str2', (STR * 1.5).toFixed(2) + "x"],
      ['dur1', (DUR * 2).toFixed(2) + "s"],
      ['dur2', (DUR * 25).toFixed(2) + "s"],
      ['rng', (RNG * 12).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2)]
    ]);
    formula_loader(['wukong', 'wukong4_aug', 'wukong4'], [
      ['str', (STR * 250).toFixed(0)],
      ['eff', (EFF * 10).toFixed(2)],
      ['cha', (CHA * 5).toFixed(2) + "/s"]
    ]);
    formula_loader(['wukong', 'wukong4_aug'], [
      ['str', (STR * 15).toFixed(2) + "%"],
      ['dur', (1 / DUR).toFixed(2) + "/s"]
    ]);
    //Zephyr
    formula_loader(['zephyr', 'zephyr1'], [
      ['str', (STR * 500).toFixed(0)],
      ['dur1', (DUR * 30).toFixed(2) + "s"],
      ['dur2', "≤" + (DUR * 12.5).toFixed(2) + "m"],
      ['rng1', (RNG * 2).toFixed(2) + "m"],
      ['rng2', (RNG * 7).toFixed(2) + "m"],
      ['eff', (EFF * 25).toFixed(2) + " - " + (EFF * 12.5).toFixed(2)]
    ]);
    formula_loader(['zephyr', 'zephyr2'], [
      ['str', (STR * 500).toFixed(0)],
      ['rng', (RNG * 8).toFixed(2) + "m"],
      ['eff', (EFF * 50).toFixed(2) + " - " + (EFF * 25).toFixed(2)]
    ]);
    formula_loader(['zephyr', 'zephyr3_aug', 'zephyr3'], [
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 6).toFixed(2) + "m"],
      ['eff', (EFF * 75).toFixed(2)]
    ]);
    formula_loader(['zephyr', 'zephyr3_aug'], [
      ['str1', (STR * 40).toFixed(2) + "%"],
      ['str2', (STR * 100).toFixed(2) + "%"]
    ]);
    formula_loader(['zephyr', 'zephyr4'], [
      ['str', (STR * 120).toFixed(0)],
      ['dur', (DUR * 20).toFixed(2) + "s"],
      ['rng', (RNG * 25).toFixed(2) + "m"],
      ['eff', (EFF * 100).toFixed(2)]
    ]);
  } // function update_table end

  // prepares formulas for certain range of IDs and puts them inside output cells
  function formula_loader(idCall, meta_array, option) {
    var i, j;
    if (option) { //required for warframes that have multi-state abiiities (e.g. Elemental Ward)
      value_assignment(idCall, meta_array, "");
      value_assignment(idCall, meta_array, "_" + option);
    } else {
      value_assignment(idCall, meta_array, "");
    }

    function value_assignment(idCall, meta_array, option) {
      var idName = "#" + idCall[idCall.length - 1] + option + "_"; //LAST ELEMENT IS RELEVANT!
      for (i = 0; i < idCall.length; i++) { //for every possible ID
        if ($("#maximization_" + idCall[i]).length) { //If the proper ID is called in the page (e.g. maximization_ash1)
          for (j = 0; j < meta_array.length; j++) { //Associate correspondig values
            $(idName + meta_array[j][0]).text(meta_array[j][1]);
          }
        }
      }
    }
  }

  // gives a value in case there is none available
  function existance(val) {
    if (val) {
      return val;
    } else {
      return 0;
    }
  }

  //  loaders
  // input tables
  table_loader("table_main", buildTable);
  table_loader("table_armor", buildTable([
    ['Armor multiplier', 'xARMOR', '0'],
    ['Additive Armor', 'aARMOR', '0']
  ]));
  table_loader("table_armor_target", buildTable([
    ['Armor multiplier', 'xARMOR', '0'],
    ['Additive Armor', 'aARMOR', '0'],
    ['Number of targets', 'TARGET', '1']
  ]));
  table_loader("table_atlas", buildTable([
    ['Armor multiplier', 'xARMOR', '0'],
    ['Additive Armor', 'aARMOR', '0'],
    ['Health bonus', 'HEALTH', '0'],
    ['Shields bonus', 'SHIELDS', '0'],
    ['Combo N°', 'COMBO', '1']
  ]));
  table_loader("table_combo", buildTable([
    ['Combo N°', 'COMBO', '1']
  ]));
  table_loader("table_nidus", buildTable([
    ['Stack N°', 'STACK', '0']
  ]));
  table_loader("table_rhino", buildTable([
    ['Armor multiplier', 'xARMOR', '0'],
    ['Additive Armor', 'aARMOR', '85'],
    ['Combo N°', 'COMBO', '1'],
    ['Number of targets', 'TARGET', '0']
  ]));
  table_loader("table_rumblers", buildTable([
    ['Armor multiplier', 'xARMOR', '0'],
    ['Additive Armor', 'aARMOR', '0'],
    ['Health bonus', 'HEALTH', '0'],
    ['Shields bonus', 'SHIELDS', '0']
  ]));
  table_loader("table_target", buildTable([
    ['Number of targets', 'TARGET', '1']
  ]));

  table_loader("table_chroma", buildTable([
    ['Element', 'OPTION', ['Heat', 'Electric', 'Cold', 'Toxin']]
  ]));
  table_loader("table_equinox", buildTable([
    ['Form', 'OPTION', ['Night', 'Day']]
  ]));

  //  Warframes
  // Ash
  table_loader("ash1", abilityGenerator(AshMap.shuriken));
  table_loader("ash2", abilityGenerator(AshMap.smoke_screen));
  table_loader("ash3", abilityGenerator(AshMap.teleport));
  table_loader("ash4", abilityGenerator(AshMap.blade_storm));
  table_loader("ash1_aug", augmentGenerator(AshMap, "Shuriken", "Seeking Shuriken"));
  table_loader("ash3_aug", augmentGenerator(AshMap, "Teleport", "Fatal Teleport"));
  table_loader("ash4_aug", augmentGenerator(AshMap, "Blade Storm", "Rising Storm"));
  table_loader("ash", warframeGenerator(
    AshMap,
    "Shuriken",
    "Seeking Shuriken",
    "Smoke Screen",
    "Smoke Shadow",
    "Teleport",
    "Fatal Teleport",
    "Blade Storm",
    "Rising Storm"
  ));
  // Atlas
  table_loader("atlas1", abilityGenerator(AtlasMap.landslide));
  table_loader("atlas2", abilityGenerator(AtlasMap.tectonics));
  table_loader("atlas3", abilityGenerator(AtlasMap.petrify));
  table_loader("atlas4", abilityGenerator(AtlasMap.rumblers));
  table_loader("atlas1_aug", augmentGenerator(AtlasMap, "Landslide", "Path of Statues"));
  table_loader("atlas3_aug", augmentGenerator(AtlasMap, "Petrify", "Ore Gaze"));
  table_loader("atlas4_aug", augmentGenerator(AtlasMap, "Rumblers", "Titanic Rumbler"));
  table_loader("atlas", warframeGenerator(
    AtlasMap,
    "Landslide",
    "Path of Statues",
    "Tectonics",
    "Tectonic Fracture",
    "Petrify",
    "Ore Gaze",
    "Rumblers",
    "Titanic Rumbler"
  ));
  //Banshee
  table_loader("banshee1", abilityGenerator(BansheeMap.sonic_boom));
  table_loader("banshee2", abilityGenerator(BansheeMap.sonar));
  table_loader("banshee3", abilityGenerator(BansheeMap.silence));
  table_loader("banshee4", abilityGenerator(BansheeMap.sound_quake));
  table_loader("banshee1_aug", augmentGenerator(BansheeMap, "Sonic Boom", "Sonic Fracture"));
  table_loader("banshee3_aug", augmentGenerator(BansheeMap, "Silence", "Savage silence"));
  table_loader("banshee4_aug", augmentGenerator(BansheeMap, "Sound Quake", "Resonating Quake"));
  table_loader("banshee", warframeGenerator(
    BansheeMap,
    "Sonic Boom",
    "Sonic Fracture",
    "Sonar",
    "Resonance",
    "Silence",
    "Savage Silence",
    "Sound Quake",
    "Resonating Quake"
  ));
  //Baruuk
  table_loader("baruuk1", abilityGenerator(BaruukMap.elude));
  table_loader("baruuk2", abilityGenerator(BaruukMap.lull));
  table_loader("baruuk3", abilityGenerator(BaruukMap.desolate_hands));
  table_loader("baruuk4", abilityGenerator(BaruukMap.serene_storm));
  table_loader("baruuk", warframeGenerator(
    BaruukMap,
    "Elude",
    "",
    "Lull",
    "",
    "Desolate Hands",
    "",
    "Serene Storm",
    ""
  ));
  //Chroma
  table_loader("chroma1", abilityGenerator(ChromaMap.spectral_scream));
  table_loader("chroma3", abilityGenerator(ChromaMap.vex_armor));
  table_loader("chroma4", abilityGenerator(ChromaMap.effigy));
  table_loader("chroma1_aug", augmentGenerator(ChromaMap, "Spectral Scream", "Afterburn"));
  table_loader("chroma3_aug", augmentGenerator(ChromaMap, "Vex Armor", "Vexing Retaliation"));
  table_loader("chroma4_aug", augmentGenerator(ChromaMap, "Effigy", "Guided Effigy"));
  //Ember
  table_loader("ember1", abilityGenerator(EmberMap.fireball));
  table_loader("ember2", abilityGenerator(EmberMap.accelerant));
  table_loader("ember3", abilityGenerator(EmberMap.fire_blast));
  table_loader("ember4", abilityGenerator(EmberMap.world_on_fire));
  table_loader("ember1_aug", augmentGenerator(EmberMap, "Fireball", "Fireball Frenzy"));
  table_loader("ember2_aug", augmentGenerator(EmberMap, "Accelerant", "Flash Accelerant"));
  table_loader("ember", warframeGenerator(
    EmberMap,
    "Fireball",
    "Fireball Frenzy",
    "Accelerant",
    "Flash Accelerant",
    "Fire Blast",
    "Fire Fright",
    "World On Fire",
    "Firequake"
  ));
  //Excalibur
  table_loader("excalibur1", abilityGenerator(ExcaliburMap.slash_dash));
  table_loader("excalibur2", abilityGenerator(ExcaliburMap.radial_blind));
  table_loader("excalibur3", abilityGenerator(ExcaliburMap.radial_javelin));
  table_loader("excalibur4", abilityGenerator(ExcaliburMap.exalted_blade));
  table_loader("excalibur1_aug", augmentGenerator(ExcaliburMap, "Slash Dash", "Surging Dash"));
  table_loader("excalibur2_aug", augmentGenerator(ExcaliburMap, "Radial Blind", "Radial Finish"));
  table_loader("excalibur3_aug", augmentGenerator(ExcaliburMap, "Radial Javelin", "Furious Javelin"));
  table_loader("excalibur4_aug", augmentGenerator(ExcaliburMap, "Exalted Blade", "Chromatic Blade"));
  table_loader("excalibur", warframeGenerator(
    ExcaliburMap,
    "Slash Dash",
    "Surging Dash",
    "Radial Blind",
    "Radial Finish",
    "Radial Javelin",
    "Furious Javelin",
    "Exalted Blade",
    "Chromatic Blade"
  ));
  //Frost
  table_loader("frost1", abilityGenerator(FrostMap.freeze));
  table_loader("frost2", abilityGenerator(FrostMap.ice_wave));
  table_loader("frost3", abilityGenerator(FrostMap.snow_globe));
  table_loader("frost4", abilityGenerator(FrostMap.avalanche));
  table_loader("frost1_aug", augmentGenerator(FrostMap, "Freeze", "Freeze Force"));
  table_loader("frost2_aug", augmentGenerator(FrostMap, "Ice Wave", "Ice Wave Impedance"));
  table_loader("frost3_aug", augmentGenerator(FrostMap, "Snow Globe", "Chilling Globe"));
  table_loader("frost4_aug", augmentGenerator(FrostMap, "Avalanche", "Icy Avalanche"));
  table_loader("frost", warframeGenerator(
    FrostMap,
    "Freeze",
    "Freeze Force",
    "Ice Wave",
    "Ice Wave Impedance",
    "Snow Globe",
    "Chilling Globe",
    "Avalanche",
    "Icy Avalanche"
  ));
  //Gara
  table_loader("gara1", abilityGenerator(GaraMap.shattered_lash));
  table_loader("gara2", abilityGenerator(GaraMap.splinter_storm));
  table_loader("gara3", abilityGenerator(GaraMap.spectrorage));
  table_loader("gara4", abilityGenerator(GaraMap.mass_vitrify));
  table_loader("gara2_aug", augmentGenerator(GaraMap, "Splinter Storm", "Mending Splinters"));
  table_loader("gara", warframeGenerator(
    GaraMap,
    "Shattered Lash",
    "",
    "Splinter Storm",
    "Mending Splinters",
    "Spectrorage",
    "Spectrosiphon",
    "Mass Vitrify",
    ""
  ));
  //Garuda
  table_loader("garuda1", abilityGenerator(GarudaMap.dread_mirror));
  table_loader("garuda2", abilityGenerator(GarudaMap.blood_altar));
  table_loader("garuda3", abilityGenerator(GarudaMap.bloodletting));
  table_loader("garuda4", abilityGenerator(GarudaMap.seeking_talons));
  table_loader("garuda1_aug", augmentGenerator(GarudaMap, "Dread Mirror", "Dread Ward"));
  table_loader("garuda", warframeGenerator(
    GarudaMap,
    "Dread Mirror",
    "Dread Ward",
    "Blood Altar",
    "",
    "Bloodletting",
    "",
    "Seeking Talons",
    ""
  ));
  //Gauss
  table_loader("gauss1", abilityGenerator(GaussMap.mach_rush));
  table_loader("gauss2", abilityGenerator(GaussMap.kinetic_plating));
  table_loader("gauss3", abilityGenerator(GaussMap.thermal_sunder));
  table_loader("gauss4", abilityGenerator(GaussMap.redline));
  table_loader("gauss", warframeGenerator(
    GaussMap,
    "Mach Rush",
    "",
    "Kinetic Plating",
    "",
    "Thermal Sunder",
    "",
    "Redline",
    ""
  ));
  //Harrow
  table_loader("harrow1", abilityGenerator(HarrowMap.condemn));
  table_loader("harrow2", abilityGenerator(HarrowMap.penance));
  table_loader("harrow3", abilityGenerator(HarrowMap.thurible));
  table_loader("harrow4", abilityGenerator(HarrowMap.covenant));
  table_loader("harrow3_aug", augmentGenerator(HarrowMap, "Thurible", "Warding Thurible"));
  table_loader("harrow4_aug", augmentGenerator(HarrowMap, "Covenant", "Lasting Covenant"));
  table_loader("harrow", warframeGenerator(
    HarrowMap,
    "Condemn",
    "",
    "Penance",
    "",
    "Thurible",
    "Warding Thurible",
    "Covenant",
    "Lasting Covenant"
  ));
  //Hildryn
  table_loader("hildryn1", abilityGenerator(HildrynMap.balefire));
  table_loader("hildryn2", abilityGenerator(HildrynMap.shield_pillage));
  table_loader("hildryn3", abilityGenerator(HildrynMap.haven));
  table_loader("hildryn4", abilityGenerator(HildrynMap.aegis_storm));
  table_loader("hildryn", warframeGenerator(
    HildrynMap,
    "Balefire",
    "",
    "Shield Pillage",
    "",
    "Haven",
    "",
    "Aegis Storm",
    ""
  ));
  //Hydroid
  table_loader("hydroid1", abilityGenerator(HydroidMap.tempest_barrage));
  table_loader("hydroid2", abilityGenerator(HydroidMap.tidal_surge));
  table_loader("hydroid3", abilityGenerator(HydroidMap.undertow));
  table_loader("hydroid4", abilityGenerator(HydroidMap.tentacle_swarm));
  table_loader("hydroid2_aug", augmentGenerator(HydroidMap, "Tidal Surge", "Tidal Impunity"));
  table_loader("hydroid3_aug", augmentGenerator(HydroidMap, "Undertow", "Curative Undertow"));
  table_loader("hydroid", warframeGenerator(
    HydroidMap,
    "Tempest Barrage",
    "Corroding Barrage",
    "Tidal Surge",
    "Tidal Impunity",
    "Undertow",
    "Curative Undertow",
    "Tentacle Swarm",
    "Pilfering Swarm"
  ));
  //Inaros
  table_loader("inaros1", abilityGenerator(InarosMap.desiccation));
  table_loader("inaros2", abilityGenerator(InarosMap.devour));
  table_loader("inaros3", abilityGenerator(InarosMap.sandstorm));
  table_loader("inaros4", abilityGenerator(InarosMap.scarab_swarm));
  table_loader("inaros1_aug", augmentGenerator(InarosMap, "Desiccation", "Desiccation's Curse"));
  table_loader("inaros3_aug", augmentGenerator(InarosMap, "Sandstorm", "Elemental Sandstorm"));
  table_loader("inaros4_aug", augmentGenerator(InarosMap, "Scarab Swarm", "Negation Swarm"));
  table_loader("inaros", warframeGenerator(
    InarosMap,
    "Desiccation",
    "Desiccation's Curse",
    "Devour",
    "",
    "Sandstorm",
    "Elemental Sandstorm",
    "Scarab Swarm",
    "Negation Swarm"
  ));
  //Ivara
  table_loader("ivara1", abilityGenerator(IvaraMap.quiver));
  table_loader("ivara2", abilityGenerator(IvaraMap.navigator));
  table_loader("ivara3", abilityGenerator(IvaraMap.prowl));
  table_loader("ivara4", abilityGenerator(IvaraMap.artemis_bow));
  table_loader("ivara1_aug", augmentGenerator(IvaraMap, "Quiver", "Empowered Quiver"));
  table_loader("ivara2_aug", augmentGenerator(IvaraMap, "Navigator", "Piercing Navigator"));
  table_loader("ivara3_aug", augmentGenerator(IvaraMap, "Prowl", "Infiltrate"));
  table_loader("ivara4_aug", augmentGenerator(IvaraMap, "Artemis Bow", "Concentrated Arrow"));
  table_loader("ivara", warframeGenerator(
    IvaraMap,
    "Quiver",
    "Empowered Quiver",
    "Navigator",
    "Piercing Navigator",
    "Prowl",
    "Infiltrate",
    "Artemis Bow",
    "Concentrated Arrow"
  ));
  //Khora
  table_loader("khora1", abilityGenerator(KhoraMap.whipclaw));
  table_loader("khora2", abilityGenerator(KhoraMap.ensnare));
  table_loader("khora3", abilityGenerator(KhoraMap.venari));
  table_loader("khora4", abilityGenerator(KhoraMap.strangledome));
  table_loader("khora1_aug", augmentGenerator(KhoraMap, "Whipclaw", "Accumulating Whipclaw"));
  table_loader("khora", warframeGenerator(
    KhoraMap,
    "Whipclaw",
    "Accumulating Whipclaw",
    "Ensnare",
    "",
    "Venari",
    "Venari Bodyguard",
    "Strangledome",
    "Pilfering Strangledome"
  ));
  //Limbo
  table_loader("limbo1", abilityGenerator(LimboMap.banish));
  table_loader("limbo2", abilityGenerator(LimboMap.stasis));
  table_loader("limbo3", abilityGenerator(LimboMap.rift_surge));
  table_loader("limbo4", abilityGenerator(LimboMap.cataclysm));
  table_loader("limbo1_aug", augmentGenerator(LimboMap, "Banish", "Rift Haven"));
  table_loader("limbo3_aug", augmentGenerator(LimboMap, "Rift Surge", "Rift Torrent"));
  table_loader("limbo", warframeGenerator(
    LimboMap,
    "Banish",
    "Rift Haven",
    "Stasis",
    "",
    "Rift Surge",
    "Rift Torrent",
    "Cataclysm",
    "Cataclysm Continuum"
  ));
  //Loki
  table_loader("loki1", abilityGenerator(LokiMap.decoy));
  table_loader("loki2", abilityGenerator(LokiMap.invisibility));
  table_loader("loki3", abilityGenerator(LokiMap.switch_teleport));
  table_loader("loki4", abilityGenerator(LokiMap.radial_disarm));
  table_loader("loki3_aug", augmentGenerator(LokiMap, "Switch Teleport", "Safeguard Switch"));
  table_loader("loki", warframeGenerator(
    LokiMap,
    "Decoy",
    "Savior Decoy",
    "Invisibility",
    "Hushed Invisibility",
    "Switch Teleport",
    "Safeguard Switch",
    "Radial Disarm",
    "Irradiating Disarm"
  ));
  //Mag
  table_loader("mag1", abilityGenerator(MagMap.pull));
  table_loader("mag2", abilityGenerator(MagMap.magnetize));
  table_loader("mag3", abilityGenerator(MagMap.polarize));
  table_loader("mag4", abilityGenerator(MagMap.crush));
  table_loader("mag2_aug", augmentGenerator(MagMap, "Magnetize", "Magnetized Discharge"));
  table_loader("mag3_aug", augmentGenerator(MagMap, "Polarize", "Counter Pulse"));
  table_loader("mag4_aug", augmentGenerator(MagMap, "Crush", "Fracturing Crush"));
  table_loader("mag", warframeGenerator(
    MagMap,
    "Pull",
    "Greedy Pull",
    "Magnetize",
    "Magnetized Discharge",
    "Polarize",
    "Counter Pulse",
    "Crush",
    "Fracturing Crush"
  ));
  //Mesa
  table_loader("mesa1", abilityGenerator(MesaMap.ballistic_battery));
  table_loader("mesa2", abilityGenerator(MesaMap.shooting_gallery));
  table_loader("mesa3", abilityGenerator(MesaMap.shatter_shield));
  table_loader("mesa4", abilityGenerator(MesaMap.peacemaker));
  table_loader("mesa2_aug", augmentGenerator(MesaMap, "Shooting Gallery", "Muzzle Flash"));
  table_loader("mesa", warframeGenerator(
    MesaMap,
    "Ballistic Battery",
    "Ballistic Bullseye",
    "Shooting Gallery",
    "Muzzle Flash",
    "Shatter Shield",
    "Staggering Shield",
    "Peacemaker",
    "Mesa's Waltz"
  ));
  //Mirage
  table_loader("mirage1", abilityGenerator(MirageMap.hall_of_mirrors));
  table_loader("mirage2", abilityGenerator(MirageMap.sleight_of_hand));
  table_loader("mirage3", abilityGenerator(MirageMap.eclipse));
  table_loader("mirage4", abilityGenerator(MirageMap.prism));
  table_loader("mirage2_aug", augmentGenerator(MirageMap, "Sleight Of Hand", "Explosive Legerdemain"));
  table_loader("mirage3_aug", augmentGenerator(MirageMap, "Eclipse", "Total Eclipse"));
  table_loader("mirage", warframeGenerator(
    MirageMap,
    "Hall Of Mirrors",
    "Hall of Malevolence",
    "Sleight Of Hand",
    "Explosive Legerdemain",
    "Eclipse",
    "Total Eclipse",
    "Prism",
    ""
  ));
  //Nekros
  table_loader("nekros1", abilityGenerator(NekrosMap.soul_punch));
  table_loader("nekros2", abilityGenerator(NekrosMap.terrify));
  table_loader("nekros3", abilityGenerator(NekrosMap.desecrate));
  table_loader("nekros4", abilityGenerator(NekrosMap.shadows_of_the_dead));
  table_loader("nekros1_aug", augmentGenerator(NekrosMap, "Soul Punch", "Soul Survivor"));
  table_loader("nekros2_aug", augmentGenerator(NekrosMap, "Terrify", "Creeping Terrify"));
  table_loader("nekros3_aug", augmentGenerator(NekrosMap, "Desecrate", "Despoil"));
  table_loader("nekros4_aug", augmentGenerator(NekrosMap, "Shadows Of The Dead", "Shield Of Shadows"));
  table_loader("nekros", warframeGenerator(
    NekrosMap,
    "Soul Punch",
    "Soul Survivor",
    "Terrify",
    "Creeping Terrify",
    "Desecrate",
    "Despoil",
    "Shadows Of The Dead",
    "Shield of Shadows"
  ));
  //Nezha
  table_loader("nezha1", abilityGenerator(NezhaMap.fire_walker));
  table_loader("nezha2", abilityGenerator(NezhaMap.blazing_chakram));
  table_loader("nezha3", abilityGenerator(NezhaMap.warding_halo));
  table_loader("nezha4", abilityGenerator(NezhaMap.divine_spears));
  table_loader("nezha1_aug", augmentGenerator(NezhaMap, "Fire Walker", "Pyroclastic Flow"));
  table_loader("nezha", warframeGenerator(
    NezhaMap,
    "Fire Walker",
    "Pyroclastic Flow",
    "Blazing Chakram",
    "Reaping Chakram",
    "Warding Halo",
    "Safeguard",
    "Divine Spears",
    ""
  ));
  //Nidus
  table_loader("nidus1", abilityGenerator(NidusMap.virulence));
  table_loader("nidus2", abilityGenerator(NidusMap.larva));
  table_loader("nidus3", abilityGenerator(NidusMap.parasitic_link));
  table_loader("nidus4", abilityGenerator(NidusMap.ravenous));
  table_loader("nidus1_aug", augmentGenerator(NidusMap, "Virulence", "Teeming Virulence"));
  table_loader("nidus2_aug", augmentGenerator(NidusMap, "Larva", "Larva Burst"));
  table_loader("nidus", warframeGenerator(
    NidusMap,
    "Virulence",
    "Teeming Virulence",
    "Larva",
    "Larva Burst",
    "Parasitic Link",
    "",
    "Ravenous",
    "Insatiable"
  ));
  //Nova
  table_loader("nova1", abilityGenerator(NovaMap.null_star));
  table_loader("nova2", abilityGenerator(NovaMap.antimatter_drop));
  table_loader("nova3", abilityGenerator(NovaMap.worm_hole));
  table_loader("nova4", abilityGenerator(NovaMap.molecular_prime));
  table_loader("nova1_aug", augmentGenerator(NovaMap, "Null Star", "Neutron Star"));
  table_loader("nova2_aug", augmentGenerator(NovaMap, "Antimatter Drop", "Antimatter Absorb"));
  table_loader("nova3_aug", augmentGenerator(NovaMap, "Worm Hole", "Escape Velocity"));
  table_loader("nova", warframeGenerator(
    NovaMap,
    "Null Star",
    "Neutron Star",
    "Antimatter Drop",
    "Antimatter Absorb",
    "Worm Hole",
    "Escape Velocity",
    "Molecular Prime",
    "Molecular Fission"
  ));
  //Nyx
  table_loader("nyx1", abilityGenerator(NyxMap.mind_control));
  table_loader("nyx2", abilityGenerator(NyxMap.psychic_bolts));
  table_loader("nyx3", abilityGenerator(NyxMap.chaos));
  table_loader("nyx4", abilityGenerator(NyxMap.absorb));
  table_loader("nyx1_aug", augmentGenerator(NyxMap, "Mind Control", "Mind Freak"));
  table_loader("nyx2_aug", augmentGenerator(NyxMap, "Psychic Bolts", "Pacifying Bolts"));
  table_loader("nyx", warframeGenerator(
    NyxMap,
    "Mind Control",
    "Mind Freak",
    "Psychic Bolts",
    "Pacifying Bolts",
    "Chaos",
    "Chaos Sphere",
    "Absorb",
    "Assimilate"
  ));
  //Oberon
  table_loader("oberon1", abilityGenerator(OberonMap.smite));
  table_loader("oberon2", abilityGenerator(OberonMap.hallowed_ground));
  table_loader("oberon3", abilityGenerator(OberonMap.renewal));
  table_loader("oberon4", abilityGenerator(OberonMap.reckoning));
  table_loader("oberon1_aug", augmentGenerator(OberonMap, "Smite", "Smite Infusion"));
  table_loader("oberon2_aug", augmentGenerator(OberonMap, "Hallowed Ground", "Hallowed Eruption"));
  table_loader("oberon3_aug", augmentGenerator(OberonMap, "Renewal", "Phoenix Renewal"));
  table_loader("oberon4_aug", augmentGenerator(OberonMap, "Reckoning",
    "Hallowed Reckoning"));
  table_loader("oberon", warframeGenerator(
    OberonMap,
    "Smite",
    "Smite Infusion",
    "Hallowed Ground",
    "Hallowed Eruption",
    "Renewal",
    "Phoenix Renewal",
    "Reckoning",
    "Hallowed Reckoning"
  ));
  //Octavia
  table_loader("octavia1", abilityGenerator(OctaviaMap.mallet));
  table_loader("octavia2", abilityGenerator(OctaviaMap.resonator));
  table_loader("octavia3", abilityGenerator(OctaviaMap.metronome));
  table_loader("octavia4", abilityGenerator(OctaviaMap.amp));
  table_loader("octavia", warframeGenerator(
    OctaviaMap,
    "Mallet",
    "Partitioned Mallet",
    "Resonator",
    "Conductor",
    "Metronome",
    "",
    "Amp",
    ""
  ));
  //Revenant
  table_loader("revenant1", abilityGenerator(RevenantMap.enthrall));
  table_loader("revenant2", abilityGenerator(RevenantMap.mesmer_skin));
  table_loader("revenant3", abilityGenerator(RevenantMap.reave));
  table_loader("revenant4", abilityGenerator(RevenantMap.danse_macabre));
  table_loader("revenant3_aug", augmentGenerator(RevenantMap, "Reave", "Blinding Reave"));
  table_loader("revenant", warframeGenerator(
    RevenantMap,
    "Enthrall",
    "",
    "Mesmer Skin",
    "",
    "Reave",
    "Blinding Reave",
    "Danse Macabre",
    ""
  ));
  //Rhino
  table_loader("rhino1", abilityGenerator(RhinoMap.rhino_charge));
  table_loader("rhino2", abilityGenerator(RhinoMap.iron_skin));
  table_loader("rhino3", abilityGenerator(RhinoMap.roar));
  table_loader("rhino4", abilityGenerator(RhinoMap.rhino_stomp));
  table_loader("rhino1_aug", augmentGenerator(RhinoMap, "Rhino Charge", "Ironclad Charge"));
  table_loader("rhino2_aug", augmentGenerator(RhinoMap, "Iron Skin", "Iron Shrapnel"));
  table_loader("rhino3_aug", augmentGenerator(RhinoMap, "Roar", "Piercing Roar"));
  table_loader("rhino4_aug", augmentGenerator(RhinoMap, "Rhino Stomp", "Reinforcing Stomp"));
  table_loader("rhino", warframeGenerator(
    RhinoMap,
    "Rhino Charge",
    "Ironclad Charge",
    "Iron Skin",
    "Iron Shrapnel",
    "Roar",
    "Piercing Roar",
    "Rhino Stomp",
    "Reinforcing Stomp"
  ));
  //Saryn
  table_loader("saryn1", abilityGenerator(SarynMap.spores));
  table_loader("saryn2", abilityGenerator(SarynMap.molt));
  table_loader("saryn3", abilityGenerator(SarynMap.toxic_lash));
  table_loader("saryn4", abilityGenerator(SarynMap.miasma));
  table_loader("saryn1_aug", augmentGenerator(SarynMap, "Spores", "Venom Dose"));
  table_loader("saryn2_aug", augmentGenerator(SarynMap, "Molt", "Regenerative Molt"));
  table_loader("saryn3_aug", augmentGenerator(SarynMap, "Toxic Lash", "Contagion Cloud"));
  table_loader("saryn", warframeGenerator(
    SarynMap,
    "Spores",
    "Venom Dose",
    "Molt",
    "Regenerative Molt",
    "Toxic Lash",
    "Contagion Cloud",
    "Miasma",
    ""
  ));
  //Titania
  table_loader("titania1", abilityGenerator(TitaniaMap.spellbind));
  table_loader("titania2", abilityGenerator(TitaniaMap.tribute));
  table_loader("titania3", abilityGenerator(TitaniaMap.lantern));
  table_loader("titania4", abilityGenerator(TitaniaMap.razorwing));
  table_loader("titania3_aug", augmentGenerator(TitaniaMap, "Lantern", "Beguiling Lantern"));
  table_loader("titania4_aug", augmentGenerator(TitaniaMap, "Razorwing", "Razorwing Blitz"));
  table_loader("titania", warframeGenerator(
    TitaniaMap,
    "Spellbind",
    "",
    "Tribute",
    "",
    "Lantern",
    "Beguiling Lantern",
    "Razorwing",
    "Razorwing Blitz"
  ));
  //Trinity
  table_loader("trinity1", abilityGenerator(TrinityMap.well_of_life));
  table_loader("trinity2", abilityGenerator(TrinityMap.energy_vampire));
  table_loader("trinity3", abilityGenerator(TrinityMap.link));
  table_loader("trinity4", abilityGenerator(TrinityMap.blessing));
  table_loader("trinity1_aug", augmentGenerator(TrinityMap, "Well Of Life", "Pool of Life"));
  table_loader("trinity3_aug", augmentGenerator(TrinityMap, "Link", "Abating Link"));
  table_loader("trinity", warframeGenerator(
    TrinityMap,
    "Well Of Life",
    "Pool of Life",
    "Energy Vampire",
    "Vampire Leech",
    "Link",
    "Abating Link",
    "Blessing",
    ""
  ));
  //Valkyr
  table_loader("valkyr1", abilityGenerator(ValkyrMap.rip_line));
  table_loader("valkyr2", abilityGenerator(ValkyrMap.warcry));
  table_loader("valkyr3", abilityGenerator(ValkyrMap.paralysis));
  table_loader("valkyr4", abilityGenerator(ValkyrMap.hysteria));
  table_loader("valkyr2_aug", augmentGenerator(ValkyrMap, "Warcry", "Eternal War"));
  table_loader("valkyr3_aug", augmentGenerator(ValkyrMap, "Paralysis", "Prolonged Paralysis"));
  table_loader("valkyr4_aug", augmentGenerator(ValkyrMap, "Hysteria", "Hysterical Assault"));
  table_loader("valkyr", warframeGenerator(
    ValkyrMap,
    "Rip Line",
    "Swing Line",
    "Warcry",
    "Eternal War",
    "Paralysis",
    "Prolonged Paralysis",
    "Hysteria",
    "Hysterical Assault"
  ));
  //Volt
  table_loader("volt1", abilityGenerator(VoltMap.shock));
  table_loader("volt2", abilityGenerator(VoltMap.speed));
  table_loader("volt3", abilityGenerator(VoltMap.electric_shield));
  table_loader("volt4", abilityGenerator(VoltMap.discharge));
  table_loader("volt1_aug", augmentGenerator(VoltMap, "Shock", "Shock Trooper"));
  table_loader("volt2_aug", augmentGenerator(VoltMap, "Speed", "Shocking Speed"));
  table_loader("volt3_aug", augmentGenerator(VoltMap, "Electric Shield", "Transistor Shield"));
  table_loader("volt", warframeGenerator(
    VoltMap,
    "Shock",
    "Shock Trooper",
    "Speed",
    "Shocking Speed",
    "Electric Shield",
    "Transistor Shield",
    "Discharge",
    "Capacitance"
  ));
  //Wisp
  table_loader("wisp1", abilityGenerator(WispMap.reservoirs));
  table_loader("wisp2", abilityGenerator(WispMap.wil_o_wisp));
  table_loader("wisp3", abilityGenerator(WispMap.breach_surge));
  table_loader("wisp4", abilityGenerator(WispMap.sol_gate));
  table_loader("wisp", warframeGenerator(
    WispMap,
    "Reservoirs",
    "",
    "Wil-O-Wisp",
    "",
    "Breach Surge",
    "",
    "Sol Gate",
    ""
  ));
  //Wukong
  table_loader("wukong1", abilityGenerator(WukongMap.celestial_twin));
  table_loader("wukong2", abilityGenerator(WukongMap.cloud_walker));
  table_loader("wukong3", abilityGenerator(WukongMap.defy));
  table_loader("wukong4", abilityGenerator(WukongMap.primal_fury));
  table_loader("wukong1_aug", augmentGenerator(WukongMap, "Celestial Twin", "Celestial Stomp"));
  table_loader("wukong2_aug", augmentGenerator(WukongMap, "Cloud Walker", "Enveloping Cloud"));
  table_loader("wukong4_aug", augmentGenerator(WukongMap, "Primal Fury", "Primal Rage"));
  table_loader("wukong", warframeGenerator(
    WukongMap,
    "Celestial Twin",
    "Celestial Stomp",
    "Cloud Walker",
    "Enveloping Cloud",
    "Defy",
    "",
    "Primal Fury",
    "Primal Rage"
  ));
  //Zephyr
  table_loader("zephyr1", abilityGenerator(ZephyrMap.tail_wind));
  table_loader("zephyr2", abilityGenerator(ZephyrMap.airburst));
  table_loader("zephyr3", abilityGenerator(ZephyrMap.turbulence));
  table_loader("zephyr4", abilityGenerator(ZephyrMap.tornado));
  table_loader("zephyr3_aug", augmentGenerator(ZephyrMap, "Turbulence", "Jet Stream"));
  table_loader("zephyr", warframeGenerator(
    ZephyrMap,
    "Tail Wind",
    "Target Fixation",
    "Airburst",
    "",
    "Turbulence",
    "Jet Stream",
    "Tornado",
    "Funnel Clouds"
  ));

  // if the proper ID is called, it uses a function
  function table_loader(idCall, func, bool) {
    var idName = "#maximization_" + idCall;
    if ($(idName).length) {
      $(idName).html(func);
    }
    if (!bool) { //if present, does not call updatetable, avoid recursion in cases where Select field exists
      update_table();
    }
  }

  // generates the input table
  function buildTable(additions) {
    var vals = [
      ['Strength', 'STR', '100'],
      ['Range', 'RNG', '100'],
      ['Efficiency', 'EFF', '100'],
      ['Duration', 'DUR', '100']
    ];
    if (additions != []) { //keeps base input table clean 
      vals = vals.concat(additions);
    }
    var rows = [];
    var i;
    for (i = 0; i < vals.length; i++) {
      rows[i] = $('<tr>', {
        border: 0,
        append: [
          $('<td>', {
            text: vals[i][0] + ':',
          }),
          interactive_field(vals[i])
        ]
      });
    }
    return $('<table>').append(rows);
    // creates the interactive field according to the last value of the nested array
    function interactive_field(array_check) {
      if (!isNaN(array_check[2])) { // if the value is a number, create an input number field
        return $('<td>', {
          append: $('<input>', {
            class: 'inputField',
            width: 55,
            min: 0,
            max: 9999,
            id: 'in_' + array_check[1],
            type: 'number',
            value: array_check[2],
            on: {
              input: update_table
            }
          })
        });
      } else { // otherwise create a option with values of array as options
        var a;
        var cont = [];
        for (a = 0; a < array_check[2].length; a++) {
          cont[a] = $('<option>', {
            value: array_check[2][a].toLowerCase(),
            text: array_check[2][a]
          });
        }
        return $('<select>', {
          id: 'in_' + array_check[1],
          width: 55,
          on: {
            input: update_table
          }
        }).append(cont);
      }
    } // interactive_field end
  } // buildTable end

  // creates the entire table of a Warframe.
  function warframeGenerator(map, ability1, augment1, ability2, augment2, ability3, augment3, ability4, augment4, option) {
    var i = 0;
    var rows = [];
    var abilities = [ability1, ability2, ability3, ability4];
    var augments = [augment1, augment2, augment3, augment4];
    for (i = 0; i < 4; i++) {
      var abilityKey = abilities[i].replace(/ /g, "_").replace(/&/g, "and").replace(/'/g, "").toLowerCase().replace(/-/g, "_").toLowerCase();
      var augmentKey = augments[i].replace(/ /g, "_").replace(/&/g, "and").replace(/'/g, "").toLowerCase().replace(/-/g, "_").toLowerCase();
      rows[2 * i] = $('<tr>', { //every ability/augment name goes in even rows
        append: [
          $('<td>', {
            append: [
              abilityName(abilities[i])
            ]
          }),
          $('<td>', {
            append: [
              augmentName(augments[i])
            ]
          })
        ]
      });
      rows[2 * i + 1] = $('<tr>', { //every output cells goes in odd rows
        valign: "top",
        append: [
          $('<td>', {
            append: [
              abilityGenerator(map[abilityKey], option)
            ]
          }),
          $('<td>', {
            append: [
              abilityGenerator(map[augmentKey], option)
            ]
          })
        ]
      });
    }
    return $('<table>').append(rows);
  }

  // creates a table with Ability and Augment
  function augmentGenerator(map, ability, augment, option) {
    var ability_call = ability.replace(/ /g, "_").replace(/&/g, "and").replace(/'/g, "").replace(/-/g, "_").toLowerCase();
    var augment_call = augment.replace(/ /g, "_").replace(/&/g, "and").replace(/'/g, "").replace(/-/g, "_").toLowerCase();
    return $('<table>', {
      append: [
        $('<tr>', {
          append: [
            abilityName(ability),
            $('<td>', {
              text: augment
            })
          ]
        }),
        $('<tr>', {
          append: [
            $('<td>', {
              valign: "top",
              append: [
                abilityGenerator(map[ability_call], option)
              ]
            }),
            $('<td>', {
              valign: "top",
              append: [
                abilityGenerator(map[augment_call], option)
              ]
            })
          ]
        })
      ]
    });
  }

  // Generates the graphical aspect of the output cells
  function abilityGenerator(meta_array, option) {
    if (meta_array == "N/A") {
      return "N/A";
    }
    var i, j = 0;
    var rows = [];
    for (i = 0; i < meta_array.length; i++) {
      if (!option || ((meta_array[i][0]).includes("aug") && ((meta_array[i][0]).includes(option) || (meta_array[i][0].match(/_/g).length == 2))) || (meta_array[i][0]).includes(option) || (meta_array[i][0].match(/_/g).length == 1)) {
        rows[i - j] = $('<tr>', {
          append: [
            $('<td>', {
              class: 'resultingStat',
              append: [
                $('<span>', {
                  id: meta_array[i][0],
                  value: 'NaN'
                })
              ]
            }),
            $('<td>', {
              text: meta_array[i][1]
            })
          ]
        });
      } else {
        j++;
      }
    }
    return $('<table>').append(rows);



  }

  // creates the title a of the ability
  function abilityName(name) {
    var link = name.replace(/ /g, "_");
    return '<span class="ability-tooltip" data-param="' + name + '" style="white-space:pre"><a href="/wiki/' + link + '">' + name + '</a></span>';
  }

  // (for now) identical to abilityName, creates the title of the augment. The difference should be in the tooltip if implemented
  function augmentName(name) {
    var link = name.replace(/ /g, "_");
    return '<span class="mod-tooltip" data-param="' + name + '" style="white-space:pre"><a href="/wiki/' + link + '">' + name + '</a></span>';
  }

}); // function end
Advertisement