From ccf8cfcbfa354abb42db167313409f5385efd008 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 19 Nov 2022 14:41:02 -0500 Subject: [PATCH] v2.0.0: switched duelist's ability to use a charge system like wands --- .../assets/messages/items/items.properties | 1 - .../actors/hero/HeroClass.java | 2 - .../items/weapon/melee/MeleeWeapon.java | 45 ++++++++++++------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 23d0ac470..1ff3124c4 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1566,7 +1566,6 @@ items.weapon.melee.meleeweapon.stats_known=This _tier-%1$d_ melee weapon deals _ items.weapon.melee.meleeweapon.stats_unknown=Typically this _tier-%1$d_ melee weapon deals _%2$d-%3$d damage_ and requires _%4$d strength_ to use properly. items.weapon.melee.meleeweapon.probably_too_heavy=Probably this weapon is too heavy for you. items.weapon.melee.meleeweapon.stats_desc= -items.weapon.melee.meleeweapon.charge_use=This will consume _%s_ charge. items.weapon.melee.meleeweapon.ability_equip=You must equip that weapon to use its ability. items.weapon.melee.meleeweapon.ability_charge=You don't have enough energy to use that ability. items.weapon.melee.meleeweapon.prompt=Select a Target diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index b7046f629..0c7b7095a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -216,8 +216,6 @@ public enum HeroClass { (hero.belongings.weapon = new Rapier()).identify(); hero.belongings.weapon.activate(hero); - Buff.affect(hero, MeleeWeapon.Charger.class).charge = 100f; - ThrowingKnife knives = new ThrowingKnife(); knives.quantity(3).collect(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MeleeWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MeleeWeapon.java index 8cdf0f469..795b94c0a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MeleeWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MeleeWeapon.java @@ -84,12 +84,12 @@ public class MeleeWeapon extends Weapon { if (action.equals(AC_ABILITY)){ if (!isEquipped(hero)) { GLog.w(Messages.get(this, "ability_equip")); - } else if (Buff.affect(hero, Charger.class).charge < abilityChargeUse()) { + } else if (Buff.affect(hero, Charger.class).charges < abilityChargeUse()) { GLog.w(Messages.get(this, "ability_charge")); } else { if (targetingPrompt() == null){ - Buff.affect(hero, Charger.class).charge -= abilityChargeUse(); + Buff.affect(hero, Charger.class).charges -= abilityChargeUse(); duelistAbility(hero, hero.pos); updateQuickslot(); } else { @@ -98,7 +98,7 @@ public class MeleeWeapon extends Weapon { @Override public void onSelect(Integer cell) { if (cell != null) { - Buff.affect(hero, Charger.class).charge -= abilityChargeUse(); + Buff.affect(hero, Charger.class).charges -= abilityChargeUse(); duelistAbility(hero, cell); updateQuickslot(); } @@ -126,8 +126,8 @@ public class MeleeWeapon extends Weapon { //TODO make abstract protected void duelistAbility( Hero hero, Integer target ){} - public float abilityChargeUse(){ - return 33f; //TODO + public int abilityChargeUse(){ + return 1; //TODO } public int tier; @@ -213,7 +213,6 @@ public class MeleeWeapon extends Weapon { if (Dungeon.hero.heroClass == HeroClass.DUELIST){ info += "\n\n" + Messages.get(this, "ability_desc"); - info += " " + Messages.get(MeleeWeapon.class, "charge_use", new DecimalFormat("#.##").format(abilityChargeUse())); } return info; @@ -227,7 +226,8 @@ public class MeleeWeapon extends Weapon { public String status() { if (isEquipped(Dungeon.hero) && Dungeon.hero.buff(Charger.class) != null) { - return Messages.format( "%.0f%%", Math.floor(Dungeon.hero.buff(Charger.class).charge) ); + Charger buff = Dungeon.hero.buff(Charger.class); + return buff.charges + "/" + buff.chargeCap(); } else { return super.status(); } @@ -253,37 +253,48 @@ public class MeleeWeapon extends Weapon { public static class Charger extends Buff { - public float charge; + private int charges = 3; + private float partialCharge; //offhand charge as well? @Override public boolean act() { LockedFloor lock = target.buff(LockedFloor.class); - if (lock == null || lock.regenOn()) { - charge += 100 / 300f; //300 turns to full charge - updateQuickslot(); - if (charge > 100) { - charge = 100; + if (charges < chargeCap()){ + if (lock == null || lock.regenOn()){ + partialCharge += 1/(45f-(chargeCap()-charges)); // 45 to 35 turns per charge + if (partialCharge >= 1){ + charges++; + partialCharge--; + updateQuickslot(); + } } + } else { + partialCharge = 0; } spend(TICK); return true; } + public int chargeCap(){ + return Math.min(10, 3 + (Dungeon.hero.lvl-1)/3); + } - - public static final String CHARGE = "charge"; + public static final String CHARGES = "charges"; + private static final String PARTIALCHARGE = "partialCharge"; @Override public void storeInBundle(Bundle bundle) { super.storeInBundle(bundle); - bundle.put(CHARGE, charge); + bundle.put(CHARGES, charges); + bundle.put(PARTIALCHARGE, partialCharge); } @Override public void restoreFromBundle(Bundle bundle) { super.restoreFromBundle(bundle); - charge = bundle.getFloat(CHARGE); + charges = bundle.getInt(CHARGES); + partialCharge = bundle.getFloat(PARTIALCHARGE); } }