public static void Target(actors.Character target) { _lastTarget = (Mob)target; _instance.UpdateImage(); HealthIndicator.Instance.Target(target); }
public override bool Proc(Weapon weapon, actors.Character attacker, actors.Character defender, int damage) { var level = Math.Max(0, weapon.level); var dmg = damage; for (var i = 1; i <= level + 1; i++) { dmg = Math.Max(dmg, attacker.DamageRoll() - i); } if (dmg <= damage) { return(false); } defender.Damage(dmg - damage, this); return(true); }
public virtual bool[] UpdateFieldOfView(actors.Character c) { var cx = c.pos % Width; var cy = c.pos / Width; bool sighted = c.Buff <Blindness>() == null && c.Buff <Shadows>() == null && c.IsAlive; if (sighted) { ShadowCaster.CastShadow(cx, cy, fieldOfView, c.viewDistance); } else { Arrays.Fill(fieldOfView, false); } var sense = 1; if (c.IsAlive) { sense = c.Buffs <MindVision>().Select(b => b.Distance).Concat(new[] { sense }).Max(); } if ((sighted && sense > 1) || !sighted) { var ax = Math.Max(0, cx - sense); var bx = Math.Min(cx + sense, Width - 1); var ay = Math.Max(0, cy - sense); var by = Math.Min(cy + sense, Height - 1); var len = bx - ax + 1; var pos = ax + ay * Width; for (var y = ay; y <= by; y++, pos += Width) { Arrays.Fill(fieldOfView, pos, pos + len, true); } for (var i = 0; i < Length; i++) { fieldOfView[i] &= discoverable[i]; } } if (!c.IsAlive) { return(fieldOfView); } if (c.Buff <MindVision>() != null) { foreach (var mob in mobs) { var p = mob.pos; fieldOfView[p] = true; fieldOfView[p + 1] = true; fieldOfView[p - 1] = true; fieldOfView[p + Width + 1] = true; fieldOfView[p + Width - 1] = true; fieldOfView[p - Width + 1] = true; fieldOfView[p - Width - 1] = true; fieldOfView[p + Width] = true; fieldOfView[p - Width] = true; } } else if (c == Dungeon.Hero && ((Hero)c).heroClass == HeroClass.Huntress) { foreach (var mob in mobs) { var p = mob.pos; if (Distance(c.pos, p) != 2) { continue; } fieldOfView[p] = true; fieldOfView[p + 1] = true; fieldOfView[p - 1] = true; fieldOfView[p + Width + 1] = true; fieldOfView[p + Width - 1] = true; fieldOfView[p - Width + 1] = true; fieldOfView[p - Width - 1] = true; fieldOfView[p + Width] = true; fieldOfView[p - Width] = true; } } if (c.Buff <Awareness>() != null) { foreach (var heap in heaps.Values) { var p = heap.Pos; fieldOfView[p] = true; fieldOfView[p + 1] = true; fieldOfView[p - 1] = true; fieldOfView[p + Width + 1] = true; fieldOfView[p + Width - 1] = true; fieldOfView[p - Width + 1] = true; fieldOfView[p - Width - 1] = true; fieldOfView[p + Width] = true; fieldOfView[p - Width] = true; } } return(fieldOfView); }
public virtual void Press(int cell, actors.Character ch) { if (pit[cell] && ch == Dungeon.Hero) { Chasm.HeroFall(cell); return; } var trap = false; switch (map[cell]) { case Terrain.SECRET_TOXIC_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.TOXIC_TRAP; case Terrain.TOXIC_TRAP: trap = true; ToxicTrap.Trigger(cell, ch); break; case Terrain.SECRET_FIRE_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.FIRE_TRAP; case Terrain.FIRE_TRAP: trap = true; FireTrap.Trigger(cell, ch); break; case Terrain.SECRET_PARALYTIC_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.PARALYTIC_TRAP; case Terrain.PARALYTIC_TRAP: trap = true; ParalyticTrap.Trigger(cell, ch); break; case Terrain.SECRET_POISON_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.POISON_TRAP; case Terrain.POISON_TRAP: trap = true; PoisonTrap.Trigger(cell, ch); break; case Terrain.SECRET_ALARM_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.ALARM_TRAP; case Terrain.ALARM_TRAP: trap = true; AlarmTrap.Trigger(cell, ch); break; case Terrain.SECRET_LIGHTNING_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.LIGHTNING_TRAP; case Terrain.LIGHTNING_TRAP: trap = true; LightningTrap.Trigger(cell, ch); break; case Terrain.SECRET_GRIPPING_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.GRIPPING_TRAP; case Terrain.GRIPPING_TRAP: trap = true; GrippingTrap.Trigger(cell, ch); break; case Terrain.SECRET_SUMMONING_TRAP: GLog.Information(TXT_HIDDEN_PLATE_CLICKS); goto case Terrain.SUMMONING_TRAP; case Terrain.SUMMONING_TRAP: trap = true; SummoningTrap.Trigger(cell, ch); break; case Terrain.HIGH_GRASS: HighGrass.Trample(this, cell, ch); break; case Terrain.WELL: WellWater.AffectCell(cell); break; case Terrain.ALCHEMY: if (ch == null) { Alchemy.Transmute(cell); } break; case Terrain.DOOR: Door.Enter(cell); break; } if (trap) { Sample.Instance.Play(Assets.SND_TRAP); if (ch == Dungeon.Hero) { Dungeon.Hero.Interrupt(); } Set(cell, Terrain.INACTIVE_TRAP); GameScene.UpdateMap(cell); } var plant = plants[cell]; if (plant != null) { plant.Activate(ch); } }