diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java index 8784207ce..30eb82b42 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java @@ -190,8 +190,8 @@ public class TalismanOfForesight extends Artifact { } exp += earnedExp; - if (exp >= 50 + 50*level() && level() < levelCap) { - exp -= 50 + 50*level(); + if (exp >= 100 + 50*level() && level() < levelCap) { + exp -= 100 + 50*level(); upgrade(); GLog.p( Messages.get(TalismanOfForesight.class, "levelup") ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java index a0ffcaedc..c4270bb1f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java @@ -61,9 +61,9 @@ public class RingOfWealth extends Ring { public String statsInfo() { if (isIdentified()){ - return Messages.get(this, "stats", new DecimalFormat("#.##").format(100f * (Math.pow(1.25f, soloBuffedBonus()) - 1f))); + return Messages.get(this, "stats", new DecimalFormat("#.##").format(100f * (Math.pow(1.20f, soloBuffedBonus()) - 1f))); } else { - return Messages.get(this, "typical_stats", new DecimalFormat("#.##").format(25f)); + return Messages.get(this, "typical_stats", new DecimalFormat("#.##").format(20f)); } } @@ -90,7 +90,7 @@ public class RingOfWealth extends Ring { } public static float dropChanceMultiplier( Char target ){ - return (float)Math.pow(1.25, getBuffedBonus(target, Wealth.class)); + return (float)Math.pow(1.20, getBuffedBonus(target, Wealth.class)); } public static ArrayList tryForBonusDrop(Char target, int tries ){ @@ -112,8 +112,8 @@ public class RingOfWealth extends Ring { //reset (if needed), decrement, and store counts if (triesToDrop == Float.MIN_VALUE) { - triesToDrop = Random.NormalIntRange(0, 30); - dropsToEquip = Random.NormalIntRange(5, 10); + triesToDrop = Random.NormalIntRange(0, 25); + dropsToEquip = Random.NormalIntRange(4, 8); } //now handle reward logic @@ -127,7 +127,7 @@ public class RingOfWealth extends Ring { i = genEquipmentDrop(bonus - 1); } while (Challenges.isItemBlocked(i)); drops.add(i); - dropsToEquip = Random.NormalIntRange(5, 10); + dropsToEquip = Random.NormalIntRange(4, 8); } else { Item i; do { @@ -136,7 +136,7 @@ public class RingOfWealth extends Ring { drops.add(i); dropsToEquip--; } - triesToDrop += Random.NormalIntRange(0, 30); + triesToDrop += Random.NormalIntRange(0, 25); } //store values back into rings @@ -266,10 +266,11 @@ public class RingOfWealth extends Ring { result = Generator.random(Generator.Category.ARTIFACT); break; } - //minimum level of sqrt(ringLvl) + //minimum level is 1/2/3/4/5/6 when ring level is 1/3/6/10/15/21 if (result.isUpgradable()){ - if (result.level() < Math.floor(Math.sqrt(level))){ - result.level((int)Math.floor(Math.sqrt(level))); + int minLevel = (int)Math.floor((Math.sqrt(8*level + 1)-1)/2f); + if (result.level() < minLevel){ + result.level(minLevel); } } result.cursed = false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java index 9ab4971a7..4539c59a0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java @@ -279,7 +279,7 @@ public abstract class Wand extends Item { @Override public int buffedLvl() { int lvl = super.buffedLvl(); - if (curUser != null && !(this instanceof WandOfMagicMissile)) { + if (curUser != null) { WandOfMagicMissile.MagicCharge buff = curUser.buff(WandOfMagicMissile.MagicCharge.class); if (buff != null && buff.level() > lvl){ return buff.level(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java index 268c796ee..137d311c2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java @@ -131,8 +131,8 @@ public class WandOfFireblast extends DamageWand { protected void fx( Ballistica bolt, Callback callback ) { //need to perform flame spread logic here so we can determine what cells to put flames in. - // 4/6/8 distance - int maxDist = 2 + 2*chargesPerCast(); + // 5/7/9 distance + int maxDist = 3 + 2*chargesPerCast(); int dist = Math.min(bolt.dist, maxDist); cone = new ConeAOE( bolt, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java index a82692270..31778cadc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java @@ -70,8 +70,9 @@ public class WandOfFrost extends DamageWand { return; //do nothing, can't affect a frozen target } if (ch.buff(Chill.class) != null){ - //5% less damage per turn of chill remaining - damage = (int)Math.round(damage * Math.pow(0.95f, ch.buff(Chill.class).cooldown())); + //6.67% less damage per turn of chill remaining, to a max of 10 turns (50% dmg) + float chillturns = Math.min(10, ch.buff(Chill.class).cooldown()); + damage = (int)Math.round(damage * Math.pow(0.9633f, chillturns)); } else { ch.sprite.burst( 0xFF99CCFF, buffedLvl() / 2 + 2 ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java index ba6c753a2..362cc84df 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java @@ -80,7 +80,7 @@ public class WandOfLightning extends DamageWand { } processSoulMark(ch, chargesPerCast()); if (ch == curUser) { - ch.damage(Math.round(damageRoll() * multipler * 0.67f), this); + ch.damage(Math.round(damageRoll() * multipler * 0.5f), this); } else { ch.damage(Math.round(damageRoll() * multipler), this); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfRegrowth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfRegrowth.java index 5560f842c..f8546cdf9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfRegrowth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfRegrowth.java @@ -85,7 +85,7 @@ public class WandOfRegrowth extends Wand { float furrowedChance = overLimit > 0 ? (overLimit / (10f + Dungeon.hero.lvl)) : 0; int chrgUsed = chargesPerCast(); - int grassToPlace = Math.round((3.5f+buffedLvl()/2f)*chrgUsed); + int grassToPlace = Math.round((3.67f+buffedLvl()/3f)*chrgUsed); //ignore cells which can't have anything grow in them. for (Iterator i = cells.iterator(); i.hasNext();) { @@ -148,18 +148,13 @@ public class WandOfRegrowth extends Wand { } if (!cells.isEmpty() && Random.Float() > furrowedChance && - (chrgUsed == 3 || (chrgUsed == 2 && Random.Int(2) == 0))){ + (Random.Int(6) < chrgUsed)){ // 16%/33%/50% chance to spawn a seed pod or dewcatcher int cell = cells.remove(0); Dungeon.level.plant( Random.Int(2) == 0 ? new Seedpod.Seed() : new Dewcatcher.Seed(), cell); } - if (!cells.isEmpty() && Random.Float() > furrowedChance && chrgUsed == 3){ - int cell = cells.remove(0); - Dungeon.level.plant((Plant.Seed) Generator.randomUsingDefaults(Generator.Category.SEED), cell); - } - if (!cells.isEmpty() && Random.Float() > furrowedChance && - (chrgUsed >= 2 || (chrgUsed == 1 && Random.Int(2) == 0))){ + (Random.Int(3) < chrgUsed)){ // 33%/66%/100% chance to spawn a plant int cell = cells.remove(0); Dungeon.level.plant((Plant.Seed) Generator.randomUsingDefaults(Generator.Category.SEED), cell); } @@ -352,7 +347,7 @@ public class WandOfRegrowth extends Wand { private void setLevel( int lvl ){ wandLvl = lvl; - HP = HT = lvl*4; + HP = HT = 25 + 3*lvl; } public boolean inRange(int pos){ @@ -360,7 +355,7 @@ public class WandOfRegrowth extends Wand { } public float seedPreservation(){ - return 0.25f + 0.05f*wandLvl; + return 0.40f + 0.04f*wandLvl; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfWarding.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfWarding.java index 98affe0d6..d6a433d74 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfWarding.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfWarding.java @@ -210,16 +210,16 @@ public class WandOfWarding extends Wand { case 1: case 2: default: break; //do nothing case 3: - HT = 30; - HP = 10 + (5-totalZaps)*4; + HT = 35; + HP = 15 + (5-totalZaps)*4; break; case 4: - HT = 48; - HP += 18; + HT = 54; + HP += 19; break; case 5: - HT = 70; - HP += 22; + HT = 84; + HP += 30; break; case 6: wandHeal(wandLevel); @@ -248,13 +248,13 @@ public class WandOfWarding extends Wand { default: return; case 4: - heal = 8; + heal = 9; break; case 5: - heal = 10; + heal = 12; break; case 6: - heal = 15; + heal = 16; break; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Flail.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Flail.java index 0bb6114aa..be3a03cea 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Flail.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Flail.java @@ -32,7 +32,7 @@ public class Flail extends MeleeWeapon { hitSoundPitch = 0.8f; tier = 4; - ACC = 0.9f; //0.9x accuracy + ACC = 0.8f; //0.8x accuracy //also cannot surprise attack, see Hero.canSurpriseAttack } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java index f3fe30bac..1bff599a0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java @@ -138,7 +138,7 @@ public class MagesStaff extends MeleeWeapon { @Override public int buffedLvl() { int lvl = super.buffedLvl(); - if (curUser != null && !(wand instanceof WandOfMagicMissile)) { + if (curUser != null && wand != null) { WandOfMagicMissile.MagicCharge buff = curUser.buff(WandOfMagicMissile.MagicCharge.class); if (buff != null && buff.level() > lvl){ return buff.level(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Quarterstaff.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Quarterstaff.java index 7197196ae..291bd2dc6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Quarterstaff.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Quarterstaff.java @@ -43,6 +43,6 @@ public class Quarterstaff extends MeleeWeapon { @Override public int defenseFactor( Char owner ) { - return 3; //3 extra defence + return 2; //2 extra defence } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/mechanics/ConeAOE.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/mechanics/ConeAOE.java index 7f9253f62..3c0d4a313 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/mechanics/ConeAOE.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/mechanics/ConeAOE.java @@ -85,7 +85,7 @@ public class ConeAOE { targetCells.add(Dungeon.level.pointToCell(scanInt)); //if the cone is large enough, also cast rays to cells just inside of the outer arc // this helps fill in any holes when casting rays - if (circleRadius >= 7) { + if (circleRadius >= 4) { scan.polar(a * PointF.G2R, circleRadius - 1); scan.offset(fromP); scan.x += (fromP.x > scan.x ? +0.5f : -0.5f);