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