public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = 100; if (Engine.RNG.Next(0, 100) <= 10) { damage *= 2; results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect("Ignite")) { int result = Engine.RNG.Next(0, 100); if (result <= 15) { target.ApplyEffect(new Core.Stats.Classes.Mage.Effect_FireballDOT(target)); } } } return(results); }
public override void CastAbilityGround(StatsPackage caster, int x0, int y0, int radius, Level level) { if (!GameManager.CurrentLevel.IsTileSolid(x0, y0)) { GameManager.Player.TeleportPlayer(GameManager.CurrentLevel, new Point(x0, y0)); } }
public PathingEntity(Level parent) : base(parent) { ForegroundColor = Color4.Black; BackgroundColor = Color4.Pink; token = '♥'; EntityType = EntityTypes.Enemy; isSolid = true; statsPackage = new StatsPackage(this) { UnitName = "Demon Heart", AttackPower = new Stat() { BaseValue = 25.0 }, PhysicalAvoidance = new Stat() { BaseValue = 15.0 }, PhysicalReduction = new Stat() { BaseValue = 20.0 }, PhysicalHitChance = new Stat() { BaseValue = 75.0 }, Health = 150 }; }
public PracticeDummy(Level parent) : base(parent) { EntityType = EntityTypes.Enemy; ForegroundColor = Color4.Tan; Token = '±'; IsSolid = true; statsPackage = new StatsPackage(this) { UnitName = "Training Dummy", AttackPower = new Stat() { BaseValue = 0.0 }, PhysicalAvoidance = new Stat() { BaseValue = 0.0 }, PhysicalReduction = new Stat() { BaseValue = 0.0 }, Health = 500000 }; }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = (int)((caster.SpellPower.EffectiveValue * 0.5) + (caster.AttackPower.EffectiveValue * 0.5)); if (DoesAttackCrit(caster)) { damage = ApplyCriticalDamage(damage, caster); results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect(typeof(Effect_FireLashDOT))) { target.ApplyEffect(new Effect_FireLashDOT()); } } return(results); }
public virtual void CastAbilityGround(StatsPackage caster, int x0, int y0, int radius, Level level) { if (CanCastAbility(caster, x0, y0)) { ApplyAbilityCost(caster); currentCD = cooldown; if (radius > 0) { for (int angle = 0; angle < 360; angle += 1) { for (int r = 0; r < radius; r++) { int x = (int)(x0 + 0.5 + r * Math.Cos(angle)); int y = (int)(y0 + 0.5 + r * Math.Sin(angle)); Entity entity = level.GetEntity(x, y); if (entity != null) { entity.Attack(caster.ParentEntity, this); } } } } else { Entity entity = level.GetEntity(x0, y0); if (entity != null) { entity.Attack(caster.ParentEntity, this); } } } }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = (int)(caster.SpellPower.EffectiveValue * 1.5); if (DoesAttackCrit(caster)) { damage = ApplyCriticalDamage(damage, caster); results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect("Ignite")) { int result = Engine.RNG.Next(0, 100); if (result <= 20) { target.ApplyEffect(new Effect_FireballDOT(target)); } } } return(results); }
public Entity(Level parentLevel) { this.parentLevel = parentLevel; EntityType = EntityTypes.NPC; statsPackage = new StatsPackage(this); }
public Effect_IceBlock(StatsPackage parent) : base(parent, 5) { EffectName = "Ice Block"; IsHarmful = false; EffectDescription = "A thin Ice barrier surrounds you preventing damage being dealt to you for a small amount of time."; }
public Effect_Frostbolt(StatsPackage package) : base(package, 5) { EffectName = "Chilled"; IsHarmful = true; EffectDescription = "You feel extremely cold, making it harder to resist damage."; }
public int CalculateManaLeech(int damage, StatsPackage caster) { if (abilityType == AbilityTypes.Magical) { return((int)(damage * (caster.MPLeechSpell / 100))); } return((int)(damage * (caster.MPLeechPhysical / 100))); }
public int CalculateReflectedDamage(int damage, StatsPackage target) { if (abilityType == AbilityTypes.Physical) { return((int)(damage * (target.PhysicalReflection.EffectiveValue / 100))); } return((int)(damage * (target.SpellReflection.EffectiveValue / 100))); }
public int CalculateAbsorption(int damage, StatsPackage target) { if (abilityType == AbilityTypes.Physical) { return((int)(target.PhysicalReduction.EffectiveValue / 100 * damage)); } return((int)(target.SpellReduction.EffectiveValue / 100 * damage)); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { caster.ApplyEffect(new Effect_ShieldWall()); return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { target.DrainMana(Engine.RNG.Next(0, (int)target.MaxMana.EffectiveValue)); return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public Effect_Weaken(StatsPackage package) : base(package, 0) { EffectName = "Weakened Soul"; IsHarmful = true; EffectDescription = "Shadows have placed a grip upon your soul! You feel much weaker."; }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { target.ApplyEffect(new Effect_HavocDOT(target)); return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { caster.ApplyEffect(new Combat.Effects.BasicBleed(caster)); return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public static void PerformAbility(StatsPackage caster, StatsPackage target, Ability ability) { CombatResults combatResults = ability.CastAbilityTarget(caster, target); caster.OnAttack(combatResults); target.OnDefend(combatResults); combatResults.ProcessResults(); }
public Effect_HavocDOT(StatsPackage package) : base(package, 10) { EffectName = "Havoc"; IsHarmful = true; EffectType = EffectTypes.Magical; EffectDescription = "The shadows assault you from all sides."; }
public Effect_ChaosDOT(StatsPackage package) : base(package, 10) { EffectName = "Chaos Burning"; IsHarmful = true; EffectType = EffectTypes.Magical; EffectDescription = "Chaos is warping your mind, causing you take periodical damage."; }
public override void CastAbilityGround(StatsPackage caster, int x0, int y0, int radius, Level level) { Circle circle = new Circle() { X = x0, Y = y0, Radius = 5 }; level.StainTile(circle, Color4.Orange); }
public Effect_FireballDOT(StatsPackage package) : base(package, 15) { EffectName = "Ignite"; IsHarmful = true; EffectType = EffectTypes.Magical; EffectDescription = "You have been set aflame!!!"; }
public int ApplyCriticalDamage(int damage, StatsPackage caster) { if (abilityType == AbilityTypes.Physical) { return((int)(damage * caster.PhysicalCritPower.EffectiveValue)); } return((int)(damage * caster.SpellCritPower.EffectiveValue)); }
public override void CastAbilityGround(StatsPackage caster, int x0, int y0, int radius, Level level) { if (CanCastAbility(caster, x0, y0)) { Point delta = new Point(x0 - caster.ParentEntity.X, y0 - caster.ParentEntity.Y); FlameBreath breath = new FlameBreath(level, new Point(caster.ParentEntity.X + delta.X, caster.ParentEntity.Y + delta.Y), delta); level.Entities.Add(breath); } }
public BasicBleed(StatsPackage package) : base(package, 8) { EffectName = "Bleeding"; EffectDescription = "You are bleeding!"; EffectType = EffectTypes.Physical; IsHarmful = true; IsImmuneToPurge = false; }
public static StatsPackage CalculateStats(StatsPackage stats) { if (ItemEquipped(EquipmentSlots.MainHand)) { stats = MainHand.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.OffHand)) { stats = OffHand.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.TwoHand)) { stats = TwoHand.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Head)) { stats = HeadSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Neck)) { stats = NeckSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Shoulder)) { stats = ShoulderSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Chest)) { stats = ChestSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Legs)) { stats = LegsSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Boots)) { stats = BootsSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Gloves)) { stats = GlovesSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Ring)) { stats = RingSlot.ModPackage.ApplyPackage(stats); } if (ItemEquipped(EquipmentSlots.Relic)) { stats = RelicSlot.ModPackage.ApplyPackage(stats); } return(stats); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { if (!target.HasEffect(typeof(Effect_WindShear))) { target.ApplyEffect(new Effect_WindShear()); } return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public Effect_SoulLink(Entity_Impling imp, StatsPackage package) : base(package, 0) { EffectName = "Soul Link - Impling"; EffectDescription = "You have an impling serving by your side. He will sacrifice himself to save his master."; EffectType = EffectTypes.Magical; IsImmuneToPurge = true; IsHarmful = false; impling = imp; }