From 30f259f8839182fb662e7217a0bdeaf21e08d10d Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 9 Jul 2016 21:30:03 -0400 Subject: [PATCH] v0.4.1: refactoring and description changes to wands --- .../items/Generator.java | 2 +- .../items/wands/DamageWand.java | 57 +++++++++++++++++++ .../items/wands/Wand.java | 15 ++++- .../items/wands/WandOfBlastWave.java | 12 +++- .../items/wands/WandOfDisintegration.java | 15 +++-- .../items/wands/WandOfFireblast.java | 28 ++++++--- .../items/wands/WandOfFrost.java | 12 +++- .../items/wands/WandOfLightning.java | 12 +++- .../items/wands/WandOfMagicMissile.java | 13 ++++- .../items/wands/WandOfPrismaticLight.java | 12 +++- .../items/weapon/melee/MagesStaff.java | 10 +++- .../messages/items/items.properties | 38 ++++++++----- 12 files changed, 186 insertions(+), 40 deletions(-) create mode 100644 src/com/shatteredpixel/shatteredpixeldungeon/items/wands/DamageWand.java diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index 052acbdc9..6c9c59a53 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -255,7 +255,7 @@ public class Generator { WandOfTransfusion.class, WandOfCorruption.class, WandOfRegrowth.class }; - Category.WAND.probs = new float[]{ 4, 4, 4, 4, 4, 3, /*3,*/ 3, 3, /*3,*/ 3, 3, 3 }; + Category.WAND.probs = new float[]{ 5, 4, 4, 4, 4, 3, /*3,*/ 3, 3, /*3,*/ 3, 3, 3 }; //see generator.randomWeapon Category.WEAPON.classes = new Class[]{}; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/DamageWand.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/DamageWand.java new file mode 100644 index 000000000..214f0a912 --- /dev/null +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/DamageWand.java @@ -0,0 +1,57 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2016 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.shatteredpixel.shatteredpixeldungeon.items.wands; + +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.watabou.utils.Random; + +//for wands that directly damage a target +//wands with AOE effects count here (e.g. fireblast), but wands with indrect damage do not (e.g. venom, transfusion) +public abstract class DamageWand extends Wand{ + + public int min(){ + return min(level()); + } + + public abstract int min(int lvl); + + public int max(){ + return max(level()); + } + + public abstract int max(int lvl); + + public int damageRoll(){ + return Random.NormalIntRange(min(), max()); + } + + public int damageRoll(int lvl){ + return Random.NormalIntRange(min(lvl), max(lvl)); + } + + @Override + public String statsDesc() { + if (levelKnown) + return Messages.get(this, "stats_desc", min(), max()); + else + return Messages.get(this, "stats_desc", min(0), max(0)); + } +} diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java index a450f55a9..309c45d64 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/Wand.java @@ -163,10 +163,19 @@ public abstract class Wand extends Item { @Override public String info() { - return (cursed && cursedKnown) ? - desc() + "\n\n" + Messages.get(Wand.class, "cursed") : - desc(); + String desc = desc(); + + desc += "\n\n" + statsDesc(); + + if (cursed && cursedKnown) + desc += "\n\n" + Messages.get(Wand.class, "cursed"); + + return desc; } + + public String statsDesc(){ + return Messages.get(this, "stats_desc"); + }; @Override public boolean isIdentified() { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index 6f961fd3a..b328fd6be 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -43,7 +43,7 @@ import com.watabou.utils.Callback; import com.watabou.utils.PointF; import com.watabou.utils.Random; -public class WandOfBlastWave extends Wand { +public class WandOfBlastWave extends DamageWand { { image = ItemSpriteSheet.WAND_BLAST_WAVE; @@ -51,12 +51,20 @@ public class WandOfBlastWave extends Wand { collisionProperties = Ballistica.PROJECTILE; } + public int min(int lvl){ + return 1+lvl; + } + + public int max(int lvl){ + return 5+3*lvl; + } + @Override protected void onZap(Ballistica bolt) { Sample.INSTANCE.play( Assets.SND_BLAST ); BlastWave.blast(bolt.collisionPos); - int damage = Random.NormalIntRange(1 + level(), 5+3*level()); + int damage = damageRoll(); //presses all tiles in the AOE first for (int i : Level.NEIGHBOURS9){ diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfDisintegration.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfDisintegration.java index 6e2f7381b..d5afbf9ae 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfDisintegration.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfDisintegration.java @@ -38,13 +38,22 @@ import com.watabou.utils.Random; import java.util.ArrayList; -public class WandOfDisintegration extends Wand { +public class WandOfDisintegration extends DamageWand { { image = ItemSpriteSheet.WAND_DISINTEGRATION; collisionProperties = Ballistica.WONT_STOP; } + + + public int min(int lvl){ + return 2+lvl; + } + + public int max(int lvl){ + return 8+4*lvl; + } @Override protected void onZap( Ballistica beam ) { @@ -90,11 +99,9 @@ public class WandOfDisintegration extends Wand { } int lvl = level + chars.size() + terrainBonus; - int dmgMin = 2 + lvl; - int dmgMax = 8 + 4*lvl; for (Char ch : chars) { processSoulMark(ch, chargesPerCast()); - ch.damage( Random.NormalIntRange( dmgMin, dmgMax ), this ); + ch.damage( damageRoll(lvl), this ); ch.sprite.centerEmitter().burst( PurpleParticle.BURST, Random.IntRange( 1, 2 ) ); ch.sprite.flash(); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java index 53e5f203a..610eb0dcb 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFireblast.java @@ -34,15 +34,15 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Blazin import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.audio.Sample; import com.watabou.utils.Callback; -import com.watabou.utils.Random; import java.util.HashSet; -public class WandOfFireblast extends Wand { +public class WandOfFireblast extends DamageWand { { image = ItemSpriteSheet.WAND_FIREBOLT; @@ -50,6 +50,16 @@ public class WandOfFireblast extends Wand { collisionProperties = Ballistica.STOP_TERRAIN; } + //1x/1.5x/2.25x damage + public int min(int lvl){ + return (int)Math.round((1+lvl) * Math.pow(1.5f, chargesPerCast()-1)); + } + + //1x/1.5x/2.25x damage + public int max(int lvl){ + return (int)Math.round((5+3*lvl) * Math.pow(1.5f, chargesPerCast()-1)); + } + //the actual affected cells private HashSet affectedCells; //the cells to trace fire shots to, for visual effects. @@ -68,11 +78,7 @@ public class WandOfFireblast extends Wand { Char ch = Actor.findChar( cell ); if (ch != null) { - int min = 1+level(); - int max = Math.round(5 + 3*level()); - - //1x/1.5x/2.25x damage - int damage = (int)Math.round(Random.NormalIntRange(min, max) * Math.pow(1.5f, chargesPerCast()-1)); + int damage = damageRoll(); ch.damage(damage, this); Buff.affect( ch, Burning.class ).reignite( ch ); @@ -165,6 +171,14 @@ public class WandOfFireblast extends Wand { return Math.max(1, (int)Math.ceil(curCharges*0.3f)); } + @Override + public String statsDesc() { + if (levelKnown) + return Messages.get(this, "stats_desc", chargesPerCast(), min(), max()); + else + return Messages.get(this, "stats_desc", chargesPerCast(), min(0), max(0)); + } + @Override public void staffFx(MagesStaff.StaffParticle particle) { particle.color( 0xEE7722 ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java index 8bb70aafd..6cb1a0967 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfFrost.java @@ -39,12 +39,20 @@ import com.watabou.utils.Callback; import com.watabou.utils.PointF; import com.watabou.utils.Random; -public class WandOfFrost extends Wand { +public class WandOfFrost extends DamageWand { { image = ItemSpriteSheet.WAND_FROST; } + public int min(int lvl){ + return 2+lvl; + } + + public int max(int lvl){ + return 8+5*lvl; + } + @Override protected void onZap(Ballistica bolt) { @@ -56,7 +64,7 @@ public class WandOfFrost extends Wand { Char ch = Actor.findChar(bolt.collisionPos); if (ch != null){ - int damage = Random.NormalIntRange(5+level(), 10+5*level()); + int damage = damageRoll(); if (ch.buff(Frost.class) != null){ return; //do nothing, can't affect a frozen target diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java index cb0a149a2..a02cbfcf5 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfLightning.java @@ -40,7 +40,7 @@ import com.watabou.utils.Random; import java.util.ArrayList; -public class WandOfLightning extends Wand { +public class WandOfLightning extends DamageWand { { image = ItemSpriteSheet.WAND_LIGHTNING; @@ -49,6 +49,14 @@ public class WandOfLightning extends Wand { private ArrayList affected = new ArrayList<>(); ArrayList arcs = new ArrayList<>(); + + public int min(int lvl){ + return 5+lvl; + } + + public int max(int lvl){ + return 10+5*lvl; + } @Override protected void onZap( Ballistica bolt ) { @@ -63,7 +71,7 @@ public class WandOfLightning extends Wand { for (Char ch : affected){ processSoulMark(ch, chargesPerCast()); - ch.damage(Math.round(Random.NormalIntRange(min, max) * multipler), LightningTrap.LIGHTNING); + ch.damage(Math.round(damageRoll() * multipler), LightningTrap.LIGHTNING); if (ch == Dungeon.hero) Camera.main.shake( 2, 0.3f ); ch.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java index 8317d1cd8..46f0f29f3 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfMagicMissile.java @@ -28,13 +28,20 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; -import com.watabou.utils.Random; -public class WandOfMagicMissile extends Wand { +public class WandOfMagicMissile extends DamageWand { { image = ItemSpriteSheet.WAND_MAGIC_MISSILE; } + + public int min(int lvl){ + return 2+lvl; + } + + public int max(int lvl){ + return 8+2*lvl; + } @Override protected void onZap( Ballistica bolt ) { @@ -43,7 +50,7 @@ public class WandOfMagicMissile extends Wand { if (ch != null) { processSoulMark(ch, chargesPerCast()); - ch.damage(Random.NormalIntRange(2 + level() , 8 + level() * 2), this); + ch.damage(damageRoll(), this); ch.sprite.burst(0xFFFFFFFF, level() / 2 + 2); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfPrismaticLight.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfPrismaticLight.java index 8e7cb580b..ff9722856 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfPrismaticLight.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfPrismaticLight.java @@ -46,7 +46,7 @@ import com.watabou.utils.Callback; import com.watabou.utils.PointF; import com.watabou.utils.Random; -public class WandOfPrismaticLight extends Wand { +public class WandOfPrismaticLight extends DamageWand { { image = ItemSpriteSheet.WAND_PRISMATIC_LIGHT; @@ -54,6 +54,14 @@ public class WandOfPrismaticLight extends Wand { collisionProperties = Ballistica.MAGIC_BOLT; } + public int min(int lvl){ + return 1+lvl; + } + + public int max(int lvl){ + return 5+3*lvl; + } + @Override protected void onZap(Ballistica beam) { Char ch = Actor.findChar(beam.collisionPos); @@ -68,7 +76,7 @@ public class WandOfPrismaticLight extends Wand { } private void affectTarget(Char ch){ - int dmg = Random.NormalIntRange(1+level(), 5+3*level()); + int dmg = damageRoll(); //three in (5+lvl) chance of failing if (Random.Int(5+level()) >= 3) { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java index 15942cede..2f34b18a7 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/MagesStaff.java @@ -237,6 +237,8 @@ public class MagesStaff extends MeleeWeapon { if (wand == null){ info += "\n\n" + Messages.get(this, "no_wand"); + } else { + info += "\n\n" + Messages.get(this, "has_wand", Messages.get(wand, "name")) + " " + wand.statsDesc(); } return info; @@ -286,9 +288,15 @@ public class MagesStaff extends MeleeWeapon { if (wand == null){ applyWand((Wand)item); } else { + final int newLevel = + item.level() >= level() ? + level() > 0 ? + item.level() + 1 + : item.level() + : level(); GameScene.show( new WndOptions("", - Messages.get(MagesStaff.class, "warning"), + Messages.get(MagesStaff.class, "warning", newLevel), Messages.get(MagesStaff.class, "yes"), Messages.get(MagesStaff.class, "no")) { @Override diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index bbb617df5..ad7b41722 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -640,43 +640,52 @@ items.wands.wand.prompt=Choose a location to zap items.wands.wandofblastwave.name=wand of blast wave items.wands.wandofblastwave.staff_name=staff of blast wave items.wands.wandofblastwave.ondeath=You killed yourself with your own Wand of Blast Wave... -items.wands.wandofblastwave.desc=This wand is made of a sort of marbled stone, with gold trim and a round black gem at the tip. It feels very weighty in your hand.\n\nThis wand shoots a bolt which violently detonates at a target location. The force of this blast is strong enough to send most enemies flying. +items.wands.wandofblastwave.desc=This wand is made of a sort of marbled stone, with gold trim and a round black gem at the tip. It feels very weighty in your hand. +items.wands.wandofblastwave.stats_desc=This wand shoots a bolt which violently detonates at a target location. The force of this blast deals _%1$d-%2$d damage_ and is strong enough to send most enemies flying. items.wands.wandofcorruption.name=wand of corruption items.wands.wandofcorruption.staff_name=staff of corruption items.wands.wandofcorruption.already_corrupted=That character is already corrupted. items.wands.wandofcorruption.boss=Bosses are immune to corruption. items.wands.wandofcorruption.fail=The corrupting power was not strong enough, nothing happens. -items.wands.wandofcorruption.desc=This wand radiates dark energy, if that weren't already obvious from the small decorative skull shaped onto its tip.\n\nThis wand will release a blast of corrupting energy, attempting to bend enemies to your will. Full health enemies are much harder to corrupt than weakened ones.\n\nThis wand uses at least one charge per cast, but will often use more in an attempt to overpower more healthy enemies. +items.wands.wandofcorruption.desc=This wand radiates dark energy, if that weren't already obvious from the small decorative skull shaped onto its tip. +items.wands.wandofcorruption.stats_desc=This wand will release a blast of corrupting energy, attempting to bend enemies to your will. Full health enemies are much harder to corrupt than weakened ones. This wand uses at least one charge per cast, but will often use more in an attempt to overpower more healthy enemies. items.wands.wandofdisintegration.name=wand of disintegration items.wands.wandofdisintegration.staff_name=staff of disintegration -items.wands.wandofdisintegration.desc=This wand is made from a solid smooth chunk of obsidian, with a deep purple light running up its side, ending at the tip. It glows with destructive energy, waiting to shoot forward.\n\nThis wand shoots a beam that pierces any obstacle, and will go farther the more it is upgraded.\n\nThis wand deals bonus damage the more enemies and terrain it penetrates. +items.wands.wandofdisintegration.desc=This wand is made from a solid smooth chunk of obsidian, with a deep purple light running up its side, ending at the tip. It glows with destructive energy, waiting to shoot forward. +items.wands.wandofdisintegration.stats_desc=This wand shoots a beam that pierces any obstacle, and will go farther the more it is upgraded. The beam deals _%1$d-%2$d damage,_ and will also deal bonus damage for each enemy and wall it penetrates. items.wands.wandoffireblast.name=wand of fireblast items.wands.wandoffireblast.staff_name=staff of fireblast -items.wands.wandoffireblast.desc=This wand is made from red-lacquered wood with golden leaf used liberally to make it look quite regal. It crackles and hisses at the tip, eager to unleash its powerful magic.\n\nThis wand produces a blast of fire when used, extending out into a cone shape. As this wand is upgraded it will consume more charges, the effect becomes significantly more powerful the more charges are consumed. +items.wands.wandoffireblast.desc=This wand is made from red-lacquered wood with golden leaf used liberally to make it look quite regal. It crackles and hisses at the tip, eager to unleash its powerful magic. +items.wands.wandoffireblast.stats_desc=This wand produces a blast of fire when used, extending out into a cone shape. As this wand is upgraded it will consume more charges, the effect becomes significantly more powerful the more charges are consumed. Its next attack will consume _%1$d charges_ and deal _%2$d-%3$d damage._ items.wands.wandoffrost.name=wand of frost items.wands.wandoffrost.staff_name=staff of frost -items.wands.wandoffrost.desc=This wand seems to be made out of some kind of magical ice. It grows brighter towards its rounded tip. It feels very cold when held, but somehow your hand stays warm.\n\nThis wand shoots blasts of icy energy toward your foes, dealing significant damage and chilling, which reduces speed. The effect seems stronger in water. Chilled and frozen enemies take less damage from this wand, as they are already cold. +items.wands.wandoffrost.desc=This wand seems to be made out of some kind of magical ice. It grows brighter towards its rounded tip. It feels very cold when held, but somehow your hand stays warm. +items.wands.wandoffrost.stats_desc=This wand shoots blasts of icy energy toward your foes, dealing _%1$d-%2$d damage_ and chilling, which reduces speed. The effect seems stronger in water. Chilled and frozen enemies take less damage from this wand, as they are already cold. items.wands.wandoflightning.name=wand of lightning items.wands.wandoflightning.staff_name=staff of lightning items.wands.wandoflightning.ondeath=You killed yourself with your own Wand of Lightning... -items.wands.wandoflightning.desc=This wand is made out of solid metal, making it surprisingly heavy. Two prongs curve together at the tip, and electricity arcs between them.\n\nThis wand sends powerful lightning arcing through whatever it is shot at. This electricity can bounce between many nearby foes, and is more powerful in water. If you're too close, you may get shocked as well. +items.wands.wandoflightning.desc=This wand is made out of solid metal, making it surprisingly heavy. Two prongs curve together at the tip, and electricity arcs between them. +items.wands.wandoflightning.stats_desc=This wand sends powerful lightning arcing through whatever it is shot at, dealing _%1$d-%2$d damage._ This electricity can bounce between many nearby foes, spreading damage between them. The lightning and damage spread much more effectively in water. If you're too close, you may get shocked as well! items.wands.wandofmagicmissile.name=wand of magic missile items.wands.wandofmagicmissile.staff_name=staff of magic missile -items.wands.wandofmagicmissile.desc=This fairly plain wand launches missiles of pure magical energy, dealing moderate damage to a target.\n\nWhile not as strong as other wands, it makes up for it somewhat with more available charges. +items.wands.wandofmagicmissile.desc=This fairly plain wand launches missiles of pure magical energy. While not as strong as other wands, it makes up for it somewhat with more available charges. +items.wands.wandofmagicmissile.stats_desc=Each bolt from this wand deals _%1$d-%2$d damage,_ and has no additional effects. items.wands.wandofprismaticlight.name=wand of prismatic light items.wands.wandofprismaticlight.staff_name=staff of prismatic light -items.wands.wandofprismaticlight.desc=This wand is made of a solid piece of translucent crystal, like a long chunk of smooth glass.\n\nThis wand shoots rays of light which damage and blind enemies and cut through the darkness of the dungeon, revealing hidden areas and traps. Demonic and undead foes will burn in the bright light of the wand, taking significant bonus damage. +items.wands.wandofprismaticlight.desc=This wand is made of a solid piece of translucent crystal, like a long chunk of smooth glass. Small bits of colorful light dance around the tip of the wand, eager to burst forth. +items.wands.wandofprismaticlight.stats_desc=This wand shoots rays of light which cut through the darkness of the dungeon, revealing hidden areas and traps. The beam can blind enemies, and deals %d-%d damage. Demonic and undead foes will burn in the bright light of the wand, taking bonus damage. items.wands.wandofregrowth.name=wand of regrowth items.wands.wandofregrowth.staff_name=staff of regrowth -items.wands.wandofregrowth.desc=This wand is made from a thin shaft of expertly carved wood. Somehow it is still alive and vibrant, bright green like a young tree's core.\n\nWhen used, this wand will consume all its charges to blast magical regrowth energy outward in a cone. This magic will cause grass, roots, and rare plants to spring to life.\n\n"When life ceases new life always begins to grow... The eternal cycle always remains!" +items.wands.wandofregrowth.desc=This wand is made from a thin shaft of expertly carved wood. Somehow it is still alive and vibrant, bright green like a young tree's core. +items.wands.wandofregrowth.stats_desc=When used, this wand will consume all its charges to blast magical regrowth energy outward in a cone. This magic will cause grass, roots, and rare plants to spring to life. "When life ceases new life always begins to grow... The eternal cycle always remains!" items.wands.wandofregrowth$dewcatcher.name=Dewcatcher items.wands.wandofregrowth$dewcatcher.desc=Dewcatchers camouflage as grass to avoid attention, but their bulges of collected dew give them away. items.wands.wandofregrowth$seedpod.name=Seed Pod @@ -686,11 +695,13 @@ items.wands.wandoftransfusion.name=wand of transfusion items.wands.wandoftransfusion.staff_name=staff of transfusion items.wands.wandoftransfusion.ondeath=You killed yourself with your own Wand of Transfusion... items.wands.wandoftransfusion.charged=Your staff is charged with the life energy of your enemy! -items.wands.wandoftransfusion.desc=A fairly plainly shaped wand, it stands out due to its magenta hue and pitch black gem at the tip.\n\nThis wand will take some of your life energy and blast it at a target. This effect is very versatile: allies will be healed, enemies will be temporarily charmed, and hostile undead will take considerable damage.\n\nThe life drain is significant though, using this wand will deal damage to you in addition to consuming charges. +items.wands.wandoftransfusion.desc=A fairly plainly shaped wand, it stands out due to its magenta hue and pitch black gem at the tip. +items.wands.wandoftransfusion.stats_desc=This wand will take some of your life energy and blast it at a target. This effect is very versatile: allies will be healed, enemies will be temporarily charmed, and hostile undead will take considerable damage. The life drain is significant though, using this wand will deal damage to you in addition to consuming charges. items.wands.wandofvenom.name=wand of venom items.wands.wandofvenom.staff_name=staff of venom -items.wands.wandofvenom.desc=This wand has a purple body which opens to a brilliant green gem.\n\nThis wand shoots a bolt which explodes into a cloud of vile venomous gas at a targeted location. Anything caught inside this cloud will take continual damage, increasing with time. +items.wands.wandofvenom.desc=This wand has a purple body which opens to a brilliant green gem. +items.wands.wandofvenom.stats_desc=This wand shoots a bolt which explodes into a cloud of vile venomous gas at a targeted location. Anything caught inside this cloud will take continual damage, increasing with time. @@ -819,11 +830,12 @@ items.weapon.melee.magesstaff.imbue=You imbue your staff with the %s. items.weapon.melee.magesstaff.conflict=The conflicting magics erase the enchantment on your staff. items.weapon.melee.magesstaff.id_first=You'll need to identify this wand first. items.weapon.melee.magesstaff.cursed=You can't use a cursed wand. -items.weapon.melee.magesstaff.warning=Are you sure you want to imbue your staff with this wand? The previous imbue will be lost.\n\nIf the wand is the same or a higher level, the staff will inherit the wand's level and carry over a single upgrade. +items.weapon.melee.magesstaff.warning=Are you sure you want to imbue your staff with this wand? The previous imbue will be lost.\n\nIf the wand being imbued is the same or higher level than the staff, the staff will inherit the level of that wand plus a single one of its own upgrades.\n\nThis imbue will result in a level %d staff. items.weapon.melee.magesstaff.yes=Yes, I'm sure. items.weapon.melee.magesstaff.no=No, I changed my mind -items.weapon.melee.magesstaff.desc=Crafted by the mage himself, this staff is a one of a kind magical weapon. Rather than having an innate magic in it, this staff is instead imbued with magical energy from a wand, granting it new power. +items.weapon.melee.magesstaff.desc=Crafted by the mage himself, this staff is a unique magical weapon. Rather than having innate magical power, this staff is instead imbued with magical energy from a wand. items.weapon.melee.magesstaff.no_wand=The staff currently has no magic in it, it must be _imbued with a wand's power_ before it can be used to cast spells. +items.weapon.melee.magesstaff.has_wand=The staff is currently imbued with a _%s._ items.weapon.melee.meleeweapon.stats_known=This _tier-%1$d_ melee weapon deals _%2$d-%3$d damage_ and requires _%4$d strength_ to use properly. 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.