[
  {
    "type": "enchantment",
    "id": "undine_resist_acid",
    "condition": "ALWAYS",
    "incoming_damage_mod": [ { "type": "acid", "multiply": -0.25 } ]
  },
  {
    "type": "enchantment",
    "id": "undine_resist_fire",
    "condition": "ALWAYS",
    "incoming_damage_mod": [ { "type": "heat", "multiply": -0.5 } ]
  },
  {
    "type": "enchantment",
    "id": "ench_undine_water_body",
    "condition": "ALWAYS",
    "has": "HELD",
    "incoming_damage_mod": [ { "type": "bash", "multiply": -0.1 }, { "type": "cut", "multiply": -0.2 }, { "type": "bullet", "multiply": -0.5 } ]
  },
  {
    "type": "enchantment",
    "id": "ench_undine_water_form_no_attack",
    "condition": "ALWAYS",
    "has": "HELD",
    "values": [
      { "value": "MELEE_DAMAGE", "multiply": -1.0 },
      { "value": "RANGE", "multiply": -1.0 },
      { "value": "RANGED_DAMAGE", "multiply": -1.0 }
    ]
  },
  {
    "type": "enchantment",
    "id": "ench_undine_water_form_armor",
    "condition": "ALWAYS",
    "has": "HELD",
    "incoming_damage_mod": [
      { "type": "bash", "multiply": -0.4 },
      { "type": "stab", "multiply": -0.8 },
      { "type": "cut", "multiply": -0.6 },
      { "type": "bullet", "multiply": -1.0 },
      { "type": "cold", "multiply": 2 }
    ],
    "values": [ { "value": "CLIMATE_CONTROL_HEAT", "add": -20 } ]
  },
  {
    "type": "enchantment",
    "id": "undine_water_form_hiding",
    "condition": "u_is_underwater",
    "values": [ { "value": "STEALTH_MODIFIER", "add": 60 } ]
  },
  {
    "id": "create_fog",
    "type": "SPELL",
    "name": "Create Fog",
    "description": "Summons a field of fog.",
    "message": "whoosh!",
    "valid_targets": [ "hostile", "ground", "self", "ally" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "flags": [ "LOUD", "NO_PROJECTILE", "RANDOM_DAMAGE", "NO_HANDS", "NO_LEGS" ],
    "effect": "attack",
    "shape": "blast",
    "min_aoe": 2,
    "max_aoe": 9,
    "aoe_increment": 0.5,
    "damage_type": "cold",
    "difficulty": 2,
    "field_id": "fd_fog",
    "min_field_intensity": 2,
    "max_field_intensity": 8,
    "field_intensity_increment": 1,
    "max_level": { "math": [ "dex_to_level(1)" ] },
    "min_range": { "math": [ "( (u_spell_level('create_fog') * 1.5) + 2) * (scaling_factor(u_val('dexterity') ) )" ] },
    "max_range": 70,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 100,
    "final_energy_cost": 40,
    "energy_increment": -6,
    "base_casting_time": 100,
    "final_casting_time": 35,
    "casting_time_increment": -4,
    "sound_type": "combat",
    "sound_description": "sussurus!",
    "learn_spells": { "fog_bank": 5 }
  },
  {
    "id": "fog_bank",
    "type": "SPELL",
    "name": "Fog Bank",
    "description": "Summons a bank of fog.",
    "message": "whoosh!",
    "valid_targets": [ "hostile", "ground", "self", "ally" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "flags": [ "LOUD", "NO_PROJECTILE", "RANDOM_DAMAGE", "NO_HANDS", "NO_LEGS" ],
    "effect": "attack",
    "shape": "blast",
    "min_aoe": 3,
    "max_aoe": 13,
    "aoe_increment": 0.5,
    "damage_type": "cold",
    "difficulty": 2,
    "field_id": "fd_fog",
    "min_field_intensity": 6,
    "max_field_intensity": 10,
    "field_intensity_increment": 1,
    "max_level": { "math": [ "dex_to_level(1)" ] },
    "min_range": { "math": [ "( (u_spell_level('fog_bank') * 1.5) + 2) * (scaling_factor(u_val('dexterity') ) )" ] },
    "max_range": 70,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 300,
    "final_energy_cost": 125,
    "energy_increment": -25,
    "base_casting_time": 100,
    "final_casting_time": 35,
    "casting_time_increment": -4,
    "sound_type": "combat",
    "sound_description": "whoosh!"
  },
  {
    "id": "grant_buoyancy",
    "type": "SPELL",
    "name": "Grant buoyancy",
    "description": "You become more buoyant.",
    "skill": "deduction",
    "valid_targets": [ "self" ],
    "spell_class": "UNDINE",
    "teachable": false,
    "min_duration": 6000,
    "max_duration": 360000,
    "duration_increment": 17700,
    "max_level": 20,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 400,
    "energy_increment": -5.0,
    "final_energy_cost": 300,
    "base_casting_time": 250,
    "difficulty": 5,
    "flags": [ "VERBAL", "SOMATIC", "NO_LEGS", "NO_PROJECTILE" ],
    "shape": "blast",
    "effect": "attack",
    "effect_str": "buoyant"
  },
  {
    "id": "acidic_mist",
    "type": "SPELL",
    "name": "Acidic Mist",
    "description": "Summons an acidic mist.",
    "message": "whoosh!",
    "valid_targets": [ "hostile", "ground", "self", "ally" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "flags": [ "LOUD", "NO_PROJECTILE", "RANDOM_DAMAGE", "NO_HANDS", "NO_LEGS" ],
    "effect": "attack",
    "shape": "blast",
    "min_aoe": 1,
    "max_aoe": 7,
    "aoe_increment": 0.5,
    "damage_type": "acid",
    "difficulty": 2,
    "field_id": "fd_acidic_mist",
    "min_field_intensity": 1,
    "max_field_intensity": 3,
    "field_intensity_increment": 0.3,
    "max_level": { "math": [ "dex_to_level(1)" ] },
    "min_range": { "math": [ "( (u_spell_level('acidic_mist') * 1.5) + 2) * (scaling_factor(u_val('dexterity') ) )" ] },
    "max_range": 70,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 140,
    "final_energy_cost": 80,
    "energy_increment": -6,
    "base_casting_time": 100,
    "final_casting_time": 35,
    "casting_time_increment": -4,
    "sound_type": "combat",
    "sound_description": "sussurus!",
    "learn_spells": { "deadly_mist": 9 }
  },
  {
    "id": "deadly_mist",
    "type": "SPELL",
    "name": "Deadly Mist",
    "description": "Summons a deadly mist.",
    "message": "whoosh!",
    "valid_targets": [ "hostile", "ground", "self", "ally" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "flags": [ "LOUD", "NO_PROJECTILE", "RANDOM_DAMAGE", "NO_HANDS", "NO_LEGS" ],
    "effect": "attack",
    "shape": "blast",
    "min_aoe": 3,
    "max_aoe": 13,
    "aoe_increment": 0.5,
    "damage_type": "acid",
    "difficulty": 2,
    "field_id": "fd_acidic_mist",
    "min_field_intensity": 3,
    "max_field_intensity": 5,
    "field_intensity_increment": 0.2,
    "max_level": { "math": [ "dex_to_level(1)" ] },
    "min_range": { "math": [ "( (u_spell_level('deadly_mist') * 1.5) + 2) * (scaling_factor(u_val('dexterity') ) )" ] },
    "max_range": 70,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 500,
    "final_energy_cost": 300,
    "energy_increment": -25,
    "base_casting_time": 100,
    "final_casting_time": 35,
    "casting_time_increment": -4,
    "sound_type": "combat",
    "sound_description": "whoosh!"
  },
  {
    "id": "water_pocket",
    "type": "SPELL",
    "name": "Water Pocket",
    "description": "This spell summons a pocket made of churning water that contains an air bubble inside and prevents any items in it from being damaged by water.",
    "valid_targets": [ "none" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "water_pocket",
    "shape": "blast",
    "base_casting_time": 250,
    "base_energy_cost": 300,
    "min_duration": 360000,
    "max_duration": 9000000,
    "duration_increment": 360000,
    "difficulty": 4,
    "max_level": 20,
    "flags": [ "NO_HANDS", "NO_LEGS", "SOMATIC" ],
    "energy_source": "MANA"
  },
  {
    "id": "undine_acid_resist_ally_spell",
    "type": "SPELL",
    "name": "Caustic Cloak",
    "description": "Weave a cloak of fae magicks around a target, surrounding them with a thin shell of acidic mist.  This protects them somewhat from acid damage and will sometimes damage an attacker as well.",
    "valid_targets": [ "ally" ],
    "skill": "deduction",
    "effect": "attack",
    "effect_str": "effect_undine_acid_resist_ally",
    "shape": "blast",
    "spell_class": "UNDINE",
    "teachable": false,
    "flags": [ "SOMATIC", "VERBAL", "NO_PROJECTILE", "NO_LEGS", "NO_HANDS" ],
    "max_level": { "math": [ "per_to_level(1)" ] },
    "difficulty": 6,
    "min_range": 1,
    "max_range": 20,
    "range_increment": 0.4,
    "base_casting_time": 450,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 650,
    "final_energy_cost": 400,
    "energy_increment": -12,
    "min_duration": 30000,
    "max_duration": 1080000,
    "duration_increment": 16500
  },
  {
    "id": "undine_acid_resist_ally_thorns",
    "type": "SPELL",
    "name": { "str": "Caustic Cloak Thorns Spell", "//~": "NO_I18N" },
    "description": { "str": "The thorns effect from Caustic Cloak.  It's a bug if you have it directly.", "//~": "NO_I18N" },
    "effect": "attack",
    "shape": "blast",
    "flags": [ "SILENT", "RANDOM_DAMAGE" ],
    "min_damage": 2,
    "max_damage": 10,
    "valid_targets": [ "hostile" ],
    "damage_type": "acid",
    "min_range": 1,
    "max_range": 1
  },
  {
    "id": "undine_cultivate_goblin_fruit",
    "type": "SPELL",
    "name": "Cultivate Goblin Fruit",
    "description": "You may spin a bit of fae magic into the waters, bringing forth a goblin fruit.  Goblin fruit have a variety of effects, never predictable but always at least somewhat beneficial.  This spell may only be cast when standing or water or a near a large body of water.",
    "valid_targets": [ "self" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "effect": "effect_on_condition",
    "effect_str": "EOC_UNDINE_GOBLIN_FRUIT",
    "shape": "blast",
    "flags": [ "SOMATIC", "VERBAL", "NO_LEGS", "NO_HANDS" ],
    "max_level": { "math": [ "dex_to_level(1)" ] },
    "difficulty": 8,
    "base_casting_time": 180000,
    "final_casting_time": 100,
    "casting_time_increment": -6000,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 450
  },
  {
    "id": "undine_bash_and_slow_spell",
    "type": "SPELL",
    "name": "Crushing Pressure",
    "description": "You may bring the force of the ocean's depths onto your enemy, crushing them and slowing them briefly.",
    "valid_targets": [ "hostile" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "effect": "attack",
    "effect_str": "effect_undine_spell_slow",
    "shape": "blast",
    "flags": [ "SOMATIC", "VERBAL", "RANDOM_DAMAGE", "RANDOM_DURATION" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "difficulty": 3,
    "min_damage": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 2) + 15) * (scaling_factor(u_val('strength') ) )" ] },
    "max_damage": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 5) + 55) * (scaling_factor(u_val('strength') ) )" ] },
    "damage_type": "bash",
    "min_duration": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 75) + 200) * (scaling_factor(u_val('strength') ) )" ] },
    "max_duration": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 150) + 800) * (scaling_factor(u_val('strength') ) )" ] },
    "min_range": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 1.1) + 3) * (scaling_factor(u_val('strength') ) )" ] },
    "max_range": { "math": [ "( (u_spell_level('undine_bash_and_slow_spell') * 1.1) + 3) * (scaling_factor(u_val('strength') ) )" ] },
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 250,
    "final_energy_cost": 100,
    "energy_increment": -10,
    "base_casting_time": 200,
    "final_casting_time": 75,
    "casting_time_increment": -7
  },
  {
    "id": "undine_drag_inward_spell",
    "type": "SPELL",
    "name": "Whirlpool Catches the Shoal",
    "description": "Create a whirling field of magickal waters, dragging everything within it toward a central point and slowing them with the force of the current.",
    "teachable": false,
    "valid_targets": [ "self" ],
    "spell_class": "UNDINE",
    "skill": "deduction",
    "flags": [ "VERBAL", "SOMATIC", "NO_EXPLOSION_SFX" ],
    "difficulty": 6,
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "effect_on_condition",
    "effect_str": "EOC_UNDINE_DRAG_INWARD_SELECTOR",
    "shape": "blast",
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 600,
    "final_energy_cost": 450,
    "energy_increment": -3,
    "base_casting_time": 200,
    "final_casting_time": 100,
    "casting_time_increment": -3
  },
  {
    "id": "undine_drag_inward_spell_01",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 01", "//~": "NO_I18N" },
    "description": { "str": "Version 1 of the Whirlpool Catches the Shoal drag, with 2 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_02",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 02", "//~": "NO_I18N" },
    "description": { "str": "Version 2 of the Whirlpool Catches the Shoal drag, with 3 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_03",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 03", "//~": "NO_I18N" },
    "description": { "str": "Version 3 of the Whirlpool Catches the Shoal drag, with 4 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_04",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 04", "//~": "NO_I18N" },
    "description": { "str": "Version 4 of the Whirlpool Catches the Shoal drag, with 5 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_05",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 05", "//~": "NO_I18N" },
    "description": { "str": "Version 5 of the Whirlpool Catches the Shoal drag, with 6 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_06",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 06", "//~": "NO_I18N" },
    "description": { "str": "Version 6 of the Whirlpool Catches the Shoal drag, with 7 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_07",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal 07", "//~": "NO_I18N" },
    "description": { "str": "Version 7 of the Whirlpool Catches the Shoal drag, with 8 pulls in.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "extra_effects": [
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_pull", "hit_self": false },
      { "id": "undine_drag_inward_spell_slow", "hit_self": false }
    ],
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_pull",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal Real", "//~": "NO_I18N" },
    "description": {
      "str": "The actual Whirlpool Catches the Shoal drag that pulls in monsters.  It's a bug if you have it.",
      "//~": "NO_I18N"
    },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "area_pull",
    "shape": "blast",
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "undine_drag_inward_spell_slow",
    "type": "SPELL",
    "name": { "str": "Whirlpool Catches the Shoal Real Slow", "//~": "NO_I18N" },
    "description": {
      "str": "The actual Whirlpool Catches the Shoal drag that slows monsters after they're pulled.  It's a bug if you have it.",
      "//~": "NO_I18N"
    },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "effect_str": "effect_undine_spell_slow",
    "shape": "blast",
    "min_duration": { "math": [ "( (u_spell_level('undine_drag_inward_spell') * 100) + 200) * (scaling_factor(u_val('strength') ) )" ] },
    "max_duration": { "math": [ "( (u_spell_level('undine_drag_inward_spell') * 200) + 800) * (scaling_factor(u_val('strength') ) )" ] },
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.8) + 5) * (scaling_factor(u_val('strength') ) )), 40)" ]
    },
    "max_range": 40,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    },
    "max_aoe": {
      "math": [ "min( (( (u_spell_level('undine_drag_inward_spell') * 0.25) + 3) * (scaling_factor(u_val('strength') ) )), 15)" ]
    }
  },
  {
    "id": "wave_rider",
    "type": "SPELL",
    "name": "Summon Wave Rider",
    "description": "You summon a water based vehicle to propel you across the waves.",
    "valid_targets": [ "ground" ],
    "flags": [ "SOMATIC", "VERBAL" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "effect": "summon_vehicle",
    "magic_type": "xe_fey_magick",
    "effect_str": "wave_rider_kayak",
    "shape": "blast",
    "difficulty": 5,
    "max_level": 20,
    "base_casting_time": 1000,
    "base_energy_cost": 1000,
    "min_range": 1,
    "max_range": 10,
    "range_increment": 1,
    "//": "40 minutes + 10 minutes / level; 4 hours at max level",
    "min_duration": 240000,
    "max_duration": 1440000,
    "duration_increment": 60000
  },
  {
    "id": "summon_fish",
    "type": "SPELL",
    "name": "Summon Fish",
    "description": "A fish arrives from somewhere.  It may not be that useful on land.",
    "valid_targets": [ "ground" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "min_damage": 1,
    "max_damage": 8,
    "damage_increment": 0.5,
    "min_range": 1,
    "max_range": 15,
    "range_increment": 1,
    "min_aoe": 2,
    "max_aoe": 2,
    "max_level": 35,
    "difficulty": 3,
    "effect": "summon",
    "effect_str": "GROUP_FISH",
    "shape": "blast",
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 50,
    "base_casting_time": 3000,
    "flags": [ "SOMATIC", "VERBAL", "SPAWN_GROUP", "HOSTILE_50", "NO_CORPSE_QUIET" ],
    "min_duration": 36000,
    "max_duration": 1080000,
    "duration_increment": 36000,
    "learn_spells": { "charm_fish": 9 }
  },
  {
    "id": "charm_fish",
    "type": "SPELL",
    "name": "Charm Fish",
    "description": "A friendly fish arrives from somewhere.  It may not be that useful on land.",
    "valid_targets": [ "ground" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "min_damage": 1,
    "max_damage": 8,
    "min_range": 1,
    "max_range": 15,
    "range_increment": 1,
    "min_aoe": 2,
    "max_aoe": 2,
    "damage_increment": 0.5,
    "max_level": 35,
    "difficulty": 4,
    "effect": "summon",
    "effect_str": "GROUP_FISH",
    "shape": "blast",
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 80,
    "base_casting_time": 3000,
    "flags": [ "SOMATIC", "VERBAL", "SPAWN_GROUP", "NO_CORPSE_QUIET" ],
    "min_duration": 36000,
    "max_duration": 1080000,
    "duration_increment": 36000,
    "learn_spells": { "summon_kraken": 9 }
  },
  {
    "id": "summon_kraken",
    "type": "SPELL",
    "name": "Summon Kraken",
    "description": "A friendly kraken arrives from somewhere.  It may not be that useful on land.",
    "valid_targets": [ "ground" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "min_damage": 1,
    "max_damage": 8,
    "damage_increment": 0.5,
    "min_range": 1,
    "max_range": 15,
    "range_increment": 1,
    "min_aoe": 2,
    "max_aoe": 2,
    "max_level": 35,
    "difficulty": 7,
    "effect": "summon",
    "effect_str": "GROUP_KRAKEN_SURFACE",
    "shape": "blast",
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 400,
    "base_casting_time": 3000,
    "flags": [ "SOMATIC", "VERBAL", "SPAWN_GROUP", "NO_CORPSE_QUIET" ],
    "min_duration": 36000,
    "max_duration": 1080000,
    "duration_increment": 36000
  },
  {
    "id": "summon_water_sprite",
    "type": "SPELL",
    "name": "Calling the Children of the Waves",
    "description": "A lesser water elemental is summoned to support you.",
    "valid_targets": [ "ground" ],
    "skill": "deduction",
    "spell_class": "UNDINE",
    "teachable": false,
    "min_damage": 1,
    "max_damage": 8,
    "damage_increment": 0.5,
    "min_range": 1,
    "max_range": 15,
    "range_increment": 1,
    "min_aoe": 2,
    "max_aoe": 2,
    "max_level": 35,
    "difficulty": 3,
    "effect": "summon",
    "effect_str": "GROUP_GENIUS_UNDINE_LESSER",
    "shape": "blast",
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 200,
    "base_casting_time": 3000,
    "flags": [ "SOMATIC", "VERBAL", "SPAWN_GROUP", "SPAWN_GROUP" ],
    "min_duration": 36000,
    "max_duration": 1080000,
    "duration_increment": 36000
  },
  {
    "id": "undine_water_push_away",
    "type": "SPELL",
    "name": { "str": "Crashing Waves spell", "//~": "NO_I18N" },
    "description": { "str": "The actual spell that pushes enemies away.  It's a bug if you have it.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "RANDOM_AOE" ],
    "effect": "area_push",
    "shape": "blast",
    "min_range": 0,
    "min_aoe": 1,
    "max_aoe": 3
  },
  {
    "id": "undine_acid_body_spell",
    "type": "SPELL",
    "name": { "str": "Beouled Water Rebuke spell", "//~": "NO_I18N" },
    "description": { "str": "The actual spell that sprays enemies with acid.  It's a bug if you have it.", "//~": "NO_I18N" },
    "message": "",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "RANDOM_DAMAGE" ],
    "effect": "attack",
    "shape": "blast",
    "min_damage": 3,
    "max_damage": 30,
    "min_range": 1,
    "field_id": "fd_acid",
    "min_field_intensity": 1,
    "max_field_intensity": 3,
    "field_chance": 3
  },
  {
    "id": "undine_tidal_wave_spell",
    "type": "SPELL",
    "name": "Tidal Wave",
    "description": "Create a magickal wall of water and bring it crashing down on your enemies, buffeting and carrying them away.",
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "spell_class": "UNDINE",
    "skill": "deduction",
    "flags": [ "VERBAL", "SOMATIC", "LOUD", "RANDOM_DAMAGE", "RANDOM_DURATION" ],
    "difficulty": 9,
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "attack",
    "effect_str": "downed",
    "extra_effects": [ { "id": "undine_tidal_wave_spell_push", "hit_self": false } ],
    "shape": "line",
    "min_damage": { "math": [ "( (u_spell_level('undine_tidal_wave_spell') * 3) + 40) * (scaling_factor(u_val('strength') ) )" ] },
    "max_damage": { "math": [ "( (u_spell_level('undine_tidal_wave_spell') * 9) + 100) * (scaling_factor(u_val('strength') ) )" ] },
    "min_bash_scaling": 1.14,
    "max_bash_scaling": 1.25,
    "damage_type": "bash",
    "min_duration": 200,
    "max_duration": 900,
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_tidal_wave_spell') * 0.75) + 4) * (scaling_factor(u_val('strength') ) )), 30)" ]
    },
    "max_range": 50,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_tidal_wave_spell') * 0.3) + 2) * (scaling_factor(u_val('strength') ) )), 6)" ]
    },
    "max_aoe": 6,
    "magic_type": "xe_fey_magick",
    "base_energy_cost": 1000,
    "final_energy_cost": 650,
    "energy_increment": -25,
    "base_casting_time": 250,
    "final_casting_time": 50,
    "casting_time_increment": -12
  },
  {
    "id": "undine_tidal_wave_spell_push",
    "type": "SPELL",
    "name": { "str": "Tidal Wave Directed Push", "//~": "NO_I18N" },
    "description": { "str": "The Directed Push effect of the Tidal Wave spell.  It's a bug if you have it directly.", "//~": "NO_I18N" },
    "teachable": false,
    "valid_targets": [ "ground", "hostile" ],
    "spell_class": "UNDINE",
    "flags": [ "LOUD", "RANDOM_DAMAGE" ],
    "max_level": { "math": [ "str_to_level(1)" ] },
    "effect": "directed_push",
    "shape": "line",
    "min_damage": { "math": [ "( (u_spell_level('undine_tidal_wave_spell') * 0.25) + 1) * (scaling_factor(u_val('strength') ) )" ] },
    "max_damage": { "math": [ "( (u_spell_level('undine_tidal_wave_spell') * 0.5) + 2) * (scaling_factor(u_val('strength') ) )" ] },
    "min_range": {
      "math": [ "min( (( (u_spell_level('undine_tidal_wave_spell') * 0.75) + 4) * (scaling_factor(u_val('strength') ) )), 30)" ]
    },
    "max_range": 50,
    "min_aoe": {
      "math": [ "min( (( (u_spell_level('undine_tidal_wave_spell') * 0.3) + 2) * (scaling_factor(u_val('strength') ) )), 6)" ]
    },
    "max_aoe": 6
  }
]
