Only do critical attacks if the attacker both has a non-zero critical chance and a non-zero critical modifier (resolves issue 235)

git-svn-id: https://andors-trail.googlecode.com/svn/trunk@148 08aca716-68be-ccc6-4d58-36f5abd142ac
This commit is contained in:
oskar.wiksten
2011-08-30 21:25:29 +00:00
parent 2e7b49c2b4
commit 0c75fbbac1
2 changed files with 4 additions and 3 deletions

View File

@@ -378,7 +378,7 @@ public final class CombatController {
return getAverageDamagePerHit(attacker, target) * attacker.getAttacksPerTurn();
}
private static int getTurnsToKillTarget(ActorTraits attacker, ActorTraits target) {
if (attacker.hasCriticalMultiplierEffect()) {
if (attacker.hasCriticalAttacks()) {
if (attacker.damagePotential.max * attacker.criticalMultiplier <= target.damageResistance) return 999;
} else {
if (attacker.damagePotential.max <= target.damageResistance) return 999;
@@ -423,9 +423,9 @@ public final class CombatController {
int damage = Constants.rollValue(attacker.traits.damagePotential);
boolean isCriticalHit = false;
if (attacker.traits.hasCriticalChanceEffect()) {
if (attacker.traits.hasCriticalAttacks()) {
isCriticalHit = Constants.roll100(attacker.traits.criticalChance);
if (isCriticalHit && attacker.traits.hasCriticalMultiplierEffect()) {
if (isCriticalHit) {
damage *= attacker.traits.criticalMultiplier;
}
}

View File

@@ -49,6 +49,7 @@ public class CombatTraits {
public boolean hasBlockEffect() { return blockChance != 0; }
public boolean hasCriticalChanceEffect() { return criticalChance != 0; }
public boolean hasCriticalMultiplierEffect() { return criticalMultiplier != 0 && criticalMultiplier != 1; }
public boolean hasCriticalAttacks() { return hasCriticalChanceEffect() && hasCriticalMultiplierEffect(); }
public int getAttacksPerTurn(final int maxAP) {
return (int) Math.floor(maxAP / attackCost);