function init(hero) {
    hero.setName("Agatha Harkness");
    hero.setTier(6);

    hero.setChestplate("Torso");
    hero.setLeggings("Pants");
    hero.setBoots("Boots");

    hero.addPowers("wv:master_sorceress");
    hero.addAttribute("PUNCH_DAMAGE", 3.0, 0);
    hero.addAttribute("WEAPON_DAMAGE", 1.5, 0);
    hero.addAttribute("FALL_RESISTANCE", 0.5, 1);

    hero.addKeyBind("AIM", "Aim", 1);
    hero.addKeyBind("CHARGED_BEAM", "Energy Explosion", 2);
    hero.addKeyBind("SPELL_MENU", "key.spellMenu", 3);
    hero.addKeyBind("transformation", "Switch Powers", 4)
    hero.addKeyBind("TELEKINESIS", "key.telekinesis", 1)

    hero.supplyFunction("canAim", canAim)

    hero.setTickHandler((entity, manager) => {
        manager.incrementData(entity, "wv:dyn/holoanimation", 20, 20, entity.is("DISPLAY") && !entity.as("DISPLAY").isStatic() && entity.as("DISPLAY").getDisplayType() === "HOLOGRAM");
        var time = 20;
        if (entity.getData("wv:dyn/worn_suit") < 10) {
            manager.setData(entity, "wv:dyn/worn_suit", entity.getData("wv:dyn/worn_suit") + 0.1);
        }
        if (entity.getData("fiskheroes:time_since_damaged") < time && entity.getData("wv:dyn/worn_suit") > time/5 && !entity.getData("wv:dyn/power")) {
            manager.setData(entity, "wv:dyn/power", true);
        } else if (entity.getData("fiskheroes:time_since_damaged") > time && entity.getData("wv:dyn/power")) {
            manager.setData(entity, "wv:dyn/power", false);
        }
        else 
        if (entity.getData("fiskheroes:beam_shooting_timer")) {
            manager.setData(entity, "wv:dyn/power_charge", time - 100 )
        }
    });

    hero.setModifierEnabled((entity, modifier) => {
        switch (modifier.name()) {
        case "fiskheroes:repulsor_blast":
            return !entity.getData("wv:dyn/transformation");
        default:
            return true
        }
    })

    hero.setKeyBindEnabled((entity, keyBind) => {
        switch (keyBind) {
        case "TELEKINESIS":
            return entity.getData("fiskheroes:aiming") && entity.getData("wv:dyn/transformation");
        case "CHARGED_BEAM":
            return entity.getData("wv:dyn/power_charge") > 0.8;
            case "SPELL_MENU":
            return !entity.getData("fiskheroes:telekinesis")
        }
        return true
    })
}

function canAim(entity) {
    return entity.getHeldItem().isEmpty();
}
