v1.3.0: fixed various bugs with damage boosting effects

This commit is contained in:
Evan Debenham
2022-06-13 12:08:30 -04:00
parent 27bec7f377
commit 921a2d3b8f
5 changed files with 28 additions and 20 deletions

View File

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

View File

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

View File

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

View File

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

View File

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