private Person caster;              //Person from whom this effect originated.
 
 /// <summary>
 /// AbilityEffect main constructor for all values
 /// </summary>
 /// <param name="damage">Damage done immediately on hit.</param>
 /// <param name="damageATurn">Damage done per turn to all hit.</param>
 /// <param name="dotLength">Duration of the DoT effect, if there is one</param>
 /// <param name="energyHit">Energy removed from the target immediately on hit.</param>
 /// <param name="energyDoT">Energy removed per turn on all hit.</param>
 /// <param name="EoTLength">Duration of the EoT</param>
 /// <param name="Caster">Originator of this Effect.</param>
 /// <param name="iconSprite">Icon for the debuff to display in the character stat sheet.</param>
 /// <param name="overlaySprite">Sprite which draws over the character on the grid while this effect is on.</param>
 public AbilityEffect(float damage, float damageATurn, float dotLength, float energyHit, float energyDoT, float EoTLength, Sprite iconSprite, Sprite overlaySprite = null, Person Caster = null)
 {
     damageOnHit = damage;
     damagePerTurn = damageATurn;
     dotDuration = dotLength;
     energyDamage = energyHit;
     energyDamagePerTurn = energyDoT;
     eotDuration = EoTLength;
     debuffSprite = iconSprite;
     caster = Caster;
     effectSprite = overlaySprite;
 }
        protected Person caster = null, target = null;      //originator and target of the current cast cycle.

        /// <summary>
        /// Ability Constructor
        /// </summary>
        /// <param name="EnergyCost">Amount of energy required to cast, and taken when cast.</param>
        /// <param name="Aggressive">Indicates whether this ability will target enemies(T) or allies(F).</param>
        /// <param name="ButtonSprite">Sprite displayed on the button</param>
        /// <param name="Name">Name of the ability displayed on the buttons</param>
        /// <param name="overtimeEffects">Any and all effects this spell will have</param>
        /// <param name="Cooldown">Number of turns until this ability can be cast again.</param>
        /// <param name="ChannelTime">Length of time this spell requires the character to be inactive between cast start and effects.</param>
        /// <param name="EnergyCostPerTurn">Energy removed from the caster per turn this effect is channeled.</param>
        /// <param name="SelfDamage">Damage done to the caster, instantly upon hit.</param>
        /// <param name="ImpactSprite">Sprite added to any victim's Spritelist.</param>
        /// <param name="ProjectileType">Indicates whether this Ability will fly between targets (T), or immediately hit its target (F).</param>
        /// <param name="Projectile">Sprites shown to fly between targets, if this will create a projectile</param>
        public Ability(float EnergyCost, bool Aggressive, Sprite ButtonSprite, String Name, 
            List<AbilityEffect> overtimeEffects, short ProjectileType = (short) ProjectileTypes.none, List<Sprite> ProjectileSprites = null, Sprite ImpactSprite = null,
            int Cooldown = 0, int ChannelTime = 0, float EnergyCostPerTurn = 0, float SelfDamage = 0)
        {
            this.energyCost = EnergyCost;
            this.bAggressive = Aggressive;
            this.buttonSprite = ButtonSprite;
            this.AbilityName = Name;
            this.abilityEffects = overtimeEffects;
            this.cooldown = Cooldown;
            this.channelTime = ChannelTime;
            this.energyCostPerTurn = EnergyCostPerTurn;
            this.lashbackDamage = SelfDamage;
            this.projectileType = ProjectileType;
            this.impactSprite = ImpactSprite;
            this.projectileSprites = ProjectileSprites;
            if (projectileSprites == null)
            {
                projectileSprites = new List<Sprite>();
            }
        }
 /// <summary>
 /// Changes the effect's sprites for the current instance and all subsequently copied instances
 /// </summary>
 /// <param name="iconSprite"></param>
 /// <param name="overlaySprite"></param>
 public void setSprites(Sprite iconSprite, Sprite overlaySprite = null)
 {
     debuffSprite = iconSprite;
     effectSprite = overlaySprite;
 }