v0.8.1: Various balance changes to wands:

- Enemies now have up to 5x corruption resistance at full HP, up from 3x.
- Wand of Disintegration base range increased to 6 from 4.
- Wand of lightning no longer harms allies, self-damage down to 67%.
- Wand of Frost damage reduction per turn of chill reduced to 5% from 10%.
- Battlemage wand of frost proc now only freezes at 10+ turns of chill, rarer than at 2-10 turns based on chance
This commit is contained in:
Evan Debenham 2020-05-26 19:23:55 -04:00
parent f72b86df80
commit 1daf5f40a2
4 changed files with 18 additions and 13 deletions

View File

@ -76,7 +76,6 @@ import com.watabou.utils.Random;
import java.util.HashMap; import java.util.HashMap;
//TODO need to consider other balance adjustments here. Might want to put more emphasis into debuffs rather than less
public class WandOfCorruption extends Wand { public class WandOfCorruption extends Wand {
{ {
@ -143,8 +142,8 @@ public class WandOfCorruption extends Wand {
} else if (ch instanceof Piranha || ch instanceof Bee) { } else if (ch instanceof Piranha || ch instanceof Bee) {
enemyResist = 1 + Dungeon.depth/2f; enemyResist = 1 + Dungeon.depth/2f;
} else if (ch instanceof Wraith) { } else if (ch instanceof Wraith) {
//divide by 3 as wraiths are always at full HP and are therefore ~3x harder to corrupt //divide by 5 as wraiths are always at full HP and are therefore ~5x harder to corrupt
enemyResist = (1f + Dungeon.depth/3f) / 3f; enemyResist = (1f + Dungeon.depth/3f) / 5f;
} else if (ch instanceof Yog.BurningFist || ch instanceof Yog.RottingFist) { } else if (ch instanceof Yog.BurningFist || ch instanceof Yog.RottingFist) {
enemyResist = 1 + 30; enemyResist = 1 + 30;
} else if (ch instanceof Yog.Larva || ch instanceof King.Undead){ } else if (ch instanceof Yog.Larva || ch instanceof King.Undead){
@ -154,8 +153,8 @@ public class WandOfCorruption extends Wand {
enemyResist = 1 + 3; enemyResist = 1 + 3;
} }
//100% health: 3x resist 75%: 2.1x resist 50%: 1.5x resist 25%: 1.1x resist //100% health: 5x resist 75%: 3.25x resist 50%: 2x resist 25%: 1.25x resist
enemyResist *= 1 + 2*Math.pow(enemy.HP/(float)enemy.HT, 2); enemyResist *= 1 + 4*Math.pow(enemy.HP/(float)enemy.HT, 2);
//debuffs placed on the enemy reduce their resistance //debuffs placed on the enemy reduce their resistance
for (Buff buff : enemy.buffs()){ for (Buff buff : enemy.buffs()){

View File

@ -118,7 +118,7 @@ public class WandOfDisintegration extends DamageWand {
} }
private int distance() { private int distance() {
return level()*2 + 4; return level()*2 + 6;
} }
@Override @Override

View File

@ -70,9 +70,8 @@ public class WandOfFrost extends DamageWand {
return; //do nothing, can't affect a frozen target return; //do nothing, can't affect a frozen target
} }
if (ch.buff(Chill.class) != null){ if (ch.buff(Chill.class) != null){
//7.5% less damage per turn of chill remaining //5% less damage per turn of chill remaining
float chill = ch.buff(Chill.class).cooldown(); damage = (int)Math.round(damage * Math.pow(0.95f, ch.buff(Chill.class).cooldown()));
damage = (int)Math.round(damage * Math.pow(0.9f, chill));
} else { } else {
ch.sprite.burst( 0xFF99CCFF, buffedLvl() / 2 + 2 ); ch.sprite.burst( 0xFF99CCFF, buffedLvl() / 2 + 2 );
} }
@ -104,7 +103,7 @@ public class WandOfFrost extends DamageWand {
@Override @Override
public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) { public void onHit(MagesStaff staff, Char attacker, Char defender, int damage) {
Chill chill = defender.buff(Chill.class); Chill chill = defender.buff(Chill.class);
if (chill != null && Random.IntRange(2, (int)Chill.DURATION) <= chill.cooldown()){ if (chill != null && chill.cooldown() >= Chill.DURATION){
//need to delay this through an actor so that the freezing isn't broken by taking damage from the staff hit. //need to delay this through an actor so that the freezing isn't broken by taking damage from the staff hit.
new FlavourBuff(){ new FlavourBuff(){
{actPriority = VFX_PRIO;} {actPriority = VFX_PRIO;}

View File

@ -71,12 +71,19 @@ public class WandOfLightning extends DamageWand {
if (Dungeon.level.water[bolt.collisionPos]) multipler = 1f; if (Dungeon.level.water[bolt.collisionPos]) multipler = 1f;
for (Char ch : affected){ for (Char ch : affected){
processSoulMark(ch, chargesPerCast());
ch.damage(Math.round(damageRoll() * multipler), this);
if (ch == Dungeon.hero) Camera.main.shake( 2, 0.3f ); if (ch == Dungeon.hero) Camera.main.shake( 2, 0.3f );
ch.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 ); ch.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 );
ch.sprite.flash(); ch.sprite.flash();
if (ch != curUser && ch.alignment == curUser.alignment && ch.pos != bolt.collisionPos){
continue;
}
processSoulMark(ch, chargesPerCast());
if (ch == curUser) {
ch.damage(Math.round(damageRoll() * multipler * 0.67f), this);
} else {
ch.damage(Math.round(damageRoll() * multipler), this);
}
} }
if (!curUser.isAlive()) { if (!curUser.isAlive()) {