v1.3.0: fixed various bugs with damage boosting effects
This commit is contained in:
@@ -315,7 +315,7 @@ public abstract class Char extends Actor {
|
||||
|
||||
} else if (hit( this, enemy, accMulti )) {
|
||||
|
||||
int dr = Math.round(enemy.drRoll() * AscensionChallenge.statModifier(this));
|
||||
int dr = Math.round(enemy.drRoll() * AscensionChallenge.statModifier(enemy));
|
||||
|
||||
Barkskin bark = enemy.buff(Barkskin.class);
|
||||
if (bark != null) dr += Random.NormalIntRange( 0 , bark.level() );
|
||||
@@ -332,7 +332,9 @@ public abstract class Char extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
int dmg;
|
||||
//we use a float here briefly so that we don't have to constantly round while
|
||||
// potentially applying various multiplier effects
|
||||
float dmg;
|
||||
Preparation prep = buff(Preparation.class);
|
||||
if (prep != null){
|
||||
dmg = prep.damageRoll(this);
|
||||
@@ -352,6 +354,13 @@ public abstract class Char extends Actor {
|
||||
dmg *= 1.5f;
|
||||
}
|
||||
|
||||
for (ChampionEnemy buff : buffs(ChampionEnemy.class)){
|
||||
dmg *= buff.meleeDamageFactor();
|
||||
}
|
||||
|
||||
dmg *= AscensionChallenge.statModifier(this);
|
||||
|
||||
//flat damage bonus is applied after positive multipliers, but before negative ones
|
||||
dmg += dmgBonus;
|
||||
|
||||
//friendly endure
|
||||
@@ -367,10 +376,15 @@ public abstract class Char extends Actor {
|
||||
if (enemy.buff(ScrollOfChallenge.ChallengeArena.class) != null){
|
||||
dmg *= 0.67f;
|
||||
}
|
||||
|
||||
if ( buff(Weakness.class) != null ){
|
||||
dmg *= 0.67f;
|
||||
}
|
||||
|
||||
int effectiveDamage = enemy.defenseProc( this, dmg );
|
||||
int effectiveDamage = enemy.defenseProc( this, Math.round(dmg) );
|
||||
effectiveDamage = Math.max( effectiveDamage - dr, 0 );
|
||||
|
||||
|
||||
//vulnerable specifically applies after armor reductions
|
||||
if ( enemy.buff( Vulnerable.class ) != null){
|
||||
effectiveDamage *= 1.33f;
|
||||
}
|
||||
@@ -505,14 +519,9 @@ public abstract class Char extends Actor {
|
||||
// atm attack is always post-armor and defence is already pre-armor
|
||||
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
if ( buff(Weakness.class) != null ){
|
||||
damage *= 0.67f;
|
||||
}
|
||||
for (ChampionEnemy buff : buffs(ChampionEnemy.class)){
|
||||
damage *= buff.meleeDamageFactor();
|
||||
buff.onAttackProc( enemy );
|
||||
}
|
||||
damage = Math.round( damage * AscensionChallenge.statModifier(this));
|
||||
return damage;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ public class AscensionChallenge extends Buff {
|
||||
}
|
||||
|
||||
for (Class<?extends Mob> cls : modifiers.keySet()){
|
||||
if (ch.getClass().isAssignableFrom(cls)){
|
||||
if (cls.isAssignableFrom(ch.getClass())){
|
||||
return modifiers.get(cls);
|
||||
}
|
||||
}
|
||||
@@ -132,7 +132,7 @@ public class AscensionChallenge extends Buff {
|
||||
//only enemies that are boosted count
|
||||
boolean found = false;
|
||||
for (Class<?extends Mob> cls : modifiers.keySet()){
|
||||
if (enemy.getClass().isAssignableFrom(cls)){
|
||||
if (cls.isAssignableFrom(enemy.getClass())){
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
@@ -168,7 +168,7 @@ public class AscensionChallenge extends Buff {
|
||||
return 7; //half of 13, rounded up
|
||||
} else {
|
||||
for (Class<?extends Mob> cls : modifiers.keySet()){
|
||||
if (m.getClass().isAssignableFrom(cls)){
|
||||
if (cls.isAssignableFrom(m.getClass())){
|
||||
return Math.max(13, m.EXP); //same exp as an eye
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,9 +122,8 @@ public class Berserk extends Buff {
|
||||
return Math.min(1f, power);
|
||||
}
|
||||
|
||||
public int damageFactor(int dmg){
|
||||
float bonus = Math.min(1.5f, 1f + (power / 2f));
|
||||
return Math.round(dmg * bonus);
|
||||
public float damageFactor(float dmg){
|
||||
return dmg * Math.min(1.5f, 1f + (power / 2f));
|
||||
}
|
||||
|
||||
public boolean berserking(){
|
||||
@@ -221,7 +220,7 @@ public class Berserk extends Buff {
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
float dispDamage = (damageFactor(10000) / 100f) - 100f;
|
||||
float dispDamage = ((int)damageFactor(10000) / 100f) - 100f;
|
||||
switch (state){
|
||||
case NORMAL: default:
|
||||
return Messages.get(this, "angered_desc", Math.floor(power * 100f), dispDamage);
|
||||
|
||||
@@ -1223,7 +1223,7 @@ public class Hero extends Char {
|
||||
if (!(src instanceof Char)){
|
||||
//reduce damage here if it isn't coming from a character (if it is we already reduced it)
|
||||
if (endure != null){
|
||||
dmg = endure.adjustDamageTaken(dmg);
|
||||
dmg = Math.round(endure.adjustDamageTaken(dmg));
|
||||
}
|
||||
//the same also applies to challenge scroll damage reduction
|
||||
if (buff(ScrollOfChallenge.ChallengeArena.class) != null){
|
||||
|
||||
@@ -109,10 +109,10 @@ public class Endure extends ArmorAbility {
|
||||
hitsLeft = 0;
|
||||
}
|
||||
|
||||
public int adjustDamageTaken(int damage){
|
||||
public float adjustDamageTaken(float damage){
|
||||
if (enduring) {
|
||||
damageBonus += damage/2;
|
||||
return damage/2;
|
||||
return damage/2f;
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
@@ -155,7 +155,7 @@ public class Endure extends ArmorAbility {
|
||||
}
|
||||
}
|
||||
|
||||
public int damageFactor(int damage){
|
||||
public float damageFactor(float damage){
|
||||
if (enduring){
|
||||
return damage;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user