v0.3.4: externalized all buff strings

This commit is contained in:
Evan Debenham 2015-12-28 20:23:15 -05:00 committed by Evan Debenham
parent 801fd58e7c
commit 77d16d5a93
42 changed files with 239 additions and 305 deletions

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Amok extends FlavourBuff { public class Amok extends FlavourBuff {
@ -43,15 +44,11 @@ public class Amok extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Amok"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Amok causes a state of great rage and confusion in its target.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"When a creature is amoked, they will attack whatever is near them, whether they be friend or foe.\n" +
"\n" +
"The amok will last for " + dispTurns() + ".";
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Barkskin extends Buff { public class Barkskin extends Buff {
@ -61,16 +62,11 @@ public class Barkskin extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Barkskin"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Your skin is hardened, it feels rough and solid like bark.\n" + return Messages.get(this, "desc", level);
"\n" +
"The hardened skin increases your effective armor, allowing you to better defend against physical attack. " +
"The armor bonus will decrease by one point each turn until it expires.\n" +
"\n" +
"Your armor is currently increased by " + level +".";
} }
} }

View File

@ -23,9 +23,9 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions; import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -64,7 +64,7 @@ public class Bleeding extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Bleeding"; return Messages.get(this, "name");
} }
@Override @Override
@ -81,7 +81,7 @@ public class Bleeding extends Buff {
if (target == Dungeon.hero && !target.isAlive()) { if (target == Dungeon.hero && !target.isAlive()) {
Dungeon.fail( ResultDescriptions.BLEEDING ); Dungeon.fail( ResultDescriptions.BLEEDING );
GLog.n( "You bled to death..." ); GLog.n( Messages.get(this, "ondeath") );
} }
spend( TICK ); spend( TICK );
@ -100,11 +100,6 @@ public class Bleeding extends Buff {
@Override @Override
public String desc() { public String desc() {
return "That wound is leaking a worrisome amount of blood.\n" + return Messages.get(this, "desc", level);
"\n" +
"Bleeding causes damage every turn. Each turn the damage decreases by a random amount, " +
"until the bleeding eventually stops.\n" +
"\n" +
"The bleeding can currently deal " + level + " max damage.";
} }
} }

View File

@ -20,7 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Bless extends FlavourBuff { public class Bless extends FlavourBuff {
@ -36,15 +36,11 @@ public class Bless extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Blessed"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "A great burst of focus, some say it is inspired by the gods.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Blessing significantly increases accuracy and evasion, making the blessed much more effective in combat.\n" +
"\n" +
"This blessing will last for " + dispTurns() + ".";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Blindness extends FlavourBuff { public class Blindness extends FlavourBuff {
@ -42,17 +43,11 @@ public class Blindness extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Blinded"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Blinding turns the surrounding world into a dark haze.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"While blinded, a character can't see more than one tile infront of themselves, rendering ranged " +
"attacks useless and making it very easy to lose track of distant enemies. Additionally, a blinded " +
"hero is unable to read scrolls or books.\n" +
"\n" +
"The blindness will last for " + dispTurns() + ".";
} }
} }

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@ -85,7 +86,9 @@ public class Buff extends Actor {
//to handle the common case of showing how many turns are remaining in a buff description. //to handle the common case of showing how many turns are remaining in a buff description.
protected String dispTurns(float input){ protected String dispTurns(float input){
return input == 1 ? "1 more turn" : new DecimalFormat("#.##").format(input) + " more turns"; return input == 1 ?
Messages.get(Buff.class, "1moreturn") :
Messages.get(Buff.class, "#moreturns", new DecimalFormat("#.##").format(input));
} }
//creates a fresh instance of the buff and attaches that, this allows duplication. //creates a fresh instance of the buff and attaches that, this allows duplication.

View File

@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -146,7 +147,7 @@ public class Burning extends Buff implements Hero.Doom {
@Override @Override
public String toString() { public String toString() {
return "Burning"; return Messages.get(this, "name");
} }
public static float duration( Char ch ) { public static float duration( Char ch ) {
@ -156,14 +157,7 @@ public class Burning extends Buff implements Hero.Doom {
@Override @Override
public String desc() { public String desc() {
return "Few things are more distressing than being engulfed in flames.\n" + return Messages.get(this, "desc", dispTurns(left));
"\n" +
"Fire will deal damage every turn until it is put out by water, expires, or it is resisted. " +
"Fire can be extinquished by stepping into water, or from the splash of a shattering potion. \n" +
"\n" +
"Additionally, the fire may ignite flammable terrain or items that it comes into contact with.\n" +
"\n" +
"The burning will last for " + dispTurns(left) + ", or until it is resisted or extinquished.";
} }
@Override @Override

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -54,7 +55,7 @@ public class Charm extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Charmed"; return Messages.get(this, "name");
} }
public static float durationFactor( Char ch ) { public static float durationFactor( Char ch ) {
@ -64,11 +65,6 @@ public class Charm extends FlavourBuff {
@Override @Override
public String desc() { public String desc() {
return "A charm is manipulative magic that can make enemies temporarily adore eachother.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Characters affected by charm are unable to directly attack the enemy they are charmed by. " +
"Attacking other targets is still possible however.\n" +
"\n" +
"The charm will last for " + dispTurns() + ".";
} }
} }

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio; import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio;
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@ -102,17 +103,11 @@ public class Chill extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Chilled"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Not quite frozen, but still much too cold.\n" + return Messages.get(this, "desc", dispTurns(), new DecimalFormat("#.##").format((1f-speedFactor())*100f));
"\n" +
"Chilled targets perform all actions more slowly, depending on how many turns are left in the effect. " +
"At it's worst, this is equivalent to being slowed.\n" +
"\n" +
"This chilled will last for " + dispTurns() + ", " +
"and is currently reducing speed by " + new DecimalFormat("#.##").format((1f-speedFactor())*100f) + "%";
} }
} }

View File

@ -22,13 +22,12 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
public class Combo extends Buff { public class Combo extends Buff {
private static String TXT_COMBO = "%d hit combo!";
public int count = 0; public int count = 0;
@Override @Override
@ -38,7 +37,7 @@ public class Combo extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Combo"; return Messages.get(this, "name");
} }
public int hit( Char enemy, int damage ) { public int hit( Char enemy, int damage ) {
@ -49,7 +48,7 @@ public class Combo extends Buff {
Badges.validateMasteryCombo( count ); Badges.validateMasteryCombo( count );
GLog.p( TXT_COMBO, count ); GLog.p( Messages.get(this, "combo", count) );
postpone( 1.41f - count / 10f ); postpone( 1.41f - count / 10f );
return (int)(damage * (count - 2) / 5f); return (int)(damage * (count - 2) / 5f);
@ -69,13 +68,9 @@ public class Combo extends Buff {
@Override @Override
public String desc() { public String desc() {
return "Through building momentum, the gladiator deals bonus damage.\n" + return Messages.get(this, "desc") +
"\n" + (count <= 2 ?
"Your combo will keep building with quick attacks that do not miss. " + Messages.get(this, "notenough") :
"The higher your combo gets, the faster your attacks will need to be. " + Messages.get(this, "bonusdmg", ((count - 2) * 20f)));
"failing to land a hit quickly enough will reset the combo.\n" +
"\n" +
(count <= 2 ? "Your combo has not built up enough to give you bonus damage yet." :
"Your combo is currently giving you " + ((count - 2) * 20f) + " % bonus damage.");
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -59,16 +60,11 @@ public class Corruption extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Corrupted"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Corruption seeps into the essence of a being, twisting them against their former nature.\n" + return Messages.get(this, "desc");
"\n" +
"Corrupted creatures will attack and aggravate their allies, and ignore their former enemies. " +
"Corruption is damaging as well, and will slowly cause its target to succumb.\n" +
"\n" +
"Corruption is permanent, its effects only end in death.";
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Cripple extends FlavourBuff { public class Cripple extends FlavourBuff {
@ -37,15 +38,11 @@ public class Cripple extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Crippled"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You're pretty sure legs aren't meant to bend that way.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Crippled halves movement speed, making moving a tile usually take two turns instead of one.\n" +
"\n" +
"This cripple will last for " + dispTurns() + ".";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -54,15 +55,11 @@ public class Drowsy extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Drowsy"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "A magical force is making it difficult to stay awake.\n" + return Messages.get(this, "desc", dispTurns(cooldown()+1));
"\n" +
"The hero can resist drowsiness by taking damage or by being at full health.\n" +
"\n" +
"After " + dispTurns(cooldown()+1) + ", the target will fall into a deep magical sleep.";
} }
} }

View File

@ -23,10 +23,8 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle;
import java.util.HashSet;
public class EarthImbue extends FlavourBuff { public class EarthImbue extends FlavourBuff {
@ -44,16 +42,12 @@ public class EarthImbue extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Imbued with Earth"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are inbued with the power of earth!\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"All physical attacks will command roots to lock the enemy in place while the effect lasts.\n" +
"\n" +
"You are imbued for " + dispTurns() + ".";
} }
{ {

View File

@ -24,6 +24,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -85,17 +86,12 @@ public class FireImbue extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Imbued with Fire"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are imbued with the power of fire!\n" + return Messages.get(this, "desc", dispTurns(left));
"\n" +
"All physical attacks will have a chance to light enemies ablaze. " +
"Additionally, you are completely immune to the effects of fire.\n" +
"\n" +
"You are imbued for " + dispTurns(left) + ".";
} }
{ {

View File

@ -20,9 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import java.text.DecimalFormat; //buff whose only internal logic is to wait and detach after a time.
//buff whose only logic is to wait and detach after a time.
public class FlavourBuff extends Buff { public class FlavourBuff extends Buff {
@Override @Override
@ -34,7 +32,6 @@ public class FlavourBuff extends Buff {
//flavour buffs can all just rely on cooldown() //flavour buffs can all just rely on cooldown()
protected String dispTurns() { protected String dispTurns() {
//add one turn as buffs act last, we want them to end at 1 visually, even if they end at 0 internally. //add one turn as buffs act last, we want them to end at 1 visually, even if they end at 0 internally.
float visualTurnsLeft = cooldown()+1f; return dispTurns(cooldown()+1f);
return visualTurnsLeft == 1 ? "1 more turn" : new DecimalFormat("#.##").format(visualTurnsLeft) + " more turns";
} }
} }

View File

@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@ -108,17 +109,12 @@ public class Frost extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Frozen"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Not to be confused with freezing solid, this more benign freezing simply encases the target in ice.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Freezing acts similarly to paralysis, making it impossible for the target to act. " +
"Unlike paralysis, freezing is immediately cancelled if the target takes damage, as the ice will shatter.\n" +
"\n" +
"The freeze will last for " + dispTurns() + ", or until the target takes damage.\n";
} }
public static float duration( Char ch ) { public static float duration( Char ch ) {

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Fury extends Buff { public class Fury extends Buff {
@ -48,15 +49,11 @@ public class Fury extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Furious"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are angry, enemies won't like you when you're angry.\n" + return Messages.get(this, "desc");
"\n" +
"A great rage burns within you, increasing the damage you deal with physical attacks by 50%. \n" +
"\n" +
"This rage will last as long as you are injured below 50% health.\n";
} }
} }

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ParalyticGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.StenchGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.VenomGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.VenomGas;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class GasesImmunity extends FlavourBuff { public class GasesImmunity extends FlavourBuff {
@ -38,7 +39,7 @@ public class GasesImmunity extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Immune to gases"; return Messages.get(this, "name");
} }
{ {
@ -51,11 +52,6 @@ public class GasesImmunity extends FlavourBuff {
@Override @Override
public String desc() { public String desc() {
return "some strange force is filtering out the air around you, it's not causing you any harm, but it blocks " + return Messages.get(this, "desc", dispTurns());
"out everything but air so effectively you can't even smell anything!\n" +
"\n" +
"You are immune to the effects of all gasses while this buff lasts.\n" +
"\n" +
"You will be immune for " + dispTurns() + ".";
} }
} }

View File

@ -26,14 +26,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions; import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random;
public class Hunger extends Buff implements Hero.Doom { public class Hunger extends Buff implements Hero.Doom {
@ -42,10 +40,6 @@ public class Hunger extends Buff implements Hero.Doom {
public static final float HUNGRY = 260f; public static final float HUNGRY = 260f;
public static final float STARVING = 360f; public static final float STARVING = 360f;
private static final String TXT_HUNGRY = "You are hungry.";
private static final String TXT_STARVING = "You are starving!";
private static final String TXT_DEATH = "You starved to death...";
private float level; private float level;
private float partialDamage; private float partialDamage;
@ -93,7 +87,7 @@ public class Hunger extends Buff implements Hero.Doom {
boolean statusUpdated = false; boolean statusUpdated = false;
if (newLevel >= STARVING) { if (newLevel >= STARVING) {
GLog.n( TXT_STARVING ); GLog.n( Messages.get(this, "onstarving") );
hero.resting = false; hero.resting = false;
hero.damage( 1, this ); hero.damage( 1, this );
statusUpdated = true; statusUpdated = true;
@ -102,7 +96,7 @@ public class Hunger extends Buff implements Hero.Doom {
} else if (newLevel >= HUNGRY && level < HUNGRY) { } else if (newLevel >= HUNGRY && level < HUNGRY) {
GLog.w( TXT_HUNGRY ); GLog.w( Messages.get(this, "onhungry") );
statusUpdated = true; statusUpdated = true;
} }
@ -131,7 +125,7 @@ public class Hunger extends Buff implements Hero.Doom {
Artifact.ArtifactBuff buff = target.buff( HornOfPlenty.hornRecharge.class ); Artifact.ArtifactBuff buff = target.buff( HornOfPlenty.hornRecharge.class );
if (buff != null && buff.isCursed()){ if (buff != null && buff.isCursed()){
energy *= 0.67f; energy *= 0.67f;
GLog.n("The cursed horn steals some of the food energy as you eat."); GLog.n( Messages.get(this, "cursedhorn") );
} }
if (!Dungeon.isChallenged(Challenges.NO_FOOD)) if (!Dungeon.isChallenged(Challenges.NO_FOOD))
@ -169,9 +163,9 @@ public class Hunger extends Buff implements Hero.Doom {
@Override @Override
public String toString() { public String toString() {
if (level < STARVING) { if (level < STARVING) {
return "Hungry"; return Messages.get(this, "hungry");
} else { } else {
return "Starving"; return Messages.get(this, "starving");
} }
} }
@ -179,16 +173,12 @@ public class Hunger extends Buff implements Hero.Doom {
public String desc() { public String desc() {
String result; String result;
if (level < STARVING) { if (level < STARVING) {
result = "You can feel your stomach calling out for food, but it's not too urgent yet.\n\n"; result = Messages.get(this, "desc_intro_hungry");
} else { } else {
result = "You're so hungry it hurts.\n\n"; result = Messages.get(this, "desc_intro_starving");
} }
result += "Hunger slowly increases as you spend time in the dungeon, eventually you will begin to starve. " + result += Messages.get(this, "desc");
"While starving you will slowly lose health instead of regenerating it.\n" +
"\n" +
"Rationing is important! If you have health to spare starving isn't a bad idea if it means there will " +
"be more food later. Effective rationing can make food last a lot longer!\n\n";
return result; return result;
} }
@ -199,6 +189,6 @@ public class Hunger extends Buff implements Hero.Doom {
Badges.validateDeathFromHunger(); Badges.validateDeathFromHunger();
Dungeon.fail( ResultDescriptions.HUNGER ); Dungeon.fail( ResultDescriptions.HUNGER );
GLog.n( TXT_DEATH ); GLog.n( Messages.get(this, "ondeath") );
} }
} }

View File

@ -24,6 +24,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -65,17 +66,12 @@ public class Invisibility extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Invisible"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are completely blended into the surrounding terrain, making you impossible to see.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"While you are invisible enemies are unable to attack or follow you. " +
"Physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility.\n" +
"\n" +
"This invisibility will last for " + dispTurns() + ".";
} }
public static void dispel() { public static void dispel() {

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -60,17 +61,11 @@ public class Levitation extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Levitating"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "A magical force is levitating you over the ground, making you feel weightless.\n" + return Messages.get(this, "desc", dispTurns());
"\n " +
"While levitating you ignore all ground-based effects. Traps won't trigger, water won't put out fire, " +
"plants won't be trampled, roots will miss you, and you will hover right over pits. " +
"Be careful, as all these things can come into effect the second the levitation ends!\n" +
"\n" +
"You are levitating for " + dispTurns() + ".";
} }
} }

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -63,15 +64,11 @@ public class Light extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Illuminated"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Even in the Darkest Dungeon, a steady light at your side is always comforting.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Light helps keep darkness at bay, allowing you to see a reasonable distance despite the environment.\n" +
"\n" +
"The light will last for " + dispTurns() + ".";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -71,18 +72,11 @@ public class LockedFloor extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Floor is Locked"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "The current floor is locked, and you are unable to leave it!\n" + return Messages.get(this, "desc");
"\n" +
"While a floor is locked, you will not gain hunger or take damage from starving. In addition, " +
"if you do not work towards defeating this floor's boss, passive regeneration effects will also stop.\n " +
"\n" +
"Additionally, if you are revived by an unblessed ankh while the floor is locked, then it will reset.\n" +
"\n" +
"Kill this floor's boss to break the lock.\n";
} }
} }

View File

@ -23,13 +23,13 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
public class MagicalSleep extends Buff { public class MagicalSleep extends Buff {
private static final float STEP = 1f; private static final float STEP = 1f;
public static final float SWS = 1.5f;
@Override @Override
public boolean attachTo( Char target ) { public boolean attachTo( Char target ) {
@ -37,11 +37,11 @@ public class MagicalSleep extends Buff {
if (target instanceof Hero) if (target instanceof Hero)
if (target.HP == target.HT) { if (target.HP == target.HT) {
GLog.i("You are too healthy, and resist the urge to sleep."); GLog.i(Messages.get(this, "toohealthy"));
detach(); detach();
return true; return true;
} else { } else {
GLog.i("You fall into a deep magical sleep."); GLog.i(Messages.get(this, "fallasleep"));
} }
else if (target instanceof Mob) else if (target instanceof Mob)
((Mob)target).state = ((Mob)target).SLEEPING; ((Mob)target).state = ((Mob)target).SLEEPING;
@ -60,7 +60,7 @@ public class MagicalSleep extends Buff {
target.HP = Math.min(target.HP+1, target.HT); target.HP = Math.min(target.HP+1, target.HT);
((Hero) target).resting = true; ((Hero) target).resting = true;
if (target.HP == target.HT) { if (target.HP == target.HT) {
GLog.p("You wake up feeling refreshed and healthy."); GLog.p(Messages.get(this, "wakeup"));
detach(); detach();
} }
} }
@ -84,15 +84,11 @@ public class MagicalSleep extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Magical Sleep"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "This character has fallen into a deep magical sleep which they will not wake from naturally.\n" + return Messages.get(this, "desc");
"\n" +
"Magical sleep is similar to regular sleep, except that only damage will cause the target to wake up. \n" +
"\n" +
"For the hero, magical sleep has some restorative properties, allowing them to rapidly heal while resting.";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class MindVision extends FlavourBuff { public class MindVision extends FlavourBuff {
@ -40,7 +41,7 @@ public class MindVision extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Mind vision"; return Messages.get(this, "name");
} }
@Override @Override
@ -51,12 +52,6 @@ public class MindVision extends FlavourBuff {
@Override @Override
public String desc() { public String desc() {
return "Somehow you are able to see all creatures on this floor through your mind. It's a weird feeling.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"All characters on this floor are visible to you as long as you have mind vision. " +
"Seeing a creature through mind vision counts as it being seen or nearby for " +
"the purposes of many magical effects.\n" +
"\n" +
"The mind vision will last for " + dispTurns() + ".";
} }
} }

View File

@ -23,14 +23,12 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions; import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
import com.watabou.utils.Random; import com.watabou.utils.Random;
public class Ooze extends Buff { public class Ooze extends Buff {
private static final String TXT_HERO_KILLED = "%s killed you...";
{ {
type = buffType.NEGATIVE; type = buffType.NEGATIVE;
@ -43,16 +41,12 @@ public class Ooze extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Caustic ooze"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "This sticky acid clings to flesh, slowly melting it away.\n" + return Messages.get(this, "desc");
"\n" +
"Ooze will deal consistent damage until it is washed off in water.\n" +
"\n" +
"Ooze does not expire on its own and must be removed with water.";
} }
@Override @Override
@ -64,7 +58,7 @@ public class Ooze extends Buff {
target.damage( 1, this ); target.damage( 1, this );
if (!target.isAlive() && target == Dungeon.hero) { if (!target.isAlive() && target == Dungeon.hero) {
Dungeon.fail( ResultDescriptions.OOZE ); Dungeon.fail( ResultDescriptions.OOZE );
GLog.n( TXT_HERO_KILLED, toString() ); GLog.n( Messages.get(this, "ondeath") );
} }
spend( TICK ); spend( TICK );
} }

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -63,17 +64,12 @@ public class Paralysis extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Paralysed"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Oftentimes the worst thing to do is nothing at all.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Paralysis completely halts all actions, forcing the target to wait until the effect wears off. " +
"The pain from taking damage can also cause characters to snap out of paralysis.\n" +
"\n" +
"This paralysis will last for " + dispTurns() + ", or until it is resisted through pain.\n";
} }
public static float duration( Char ch ) { public static float duration( Char ch ) {

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -66,16 +67,12 @@ public class Poison extends Buff implements Hero.Doom {
@Override @Override
public String toString() { public String toString() {
return "Poisoned"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Poison works its way through the body, slowly impairing its internal functioning.\n" + return Messages.get(this, "desc", dispTurns(left));
"\n" +
"Poison deals damage each turn proportional to how long until it expires.\n" +
"\n" +
"This poison will last for " + dispTurns(left) + ".";
} }
@Override @Override

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Recharging extends FlavourBuff { public class Recharging extends FlavourBuff {
@ -31,7 +32,7 @@ public class Recharging extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Recharging"; return Messages.get(this, "name");
} }
//want to process partial turns for this buff, and not count it when it's expiring. //want to process partial turns for this buff, and not count it when it's expiring.
@ -45,10 +46,6 @@ public class Recharging extends FlavourBuff {
@Override @Override
public String desc() { public String desc() {
return "Energy is coursing through you, improving the rate that your wands and staffs charge.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Each turn this buff will increase current charge by one quarter, in addition to regular recharge. \n" +
"\n" +
"The recharging will last for " + dispTurns() + ".";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Roots extends FlavourBuff { public class Roots extends FlavourBuff {
@ -52,15 +53,11 @@ public class Roots extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Rooted"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Roots(magical or natural) grab at the feet, forcing them down to the ground.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Roots lock a target in place, making it impossible for them to move, but other actions are not affected.\n" +
"\n" +
"The roots will last for " + dispTurns() + ".";
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
@ -97,17 +98,11 @@ public class Shadows extends Invisibility {
@Override @Override
public String toString() { public String toString() {
return "Shadowmelded"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are blended into the shadows around you, granting you invisibility and slowing your metabolism.\n" + return Messages.get(this, "desc");
"\n" +
"While you are invisible enemies are unable to attack or follow you. " +
"Most physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility. " +
"Additionally, while shadowmelded, your rate of hunger is slowed.\n" +
"\n" +
"You will remain shadowmelded until you leave the shadows or an enemy comes into contact with you.";
} }
} }

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Slow extends FlavourBuff { public class Slow extends FlavourBuff {
@ -39,16 +40,12 @@ public class Slow extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Slowed"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Slowing magic affects the target's rate of time, to them everything is moving super-fast.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"A slowed character performs all actions in twice the amount of time they would normally take.\n" +
"\n" +
"This slow will last for " + dispTurns() + ".";
} }
public static float duration( Char ch ) { public static float duration( Char ch ) {

View File

@ -20,8 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -51,15 +50,11 @@ public class SnipersMark extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Sniper's mark"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
Char ch = (Char)Actor.findById(object); return Messages.get(this, "desc");
return "The sniper is honed in " + ((ch == null) ? "on a lost target" : "on the nearby " + ch.name ) + ", " +
"gaining increased attack speed and armor penetration while attacking it.\n" +
"\n" +
"The sniper will remain honed in until she switches targets, stops attacking, or the target dies.";
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
@ -44,14 +45,11 @@ public class SoulMark extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Soul Marked"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "The warlock has tapped into the soul of this creature. " + return Messages.get(this, "desc", dispTurns());
"He will heal and satisfy his hunger as it takes physical damage.\n" +
"\n" +
"This mark will last for " + dispTurns() + ".";
} }
} }

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -55,17 +56,12 @@ public class Terror extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Terrified"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Terror is manipulative magic which forces its target into an uncontrollable panic.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Terrified characters are forced to run away from their opponent, trying to put as many doors and " +
"walls between them as possible. The shock of pain is enough to break this effect, however.\n" +
"\n" +
"This terror will last for " + dispTurns() + ", or until the target takes damage.";
} }
public static void recover( Char target ) { public static void recover( Char target ) {

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -73,17 +74,12 @@ public class ToxicImbue extends Buff {
@Override @Override
public String toString() { public String toString() {
return "Imbued with Toxicity"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "You are imbued with poisonous energy!\n" + return Messages.get(this, "desc", dispTurns(left));
"\n" +
"As you move around toxic gas will constantly billow forth from you, damaging your enemies. " +
"You are immune to toxic gas and poison for the duration of the effect.\n" +
"\n" +
"You are imbued for " + dispTurns(left) + ".";
} }
{ {

View File

@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -60,16 +61,12 @@ public class Venom extends Poison implements Hero.Doom {
@Override @Override
public String toString() { public String toString() {
return "Venomed"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Venom is a extremely caustic and dangerous poison.\n" + return Messages.get(this, "desc", dispTurns(left), damage);
"\n" +
"Unlike poison, whose damage lowers over time, venom does increasing damage the longer it stays on a target.\n" +
"\n" +
"This venom will last for " + dispTurns(left) + ", and is currently dealing " + damage + " damage.";
} }
@Override @Override

View File

@ -18,6 +18,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Vertigo extends FlavourBuff { public class Vertigo extends FlavourBuff {
@ -35,17 +36,12 @@ public class Vertigo extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Vertigo"; return Messages.get(this, "name");
} }
@Override @Override
public String desc() { public String desc() {
return "Walking in a straight line can be difficult when the whole world is spinning.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"While under the effects of vertigo, characters who attempt to move will go in a random direction, " +
"instead of the one they intended to go in. \n" +
"\n" +
"This Vertigo effect with last for " + dispTurns() + ".";
} }
public static float duration( Char ch ) { public static float duration( Char ch ) {

View File

@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
public class Weakness extends FlavourBuff { public class Weakness extends FlavourBuff {
@ -40,7 +41,7 @@ public class Weakness extends FlavourBuff {
@Override @Override
public String toString() { public String toString() {
return "Weakened"; return Messages.get(this, "name");
} }
@Override @Override
@ -69,10 +70,6 @@ public class Weakness extends FlavourBuff {
@Override @Override
public String desc() { public String desc() {
return "Your gear suddenly feels a lot heavier.\n" + return Messages.get(this, "desc", dispTurns());
"\n" +
"Weakening magic is affecting you, reducing your effective strength by 2 points.\n" +
"\n" +
"This weakness will last for " + dispTurns() + ".";
} }
} }

View File

@ -20,6 +20,7 @@
*/ */
package com.shatteredpixel.shatteredpixeldungeon.messages; package com.shatteredpixel.shatteredpixeldungeon.messages;
import java.util.Locale;
import java.util.ResourceBundle; import java.util.ResourceBundle;
public class Messages { public class Messages {
@ -27,24 +28,25 @@ public class Messages {
private static ResourceBundle strings = private static ResourceBundle strings =
ResourceBundle.getBundle("com.shatteredpixel.shatteredpixeldungeon.messages.messages"); ResourceBundle.getBundle("com.shatteredpixel.shatteredpixeldungeon.messages.messages");
public static String get(String key){ public static String get(String key, Object...args){
return get(null, key); return get(null, key, args);
} }
//stuffing static variables with results from this means the app needs to restart for locale changes to take effect. //stuffing static variables with results from this means the app needs to restart for locale changes to take effect.
//so be careful with where you're calling this, never assign its result to a static value (including enum variables) //so be careful with where you're calling this, never assign its result to a static value (including enum variables)
public static String get(Object o, String k){ public static String get(Object o, String k, Object...args){
return get(o.getClass(), k); return get(o.getClass(), k, args);
} }
public static String get(Class c, String k){ public static String get(Class c, String k, Object...args){
String key; String key;
if (c != null){ if (c != null){
key = c.getName().replace("com.shatteredpixel.shatteredpixeldungeon.", ""); key = c.getName().replace("com.shatteredpixel.shatteredpixeldungeon.", "");
key += "." + k; key += "." + k;
} else } else
key = k; key = k;
return strings.getString(key.toLowerCase()); if (args.length > 0) return String.format(Locale.ENGLISH, strings.getString(key.toLowerCase()), args);
else return strings.getString(key.toLowerCase());
} }
} }

View File

@ -12,7 +12,100 @@ actors.blobs.waterofhealth.desc=Power of health radiates from the water of this
actors.blobs.wateroftransmutation.desc=Power of change radiates from the water of this well. Throw an item into the well to turn it into something else. actors.blobs.wateroftransmutation.desc=Power of change radiates from the water of this well. Throw an item into the well to turn it into something else.
actors.blobs.web.desc=Everything is covered with a thick web here. actors.blobs.web.desc=Everything is covered with a thick web here.
actors.buffs.amok.name=Amok
actors.buffs.amok.desc=Amok causes a state of great rage and confusion in its target.\n\nWhen a creature is amoked, they will attack whatever is near them, whether they be friend or foe.\n\nThe amok will last for %s.
actors.buffs.barkskin.name=Barkskin
actors.buffs.barkskin.desc=Your skin is hardened, it feels rough and solid like bark.\n\nThe hardened skin increases your effective armor, allowing you to better defend against physical attack. The armor bonus will decrease by one point each turn until it expires.\n\nYour armor is currently increased by %d.
actors.buffs.bleeding.name=Bleeding
actors.buffs.bleeding.ondeath=You bled to death...
actors.buffs.bleeding.desc=That wound is leaking a worrisome amount of blood.\n\nBleeding causes damage every turn. Each turn the damage decreases by a random amount, until the bleeding eventually stops.\n\nThe bleeding can currently deal %d max damage.
actors.buffs.bless.name=Blessed
actors.buffs.bless.desc=A great burst of focus, some say it is inspired by the gods.\n\nBlessing significantly increases accuracy and evasion, making the blessed much more effective in combat.\n\nThis blessing will last for %s.
actors.buffs.blindness.name=Blinded
actors.buffs.blindness.desc=Blinding turns the surrounding world into a dark haze.\n\nWhile blinded, a character can't see more than one tile infront of themselves, rendering ranged attacks useless and making it very easy to lose track of distant enemies. Additionally, a blinded hero is unable to read scrolls or books.\n\nThe blindness will last for %s.
actors.buffs.buff.1moreturn=1 more turn
actors.buffs.buff.#moreturns=%s more turns
actors.buffs.burning.name=Burning
actors.buffs.burning.desc=Few things are more distressing than being engulfed in flames.\n\nFire will deal damage every turn until it is put out by water, expires, or it is resisted.Fire can be extinquished by stepping into water, or from the splash of a shattering potion.\n\nAdditionally, the fire may ignite flammable terrain or items that it comes into contact with.\n\nThe burning will last for %s, or until it is resisted or extinquished.
actors.buffs.charm.name=Charmed
actors.buffs.charm.desc=A charm is manipulative magic that can make enemies temporarily adore eachother.\n\nCharacters affected by charm are unable to directly attack the enemy they are charmed by. Attacking other targets is still possible however.\n\nThe charm will last for %s.
actors.buffs.chill.name=Chilled
actors.buffs.chill.desc=Not quite frozen, but still much too cold.\n\nChilled targets perform all actions more slowly, depending on how many turns are left in the effect. At it's worst, this is equivalent to being slowed.\n\nThis chill will last for %s, and is currently reducing speed by %s%%
actors.buffs.combo.name=Combo
actors.buffs.combo.combo=%d hit combo!
actors.buffs.combo.desc="Through building momentum, the gladiator deals bonus damage.\n\nYour combo will keep building with quick attacks that do not miss. The higher your combo gets, the faster your attacks will need to be. failing to land a hit quickly enough will reset the combo.\n\n"
actors.buffs.combo.notenough=Your combo has not built up enough to give you bonus damage yet.
actors.buffs.combo.bonusdmg=Your combo is currently giving you %f%% bonus damage.
actors.buffs.corruption.name=Corrupted
actors.buffs.corruption.desc=Corruption seeps into the essence of a being, twisting them against their former nature.\n\nCorrupted creatures will attack and aggravate their allies, and ignore their former enemies. Corruption is damaging as well, and will slowly cause its target to succumb.\n\nCorruption is permanent, its effects only end in death.
actors.buffs.cripple.name=Crippled
actors.buffs.cripple.desc=You're pretty sure legs aren't meant to bend that way.\n\nCrippled halves movement speed, making moving a tile usually take two turns instead of one.\n\nThis cripple will last for %s.
actors.buffs.drowsy.name=Drowsy
actors.buffs.drowsy.desc=A magical force is making it difficult to stay awake.\n\nThe hero can resist drowsiness by taking damage or by being at full health.\n\nAfter %s, the target will fall into a deep magical sleep.
actors.buffs.earthimbue.name=Imbued with Earth
actors.buffs.earthimbue.desc=You are inbued with the power of earth!\n\nAll physical attacks will command roots to lock the enemy in place while the effect lasts.\n\nYou are imbued for %s.
actors.buffs.fireimbue.name=Imbued with Fire
actors.buffs.fireimbue.desc=You are imbued with the power of fire!\n\nAll physical attacks will have a chance to light enemies ablaze. Additionally, you are completely immune to the effects of fire.\n\nYou are imbued for %s.
actors.buffs.frost.name=Frozen
actors.buffs.frost.desc=Not to be confused with freezing solid, this more benign freezing simply encases the target in ice.\n\nFreezing acts similarly to paralysis, making it impossible for the target to act. Unlike paralysis, freezing is immediately cancelled if the target takes damage, as the ice will shatter.\n\nThe freeze will last for %s, or until the target takes damage.
actors.buffs.fury.name=Furious
actors.buffs.fury.desc=You are angry, enemies won't like you when you're angry.\n\nA great rage burns within you, increasing the damage you deal with physical attacks by 50%.\n\nThis rage will last as long as you are injured below 50% health.
actors.buffs.gasesimmunity.name=Immune to gases
actors.buffs.gasesimmunity.desc=Some strange force is filtering out the air around you, it's not causing you any harm, but it blocks out everything but air so effectively you can't even smell anything!\n\n"You are immune to the effects of all gasses while this buff lasts.\n\nYou will be immune for %s.
actors.buffs.hunger.hungry=Hungry
actors.buffs.hunger.starving=Starving
actors.buffs.hunger.onhungry=You are hungry.
actors.buffs.hunger.onstarving=You are starving!
actors.buffs.hunger.ondeath=You starved to death...
actors.buffs.hunger.cursedhorn=The cursed horn steals some of the food energy as you eat.
actors.buffs.hunger.desc_intro_hungry=You can feel your stomach calling out for food, but it's not too urgent yet.\n\n
actors.buffs.hunger.desc_intro_starving=You're so hungry it hurts.\n\n
actors.buffs.hunger.desc=Hunger slowly increases as you spend time in the dungeon, eventually you will begin to starve. While starving you will slowly lose health instead of regenerating it.\n\nRationing is important! If you have health to spare starving isn't a bad idea if it means there will be more food later. Effective rationing can make food last a lot longer!
actors.buffs.invisibility.name=Invisible
actors.buffs.invisibility.desc=You are completely blended into the surrounding terrain, making you impossible to see.\n\nWhile you are invisible enemies are unable to attack or follow you. Physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility.\n\nThis invisibility will last for %s.
actors.buffs.levitation.name=Levitating
actors.buffs.levitation.desc=A magical force is levitating you over the ground, making you feel weightless.\n\nWhile levitating you ignore all ground-based effects. Traps won't trigger, water won't put out fire, plants won't be trampled, roots will miss you, and you will hover right over pits. Be careful, as all these things can come into effect the second the levitation ends!\n\nYou are levitating for %s.
actors.buffs.light.name=Illuminated
actors.buffs.light.desc=Even in the Darkest Dungeon, a steady light at your side is always comforting.\n\nLight helps keep darkness at bay, allowing you to see a reasonable distance despite the environment.\n\nThe light will last for %s.
actors.buffs.lockedfloor.name=Floor is Locked
actors.buffs.lockedfloor.desc=The current floor is locked, and you are unable to leave it!\n\nWhile a floor is locked, you will not gain hunger or take damage from starving. In addition, if you do not work towards defeating this floor's boss, passive regeneration effects will also stop.\n\nAdditionally, if you are revived by an unblessed ankh while the floor is locked, then it will reset.\n\nKill this floor's boss to break the lock.
actors.buffs.magicalsleep.name=Magical Sleep
actors.buffs.magicalsleep.toohealthy=You are too healthy, and resist the urge to sleep.
actors.buffs.magicalsleep.fallasleep=You fall into a deep magical sleep.
actors.buffs.magicalsleep.wakeup=You wake up feeling refreshed and healthy.
actors.buffs.magicalsleep.desc=This character has fallen into a deep magical sleep which they will not wake from naturally.\n\nMagical sleep is similar to regular sleep, except that only damage will cause the target to wake up.\n\nFor the hero, magical sleep has some restorative properties, allowing them to rapidly heal while resting.
actors.buffs.mindvision.name=Mind vision
actors.buffs.mindvision.desc=Somehow you are able to see all creatures on this floor through your mind. It's a weird feeling.\n\nAll characters on this floor are visible to you as long as you have mind vision. Seeing a creature through mind vision counts as it being seen or nearby for the purposes of many magical effects.\n\nThe mind vision will last for %s.
actors.buffs.ooze.name=Caustic ooze
actors.buffs.ooze.ondeath=You melt away...
actors.buffs.ooze.desc=This sticky acid clings to flesh, slowly melting it away.\n\nOoze will deal consistent damage until it is washed off in water.\n\nOoze does not expire on its own and must be removed with water.
actors.buffs.paralysis.name=Paralysed
actors.buffs.paralysis.desc=Oftentimes the worst thing to do is nothing at all.\n\nParalysis completely halts all actions, forcing the target to wait until the effect wears off. The pain from taking damage can also cause characters to snap out of paralysis.\n\nThis paralysis will last for %s, or until it is resisted through pain.
actors.buffs.poison.name=Poisoned
actors.buffs.poison.ondeath=You died from poison...
actors.buffs.poison.desc=Poison works its way through the body, slowly impairing its internal functioning.\n\nPoison deals damage each turn proportional to how long until it expires.\n\nThis poison will last for %s.
actors.buffs.recharging.name=Recharging
actors.buffs.recharging.desc=Energy is coursing through you, improving the rate that your wands and staffs charge.\n\nEach turn this buff will increase current charge by one quarter, in addition to regular recharge.\n\nThe recharging will last for %s.
actors.buffs.roots.name=Rooted
actors.buffs.roots.desc=Roots(magical or natural) grab at the feet, forcing them down to the ground.\n\nRoots lock a target in place, making it impossible for them to move, but other actions are not affected.\n\nThe roots will last for %s.
actors.buffs.shadows.name=Shadowmelded
actors.buffs.shadows.desc=You are blended into the shadows around you, granting you invisibility and slowing your metabolism.\n\nWhile you are invisible enemies are unable to attack or follow you. Most physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility. Additionally, while shadowmelded, your rate of hunger is slowed.\n\nYou will remain shadowmelded until you leave the shadows or an enemy comes into contact with you.
actors.buffs.slow.name=Slowed
actors.buffs.slow.desc=Slowing magic affects the target's rate of time, to them everything is moving super-fast.\n\nA slowed character performs all actions in twice the amount of time they would normally take.\n\nThis slow will last for %s.
actors.buffs.snipersmark.name=Sniper's mark
actors.buffs.snipersmark.desc=The sniper is honed in on a nearby target, gaining increased attack speed and armor penetration while attacking it.\n\nThe sniper will remain honed in until she switches targets, stops attacking, or the target dies.
actors.buffs.soulmark.name=Soul Marked
actors.buffs.soulmark.desc=The warlock has tapped into the soul of this creature. He will heal and satisfy his hunger as it takes physical damage.\n\nThis mark will last for %s.
actors.buffs.terror.name=Terrified
actors.buffs.terror.desc=Terror is manipulative magic which forces its target into an uncontrollable panic.\n\nTerrified characters are forced to run away from their opponent, trying to put as many doors and walls between them as possible. The shock of pain is enough to break this effect, however.\n\nThis terror will last for %s, or until the target takes damage.
actors.buffs.toxicimbue.name=Imbued with Toxicity
actors.buffs.toxicimbue.desc=You are imbued with poisonous energy!\n\nAs you move around toxic gas will constantly billow forth from you, damaging your enemies. You are immune to toxic gas and poison for the duration of the effect.\n\nYou are imbued for %s.
actors.buffs.venom.name=Venomed
actors.buffs.venom.desc=Venom is a extremely caustic and dangerous poison.\n\nUnlike poison, whose damage lowers over time, venom does increasing damage the longer it stays on a target.\n\nThis venom will last for %s, and is currently dealing %d damage.
actors.buffs.vertigo.name=Vertigo
actors.buffs.vertigo.desc=Walking in a straight line can be difficult when the whole world is spinning.\n\nWhile under the effects of vertigo, characters who attempt to move will go in a random direction, instead of the one they intended to go in.\n\nThis Vertigo effect with last for %s.
actors.buffs.weakness.name=Weakened
actors.buffs.weakness.desc=Your gear suddenly feels a lot heavier.\n\nWeakening magic is affecting you, reducing your effective strength by 2 points.\n\nThis weakness will last for %s.
actors.hero.hero.leave=One does not simply leave Pixel Dungeon. actors.hero.hero.leave=One does not simply leave Pixel Dungeon.
actors.hero.hero.level_up=level up! actors.hero.hero.level_up=level up!
@ -74,4 +167,4 @@ actors.hero.herosubclass.sniper_desc=The _Sniper_ is able to detect weak points
actors.hero.herosubclass.warden=warden actors.hero.herosubclass.warden=warden
actors.hero.herosubclass.warden_desc=Having a strong connection with forces of nature allows the _Warden_ to gain additional health from dew, armor from trampling grass, and seeds and dew from plants. actors.hero.herosubclass.warden_desc=Having a strong connection with forces of nature allows the _Warden_ to gain additional health from dew, armor from trampling grass, and seeds and dew from plants.
items.bags.bag.name=backpack items.bags.bag.name=backpack