public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { // add an explosion if (addExplosion) { abilityObject.AddComponent <CreateAbilityObjectOnDeath>().abilityToInstantiate = AbilityIDList.getAbility(AbilityID.fireballAoe); } // add extra projectiles if (extraProjectiles != 0 && !fireInSequence) { ExtraProjectiles extraProjectilesObject = abilityObject.GetComponent <ExtraProjectiles>(); if (extraProjectilesObject == null) { extraProjectilesObject = abilityObject.AddComponent <ExtraProjectiles>(); extraProjectilesObject.numberOfExtraProjectiles = 0; } extraProjectilesObject.numberOfExtraProjectiles += extraProjectiles; } // add pierce change if (targetsToPierce > 0) { Pierce pierce = abilityObject.GetComponent <Pierce>(); if (pierce == null) { pierce = abilityObject.AddComponent <Pierce>(); pierce.objectsToPierce = 0; } pierce.objectsToPierce += targetsToPierce; } // add chance to create explosion on hit if (chanceToCreateExplosionOnHit > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit ctcaooneh = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); ctcaooneh.chance = chanceToCreateExplosionOnHit; ctcaooneh.spawnAtHit = true; ctcaooneh.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.fireballAoe); } // add chance to ignite if (igniteChance > 0) { ChanceToApplyStatusOnEnemyHit chanceTo = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); chanceTo.chance = igniteChance; chanceTo.statusEffect = StatusEffectList.getEffect(StatusEffectID.Ignite); } if (additionalIgnite) { ApplyStatusOnEnemyHit component = abilityObject.AddComponent <ApplyStatusOnEnemyHit>(); component.statusEffect = StatusEffectList.getEffect(StatusEffectID.Ignite); } if (increasedDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamage); //holder.addBaseDamage(DamageType.FIRE, holder.getBaseDamage(DamageType.FIRE) * increasedDamage); } } // reduce hit damage if (reduceBaseDamageBy80Percent) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { for (int i = 0; i < holder.baseDamageStats.damage.Count; i++) { holder.baseDamageStats.damage[i] = new DamageStatsHolder.DamageTypesAndValues(holder.baseDamageStats.damage[i].damageType, holder.baseDamageStats.damage[i].value * 0.2f); } } } if (chanceForDoubleDamage > 0) { float rand = Random.Range(0f, 1f); if (rand < chanceForDoubleDamage) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { for (int i = 0; i < holder.baseDamageStats.damage.Count; i++) { holder.addBaseDamage(holder.baseDamageStats.damage[i].damageType, holder.getBaseDamage(holder.baseDamageStats.damage[i].damageType)); } } } } if (moreDamageAgainstPoisoned != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); HasStatusEffectConditional conditional = new HasStatusEffectConditional(); conditional.statusEffect = StatusEffectID.Poison; conditionalEffect.conditional = conditional; conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstPoisoned); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (moreDamageAgainstBleeding != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); HasStatusEffectConditional conditional = new HasStatusEffectConditional(); conditional.statusEffect = StatusEffectID.Bleed; conditionalEffect.conditional = conditional; conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstBleeding); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (homing) { abilityObject.AddComponent <HomingMovement>(); } return(abilityObject); }
public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { // choose the nova type if (canIceNova || canFireNova || canLightningNova) { int randMax = 0; if (canIceNova) { randMax++; } if (canFireNova) { randMax++; } if (canLightningNova) { randMax++; } float rand = Random.Range(0f, randMax); if (rand < 1f) { if (canIceNova) { abilityObject = instantiateIceNova(abilityObject, location, targetLocation); } else if (canFireNova) { abilityObject = instantiateFireNova(abilityObject, location, targetLocation); } else { abilityObject = instantiateLightningNova(abilityObject, location, targetLocation); } } else if (rand < 2f) { if (canFireNova && canIceNova) { abilityObject = instantiateFireNova(abilityObject, location, targetLocation); } else { abilityObject = instantiateLightningNova(abilityObject, location, targetLocation); } } else { abilityObject = instantiateLightningNova(abilityObject, location, targetLocation); } } if (chanceForChainingIceNova > 0) { float rand2 = Random.Range(0f, 1f); if (rand2 < chanceForChainingIceNova) { CreateAbilityObjectOnNewEnemtHit newComponent = abilityObject.AddComponent <CreateAbilityObjectOnNewEnemtHit>(); newComponent.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.delayerForChainingIceNova); } } if (chillChance > 0) { ChanceToApplyStatusOnEnemyHit newComponent = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); newComponent.statusEffect = StatusEffectList.getEffect(StatusEffectID.Chill); newComponent.chance = chillChance; } if (shockChance > 0) { ChanceToApplyStatusOnEnemyHit newComponent = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); newComponent.statusEffect = StatusEffectList.getEffect(StatusEffectID.Shock); newComponent.chance = shockChance; } if (igniteChance > 0) { ChanceToApplyStatusOnEnemyHit newComponent = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); newComponent.statusEffect = StatusEffectList.getEffect(StatusEffectID.Ignite); newComponent.chance = igniteChance; } if (addedCritChance != 0) { foreach (DamageStatsHolder damage in abilityObject.GetComponents <DamageStatsHolder>()) { damage.baseDamageStats.critChance += addedCritChance; } } if (chanceToAttachSparkCharge > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit newComponent = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); newComponent.spawnAtHit = true; newComponent.chance = chanceToAttachSparkCharge; newComponent.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.sparkCharge); } if (addedCritMultiplier != 0) { foreach (DamageStatsHolder damage in abilityObject.GetComponents <DamageStatsHolder>()) { damage.baseDamageStats.critMultiplier += addedCritMultiplier; } } if (canTarget) { abilityObject.AddComponent <StartsAtTarget>(); } if (increasedDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamage); } } if (moreDamageAgainstFullHealth != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); conditionalEffect.conditional = new FullHealthConditional(); conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstFullHealth); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (increasedRadius != 0) { foreach (CreateOnDeath cod in abilityObject.GetComponents <CreateOnDeath>()) { cod.increasedRadius = increasedRadius; } foreach (CapsuleCollider col in abilityObject.GetComponents <CapsuleCollider>()) { col.height *= (1 + increasedRadius); col.radius *= (1 + increasedRadius); } } return(abilityObject); }
public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { // check if the explosion needs to be removed if (removeExplosion) { CreateAbilityObjectOnDeath[] components = abilityObject.GetComponents <CreateAbilityObjectOnDeath>(); for (int i = 0; i < components.Length; i++) { if (components[i].abilityToInstantiate == AbilityIDList.getAbility(AbilityID.lightningExplosion)) { Destroy(components[i]); components[i].deactivate(); } } } // explosion only stuff else { if (increasedExplosionDamage != 0 || explosionChanceToShock != 0) { LightningExplosionMutator mut = abilityObject.AddComponent <LightningExplosionMutator>(); mut.increasedDamage = increasedExplosionDamage; mut.chanceToShock = explosionChanceToShock; } if (explodesAtTarget) { abilityObject.GetComponent <DestroyAfterDuration>().duration = 1.5f; if (!abilityObject.GetComponent <LocationDetector>()) { abilityObject.AddComponent <LocationDetector>(); } DestroyAfterDurationAfterReachingTargetLocation component = abilityObject.AddComponent <DestroyAfterDurationAfterReachingTargetLocation>(); component.duration = 0f; } if (chargedGroundAtEndChance > 0) { float rand = Random.Range(0f, 1f); if (rand < chargedGroundAtEndChance) { CreateAbilityObjectOnDeath component = abilityObject.AddComponent <CreateAbilityObjectOnDeath>(); component.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.chargedGround); } } } if (chanceToAttachSparkCharge > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit newComponent = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); newComponent.spawnAtHit = true; newComponent.chance = chanceToAttachSparkCharge; newComponent.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.sparkCharge); } if (increasedProjectileDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedProjectileDamage); } } if (removePull) { PullComponent[] pullComponents = abilityObject.GetComponents <PullComponent>(); for (int i = 0; i < pullComponents.Length; i++) { Destroy(pullComponents[i]); } } if (shockChance > 0) { ChanceToApplyStatusOnEnemyHit chanceTo = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); chanceTo.chance = shockChance; chanceTo.statusEffect = StatusEffectList.getEffect(StatusEffectID.Shock); } if (increasedSpeed > 0) { AbilityMover mover = abilityObject.GetComponent <AbilityMover>(); if (mover) { mover.speed *= (1 + increasedSpeed); } } if (!usingAbility) { usingAbility = GetComponent <UsingAbility>(); } // casting stuff if (lightningAegisChance > 0 && usingAbility) { if (lightningAegisChance >= Random.Range(0f, 1f)) { usingAbility.UseAbility(AbilityIDList.getAbility(AbilityID.lightningAegis), transform.position, false, false); } } if (knockBackOnCastChance > 0 && usingAbility) { if (knockBackOnCastChance >= Random.Range(0f, 1f)) { usingAbility.UseAbility(AbilityIDList.getAbility(AbilityID.knockBack), transform.position, false, false); } } return(abilityObject); }
public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { if (addedVoidDamage > 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.addBaseDamage(DamageType.VOID, addedVoidDamage); } } if (timeRotChance > 0) { ChanceToApplyStatusOnEnemyHit newComponent = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); newComponent.statusEffect = StatusEffectList.getEffect(StatusEffectID.TimeRot); newComponent.chance = timeRotChance; } if (igniteChance > 0) { ChanceToApplyStatusOnEnemyHit newComponent = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); newComponent.statusEffect = StatusEffectList.getEffect(StatusEffectID.Ignite); newComponent.chance = igniteChance; } if (addedCritChance != 0) { foreach (DamageStatsHolder damage in abilityObject.GetComponents <DamageStatsHolder>()) { damage.baseDamageStats.critChance += addedCritChance; } } if (chanceToAttachSparkCharge > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit newComponent = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); newComponent.spawnAtHit = true; newComponent.chance = chanceToAttachSparkCharge; newComponent.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.sparkCharge); } if (addedCritMultiplier != 0) { foreach (DamageStatsHolder damage in abilityObject.GetComponents <DamageStatsHolder>()) { damage.baseDamageStats.critMultiplier += addedCritMultiplier; } } if (increasedDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamage); } } if (moreDamageAgainstFullHealth != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); conditionalEffect.conditional = new FullHealthConditional(); conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstFullHealth); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (moreDamageAgainstTimeRotting != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); HasStatusEffectConditional conditional = new HasStatusEffectConditional(); conditional.statusEffect = StatusEffectID.TimeRot; conditionalEffect.conditional = conditional; conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstTimeRotting); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (increasedRadius > 0) { foreach (CreateOnDeath cod in abilityObject.GetComponents <CreateOnDeath>()) { cod.increasedRadius = increasedRadius; } foreach (CapsuleCollider col in abilityObject.GetComponents <CapsuleCollider>()) { col.height *= (1 + increasedRadius); col.radius *= (1 + increasedRadius); } } return(abilityObject); }
public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { // return a channelled fireball object if this is channelled if (channelled) { Destroy(abilityObject); abilityObject = Instantiate(Ability.getAbility(AbilityID.channelledFireball).abilityPrefab, location, Quaternion.Euler(targetLocation - location)); // change the mutator on the new abilityObject FireballMutator mut = Comp <FireballMutator> .GetOrAdd(abilityObject); mut.extraProjectiles = extraProjectiles; mut.addExplosion = addExplosion; mut.chanceToCreateExplosionOnHit = chanceToCreateExplosionOnHit; mut.igniteChance = igniteChance; mut.targetsToPierce = targetsToPierce; mut.reduceBaseDamageBy80Percent = reduceBaseDamageBy80Percent; mut.increasedCastSpeed = increasedCastSpeed; mut.chanceForDoubleDamage = chanceForDoubleDamage; mut.fireAddedAsLightning = fireAddedAsLightning; mut.increasedDamage = increasedDamage; mut.moreDamageAgainstIgnited = moreDamageAgainstIgnited; mut.moreDamageAgainstChilled = moreDamageAgainstChilled; mut.homing = homing; mut.freeWhenOutOfMana = freeWhenOutOfMana; mut.alwaysFree = alwaysFree; mut.increasedSpeed = increasedSpeed; mut.increasedDuration = increasedDuration; mut.inaccuracy = inaccuracy; // some are always false mut.channelled = false; mut.fireInSequence = false; // this will be the channelled fireball object mut.channelledFireballObject = true; // return the new ability object and do not change it further return(abilityObject); } // disable shared hit detector for channelling if (channelledFireballObject) { foreach (HitDetector detector in abilityObject.GetComponents <HitDetector>()) { detector.cannotHaveSharedhitDetector = true; } } // add an explosion if (addExplosion) { abilityObject.AddComponent <CreateAbilityObjectOnDeath>().abilityToInstantiate = AbilityIDList.getAbility(AbilityID.fireballAoe); } // increase speed if (increasedSpeed != 0) { abilityObject.GetComponent <AbilityMover>().speed *= (1 + increasedSpeed); } // increase duration if (increasedDuration != 0) { abilityObject.GetComponent <DestroyAfterDuration>().duration *= (1 + increasedDuration); } // slightly randomise target location if (inaccuracy) { targetLocation += new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)) * 0.25f * Vector3.Distance(location, targetLocation); } // add extra projectiles if (extraProjectiles != 0 && !fireInSequence) { ExtraProjectiles extraProjectilesObject = abilityObject.GetComponent <ExtraProjectiles>(); if (extraProjectilesObject == null) { extraProjectilesObject = abilityObject.AddComponent <ExtraProjectiles>(); extraProjectilesObject.numberOfExtraProjectiles = 0; } extraProjectilesObject.numberOfExtraProjectiles += extraProjectiles; } // add pierce change if (targetsToPierce > 0) { Pierce pierce = abilityObject.GetComponent <Pierce>(); if (pierce == null) { pierce = abilityObject.AddComponent <Pierce>(); pierce.objectsToPierce = 0; } pierce.objectsToPierce += targetsToPierce; } // add chance to create explosion on hit if (chanceToCreateExplosionOnHit > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit ctcaooneh = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); ctcaooneh.chance = chanceToCreateExplosionOnHit; ctcaooneh.spawnAtHit = true; ctcaooneh.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.fireballAoe); } // add chance to ignite if (igniteChance > 0) { ChanceToApplyStatusOnEnemyHit chanceTo = abilityObject.AddComponent <ChanceToApplyStatusOnEnemyHit>(); chanceTo.chance = igniteChance; chanceTo.statusEffect = StatusEffectList.getEffect(StatusEffectID.Ignite); } if (increasedDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamage); //holder.addBaseDamage(DamageType.FIRE, holder.getBaseDamage(DamageType.FIRE) * increasedDamage); } } // reduce hit damage if (reduceBaseDamageBy80Percent) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { for (int i = 0; i < holder.baseDamageStats.damage.Count; i++) { holder.baseDamageStats.damage[i] = new DamageStatsHolder.DamageTypesAndValues(holder.baseDamageStats.damage[i].damageType, holder.baseDamageStats.damage[i].value * 0.2f); } } } if (chanceForDoubleDamage > 0) { float rand = Random.Range(0f, 1f); if (rand < chanceForDoubleDamage) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { for (int i = 0; i < holder.baseDamageStats.damage.Count; i++) { holder.addBaseDamage(holder.baseDamageStats.damage[i].damageType, holder.getBaseDamage(holder.baseDamageStats.damage[i].damageType)); } } } } if (fireAddedAsLightning > 0) { abilityObject.GetComponentInChildren <DisableOnStart>().active = false; foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.addBaseDamage(DamageType.LIGHTNING, holder.getBaseDamage(DamageType.FIRE) * fireAddedAsLightning); } } if (moreDamageAgainstIgnited != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); HasStatusEffectConditional conditional = new HasStatusEffectConditional(); conditional.statusEffect = StatusEffectID.Ignite; conditionalEffect.conditional = conditional; conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstIgnited); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (moreDamageAgainstChilled != 0) { // create the conditional DamageConditionalEffect conditionalEffect = new DamageConditionalEffect(); HasStatusEffectConditional conditional = new HasStatusEffectConditional(); conditional.statusEffect = StatusEffectID.Chill; conditionalEffect.conditional = conditional; conditionalEffect.effect = new DamageEffectMoreDamage(moreDamageAgainstChilled); // add the conditional to all damage stats holders foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.conditionalEffects.Add(conditionalEffect); } } if (homing) { abilityObject.AddComponent <HomingMovement>(); } return(abilityObject); }
public override GameObject Mutate(GameObject abilityObject, Vector3 location, Vector3 targetLocation) { if (addedLightningPerMana != 0 && mana) { float addedDamage = mana.currentMana * addedLightningPerMana; foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.addBaseDamage(DamageType.LIGHTNING, addedDamage); } } if (critChancePerMana != 0 && mana) { float addedCrit = mana.currentMana * critChancePerMana; foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.critChance += addedCrit; } } if (additionalManaOnHit != 0 || increasedManaOnHit != 0 || manaGainOnHitWhileOutOfMana != 0) { GiveCreatorManaOnHit component = abilityObject.GetComponent <GiveCreatorManaOnHit>(); if (component) { component.manaOnHit += additionalManaOnHit; if (mana && mana.currentMana <= 0) { component.manaOnHit += manaGainOnHitWhileOutOfMana; } component.manaOnHit *= 1 + increasedManaOnHit; } } if (increasedDamage != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamage); } } if (increasedDamageWhileOutOfMana != 0 && mana && mana.currentMana <= 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.increaseAllDamage(increasedDamageWhileOutOfMana); } } if (addedCritChance != 0) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.critChance += addedCritChance; } } if (chanceToAttachSparkCharge > 0) { ChanceToCreateAbilityObjectOnNewEnemyHit newComponent = abilityObject.AddComponent <ChanceToCreateAbilityObjectOnNewEnemyHit>(); newComponent.spawnAtHit = true; newComponent.chance = chanceToAttachSparkCharge; newComponent.abilityToInstantiate = AbilityIDList.getAbility(AbilityID.sparkCharge); } if (removesCritMultiplier) { foreach (DamageStatsHolder holder in abilityObject.GetComponents <DamageStatsHolder>()) { holder.baseDamageStats.noCritMultiplier = true; } } if (canTeleport) { abilityObject.GetComponent <StartsTowardsTarget>().active = false; abilityObject.AddComponent <StartsAtTarget>().facesAwayFromStart = true; } if (chanceToKnockBack > 0) { float rand = Random.Range(0f, 1f); if (rand < chanceToKnockBack) { abilityObject.AddComponent <CreateAbilityObjectOnDeath>().abilityToInstantiate = AbilityIDList.getAbility(AbilityID.knockBack); } } if (tenacityDebuffOnHit != 0) { DebuffOnEnemyHit component = abilityObject.AddComponent <DebuffOnEnemyHit>(); component.addDebuffToList(Tags.Properties.Tenacity, tenacityDebuffOnHit, 0, null, null, 4f); } if (increasedRadius != 0) { foreach (CreateOnDeath cod in abilityObject.GetComponents <CreateOnDeath>()) { cod.increasedRadius = increasedRadius; cod.increasedHeight = increasedRadius; } foreach (CapsuleCollider col in abilityObject.GetComponents <CapsuleCollider>()) { col.height *= (1 + increasedRadius); col.radius *= (1 + increasedRadius); } } return(abilityObject); }