[
  {
    "id": "bless",
    "type": "SPELL",
    "name": { "str": "Bless" },
    "description": "A blessing that gives you energy and boosts your abilities.",
    "valid_targets": [ "self", "ally" ],
    "flags": [ "ENHANCEMENT_SPELL", "VERBAL", "SOMATIC", "NO_LEGS", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "effect": "attack",
    "effect_str": "bless",
    "shape": "blast",
    "affected_body_parts": [ "torso" ],
    "base_casting_time": 100,
    "base_energy_cost": 100,
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER",
    "difficulty": 5,
    "max_level": 20,
    "min_aoe": 0,
    "max_aoe": 5,
    "aoe_increment": 0.2,
    "min_range": 1,
    "max_range": 10,
    "range_increment": 1.0,
    "//": "duration is in moves",
    "min_duration": 6000,
    "max_duration": 30000,
    "duration_increment": 1200
  },
  {
    "id": "invisibility",
    "type": "SPELL",
    "name": "Invisibility",
    "description": "Creates a magical field that hides your visual presence to others.  Colloquially known as invisibility, but without all the science mumbo jumbo.  Attacking a target will break the invisibility.",
    "message": "To the outside world, your body fades away and you cease to exist!",
    "valid_targets": [ "self" ],
    "effect": "attack",
    "effect_str": "effect_technomancer_invisibility",
    "components": "spell_components_invisibility",
    "shape": "blast",
    "flags": [ "ENHANCEMENT_SPELL", "SILENT", "SOMATIC" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "spell_class": "TECHNOMANCER",
    "difficulty": 4,
    "base_casting_time": 100,
    "base_energy_cost": 400,
    "magic_type": "magiclysm_generic_magic",
    "min_duration": 1250,
    "max_duration": 6000,
    "duration_increment": 250,
    "max_level": 20
  },
  {
    "id": "holy_blade",
    "type": "SPELL",
    "name": "Mage Blade",
    "description": "This blade of light will cut through any evil it makes contact with!",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "VERBAL", "NO_LEGS", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "min_range": 0,
    "max_range": 0,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "longsword_holy",
    "shape": "blast",
    "base_casting_time": 450,
    "base_energy_cost": 475,
    "min_duration": 24000,
    "max_duration": 360000,
    "duration_increment": 24000,
    "difficulty": 7,
    "max_level": 15,
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "learn_spells": { "holy_blade_plus": 15 }
  },
  {
    "id": "holy_blade_plus",
    "type": "SPELL",
    "name": "Enhanced Mage Blade",
    "description": "This blade of light will cut through any evil it makes contact with!  Now you know this spell like the back of your hand, and have started to design your own version.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "VERBAL", "NO_LEGS", "NO_FAIL" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "min_range": 0,
    "max_range": 0,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "longsword_holy",
    "shape": "blast",
    "base_casting_time": 450,
    "base_energy_cost": 475,
    "min_duration": 360000,
    "max_duration": 2160000,
    "duration_increment": 72000,
    "difficulty": 9,
    "max_level": 25,
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic"
  },
  {
    "id": "spirit_armor",
    "type": "SPELL",
    "name": "Mage Armor",
    "description": "Evil will not make it through your defenses if your faith is strong enough!",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "VERBAL", "NO_LEGS", "CONCENTRATE", "SOMATIC" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "min_range": 0,
    "max_range": 0,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "armor_spirit",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 6,
    "max_level": 15,
    "base_casting_time": 450,
    "base_energy_cost": 475,
    "min_duration": 24000,
    "max_duration": 360000,
    "duration_increment": 24000,
    "learn_spells": { "spirit_armor_plus": 15 }
  },
  {
    "id": "spirit_armor_plus",
    "type": "SPELL",
    "name": "Enhanced Mage Armor",
    "description": "Evil will not make it through your defenses if your faith is strong enough!  Now you know this spell like the back of your hand, and have started to design your own version.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "VERBAL", "NO_LEGS", "SOMATIC", "NO_FAIL" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "min_range": 0,
    "max_range": 0,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "armor_spirit",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 9,
    "max_level": 25,
    "base_casting_time": 450,
    "final_casting_time": 150,
    "casting_time_increment": -12,
    "base_energy_cost": 475,
    "final_energy_cost": 150,
    "energy_increment": -13,
    "min_duration": 360000,
    "max_duration": 2160000,
    "duration_increment": 72000
  },
  {
    "id": "create_atomic_lamp",
    "type": "SPELL",
    "name": "Lamp",
    "description": "Creates a magical lamp.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "VERBAL", "NO_LEGS", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "min_range": 0,
    "max_range": 0,
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "magic_lamp",
    "shape": "blast",
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER",
    "difficulty": 2,
    "max_level": 20,
    "base_casting_time": 200,
    "base_energy_cost": 750,
    "min_duration": 100000,
    "max_duration": 1000000,
    "duration_increment": 45000
  },
  {
    "id": "recover_bionic_power",
    "type": "SPELL",
    "name": "Manatricity",
    "description": "You have found a way to convert your mana into power you can use for your bionics.",
    "valid_targets": [ "self" ],
    "flags": [ "RESTORATION_SPELL", "RANDOM_DAMAGE", "NO_LEGS", "NO_HANDS", "SOMATIC", "VERBAL", "SILENT" ],
    "extra_effects": [ { "id": "eoc_restoration_setup", "hit_self": true } ],
    "min_damage": { "math": [ "(u_spell_level('recover_bionic_power') * 80) + 125" ] },
    "max_damage": { "math": [ "(u_spell_level('recover_bionic_power') * 200) + 300" ] },
    "base_energy_cost": 550,
    "max_level": 25,
    "spell_class": "TECHNOMANCER",
    "effect": "recover_energy",
    "effect_str": "BIONIC",
    "shape": "blast",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 6,
    "base_casting_time": 1000
  },
  {
    "id": "create_rune_technomancer",
    "type": "SPELL",
    "name": "Technomancer Rune",
    "description": "This ritual inscribes circuit-like ley-lines into a rune, attuned to Technomancers.  You can use the rune as a catalyst for recipes.",
    "valid_targets": [ "self" ],
    "min_damage": 1,
    "max_damage": 1,
    "effect": "spawn_item",
    "effect_str": "rune_technomancer",
    "extra_effects": [ { "id": "eoc_channeling_setup", "hit_self": true } ],
    "shape": "blast",
    "base_casting_time": 5000,
    "base_energy_cost": 5,
    "min_duration": 1,
    "max_duration": 2,
    "duration_increment": 1,
    "difficulty": 0,
    "max_level": 0,
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "flags": [ "CHANNELING_SPELL", "PERMANENT", "NO_LEGS", "CONCENTRATE" ]
  },
  {
    "id": "taze",
    "type": "SPELL",
    "name": "Taze",
    "description": "This spell arcs two small bolts of electricity into a target, shocking them.",
    "valid_targets": [ "hostile", "ground", "ally" ],
    "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "NO_LEGS", "LOUD", "SOMATIC", "NO_HANDS" ],
    "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],
    "effect": "attack",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "energy_source": "BIONIC",
    "difficulty": 1,
    "base_casting_time": 100,
    "casting_time_increment": -1.0,
    "final_casting_time": 80,
    "base_energy_cost": 50,
    "energy_increment": -1.0,
    "final_energy_cost": 30,
    "max_level": 20,
    "damage_type": "electric",
    "min_damage": { "math": [ "(u_spell_level('taze') * 0.3) + 3" ] },
    "max_damage": { "math": [ "(u_spell_level('taze') * 0.75) + 8" ] },
    "min_range": 1,
    "max_range": 4,
    "range_increment": 0.2
  },
  {
    "id": "quantum_tunnel_lesser",
    "type": "SPELL",
    "name": "Lesser Quantum Tunnel",
    "description": "This spell manipulates some quantum something or other to tunnel you through a short distance of space, and even matter, unfortunately there's that whole uncertainty thing as to where you come out.  It leaves you a little dazed on the other side as you reorient yourself.",
    "valid_targets": [ "none" ],
    "flags": [ "CONVEYANCE_SPELL", "NO_LEGS", "NO_HANDS", "SILENT" ],
    "extra_effects": [ { "id": "eoc_conveyance_setup", "hit_self": true } ],
    "effect": "short_range_teleport",
    "effect_str": "dazed",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 2,
    "max_level": 20,
    "base_casting_time": 100,
    "casting_time_increment": -1.0,
    "final_casting_time": 80,
    "base_energy_cost": 100,
    "energy_increment": -1.0,
    "final_energy_cost": 80,
    "min_aoe": 4,
    "max_aoe": 1,
    "aoe_increment": -0.25,
    "min_range": 5,
    "max_range": 10,
    "range_increment": 0.25,
    "min_duration": 100,
    "max_duration": 100
  },
  {
    "id": "synaptic_stimulation",
    "type": "SPELL",
    "name": "Synaptic Stimulation",
    "description": "This spell stimulates the synapses in your brain beyond normal processing speeds, giving you a large boost in mental processing capability.  It enhances your reflexes, speed, and raw intellectual power.  Use responsibly!",
    "valid_targets": [ "self" ],
    "flags": [ "ENHANCEMENT_SPELL", "NO_LEGS", "VERBAL", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "effect": "attack",
    "effect_str": "synaptic_stim",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 7,
    "max_level": 20,
    "base_casting_time": 500,
    "casting_time_increment": -2.5,
    "final_casting_time": 450,
    "base_energy_cost": 500,
    "energy_increment": -7.5,
    "final_energy_cost": 350,
    "min_duration": 6000,
    "max_duration": 180000,
    "duration_increment": 8700
  },
  {
    "id": "laze",
    "type": "SPELL",
    "name": "Laze",
    "description": "You concentrate and release a focused beam of photons at a target, also known as a laser.",
    "valid_targets": [ "hostile", "ground", "ally" ],
    "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "NO_LEGS", "LOUD", "SOMATIC", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],
    "effect": "attack",
    "shape": "line",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "energy_source": "BIONIC",
    "difficulty": 5,
    "max_level": 20,
    "base_casting_time": 100,
    "casting_time_increment": -1.0,
    "final_casting_time": 80,
    "base_energy_cost": 150,
    "energy_increment": -2.0,
    "final_energy_cost": 110,
    "min_damage": { "math": [ "(u_spell_level('laze') * 0.8) + 4" ] },
    "max_damage": { "math": [ "(u_spell_level('laze') * 2) + 10" ] },
    "damage_type": "light",
    "min_range": 10,
    "max_range": 25,
    "range_increment": 1.0,
    "field_id": "fd_laser",
    "min_field_intensity": 2,
    "max_field_intensity": 2,
    "field_chance": 1
  },
  {
    "id": "animated_blade",
    "type": "SPELL",
    "name": { "str": "Animated Blade" },
    "description": "This spell conjures flying animated blades that will cut your enemies down to size.  Into small pieces that is.",
    "valid_targets": [ "ground" ],
    "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "summon",
    "effect_str": "mon_animated_blade",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 8,
    "max_level": 25,
    "base_casting_time": 200,
    "casting_time_increment": -2.0,
    "final_casting_time": 160,
    "base_energy_cost": 350,
    "energy_increment": -2.0,
    "final_energy_cost": 310,
    "min_damage": 1,
    "max_damage": 2,
    "damage_increment": 0.15,
    "min_range": 1,
    "max_range": 5,
    "range_increment": 0.25,
    "min_aoe": 3,
    "max_aoe": 3,
    "min_duration": 6000,
    "max_duration": 156000,
    "duration_increment": 6000
  },
  {
    "id": "mirror_image",
    "type": "SPELL",
    "name": "Mirror Image",
    "description": "This spell manipulates light into barely tangible duplicates of a living being, a magical hologram in short.",
    "valid_targets": [ "ground" ],
    "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "summon",
    "effect_str": "mon_mirror_image",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 4,
    "max_level": 20,
    "base_casting_time": 150,
    "casting_time_increment": -1.0,
    "final_casting_time": 130,
    "base_energy_cost": 200,
    "energy_increment": -2.0,
    "final_energy_cost": 160,
    "min_damage": 1,
    "max_damage": 5,
    "damage_increment": 0.5,
    "min_range": 1,
    "max_range": 10,
    "range_increment": 0.5,
    "min_aoe": 3,
    "max_aoe": 3,
    "min_duration": 3000,
    "max_duration": 6000,
    "duration_increment": 200
  },
  {
    "id": "holographic_transposition",
    "type": "SPELL",
    "name": "Holographic Transposition",
    "description": "Allows you to swap places with a previously existing holographic image of yourself.  If the universe itself can't tell you apart, who could?",
    "valid_targets": [ "hostile", "ally" ],
    "targeted_monster_ids": [ "mon_mirror_image", "mon_hologram" ],
    "flags": [ "CONVEYANCE_SPELL", "NO_LEGS", "LOUD", "SOMATIC", "SWAP_POS", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_conveyance_setup", "hit_self": true } ],
    "effect": "attack",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "difficulty": 3,
    "max_level": 20,
    "base_casting_time": 100,
    "casting_time_increment": -1.0,
    "final_casting_time": 80,
    "base_energy_cost": 150,
    "energy_increment": -2.0,
    "final_energy_cost": 100,
    "min_range": 20,
    "max_range": 30,
    "range_increment": 1.0
  },
  {
    "id": "summon_floating_disk",
    "type": "SPELL",
    "name": "Summon Floating Disk",
    "description": "Summons a floating disk that is sworn to carry your burdens.",
    "valid_targets": [ "ground" ],
    "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "summon_vehicle",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "effect_str": "floating_disk",
    "shape": "blast",
    "difficulty": 5,
    "max_level": 20,
    "base_casting_time": 120,
    "base_energy_cost": 500,
    "min_range": 1,
    "max_range": 10,
    "range_increment": 1,
    "min_duration": 400000,
    "max_duration": 9600000,
    "duration_increment": 460000
  },
  {
    "id": "summon_magic_motorcycle",
    "type": "SPELL",
    "name": "Summon Mojocycle",
    "description": "You're not a cowboy, but on a steel horse you ride regardless.",
    "valid_targets": [ "ground" ],
    "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "summon_vehicle",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "effect_str": "magic_motorcycle",
    "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,
    "learn_spells": { "summon_magic_comcycle": 10 }
  },
  {
    "id": "summon_magic_comcycle",
    "type": "SPELL",
    "name": "Summon Co-op cycle",
    "description": "A bigger ride for bigger loot.  Or a second cowboy.",
    "valid_targets": [ "ground" ],
    "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL", "CONCENTRATE" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "summon_vehicle",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "effect_str": "magic_comcycle",
    "shape": "blast",
    "difficulty": 6,
    "max_level": 20,
    "base_casting_time": 1250,
    "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": "overcharge_burn",
    "type": "SPELL",
    "name": { "str": "Overcharge Burn", "//~": "NO_I18N" },
    "description": { "str": "The side effects of casting the overcharge spell.", "//~": "NO_I18N" },
    "message": "",
    "effect": "spawn_item",
    "effect_str": "overcharge_burn_scar",
    "shape": "blast",
    "min_damage": 1,
    "max_damage": 1,
    "min_duration": 500,
    "duration_increment": -10,
    "max_duration": 200,
    "max_level": 30,
    "valid_targets": [ "none" ]
  },
  {
    "id": "overcharge_eyes",
    "type": "SPELL",
    "name": "Optical Sneeze Beam",
    "description": "You overcharge your internal batteries to send a semi-directed beam from your face.  The inventor of this spell must have had some weird sense of humor.",
    "message": "You overcharge your bionic energy through what ley lines you have left, and channel it through the center of your face.",
    "sound_description": "bzzzzzzt!",
    "sound_ambient": true,
    "effect": "attack",
    "shape": "cone",
    "extra_effects": [ { "id": "overcharge_burn", "hit_self": true }, { "id": "eoc_evocation_setup", "hit_self": true } ],
    "min_damage": { "math": [ "(u_spell_level('overcharge_eyes') * 1.8) + 50" ] },
    "max_damage": { "math": [ "(u_spell_level('overcharge_eyes') * 3.8) + 70" ] },
    "min_range": 8,
    "range_increment": 0.35,
    "max_range": 20,
    "min_aoe": 10,
    "aoe_increment": 0.17,
    "max_aoe": 15,
    "base_energy_cost": 500,
    "final_energy_cost": 500,
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "energy_source": "BIONIC",
    "damage_type": "light",
    "difficulty": 1,
    "max_level": 30,
    "base_casting_time": 120,
    "final_casting_time": 120,
    "valid_targets": [ "hostile", "ground" ],
    "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "LOUD", "VERBAL", "NO_HANDS", "NO_LEGS", "SPLIT_DAMAGE" ]
  },
  {
    "type": "SPELL",
    "name": "X-ray Vision",
    "id": "x-ray",
    "description": "You fire a cone of X-rays that magically allows you to see that area for a short time.",
    "valid_targets": [ "hostile", "ground", "ally" ],
    "flags": [ "EVOCATION_SPELL", "CONCENTRATE", "IGNORE_WALLS" ],
    "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],
    "effect": "attack",
    "shape": "cone",
    "field_id": "fd_clairvoyant",
    "min_field_intensity": 1,
    "max_field_intensity": 1,
    "difficulty": 6,
    "min_range": 5,
    "max_range": 20,
    "range_increment": 0.75,
    "max_level": 20,
    "min_aoe": 15,
    "max_aoe": 60,
    "aoe_increment": 1.5,
    "min_duration": 0,
    "max_duration": 900,
    "duration_increment": 45,
    "base_casting_time": 175,
    "base_energy_cost": 550,
    "energy_source": "BIONIC",
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER"
  },
  {
    "type": "SPELL",
    "name": "Knock",
    "id": "knock",
    "description": "You channel magic into a force capable of opening doors.  This variant can only open wooden doors.",
    "valid_targets": [ "ground" ],
    "effect": "ter_transform",
    "effect_str": "unlock_doors",
    "shape": "blast",
    "flags": [ "CHANNELING_SPELL", "NO_LEGS", "SOMATIC", "CONCENTRATE", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_channeling_setup", "hit_self": true } ],
    "max_level": 15,
    "base_casting_time": 1200,
    "final_casting_time": 1050,
    "casting_time_increment": -10,
    "base_energy_cost": 350,
    "difficulty": 3,
    "min_range": 1,
    "max_range": 4,
    "range_increment": 0.2,
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER"
  },
  {
    "type": "SPELL",
    "name": "Improved Knock",
    "id": "improved_knock",
    "description": "You channel magic into a force capable of opening doors.  This variant can open any locked door.",
    "valid_targets": [ "ground" ],
    "effect": "ter_transform",
    "effect_str": "unlock_all_doors",
    "shape": "blast",
    "flags": [ "CHANNELING_SPELL", "NO_LEGS", "SOMATIC", "CONCENTRATE", "NO_PROJECTILE" ],
    "extra_effects": [ { "id": "eoc_channeling_setup", "hit_self": true } ],
    "max_level": 15,
    "base_casting_time": 2600,
    "final_casting_time": 2375,
    "casting_time_increment": -15,
    "base_energy_cost": 800,
    "difficulty": 7,
    "min_range": 6,
    "max_range": 6,
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER"
  },
  {
    "id": "technomancer_knifeshot",
    "type": "SPELL",
    "name": "Knifeshot",
    "description": "This spell generates a magnetic field around a knife, before launching it at high speed.",
    "valid_targets": [ "hostile", "ally" ],
    "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "CONCENTRATE", "SILENT", "SOMATIC", "NO_HANDS" ],
    "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],
    "components": "spell_components_knifeshot",
    "effect": "attack",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "energy_source": "BIONIC",
    "difficulty": 5,
    "max_level": 20,
    "base_casting_time": 600,
    "casting_time_increment": -15,
    "final_casting_time": 300,
    "base_energy_cost": 50,
    "min_damage": { "math": [ "(u_spell_level('technomancer_knifeshot') * 0.6) + 9" ] },
    "max_damage": { "math": [ "(u_spell_level('technomancer_knifeshot') * 1.6) + 19" ] },
    "damage_type": "stab",
    "min_range": 10,
    "max_range": 20,
    "range_increment": 0.5,
    "min_pierce": 3,
    "max_pierce": 10,
    "pierce_increment": 0.35,
    "learn_spells": { "technomancer_knifeshot_superior": 20 }
  },
  {
    "id": "technomancer_knifeshot_superior",
    "type": "SPELL",
    "name": "Hypervelocity Knifeshot",
    "description": "This spell goes even further beyond, launching a knife so fast it can pierce through targets.",
    "valid_targets": [ "hostile", "ally" ],
    "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "CONCENTRATE", "LOUD", "SOMATIC", "NO_HANDS", "NO_FAIL" ],
    "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],
    "components": "spell_components_knifeshot",
    "effect": "attack",
    "shape": "line",
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic",
    "energy_source": "BIONIC",
    "difficulty": 7,
    "max_level": 1,
    "base_casting_time": 500,
    "base_energy_cost": 125,
    "//": "The damage being unaffected by spell level is intentional",
    "min_damage": 70,
    "max_damage": 100,
    "damage_type": "bullet",
    "min_range": 7,
    "max_range": 7,
    "min_pierce": 15,
    "max_pierce": 15
  },
  {
    "id": "technomancer_robot_shutdown",
    "type": "SPELL",
    "name": "Shutdown",
    "description": "Overload the target, stunning it briefly.  Originally developed during the Roman Empire to target out-of-control golems, this spell became significantly more popular in modern times when it was discovered it also worked on robots and machinery.",
    "valid_targets": [ "hostile", "ally" ],
    "flags": [ "ENERVATION_SPELL", "VERBAL", "SOMATIC", "RANDOM_DAMAGE", "SILENT" ],
    "extra_effects": [ { "id": "eoc_enervation_setup", "hit_self": true } ],
    "effect": "mod_moves",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "difficulty": 6,
    "max_level": 15,
    "min_range": 5,
    "max_range": 20,
    "range_increment": 1,
    "min_damage": { "math": [ "(u_spell_level('technomancer_robot_shutdown') * -15) * evocation_proficiency_modifier()" ] },
    "max_damage": { "math": [ "(u_spell_level('technomancer_robot_shutdown') * -25) * evocation_proficiency_modifier()" ] },
    "magic_type": "magiclysm_generic_magic",
    "base_casting_time": 150,
    "base_energy_cost": 250,
    "targeted_monster_species": [ "GOLEM", "ROBOT", "CYBORG" ]
  },
  {
    "id": "technomancer_conjure_radio",
    "type": "SPELL",
    "name": "Speak through the Aether",
    "description": "One of the most widely-known pre-modern technomantic spells, this allows technomancers to communicate at a distance.  Its use declined rapidly after Guglielmo Marconi invented the radio and suddenly everyone could listen in to their conversations.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "CONCENTRATE", "VERBAL", "SOMATIC" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "spawn_item",
    "effect_str": "technomancer_summoned_radio",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "difficulty": 4,
    "max_level": 15,
    "min_duration": 30000,
    "max_duration": 180000,
    "duration_increment": 15000,
    "magic_type": "magiclysm_generic_magic",
    "base_casting_time": 6000,
    "base_energy_cost": 300
  },
  {
    "id": "technomancer_conjure_ups",
    "type": "SPELL",
    "name": "Power Supply",
    "description": "For the technomancer with no enhancements, this spell summons a power supply composed of pure mana that can be used to charge any compatible device.  Just keep it on your person and it will continually recharge your electronic devices until the duration expires.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "CONCENTRATE", "VERBAL", "SOMATIC" ],
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "effect": "effect_on_condition",
    "effect_str": "EOC_CONJURE_UPS_INITIATE",
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "difficulty": 7,
    "max_level": 20,
    "min_duration": 100000,
    "max_duration": 300000,
    "duration_increment": 10000,
    "magic_type": "magiclysm_generic_magic",
    "base_casting_time": 3000,
    "base_energy_cost": 350
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_INITIATE",
    "effect": [
      {
        "run_eocs": "EOC_CONJURE_UPS_REMOVER",
        "time_in_future": { "math": [ "((u_spell_level('technomancer_conjure_ups') * 100 ) + 1000) * summoning_proficiency_modifier()" ] }
      },
      { "u_spawn_item": "technomancer_summoned_ups", "suppress_message": true },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_BEGIN" }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_EFFECT_BEGIN",
    "condition": { "u_has_item": "technomancer_summoned_ups" },
    "effect": [
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_BEGIN", "time_in_future": 60 },
      {
        "math": [ "u_technomancer_conjure_ups_powering", "=", "( (u_spell_level('technomancer_conjure_ups') / 3) + 1) " ]
      },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT" }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_EFFECT",
    "//": "recursively runs until available power is < 1 or all items are charged",
    "condition": { "math": [ "u_technomancer_conjure_ups_powering >= 1" ] },
    "effect": [
      { "math": [ "u_technomancer_conjure_ups_item_count = 0" ] },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_GET_ITEM_COUNT" },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_AMMEND_ITEM_COUNT" },
      {
        "math": [
          "u_technomancer_conjure_ups_max_indv_power",
          "=",
          "floor(u_technomancer_conjure_ups_powering / u_technomancer_conjure_ups_item_count)"
        ]
      },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_POWER_ITEMS" }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_EFFECT_POWER_ITEMS",
    "//": "power uncharged items and calls the main eoc to deal with any remaining power left over",
    "condition": {
      "and": [
        { "math": [ "u_technomancer_conjure_ups_powering >= 1" ] },
        { "math": [ "u_technomancer_conjure_ups_item_count >= 1" ] }
      ]
    },
    "effect": [
      {
        "u_run_inv_eocs": "all",
        "search_data": [ { "is_chargeable": true } ],
        "true_eocs": [
          {
            "id": "EOC_CONJURE_UPS_EFFECT_POWER_ITEMS_DISTRIBUTION",
            "condition": { "math": [ "u_technomancer_conjure_ups_powering >= 1" ] },
            "effect": [
              {
                "if": { "math": [ "u_technomancer_conjure_ups_max_indv_power >= 1" ] },
                "then": {
                  "math": [
                    "u_technomancer_conjure_ups_powering_used",
                    "=",
                    "min( n_val('power_max') - n_val('power'), u_technomancer_conjure_ups_max_indv_power )"
                  ]
                },
                "else": {
                  "math": [
                    "u_technomancer_conjure_ups_powering_used",
                    "=",
                    "min( n_val('power_max') - n_val('power'), u_technomancer_conjure_ups_powering )"
                  ]
                }
              },
              {
                "math": [
                  "u_technomancer_conjure_ups_powering_used",
                  "=",
                  "min( n_val('power_max') - n_val('power'), u_technomancer_conjure_ups_max_indv_power )"
                ]
              },
              { "math": [ "n_val('power')", "+=", "u_technomancer_conjure_ups_powering_used" ] },
              { "math": [ "u_technomancer_conjure_ups_powering", "-=", "u_technomancer_conjure_ups_powering_used" ] }
            ]
          }
        ]
      },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT" }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_EFFECT_GET_ITEM_COUNT",
    "//": "get total items without max power",
    "effect": [
      {
        "u_run_inv_eocs": "all",
        "search_data": [ { "is_chargeable": true } ],
        "true_eocs": [
          {
            "id": "EOC_CONJURE_UPS_EFFECT_GET_ITEM_COUNT_2",
            "effect": [ { "math": [ "u_technomancer_conjure_ups_item_count++" ] } ]
          }
        ]
      }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_EFFECT_AMMEND_ITEM_COUNT",
    "//": "Reduce item count if the total chargeable power / uncharged item count is less than 1.",
    "condition": {
      "and": [
        { "math": [ "u_technomancer_conjure_ups_powering", ">=", "1" ] },
        { "math": [ "u_technomancer_conjure_ups_item_count", ">=", "1" ] },
        { "math": [ "u_technomancer_conjure_ups_powering / u_technomancer_conjure_ups_item_count", "<", "1" ] }
      ]
    },
    "effect": [
      { "math": [ "u_technomancer_conjure_ups_item_count--" ] },
      { "run_eocs": "EOC_CONJURE_UPS_EFFECT_AMMEND_ITEM_COUNT" }
    ]
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_CONJURE_UPS_REMOVER",
    "effect": [
      { "u_remove_item_with": "technomancer_summoned_ups" },
      { "u_remove_item_with": "technomancer_summoned_ups_2" },
      { "u_remove_item_with": "technomancer_summoned_ups_3" },
      { "u_remove_item_with": "technomancer_summoned_ups_4" },
      { "u_remove_item_with": "technomancer_summoned_ups_5" },
      { "u_remove_item_with": "technomancer_summoned_ups_6" }
    ]
  },
  {
    "id": "technomancer_welder",
    "type": "SPELL",
    "name": "Voltaic Touch",
    "description": "Using the principles of what were once called \"voltaic arcs\", you can electrically heat metal hot enough to weld it together.",
    "valid_targets": [ "self" ],
    "flags": [ "CONJURATION_SPELL", "CONCENTRATE", "VERBAL", "SOMATIC", "NO_EXPLOSION_SFX" ],
    "effect": "spawn_item",
    "effect_str": "technomancer_welder",
    "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ],
    "shape": "blast",
    "spell_class": "TECHNOMANCER",
    "difficulty": 5,
    "max_level": 15,
    "min_damage": 1,
    "max_damage": 1,
    "min_duration": 360000,
    "max_duration": 720000,
    "duration_increment": 24000,
    "magic_type": "magiclysm_generic_magic",
    "base_energy_cost": 300,
    "base_casting_time": 3000
  },
  {
    "id": "technomancer_recharge_vehicle",
    "type": "SPELL",
    "name": "Imbue with Lightning",
    "description": "This fancifully-named spell actually restores power to a battery or power grid.  An esoteric curiosity until electrical power became widespread, even then the power efficiency of fossil fuels rendered it a niche spell.",
    "valid_targets": [ "ground" ],
    "spell_class": "TECHNOMANCER",
    "flags": [ "CHANNELING_SPELL", "RANDOM_DAMAGE", "CONCENTRATE", "VERBAL", "SOMATIC", "NO_LEGS", "NO_EXPLOSION_SFX" ],
    "extra_effects": [ { "id": "eoc_channeling_setup", "hit_self": true } ],
    "difficulty": 5,
    "max_level": 20,
    "effect": "recharge_vehicle",
    "shape": "blast",
    "min_damage": { "math": [ "(u_spell_level('technomancer_recharge_vehicle') * 1650) + 1500" ] },
    "max_damage": { "math": [ "(u_spell_level('technomancer_recharge_vehicle') * 2400) + 2500" ] },
    "min_range": 1,
    "magic_type": "magiclysm_generic_magic",
    "base_energy_cost": 500,
    "base_casting_time": 6000
  },
  {
    "id": "technomancer_gain_electronics_computer_spell",
    "type": "SPELL",
    "name": "Machine Mind",
    "description": "This spell grants the caster an intuitive understanding of electronics and computers, making their use, repair, and construction much easier.",
    "valid_targets": [ "self" ],
    "spell_class": "TECHNOMANCER",
    "flags": [ "ENHANCEMENT_SPELL", "CONCENTRATE", "VERBAL", "SOMATIC", "NO_LEGS" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "effect": "attack",
    "effect_str": "effect_technomancer_gain_electronics_computer",
    "components": "spell_components_technomancer_gain_electronics_computer",
    "shape": "blast",
    "difficulty": 1,
    "max_level": 15,
    "min_duration": 90000,
    "max_duration": 1440000,
    "duration_increment": 90000,
    "magic_type": "magiclysm_generic_magic",
    "base_energy_cost": 350,
    "base_casting_time": 3000
  },
  {
    "id": "technomancer_create_ups_connection",
    "type": "SPELL",
    "name": "Power Linkage",
    "description": "Enchant an item so that it is capable of drawing power wirelessly through the air from a compatible power source.",
    "valid_targets": [ "self" ],
    "spell_class": "TECHNOMANCER",
    "flags": [ "ENHANCEMENT_SPELL", "CONCENTRATE", "VERBAL", "NO_HANDS" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "effect": "effect_on_condition",
    "effect_str": "EOC_TECHNOMANCER_POWER_LINKAGE",
    "components": "spell_components_create_ups_connection",
    "shape": "blast",
    "difficulty": 6,
    "max_level": 15,
    "magic_type": "magiclysm_generic_magic",
    "base_energy_cost": 600,
    "base_casting_time": 720000
  },
  {
    "type": "effect_on_condition",
    "id": "EOC_TECHNOMANCER_POWER_LINKAGE",
    "effect": [
      {
        "u_run_inv_eocs": "manual",
        "search_data": [ { "uses_energy": true, "excluded_flags": [ "USES_BIONIC_POWER", "USE_UPS", "IS_UPS" ] } ],
        "true_eocs": [ { "id": "EOC_TECHNOMANCER_POWER_LINKAGE_ITEM", "effect": [ { "npc_set_flag": "USE_UPS" } ] } ]
      }
    ]
  },
  {
    "id": "technomancer_far_sight",
    "type": "SPELL",
    "name": "Zoom Lens",
    "description": "By etching tiny runes on a lens of great quality and infusing it with their magic, the caster can use the lens to see further than even the finest mundane binoculars.  Unfortunately, the arrangement is unstable and the lens will disintegrate after a time.",
    "valid_targets": [ "self" ],
    "effect": "spawn_item",
    "effect_str": "technomancer_far_sight_lens",
    "components": "spell_components_technomancer_far_sight",
    "shape": "blast",
    "flags": [ "TRANSFORMATION_SPELL", "SOMATIC", "CONCENTRATE", "VERBAL" ],
    "extra_effects": [ { "id": "eoc_transformation_setup", "hit_self": true } ],
    "spell_class": "TECHNOMANCER",
    "difficulty": 6,
    "min_duration": 360000,
    "max_duration": 1440000,
    "duration_increment": 72000,
    "magic_type": "magiclysm_generic_magic",
    "base_casting_time": 60000,
    "base_energy_cost": 600,
    "final_energy_cost": 300,
    "energy_increment": -20,
    "max_level": 15,
    "learn_spells": { "technomancer_far_sight_plus": 15 }
  },
  {
    "id": "technomancer_far_sight_plus",
    "type": "SPELL",
    "name": "Enhanced Zoom Lens",
    "description": "This lens can see farther than ever!  Now you know this spell like the back of your hand, and have started to design your own version.",
    "valid_targets": [ "self" ],
    "flags": [ "TRANSFORMATION_SPELL", "SOMATIC", "CONCENTRATE", "VERBAL", "NO_FAIL" ],
    "extra_effects": [ { "id": "eoc_transformation_setup", "hit_self": true } ],
    "effect": "spawn_item",
    "effect_str": "technomancer_far_sight_lens",
    "components": "spell_components_technomancer_far_sight",
    "shape": "blast",
    "base_casting_time": 60000,
    "base_energy_cost": 300,
    "min_duration": 1440000,
    "max_duration": 8640000,
    "duration_increment": 288000,
    "difficulty": 9,
    "max_level": 25,
    "spell_class": "TECHNOMANCER",
    "magic_type": "magiclysm_generic_magic"
  },
  {
    "id": "technomancer_pain_ignore",
    "type": "SPELL",
    "name": { "str": "The Body Mechanical" },
    "description": "With a word of power, you spur your body to function as a machine would, partially ignoring the effects of pain for a brief moment.",
    "valid_targets": [ "self" ],
    "flags": [ "ENHANCEMENT_SPELL", "VERBAL", "NO_LEGS", "NO_HANDS" ],
    "extra_effects": [ { "id": "eoc_enhancement_setup", "hit_self": true } ],
    "effect": "attack",
    "effect_str": "effect_technomancer_pain_ignore",
    "shape": "blast",
    "base_casting_time": 50,
    "base_energy_cost": 25,
    "energy_source": "BIONIC",
    "magic_type": "magiclysm_generic_magic",
    "spell_class": "TECHNOMANCER",
    "difficulty": 4,
    "max_level": 15,
    "min_duration": 1000,
    "max_duration": 2500,
    "duration_increment": 100
  }
]
