Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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));
     }
 }
Ejemplo n.º 3
0
        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
            };
        }
Ejemplo n.º 4
0
        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
            };
        }
Ejemplo n.º 5
0
 public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target)
 {
     return(new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     });
 }
Ejemplo n.º 6
0
            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);
            }
Ejemplo n.º 7
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 8
0
            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);
            }
Ejemplo n.º 9
0
        public Entity(Level parentLevel)
        {
            this.parentLevel = parentLevel;
            EntityType       = EntityTypes.NPC;

            statsPackage = new StatsPackage(this);
        }
Ejemplo n.º 10
0
            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.";
            }
Ejemplo n.º 11
0
            public Effect_Frostbolt(StatsPackage package)
                : base(package, 5)
            {
                EffectName = "Chilled";
                IsHarmful  = true;

                EffectDescription = "You feel extremely cold, making it harder to resist damage.";
            }
Ejemplo n.º 12
0
 public int CalculateManaLeech(int damage, StatsPackage caster)
 {
     if (abilityType == AbilityTypes.Magical)
     {
         return((int)(damage * (caster.MPLeechSpell / 100)));
     }
     return((int)(damage * (caster.MPLeechPhysical / 100)));
 }
Ejemplo n.º 13
0
 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)));
 }
Ejemplo n.º 14
0
 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));
 }
Ejemplo n.º 15
0
 public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target)
 {
     caster.ApplyEffect(new Effect_ShieldWall());
     return(new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     });
 }
Ejemplo n.º 16
0
 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
     });
 }
Ejemplo n.º 17
0
            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.";
            }
Ejemplo n.º 18
0
 public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target)
 {
     target.ApplyEffect(new Effect_HavocDOT(target));
     return(new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     });
 }
Ejemplo n.º 19
0
 public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target)
 {
     caster.ApplyEffect(new Combat.Effects.BasicBleed(caster));
     return(new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     });
 }
Ejemplo n.º 20
0
        public static void PerformAbility(StatsPackage caster, StatsPackage target, Ability ability)
        {
            CombatResults combatResults = ability.CastAbilityTarget(caster, target);

            caster.OnAttack(combatResults);
            target.OnDefend(combatResults);

            combatResults.ProcessResults();
        }
Ejemplo n.º 21
0
            public Effect_HavocDOT(StatsPackage package)
                : base(package, 10)
            {
                EffectName = "Havoc";
                IsHarmful  = true;

                EffectType        = EffectTypes.Magical;
                EffectDescription = "The shadows assault you from all sides.";
            }
Ejemplo n.º 22
0
            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.";
            }
Ejemplo n.º 23
0
            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);
            }
Ejemplo n.º 24
0
            public Effect_FireballDOT(StatsPackage package)
                : base(package, 15)
            {
                EffectName = "Ignite";
                IsHarmful  = true;

                EffectType        = EffectTypes.Magical;
                EffectDescription = "You have been set aflame!!!";
            }
Ejemplo n.º 25
0
        public int ApplyCriticalDamage(int damage, StatsPackage caster)
        {
            if (abilityType == AbilityTypes.Physical)
            {
                return((int)(damage * caster.PhysicalCritPower.EffectiveValue));
            }

            return((int)(damage * caster.SpellCritPower.EffectiveValue));
        }
Ejemplo n.º 26
0
            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);
                }
            }
Ejemplo n.º 27
0
        public BasicBleed(StatsPackage package)
            : base(package, 8)
        {
            EffectName        = "Bleeding";
            EffectDescription = "You are bleeding!";
            EffectType        = EffectTypes.Physical;

            IsHarmful       = true;
            IsImmuneToPurge = false;
        }
Ejemplo n.º 28
0
        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);
        }
Ejemplo n.º 29
0
            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
                });
            }
Ejemplo n.º 30
0
            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;
            }