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(); }
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); }
public override void Remove(Buff buff) { base.Remove(buff); if (buff is Light) { Sprite.Remove(CharSprite.State.Illuminated); } BuffIndicator.RefreshHero(); }
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); }
public virtual void Satisfy(float energy) { _level -= energy; if (_level < 0) { _level = 0; } else if (_level > Starving) { _level = Starving; } BuffIndicator.RefreshHero(); }
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(); }