v0.7.3: Balance adjustments around magical resistance effects:

- magical resistances no longer apply to the melee attacks of magic users
- ring of elements buffed to 20% reduction per level from 16%
- antimagic glyph rebalanced, no longer depends on armor DR
This commit is contained in:
Evan Debenham 2019-05-07 22:05:14 -04:00
parent 7fa8d80f03
commit 2c92332563
9 changed files with 35 additions and 19 deletions

View File

@ -93,7 +93,7 @@ public class Bundle {
public Class getClass( String key ) { public Class getClass( String key ) {
String clName = getString(key).replace("class ", "");; String clName = getString(key).replace("class ", "");;
if (clName != null){ if (!clName.equals("")){
if (aliases.containsKey( clName )) { if (aliases.containsKey( clName )) {
clName = aliases.get( clName ); clName = aliases.get( clName );
} }

View File

@ -1034,7 +1034,7 @@ public class Hero extends Char {
//TODO improve this when I have proper damage source logic //TODO improve this when I have proper damage source logic
if (belongings.armor != null && belongings.armor.hasGlyph(AntiMagic.class, this) if (belongings.armor != null && belongings.armor.hasGlyph(AntiMagic.class, this)
&& AntiMagic.RESISTS.contains(src.getClass())){ && AntiMagic.RESISTS.contains(src.getClass())){
dmg -= Random.NormalIntRange(belongings.armor.DRMin(), belongings.armor.DRMax())/3; dmg -= AntiMagic.drRoll(belongings.armor.level());
} }
super.damage( dmg, src ); super.damage( dmg, src );

View File

@ -145,6 +145,9 @@ public class Eye extends Mob {
super.damage(dmg, src); super.damage(dmg, src);
} }
//used so resistances can differentiate between melee and magical attacks
public static class DeathGaze{}
public void deathGaze(){ public void deathGaze(){
if (!beamCharged || beamCooldown > 0 || beam == null) if (!beamCharged || beamCooldown > 0 || beam == null)
return; return;
@ -170,7 +173,7 @@ public class Eye extends Mob {
} }
if (hit( this, ch, true )) { if (hit( this, ch, true )) {
ch.damage( Random.NormalIntRange( 30, 50 ), this ); ch.damage( Random.NormalIntRange( 30, 50 ), new DeathGaze() );
if (Dungeon.level.heroFOV[pos]) { if (Dungeon.level.heroFOV[pos]) {
ch.sprite.flash(); ch.sprite.flash();

View File

@ -73,6 +73,9 @@ public class Shaman extends Mob implements Callback {
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos; return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
} }
//used so resistances can differentiate between melee and magical attacks
public static class LightningBolt{}
@Override @Override
protected boolean doAttack( Char enemy ) { protected boolean doAttack( Char enemy ) {
@ -94,7 +97,7 @@ public class Shaman extends Mob implements Callback {
if (Dungeon.level.water[enemy.pos] && !enemy.flying) { if (Dungeon.level.water[enemy.pos] && !enemy.flying) {
dmg *= 1.5f; dmg *= 1.5f;
} }
enemy.damage( dmg, this ); enemy.damage( dmg, new LightningBolt() );
enemy.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 ); enemy.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 );
enemy.sprite.flash(); enemy.sprite.flash();

View File

@ -95,6 +95,9 @@ public class Warlock extends Mob implements Callback {
} }
} }
//used so resistances can differentiate between melee and magical attacks
public static class DarkBolt{}
private void zap() { private void zap() {
spend( TIME_TO_ZAP ); spend( TIME_TO_ZAP );
@ -104,7 +107,7 @@ public class Warlock extends Mob implements Callback {
} }
int dmg = Random.Int( 12, 18 ); int dmg = Random.Int( 12, 18 );
enemy.damage( dmg, this ); enemy.damage( dmg, new DarkBolt() );
if (!enemy.isAlive() && enemy == Dungeon.hero) { if (!enemy.isAlive() && enemy == Dungeon.hero) {
Dungeon.fail( getClass() ); Dungeon.fail( getClass() );

View File

@ -311,6 +311,9 @@ public class Yog extends Mob {
return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos; return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos;
} }
//used so resistances can differentiate between melee and magical attacks
public static class DarkBolt{}
@Override @Override
public boolean attack( Char enemy ) { public boolean attack( Char enemy ) {
@ -320,7 +323,7 @@ public class Yog extends Mob {
if (hit( this, enemy, true )) { if (hit( this, enemy, true )) {
int dmg = damageRoll(); int dmg = damageRoll();
enemy.damage( dmg, this ); enemy.damage( dmg, new DarkBolt() );
enemy.sprite.bloodBurstA( sprite.center(), dmg ); enemy.sprite.bloodBurstA( sprite.center(), dmg );
enemy.sprite.flash(); enemy.sprite.flash();

View File

@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.DisintegrationTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.DisintegrationTrap;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GrimTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GrimTrap;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.watabou.utils.Random;
import java.util.HashSet; import java.util.HashSet;
@ -47,10 +48,10 @@ public class AntiMagic extends Armor.Glyph {
RESISTS.add( DisintegrationTrap.class ); RESISTS.add( DisintegrationTrap.class );
RESISTS.add( GrimTrap.class ); RESISTS.add( GrimTrap.class );
RESISTS.add( Shaman.class ); RESISTS.add( Shaman.LightningBolt.class );
RESISTS.add( Warlock.class ); RESISTS.add( Warlock.DarkBolt.class );
RESISTS.add( Eye.class ); RESISTS.add( Eye.DeathGaze.class );
RESISTS.add( Yog.BurningFist.class ); RESISTS.add( Yog.BurningFist.DarkBolt.class );
} }
@Override @Override
@ -59,6 +60,10 @@ public class AntiMagic extends Armor.Glyph {
return damage; return damage;
} }
public static int drRoll( int level ){
return Random.NormalIntRange(2+level, 4 + (level*2));
}
@Override @Override
public ItemSprite.Glowing glowing() { public ItemSprite.Glowing glowing() {
return TEAL; return TEAL;

View File

@ -568,7 +568,7 @@ public class DriedRose extends Artifact {
//TODO improve this when I have proper damage source logic //TODO improve this when I have proper damage source logic
if (rose != null && rose.armor != null && rose.armor.hasGlyph(AntiMagic.class, this) if (rose != null && rose.armor != null && rose.armor.hasGlyph(AntiMagic.class, this)
&& AntiMagic.RESISTS.contains(src.getClass())){ && AntiMagic.RESISTS.contains(src.getClass())){
dmg -= Random.NormalIntRange(rose.armor.DRMin(), rose.armor.DRMax())/3; dmg -= AntiMagic.drRoll(rose.armor.level());
} }
super.damage( dmg, src ); super.damage( dmg, src );

View File

@ -48,9 +48,9 @@ public class RingOfElements extends Ring {
public String statsInfo() { public String statsInfo() {
if (isIdentified()){ if (isIdentified()){
return Messages.get(this, "stats", new DecimalFormat("#.##").format(100f * (1f - Math.pow(0.84f, soloBonus())))); return Messages.get(this, "stats", new DecimalFormat("#.##").format(100f * (1f - Math.pow(0.80f, soloBonus()))));
} else { } else {
return Messages.get(this, "typical_stats", new DecimalFormat("#.##").format(16f)); return Messages.get(this, "typical_stats", new DecimalFormat("#.##").format(20f));
} }
} }
@ -77,11 +77,10 @@ public class RingOfElements extends Ring {
RESISTS.add( ToxicGas.class ); RESISTS.add( ToxicGas.class );
RESISTS.add( Electricity.class ); RESISTS.add( Electricity.class );
//FIXME currently this affects all attacks, not just longranged magic RESISTS.add( Shaman.LightningBolt.class );
RESISTS.add( Shaman.class ); RESISTS.add( Warlock.DarkBolt.class );
RESISTS.add( Warlock.class ); RESISTS.add( Eye.DeathGaze.class );
RESISTS.add( Eye.class ); RESISTS.add( Yog.BurningFist.DarkBolt.class );
RESISTS.add( Yog.BurningFist.class );
} }
public static float resist( Char target, Class effect ){ public static float resist( Char target, Class effect ){
@ -89,7 +88,7 @@ public class RingOfElements extends Ring {
for (Class c : RESISTS){ for (Class c : RESISTS){
if (c.isAssignableFrom(effect)){ if (c.isAssignableFrom(effect)){
return (float)Math.pow(0.84, getBonus(target, Resistance.class)); return (float)Math.pow(0.80, getBonus(target, Resistance.class));
} }
} }