diff --git a/AndorsTrail/res/layout/abilitymodifierview.xml b/AndorsTrail/res/layout/abilitymodifierview.xml
index 0c1b665f6..69c65c5a5 100644
--- a/AndorsTrail/res/layout/abilitymodifierview.xml
+++ b/AndorsTrail/res/layout/abilitymodifierview.xml
@@ -23,6 +23,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
+
Attack damage: %1$d
Attack damage: %1$d-%2$d
Increases attack damage by %1$d
+ Damage modifier: %1$d %%
Increases attack damage by %1$d-%2$d
Lowers attack damage by %1$d
Lowers attack damage by %1$d-%2$d
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java
index 0f128c0aa..b6a488c02 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java
@@ -272,27 +272,39 @@ public final class ActorStatsController {
actor.damagePotential.addToMax(effects.increaseMaxDamage * multiplier);
actor.blockChance += effects.increaseBlockChance * multiplier;
actor.damageResistance += effects.increaseDamageResistance * multiplier;
-
- if (actor.attackChance < 0) actor.attackChance = 0;
- if (actor.damagePotential.max < 0) actor.damagePotential.set(0, 0);
}
public void recalculatePlayerStats(Player player) {
+ player.weaponDamage.set(0,0);
player.resetStatsToBaseTraits();
player.recalculateLevelExperience();
controllers.itemController.applyInventoryEffects(player);
controllers.skillController.applySkillEffects(player);
applyEffectsFromCurrentConditions(player);
ItemController.recalculateHitEffectsFromWornItems(player);
+ ItemController.applyDamageModifier(player);
capActorHealthAtMax(player);
capActorAPAtMax(player);
+ lowCapActorAttackChance(player);
+ lowCapActorDamagePotential(player);
}
public void recalculateMonsterCombatTraits(Monster monster) {
monster.resetStatsToBaseTraits();
applyEffectsFromCurrentConditions(monster);
capActorHealthAtMax(monster);
capActorAPAtMax(monster);
+ lowCapActorAttackChance(monster);
+ lowCapActorDamagePotential(monster);
}
+
+ private void lowCapActorAttackChance(Actor actor) {
+ if (actor.attackChance < 0) actor.attackChance = 0;
+ }
+
+ private void lowCapActorDamagePotential(Actor actor) {
+ if (actor.damagePotential.max < 0) actor.damagePotential.set(0, 0);
+ }
+
private void recalculateActorCombatTraits(Actor actor) {
if (actor.isPlayer) recalculatePlayerStats((Player) actor);
else recalculateMonsterCombatTraits((Monster) actor);
@@ -545,6 +557,11 @@ public final class ActorStatsController {
}
}
+ public void addPlayerWeaponDamage(Player player, int increaseMinDamage, int increaseMaxDamage) {
+ player.weaponDamage.add(increaseMinDamage, true);
+ player.weaponDamage.addToMax(increaseMaxDamage);
+ }
+
public static enum LevelUpSelection {
health
,attackChance
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
index 77090476c..917661f5c 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
@@ -19,6 +19,8 @@ import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
import com.gpl.rpg.AndorsTrail.model.item.ItemType;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
+import static java.lang.Math.min;
+
public final class ItemController {
private final ControllerContext controllers;
@@ -175,8 +177,12 @@ public final class ItemController {
// The stats for off-hand weapons will be added later in SkillController.applySkillEffectsFromFightingStyles
if (SkillController.isDualWielding(mainHandItem, type)) return;
}
- if (type.effects_equip != null && type.effects_equip.stats != null)
- controllers.actorStatsController.applyAbilityEffects(player, type.effects_equip.stats, 1);
+ if (type.effects_equip != null && type.effects_equip.stats != null) {
+ controllers.actorStatsController.applyAbilityEffects(player, type.effects_equip.stats, 1);
+ if (type.isWeapon()) {
+ controllers.actorStatsController.addPlayerWeaponDamage(player, type.effects_equip.stats.increaseMinDamage, type.effects_equip.stats.increaseMaxDamage);
+ }
+ }
}
public static void recalculateHitEffectsFromWornItems(Player player) {
@@ -383,4 +389,24 @@ public final class ItemController {
}
}
+ public static void applyDamageModifier(Player player) {
+ ItemType itemType = player.inventory.getItemTypeInWearSlot(Inventory.WearSlot.weapon);
+ int modifier1 = -1;
+ int modifier2 = -1;
+ if (itemType != null) modifier1 = itemType.effects_equip.stats.setNonWeaponDamageModifier;
+ itemType = player.inventory.getItemTypeInWearSlot(Inventory.WearSlot.shield);
+ if (itemType != null && itemType.isWeapon()) modifier2 = itemType.effects_equip.stats.setNonWeaponDamageModifier;
+
+ int modifier = 100;
+ if (modifier1 >= 0 && modifier2 >= 0) modifier = Math.min(modifier1, modifier2);
+ else if (modifier1 <= 0 && modifier2 >= 0) modifier = modifier2;
+ else if (modifier2 <= 0 && modifier1 >= 0) modifier = modifier1;
+
+ if (modifier != 100) {
+ final int minBaseDamage = player.damagePotential.current - player.weaponDamage.current;
+ final int maxBaseDamage = player.damagePotential.max - player.weaponDamage.max;
+ player.damagePotential.add(Math.round(minBaseDamage * ((modifier - 100)/100f)), true);
+ player.damagePotential.addToMax(Math.round(maxBaseDamage * ((modifier - 100)/100f)));
+ }
+ }
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
index cd749e999..49348a4fb 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
@@ -386,6 +386,11 @@ public final class SkillController {
if (itemType.effects_equip == null) return;
player.damagePotential.addToMax(getPercentage(itemType.effects_equip.stats.increaseMaxDamage, percentForPositiveValues, percentForNegativeValues));
player.damagePotential.add(getPercentage(itemType.effects_equip.stats.increaseMinDamage, percentForPositiveValues, percentForNegativeValues), false);
+
+ if (itemType.isWeapon()) {
+ player.weaponDamage.addToMax(getPercentage(itemType.effects_equip.stats.increaseMaxDamage, percentForPositiveValues, percentForNegativeValues));
+ player.weaponDamage.add(getPercentage(itemType.effects_equip.stats.increaseMinDamage, percentForPositiveValues, percentForNegativeValues), false);
+ }
}
private static void addPercentCriticalSkill(Player player, ItemType itemType, int percentForPositiveValues, int percentForNegativeValues) {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java
index 845adfafa..7d7fdedd6 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java
@@ -12,6 +12,7 @@ public final class AbilityModifierTraits {
public final int increaseBlockChance;
public final int increaseMinDamage;
public final int increaseMaxDamage;
+ public final int setNonWeaponDamageModifier;
public final int increaseCriticalSkill;
public final float setCriticalMultiplier;
public final int increaseDamageResistance;
@@ -27,6 +28,7 @@ public final class AbilityModifierTraits {
, int increaseBlockChance
, int increaseMinDamage
, int increaseMaxDamage
+ , int setNonWeaponDamageModifier
, int increaseCriticalSkill
, float setCriticalMultiplier
, int increaseDamageResistance
@@ -41,6 +43,7 @@ public final class AbilityModifierTraits {
this.increaseBlockChance = increaseBlockChance;
this.increaseMinDamage = increaseMinDamage;
this.increaseMaxDamage = increaseMaxDamage;
+ this.setNonWeaponDamageModifier = setNonWeaponDamageModifier;
this.increaseCriticalSkill = increaseCriticalSkill;
this.setCriticalMultiplier = setCriticalMultiplier;
this.increaseDamageResistance = increaseDamageResistance;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
index c7224ce39..b798322d6 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
@@ -40,6 +40,7 @@ public final class Player extends Actor {
public int useItemCost;
public int reequipCost;
public int totalExperience;
+ public final Range weaponDamage = new Range();
private final HashMap > questProgress = new HashMap >();
private String spawnMap;
@@ -117,6 +118,7 @@ public final class Player extends Actor {
this.ap.set(baseTraits.maxAP, baseTraits.maxAP);
this.health.set(baseTraits.maxHP, baseTraits.maxHP);
this.conditions.clear();
+ this.weaponDamage.set(0, 0);
Loot startItems = new Loot();
dropLists.getDropList(DropListCollection.DROPLIST_STARTITEMS).createRandomLoot(startItems, this);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java
index 8456c7578..3619b43ff 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java
@@ -125,6 +125,7 @@ public final class ResourceParserUtils {
,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseBlockChance, 0)
,increaseAttackDamage != null ? increaseAttackDamage.current : 0
,increaseAttackDamage != null ? increaseAttackDamage.max : 0
+ , o.optInt(JsonFieldNames.AbilityModifierTraits.setNonWeaponDamageModifier, 100)
,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseCriticalSkill, 0)
,(float)o.optDouble(JsonFieldNames.AbilityModifierTraits.setCriticalMultiplier, 0)
,o.optInt(JsonFieldNames.AbilityModifierTraits.increaseDamageResistance, 0)
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java
index 97e983a7e..7f784b84a 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/json/JsonFieldNames.java
@@ -30,6 +30,7 @@ public final class JsonFieldNames {
public static final String increaseCriticalSkill = "increaseCriticalSkill";
public static final String setCriticalMultiplier = "setCriticalMultiplier";
public static final String increaseAttackDamage = "increaseAttackDamage";
+ public static final String setNonWeaponDamageModifier = "setNonWeaponDamageModifier";
public static final String increaseBlockChance = "increaseBlockChance";
public static final String increaseDamageResistance = "increaseDamageResistance";
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java
index 6d1daf839..4bb7cc351 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java
@@ -19,6 +19,7 @@ public final class AbilityModifierInfoView extends LinearLayout {
private final TextView abilitymodifierinfo_change_attack_cost;
private final TextView abilitymodifierinfo_change_attack_chance;
private final TextView abilitymodifierinfo_change_attack_damage;
+ private final TextView abilitymodifierinfo_set_damage_modifier;
private final TextView abilitymodifierinfo_change_critical_skill;
private final TextView abilitymodifierinfo_change_critical_multiplier;
private final TextView abilitymodifierinfo_change_block_chance;
@@ -38,6 +39,7 @@ public final class AbilityModifierInfoView extends LinearLayout {
abilitymodifierinfo_change_attack_cost = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_cost);
abilitymodifierinfo_change_attack_chance = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_chance);
abilitymodifierinfo_change_attack_damage = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_damage);
+ abilitymodifierinfo_set_damage_modifier = (TextView) findViewById(R.id.abilitymodifierinfo_set_damage_modifier);
abilitymodifierinfo_change_critical_skill = (TextView) findViewById(R.id.abilitymodifierinfo_change_critical_skill);
abilitymodifierinfo_change_critical_multiplier = (TextView) findViewById(R.id.abilitymodifierinfo_change_critical_multiplier);
abilitymodifierinfo_change_block_chance = (TextView) findViewById(R.id.abilitymodifierinfo_change_block_chance);
@@ -89,6 +91,11 @@ public final class AbilityModifierInfoView extends LinearLayout {
}
abilitymodifierinfo_change_attack_damage.setVisibility(View.VISIBLE);
}
+
+ if (traits.setNonWeaponDamageModifier > 0 && traits.setNonWeaponDamageModifier != 100) {
+ abilitymodifierinfo_set_damage_modifier.setText(res.getString(R.string.iteminfo_effect_set_damage_modifier, traits.setNonWeaponDamageModifier));
+ abilitymodifierinfo_set_damage_modifier.setVisibility(View.VISIBLE);
+ }
}
private void displayIfNonZero(int statChange, TextView textView, int stringresource_increase, int stringresource_decrease) {