@Override public int attackSkill(Char target) { //same accuracy as the hero. int acc = Dungeon.hero.lvl + 9; if (rose != null && rose.weapon != null){ acc *= rose.weapon.accuracyFactor(this); } return acc; }
@Override public int max(int lvl) { if (bow != null){ return 12 + //12 base 3*bow.level() + 2*lvl; //+3 per bow level, +2 per level (default scaling +2) } else { return 2 + //2 base, down from 5 2*lvl; //scaling unchanged } }
@Override public int reachFactor(Char owner) { int reach = super.reachFactor(owner); if (owner instanceof Hero && wand instanceof WandOfDisintegration && ((Hero)owner).subClass == HeroSubClass.BATTLEMAGE){ reach++; } return reach; }
@Override public int price() { int price = 20 * tier; if (hasGoodEnchant()) { price *= 1.5; } if (cursedKnown && (cursed || hasCurseEnchant())) { price /= 2; } if (levelKnown && level() > 0) { price *= (level() + 1); } if (price < 1) { price = 1; } return price; }
@Override public Item upgrade(boolean enchant) { super.upgrade( enchant ); if (wand != null) { int curCharges = wand.curCharges; wand.upgrade(); //gives the wand one additional charge wand.maxCharges = Math.min(wand.maxCharges + 1, 10); wand.curCharges = Math.min(wand.curCharges + 1, 10); updateQuickslot(); } return this; }
@Override public Item degrade() { super.degrade(); if (wand != null) { int curCharges = wand.curCharges; wand.degrade(); //gives the wand one additional charge wand.maxCharges = Math.min(wand.maxCharges + 1, 10); wand.curCharges = curCharges-1; updateQuickslot(); } return this; }
@Override public int defenseFactor( Char owner ) { return 10+3*level(); //10 extra defence, plus 3 per level; }
@Override public int defenseFactor( Char owner ) { return 5+2*level(); //5 extra defence, plus 2 per level; }
@Override public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) { //cripples enemy Buff.prolong( defender, Cripple.class, 1f+staff.level()); }
@Override public int damageRoll() { int dmg = 0; if (rose != null && rose.weapon != null){ dmg += rose.weapon.damageRoll(this); } else { dmg += Random.NormalIntRange(0, 5); } return dmg; }
@Override protected float attackDelay() { float delay = super.attackDelay(); if (rose != null && rose.weapon != null){ delay *= rose.weapon.speedFactor(this); } return delay; }
@Override public Item upgrade(boolean enchant) { super.upgrade( enchant ); if (wand != null) { int curCharges = wand.curCharges; wand.upgrade(); //gives the wand one additional charge wand.maxCharges = Math.min(wand.maxCharges + 1, 10); wand.curCharges = Math.min(wand.curCharges + 1, 10); updateQuickslot(); } return this; }
@Override public Item degrade() { super.degrade(); if (wand != null) { int curCharges = wand.curCharges; wand.degrade(); //gives the wand one additional charge wand.maxCharges = Math.min(wand.maxCharges + 1, 10); wand.curCharges = curCharges-1; updateQuickslot(); } return this; }
@Override public int min(int lvl) { if (bow != null){ return 4 + //4 base bow.level() + lvl; //+1 per level or bow level } else { return 1 + //1 base, down from 2 lvl; //scaling unchanged } }
@Override public int attackSkill(Char target) { //same accuracy as the hero. int acc = Dungeon.hero.lvl + 9; if (rose != null && rose.weapon != null){ acc *= rose.weapon.accuracyFactor(this); } return acc; }
@Override public int reachFactor(Char owner) { int reach = super.reachFactor(owner); if (owner instanceof Hero && wand instanceof WandOfDisintegration && ((Hero)owner).subClass == HeroSubClass.BATTLEMAGE){ reach++; } return reach; }
@Override public int defenseFactor( Char owner ) { return 10+3*level(); //10 extra defence, plus 3 per level; }
@Override public int defenseFactor( Char owner ) { return 5+2*level(); //5 extra defence, plus 2 per level; }
@Override public int min(int lvl) { if (bow != null){ return 4 + //4 base bow.level() + lvl; //+1 per level or bow level } else { return 1 + //1 base, down from 2 lvl; //scaling unchanged } }
@Override public int max(int lvl) { if (bow != null){ return 12 + //12 base 3*bow.level() + 2*lvl; //+3 per bow level, +2 per level (default scaling +2) } else { return 2 + //2 base, down from 5 2*lvl; //scaling unchanged } }