@Override public float accuracyFactor(Char owner) { if (sniperSpecial && SpiritBow.this.augment == Augment.DAMAGE){ return Float.POSITIVE_INFINITY; } else { return super.accuracyFactor(owner); } }
@Override public ArrayList<String> actions(Hero hero) { ArrayList<String> actions = super.actions( hero ); if (!isEquipped(hero)) actions.add(AC_EQUIP); return actions; }
if (!bundleRestoring) { if (quantity > 1) { MissileWeapon upgraded = (MissileWeapon) split(1); upgraded.parent = null; upgraded = (MissileWeapon) upgraded.upgrade(); if (upgraded.quantity() == 1 && !upgraded.collect()) { Dungeon.level.drop(upgraded, Dungeon.hero.pos); updateQuickslot(); return upgraded; } else { detach(Dungeon.hero.belongings.backpack); return similar.merge(this); updateQuickslot(); return this;
@Override public String info() { String info = desc(); Math.round(augment.damageFactor(min())), Math.round(augment.damageFactor(max())), STRReq()); if (STRReq() > Dungeon.hero.STR()) { info += " " + Messages.get(Weapon.class, "too_heavy"); } else if (Dungeon.hero.STR() > STRReq()){ info += " " + Messages.get(Weapon.class, "excess_str", Dungeon.hero.STR() - STRReq()); if (cursed && isEquipped( Dungeon.hero )) { info += "\n\n" + Messages.get(Weapon.class, "cursed_worn"); } else if (cursedKnown && cursed) { info += "\n\n" + Messages.get(Weapon.class, "cursed"); } else if (!isIdentified() && cursedKnown){ info += "\n\n" + Messages.get(Weapon.class, "not_cursed"); if (durabilityPerUse() > 0){ info += " " + Messages.get(this, "uses_left", (int)Math.ceil(durability/durabilityPerUse()), (int)Math.ceil(MAX_DURABILITY/durabilityPerUse())); } else { info += " " + Messages.get(this, "unlimited_uses");
if (parent.durability <= parent.durabilityPerUse()){ durability = 0; parent.durability = MAX_DURABILITY; } else { parent.durability -= parent.durabilityPerUse(); if (parent.durability > 0 && parent.durability <= parent.durabilityPerUse()){ if (level() <= 0)GLog.w(Messages.get(this, "about_to_break")); else GLog.n(Messages.get(this, "about_to_break")); durability -= durabilityPerUse(); if (durability > 0 && durability <= durabilityPerUse()){ if (level() <= 0)GLog.w(Messages.get(this, "about_to_break")); else GLog.n(Messages.get(this, "about_to_break"));
@Override public boolean hasEnchant(Class<? extends Enchantment> type, Char owner) { if (bow != null && bow.hasEnchant(type, owner)){ return true; } else { return super.hasEnchant(type, owner); } }
@Override public void cast( Hero user, int dst ) { throwEquiped = isEquipped( user ) && !cursed; if (throwEquiped) Dungeon.quickslot.convertToPlaceholder(this); super.cast( user, dst ); }
@Override public int damageRoll(Char owner) { int damage = augment.damageFactor(super.damageRoll( owner )); if (owner instanceof Hero) { int exStr = ((Hero)owner).STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange( 0, exStr ); } } return damage; }
@Override public String desc() { String info = super.desc(); switch (augment) { case SPEED: info += "\n\n" + Messages.get(Weapon.class, "faster"); break; case DAMAGE: info += "\n\n" + Messages.get(Weapon.class, "stronger"); break; case NONE: } return info; } }
@Override public int damageRoll(Char owner) { if (owner instanceof Hero) { Hero hero = (Hero)owner; if (enemy instanceof Mob && ((Mob) enemy).surprisedBy(hero)) { //deals 75% toward max to max on surprise, instead of min to max. int diff = max() - min(); int damage = augment.damageFactor(Random.NormalIntRange( min() + Math.round(diff*0.75f), max())); int exStr = hero.STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange(0, exStr); } return damage; } } return super.damageRoll(owner); } }
@Override public String info() { String info = desc(); Math.round(augment.damageFactor(min())), Math.round(augment.damageFactor(max())), STRReq()); if (STRReq() > Dungeon.hero.STR()) { info += " " + Messages.get(Weapon.class, "too_heavy"); } else if (Dungeon.hero.STR() > STRReq()){ info += " " + Messages.get(Weapon.class, "excess_str", Dungeon.hero.STR() - STRReq()); if (cursed && isEquipped( Dungeon.hero )) { info += "\n\n" + Messages.get(Weapon.class, "cursed_worn"); } else if (cursedKnown && cursed) { info += "\n\n" + Messages.get(Weapon.class, "cursed"); } else if (!isIdentified() && cursedKnown){ info += "\n\n" + Messages.get(Weapon.class, "not_cursed"); if (durabilityPerUse() > 0){ info += " " + Messages.get(this, "uses_left", (int)Math.ceil(durability/durabilityPerUse()), (int)Math.ceil(MAX_DURABILITY/durabilityPerUse())); } else { info += " " + Messages.get(this, "unlimited_uses");
if (parent.durability <= parent.durabilityPerUse()){ durability = 0; parent.durability = MAX_DURABILITY; } else { parent.durability -= parent.durabilityPerUse(); if (parent.durability > 0 && parent.durability <= parent.durabilityPerUse()){ if (level() <= 0)GLog.w(Messages.get(this, "about_to_break")); else GLog.n(Messages.get(this, "about_to_break")); durability -= durabilityPerUse(); if (durability > 0 && durability <= durabilityPerUse()){ if (level() <= 0)GLog.w(Messages.get(this, "about_to_break")); else GLog.n(Messages.get(this, "about_to_break"));
@Override public boolean hasEnchant(Class<? extends Enchantment> type, Char owner) { if (bow != null && bow.hasEnchant(type, owner)){ return true; } else { return super.hasEnchant(type, owner); } }
@Override public void cast( Hero user, int dst ) { throwEquiped = isEquipped( user ) && !cursed; if (throwEquiped) Dungeon.quickslot.convertToPlaceholder(this); super.cast( user, dst ); }
@Override public int damageRoll(Char owner) { int damage = augment.damageFactor(super.damageRoll( owner )); if (owner instanceof Hero) { int exStr = ((Hero)owner).STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange( 0, exStr ); } } return damage; }
@Override public String desc() { String info = super.desc(); switch (augment) { case SPEED: info += "\n\n" + Messages.get(Weapon.class, "faster"); break; case DAMAGE: info += "\n\n" + Messages.get(Weapon.class, "stronger"); break; case NONE: } return info; } }
@Override public int damageRoll(Char owner) { if (owner instanceof Hero) { Hero hero = (Hero)owner; if (enemy instanceof Mob && ((Mob) enemy).surprisedBy(hero)) { //deals 75% toward max to max on surprise, instead of min to max. int diff = max() - min(); int damage = augment.damageFactor(Random.NormalIntRange( min() + Math.round(diff*0.75f), max())); int exStr = hero.STR() - STRReq(); if (exStr > 0) { damage += Random.IntRange(0, exStr); } return damage; } } return super.damageRoll(owner); } }
if (!bundleRestoring) { if (quantity > 1) { MissileWeapon upgraded = (MissileWeapon) split(1); upgraded.parent = null; upgraded = (MissileWeapon) upgraded.upgrade(); if (upgraded.quantity() == 1 && !upgraded.collect()) { Dungeon.level.drop(upgraded, Dungeon.hero.pos); updateQuickslot(); return upgraded; } else { detach(Dungeon.hero.belongings.backpack); return similar.merge(this); updateQuickslot(); return this;
@Override public int throwPos(Hero user, int dst) { if (hasEnchant(Projecting.class, user) && !Dungeon.level.solid[dst] && Dungeon.level.distance(user.pos, dst) <= 4){ return dst; } else { return super.throwPos(user, dst); } }
super.cast(user, dst);