Пример #1
0
        public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
        {
            CombatResults results = DoesAttackHit(caster, target);

            if (!results.DidMiss && !results.DidAvoid)
            {
                int damage = (int)(caster.AttackPower.EffectiveValue * 0.8);
                if (DoesAttackCrit(caster))
                {
                    damage          = ApplyCriticalDamage(damage, caster);
                    results.DidCrit = true;
                }

                results.PureDamage      = damage;
                results.AbsorbedDamage  = CalculateAbsorption(results.PureDamage, target);
                results.AppliedDamage   = results.PureDamage - results.AbsorbedDamage;
                results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target);
            }

            int result = Engine.RNG.Next(0, 100);

            if (result <= 100)
            {
                if (!target.HasEffect("Basic DoT"))
                {
                    target.ApplyEffect(new Effects.SimpleDot(target));
                }
            }

            return(results);
        }
Пример #2
0
        public override void CastAbilityGround(Stats.StatsPackage caster, int x0, int y0, int radius, Level level)
        {
            radius = 50;
            if (CanCastAbility(caster, x0, y0))
            {
                ApplyAbilityCost(caster);

                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));

                        int result = Engine.RNG.Next(0, 250);
                        if (level.GetEntity(x, y) == null && result <= 2 && !level.IsOutOfBounds(x, y))
                        {
                            Bomb bomb = new Bomb(level, 20)
                            {
                                X = x, Y = y
                            };
                            level.Entities.Add(bomb);
                        }
                    }
                }
            }
        }
Пример #3
0
 public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
 {
     return(new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     });
 }
Пример #4
0
            public Entity_Impling(Entity owner, Level level)
                : base(level)
            {
                this.owner    = owner;
                ownerPosition = new Point(owner.X, owner.Y);

                token           = 'I';
                ForegroundColor = Color4.Green;
                IsSolid         = false;

                EntityType = EntityTypes.NPC;

                statsPackage = new Stats.StatsPackage(this)
                {
                    UnitName = "Impling",

                    AttackPower       = 25,
                    Health            = 25,
                    MaxHealth         = 25,
                    PhysicalHitChance = 100
                };

                statsPackage.AbilityList[0] = new Combat.Abilities.BasicAttack()
                {
                    Range = 100
                };
            }
Пример #5
0
 public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
 {
     results = new CombatResults()
     {
         Caster = caster, Target = target, UsedAbility = this
     };
     caster.ApplyEffect(new Effects.ShieldWall(caster));
     return(results);
 }
Пример #6
0
            public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
            {
                if (!target.HasEffect(typeof(Effect_Weaken)))
                {
                    target.ApplyEffect(new Effect_Weaken(target));
                }

                return(new CombatResults()
                {
                    Caster = caster, Target = target, UsedAbility = this
                });
            }
Пример #7
0
        public WinShrine(Level parent)
            : base(parent)
        {
            EntityType = EntityTypes.Other;
            token      = 'Φ';

            ForegroundColor = Color4.WhiteSmoke;
            isSolid         = true;
            statsPackage    = new Stats.StatsPackage(this)
            {
                IsImmune = true
            };
        }
Пример #8
0
        public override void CastAbilityGround(Stats.StatsPackage caster, int x, int y, int radius, Level level)
        {
            if (CanCastAbility(caster, x, y))
            {
                ApplyAbilityCost(caster);

                Bomb bomb = new Bomb(level, 5)
                {
                    X = x, Y = y
                };
                level.Entities.Add(bomb);
            }
        }
Пример #9
0
        public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
        {
            Bomb bomb = new Bomb(target.ParentEntity.ParentLevel, 5)
            {
                X = target.ParentEntity.X, Y = target.ParentEntity.Y
            };

            target.ParentEntity.ParentLevel.Entities.Add(bomb);

            return(new CombatResults()
            {
                UsedAbility = this, Caster = caster, Target = target
            });
        }
Пример #10
0
        public Ladder(Level parent, Level targetLevel, Point targetDestination)
            : base(parent)
        {
            this.targetLevel       = targetLevel;
            this.targetDestination = targetDestination;

            token           = TokenReference.LADDER_UP;
            ForegroundColor = Color4.Tan;
            isSolid         = true;

            EntityType   = EntityTypes.Ladder;
            statsPackage = new Stats.StatsPackage(this)
            {
                IsImmune = true
            };
        }
Пример #11
0
        public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
        {
            CombatResults results = DoesAttackHit(caster, target);

            if (!results.DidMiss && !results.DidAvoid)
            {
                int damage = (int)caster.AttackPower.EffectiveValue;
                if (DoesAttackCrit(caster))
                {
                    damage          = ApplyCriticalDamage(damage, caster);
                    results.DidCrit = true;
                }

                results.PureDamage      = damage;
                results.AbsorbedDamage  = CalculateAbsorption(results.PureDamage, target);
                results.AppliedDamage   = results.PureDamage - results.AbsorbedDamage;
                results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target);
            }

            return(results);
        }
Пример #12
0
            public override CombatResults CalculateResults(Stats.StatsPackage caster, Stats.StatsPackage target)
            {
                if (!target.HasEffect(typeof(Effect_Poison)))
                {
                    target.ApplyEffect(new Effect_Poison());
                }
                else
                {
                    Effect_Poison poison = (Effect_Poison)target.GetEffect(typeof(Effect_Poison));
                    if (poison.stacks < 5)
                    {
                        poison.stacks++;
                        poison.Duration = 10;
                    }
                }

                return(new CombatResults()
                {
                    Caster = caster, Target = target, UsedAbility = this
                });
            }