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:
parent
7fa8d80f03
commit
2c92332563
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -144,6 +144,9 @@ public class Eye extends Mob {
|
||||||
if (beamCharged) dmg /= 4;
|
if (beamCharged) dmg /= 4;
|
||||||
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)
|
||||||
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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() );
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
@ -58,6 +59,10 @@ public class AntiMagic extends Armor.Glyph {
|
||||||
//no proc effect, see Hero.damage
|
//no proc effect, see Hero.damage
|
||||||
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() {
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user