@Override public void execute(Hero hero, String action) { super.execute(hero, action); if (action.equals(AC_EAT)) { switch (Random.Int(5)) { case 0: GLog.w("Oh it's hot!"); Buff.affect(hero, Burning.class).reignite(hero); break; case 1: GLog.w("You can't feel your legs!"); Buff.prolong(hero, Roots.class, Paralysis.duration(hero)); break; case 2: GLog.w("You are not feeling well."); Buff.affect(hero, Poison.class).set(Poison.durationFactor(hero) * hero.HT / 5); break; case 3: GLog.w("You are stuffed."); Buff.prolong(hero, Slow.class, Slow.duration(hero)); break; } } }
@Override public void shatter(int cell) { for (Mob mob : Dungeon.level.mobs) { if (mob.pos == cell) { mob.atkSkill += (Dungeon.depth / 4); mob.defenseSkill += (Dungeon.depth / 3); mob.HT += Dungeon.depth; mob.HP += Dungeon.depth; GLog.w("The " + mob.description() + " looks tougher!"); } } super.shatter(cell); }
public Item upgrade( boolean enchant ) { if (enchantment != null) { if (!enchant && Random.Int( level ) > 0 && (enchantment.getClass() != Ancient.class)) { GLog.w( TXT_INCOMPATIBLE ); enchant( null ); } } else { if (enchant) { enchant( ); } } return super.upgrade(); }
@Override public void proc( Char attacker, Char defender, int damage ) { if (enchantment != null) { enchantment.proc( this, attacker, defender, damage ); } if (!levelKnown) { if (--hitsToKnow <= 0) { levelKnown = true; GLog.i( TXT_IDENTIFY, name(), toString() ); Badges.validateItemLevelAquired( this ); } } }
@Override protected boolean doAttack(Char enemy) { if (Level.distance(pos, enemy.pos) <= 1) { return super.doAttack(enemy); } else { boolean visible = Level.fieldOfView[pos] || Level.fieldOfView[enemy.pos]; if (visible) { ((AirElementalSprite) sprite).zap(enemy.pos); } spend(TIME_TO_ZAP); if (hit(this, enemy, true)) { int dmg = Random.Int(2, (dmgMax / 3)); if (Level.water[enemy.pos] && !enemy.flying) { dmg *= 1.5f; } enemy.damage(dmg, LightningTrap.LIGHTNING); enemy.sprite.centerEmitter().burst(SparkParticle.FACTORY, 3); enemy.sprite.flash(); if (enemy == Dungeon.hero) { Camera.main.shake(2, 0.3f); if (!enemy.isAlive()) { Dungeon.fail(Utils.format(ResultDescriptions.MOB, Utils.indefinite(name))); GLog.n(TXT_LIGHTNING_KILLED, name); } } } else { enemy.sprite.showStatus(CharSprite.NEUTRAL, enemy.defenseVerb()); } return !visible; } }