Ejemplo n.º 1
0
        public override int Proc(Armor armor, Character attacker, Character defender, int damage)
        {
            var level = Math.Max(0, armor.level);

            if (pdsharp.utils.Random.Int(level / 2 + 5) < 4)
            {
                return(damage);
            }

            var healing = Math.Min(defender.HT - defender.HP, pdsharp.utils.Random.Int(1, defender.HT / 5));

            if (healing <= 0)
            {
                return(damage);
            }

            var hunger = defender.Buff <Hunger>();

            if (hunger == null || hunger.IsStarving)
            {
                return(damage);
            }

            hunger.Satisfy(-Hunger.Starving / 10);
            BuffIndicator.RefreshHero();

            defender.HP += healing;
            defender.Sprite.Emitter().Burst(Speck.Factory(Speck.HEALING), 1);
            defender.Sprite.ShowStatus(CharSprite.Positive, healing.ToString(CultureInfo.InvariantCulture));

            return(damage);
        }
Ejemplo n.º 2
0
        public void Call()
        {
            CellEmitter.Center(_pos).Burst(Speck.Factory(Speck.STAR), 7);

            Sample.Instance.Play(Assets.SND_EVOKE);

            Level.Set(_pos, Terrain.WALL);
            GameScene.UpdateMap(_pos);
            var gold = new DarkGold();

            if (gold.DoPickUp(Dungeon.Hero))
            {
                GLog.Information(Hero.TxtYouNowHave, gold.Name);
            }
            else
            {
                Dungeon.Level.Drop(gold, Dungeon.Hero.pos).Sprite.Drop();
            }

            var hunger = Dungeon.Hero.Buff <Hunger>();

            if (hunger != null && !hunger.IsStarving)
            {
                hunger.Satisfy(Hunger.Starving / 10 * -1);
                BuffIndicator.RefreshHero();
            }
            Dungeon.Hero.OnOperateComplete();
        }
Ejemplo n.º 3
0
        public override void Remove(Buff buff)
        {
            base.Remove(buff);

            if (buff is Light)
            {
                Sprite.Remove(CharSprite.State.Illuminated);
            }

            BuffIndicator.RefreshHero();
        }
Ejemplo n.º 4
0
        protected override bool Act()
        {
            if (Target.IsAlive)
            {
                var hero = (Hero)Target;

                if (IsStarving)
                {
                    if (Random.Float() < 0.3f && (Target.HP > 1 || !Target.Paralysed))
                    {
                        GLog.Negative(TxtStarving);
                        hero.Damage(1, this);

                        hero.Interrupt();
                    }
                }
                else
                {
                    var bonus = Target.Buffs <RingOfSatiety.Satiety>().Sum(buff => ((RingOfSatiety.Satiety)buff).Level);

                    var newLevel      = _level + Step - bonus;
                    var statusUpdated = false;
                    if (newLevel >= Starving)
                    {
                        GLog.Negative(TxtStarving);
                        statusUpdated = true;

                        hero.Interrupt();
                    }
                    else if (newLevel >= Hungry && _level < Hungry)
                    {
                        GLog.Warning(TxtHungry);
                        statusUpdated = true;
                    }
                    _level = newLevel;

                    if (statusUpdated)
                    {
                        BuffIndicator.RefreshHero();
                    }
                }

                var step = ((Hero)Target).heroClass == HeroClass.Rogue ? Step * 1.2f : Step;
                Spend(Target.Buff <Shadows>() == null ? step : step *1.5f);
            }
            else
            {
                Deactivate();
            }

            return(true);
        }
Ejemplo n.º 5
0
        public virtual void Satisfy(float energy)
        {
            _level -= energy;
            if (_level < 0)
            {
                _level = 0;
            }
            else if (_level > Starving)
            {
                _level = Starving;
            }

            BuffIndicator.RefreshHero();
        }
Ejemplo n.º 6
0
            public MobTitle(Mob mob)
            {
                _hp = (float)mob.HP / mob.HT;

                _name = PixelScene.CreateText(Utils.Capitalize(mob.Name), 9);
                _name.Hardlight(TitleColor);
                _name.Measure();
                Add(_name);

                _image = mob.Sprite;
                Add(_image);

                _hpBg = new ColorBlock(1, 1, _colorBg);
                Add(_hpBg);

                _hpLvl = new ColorBlock(1, 1, _colorLvl);
                Add(_hpLvl);

                _buffs = new BuffIndicator(mob);
                Add(_buffs);
            }
Ejemplo n.º 7
0
        public override void Add(Buff buff)
        {
            Actor.Add(buff);

            if (Sprite != null)
            {
                if (buff is Burning)
                {
                    GLog.Warning("You catch fire!");
                    Interrupt();
                }
                else if (buff is Paralysis)
                {
                    GLog.Warning("You are paralysed!");
                    Interrupt();
                }
                else if (buff is Poison)
                {
                    GLog.Warning("You are poisoned!");
                    Interrupt();
                }
                else if (buff is Ooze)
                {
                    GLog.Warning("Caustic ooze eats your flesh. Wash away it!");
                }
                else if (buff is Roots)
                {
                    GLog.Warning("You can't move!");
                }
                else if (buff is Weakness)
                {
                    GLog.Warning("You feel weakened!");
                }
                else if (buff is Blindness)
                {
                    GLog.Warning("You are blinded!");
                }
                else if (buff is Fury)
                {
                    GLog.Warning("You become furious!");
                    Sprite.ShowStatus(CharSprite.Positive, "furious");
                }
                else if (buff is Charm)
                {
                    GLog.Warning("You are charmed!");
                }
                else if (buff is Cripple)
                {
                    GLog.Warning("You are crippled!");
                }
                else if (buff is Bleeding)
                {
                    GLog.Warning("You are bleeding!");
                }
                else if (buff is Vertigo)
                {
                    GLog.Warning("Everything is spinning around you!");
                    Interrupt();
                }

                else if (buff is Light)
                {
                    Sprite.Add(CharSprite.State.Illuminated);
                }
            }

            BuffIndicator.RefreshHero();
        }