function init(renderer, trailType, utils) {

    utils.bindTrail(renderer, trailType).setCondition(entity => entity.getData("loriatpack:dyn/charge_kinetic_cooldown") > 0.1 || entity.getData("fiskheroes:speed") >= 1 && entity.getData("fiskheroes:speeding")&& entity.getData("fiskheroes:moving"));

    utils.bindBeam(renderer, "fiskheroes:charged_beam", null, "body", 0xF0F0F0, []);
    
    utils.bindBeam(renderer, "fiskheroes:heat_vision", null, "body", 0xF0F0F0, []);

	var shake = renderer.bindProperty("fiskheroes:camera_shake").setCondition(entity => {
        var speed = entity.getData("fiskheroes:speed");
        shake.factor = speed > 1 && entity.isSprinting() && entity.getData("fiskheroes:speed_sprinting") ? (Math.log(speed - 1) + 1) * 0.5 * Math.sin(Math.PI * entity.getInterpolatedData("fiskheroes:dyn/speed_sprint_timer")) : 0;
        return true;
    });
    shake.intensity = 0.05;

    var anim = renderer.createResource("ANIMATION", "loriatpack:wall_run");
    anim.setData((entity, data) => data.load(entity.getInterpolatedData("fiskheroes:flight_animation")));
    renderer.addCustomAnimation("WALL_RUN", anim);

    var anim2 = renderer.createResource("ANIMATION", "loriatpack:vortex_charge");
    anim2.setData((entity, data) => {
        data.load(entity.getInterpolatedData("fiskheroes:beam_shooting_timer"));
    });
    renderer.addCustomAnimation("VORTEX", anim2);

    var anim3 = renderer.createResource("ANIMATION", "loriatpack:vortex");
    anim3.setData((entity, data) => data.load(entity.getInterpolatedData("fiskheroes:beam_shooting_timer") > 0.4 ? entity.getInterpolatedData("fiskheroes:beam_shooting") * 1000 : 0));
    renderer.addCustomAnimation("CHARGED_BEAM", anim3);
	
	var anim4 = renderer.createResource("ANIMATION", "fiskheroes:speedster_sprint");
    anim4.setData((entity, data) => data.load(entity.getInterpolatedData("fiskheroes:dyn/speed_sprint_timer")));
    renderer.addCustomAnimation("speedster.SPRINT", anim4);
}





