v0.8.2: balance tweaks to various items

This commit is contained in:
Evan Debenham 2020-07-29 12:48:44 -04:00
parent 40da8d2395
commit 1e361fd546
12 changed files with 38 additions and 41 deletions

View File

@ -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") );
}

View File

@ -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<Item> 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;

View File

@ -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();

View File

@ -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,

View File

@ -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 );
}

View File

@ -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);
}

View File

@ -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<Integer> 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

View File

@ -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;
}

View File

@ -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
}

View File

@ -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();

View File

@ -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
}
}

View File

@ -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);