v0.9.4: balance changes to mage abilities/T4 talents:

- wild magic now boosts wand levels instead of overriding
 - conserved magic now has a chance to give a 3rd shot
- elemental blast base damage up by 33%
 - elemental power now boosts by 20%, up from 15%
- telefrag self-damage increased at high levels
- remote beacon range per level increased to 4 from 3
This commit is contained in:
Evan Debenham 2021-07-26 16:19:47 -04:00
parent 43aa79e265
commit 49ef8174cf
5 changed files with 36 additions and 20 deletions

View File

@ -364,7 +364,7 @@ actors.hero.abilities.mage.elementalblast.generic_desc=The effect of elemental b
actors.hero.abilities.mage.wildmagic.name=wild magic
actors.hero.abilities.mage.wildmagic.no_wands=You have no wands to zap with!
actors.hero.abilities.mage.wildmagic.short_desc=The Mage unleashes the _Wild Magic_ contained in his wands, randomly firing them multiple times at a chosen target over a single turn.
actors.hero.abilities.mage.wildmagic.desc=The Mage unleashes the power in his wands, randomly firing them up to 4 times in a single turn. The Mage's staff is not included in this effect.\n\nEach wand is treated as if it was +1, regardless of its actual level. This ability does consume wand charges, and no one wand can be fired more than 2 times.
actors.hero.abilities.mage.wildmagic.desc=The Mage unleashes the power in his wands, randomly firing them up to 4 times in a single turn. The Mage's staff is not included in this effect.\n\nEach wand also has its level boosted by 1, up to +2. This ability does consume wand charges, and no one wand can be fired more than 2 times.
actors.hero.abilities.mage.warpbeacon.name=warp beacon
actors.hero.abilities.mage.warpbeacon.depths=You can't warp between depths!
actors.hero.abilities.mage.warpbeacon.locked_floor=You cannot leave a locked floor!
@ -601,16 +601,16 @@ actors.hero.talent.reactive_barrier.title=reactive barrier
actors.hero.talent.reactive_barrier.desc=_+1:_ The Mage gains _2 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+2:_ The Mage gains _4 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+3:_ The Mage gains _6 shielding_ for every character affected by elemental blast, to a max of 5 characters.\n\n_+4:_ The Mage gains _8 shielding_ for every character affected by elemental blast, to a max of 5 characters.
actors.hero.talent.wild_power.title=wild power
actors.hero.talent.wild_power.desc=_+1:_ When using wild magic, wands will be treated as either _+1 or +2_, instead of +1.\n\n_+2:_ When using wild magic, wands are now treated as if they are _+2_, instead of +1.\n\n_+3:_ When using wild magic, wands will be treated as either _+2 or +3_, instead of +1.\n\n_+4:_ When using wild magic, wands are now treated as if they are _+3_, instead of +1.
actors.hero.talent.wild_power.desc=_+1:_ When using wild magic, wands will be boosted by either _1 or 2, up to +3_.\n\n_+2:_ When using wild magic, wands will be boosted by _2, up to +4_.\n\n_+3:_ When using wild magic, wands will be boosted by either _2 or 3, up to +5_.\n\n_+4:_ When using wild magic, wands will be boosted by _3, up to +6_.
actors.hero.talent.fire_everything.title=fire everything
actors.hero.talent.fire_everything.desc=_+1:_ Wild magic now fires _5 times_, up from 4.\n\n_+2:_ Wild magic now fires _6 times_, up from 4.\n\n_+3:_ Wild magic now fires _7 times_, up from 4.\n\n_+4:_ Wild magic now fires _8 times_, up from 4.
actors.hero.talent.conserved_magic.title=conserved magic
actors.hero.talent.conserved_magic.desc=_+1:_ Each zap from wild magic now uses _0.56 charges_, instead of 1.\n\n_+2:_ Each zap from wild magic now uses _0.31 charges_, instead of 1.\n\n_+3:_ Each zap from wild magic now uses _0.18 charges_, instead of 1.\n\n_+4:_ Each zap from wild magic now uses _0.1 charges_, instead of 1.
actors.hero.talent.conserved_magic.desc=_+1:_ Each zap from wild magic now uses _0.67 charges_ instead of 1, and each wand has a _25% chance_ to be usable 3 times.\n\n_+2:_ Each zap from wild magic now uses _0.45 charges_ instead of 1, and each wand has a _50% chance_ to be usable 3 times.\n\n_+3:_ Each zap from wild magic now uses _0.3 charges_ instead of 1, and each wand has a _75% chance_ to be usable 3 times.\n\n_+4:_ Each zap from wild magic now uses _0.2 charges_ instead of 1, and each wand has a _100% chance_ to be usable 3 times.
actors.hero.talent.telefrag.title=Telefrag
actors.hero.talent.telefrag.desc=_+1:_ If the Mage warps into another character he deals _10-15 damage_ to it, but also takes _5 damage_.\n\n_+2:_ If the Mage warps into another character he deals _20-30 damage_ to it, but also takes _8 damage_.\n\n_+3:_ If the Mage warps into another character he deals _30-45 damage_ to it, but also takes _12 damage_.\n\n_+4:_ If the Mage warps into another character he deals _40-60 damage_ to it, but also takes _15 damage_.\n\nThe hero cannot be killed by this talent, the self damage can be reduced by magic resisting effects.
actors.hero.talent.telefrag.desc=_+1:_ If the Mage warps into another character he deals _10-15 damage_ to it, but also takes _5 damage_.\n\n_+2:_ If the Mage warps into another character he deals _20-30 damage_ to it, but also takes _10 damage_.\n\n_+3:_ If the Mage warps into another character he deals _30-45 damage_ to it, but also takes _15 damage_.\n\n_+4:_ If the Mage warps into another character he deals _40-60 damage_ to it, but also takes _20 damage_.\n\nThe hero cannot be killed by this talent, the self damage can be reduced by magic resisting effects.
actors.hero.talent.remote_beacon.title=Remote Beacon
actors.hero.talent.remote_beacon.desc=_+1:_ The Mage can place a beacon at any location within _3 tiles_.\n\n_+2:_ The Mage can place a beacon at any location within _6 tiles_.\n\n_+3:_ The Mage can place a beacon at any location within _9 tiles_.\n\n_+4:_ The Mage can place a beacon at any location within _12 tiles_.\n\nThe Mage cannot place beacons in locations that are inaccessible
actors.hero.talent.remote_beacon.desc=_+1:_ The Mage can place a beacon at any location within _4 tiles_.\n\n_+2:_ The Mage can place a beacon at any location within _8 tiles_.\n\n_+3:_ The Mage can place a beacon at any location within _12 tiles_.\n\n_+4:_ The Mage can place a beacon at any location within _16 tiles_.\n\nThe Mage cannot place beacons in locations that are inaccessible.
actors.hero.talent.longrange_warp.title=Longrange Warp
actors.hero.talent.longrange_warp.desc=_+1:_ The Mage can now warp between floors, at _150% charge cost_.\n\n_+2:_ The Mage can now warp between floors, at _117% charge cost_.\n\n_+3:_ The Mage can now warp between floors, at _83% charge cost_.\n\n_+4:_ The Mage can now warp between floors, at _50% charge cost_.\n\nThe Mage cannot use longrange warp to leave a locked floor.

View File

@ -1161,7 +1161,7 @@ items.wands.wandofcorrosion.staff_name=staff of corrosion
items.wands.wandofcorrosion.desc=This wand has an ashen body which opens to a brilliant orange gem.
items.wands.wandofcorrosion.stats_desc=This wand shoots a bolt which explodes into a cloud of highly corrosive gas at a targeted location. Anything caught inside this cloud will take increasing damage over time, starting at _%d damage._
items.wands.wandofcorrosion.bmage_desc=When _the Battlemage_ strikes an enemy with a staff of corrosion, the enemy has a chance to become oozed.
items.wands.wandofcorrosion.eleblast_desc=An elemental blast with a staff of corrosion inflicts enemies with 3 turns of corrosion, starting at 6 damage.
items.wands.wandofcorrosion.eleblast_desc=An elemental blast with a staff of corrosion inflicts enemies with 4 turns of corrosion, starting at 6 damage.
items.wands.wandofcorruption.name=wand of corruption
items.wands.wandofcorruption.staff_name=staff of corruption

View File

@ -252,7 +252,7 @@ public class ElementalBlast extends ArmorAbility {
//### Deal damage ###
Char mob = Actor.findChar(cell);
int damage = Math.round(Random.NormalIntRange(10, 20)
int damage = Math.round(Random.NormalIntRange(15, 25)
* effectMulti
* damageFactors.get(finalWandCls));
@ -278,7 +278,7 @@ public class ElementalBlast extends ArmorAbility {
//*** Wand of Corrosion ***
} else if (finalWandCls == WandOfCorrosion.class){
if (mob.isAlive() && mob.alignment != Char.Alignment.ALLY) {
Buff.affect( mob, Corrosion.class ).set(3, Math.round(6*effectMulti));
Buff.affect( mob, Corrosion.class ).set(4, Math.round(6*effectMulti));
charsHit++;
}
@ -336,7 +336,7 @@ public class ElementalBlast extends ArmorAbility {
charm.ignoreHeroAllies = true;
mob.sprite.centerEmitter().start(Speck.factory(Speck.HEART), 0.2f, 3);
} else {
damage = Math.round(Random.NormalIntRange(10, 20) * effectMulti);
damage = Math.round(Random.NormalIntRange(15, 25) * effectMulti);
mob.damage(damage, Reflection.newInstance(finalWandCls));
mob.sprite.emitter().start(ShadowParticle.UP, 0.05f, 10);
}

View File

@ -65,7 +65,7 @@ public class WildMagic extends ArmorAbility {
ArrayList<Wand> wands = hero.belongings.getAllItems(Wand.class);
Random.shuffle(wands);
float chargeUsePerShot = (float)Math.pow(0.563f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
float chargeUsePerShot = (float)Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
for (Wand w : wands.toArray(new Wand[0])){
if (w.curCharges < 1 && w.partialCharge < chargeUsePerShot){
@ -75,19 +75,30 @@ public class WildMagic extends ArmorAbility {
int maxWands = 4 + Dungeon.hero.pointsInTalent(Talent.FIRE_EVERYTHING);
//second and third shots
if (wands.size() < maxWands){
ArrayList<Wand> dupes = new ArrayList<>(wands);
ArrayList<Wand> seconds = new ArrayList<>(wands);
ArrayList<Wand> thirds = new ArrayList<>(wands);
for (Wand w : dupes.toArray(new Wand[0])){
for (Wand w : wands){
float totalCharge = w.curCharges + w.partialCharge;
if (totalCharge < 2*chargeUsePerShot){
dupes.remove(w);
seconds.remove(w);
}
if (totalCharge < 3*chargeUsePerShot
|| Random.Int(4) > Dungeon.hero.pointsInTalent(Talent.CONSERVED_MAGIC)){
thirds.remove(w);
}
}
Random.shuffle(dupes);
while (!dupes.isEmpty() && wands.size() < maxWands){
wands.add(dupes.remove(0));
Random.shuffle(seconds);
while (!seconds.isEmpty() && wands.size() < maxWands){
wands.add(seconds.remove(0));
}
Random.shuffle(thirds);
while (!thirds.isEmpty() && wands.size() < maxWands){
wands.add(thirds.remove(0));
}
}
@ -121,7 +132,7 @@ public class WildMagic extends ArmorAbility {
@Override
public void call() {
cur.onZap(aim);
cur.partialCharge -= (float)Math.pow(0.563f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
cur.partialCharge -= (float)Math.pow(0.67f, hero.pointsInTalent(Talent.CONSERVED_MAGIC));
if (cur.partialCharge < 0){
cur.partialCharge++;
cur.curCharges--;

View File

@ -321,9 +321,14 @@ public abstract class Wand extends Item {
if (charger != null && charger.target != null) {
if (charger.target.buff(WildMagic.WildMagicTracker.class) != null){
int level = 2 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER);
if (Random.Int(2) == 0) level++;
return level/2; // +1/+1.5/+2/+2.5/+3 at 0/1/2/3/4 talent points
int bonus = 2 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER);
if (Random.Int(2) == 0) bonus++;
bonus /= 2; // +1/+1.5/+2/+2.5/+3 at 0/1/2/3/4 talent points
int maxBonusLevel = 2 + ((Hero)charger.target).pointsInTalent(Talent.WILD_POWER);
if (lvl < maxBonusLevel) {
lvl = Math.min(lvl + bonus, maxBonusLevel);
}
}
if (charger.target.buff(ScrollEmpower.class) != null){