From 5dcabd4e5014de1d8aac8418096106e612590601 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 25 Jan 2026 11:31:04 -0500 Subject: [PATCH 01/21] v3.3.5: added a new emoicon for investigating and improved emoicon code --- core/src/main/assets/interfaces/icons.png | Bin 16666 -> 16721 bytes .../effects/EmoIcon.java | 65 +++++++++++++++--- .../sprites/CharSprite.java | 21 ++++++ .../shatteredpixeldungeon/ui/Icons.java | 10 ++- 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/core/src/main/assets/interfaces/icons.png b/core/src/main/assets/interfaces/icons.png index 1674bbe59269bbe66090bb62d46cebe491465ac3..0a2776196e60544d1e978d62fc6e16be380af6ef 100644 GIT binary patch literal 16721 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 literal 16666 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 YU(66+8@>a Date: Sun, 25 Jan 2026 12:47:26 -0500 Subject: [PATCH 02/21] v3.3.5: fixed unequipping armor leading to a full shield CD refund. --- .../shatteredpixeldungeon/items/BrokenSeal.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java index 52c62dddf..be31f8b39 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java @@ -256,6 +256,7 @@ public class BrokenSeal extends Item { private int cooldown = 0; private float turnsSinceEnemies = 0; + private int initialShield = 0; private static int COOLDOWN_START = 150; @@ -281,7 +282,7 @@ public class BrokenSeal extends Item { @Override public float iconFadePercent() { if (shielding() > 0){ - return GameMath.gate(0, 1f - shielding()/(float)maxShield(), 1); + return GameMath.gate(0, 1f - shielding()/(float)initialShield, 1); } else if (coolingDown()){ return GameMath.gate(0, cooldown / (float)COOLDOWN_START, 1); } else if (cooldown < 0) { @@ -324,7 +325,7 @@ public class BrokenSeal extends Item { turnsSinceEnemies += HoldFast.buffDecayFactor(target); if (turnsSinceEnemies >= 5){ if (cooldown > 0) { - float percentLeft = shielding() / (float)maxShield(); + float percentLeft = shielding() / (float)initialShield; //max of 50% cooldown refund cooldown = Math.max(0, (int)(cooldown - COOLDOWN_START * (percentLeft / 2f))); } @@ -347,6 +348,7 @@ public class BrokenSeal extends Item { incShield(maxShield()); cooldown = Math.max(0, cooldown+COOLDOWN_START); turnsSinceEnemies = 0; + initialShield = maxShield(); } public boolean coolingDown(){ @@ -377,12 +379,14 @@ public class BrokenSeal extends Item { public static final String COOLDOWN = "cooldown"; public static final String TURNS_SINCE_ENEMIES = "turns_since_enemies"; + public static final String INITIAL_SHIELD = "initial_shield"; @Override public void storeInBundle(Bundle bundle) { super.storeInBundle(bundle); bundle.put(COOLDOWN, cooldown); bundle.put(TURNS_SINCE_ENEMIES, turnsSinceEnemies); + bundle.put(INITIAL_SHIELD, initialShield); } @Override @@ -391,10 +395,12 @@ public class BrokenSeal extends Item { if (bundle.contains(COOLDOWN)) { cooldown = bundle.getInt(COOLDOWN); turnsSinceEnemies = bundle.getFloat(TURNS_SINCE_ENEMIES); + initialShield = bundle.getInt(INITIAL_SHIELD); //if we have shield from pre-3.1, have it last a bit } else if (shielding() > 0) { turnsSinceEnemies = -100; + initialShield = shielding(); } } } From 59cef5cbcb8fea031121ebe4fa58147725f1e9b3 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 13:40:14 -0500 Subject: [PATCH 03/21] v3.3.5: fixed distortion traps not possibly spawning all rare mob alts --- .../actors/mobs/MobSpawner.java | 42 +++++++++++-------- .../levels/traps/DistortionTrap.java | 9 +--- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java index 651c154a0..a084faea0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/MobSpawner.java @@ -28,6 +28,7 @@ import com.watabou.utils.Random; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; public class MobSpawner extends Actor { { @@ -245,24 +246,31 @@ public class MobSpawner extends Actor { for (int i = 0; i < rotation.size(); i++) { if (Random.Float() < altChance) { Class cl = rotation.get(i); - if (cl == Rat.class) cl = Albino.class; - else if (cl == Gnoll.class) cl = GnollExile.class; - else if (cl == Crab.class) cl = HermitCrab.class; - else if (cl == Slime.class) cl = CausticSlime.class; - - else if (cl == Thief.class) cl = Bandit.class; - else if (cl == Necromancer.class) cl = SpectralNecromancer.class; - - else if (cl == Brute.class) cl = ArmoredBrute.class; - else if (cl == DM200.class) cl = DM201.class; - - else if (cl == Monk.class) cl = Senior.class; - //chaos elemental spawning happens in Elemental.Random - - else if (cl == Scorpio.class) cl = Acidic.class; - - rotation.set(i, cl); + Class alt = RARE_ALTS.get(cl); + if (alt != null) { + rotation.set(i, cl); + } } } } + + public static final HashMap, Class> RARE_ALTS = new HashMap<>(); + static { + RARE_ALTS.put(Rat.class, Albino.class); + RARE_ALTS.put(Gnoll.class, GnollExile.class); + RARE_ALTS.put(Crab.class, HermitCrab.class); + RARE_ALTS.put(Slime.class, CausticSlime.class); + + RARE_ALTS.put(Thief.class, Bandit.class); + RARE_ALTS.put(Necromancer.class, SpectralNecromancer.class); + + RARE_ALTS.put(Brute.class, ArmoredBrute.class); + RARE_ALTS.put(DM200.class, DM201.class); + + RARE_ALTS.put(Monk.class, Senior.class); + //swapping to chaos elemental actually happens in Elemental.random + RARE_ALTS.put(Elemental.class, Elemental.ChaosElemental.class); + + RARE_ALTS.put(Scorpio.class, Acidic.class); + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java index ea2a87311..cbce0958b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/traps/DistortionTrap.java @@ -59,13 +59,6 @@ public class DistortionTrap extends Trap{ shape = LARGE_DOT; } - private static final ArrayList> RARE = new ArrayList<>(Arrays.asList( - Albino.class, CausticSlime.class, - Bandit.class, - ArmoredBrute.class, DM201.class, - Elemental.ChaosElemental.class, Senior.class, - Acidic.class)); - @Override public void activate() { @@ -134,7 +127,7 @@ public class DistortionTrap extends Trap{ } break; case 4: - mob = Reflection.newInstance(Random.element(RARE)); + mob = Reflection.newInstance(Random.element(MobSpawner.RARE_ALTS.values())); break; } From 4bfa8e738c9698b7fbc2d1f097261ac3a7f1f965 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 14:14:07 -0500 Subject: [PATCH 04/21] v3.3.5: made vault cross room door placement more permissive --- .../levels/rooms/quest/vault/VaultCrossRoom.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultCrossRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultCrossRoom.java index b089cb8c8..8d4c5a9a0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultCrossRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultCrossRoom.java @@ -38,6 +38,6 @@ public class VaultCrossRoom extends StandardRoom { @Override public boolean canConnect(Point p) { Point c = center(); - return (c.x == p.x || c.y == p.y) && super.canConnect(p); + return (Math.abs(c.x - p.x) <= 1 || Math.abs(c.y - p.y) <= 1) && super.canConnect(p); } } From 679c2c210b848930c32347f79e782d486f613c79 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 14:17:37 -0500 Subject: [PATCH 05/21] v3.3.5: added a check to grid builder in case it can't place rooms --- .../levels/builders/GridBuilder.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java index 346836cdb..debb4cd90 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/GridBuilder.java @@ -78,7 +78,8 @@ public class GridBuilder extends Builder { //this effectively puts a limit of -99 < x < 999 and -99 < y < inf. on level sizes in rooms SparseArray gridCells = new SparseArray<>(); gridCells.put(100_100, entrance); - for (Room r : toPlace){ + while (!toPlace.isEmpty()) { + Room r = toPlace.remove(0); int cellWidth = 1; int cellHeight = 1; //TODO this works on rigid multiples atm, would be nicer to buffer rooms that don't work on that @@ -98,8 +99,14 @@ public class GridBuilder extends Builder { cellWidth = cellHeight = 2; } } + int tries = 0; do { r.neigbours.clear(); + tries++; + if (tries > 30) { + toPlace.add(r); //can't place for now, put it into the back of to place list + break; + } int[] keys = gridCells.keyArray(); int nIdx = keys[Random.Int(keys.length)]; Room n = gridCells.get(nIdx, null); From 6d640324c13f913f57bc92a540376e7ec00fee6f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 26 Jan 2026 14:25:47 -0500 Subject: [PATCH 06/21] v3.3.5: added a safety check to new save windows logic --- .../shatteredpixeldungeon/scenes/GameScene.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index f256edb08..f6e6fd032 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -1593,7 +1593,7 @@ public class GameScene extends PixelScene { @Override public synchronized void saveWindows() { super.saveWindows(); - if (scene.inventory != null && scene.inventory.getSelector() != null){ + if (scene != null && scene.inventory != null && scene.inventory.getSelector() != null){ savedSelector = scene.inventory.getSelector(); } else { for (Gizmo g : members.toArray(new Gizmo[0])){ @@ -1613,7 +1613,7 @@ public class GameScene extends PixelScene { public synchronized void restoreWindows() { super.restoreWindows(); if (savedSelector != null){ - if (scene.inventory != null){ + if (scene != null && scene.inventory != null){ scene.inventory.setSelector(savedSelector); } else { addToFront(new WndBag(Dungeon.hero.belongings.backpack, savedSelector)); From 5a6083a70b47577e83e2aba21ce5e4be734a48bf Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 29 Jan 2026 14:33:57 -0500 Subject: [PATCH 07/21] v3.3.5: implemented base investigating state for all mobs --- .../actors/mobs/Mob.java | 63 ++++++++++++++++--- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 49c898aee..7bbf2c88b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -111,6 +111,7 @@ public abstract class Mob extends Char { public AiState SLEEPING = new Sleeping(); public AiState HUNTING = new Hunting(); + public AiState INVESTIGATING= new Investigating(); public AiState WANDERING = new Wandering(); public AiState FLEEING = new Fleeing(); public AiState PASSIVE = new Passive(); @@ -159,6 +160,8 @@ public abstract class Mob extends Char { bundle.put( STATE, Sleeping.TAG ); } else if (state == WANDERING) { bundle.put( STATE, Wandering.TAG ); + } else if (state == INVESTIGATING) { + bundle.put( STATE, Investigating.TAG ); } else if (state == HUNTING) { bundle.put( STATE, Hunting.TAG ); } else if (state == FLEEING) { @@ -185,6 +188,8 @@ public abstract class Mob extends Char { this.state = SLEEPING; } else if (state.equals( Wandering.TAG )) { this.state = WANDERING; + } else if (state.equals( Investigating.TAG )) { + this.state = INVESTIGATING; } else if (state.equals( Hunting.TAG )) { this.state = HUNTING; } else if (state.equals( Fleeing.TAG )) { @@ -229,6 +234,7 @@ public abstract class Mob extends Char { } else { sprite.hideAlert(); sprite.hideLost(); + sprite.hideInvestigate(); } if (paralysed > 0) { @@ -1085,29 +1091,31 @@ public abstract class Mob extends Char { //can be awoken by the least stealthy hostile present, not necessarily just our target if (enemyInFOV || (enemy != null && enemy.invisible > 0)) { - float closestHostileDist = Float.POSITIVE_INFINITY; + float highestChance = Float.POSITIVE_INFINITY; + Char closestHostile = null; for (Char ch : Actor.chars()){ if (fieldOfView[ch.pos] && ch.invisible == 0 && ch.alignment != alignment && ch.alignment != Alignment.NEUTRAL){ - float chDist = ch.stealth() + distance(ch); + float bestChance = detectionChance(ch); //silent steps rogue talent, which also applies to rogue's shadow clone if ((ch instanceof Hero || ch instanceof ShadowClone.ShadowAlly) && Dungeon.hero.hasTalent(Talent.SILENT_STEPS)){ if (distance(ch) >= 4 - Dungeon.hero.pointsInTalent(Talent.SILENT_STEPS)) { - chDist = Float.POSITIVE_INFINITY; + bestChance = Float.POSITIVE_INFINITY; } } //flying characters are naturally stealthy if (ch.flying && distance(ch) >= 2){ - chDist = Float.POSITIVE_INFINITY; + bestChance = Float.POSITIVE_INFINITY; } - if (chDist < closestHostileDist){ - closestHostileDist = chDist; + if (bestChance < highestChance){ + highestChance = bestChance; + closestHostile = ch; } } } - if (Random.Float( closestHostileDist ) < 1) { + if (closestHostile != null && Random.Float() < detectionChance(closestHostile)) { awaken(enemyInFOV); if (state == SLEEPING){ spend(TICK); //wait if we can't wake up for some reason @@ -1123,6 +1131,11 @@ public abstract class Mob extends Char { return true; } + //chance is 1 in (distance + stealth) + protected float detectionChance( Char enemy ){ + return 1 / (distance( enemy ) + enemy.stealth()); + } + protected void awaken( boolean enemyInFOV ){ if (enemyInFOV) { enemySeen = true; @@ -1154,7 +1167,7 @@ public abstract class Mob extends Char { @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { - if (enemyInFOV && (justAlerted || Random.Float( distance( enemy ) / 2f + enemy.stealth() ) < 1)) { + if (enemyInFOV && (justAlerted || Random.Float() < detectionChance(enemy))) { return noticeEnemy(); @@ -1164,7 +1177,12 @@ public abstract class Mob extends Char { } } - + + //chance is 1 in (distance/2 + stealth) + protected float detectionChance( Char enemy ){ + return 1 / (distance( enemy ) / 2f + enemy.stealth()); + } + protected boolean noticeEnemy(){ enemySeen = true; @@ -1299,6 +1317,33 @@ public abstract class Mob extends Char { } } + //essentially a more aggressive version of wandering, where target pos is updated like hunting + //not currently used directly by mobs outside of the vault, which also add more behaviour here + protected class Investigating extends Wandering { + + public static final String TAG = "INVESTIGATING"; + + @Override + public boolean act(boolean enemyInFOV, boolean justAlerted) { + if (enemyInFOV){ + target = enemy.pos; + } else { + //we lose our target BEFORE reaching their last known position + if (Dungeon.level.distance(pos, target) <= 1){ + sprite.showLost(); + state = WANDERING; + target = ((Mob.Wandering)WANDERING).randomDestination(); + spend( TICK ); + return true; + } + } + return super.act(enemyInFOV, justAlerted); + } + + //same detection chance as wandering + + } + protected class Fleeing implements AiState { public static final String TAG = "FLEEING"; From f325c9c5571243ea2c1c1c5e446ad19763f99137 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 30 Jan 2026 17:13:32 -0500 Subject: [PATCH 08/21] v3.3.5: very early vault mob impl, only some code in place. --- .../main/java/com/watabou/utils/PointF.java | 4 + .../actors/mobs/VaultMob.java | 140 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java diff --git a/SPD-classes/src/main/java/com/watabou/utils/PointF.java b/SPD-classes/src/main/java/com/watabou/utils/PointF.java index f5352412a..b1d5654fe 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/PointF.java +++ b/SPD-classes/src/main/java/com/watabou/utils/PointF.java @@ -151,6 +151,10 @@ public class PointF { return (float)Math.atan2( end.y - start.y, end.x - start.x ); } + public static float angle( Point start, Point end ) { + return (float)Math.atan2( end.y - start.y, end.x - start.x ); + } + @Override public boolean equals(Object o) { if (super.equals(o)) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java new file mode 100644 index 000000000..424c2d429 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java @@ -0,0 +1,140 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.watabou.utils.Bundle; +import com.watabou.utils.PointF; + +public class VaultMob extends Mob { + + { + WANDERING = new Wandering(); + INVESTIGATING = new Investigating(); + SLEEPING = new Sleeping(); + + state = SLEEPING; + } + + //used to track + private int previousPos; + + @Override + public void move(int step, boolean travelling) { + previousPos = pos; + super.move(step, travelling); + } + + private static final String PREV_POS = "prev_pos"; + private static final String INVEST_TURNS = "invest_turns"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put(PREV_POS, previousPos); + bundle.put(INVEST_TURNS, investigatingTurns); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + previousPos = bundle.getInt(PREV_POS); + investigatingTurns = bundle.getInt(INVEST_TURNS); + } + + private int investigatingTurns; + + public class Investigating extends Mob.Investigating { + + @Override + public boolean act(boolean enemyInFOV, boolean justAlerted) { + if (enemyInFOV){ + investigatingTurns++; + } else { + investigatingTurns = 0; + } + return super.act(enemyInFOV, justAlerted); + } + + @Override + //TODO balance this + //chance is 1 in (distance/2 + stealth) as base, but reduced if enemy was only just seen + protected float detectionChance( Char enemy ){ + float chance = 1 / (distance( enemy ) / 2f + enemy.stealth()); + if (investigatingTurns == 1 && chance <= 1){ + chance -= 0.33f; + } + return chance; + } + } + + public class Wandering extends Mob.Wandering { + + @Override + public boolean act(boolean enemyInFOV, boolean justAlerted) { + return super.act(enemyInFOV, justAlerted); + } + + @Override + protected float detectionChance( Char enemy ){ + //defaults to 1 in (distance + stealth) (classic sleeping detection) + if (!Dungeon.level.adjacent(pos, previousPos)){ + return 1 / (distance( enemy ) + enemy.stealth()); + } + + float movementDir = PointF.angle(Dungeon.level.cellToPoint(previousPos), Dungeon.level.cellToPoint(pos))/PointF.G2R;; + float enemyDir = PointF.angle(Dungeon.level.cellToPoint(pos), Dungeon.level.cellToPoint(enemy.pos))/PointF.G2R; + //classic wandering detection if enemy is within a 90 degree cone of vision + if (Math.abs(enemyDir - movementDir) <= 45f){ + return 1 / (distance( enemy ) / 2f + enemy.stealth()); + //classic sleeping (i.e. default) detection if enemy is within a 170 degree vision cone + } else if (Math.abs(enemyDir - movementDir) <= 85f){ + return 1 / (distance( enemy ) + enemy.stealth()); + //otherwise uses very low chance detection (1/8 at 2 tiles, 0% at 3+) + } else { + float chance = 1 / (float)Math.pow((distance( enemy ) + enemy.stealth()), 3); + if (chance < 0.1f){ + return 0; + } else { + return chance; + } + } + } + + @Override + protected boolean noticeEnemy() { + super.noticeEnemy(); + alerted = false; + state = INVESTIGATING; + investigatingTurns = 0; + sprite.showInvestigate(); + spend(TICK); + return true; + } + } + + public class Sleeping extends Mob.Sleeping{ + + protected void awaken(boolean enemyInFOV) { + super.awaken(enemyInFOV); + if (state == HUNTING){ + alerted = false; + state = INVESTIGATING; + investigatingTurns = 0; + sprite.showInvestigate(); + } + } + + //chance is 1 in (distance + stealth)^2 + //set to 0 if below 10% (usually happens at 4+ distance) + @Override + protected float detectionChance( Char enemy ){ + float chance = 1 / (float)Math.pow((distance( enemy ) + enemy.stealth()), 2); + if (chance < 0.1f){ + return 0; + } else { + return chance; + } + } + } + +} From 09f492d5da97534705f8ae20fcd291f0b4989096 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 1 Feb 2026 14:16:40 -0500 Subject: [PATCH 09/21] v3.3.5: more implementation on vault mobs --- .../actors/mobs/VaultMob.java | 73 +++++++++++++++++-- .../items/wands/WandOfBlastWave.java | 7 ++ 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java index 424c2d429..782753404 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java @@ -2,6 +2,9 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave; import com.watabou.utils.Bundle; import com.watabou.utils.PointF; @@ -15,23 +18,38 @@ public class VaultMob extends Mob { state = SLEEPING; } - //used to track - private int previousPos; + //used to track movement direction for wandering detection angles + private int previousPos = -1; @Override public void move(int step, boolean travelling) { previousPos = pos; super.move(step, travelling); + if (travelling && !sprite.visible && Dungeon.level.distance(pos, Dungeon.hero.pos) <= 6){ + if (state == HUNTING){ + WandOfBlastWave.BlastWave.blast(pos, 1.5f, 0xFF0000); + } else if (state == INVESTIGATING){ + WandOfBlastWave.BlastWave.blast(pos, 1.5f, 0xFF8800); + } else { + WandOfBlastWave.BlastWave.blast(pos, 1.5f); + } + } } private static final String PREV_POS = "prev_pos"; private static final String INVEST_TURNS = "invest_turns"; + private static final String WANDER_POSITIONS = "wander_positions"; + private static final String WANDER_POS_IDX = "wander_pos_idx"; @Override public void storeInBundle(Bundle bundle) { super.storeInBundle(bundle); bundle.put(PREV_POS, previousPos); bundle.put(INVEST_TURNS, investigatingTurns); + if (wanderPositions != null) { + bundle.put(WANDER_POSITIONS, wanderPositions); + bundle.put(WANDER_POS_IDX, wanderPosIdx); + } } @Override @@ -39,8 +57,13 @@ public class VaultMob extends Mob { super.restoreFromBundle(bundle); previousPos = bundle.getInt(PREV_POS); investigatingTurns = bundle.getInt(INVEST_TURNS); + if (bundle.contains(WANDER_POSITIONS)) { + wanderPositions = bundle.getIntArray(WANDER_POSITIONS); + wanderPosIdx = bundle.getInt(WANDER_POS_IDX); + } } + //detection chance is lower on the first turn of investigating private int investigatingTurns; public class Investigating extends Mob.Investigating { @@ -67,6 +90,9 @@ public class VaultMob extends Mob { } } + public int wanderPosIdx = 0; + public int[] wanderPositions; + public class Wandering extends Mob.Wandering { @Override @@ -83,11 +109,11 @@ public class VaultMob extends Mob { float movementDir = PointF.angle(Dungeon.level.cellToPoint(previousPos), Dungeon.level.cellToPoint(pos))/PointF.G2R;; float enemyDir = PointF.angle(Dungeon.level.cellToPoint(pos), Dungeon.level.cellToPoint(enemy.pos))/PointF.G2R; - //classic wandering detection if enemy is within a 90 degree cone of vision + //classic wandering detection if enemy is within (or touching) a 90 degree cone of vision if (Math.abs(enemyDir - movementDir) <= 45f){ return 1 / (distance( enemy ) / 2f + enemy.stealth()); - //classic sleeping (i.e. default) detection if enemy is within a 170 degree vision cone - } else if (Math.abs(enemyDir - movementDir) <= 85f){ + //classic sleeping (i.e. default) detection if enemy is within a 180 degree vision cone + } else if (Math.abs(enemyDir - movementDir) < 90f){ return 1 / (distance( enemy ) + enemy.stealth()); //otherwise uses very low chance detection (1/8 at 2 tiles, 0% at 3+) } else { @@ -108,19 +134,56 @@ public class VaultMob extends Mob { investigatingTurns = 0; sprite.showInvestigate(); spend(TICK); + //hero must know if they are detected + if (!Dungeon.level.heroFOV[pos]){ + Buff.affect(Dungeon.hero, TalismanOfForesight.CharAwareness.class, 1f).charID = id(); + } return true; } + + @Override + protected int randomDestination() { + //stay still by default if given no other wandering behaviour + if (wanderPositions == null){ + wanderPositions = new int[1]; + wanderPositions[0] = pos; + } + + int wanderPos = wanderPositions[wanderPosIdx]; + if (wanderPos == pos) { + if (wanderPositions.length > 1) { + wanderPosIdx++; + if (wanderPosIdx == wanderPositions.length) { + wanderPosIdx = 0; + } + wanderPos = wanderPositions[wanderPosIdx]; + } else { + //reset this, representing the mob looking around in place + previousPos = pos; + } + } + return wanderPos; + } } public class Sleeping extends Mob.Sleeping{ protected void awaken(boolean enemyInFOV) { super.awaken(enemyInFOV); + //stay still by default if given no other wandering behaviour + if (wanderPositions == null){ + wanderPositions = new int[1]; + wanderPositions[0] = pos; + } if (state == HUNTING){ alerted = false; state = INVESTIGATING; investigatingTurns = 0; sprite.showInvestigate(); + //hero must know if they are detected + if (!Dungeon.level.heroFOV[pos]){ + Buff.affect(Dungeon.hero, TalismanOfForesight.CharAwareness.class, 1f).charID = id(); + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index 90c9f5d1f..655038582 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -273,10 +273,17 @@ public class WandOfBlastWave extends DamageWand { } public static void blast(int pos, float radius) { + blast(pos, radius, -1); + } + + public static void blast(int pos, float radius, int hardLight){ Group parent = Dungeon.hero.sprite.parent; BlastWave b = (BlastWave) parent.recycle(BlastWave.class); parent.bringToFront(b); b.reset(pos, radius); + if (hardLight != -1){ + b.hardlight(hardLight); + } } } From d6da70eca394df47d403fcd06204e5eda85dad22 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 11:38:27 -0500 Subject: [PATCH 10/21] v3.3.5: fixed an outdated internal link in the readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95ba21e5d..88866b173 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Note that **this repository does not accept pull requests!** The code here is pr If you'd like to work with the code, you can find the following guides in `/docs`: - [Compiling for Android.](docs/getting-started-android.md) - - **[If you plan to distribute on Google Play please read the end of this guide.](docs/getting-started-android.md#distributing-your-apk)** + - **[If you plan to distribute on Google Play please read the end of this guide.](docs/getting-started-android.md#distributing-your-app)** - [Compiling for desktop platforms.](docs/getting-started-desktop.md) - [Compiling for iOS.](docs/getting-started-ios.md) - [Recommended changes for making your own version.](docs/recommended-changes.md) \ No newline at end of file From ac8d542fe5521ca160e601eca4466a2b75fe48f0 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 16:45:27 -0500 Subject: [PATCH 11/21] v3.3.5: fixed gnoll geomancer never swapping targets naturally --- .../actors/mobs/GnollGeomancer.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java index 870b2cd79..7a2c31a6e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/GnollGeomancer.java @@ -550,13 +550,21 @@ public class GnollGeomancer extends Mob { @Override public boolean act(boolean enemyInFOV, boolean justAlerted) { if (!enemyInFOV){ - spend(TICK); - return true; + //if we can't see our current target, try to find a new one + enemy = null; + enemy = chooseEnemy(); + if (enemy != null){ + return act(true, justAlerted); + } else { + //wait if we can't + spend(TICK); + return true; + } } else { enemySeen = true; - //use abilities more frequently on the hero's initial approach or if sapper is alive - // but only if hero isn't stunned, to prevent stunlocking + //use abilities more frequently on the enemy's initial approach or if sapper is alive + // but only if enemy isn't stunned, to prevent stunlocking if ((Dungeon.level.distance(pos, enemy.pos) > 2 || hasSapper()) && buff(RockArmor.class) != null && enemy.buff(Paralysis.class) == null){ From c26a177332f31277a81dfade59b911de340774f0 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 17:00:39 -0500 Subject: [PATCH 12/21] v3.3.5: necros now move their summon pos if on top of an immovable enemy --- .../actors/mobs/Necromancer.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java index 93bfafb31..945cd63be 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Necromancer.java @@ -204,21 +204,23 @@ public class Necromancer extends Mob { } } - //no push if char is immovable - if (Char.hasProp(Actor.findChar(summoningPos), Property.IMMOVABLE)){ - pushPos = pos; - } - //push enemy, or wait a turn if there is no valid pushing position if (pushPos != pos) { - Char ch = Actor.findChar(summoningPos); - Actor.add( new Pushing( ch, ch.pos, pushPos ) ); - ch.pos = pushPos; - Dungeon.level.occupyCell(ch ); + //no push if char is immovable, move our skeleton instead + if (Char.hasProp(Actor.findChar(summoningPos), Property.IMMOVABLE)){ + summoningPos = pushPos; + } else { + Char ch = Actor.findChar(summoningPos); + Actor.add(new Pushing(ch, ch.pos, pushPos)); + + ch.pos = pushPos; + Dungeon.level.occupyCell(ch); + } } else { + //attempt to damage the blocker in addition to waiting Char blocker = Actor.findChar(summoningPos); if (blocker.alignment != alignment){ blocker.damage( Random.NormalIntRange(2, 10), new SummoningBlockDamage() ); From 0b5fcdad870b20c810631fb1269ab945ef07c89c Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 17:11:27 -0500 Subject: [PATCH 13/21] v3.3.5: gardens now properly set embers to grass, and account for fire --- .../actors/blobs/Foliage.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/Foliage.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/Foliage.java index 469edc2b9..06250cf5f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/Foliage.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/Foliage.java @@ -28,9 +28,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.watabou.utils.PathFinder; public class Foliage extends Blob { @@ -46,6 +48,8 @@ public class Foliage extends Blob { boolean seen = false; + Fire fire = (Fire)Dungeon.level.blobs.get( Fire.class ); + int cell; for (int i = area.left; i < area.right; i++) { for (int j = area.top; j < area.bottom; j++) { @@ -56,8 +60,19 @@ public class Foliage extends Blob { volume += off[cell]; if (map[cell] == Terrain.EMBERS) { - map[cell] = Terrain.GRASS; - GameScene.updateMap(cell); + //only turn terrain into grass if no fire is adjacent to it + boolean valid = true; + if (fire != null && fire.volume > 0) { + for (int k : PathFinder.NEIGHBOURS9) { + if (fire.cur[cell + k] > 0){ + valid = false; + } + } + } + if (valid) { + Level.set(cell, Terrain.GRASS); + GameScene.updateMap(cell); + } } seen = seen || Dungeon.level.visited[cell]; From 391d870b2e138eecc863b71046296c3d3cc17912 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 17:19:19 -0500 Subject: [PATCH 14/21] v3.3.5: fixed a rounding err in liquid metal that could give 0 quantity --- .../shatteredpixel/shatteredpixeldungeon/items/LiquidMetal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LiquidMetal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LiquidMetal.java index 973cc4b95..4fe97d326 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LiquidMetal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LiquidMetal.java @@ -148,7 +148,7 @@ public class LiquidMetal extends Item { if (m.quantity() < m.defaultQuantity()){ if (quantity()*durabilityPerMetal >= m.durabilityPerUse()){ m.quantity(m.quantity()+1); - if (maxToUse < quantity()){ + if (Math.ceil(maxToUse) < quantity()){ Catalog.countUses(LiquidMetal.class, (int)Math.ceil(maxToUse)); GLog.i(Messages.get(LiquidMetal.class, "apply", (int)Math.ceil(maxToUse))); quantity -= (int)Math.ceil(maxToUse); From 149d16892a4a571f922be6fbd97cf325a366c585 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 17:32:45 -0500 Subject: [PATCH 15/21] v3.3.5: fixed cases where friendly tipped darts could still deal dmg --- .../weapon/missiles/darts/AdrenalineDart.java | 14 ++++++++++++-- .../weapon/missiles/darts/CleansingDart.java | 14 ++++++++++++-- .../weapon/missiles/darts/HealingDart.java | 19 +++++++++++++------ .../items/weapon/missiles/darts/HolyDart.java | 12 +++++++++++- 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java index cda7a0f05..fe143b8ad 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/AdrenalineDart.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Adrenaline; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class AdrenalineDart extends TippedDart { @@ -32,7 +33,17 @@ public class AdrenalineDart extends TippedDart { { image = ItemSpriteSheet.ADRENALINE_DART; } - + + @Override + public int damageRoll(Char owner) { + if (owner instanceof Hero) { + if (((Hero) owner).attackTarget().alignment == owner.alignment){ + return 0; //does not deal damage to allies + } + } + return super.damageRoll(owner); + } + @Override public int proc(Char attacker, Char defender, int damage) { @@ -40,7 +51,6 @@ public class AdrenalineDart extends TippedDart { //do nothing to the hero when processing charged shot } else if (attacker.alignment == defender.alignment){ Buff.prolong( defender, Adrenaline.class, Adrenaline.DURATION); - return 0; } else { Buff.prolong( defender, Cripple.class, Cripple.DURATION/2); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java index 5b217061e..641b98581 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/CleansingDart.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfCleansing; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Crossbow; @@ -36,7 +37,17 @@ public class CleansingDart extends TippedDart { { image = ItemSpriteSheet.CLEANSING_DART; } - + + @Override + public int damageRoll(Char owner) { + if (owner instanceof Hero) { + if (((Hero) owner).attackTarget().alignment == owner.alignment){ + return 0; //does not deal damage to allies + } + } + return super.damageRoll(owner); + } + @Override public int proc(Char attacker, final Char defender, int damage) { @@ -44,7 +55,6 @@ public class CleansingDart extends TippedDart { //do nothing to the hero when processing charged shot } else if (attacker.alignment == defender.alignment){ PotionOfCleansing.cleanse(defender, PotionOfCleansing.Cleanse.DURATION*2f); - return 0; } else { for (Buff b : defender.buffs()){ if (!(b instanceof ChampionEnemy) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HealingDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HealingDart.java index e4b6344a5..7afd2bdb7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HealingDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HealingDart.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -33,7 +34,17 @@ public class HealingDart extends TippedDart { image = ItemSpriteSheet.HEALING_DART; usesTargeting = false; //you never want to throw this at an enemy } - + + @Override + public int damageRoll(Char owner) { + if (owner instanceof Hero) { + if (((Hero) owner).attackTarget().alignment == owner.alignment){ + return 0; //does not deal damage to allies + } + } + return super.damageRoll(owner); + } + @Override public int proc(Char attacker, Char defender, int damage) { @@ -45,11 +56,7 @@ public class HealingDart extends TippedDart { //heals 30 hp at base, scaling with enemy HT PotionOfHealing.cure( defender ); Buff.affect( defender, Healing.class ).setHeal((int)(0.5f*defender.HT + 30), 0.25f, 0); - - if (attacker.alignment == defender.alignment){ - return 0; - } - + return super.proc(attacker, defender, damage); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java index 12d61dc7a..f966fabf4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/darts/HolyDart.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.audio.Sample; @@ -36,6 +37,16 @@ public class HolyDart extends TippedDart { { image = ItemSpriteSheet.HOLY_DART; } + + @Override + public int damageRoll(Char owner) { + if (owner instanceof Hero) { + if (((Hero) owner).attackTarget().alignment == owner.alignment){ + return 0; //does not deal damage to allies + } + } + return super.damageRoll(owner); + } @Override public int proc(Char attacker, Char defender, int damage) { @@ -47,7 +58,6 @@ public class HolyDart extends TippedDart { if (attacker.alignment == defender.alignment){ Buff.affect(defender, Bless.class, Math.round(Bless.DURATION)); - return 0; } if (Char.hasProp(defender, Char.Property.UNDEAD) || Char.hasProp(defender, Char.Property.DEMONIC)){ From a6a26d74696fb2998ee6406a8503e192fbb6c84f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 2 Feb 2026 19:23:17 -0500 Subject: [PATCH 16/21] v3.3.5: ingame randomize buttons now blink as a random run reminder --- .../shatteredpixeldungeon/ui/TalentsPane.java | 10 ++++++++++ .../windows/WndChooseAbility.java | 9 +++++++++ .../windows/WndChooseSubclass.java | 9 +++++++++ 3 files changed, 28 insertions(+) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java index 112d84d92..ae8bd3142 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify; @@ -32,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.watabou.noosa.ColorBlock; +import com.watabou.noosa.Game; import com.watabou.noosa.Image; import com.watabou.noosa.ui.Component; import com.watabou.utils.Random; @@ -214,6 +216,14 @@ public class TalentsPane extends ScrollPane { } }); }; + + @Override + public void update() { + if (Dungeon.hero.lvl >= 3 && Statistics.qualifiedForRandomVictoryBadge){ + icon.tint(1, 1, 1, (float)Math.abs(Math.cos(1.5f*Math.PI*Game.timeTotal)/2f)); + } + super.update(); + } }; add(random); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java index 76be431df..a1b7b53bd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java @@ -37,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.noosa.Game; import com.watabou.utils.Random; public class WndChooseAbility extends Window { @@ -77,6 +78,14 @@ public class WndChooseAbility extends Window { }); } + @Override + public void update() { + if (Statistics.qualifiedForRandomVictoryBadge){ + icon.tint(1, 1, 1, (float)Math.abs(Math.cos(1.5f*Math.PI* Game.timeTotal)/2f)); + } + super.update(); + } + @Override protected String hoverText() { return Messages.get(WndChooseAbility.class, "random_title"); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java index 4968fee36..a85e61473 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java @@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.noosa.Game; import com.watabou.utils.Random; public class WndChooseSubclass extends Window { @@ -75,6 +76,14 @@ public class WndChooseSubclass extends Window { }); } + @Override + public void update() { + if (Statistics.qualifiedForRandomVictoryBadge){ + icon.tint(1, 1, 1, (float)Math.abs(Math.cos(1.5f*Math.PI* Game.timeTotal)/2f)); + } + super.update(); + } + @Override protected String hoverText() { return Messages.get(WndChooseSubclass.class, "random_title"); From a19104fae733a81a3e2743802fa1e96ac21b7a33 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 3 Feb 2026 16:51:26 -0500 Subject: [PATCH 17/21] v3.3.5: added a 'vault rat' enemy for testing vault AI --- .../assets/messages/actors/actors.properties | 2 + .../actors/mobs/VaultMob.java | 6 +-- .../actors/mobs/VaultRat.java | 43 +++++++++++++++++++ .../items/wands/WandOfBlastWave.java | 2 + .../rooms/quest/vault/VaultRingRoom.java | 26 +++++++++++ 5 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultRat.java diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index ba1f5f97b..7d299e669 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1790,6 +1790,8 @@ actors.mobs.tormentedspirit.name=tormented spirit actors.mobs.tormentedspirit.desc=Tormented spirits are otherwise good-natured spirits that have been afflicted by a curse. So long as they are cursed they will attack just like a wraith, and are more powerful as well!\n\nIt may be possible to cleanse the curse by using the right item while next to the spirit. If the curse is lifted the spirit will surely be grateful... actors.mobs.tormentedspirit.thank_you=Thank you... +actors.mobs.vaultrat.desc=This rat has some behaviour changes to test out new vault enemy AI:\n_-_ Its movement can be 'heard' through walls\n_-_ It will wander along a pre-set patrol\n_-_ While wandering it has sharply reduced detection chance behind the direction it moves in.\n_-_ When it detects you it will 'investigate' before swapping to hunting. Investigating enemies move toward you but don't attack and are easier to lose behind doors and corners. + actors.mobs.warlock.name=dwarf warlock actors.mobs.warlock.bolt_kill=The shadow bolt killed you... actors.mobs.warlock.desc=As the dwarves' interests shifted from engineering to arcane arts, warlocks came to power in the city. They started with elemental magic, but soon switched to demonology and necromancy. The strongest of these warlocks seized the throne of the dwarven city, and his cohorts were allowed to continue practising their dark magic, so long as they surrendered their free will to him.\n\nThese warlocks possess powerful disruptive magic, and are able to temporarily hinder the upgrade magic applied to your equipment. The more upgraded an item is, the more strongly it will be affected. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java index 782753404..f2e87c781 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java @@ -27,11 +27,11 @@ public class VaultMob extends Mob { super.move(step, travelling); if (travelling && !sprite.visible && Dungeon.level.distance(pos, Dungeon.hero.pos) <= 6){ if (state == HUNTING){ - WandOfBlastWave.BlastWave.blast(pos, 1.5f, 0xFF0000); + WandOfBlastWave.BlastWave.blast(pos, 1f, 0xFF0000); } else if (state == INVESTIGATING){ - WandOfBlastWave.BlastWave.blast(pos, 1.5f, 0xFF8800); + WandOfBlastWave.BlastWave.blast(pos, 1f, 0xFF8800); } else { - WandOfBlastWave.BlastWave.blast(pos, 1.5f); + WandOfBlastWave.BlastWave.blast(pos, 1f); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultRat.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultRat.java new file mode 100644 index 000000000..f75375fb3 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultRat.java @@ -0,0 +1,43 @@ +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite; +import com.watabou.utils.Random; + +public class VaultRat extends VaultMob { + + { + spriteClass = RatSprite.class; + + HP = HT = 8; + defenseSkill = 2; + + maxLvl = -2; + } + + @Override + public int damageRoll() { + return 0; + } + + @Override + public int attackSkill(Char target) { + return 8; + } + + @Override + public int drRoll() { + return super.drRoll() + Random.NormalIntRange(0, 1); + } + + @Override + public String name() { + return Messages.get(Rat.class, "name"); + } + + @Override + public String description() { + return Messages.get(Rat.class, "desc") + "\n\n" + super.description(); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index 655038582..a8edffd60 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -283,6 +283,8 @@ public class WandOfBlastWave extends DamageWand { b.reset(pos, radius); if (hardLight != -1){ b.hardlight(hardLight); + } else { + b.resetColor(); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingRoom.java index 8b22d4fa5..adbba3e3a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingRoom.java @@ -1,11 +1,13 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.VaultRat; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; import com.watabou.utils.Point; +import com.watabou.utils.Random; public class VaultRingRoom extends StandardRoom { @@ -24,6 +26,30 @@ public class VaultRingRoom extends StandardRoom { for (Door door : connected.values()) { door.set( Door.Type.REGULAR ); } + + VaultRat rat = new VaultRat(); + do { + rat.pos = level.pointToCell(random(1)); + } while (level.solid[rat.pos]); + + if (Random.Int(2) == 0) { + rat.wanderPositions = new int[]{ + level.pointToCell(new Point(left+2, top+2)), + level.pointToCell(new Point(right-2, top+2)), + level.pointToCell(new Point(right-2, bottom-2)), + level.pointToCell(new Point(left+2, bottom-2)) + }; + } else { + rat.wanderPositions = new int[]{ + level.pointToCell(new Point(left+2, bottom-2)), + level.pointToCell(new Point(right-2, bottom-2)), + level.pointToCell(new Point(right-2, top+2)), + level.pointToCell(new Point(left+2, top+2)) + }; + } + rat.wanderPosIdx = Random.Int(4); + rat.state = rat.WANDERING; + level.mobs.add(rat); } @Override From 73ce3a9dab676f46a4720706ababc6f8cd89b6c5 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 4 Feb 2026 16:36:36 -0500 Subject: [PATCH 18/21] v3.3.5: implemented another room for vault enemies --- .../assets/messages/actors/actors.properties | 2 +- .../actors/mobs/VaultMob.java | 1 + .../items/wands/WandOfBlastWave.java | 5 +- .../quest/vault/VaultEnemyCenterRoom.java | 49 +++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultEnemyCenterRoom.java diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 7d299e669..c97f5b452 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1790,7 +1790,7 @@ actors.mobs.tormentedspirit.name=tormented spirit actors.mobs.tormentedspirit.desc=Tormented spirits are otherwise good-natured spirits that have been afflicted by a curse. So long as they are cursed they will attack just like a wraith, and are more powerful as well!\n\nIt may be possible to cleanse the curse by using the right item while next to the spirit. If the curse is lifted the spirit will surely be grateful... actors.mobs.tormentedspirit.thank_you=Thank you... -actors.mobs.vaultrat.desc=This rat has some behaviour changes to test out new vault enemy AI:\n_-_ Its movement can be 'heard' through walls\n_-_ It will wander along a pre-set patrol\n_-_ While wandering it has sharply reduced detection chance behind the direction it moves in.\n_-_ When it detects you it will 'investigate' before swapping to hunting. Investigating enemies move toward you but don't attack and are easier to lose behind doors and corners. +actors.mobs.vaultrat.desc=This rat has some behaviour changes to test out new vault enemy AI:\n_-_ Its movement can be 'heard' through walls\n_-_ It will wander along a pre-set patrol\n_-_ While wandering it has sharply reduced detection range behind the direction it moves in.\n_-_While sleeping its detection range is also reduced\n_-_ When it detects you it will 'investigate' before swapping to hunting. Investigating enemies move toward you but don't attack and are easier to lose behind doors and corners. actors.mobs.warlock.name=dwarf warlock actors.mobs.warlock.bolt_kill=The shadow bolt killed you... diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java index f2e87c781..1a3b6b2fd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/VaultMob.java @@ -160,6 +160,7 @@ public class VaultMob extends Mob { } else { //reset this, representing the mob looking around in place previousPos = pos; + sprite.idle(); } } return wanderPos; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index a8edffd60..c82008d79 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -251,6 +251,9 @@ public class WandOfBlastWave extends DamageWand { x = (pos % Dungeon.level.width()) * DungeonTilemap.SIZE + (DungeonTilemap.SIZE - width) / 2; y = (pos / Dungeon.level.width()) * DungeonTilemap.SIZE + (DungeonTilemap.SIZE - height) / 2; + resetColor(); + scale.set(0); + time = TIME_TO_FADE; this.size = size; } @@ -283,8 +286,6 @@ public class WandOfBlastWave extends DamageWand { b.reset(pos, radius); if (hardLight != -1){ b.hardlight(hardLight); - } else { - b.resetColor(); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultEnemyCenterRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultEnemyCenterRoom.java new file mode 100644 index 000000000..c15422e7a --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultEnemyCenterRoom.java @@ -0,0 +1,49 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault; + +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.VaultRat; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; +import com.watabou.utils.Point; + +public class VaultEnemyCenterRoom extends StandardRoom { + + @Override + public float[] sizeCatProbs() { + return new float[]{0, 1, 0}; + } + + @Override + public void paint(Level level) { + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1 , Terrain.EMPTY ); + + Painter.fill( level, this, 2 , Terrain.WALL ); + Painter.fill( level, this, 3 , Terrain.EMPTY ); + Painter.drawLine( level, new Point(left+1, top+3), new Point(right-1, top+3), Terrain.EMPTY); + Painter.drawLine( level, new Point(left+1, bottom-3), new Point(right-1, bottom-3), Terrain.EMPTY); + Painter.drawLine( level, new Point(left+3, top+1), new Point(left+3, bottom-1), Terrain.EMPTY); + Painter.drawLine( level, new Point(right-3, top+1), new Point(right-3, bottom-1), Terrain.EMPTY); + //TODO maybe better without corner pillars? they sorta just bait you... + // Need to think a little more about layout here + + for (Door door : connected.values()) { + door.set( Door.Type.REGULAR ); + } + + VaultRat rat = new VaultRat(); + do { + rat.pos = level.pointToCell(center()); + } while (level.solid[rat.pos]); + rat.state = rat.WANDERING; + level.mobs.add(rat); + + } + + @Override + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { + return false; + } +} From cd7ed99ac01615b7edec754df47876fab33b6e7b Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 4 Feb 2026 17:39:12 -0500 Subject: [PATCH 19/21] v3.3.5: added two more rooms for tester vault enemies to appear in v3.3.5: fixed an exploit where quitting would cancel fury partway --- .../main/java/com/watabou/utils/Random.java | 13 ++- .../assets/messages/actors/actors.properties | 2 +- .../levels/VaultLevel.java | 8 +- .../rooms/quest/vault/VaultRingsRoom.java | 60 ++++++++++++++ .../vault/VaultSimpleEnemyTreasureRoom.java | 81 +++++++++++++++++++ 5 files changed, 161 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingsRoom.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultSimpleEnemyTreasureRoom.java diff --git a/SPD-classes/src/main/java/com/watabou/utils/Random.java b/SPD-classes/src/main/java/com/watabou/utils/Random.java index 6afd0c3fc..c93f4b29a 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/Random.java +++ b/SPD-classes/src/main/java/com/watabou/utils/Random.java @@ -256,7 +256,18 @@ public class Random { public synchronized static void shuffle( List list){ Collections.shuffle(list, generators.peek()); } - + + public static void shuffle( int[] array ) { + for (int i=0; i < array.length - 1; i++) { + int j = Int( i, array.length ); + if (j != i) { + int t = array[i]; + array[i] = array[j]; + array[j] = t; + } + } + } + public static void shuffle( T[] array ) { for (int i=0; i < array.length - 1; i++) { int j = Int( i, array.length ); diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index c97f5b452..7e124a00e 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1790,7 +1790,7 @@ actors.mobs.tormentedspirit.name=tormented spirit actors.mobs.tormentedspirit.desc=Tormented spirits are otherwise good-natured spirits that have been afflicted by a curse. So long as they are cursed they will attack just like a wraith, and are more powerful as well!\n\nIt may be possible to cleanse the curse by using the right item while next to the spirit. If the curse is lifted the spirit will surely be grateful... actors.mobs.tormentedspirit.thank_you=Thank you... -actors.mobs.vaultrat.desc=This rat has some behaviour changes to test out new vault enemy AI:\n_-_ Its movement can be 'heard' through walls\n_-_ It will wander along a pre-set patrol\n_-_ While wandering it has sharply reduced detection range behind the direction it moves in.\n_-_While sleeping its detection range is also reduced\n_-_ When it detects you it will 'investigate' before swapping to hunting. Investigating enemies move toward you but don't attack and are easier to lose behind doors and corners. +actors.mobs.vaultrat.desc=This rat has some behaviour changes to test out new vault enemy AI:\n_-_ Its movement can be 'heard' through walls\n_-_ It will wander along a pre-set patrol\n_-_ While wandering it has sharply reduced detection range behind the direction it moves in.\n_-_ While sleeping its detection range is also reduced\n_-_ When it detects you it will 'investigate' before swapping to hunting. Investigating enemies move toward you but don't attack and are easier to lose behind doors and corners. actors.mobs.warlock.name=dwarf warlock actors.mobs.warlock.bolt_kill=The shadow bolt killed you... diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/VaultLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/VaultLevel.java index 6d93228af..fa5db2e9a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/VaultLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/VaultLevel.java @@ -37,11 +37,14 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultCircleRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultCrossRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultEnemyCenterRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultEntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultFinalRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultLongRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultQuadrantsRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultRingRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultRingsRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault.VaultSimpleEnemyTreasureRoom; import com.watabou.utils.Random; import java.util.ArrayList; @@ -54,11 +57,14 @@ public class VaultLevel extends CityLevel { initRooms.add(roomEntrance = new VaultEntranceRoom()); - for (int i = 0; i < 4; i++){ + for (int i = 0; i < 2; i++){ initRooms.add(new VaultRingRoom()); initRooms.add(new VaultCircleRoom()); initRooms.add(new VaultCrossRoom()); initRooms.add(new VaultQuadrantsRoom()); + initRooms.add(new VaultEnemyCenterRoom()); + initRooms.add(new VaultRingsRoom()); + initRooms.add(new VaultSimpleEnemyTreasureRoom()); } initRooms.add(new VaultLongRoom()); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingsRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingsRoom.java new file mode 100644 index 000000000..a8496426b --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultRingsRoom.java @@ -0,0 +1,60 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault; + +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.VaultRat; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class VaultRingsRoom extends StandardRoom { + + @Override + public float[] sizeCatProbs() { + return new float[]{0, 1, 0}; + } + + @Override + public void paint(Level level) { + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1 , Terrain.EMPTY ); + + Painter.fill(level, left+2, top+2, 3, 3, Terrain.WALL); + Painter.fill(level, right-4, top+2, 3, 3, Terrain.WALL); + Painter.fill(level, left+2, bottom-4, 3, 3, Terrain.WALL); + Painter.fill(level, right-4, bottom-4, 3, 3, Terrain.WALL); + + for (Door door : connected.values()) { + door.set( Door.Type.REGULAR ); + } + + VaultRat rat = new VaultRat(); + do { + rat.pos = level.pointToCell(random(1)); + } while (level.solid[rat.pos]); + rat.state = rat.WANDERING; + level.mobs.add(rat); + + rat.wanderPositions = new int[]{ + level.pointToCell(new Point(left+1, top+1)), + level.pointToCell(new Point(left+1, top+5)), + level.pointToCell(new Point(left+1, top+9)), + level.pointToCell(new Point(left+5, top+1)), + level.pointToCell(new Point(left+5, top+5)), + level.pointToCell(new Point(left+5, top+9)), + level.pointToCell(new Point(left+9, top+1)), + level.pointToCell(new Point(left+9, top+5)), + level.pointToCell(new Point(left+9, top+9)) + }; + Random.shuffle(rat.wanderPositions); + + } + + @Override + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { + return false; + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultSimpleEnemyTreasureRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultSimpleEnemyTreasureRoom.java new file mode 100644 index 000000000..f61ad7977 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/vault/VaultSimpleEnemyTreasureRoom.java @@ -0,0 +1,81 @@ +package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.vault; + +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.VaultRat; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Heap; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class VaultSimpleEnemyTreasureRoom extends StandardRoom { + + @Override + public float[] sizeCatProbs() { + return new float[]{0, 1, 0}; + } + + @Override + public void paint(Level level) { + + Painter.fill( level, this, Terrain.WALL ); + Painter.fill( level, this, 1 , Terrain.EMPTY ); + + int ratPos = 0; + int treasurePos = 0; + switch (Random.Int(4)){ + case 0: + Painter.fill(level, left+2, top+2, 6, 6, Terrain.WALL ); + Painter.fill(level, left+3, top+3, 4, 4, Terrain.EMPTY_SP ); + Painter.fill(level, left+4, top+7, 2, 1, Terrain.EMPTY_SP ); + Painter.fill(level, left+7, top+4, 1, 2, Terrain.EMPTY_SP ); + ratPos = level.pointToCell(new Point(left+4, top+4)); + treasurePos = level.pointToCell(new Point(left+3, top+3)); + break; + case 1: + Painter.fill(level, left+3, top+2, 6, 6, Terrain.WALL ); + Painter.fill(level, left+4, top+3, 4, 4, Terrain.EMPTY_SP ); + Painter.fill(level, left+5, top+7, 2, 1, Terrain.EMPTY_SP ); + Painter.fill(level, left+3, top+4, 1, 2, Terrain.EMPTY_SP ); + ratPos = level.pointToCell(new Point(right-4, top+4)); + treasurePos = level.pointToCell(new Point(right-3, top+3)); + break; + case 2: + Painter.fill(level, left+3, top+3, 6, 6, Terrain.WALL ); + Painter.fill(level, left+4, top+4, 4, 4, Terrain.EMPTY_SP ); + Painter.fill(level, left+5, top+3, 2, 1, Terrain.EMPTY_SP ); + Painter.fill(level, left+3, top+5, 1, 2, Terrain.EMPTY_SP ); + ratPos = level.pointToCell(new Point(right-4, bottom-4)); + treasurePos = level.pointToCell(new Point(right-3, bottom-3)); + break; + case 3: + Painter.fill(level, left+2, top+3, 6, 6, Terrain.WALL ); + Painter.fill(level, left+3, top+4, 4, 4, Terrain.EMPTY_SP ); + Painter.fill(level, left+4, top+3, 2, 1, Terrain.EMPTY_SP ); + Painter.fill(level, left+7, top+5, 1, 2, Terrain.EMPTY_SP ); + ratPos = level.pointToCell(new Point(left+4, bottom-4)); + treasurePos = level.pointToCell(new Point(left+3, bottom-3)); + break; + } + + level.drop(Generator.randomWeapon(true), treasurePos).type = Heap.Type.CHEST; + + for (Door door : connected.values()) { + door.set( Door.Type.REGULAR ); + } + + VaultRat rat = new VaultRat(); + rat.pos = ratPos; + level.mobs.add(rat); + + } + + @Override + public boolean canMerge(Level l, Room other, Point p, int mergeTerrain) { + return false; + } + +} From 26d39b58ff72f63f2ee200e1e5c06ee21090be8b Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 4 Feb 2026 19:47:11 -0500 Subject: [PATCH 20/21] v3.3.5: fixed an exploit where quitting would cancel fury partway --- .../shatteredpixeldungeon/actors/buffs/Combo.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Combo.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Combo.java index dcea29a7c..4b8eed0d6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Combo.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Combo.java @@ -93,7 +93,7 @@ public class Combo extends Buff implements ActionIndicator.Action { comboTime = Math.max(comboTime, 5f); if (!enemy.isAlive() || (enemy.buff(Corruption.class) != null && enemy.HP == enemy.HT)){ - comboTime = 15f + 15f*((Hero)target).pointsInTalent(Talent.CLEAVE); + comboTime = 150f + 15f*((Hero)target).pointsInTalent(Talent.CLEAVE); } initialComboTime = comboTime; @@ -336,6 +336,7 @@ public class Combo extends Buff implements ActionIndicator.Action { } private static ComboMove moveBeingUsed; + private static int furyHitsLeft = 0; private void doAttack(final Char enemy) { @@ -437,9 +438,14 @@ public class Combo extends Buff implements ActionIndicator.Action { break; case FURY: - count--; + if (count > 0){ + furyHitsLeft = count; + count = 0; + hero.spend(hero.attackDelay()); + } + furyHitsLeft--; //fury attacks as many times as you have combo count - if (count > 0 && enemy.isAlive() && hero.canAttack(enemy) && + if (furyHitsLeft > 0 && enemy.isAlive() && hero.canAttack(enemy) && (wasAlly || enemy.alignment != target.alignment)){ target.sprite.attack(enemy.pos, new Callback() { @Override @@ -448,10 +454,11 @@ public class Combo extends Buff implements ActionIndicator.Action { } }); } else { + furyHitsLeft = 0; detach(); Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG); ActionIndicator.clearAction(Combo.this); - hero.spendAndNext(hero.attackDelay()); + hero.next(); } break; From 4c41268c41cd1927235d6ad7862ddf977c65db1c Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 4 Feb 2026 20:50:42 -0500 Subject: [PATCH 21/21] v3.3.5: updated version, changelog, and translations for v3.3.5 release! --- build.gradle | 4 +- .../messages/actors/actors_de.properties | 2 +- .../messages/actors/actors_el.properties | 2 +- .../messages/actors/actors_eo.properties | 4 +- .../messages/actors/actors_es.properties | 2 +- .../messages/actors/actors_hu.properties | 4 +- .../messages/actors/actors_in.properties | 10 ++--- .../messages/actors/actors_it.properties | 2 +- .../messages/actors/actors_ja.properties | 2 +- .../messages/actors/actors_ko.properties | 4 +- .../messages/actors/actors_nl.properties | 2 +- .../messages/actors/actors_pl.properties | 8 ++-- .../messages/actors/actors_pt.properties | 6 +-- .../messages/actors/actors_ru.properties | 2 +- .../messages/actors/actors_sv.properties | 2 +- .../messages/actors/actors_tr.properties | 18 ++++----- .../messages/actors/actors_vi.properties | 38 +++++++++---------- .../messages/actors/actors_zh-hant.properties | 36 +++++++++--------- .../messages/actors/actors_zh.properties | 2 +- .../assets/messages/items/items_el.properties | 2 +- .../assets/messages/items/items_es.properties | 2 +- .../assets/messages/items/items_pt.properties | 10 ++--- .../assets/messages/items/items_ru.properties | 4 +- .../assets/messages/items/items_tr.properties | 2 +- .../assets/messages/items/items_vi.properties | 6 +-- .../messages/items/items_zh-hant.properties | 34 ++++++++--------- .../messages/journal/journal_es.properties | 8 ++-- .../messages/journal/journal_in.properties | 2 +- .../messages/journal/journal_pt.properties | 2 +- .../messages/journal/journal_uk.properties | 4 +- .../journal/journal_zh-hant.properties | 2 +- .../messages/levels/levels_pt.properties | 2 +- .../messages/levels/levels_zh.properties | 2 +- .../assets/messages/misc/misc_ja.properties | 2 +- .../assets/messages/misc/misc_ru.properties | 2 +- .../messages/plants/plants_el.properties | 2 +- .../messages/plants/plants_zh-hant.properties | 4 +- .../messages/scenes/scenes_zh-hant.properties | 4 +- .../ui/changelist/v3_X_Changes.java | 34 ++++++++++++++++- 39 files changed, 156 insertions(+), 124 deletions(-) diff --git a/build.gradle b/build.gradle index 7ee57b812..3a74f4f90 100644 --- a/build.gradle +++ b/build.gradle @@ -14,8 +14,8 @@ allprojects { appName = 'Shattered Pixel Dungeon' appPackageName = 'com.shatteredpixel.shatteredpixeldungeon' - appVersionCode = 889 - appVersionName = '3.3.4' + appVersionCode = 890 + appVersionName = '3.3.5' appJavaCompatibility = JavaVersion.VERSION_11 diff --git a/core/src/main/assets/messages/actors/actors_de.properties b/core/src/main/assets/messages/actors/actors_de.properties index a98dfe2b7..a672ccc36 100644 --- a/core/src/main/assets/messages/actors/actors_de.properties +++ b/core/src/main/assets/messages/actors/actors_de.properties @@ -808,7 +808,7 @@ actors.hero.heroclass.warrior_unlock=Der Krieger ist automatisch freigeschaltet. actors.hero.heroclass.mage=Magier actors.hero.heroclass.mage_desc_short=Der Magier ist ein arkaner Meister und trägt einen _magischen Stab_, der stärker ist als ein Zauberstab. Der Stab kann _mit jedem beliebigen Zauberstab verschmolzen werden_, den der Zauberer findet. -actors.hero.heroclass.mage_desc=Der Magier startet mit einem _einzigartigen Zauberstab_, der sich deutlich schneller als andere Stäbe wieder auflädt und eine Ladung mehr hat. Der Zauberstab _kann mit jedem Stab verschmolzen werden_, den der Magier im Dungeon findet.\n\nDer Magier startet außerdem mit einem _Stab der magischen Geschosse_, welcher mit seinem Zauberstab verschmolzen ist, einer Stoffrüstung, einem Wasserschlauch und einem Samtbeutel.\nDer Magier identifiziert automatisch:\n_-_ Schriftrollen der Identifizierung\n_-_ Trank der flüssigen Flamme\n_-_ Schriftrolle der Verbesserung +actors.hero.heroclass.mage_desc=Der Magier startet mit einem _einzigartigen Zauberstab_, der sich deutlich schneller als andere Stäbe wieder auflädt und eine Ladung mehr hat. Der Zauberstab _kann mit jedem Stab verschmolzen werden_, den der Magier im Dungeon findet.\n\nDer Magier startet außerdem mit einem _Stab der magischen Geschosse_, welcher mit seinem Zauberstab verschmolzen ist, einer Stoffrüstung, einem Wasserschlauch und einem Samtbeutel.\n\nDer Magier identifiziert automatisch:\n_-_ Schriftrollen der Identifizierung\n_-_ Trank der flüssigen Flamme\n_-_ Schriftrolle der Verbesserung actors.hero.heroclass.mage_unlock=Um den Magier freizuschalten, _benutze eine Schriftrolle der Verbesserung, um einen Gegenstand stärker zu machen._ actors.hero.heroclass.rogue=Schurke diff --git a/core/src/main/assets/messages/actors/actors_el.properties b/core/src/main/assets/messages/actors/actors_el.properties index 871448ebc..dff70d4cf 100644 --- a/core/src/main/assets/messages/actors/actors_el.properties +++ b/core/src/main/assets/messages/actors/actors_el.properties @@ -1496,7 +1496,7 @@ actors.mobs.crystalmimic.desc=Οι μίμοι είναι μαγικά πλάσμ actors.mobs.crystalspire.name=κρυστάλλινος στύλος actors.mobs.crystalspire.warning=Ο κρύσταλλος πάλλεται όσο τον χτυπάς. Αν το συνεχίσεις, θα προσελκύσεις σίγουρα την προσοχή επάνω σου... actors.mobs.crystalspire.alert=Η δόνηση γιγαντώνεται και αντηχεί σε ολόκληρο το σπήλαιο! -actors.mobs.crystalspire.desc=Αυτός ο γιγάντιος στύλος από σκληροποιημένο κρύσταλλο είναι πιθανώς η πηγή όλων των παράξενων κρυστάλλινων πλασμάτων του σπηλαίου. Τα κανονικά σου όπλα είναι αναποτελεσματικά εναντίον του, οπότε θα πρέπει να χρησιμοποιήσεις την αξίνα σου για να τον καταστρέψεις._Βεβαιώσου ότι έχεις προετοιμαστεί προτού ξεκινήσεις να τον σπάζεις._ Ένας τόσο μεγάλος κρύσταλλος θα πάρει κάποια ώρα να σκαφτεί, και λογικά θα υπάρξει εξωτερική παρέμβαση. Ο ίδιος ο στύλος πρέπει να διαθέτει κι αυτός μηχανισμούς άμυνας. _Ίσως οι επιθέσεις του στύλου να μπορούν να χρησιμοποιηθούν εναντίον των υποτακτικών του._ +actors.mobs.crystalspire.desc=Αυτός ο γιγάντιος στύλος από σκληροποιημένο κρύσταλλο είναι πιθανώς η πηγή όλων των παράξενων κρυστάλλινων πλασμάτων του σπηλαίου. Τα κανονικά σου όπλα είναι αναποτελεσματικά εναντίον του, οπότε θα πρέπει να χρησιμοποιήσεις την αξίνα σου για να τον καταστρέψεις.\n\n_Βεβαιώσου ότι έχεις προετοιμαστεί προτού ξεκινήσεις να τον σπάζεις._ Ένας τόσο μεγάλος κρύσταλλος θα πάρει κάποια ώρα να σκαφτεί, και λογικά θα υπάρξει εξωτερική παρέμβαση. Ο ίδιος ο στύλος πρέπει να διαθέτει κι αυτός μηχανισμούς άμυνας. _Ίσως οι επιθέσεις του στύλου να μπορούν να χρησιμοποιηθούν εναντίον των υποτακτικών του._ actors.mobs.crystalspire.discover_hint=Αυτόν τον εχθρό τον βρίσκεις σε μια συγκεκριμένη αποστολή. actors.mobs.crystalwisp.name=κρυστάλλινο θραύσμα diff --git a/core/src/main/assets/messages/actors/actors_eo.properties b/core/src/main/assets/messages/actors/actors_eo.properties index 7589e2ad3..46b332cfd 100644 --- a/core/src/main/assets/messages/actors/actors_eo.properties +++ b/core/src/main/assets/messages/actors/actors_eo.properties @@ -823,7 +823,7 @@ actors.hero.heroclass.huntress_unlock=Por malŝlosi Ĉasistinon, _trafu malamiko actors.hero.heroclass.duelist=duelistino actors.hero.heroclass.duelist_desc_short=Duelistino estas majstrino pri manarmiloj kaj povas ekigi _specialan armilan atakon._ Tiu speciala atako estas _malsama por ĉiu armilo._ -actors.hero.heroclass.duelist_desc=Duelistino komencas kun _unika rapiro_ kun speciala atako, kiu ŝargiĝas laŭ tempo.\n\nĈiu manarmilo en la ludo havas _diferencan specialan atakon_, kiun Duelistino povas uzi.\n\nŜi eniras la labirinton posedante _du ĵetpikilojn_, ŝtofan defendaĵon, felsakon kaj veluran sakon.\n\nDuelistino dekomence povas identigi:\n_–_ skribrulaĵojn de identigo,_–_ eliksirojn de povo,_–_ skribrulaĵojn de spegula figuro. +actors.hero.heroclass.duelist_desc=Duelistino komencas kun _unika rapiro_ kun speciala atako, kiu ŝargiĝas laŭ tempo.\n\nĈiu manarmilo en la ludo havas _diferencan specialan atakon_, kiun Duelistino povas uzi.\n\nŜi eniras la labirinton posedante _du ĵetpikilojn_, ŝtofan defendaĵon, felsakon kaj veluran sakon.\n\nDuelistino dekomence povas identigi:\n_–_ skribrulaĵojn de identigo,\n_–_ eliksirojn de povo,\n_–_ skribrulaĵojn de spegula figuro. actors.hero.heroclass.duelist_unlock=Por malŝlosi Duelistinon, _surmetu almenaŭ 2-supernivelan armilon havante sufiĉan povon._ actors.hero.heroclass.cleric=kleriko @@ -1193,7 +1193,7 @@ actors.hero.talent.combined_lethality.desc=_+1:_ se Majstrino atakos uzante mana actors.hero.talent.unencumbered_spirit.title=libera spirito actors.hero.talent.unencumbered_spirit.desc=_+1:_ Monaĥino akiras _je 50% de energio pli_ por ĉiu uzata armaĵo de _maksimume 3-a supernivelo_.\n\n_+2:_ Monaĥino akiras _je 75% de energio pli_ por ĉiu uzata armaĵo de _maksimume 2-a supernivelo_. Profito pro uzi 3-supernivelan armaĵojn ne ŝanĝiĝas.\n\n_+3:_ Monaĥino akiras _je 100% de energio pli_ por ĉiu uzata armaĵo de _supernivelo 1-a_. Profito pro uzi 2- aŭ 3-supernivelajn armaĵojn ne ŝanĝiĝas. Ŝi ankaŭ senpage ricevos ŝtofan defendaĵon kaj pikilecajn gantojn.\n\nRimarko: tiu ĉi talento ne utilas al senarmila batalo aŭ al uzo de ringo de forto. actors.hero.talent.monastic_vigor.title=monaĥa vigleco -actors.hero.talent.monastic_vigor.desc=_+1:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _100% de energio_.\n\n_+2:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _almenaŭ 80% de energio_.\n\n_+3:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _almenaŭ 60% de energio_.\n\nPlipovigitaj kapabloj:– fluo de frapoj uzas ensorĉon de via armilo;– koncentro estas senprokrasta;– atingo de senprokrasta alsalto pliiĝas je 4;– rondmova piedbato vundas je +50% pli, kaj forpiedbatas kaj paralizas ĉiujn apudajn kontraŭulojn;– medito malrapide resanigas 20% de mankanta sano kaj liveras 80% vund-reziston. +actors.hero.talent.monastic_vigor.desc=_+1:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _100% de energio_.\n\n_+2:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _almenaŭ 80% de energio_.\n\n_+3:_ kapabloj de Monaĥino plipoviĝas kiam ŝi havas _almenaŭ 60% de energio_.\n\nPlipovigitaj kapabloj:\n– fluo de frapoj uzas ensorĉon de via armilo;\n– koncentro estas senprokrasta;\n– atingo de senprokrasta alsalto pliiĝas je 4;\n– rondmova piedbato vundas je +50% pli, kaj forpiedbatas kaj paralizas ĉiujn apudajn kontraŭulojn;\n– medito malrapide resanigas 20% de mankanta sano kaj liveras 80% vund-reziston. actors.hero.talent.combined_energy.title=kunigita energio actors.hero.talent.combined_energy.desc=_+1:_ se Monaĥino plenumos specialan armilan atakon kaj kapablon postulatan _almenaŭ 4 ŝargojn_ dum 5 temperoj, ŝi reakiros 1 uzitan ŝargon de kapablo.\n\n_+2:_ se Monaĥino plenumos specialan armilan atakon kaj kapablon postulatan _almenaŭ 3 ŝargojn_ dum 5 temperoj, ŝi reakiros 1 uzitan ŝargon de kapablo.\n\n_+3:_ se Monaĥino plenumos specialan armilan atakon kaj kapablon postulatan _almenaŭ 2 ŝargojn_ dum 5 temperoj, ŝi reakiros 1 uzitan ŝargon de kapablo. diff --git a/core/src/main/assets/messages/actors/actors_es.properties b/core/src/main/assets/messages/actors/actors_es.properties index 56ec59dc6..bfaf121f4 100644 --- a/core/src/main/assets/messages/actors/actors_es.properties +++ b/core/src/main/assets/messages/actors/actors_es.properties @@ -993,7 +993,7 @@ actors.hero.talent.ally_warp.title=reemplazo actors.hero.talent.ally_warp.desc=_+1:_ El Mago puede seleccionar a un aliado para intercambiar de lugar con él instantáneamente en un rango de _2 casillas_.\n\n_+2:_ El Mago puede seleccionar a un aliado para intercambiar de lugar con él instantáneamente en un rango de _4 casillas_.\n\n_+3:_ El Mago puede seleccionar a un aliado para intercambiar de lugar con él instantáneamente en un rango de _6 casillas_.\n\nEl Mago no puede intercambiar de lugar con aliados inmóviles. actors.hero.talent.empowered_strike.title=golpe potenciado -actors.hero.talent.empowered_strike.desc=_+1:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+16% de daño_ y el efecto del bastón obtiene _+50% de poder_.\n_+2:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+33% de daño_ y el efecto del bastón obtiene _+100% de poder_.\n\n_+3:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+50% de daño_ y el efecto del bastón obtiene _+150% de poder_. +actors.hero.talent.empowered_strike.desc=_+1:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+16% de daño_ y el efecto del bastón obtiene _+50% de poder_.\n\n_+2:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+33% de daño_ y el efecto del bastón obtiene _+100% de poder_.\n\n_+3:_ El primer golpe cuerpo a cuerpo del Mago de batalla con su bastón después de disparar con él inflige _+50% de daño_ y el efecto del bastón obtiene _+150% de poder_. actors.hero.talent.mystical_charge.title=carga mística actors.hero.talent.mystical_charge.desc=_+1:_ Golpear con su bastón le otorga al Mago de batalla _0.5 turnos_ de recarga de artefactos.\n\n_+2_ Golpear con su bastón le otorga al Mago de batalla _1 turno_ de recarga de artefactos.\n\n_+3:_ Golpear con su bastón le otorga al Mago de batalla _1.5 turnos_ de recarga de artefactos. actors.hero.talent.excess_charge.title=exceso de carga diff --git a/core/src/main/assets/messages/actors/actors_hu.properties b/core/src/main/assets/messages/actors/actors_hu.properties index f83bbc0b6..6f2a7cd55 100644 --- a/core/src/main/assets/messages/actors/actors_hu.properties +++ b/core/src/main/assets/messages/actors/actors_hu.properties @@ -205,7 +205,7 @@ actors.buffs.doom.name=kudarcra ítélt actors.buffs.doom.desc=Nehéz folytatni, ha úgy tűnik, a világ holtan szeretne látni.\n\nA kudarcra ítélt karakterek +67% sérülést szenvednek minden forrásból.\n\nAz ítélet végleges, csak a halállal múlik el a hatása. actors.buffs.dread.name=rettegés -actors.buffs.dread.desc=A rémület olyan nagy, hogy a célpont teljesen elmenekül a kazamatából!\n\nA rettegés hatása alá kerülő lények nagy sebességgel menekülnek az ellenfelük elől, és teljesen eltűnnek a kazamatából, amint látótávolságon kívülre kerülnek. Az így legyőzött ellenségek fele annyi tapasztalatot adnak, és nem hagynak hátra tárgyakat. A fájdalom sokkja csökkenti a rettegés időtartamát.\nMég %d körig tart a rettegés. +actors.buffs.dread.desc=A rémület olyan nagy, hogy a célpont teljesen elmenekül a kazamatából!\n\nA rettegés hatása alá kerülő lények nagy sebességgel menekülnek az ellenfelük elől, és teljesen eltűnnek a kazamatából, amint látótávolságon kívülre kerülnek. Az így legyőzött ellenségek fele annyi tapasztalatot adnak, és nem hagynak hátra tárgyakat. A fájdalom sokkja csökkenti a rettegés időtartamát.\n\nMég %d körig tart a rettegés. actors.buffs.drowsy.name=álmosság actors.buffs.drowsy.desc=Egy mágikus erő miatt alig tudsz ébren maradni. Néhány kör után a célpont mély, bűvös álomba zuhan.\n\nA hős ellenállhat az álmosságnak, ha megsebesül vagy ha teljesen egészséges.\n\nKörök az elalvásig: %s. @@ -755,7 +755,7 @@ actors.hero.spells.shieldoflight$shieldoflighttracker.desc=Vékony fénypajzs fe actors.hero.spells.spiritform.name=lelki alak actors.hero.spells.spiritform.short_desc=A szentháromságot hozzárendeli egy gyűrűhöz vagy egy ereklyéhez. -actors.hero.spells.spiritform.desc=A térítő választ egy olyan gyűrűt vagy ereklyét, amelyet ebben a futamban azonosított (a szentkönyv kivételével), és beoltja a hatásával a szentháromságot.\n\nHa a választott tárgy egy gyűrű, akkor a szentháromság egy ugyanolyan, +%1$d szintű gyűrű hatását biztosítja 20 körig.\n\nHa a választott tárgy egy ereklye, akkor a szentháromság egy ugyanolyan, +%2$d szintű ereklye hatását utánozza 20 körig. Minden szentháromsággal használt ereklye különbözőképpen viselkedik, és eltérő a páncéltöltésköltségük is.\nEz a varázsige lecserél minden más lelki hatást, amellyel a szentháromság jelenleg be van oltva. +actors.hero.spells.spiritform.desc=A térítő választ egy olyan gyűrűt vagy ereklyét, amelyet ebben a futamban azonosított (a szentkönyv kivételével), és beoltja a hatásával a szentháromságot.\n\nHa a választott tárgy egy gyűrű, akkor a szentháromság egy ugyanolyan, +%1$d szintű gyűrű hatását biztosítja 20 körig.\n\nHa a választott tárgy egy ereklye, akkor a szentháromság egy ugyanolyan, +%2$d szintű ereklye hatását utánozza 20 körig. Minden szentháromsággal használt ereklye különbözőképpen viselkedik, és eltérő a páncéltöltésköltségük is.\n\nEz a varázsige lecserél minden más lelki hatást, amellyel a szentháromság jelenleg be van oltva. actors.hero.spells.spiritform$spiritformbuff.name=lelki alak actors.hero.spells.spiritform$spiritformbuff.desc=A szentháromság lelki alakja jelenleg egy tárgy erejét biztosítja számodra, mintha csak az a felszerelésedben volna.\n\nNe feledd, hogy a lelki alak nem tud lemásolni olyan hatást, amelyből már részesülsz.\n\nJelenlegi hatás: %1$s.\n\nHátralévő körök: %2$s. diff --git a/core/src/main/assets/messages/actors/actors_in.properties b/core/src/main/assets/messages/actors/actors_in.properties index ac754808d..c1d74e75b 100644 --- a/core/src/main/assets/messages/actors/actors_in.properties +++ b/core/src/main/assets/messages/actors/actors_in.properties @@ -970,7 +970,7 @@ actors.hero.talent.empowering_meal.desc=_+1:_ Memakan makanan memberi Penyihir _ actors.hero.talent.scholars_intuition.title=naluri pelajar actors.hero.talent.scholars_intuition.desc=_+1:_ Penyihir mengidentifikasi tongkat sihir _3x lebih cepat_.\n\n_+2:_ Penyihir mengidentifikasi tongkat sihir _saat dia menggunakannya_. actors.hero.talent.lingering_magic.title=sihir yang tersisa -actors.hero.talent.lingering_magic.desc=_+1:_ Saat Penyihir menyerang dengan tongkat sihir atau tongkatnya, serangan fisik berikutnya menimbulkan _1-2 bonus damage_.\n_+2:_ Saat Mage menyerang dengan tongkat sihir atau tongkatnya, serangan fisik berikutnya menimbulkan _2 bonus damage_. +actors.hero.talent.lingering_magic.desc=_+1:_ Saat Penyihir menyerang dengan tongkat sihir atau tongkatnya, serangan fisik berikutnya menimbulkan _1-2 bonus damage_.\n\n_+2:_ Saat Mage menyerang dengan tongkat sihir atau tongkatnya, serangan fisik berikutnya menimbulkan _2 bonus damage_. actors.hero.talent.backup_barrier.title=penghalang cadangan actors.hero.talent.backup_barrier.desc=_+1:_ Penyihir mendapatkan _3 perisai_ setiap kali ia memakai daya terakhir di tongkatnya.\n\n_+2:_ Penyihir mendapatkan _5 perisai_ setiap kali ia memakai daya terakhir di tongkatnya. actors.hero.talent.backup_barrier.meta_desc=_Jika bakat ini didapatkan oleh pahlawan lain_ bakat ini akan terpicu dari tongkat sihir level tertinggi milik pahlawan. @@ -1029,7 +1029,7 @@ actors.hero.talent.longrange_warp.desc=_+1:_ Penyihir sekarang dapat berpindah a #rogue actors.hero.talent.cached_rations.title=jatah tersembunyi -actors.hero.talent.cached_rations.desc=_+1:_ Pengembara dapat menemukan _2 jatah persediaan_ ditempatkan di peti saat dia menjelajahi beberapa lantai berikutnya di terungku.\n_+2:_ Pengembara dapat menemukan _3 jatah persediaan_ ditempatkan di peti saat dia menjelajahi beberapa lantai berikutnya di terungku.\n\nJatah persediaan dimakan dengan cepat, memulihkan rasa kenyang dalam jumlah sedang, menyembuhkan 5 hp, dan memulihkan 1 daya ke jubah bayangan. +actors.hero.talent.cached_rations.desc=_+1:_ Pengembara dapat menemukan _2 jatah persediaan_ ditempatkan di peti saat dia menjelajahi beberapa lantai berikutnya di terungku.\n\n_+2:_ Pengembara dapat menemukan _3 jatah persediaan_ ditempatkan di peti saat dia menjelajahi beberapa lantai berikutnya di terungku.\n\nJatah persediaan dimakan dengan cepat, memulihkan rasa kenyang dalam jumlah sedang, menyembuhkan 5 hp, dan memulihkan 1 daya ke jubah bayangan. actors.hero.talent.thiefs_intuition.title=naluri pencuri actors.hero.talent.thiefs_intuition.desc=_+1:_ Pengembara mengidentifikasi cincin _2x lebih cepat_, dan mengidentifikasi jenis cincin _saat dia memakainya_.\n\n_+2:_ Pengembara mengidentifikasi cincin _saat dia memakainya_, dan mengidentifikasi jenis cincin _saat dia mengambilnya_. actors.hero.talent.sucker_punch.title=serangan kejutan @@ -1105,7 +1105,7 @@ actors.hero.talent.invigorating_meal.desc=_+1+:_ Pemburu hanya akan mengabiskan actors.hero.talent.liquid_nature.title=cairan alam actors.hero.talent.liquid_nature.desc=_+1:_ Saat Pemburu meminum atau melempar ramuan, seduhan, atau eliksir, _hingga 4 ubin rumput_ tumbuh di area sekitar, dan musuh di dekatnya tertanam selama _1 giliran_.\n\n_+2:_ Saat Pemburu meminum atau melempar ramuan, seduhan, atau eliksir, _hingga 6 ubin rumput_ tumbuh di area sekitar, dan musuh di dekatnya tertanam selama _2 giliran_.\n\nJumlah rumput dan durasi tertanam menjadi dua kali lipat ketika menggunakan ramuan kekuatan, pengalaman, atau item racikan yang harus dibuat menggunakan ramuan tersebut.\n\nUntuk item racikan dengan jumlah keluaran lebih tinggi (misalnya seduhan air), bakat ini memiliki peluang terpicu berdasarkan berapa banyak item tersebut dibuat. actors.hero.talent.rejuvenating_steps.title=langkah pertumbuhan -actors.hero.talent.rejuvenating_steps.desc=_+1:_ Saat Pemburu menginjak rumput pendek atau bara api, mereka akan tumbuh menjadi rumput tinggi yang segera berkerut oleh Pemburu. Memiliki _cooldown 10 giliran_.\n_+2:_ Saat Pemburu menginjak rumput pendek atau bara api, mereka akan tumbuh menjadi rumput tinggi yang segera berkerut oleh Pemburu. Memiliki _cooldown 5 giliran_.\n\nBakat ini akan menghasilkan rumput berkerut jika efek regenerasi pasif dinonaktifkan atau pahlawan sudah lama tidak memperoleh exp. +actors.hero.talent.rejuvenating_steps.desc=_+1:_ Saat Pemburu menginjak rumput pendek atau bara api, mereka akan tumbuh menjadi rumput tinggi yang segera berkerut oleh Pemburu. Memiliki _cooldown 10 giliran_.\n\n_+2:_ Saat Pemburu menginjak rumput pendek atau bara api, mereka akan tumbuh menjadi rumput tinggi yang segera berkerut oleh Pemburu. Memiliki _cooldown 5 giliran_.\n\nBakat ini akan menghasilkan rumput berkerut jika efek regenerasi pasif dinonaktifkan atau pahlawan sudah lama tidak memperoleh exp. actors.hero.talent.heightened_senses.title=peningkatan indera actors.hero.talent.heightened_senses.desc=_+1:_ Pemburu dapat melihat pikiran karakter lain yang berjarak _2 petak dari posisinya_.\n\n_+2:_ Pemburu dapat melihat pikiran karakter lain yang berjarak _3 petak dari posisinya_. actors.hero.talent.durable_projectiles.title=proyektil tahan lama @@ -1127,7 +1127,7 @@ actors.hero.talent.shared_upgrades.desc=_+1:_ Saat Penembak Jitu menyerang denga actors.hero.talent.durable_tips.title=lumuran tahan lama actors.hero.talent.durable_tips.desc=_+1:_ Anak panah yang dilumuri memiliki _ketahanan 2x lipat_ saat Penjaga menggunakannya.\n\n_+2:_ Anak panah yang dilumuri memiliki _ketahanan 3x lipat_ saat Penjaga menggunakannya.\n\n_+3:_ Anak panah yang dilumuri memiliki _ketahanan 4x lipat_ saat Penjaga menggunakannya. actors.hero.talent.barkskin.title=kulit kayu -actors.hero.talent.barkskin.desc=_+1:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-50%_ dari levelnya saat ini yang akan memudar setiap giliran.\n\n_+2:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-100%_ dari levelnya saat ini yang akan memudar setiap giliran.\n_+3:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-150%_ dari levelnya saat ini yang akan memudar setiap giliran. +actors.hero.talent.barkskin.desc=_+1:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-50%_ dari levelnya saat ini yang akan memudar setiap giliran.\n\n_+2:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-100%_ dari levelnya saat ini yang akan memudar setiap giliran.\n\n_+3:_ Saat menginjak rumput, Penjaga mendapatkan armor kulit kayu sebesar _0-150%_ dari levelnya saat ini yang akan memudar setiap giliran. actors.hero.talent.shielding_dew.title=perisai embun actors.hero.talent.shielding_dew.desc=_+1:_ Tetesan embun dapat memberikan Penjaga perisai saat darahnya penuh, hingga _20% dari HP maksimalnya_.\n\n_+2:_ Tetesan embun dapat memberikan Penjaga perisai saat darahnya penuh, hingga _40% dari HP maksimalnya_.\n\n_+3_ Tetesan embun dapat memberikan Penjaga perisai saat darahnya penuh, hingga _60% dari HP maksimalnya_. @@ -1184,7 +1184,7 @@ actors.hero.talent.deadly_followup.title=lanjutan mematikan actors.hero.talent.deadly_followup.desc=_+1:_ Saat Duelis mengenai musuh dengan senjata lempar, dia akan menimbulkan _10% lebih banyak damage jarak dekat_ kepada mereka selama 5 giliran.\n\n_+2:_ Saat Duelis mengenai musuh dengan senjata lempar, dia akan menimbulkan _20% lebih banyak damage jarak dekat_ kepada mereka selama 5 giliran.\n\n_+3:_ Saat Duelis mengenai musuh dengan senjata lempar, dia akan menimbulkan _30% lebih banyak damage jarak dekat_ kepada mereka selama 5 giliran. actors.hero.talent.varied_charge.title=variasi daya -actors.hero.talent.varied_charge.desc=_+1:_ Jagoan langsung mendapatkan kembali _0,17 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu.\n\n_+2:_ Jagoan langsung mendapatkan kembali _0,33 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu.\n_+3:_ Jagoan langsung mendapatkan kembali _0,5 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu. +actors.hero.talent.varied_charge.desc=_+1:_ Jagoan langsung mendapatkan kembali _0,17 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu.\n\n_+2:_ Jagoan langsung mendapatkan kembali _0,33 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu.\n\n_+3:_ Jagoan langsung mendapatkan kembali _0,5 daya senjata_ ketika dia menggunakan dua kemampuan senjata yang berbeda, tanpa batas waktu. actors.hero.talent.twin_upgrades.title=peningkatan kembar actors.hero.talent.twin_upgrades.desc=_+1:_ Jika salah satu dari dua senjata yang digunakan Jagoan memiliki level lebih rendah dan _2 tingkat atau lebih rendah_ dibandingkan senjata lainnya, senjata tersebut akan ditingkatkan ke level senjata lainnya.\n\n_+2:_ Jika salah satu dari dua senjata yang digunakan Jagoan memiliki level lebih rendah dan _1 tingkat atau lebih rendah_ dibandingkan senjata lainnya, senjata tersebut akan ditingkatkan ke level senjata lainnya.\n\n_+3:_ Jika salah satu dari dua senjata yang digunakan Jagoan memiliki level lebih rendah dan _tingkat yang sama atau lebih rendah_ dibandingkan senjata lainnya, senjata tersebut akan ditingkatkan ke level senjata lainnya. actors.hero.talent.combined_lethality.title=kombinasi mematikan diff --git a/core/src/main/assets/messages/actors/actors_it.properties b/core/src/main/assets/messages/actors/actors_it.properties index 6e471d1f9..3b2e20fbd 100644 --- a/core/src/main/assets/messages/actors/actors_it.properties +++ b/core/src/main/assets/messages/actors/actors_it.properties @@ -1384,7 +1384,7 @@ actors.mobs.npcs.ratking.not_sleeping=Non sto dormendo! actors.mobs.npcs.ratking.what_is_it=Che succede? Non ho tempo per queste sciocchezze. Il mio regno non si governa da solo! actors.mobs.npcs.ratking.confused=Cos... Dove sono? Il mio regno mi vuole! actors.mobs.npcs.ratking.crown_clothes=Mettiti dei vestiti! Non sei nelle condizioni di parlare con dei reali! -actors.mobs.npcs.ratking.crown_desc=Oooh, quella corona è per me !? Sembra molto più brillante della mia, quindi accetto gentilmente!\nIn effetti, penso di poterti offrire qualcosa come ricompensa per questa corona. Un potere tremendo che si addice a un eroe come te! Ti piacerebbe? +actors.mobs.npcs.ratking.crown_desc=Oooh, quella corona è per me !? Sembra molto più brillante della mia, quindi accetto gentilmente!\n\nIn effetti, penso di poterti offrire qualcosa come ricompensa per questa corona. Un potere tremendo che si addice a un eroe come te! Ti piacerebbe? actors.mobs.npcs.ratking.crown_yes=Ovviamente! actors.mobs.npcs.ratking.crown_info=Dimmi prima di più. actors.mobs.npcs.ratking.crown_no=Preferirei di no... diff --git a/core/src/main/assets/messages/actors/actors_ja.properties b/core/src/main/assets/messages/actors/actors_ja.properties index fb9531615..c58896917 100644 --- a/core/src/main/assets/messages/actors/actors_ja.properties +++ b/core/src/main/assets/messages/actors/actors_ja.properties @@ -1077,7 +1077,7 @@ actors.hero.talent.shadow_step.title=影の足踏み actors.hero.talent.shadow_step.desc=_+1:_ 盗賊が不可視中に煙玉を使用すると瞬時に発生し、チャージ消費量は_16%減少する_が、敵を盲目にしたり、他の天賦を発動させることはない。\n\n_+2:_ 盗賊が不可視中に煙玉を使用すると瞬時に発生し、チャージ消費量は_30%減少する_が、敵を盲目にしたり、他の天賦を発動させることはない。\n\n_+3:_ 盗賊が不可視中に煙玉を使用すると瞬時に発生し、チャージ消費量は_41%減少する_が、敵を盲目にしたり、他の天賦を発動させることはない。\n\n_+4:_ 盗賊が不可視中に煙玉を使用すると瞬時に発生し、チャージ消費量は_50%減少する_が、敵を盲目にしたり、他の天賦を発動させることはない。 actors.hero.talent.fear_the_reaper.title=死神の恐怖 -actors.hero.talent.fear_the_reaper.desc=_+1:_ 死の印が付けられた敵が0HPに至ると、その敵は_大怪我_を負った状態になる。\n_+2:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を負った状態になる。\n\n_+3:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を、3タイル以内の敵は_大怪我_を負った状態になる。\n\n_+4:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を、3タイル以内の敵は_恐怖と大怪我_を負った状態になる。 +actors.hero.talent.fear_the_reaper.desc=_+1:_ 死の印が付けられた敵が0HPに至ると、その敵は_大怪我_を負った状態になる。\n\n_+2:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を負った状態になる。\n\n_+3:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を、3タイル以内の敵は_大怪我_を負った状態になる。\n\n_+4:_ 死の印が付けられた敵が0HPに至ると、その敵は_恐怖と大怪我_を、3タイル以内の敵は_恐怖と大怪我_を負った状態になる。 actors.hero.talent.deathly_durability.title=死の耐久性 actors.hero.talent.deathly_durability.desc=_+1:_ 死の印によって殺された敵は、印を付けられたときのHPの_13%_に相当するシールドを盗賊に与える。\n\n_+2:_ 死の印によって殺された敵は、印を付けられたときのHPの_25%_に相当するシールドを盗賊に与える。\n\n_+3:_ 死の印によって殺された敵は、印を付けられたときのHPの_38%_に相当するシールドを盗賊に与える。\n\n_+4:_ 死の印によって殺された敵は、印を付けられたときのHPの_50%_に相当するシールドを盗賊に与える。 actors.hero.talent.double_mark.title=二連印 diff --git a/core/src/main/assets/messages/actors/actors_ko.properties b/core/src/main/assets/messages/actors/actors_ko.properties index f8d28942b..fea9ef6de 100644 --- a/core/src/main/assets/messages/actors/actors_ko.properties +++ b/core/src/main/assets/messages/actors/actors_ko.properties @@ -390,7 +390,7 @@ actors.buffs.revealedchar.desc=이 대상이 영웅에게 드러났으며, 어 actors.buffs.roots.name=속박 actors.buffs.roots.heromsg=당신은 움직일 수 없다! -actors.buffs.roots.desc=(자연적인 속박이든 마법 속박이든)속박은 대상을 발목을 잡아 땅에 묶어둡니다.\n\n속박에 걸린 대상은 그 자리에서 움직이지 못하며 대부분의 이동이 억제되지만, 이동을 제외한 모든 행동은 영향을 받지 않으며 순간이동도 정상적으로 할 수 있습니다.\n속박 효과의 남은 턴: %s +actors.buffs.roots.desc=(자연적인 속박이든 마법 속박이든)속박은 대상을 발목을 잡아 땅에 묶어둡니다.\n\n속박에 걸린 대상은 그 자리에서 움직이지 못하며 대부분의 이동이 억제되지만, 이동을 제외한 모든 행동은 영향을 받지 않으며 순간이동도 정상적으로 할 수 있습니다.\n\n속박 효과의 남은 턴: %s actors.buffs.scrollempower.name=주문서 강화 actors.buffs.scrollempower.desc=마법사가 최근에 읽은 주문서의 에너지가 마법 막대에 힘을 전달하고 있습니다!\n\n강화 수치 증가량: +%1$d\n남은 발사 횟수: %2$d @@ -1058,7 +1058,7 @@ actors.hero.talent.enhanced_rings.desc=_+1:_ 도적이 유물을 사용했을 actors.hero.talent.enhanced_lethality.title=향상된 치사율 actors.hero.talent.enhanced_lethality.desc=_+1:_ 암살자의 마음가짐 단계에 따라 체력이 _4/13/27/67%_ 미만인 적을 일격에 처치할 수 있게 됩니다.\n\n_+2:_ 암살자의 마음가짐 단계에 따라 체력이 _5/17/33/83%_ 미만인 적을 일격에 처치할 수 있게 됩니다.\n\n_+3:_ 암살자의 마음가짐 단계에 따라 체력이 _6/20/40/100%_ 미만인 적을 일격에 처치할 수 있게 됩니다.\n\n암살자는 기본적으로 마음가짐 단계에 따라 체력이 3/10/20/50% 미만인 적을 일격에 처치할 수 있습니다. actors.hero.talent.assassins_reach.title=암살자의 접근 -actors.hero.talent.assassins_reach.desc=_+1:_ 암살자의 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _1/3/4/6 타일_로 증가합니다.\n\n_+2:_ 암살자의 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _2/4/6/8 타일_로 증가합니다.\n\n_+3:_ 암살자가 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _2/5/7/10 타일_로 증가합니다.\n암살자는 함정과 적을 넘어서 점멸할 수 있지만, 벽처럼 단단한 지형 등은 뚫지 못합니다. +actors.hero.talent.assassins_reach.desc=_+1:_ 암살자의 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _1/3/4/6 타일_로 증가합니다.\n\n_+2:_ 암살자의 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _2/4/6/8 타일_로 증가합니다.\n\n_+3:_ 암살자가 마음가짐 단계에 따라 점멸할 수 있는 거리가 기존 1/2/3/4 타일에서 _2/5/7/10 타일_로 증가합니다.\n\n암살자는 함정과 적을 넘어서 점멸할 수 있지만, 벽처럼 단단한 지형 등은 뚫지 못합니다. actors.hero.talent.bounty_hunter.title=현상금 사냥꾼 actors.hero.talent.bounty_hunter.desc=_+1:_ 암살자가 마음가짐 공격으로 처치한 적이 아이템을 떨어트릴 확률이 그 단계에 따라 _2/4/8/16%_ 증가합니다.\n\n_+2:_ 암살자가 마음가짐 공격으로 처치한 적이 아이템을 떨어트릴 확률이 그 단계에 따라 _4/8/16/32%_ 증가합니다.\n\n_+3:_ 암살자가 마음가짐 공격으로 처치한 적이 아이템을 떨어트릴 확률이 그 단계에 따라 _6/12/24/48%_ 증가합니다. diff --git a/core/src/main/assets/messages/actors/actors_nl.properties b/core/src/main/assets/messages/actors/actors_nl.properties index af5fa8985..b0af7f68f 100644 --- a/core/src/main/assets/messages/actors/actors_nl.properties +++ b/core/src/main/assets/messages/actors/actors_nl.properties @@ -813,7 +813,7 @@ actors.hero.heroclass.mage_unlock=Om de Magiër te ontgrendelen _gebruik je een actors.hero.heroclass.rogue=schurk actors.hero.heroclass.rogue_desc_short=De Schurk kan vijanden ontwijken en vanuit onzichtbaarheid aanvallen met zijn _Schaduwmantel._ Hij _detecteert ook geheimen en vallen_ vanaf een grotere afstand. -actors.hero.heroclass.rogue_desc=De Schurk begint met een _unieke Schaduwmantel_, die hij kan gebruiken om naar believen onzichtbaar te worden.\nDe Schurk kan vanaf een grotere afstand _geheimen en vallen detecteren_.\nDe Schurk begint ook met _een dolk_, _drie werpmessen_, kleren gemaakt van stof, een waterzak en een fluwelen buidel.\nDe Schurk identificeert automatisch:_-_ Rol van Identificatie_-_ Toverdrank van Onzichtbaarheid_-_ Rol van Magische Kaartkennis +actors.hero.heroclass.rogue_desc=De Schurk begint met een _unieke Schaduwmantel_, die hij kan gebruiken om naar believen onzichtbaar te worden.\n\nDe Schurk kan vanaf een grotere afstand _geheimen en vallen detecteren_.\n\nDe Schurk begint ook met _een dolk_, _drie werpmessen_, kleren gemaakt van stof, een waterzak en een fluwelen buidel.\n\nDe Schurk identificeert automatisch:\n_-_ Rol van Identificatie\n_-_ Toverdrank van Onzichtbaarheid\n_-_ Rol van Magische Kaartkennis actors.hero.heroclass.rogue_unlock=Om de Schurk te ontgrendelen _voer je 10 verrassingsaanvallen uit in één spel._ actors.hero.heroclass.huntress=jaagster diff --git a/core/src/main/assets/messages/actors/actors_pl.properties b/core/src/main/assets/messages/actors/actors_pl.properties index a13ed4e35..273e3b3a8 100644 --- a/core/src/main/assets/messages/actors/actors_pl.properties +++ b/core/src/main/assets/messages/actors/actors_pl.properties @@ -573,7 +573,7 @@ actors.hero.abilities.cleric.trinity.etherealchains_use=Triada użyje efektu two actors.hero.abilities.cleric.trinity.hornofplenty_use=Triada pożywi cię jak efekt przekąski artefaktu kosztem _%2$s ładunków_. actors.hero.abilities.cleric.trinity.masterthievesarmband_use=Triada użyje efektu okradania wrogów za pomocą tego artefaktu z mocą _+%1$d_ kosztem _%2$s ładunków_. actors.hero.abilities.cleric.trinity.sandalsofnature_use=Triada nałoży efekt ukorzeniania tego artefaktu z losowym szkodliwym nasionem kosztem _%2$s ładunków_. -actors.hero.abilities.cleric.trinity.skeletonkey_use=Trinity will apply this artifact's insert effect, at the cost of _%2$s charge._ +actors.hero.abilities.cleric.trinity.skeletonkey_use=Triada nałoży efekt artefaktu, kosztem %2$s ładunków actors.hero.abilities.cleric.trinity.talismanofforesight_use=Triada użyje efektu skanowania tego artefaktu z mocą _+%1$d_ kosztem _%2$s ładunków_. actors.hero.abilities.cleric.trinity.timekeepershourglass_use=Triada użyje efekt zamrożenia czasu tego artefaktu na _%1$d_ tur kosztem _%2$s ładunków._ actors.hero.abilities.cleric.trinity.unstablespellbook_use=Triada użyje efektu losowego zwoju tego artefaktu z szansą _%1$d/10 na użycie egzotycznej wersji zwoju bez żadnych dodatkowych kosztów kosztem _%2$s ładunków_. @@ -595,7 +595,7 @@ actors.hero.abilities.cleric.powerofmany.ally_exists=Posiadasz już wzmocnionego actors.hero.abilities.cleric.powerofmany.no_vision=Nie możesz wybrać miejsca poza polem widzenia. actors.hero.abilities.cleric.powerofmany.only_allies=Możesz wzmacniać jedynie sojuszników. actors.hero.abilities.cleric.powerofmany.short_desc=Kleryk wykorzystuje _Moc Wielu_, wzmacniając istniejącego sojusznika lub tworząc nowego. -actors.hero.abilities.cleric.powerofmany.desc=Kleryk kieruje _Moc Wielu_, która albo wzmacnia istniejącego sojusznika, albo tworzy nowego wzmocnionego na 100 tur. Celowanie w puste miejsce tworzy nowego sojusznika.\nPodczas wzmacnienia przez Moc Wielu, każdy sojusznik zadaje +25% obrażeń, otrzymuje -25% obrażeń i dzieli swoją wizję z Klerykiem. Zyskują również 25 tarczy, gdy umiejętność jest użyta. \n\nKleryk zyskuje również trzy nowe zaklęcia, które mogą być rzucane tylko ze wzmocnionym sojusznikiem. Moc Wielu nie skończy się, gdy jeden z tych czarów jest aktywny. +actors.hero.abilities.cleric.powerofmany.desc=Kleryk kieruje _Moc Wielu_, która albo wzmacnia istniejącego sojusznika, albo tworzy nowego wzmocnionego na 100 tur. Celowanie w puste miejsce tworzy nowego sojusznika.\n\nPodczas wzmacnienia przez Moc Wielu, każdy sojusznik zadaje +25% obrażeń, otrzymuje -25% obrażeń i dzieli swoją wizję z Klerykiem. Zyskują również 25 tarczy, gdy umiejętność jest użyta. \n\nKleryk zyskuje również trzy nowe zaklęcia, które mogą być rzucane tylko ze wzmocnionym sojusznikiem. Moc Wielu nie skończy się, gdy jeden z tych czarów jest aktywny. actors.hero.abilities.cleric.powerofmany$powerbuff.name=moc wielu actors.hero.abilities.cleric.powerofmany$powerbuff.desc=Ten Sojusznik został wzmocniony Mocą Wielu, która zapewnia mu +25%% zadawanych obrażeń i -25%% otrzymywanych obrażeń. Będzie także dzielić swój zasięg widzenia z Klerykiem i będzie wzmacniany mocą wielu zaklęć.\n\nMoc Wielu będzie się utrzymywać, gdy sojusznicy, tacy jak pryzmatyczne obrazy, znikną, ale jej czas trwania będzie ciągle spadał.\n\nPozostałe tury efektu: %s. actors.hero.abilities.cleric.powerofmany$lightally.name=świetlisty sojusznik @@ -796,7 +796,7 @@ actors.hero.hero.noticed_smth=Zauważyłeś coś. actors.hero.hero.wait=... actors.hero.hero.search=szukanie actors.hero.hero.search_distracted=Trudno się skoncentrować, przeszukiwanie jest męczące. -actors.hero.hero.key_distracted=You fiddle with the lock but can't quite open it this time. +actors.hero.hero.key_distracted=Gmerasz przy zamku, lecz nie udało Ci się go otworzyć actors.hero.hero.pain_resist=Ból pozwala ci zwalczyć senność. actors.hero.hero.revive=Ankh eksploduje życiodajną energią! @@ -953,7 +953,7 @@ actors.hero.talent.double_jump.desc=_+1:_ Jeśli Wojownik wykonuje drugi skok w actors.hero.talent.expanding_wave.title=rosnąca fala actors.hero.talent.expanding_wave.desc=_+1:_ Zasięg fali uderzeniowej jest zwiększony do _6 pól_ z 5, a jej szerokość jest zwiększona do _75 stopni_ z 60.\n\n_+2:_ Zasięg fali uderzeniowej jest zwiększony do _7 pól_ z 5, a jej szerokość jest zwiększona do _90 stopni_ z 60.\n\n_+3:_ Zasięg fali uderzeniowej jest zwiększony do _8 pól_ z 5, a jej szerokość jest zwiększona do _105 stopni_ z 60.\n\n_+4:_ Zasięg fali uderzeniowej jest zwiększony do _9 pól_ z 5, a jej szerokość jest zwiększona do _120 stopni_ z 60. actors.hero.talent.striking_wave.title=atakująca fala -actors.hero.talent.striking_wave.desc=_+1:_ Fala uderzeniowa ma _30% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n_+2:_ Fala uderzeniowa ma _60% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n\n_+3:_ Fala uderzeniowa ma _90% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n\n_+4:_ Fala uderzeniowa ma _100% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń. Ponadto daje zaklęciom _+20% mocy_. +actors.hero.talent.striking_wave.desc=_+1:_ Fala uderzeniowa ma _30% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n\n_+2:_ Fala uderzeniowa ma _60% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n\n_+3:_ Fala uderzeniowa ma _90% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń.\n\n_+4:_ Fala uderzeniowa ma _100% szans_, by nałożyć efekty nakładane przy trafieniu, takie jak zaklęcia czy zwiększenie ciągu uderzeń. Ponadto daje zaklęciom _+20% mocy_. actors.hero.talent.shock_force.title=siła wstrząsu actors.hero.talent.shock_force.desc=_+1:_ Fala uderzeniowa zadaje o _20% więcej obrażeń_ i ma _25% szans_ na ogłuszenie zamiast okaleczenia.\n\n_+2:_ Fala uderzeniowa zadaje o _40% więcej obrażeń_ i ma _50% szans_ na ogłuszenie zamiast okaleczenia.\n\n_+3:_ Fala uderzeniowa zadaje o _60% więcej obrażeń_ i ma _75% szans_ na ogłuszenie zamiast okaleczenia.\n\n_+4:_ Fala uderzeniowa zadaje o _80% więcej obrażeń_ i ma _100% szans_ na ogłuszenie zamiast okaleczenia. diff --git a/core/src/main/assets/messages/actors/actors_pt.properties b/core/src/main/assets/messages/actors/actors_pt.properties index af4f270f6..207288187 100644 --- a/core/src/main/assets/messages/actors/actors_pt.properties +++ b/core/src/main/assets/messages/actors/actors_pt.properties @@ -77,7 +77,7 @@ actors.buffs.amok.name=cólera actors.buffs.amok.desc=Cólera causa um estado de grande ira e confusão em seu alvo.\n\nQuando uma criatura está encolerizada, ela irá atacar qualquer coisa que estiver por perto, seja amigo ou inimigo.\n\nTurnos de cólera restante: %s. actors.buffs.arcanearmor.name=armadura arcana -actors.buffs.arcanearmor.desc=Um escudo fino está envolvendo você, bloqueando parte do dano de ataques mágicos.\nSua armadura mágica está atualmente impulsionada em: 0-%d.\nTurnos até que a armadura arcana enfraqueça: %s. +actors.buffs.arcanearmor.desc=Um escudo fino está envolvendo você, bloqueando parte do dano de ataques mágicos.\n\nSua armadura mágica está atualmente impulsionada em: 0-%d.\n\nTurnos até que a armadura arcana enfraqueça: %s. actors.buffs.artifactrecharge.name=artefato recarregando actors.buffs.artifactrecharge.desc=A energia percorre você, aumentando a taxa em que seus artefatos equipados carregam.\n\nCada artefato é afetado de uma maneira um pouco diferente, mas todos eles ganharam cargas muito mais rapidamente que o normal.\n\nTurnos restantes: %s. @@ -1184,7 +1184,7 @@ actors.hero.talent.deadly_followup.title=Acompanhamento mortal actors.hero.talent.deadly_followup.desc=_+1:_ Quando a Duelista atingir um inimigo com uma arma de arremesso, causará _10% a mais de dano corpo a corpo_ a ele por 5 turnos.\n\n_+2:_ Quando a Duelista atingir um inimigo com uma arma de arremesso, causará _20% a mais de dano corpo a corpo_ a ele por 5 turnos.\n\n_+3:_ Quando a Duelista atingir um inimigo com uma arma de arremesso, causará _30% a mais de dano corpo a corpo_ a ele por 5 turnos. actors.hero.talent.varied_charge.title=Carga variada -actors.hero.talent.varied_charge.desc=_+1:_ A Campeã recupera instantaneamente _0,17 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo.\n_+2:_ A Campeã recupera instantaneamente _0,33 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo.\n_+3:_ A Campeã recupera instantaneamente _0,5 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo. +actors.hero.talent.varied_charge.desc=_+1:_ A Campeã recupera instantaneamente _0,17 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo.\n\n_+2:_ A Campeã recupera instantaneamente _0,33 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo.\n\n_+3:_ A Campeã recupera instantaneamente _0,5 carga de arma_ quando usa duas habilidades de arma diferentes, sem limite de tempo. actors.hero.talent.twin_upgrades.title=Aprimoramentos gêmeos actors.hero.talent.twin_upgrades.desc=_+1:_ Se uma das duas armas equipadas da Campeã tiver um nível inferior e for _2 ou mais tiers menores_ à outra arma, ela será aumentada para o nível da outra arma.\n\n_+2:_ Se uma das duas armas equipadas da Campeã tiver um nível inferior e for _1 ou mais tiers menores_ à outra arma, ela será aumentada para o nível da outra arma.\n\n_+3:_ Se uma das duas armas equipadas da Campeã tiver um nível inferior e for _do mesmo tier ou menor_ à outra arma, ela será aumentada para o nível da outra arma. actors.hero.talent.combined_lethality.title=Letalidade combinada @@ -1282,7 +1282,7 @@ actors.hero.talent.body_form.desc=O Clérigo pode conjurar _Forma Corporal_, que actors.hero.talent.mind_form.title=Forma mental actors.hero.talent.mind_form.desc=O Clérigo pode conjurar _Forma Mental_, que imbui a Trindade com o poder de uma varinha ou arma de arremesso que o Clérigo usou nesta partida, ao custo de 3 cargas.\n\n_+1:_ Quando a Trindade é usada, o Clérigo usa o efeito de disparo da varinha ou arremesso do item escolhido, como se fosse _+3._\n\n_+2:_ Quando Trindade é usada, o Clérigo usa o efeito de disparo da varinha ou arremesso do item escolhido, como se fosse _+4._\n\n_+3:_ Quando Trindade é usada, o Clérigo usa o efeito de disparo da varinha ou arremesso do item escolhido, como se fosse _+5._\n\n_+4:_ Quando Trindade é usada, o Clérigo usa o efeito de disparo da varinha ou arremesso do item escolhido, como se fosse _+6._\n\nA Trindade só pode ser imbuída com um efeito mental por vez. actors.hero.talent.spirit_form.title=Forma espiritual -actors.hero.talent.spirit_form.desc=O Clérigo pode conjurar _Forma Espiritual_, que imbui a Trindade com o poder de um anel ou artefato que o Clérigo identificou nesta partida (exceto o tomo sagrado), ao custo de 4 cargas.\n\n_+1:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+1_ por 20 turnos ou acionará um efeito de artefato em _+4._\n\n_+2:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+2_ por 20 turnos ou acionará um efeito de artefato em _+6._\n\n_+3:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+3_ por 20 turnos ou acionará um efeito de artefato em _+8._\n\n_+4:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+4_ por 20 turnos ou acionará o efeito de um artefato em _+10._\nA Trindade só pode ser imbuída com um efeito espiritual por vez. Artefatos têm variados efeitos e custos de carga de armadura quando acionados pela Trindade. +actors.hero.talent.spirit_form.desc=O Clérigo pode conjurar _Forma Espiritual_, que imbui a Trindade com o poder de um anel ou artefato que o Clérigo identificou nesta partida (exceto o tomo sagrado), ao custo de 4 cargas.\n\n_+1:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+1_ por 20 turnos ou acionará um efeito de artefato em _+4._\n\n_+2:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+2_ por 20 turnos ou acionará um efeito de artefato em _+6._\n\n_+3:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+3_ por 20 turnos ou acionará um efeito de artefato em _+8._\n\n_+4:_ Quando a Trindade é usada, o Clérigo ganhará um efeito de anel em _+4_ por 20 turnos ou acionará o efeito de um artefato em _+10._\n\nA Trindade só pode ser imbuída com um efeito espiritual por vez. Artefatos têm variados efeitos e custos de carga de armadura quando acionados pela Trindade. actors.hero.talent.beaming_ray.title=Raio radiante actors.hero.talent.beaming_ray.desc=O Clérigo pode lançar _Raio Radiante_ de um aliado fortalecido ao custo de 1 carga. Este raio pode atravessar paredes e teletransportar o aliado para um local específico. Se um inimigo estiver naquele local, o aliado aparecerá próximo ao inimigo e irá atacá-lo. O Raio Radiante pode até teletransportar aliados normalmente imóveis, mas tem metade do alcance ao fazê-lo.\n\n_+1:_ Raio Radiante tem um alcance máximo de _4 espaços_ e aumenta o bônus de Poder de Muitos para _+35% de dano_ contra o inimigo mais próximo por 10 turnos.\n\n_+2:_ Raio Radiante tem um alcance máximo de _8 espaços_ e aumenta o bônus de Poder de Muitos para _+40% de dano_ contra o inimigo mais próximo por 10 turnos.\n\n_+3:_ Raio Radiante tem um alcance máximo de _12 espaços_ e aumenta o bônus de Poder de Muitos para _+45% de dano_ contra o inimigo mais próximo por 10 turnos.\n\n_+4:_ Raio Radiante tem um alcance máximo de _16 espaços_ e aumenta o bônus de Poder de Muitos para _+50% de dano_ contra o inimigo mais próximo por 10 turnos. diff --git a/core/src/main/assets/messages/actors/actors_ru.properties b/core/src/main/assets/messages/actors/actors_ru.properties index 9c5292f1b..da7213db6 100644 --- a/core/src/main/assets/messages/actors/actors_ru.properties +++ b/core/src/main/assets/messages/actors/actors_ru.properties @@ -19,7 +19,7 @@ actors.blobs.foliage.desc=Потоки света пронзают мрак по actors.blobs.freezing.name=морозный воздух actors.blobs.freezing.desc=Воздух здесь неестественно холоден. -actors.blobs.goowarn.name=темная энергия +actors.blobs.goowarn.name=тёмная энергия actors.blobs.goowarn.desc=Здесь кружатся частицы тёмной энергии! actors.blobs.inferno.name=адское пламя diff --git a/core/src/main/assets/messages/actors/actors_sv.properties b/core/src/main/assets/messages/actors/actors_sv.properties index f64ef3770..c35076136 100644 --- a/core/src/main/assets/messages/actors/actors_sv.properties +++ b/core/src/main/assets/messages/actors/actors_sv.properties @@ -808,7 +808,7 @@ actors.hero.heroclass.warrior_unlock=Krigaren är automatiskt upplåst. actors.hero.heroclass.mage=magiker actors.hero.heroclass.mage_desc_short=Magikern är en expert på det övernaturliga och bär på en _magisk stav_ som är starkare än en trollstav. Staven kan _laddas med vilken trollstav_ som helst som Magikern hittar. -actors.hero.heroclass.mage_desc=Magikern börjar med en unik stav som laddas betydligt snabbare än en trollstav och har 1 laddning mer. Staven kan laddas med vilken trollstav som helst som magikern hittar i fängelsehålan. \n\nMagikern börjar också med en _trollstav med magiska projektiler_ laddad i sin stav, tygrustning, en vattenflaska och en sammetspåse. \n\nMagikern identifierar automatiskt:_-_ Identifieringsrullar_-_ Flytande eldpotioner_-_ Uppgraderingsrullar +actors.hero.heroclass.mage_desc=Magikern börjar med en unik stav som laddas betydligt snabbare än en trollstav och har 1 laddning mer. Staven kan laddas med vilken trollstav som helst som magikern hittar i fängelsehålan. \n\nMagikern börjar också med en _trollstav med magiska projektiler_ laddad i sin stav, tygrustning, en vattenflaska och en sammetspåse. \n\nMagikern identifierar automatiskt:\n_-_ Identifieringsrullar\n_-_ Flytande eldpotioner\n_-_ Uppgraderingsrullar actors.hero.heroclass.mage_unlock=_Använd en upgraderingsrulle för att göra något starkare_ så låser du upp Magikern. actors.hero.heroclass.rogue=skurk diff --git a/core/src/main/assets/messages/actors/actors_tr.properties b/core/src/main/assets/messages/actors/actors_tr.properties index 24cdb42d3..8d024a87a 100644 --- a/core/src/main/assets/messages/actors/actors_tr.properties +++ b/core/src/main/assets/messages/actors/actors_tr.properties @@ -169,7 +169,7 @@ actors.buffs.combo.action_name=birleşik saldırı actors.buffs.combo.combo=Art arda %d isabet! actors.buffs.combo.bad_target=Saldırı menzilindeki bir düşmanı hedeflemelisin. actors.buffs.combo.prompt=Saldırılacak bir hedef seç. -actors.buffs.combo.desc=Gladyatör başarılı darbeler indirdikçe ivme kazanır. Her saldırı kombo sayacını bir artırır, ancak vuruşlar arasında çok uzun süre geçmesi kombo sayacını 0'a sıfırlar. Gladyatör komboya sahipken, kırık mühründen sahip olduğu herhangi bir kalkan zayıflamaya başlamaz.\n\nKombo oluşturmak, ıskalamayan özel kombo saldırılarının kilidini açar! 2, 4, 6, 8 ve 10 kombo sayımında farklı bir saldırının kilidi açılır. Bazı hareketler komboyu sıfırlar ve bazıları sıfırlamaz, ancak her hareket kombo seansı başına yalnızca bir kez kullanılabilir.\n\nŞu anki kombo: %1$d.\nKombonun kaybedilmesine kalan hamle: %2$s. +actors.buffs.combo.desc=Gladyatör başarılı darbeler indirdikçe ivme kazanır. Her saldırı kombo sayacını bir artırır, ancak vuruşlar arasında çok uzun süre geçmesi kombo sayacını 0'a sıfırlar. Gladyatör komboya sahipken, kırık mühründen sahip olduğu herhangi bir kalkan zayıflamaya başlamaz.\n\nKombo oluşturmak, ıskalamayan özel kombo saldırılarının kilidini açar! 2, 4, 6, 8 ve 10 kombo sayımında farklı bir saldırının kilidi açılır. Bazı hareketler komboyu sıfırlar ve bazıları sıfırlamaz, ancak her hareket kombo seansı başına yalnızca bir kez kullanılabilir.\n\nŞu anki kombo: %1$d.\n\nKombonun kaybedilmesine kalan hamle: %2$s. actors.buffs.combo$combomove.clobber.name=döv actors.buffs.combo$combomove.clobber.desc=Bir düşmanı 2 karo geriye düşürür, ancak hasar vermez ve çukurlara düşüremez. Kombo değerini 1 arttırır. actors.buffs.combo$combomove.clobber.empower_desc=Bir düşmanı _3 karo geriye savurur, baş dönmesine neden olur ve çukurlara düşürebilir,_ ancak hasar vermez. Kombo değerini 1 arttırır. @@ -1092,7 +1092,7 @@ actors.hero.talent.perfect_copy.desc=_+1:_ Gölge klon, kahramanın en fazla HP' #huntress actors.hero.talent.natures_bounty.title=Doğanın ikramı -actors.hero.talent.natures_bounty.desc=_+1:_ Avcı, zindanın sonraki birkaç katını keşfederken uzun otların arasında gizlenmiş _4 meyveyi_ bulabilir.\n_+2:_ Avcı, zindanın sonraki birkaç katını keşfederken uzun otların arasında gizlenmiş _6 meyveyi_ bulabilir. \n\nMeyveler çabuk yenir, az miktarda tokluk hissi verir ve kullanılabilir bir tohum içerebilir. +actors.hero.talent.natures_bounty.desc=_+1:_ Avcı, zindanın sonraki birkaç katını keşfederken uzun otların arasında gizlenmiş _4 meyveyi_ bulabilir.\n\n_+2:_ Avcı, zindanın sonraki birkaç katını keşfederken uzun otların arasında gizlenmiş _6 meyveyi_ bulabilir. \n\nMeyveler çabuk yenir, az miktarda tokluk hissi verir ve kullanılabilir bir tohum içerebilir. actors.hero.talent.survivalists_intuition.title=Ormancının sezgisi actors.hero.talent.survivalists_intuition.desc=_+1:_ Avcı fırlatılan silahları _3 kat daha hızlı_ tanımlar.\n\n_+2:_ Avcı fırlatılan silahları _onlarla vurduğunda_ tanımlar. actors.hero.talent.followup_strike.title=Ardışık Saldırı @@ -1172,30 +1172,30 @@ actors.hero.talent.weapon_recharging.title=silah şarjı actors.hero.talent.weapon_recharging.desc=_+1:_ Düellocu, asa veya eser şarj etme güçlendirmelerinin etkisi altındayken her _15 turda_ bir birincil silah şarjı kazanır.\n\n_+2:_ Düellocu, asa veya eser şarj etme güçlendirmelerinin etkisi altındayken her _10 turda_ bir birincil silah şarjı kazanır. actors.hero.talent.weapon_recharging.meta_desc=_Bu yetenek farklı bir kahraman tarafından kazanılırsa_ +1'de şarj olurken +%5 yakın dövüş hasarı veya +2'de şarj olurken +%7,5 yakın dövüş hasarı vermesine neden olur. actors.hero.talent.lethal_haste.title=ölümcül acele -actors.hero.talent.lethal_haste.desc=_+1:_ Düellocu, silah yeteneği ile bir düşmana öldürücü bir darbe indirdiğinde, _3 tur_ değerinde anlık hareket kazanır.\n_+2:_ Düellocu, silah yeteneği ile bir düşmana öldürücü bir darbe indirdiğinde, _5 tur_ değerinde anlık hareket kazanır. +actors.hero.talent.lethal_haste.desc=_+1:_ Düellocu, silah yeteneği ile bir düşmana öldürücü bir darbe indirdiğinde, _3 tur_ değerinde anlık hareket kazanır.\n\n_+2:_ Düellocu, silah yeteneği ile bir düşmana öldürücü bir darbe indirdiğinde, _5 tur_ değerinde anlık hareket kazanır. actors.hero.talent.lethal_haste.meta_desc=_Bu yetenek farklı bir kahraman tarafından kazanılırsa_ bunun yerine 100 turluk bekleme süresiyle normal silah saldırılarıyla tetiklenir. actors.hero.talent.swift_equip.title=el çabukluğu -actors.hero.talent.swift_equip.desc=_+1:_ Düellocu, kuşandığı silahını her 20 turda bir kez anında değiştirebilir.\n_+2:_ Düellocu, kuşandığı silahını her 20 turda anında iki kez değiştirebilir.\nEğer Düellocu bu yeteneğe sahipse ve bekleme süresinde değilse, kuşanılmamış bir silahı hızlıca kullanmak onu kuşandıracaktır. +actors.hero.talent.swift_equip.desc=_+1:_ Düellocu, kuşandığı silahını her 20 turda bir kez anında değiştirebilir.\n\n_+2:_ Düellocu, kuşandığı silahını her 20 turda anında iki kez değiştirebilir.\n\nEğer Düellocu bu yeteneğe sahipse ve bekleme süresinde değilse, kuşanılmamış bir silahı hızlıca kullanmak onu kuşandıracaktır. actors.hero.talent.precise_assault.title=kesin saldırı actors.hero.talent.precise_assault.desc=_+1:_ Düellocu bir silah yeteneği kullandığında, 5 tur içindeki bir sonraki yakın dövüş saldırısında _2x isabet_ kazanır. \n\n_+2:_ Düellocu bir silah yeteneği kullandığında, 5 tur içindeki bir sonraki yakın dövüş saldırısında _5x isabet_ kazanır. \n\n_+3:_ Düellocu bir silah yeteneği kullandığında, 5 tur içindeki sonraki yakın dövüş saldırısında _sonsuz isabet_ kazanır. actors.hero.talent.precise_assault.meta_desc=_Bu yetenek farklı bir kahraman tarafından kazanılırsa_, bunun yerine yakın dövüş saldırı isabetini +1'de %10, +2'de %20 veya +3'te %30 artıracaktır. actors.hero.talent.deadly_followup.title=ölümcül takip -actors.hero.talent.deadly_followup.desc=_+1:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _10% daha fazla yakın dövüş hasarı_ verir.\n_+2:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _20% daha fazla yakın dövüş hasarı_ verir. \n\n_+3:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _30% daha fazla yakın dövüş hasarı_ verir. +actors.hero.talent.deadly_followup.desc=_+1:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _10% daha fazla yakın dövüş hasarı_ verir.\n\n_+2:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _20% daha fazla yakın dövüş hasarı_ verir. \n\n_+3:_ Düellocu fırlatılan bir silahla bir düşmana vurduğunda, 5 tur boyunca onlara _30% daha fazla yakın dövüş hasarı_ verir. actors.hero.talent.varied_charge.title=çeşitli şarj actors.hero.talent.varied_charge.desc=_+1:_ Şampiyon, iki farklı silah yeteneği kullandığında, zaman sınırlaması olmaksızın, anında _0,17 silah yükünü_ hemen kazanır.\n\n_+2:_ Şampiyon, iki farklı silah yeteneği kullandığında, zaman sınırlaması olmaksızın, anında _0,33 silah yükünü_ hemen kazanır.\n\n_+3:_ Şampiyon, iki farklı silah yeteneği kullandığında, zaman sınırlaması olmaksızın, anında _0,5 silah yükünü_ hemen kazanır. actors.hero.talent.twin_upgrades.title=ikiz yükseltmeler actors.hero.talent.twin_upgrades.desc=_+1:_ Şampiyon'un kuşandığı iki silahtan biri daha düşük bir seviyeye sahip olup, diğer silahtan _2 veya daha düşük bir düzeyde_ ise, diğer silahın seviyesine yükseltilir.\n\n_+2:_ Şampiyon'un kuşandığı iki silahtan biri daha düşük bir seviyeye sahip olup, diğer silahtan _1 veya daha düşük bir düzeyde_ ise, diğer silahın seviyesine yükseltilir.\n\n_+3:_ Şampiyon'un kuşandığı iki silahtan biri daha düşük bir seviyeye sahip olup, diğer silahla _aynı veya daha düşük bir düzeyde_ ise, diğer silahın seviyesine yükseltilir. actors.hero.talent.combined_lethality.title=birleşik öldürücülük -actors.hero.talent.combined_lethality.desc=_+1:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %13'ün altında kalan patron olmayan tüm düşmanları infaz edecektir.\n_+2:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %27'nin altında kalan boss olmayan tüm düşmanları infaz edecektir. \n\n_+3:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %40'ın altında kalan boss olmayan tüm düşmanları infaz edecektir. \n\nBu saldırı normal bir yakın dövüş silahı saldırısı veya bir silah yeteneğinin parçası olabilir. +actors.hero.talent.combined_lethality.desc=_+1:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %13'ün altında kalan patron olmayan tüm düşmanları infaz edecektir.\n\n_+2:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %27'nin altında kalan boss olmayan tüm düşmanları infaz edecektir. \n\n_+3:_ Şampiyon, farklı bir silahın yeteneğini kullandıktan hemen sonra bir yakın dövüş silahıyla saldırırsa, bu saldırı, HP'si %40'ın altında kalan boss olmayan tüm düşmanları infaz edecektir. \n\nBu saldırı normal bir yakın dövüş silahı saldırısı veya bir silah yeteneğinin parçası olabilir. actors.hero.talent.unencumbered_spirit.title=serbest ruh actors.hero.talent.unencumbered_spirit.desc=_+1:_ Keşiş, kullandığı her _kademe 3 veya daha düşük_ ekipman parçası için _%50 daha fazla enerji_ kazanır.\n\n_+2:_ Keşiş kullandığı her _kademe 2 veya daha düşük_ ekipman parçası için _%75 daha fazla enerji_ kazanır. 3. kademe avantajı değişmez.\n\n_+3:_ Keşiş kullandığı her _kademe 1 veya daha düşük_ ekipman parçası için %_100 daha fazla enerji_ kazanır. Kademe 2 ve 3 avantajları değişmez. Ayrıca ücretsiz bir kumaş zırh ve çivili eldiven kazanır. \n\nBu yeteneğin silahsız olmanın veya Güç Yüzüğü ile saldırmanın hiçbir faydası olmadığını unutmayın. actors.hero.talent.monastic_vigor.title=manastır canlılığı actors.hero.talent.monastic_vigor.desc=_+1:_ Keşişin _%100 enerjisi_ varsa, yetenekleri güçlendirilir. \n\n_+2:_ Keşişin _%80 veya daha fazla enerjisi_ varsa, yetenekleri güçlendirilir. \n\n_+3:_ Keşişin _%60 veya daha fazla enerjisi_ varsa, yetenekleri güçlendirilir. \n\nKullanıldığında: \n- Hızla silahlarınızın büyüsünü güçlendirir\n- Odaklanma anlıktır\n- Atılma +4 menzil kazanır\n- Dragon Kick +%50 hasar verir ve geri itme ve sersemletme etkisini yakındaki tüm düşmanlara uygular\n- Meditasyon, eksik HP'nin %20'sini yavaşça iyileştirir ve %80 hasar direnci sağlar. actors.hero.talent.combined_energy.title=toplu enerji -actors.hero.talent.combined_energy.desc=_+1:_ Keşiş 5 tur arayla bir silah yeteneği ve _4+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır._+2:_ Keşiş 5 tur arayla bir silah yeteneği ve _3+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır._+3:_ Keşiş 5 tur arayla bir silah yeteneği ve _2+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır. +actors.hero.talent.combined_energy.desc=_+1:_ Keşiş 5 tur arayla bir silah yeteneği ve _4+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır.\n_+2:_ Keşiş 5 tur arayla bir silah yeteneği ve _3+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır.\n_+3:_ Keşiş 5 tur arayla bir silah yeteneği ve _2+ enerji_ yeteneği kullanırsa harcanan 1 enerjiyi geri kazanır. actors.hero.talent.close_the_gap.title=Mesafeyi Kapat actors.hero.talent.close_the_gap.desc=_+1:_ Düellocu düelloya başlarken hedefine doğru _iki kareye kadar_ ışınlanır.\n\n_+2:_ Düellocu düelloya başlarken hedefine doğru _üç kareye kadar_ ışınlanır.\n\n_+3:_ Düellocu düelloya başlarken hedefine doğru _dört kareye kadar_ ışınlanır.\n\n_+4:_ Düellocu düelloya başlarken hedefine doğru _beş kareye kadar_ ışınlanır.\n\nBu hareket tehlikelerden ve düşmanlardan geçebilir, ancak duvar gibi katı arazilerden geçemez. Bir düşmanın meydan okunacak menzilde olup olmadığı belirlenirken ışınlanma dikkate alınır. @@ -1214,7 +1214,7 @@ actors.hero.talent.directed_power.desc=_+1:_ Elemental vuruşun doğrudan saldı actors.hero.talent.feigned_retreat.title=sahte geri çekilme actors.hero.talent.feigned_retreat.desc=_+1:_ Eğer bir düşman Düellocu'nun ardıl görüntüsüne saldırırsa, Düellocu _2 tur_ acelecilik kazanır.\n\n_+2:_ Eğer bir düşman Düellocu'nun ardıl görüntüsüne saldırırsa, Düellocu _4 tur_ acelecilik kazanır.\n\n_+3:_ Eğer bir düşman Düellocu'nun ardıl görüntüsüne saldırırsa, Düellocu _6 tur_ acelecilik kazanır.\n\n_+4:_ Eğer bir düşman Düellocu'nun ardıl görüntüsüne saldırırsa, Düellocu _8 tur_ acelecilik kazanır. actors.hero.talent.expose_weakness.title=zayıflığı ortaya çıkarmak -actors.hero.talent.expose_weakness.desc=_+1:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _2 tur_ boyunca zayıf ve savunmasız hale gelir. \n_+2:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _4 tur_ boyunca zayıf ve savunmasız hale gelir. \n_+3:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _6 tur_ boyunca zayıf ve savunmasız hale gelir._+4:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _8 tur_ boyunca zayıf ve savunmasız hale gelir. +actors.hero.talent.expose_weakness.desc=_+1:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _2 tur_ boyunca zayıf ve savunmasız hale gelir. \n_+2:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _4 tur_ boyunca zayıf ve savunmasız hale gelir. \n_+3:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _6 tur_ boyunca zayıf ve savunmasız hale gelir.\n_+4:_ Düellocunun sahte görüntüsüne saldıran düşmanlar, _8 tur_ boyunca zayıf ve savunmasız hale gelir. actors.hero.talent.counter_ability.title=karşı yetenek actors.hero.talent.counter_ability.desc=_+1:_ Düellocu, ardıl görüntüsü saldırıya uğradıktan sonraki 3 tur içinde bir silah yeteneği kullanırsa, bu yetenek _0,38 şarj_ daha az tüketir.\n\n_+2:_ Düellocu, ardıl görüntüsü saldırıya uğradıktan sonraki 3 tur içinde bir silah yeteneği kullanırsa, bu yetenek _0.77 şarj_ daha az tüketir.\n\n_+3:_ Düellocu, ardıl görüntüsü saldırıya uğradıktan sonraki 3 tur içinde bir silah yeteneği kullanırsa, bu yetenek _1.13 şarj_ daha az tüketir.\n\n_+4:_ Düellocu, ardıl görüntüsü saldırıya uğradıktan sonraki 3 tur içinde bir silah yeteneği kullanırsa, bu yetenek _1.5 şarj_ daha az tüketir. @@ -1280,7 +1280,7 @@ actors.hero.talent.flash.desc=_+1:_ Yükselmiş Biçim'deyken, Ruhban _3 karo_ u actors.hero.talent.body_form.title=Vücut Formu actors.hero.talent.body_form.desc=Ruhban, _Beden Biçimi_ büyüsünü kullanarak Trinity’yi bu koşuda tanımladığı bir büyü veya rünle güçlendirir.\nBu işlem 2 yük harcar.\n\n_+1:_ Trinity kullanıldığında, Ruhban seçilen etkinin etkisini _20_ tur boyunca kazanır.\n_+2:_ Trinity kullanıldığında, Ruhban seçilen etkinin etkisini _27_ tur boyunca kazanır.\n_+3:_ Trinity kullanıldığında, Ruhban seçilen etkinin etkisini _33_ tur boyunca kazanır.\n_+4:_ Trinity kullanıldığında, Ruhban seçilen etkinin etkisini _40_ tur boyunca kazanır.\n\nTrinity aynı anda yalnızca bir beden etkisi ile güçlendirilebilir.\nSeçilen rün nadir ve güçlü ise Trinity’nin zırh yükü maliyeti daha yüksek olur. actors.hero.talent.mind_form.title=Zihin Formu -actors.hero.talent.mind_form.desc=Ruhban, _Zihin Biçimi_ büyüsüyle Trinity’yi bu koşuda kullandığı bir asa veya fırlatmalı silahın gücüyle güçlendirir.\nBu işlem 3 yük harcar.\n\n_+1:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+3_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+2:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+4_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+3:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+5_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+4:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+6_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\nTrinity aynı anda yalnızca bir zihin etkisi ile güçlendirilebilir. +actors.hero.talent.mind_form.desc=Ruhban, _Zihin Biçimi_ büyüsüyle Trinity’yi bu koşuda kullandığı bir asa veya fırlatmalı silahın gücüyle güçlendirir.\nBu işlem 3 yük harcar.\n\n_+1:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+3_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+2:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+4_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+3:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+5_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n_+4:_ Trinity kullanıldığında, Ruhban seçilen öğenin _+6_ seviyesindeki ışınlama veya fırlatma etkisini uygular.\n\nTrinity aynı anda yalnızca bir zihin etkisi ile güçlendirilebilir. actors.hero.talent.spirit_form.title=Ruh Formu actors.hero.talent.spirit_form.desc=Ruhban, _Ruh Biçimi_ büyüsünü kullanarak Trinity’yi bu koşuda tanımladığı bir yüzük veya eser (kutsal kitap hariç) ile güçlendirir. Bu büyü 4 yük harcar.\n\n_+1:_ Trinity kullanıldığında, Ruhban 20 tur boyunca yüzüğün _+1_ seviyesindeki etkisini kazanır veya eserin _+4_ seviyesindeki etkisini tetikler.\n\n_+2:_ Trinity kullanıldığında, Ruhban 20 tur boyunca yüzüğün _+2_ seviyesindeki etkisini kazanır veya eserin _+6_ seviyesindeki etkisini tetikler.\n\n_+3:_ Trinity kullanıldığında, Ruhban 20 tur boyunca yüzüğün _+3_ seviyesindeki etkisini kazanır veya eserin _+8_ seviyesindeki etkisini tetikler.\n\n_+4:_ Trinity kullanıldığında, Ruhban 20 tur boyunca yüzüğün _+4_ seviyesindeki etkisini kazanır veya eserin _+10_ seviyesindeki etkisini tetikler.\n\nTrinity aynı anda yalnızca bir ruh etkisi taşıyabilir. Eserlerin etkileri ve zırh yük maliyetleri farklılık gösterir. diff --git a/core/src/main/assets/messages/actors/actors_vi.properties b/core/src/main/assets/messages/actors/actors_vi.properties index 981d93331..934e8b738 100644 --- a/core/src/main/assets/messages/actors/actors_vi.properties +++ b/core/src/main/assets/messages/actors/actors_vi.properties @@ -313,7 +313,7 @@ actors.buffs.momentum.running=đang chạy actors.buffs.momentum.resting=hồi phục actors.buffs.momentum.action_name=chạy actors.buffs.momentum.momentum_desc=Vận động viên tích lũy động năng khi anh ta di chuyển, anh ta có thể dùng lượng động năng đó để bắt đầu chạy.\n\nMỗi đơn vị động năng sẽ cho hai lượt chạy, và Vận động viên có thể lấy tối đa 10 đơn vị. Động năng sẽ nhanh chóng mất đi khi Vận động viên ngừng di chuyển. Đơn vị động năng hiện tại: %d. -actors.buffs.momentum.running_desc=Vận động viên tích lũy động năng khi anh ta di chuyển, anh ta có thể dùng lượng động năng đó để bắt đầu chạy.\n\nKhi đang chạy, Vận động viên di chuyển nhanh hơn 2 lần và nhận thêm khả năng né tránh dựa trên cấp độ của anh ta.\nLượt còn lại: %d. +actors.buffs.momentum.running_desc=Vận động viên tích lũy động năng khi anh ta di chuyển, anh ta có thể dùng lượng động năng đó để bắt đầu chạy.\n\nKhi đang chạy, Vận động viên di chuyển nhanh hơn 2 lần và nhận thêm khả năng né tránh dựa trên cấp độ của anh ta.\n\nLượt còn lại: %d. actors.buffs.momentum.resting_desc=Vận động viên tích lũy động năng khi anh ta di chuyển, anh ta có thể dùng lượng động năng đó để bắt đầu chạy.\n\nVận động viên cần thời gian hồi phục lại thể lực trước khi tiếp tục tích lũy động năng.\n\nLượt còn lại: %d. actors.buffs.monkenergy.name=năng lượng @@ -579,7 +579,7 @@ actors.hero.abilities.cleric.trinity.timekeepershourglass_use=Bộ ba sẽ trao actors.hero.abilities.cleric.trinity.unstablespellbook_use=Bộ ba sẽ trao hiệu ứng cuộn giấy ngẫu nhiên của cổ vật này với _%1$d/10_ tỉ lệ cung cấp phiên bản kì lạ mà không mất thêm chi phí, với chi phí _%2$s năng lượng._ actors.hero.abilities.cleric.trinity.cost=Chi phí năng lượng của kĩ năng này có thể thay đổi, nhưng thông thường nhất là _%d._ actors.hero.abilities.cleric.trinity.short_desc=Giáo sĩ nhận được một _Bộ ba_ kĩ năng, với khả năng mô phỏng lại trang bị mà anh đã thấy và có thể được chọn bằng cách sử dụng các thần chú mới. -actors.hero.abilities.cleric.trinity.desc=Giáo sĩ nhận một _Bộ ba_ kĩ năng áo giáp, và có thể chọn cho chúng nhiều hiệu ứng vật phẩm khác nhau bằng cách sử dụng ba thần chú mới. Mỗi một thần chú này tập trung vào mô phỏng hiệu ứng của các loại trang bị mà Giáo sĩ đã thẩm định trong lần chơi này: dạng thân thể (vũ khí và áo giáp), dạng trí tuệ (đũa phép và vũ khí ném) và dạng tâm hồn (nhẫn và cổ vật). \nMỗi dạng của Bộ ba có thể mang một hiệu ứng một lúc, và Giáo sĩ sẽ chọn dạng cần kích hoạt khi sử dụng Bộ ba. Bộ ba sẽ không nhân bản hiệu ứng của một thứ mà bạn hiện tại đã trang bị. +actors.hero.abilities.cleric.trinity.desc=Giáo sĩ nhận một _Bộ ba_ kĩ năng áo giáp, và có thể chọn cho chúng nhiều hiệu ứng vật phẩm khác nhau bằng cách sử dụng ba thần chú mới. Mỗi một thần chú này tập trung vào mô phỏng hiệu ứng của các loại trang bị mà Giáo sĩ đã thẩm định trong lần chơi này: dạng thân thể (vũ khí và áo giáp), dạng trí tuệ (đũa phép và vũ khí ném) và dạng tâm hồn (nhẫn và cổ vật). \n\nMỗi dạng của Bộ ba có thể mang một hiệu ứng một lúc, và Giáo sĩ sẽ chọn dạng cần kích hoạt khi sử dụng Bộ ba. Bộ ba sẽ không nhân bản hiệu ứng của một thứ mà bạn hiện tại đã trang bị. actors.hero.abilities.cleric.trinity$wndusetrinity.text=Chọn một dạng của Bộ ba để sử dụng. Hiệu ứng của các dạng khác nhau có thể có hiệu lực cùng một lúc. actors.hero.abilities.cleric.trinity$wndusetrinity.body=_Dạng thân thể: %s._ actors.hero.abilities.cleric.trinity$wndusetrinity.mind=_Dang trí tuệ: %s._ @@ -632,7 +632,7 @@ actors.hero.spells.beamingray$beamingrayboost.desc=Đồng minh này đã đư actors.hero.spells.blessspell.name=ban phước actors.hero.spells.blessspell.short_desc=Ban phước và tạo khiên chắn cho Giáo sĩ, ban phước và hồi phục những đối tượng khác. -actors.hero.spells.blessspell.desc=Giáo sĩ ban một phước lành thần thánh cho bản thân hoặc một nhân vật khác mà anh có thể nhìn thấy. \nKhi được sử dụng lên bản thân, hiệu ứng sẽ yếu hơn, trao %1$d lượt ban phước và %2$d rào chắn. \nKhi được sử dụng lên các nhân vật khác, thần chú sẽ mạnh hơn, trao %3$d lượt ban phước và hồi phục %4$d sinh lực. Sinh lực thừa sẽ được chuyển thành rào chắn. +actors.hero.spells.blessspell.desc=Giáo sĩ ban một phước lành thần thánh cho bản thân hoặc một nhân vật khác mà anh có thể nhìn thấy. \n\nKhi được sử dụng lên bản thân, hiệu ứng sẽ yếu hơn, trao %1$d lượt ban phước và %2$d rào chắn. \n\nKhi được sử dụng lên các nhân vật khác, thần chú sẽ mạnh hơn, trao %3$d lượt ban phước và hồi phục %4$d sinh lực. Sinh lực thừa sẽ được chuyển thành rào chắn. actors.hero.spells.bodyform.name=dạng thân thể actors.hero.spells.bodyform.short_desc=Chọn một phù phép hoặc ký tự cho Bộ ba. @@ -658,7 +658,7 @@ actors.hero.spells.divinesense$divinesensetracker.desc=Nhân vật này tạm th actors.hero.spells.divineintervention.name=thần linh can thiệp actors.hero.spells.divineintervention.short_desc=Tăng một lượng lớn khiên chắn cho Giáo sĩ và các đồng minh. -actors.hero.spells.divineintervention.desc=Giáo sĩ dồn một lượng sức mạnh to lớn từ cuốn sách thánh của anh vào bản thân và đồng minh, tăng cho tất cả lên %1$d khiên chắn và kéo dài Hình dạng thánh thêm %2$d lượt. Sức phòng thủ mạnh mẽ của thần chú này lại đi cùng chi phí năng lượng rất cao của nó. \nGiống như các khiên chắn khác được cung cấp bởi Hình dạng thánh, khiên chắn này không giảm dần như bình thường, nhưng sẽ hết ngay lập tức khi Hình dạng thánh kết thúc. +actors.hero.spells.divineintervention.desc=Giáo sĩ dồn một lượng sức mạnh to lớn từ cuốn sách thánh của anh vào bản thân và đồng minh, tăng cho tất cả lên %1$d khiên chắn và kéo dài Hình dạng thánh thêm %2$d lượt. Sức phòng thủ mạnh mẽ của thần chú này lại đi cùng chi phí năng lượng rất cao của nó. \n\nGiống như các khiên chắn khác được cung cấp bởi Hình dạng thánh, khiên chắn này không giảm dần như bình thường, nhưng sẽ hết ngay lập tức khi Hình dạng thánh kết thúc. actors.hero.spells.flash.name=dịch chuyển actors.hero.spells.flash.prompt=Chọn một vị trí @@ -670,7 +670,7 @@ actors.hero.spells.guidinglight.short_desc=Gây sát thương phép thuật từ actors.hero.spells.guidinglight.desc=Giáo sĩ phóng một tia năng lượng phép thuật vào một mục tiêu, gây 2-8 sát thương và chiếu sáng chúng. Đòn tấn công vật lí không bị vướng kế tiếp nhắm vào một kẻ địch được chiếu sáng chắc chắn sẽ trúng. actors.hero.spells.guidinglight.desc_priest=_Thần chú này mạnh hơn khi được sử dụng bởi Linh mục._ Lần đầu tiên sử dụng thần chú này sau mỗi 50 lượt sẽ không tốn năng lượng cuốn sách, và hiệu ứng chiếu sáng sẽ được tiêu thụ bằng chói lọi, các đũa phép, nhân vật khác, và các cổ vật ảnh hưởng trực tiếp tới kẻ địch. Khi hiệu ứng chiếu sáng được sử dụng theo cách này, nó sẽ gây thêm sát thương phép thuật bằng với cấp độ của Linh mục + 5. actors.hero.spells.guidinglight$guidinglightpriestcooldown.name=Ánh sáng dẫn đường -actors.hero.spells.guidinglight$guidinglightpriestcooldown.desc=Giáo sĩ sẽ có thể sử dụng Ánh sáng dẫn đường miễn phí một lần nữa sau khi 50 lượt trôi qua. \nLượt còn lại: %s. +actors.hero.spells.guidinglight$guidinglightpriestcooldown.desc=Giáo sĩ sẽ có thể sử dụng Ánh sáng dẫn đường miễn phí một lần nữa sau khi 50 lượt trôi qua. \n\nLượt còn lại: %s. actors.hero.spells.guidinglight$illuminated.name=được chiếu sáng actors.hero.spells.guidinglight$illuminated.desc=Nhân vật này đang phát sáng do bị trúng phải ánh sáng dẫn dường. Dù ánh sáng phát ra không đủ mạnh để chiếu sáng khu vực xung quanh, hiệu ứng phép thuật này sẽ khiến việc nhắm các đòn tấn công vào chúng dễ dàng hơn nhiều cho Giáo sĩ. actors.hero.spells.guidinglight$illuminated.desc_priest=Linh mục còn có thể tiêu thụ hiệu ứng chiếu sáng bằng chói lọi, một phát bắn từ đũa phép, đòn tấn công từ một đồng minh, hoặc các hiệu ứng từ một số cổ vật. Sử dụng hiệu ứng chiếu sáng bằng cách này sẽ gây thêm sát thương phép thuật bằng với cấp độ của Linh mục + 5. @@ -679,7 +679,7 @@ actors.hero.spells.guidinglight$illuminated.desc_generic=Những người hùng actors.hero.spells.hallowedground.name=đất thánh actors.hero.spells.hallowedground.prompt=Chọn một vị trí actors.hero.spells.hallowedground.short_desc=Hồi phục đồng minh, làm chậm kẻ địch, và lan rộng cỏ trong một phạm vi. -actors.hero.spells.hallowedground.desc=Linh mục tập trung phép thuật thần thánh của mình vào trong mặt đất gần đó, tạo ra một khu vực thánh địa rộng %1$dx%1$d trong 20 lượt. \nKhi được sử dụng, thần chú này sẽ hồi phục 15 sinh lực cho tất cả đồng minh (đồng minh khỏe mạnh và Linh mục sẽ nhận lá chắn), tạm thời bám rễ vào kẻ địch và lan rộng cỏ ngắn. \nThánh địa sẽ hồi 1 sinh lực cho các đồng minh mỗi lượt (đồng minh khỏe mạnh và Linh mục sẽ nhận lá chắn), làm kẻ địch bị què và khiến cỏ cao mọc lên ngẫu nhiên. \nThánh địa có thể bị phá hủy bởi lửa và sẽ tạo ra cỏ dập nếu các hiệu ứng hồi phục tự động bị vô hiệu hoặc nếu Linh mục đã không nhận thêm kinh nghiệm trong một thời gian dài. +actors.hero.spells.hallowedground.desc=Linh mục tập trung phép thuật thần thánh của mình vào trong mặt đất gần đó, tạo ra một khu vực thánh địa rộng %1$dx%1$d trong 20 lượt. \n\nKhi được sử dụng, thần chú này sẽ hồi phục 15 sinh lực cho tất cả đồng minh (đồng minh khỏe mạnh và Linh mục sẽ nhận lá chắn), tạm thời bám rễ vào kẻ địch và lan rộng cỏ ngắn. \n\nThánh địa sẽ hồi 1 sinh lực cho các đồng minh mỗi lượt (đồng minh khỏe mạnh và Linh mục sẽ nhận lá chắn), làm kẻ địch bị què và khiến cỏ cao mọc lên ngẫu nhiên. \n\nThánh địa có thể bị phá hủy bởi lửa và sẽ tạo ra cỏ dập nếu các hiệu ứng hồi phục tự động bị vô hiệu hoặc nếu Linh mục đã không nhận thêm kinh nghiệm trong một thời gian dài. actors.hero.spells.hallowedground$hallowedterrain.desc=Mặt đất đã trở thành thánh địa ở đây. Thánh địa làm chậm kẻ địch, hồi phục đồng minh và khiến cỏ lan rộng. actors.hero.spells.holyintuition.name=trực giác thánh @@ -939,7 +939,7 @@ actors.hero.talent.enraged_catalyst.desc=_+1:_ Các phù phép và lời nguyề actors.hero.talent.cleave.title=chẻ đôi actors.hero.talent.cleave.desc=_+1:_ Thời gian bổ sung Đấu sĩ nhận được khi giết một kẻ địch được tăng từ 15 lên _30 lượt_.\n\n_+2:_ Thời gian bổ sung Đấu sĩ nhận được khi giết một kẻ địch được tăng từ 15 lên _45 lượt_.\n\n_+3:_ Thời gian bổ sung Đấu sĩ nhận được khi giết một kẻ địch được tăng từ 15 lên _60 lượt_. actors.hero.talent.lethal_defense.title=phòng thủ tuyệt đối -actors.hero.talent.lethal_defense.desc= _+1:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 50 lượt_.\n_+2:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 100 lượt_.\n_+3:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 150 lượt_.\n\nThời gian hồi khiên chắn có thể được giảm tới thấp nhất là -150 lượt theo cách này, tức là nó sẽ ngay lập tức hồi lại sau khi được kích hoạt. +actors.hero.talent.lethal_defense.desc= _+1:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 50 lượt_.\n\n_+2:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 100 lượt_.\n\n_+3:_ Khi Đấu sĩ giết 1 kẻ địch với một đòn đánh combo, thời gian hồi của khiên chắn từ con dấu vỡ của anh ấy được _giảm 150 lượt_.\n\nThời gian hồi khiên chắn có thể được giảm tới thấp nhất là -150 lượt theo cách này, tức là nó sẽ ngay lập tức hồi lại sau khi được kích hoạt. actors.hero.talent.enhanced_combo.title=đòn combo nâng cao actors.hero.talent.enhanced_combo.desc=_+1:_ Khi chuỗi combo của Đấu sĩ là 7 hoặc cao hơn, tầm đẩy lùi của Đánh đẩy lùi tăng lên 3, gây chóng mặt và có thể đẩy kẻ địch vào hố.\n\n_+2:_ Đi kèm với hiệu ứng của +1, khi chuỗi combo của Đấu sĩ là 9 hoặc cao hơn, Phản đòn sẽ hoạt động trên nhiều đòn tấn công.\n\n_+3:_ Bên cạnh hiệu ứng của +1 và +2, Đấu sĩ có thể bật nhảy đến 3 ô khi sử dụng combo Đập, Nghiền nát hay Cuồng bạo. @@ -1002,7 +1002,7 @@ actors.hero.talent.excess_charge.desc=_+1:_ Khi gậy phép của Battlemage đ actors.hero.talent.soul_siphon.title=hút linh hồn actors.hero.talent.soul_siphon.desc=_+1:_ Sát thương vật lý được gây ra bởi các nhân vật khác sẽ kích hoạt con dấu linh hồn của Hắc pháp sư với _hiệu suất 13%_.\n\n_+2:_ Sát thương vật lý được gây ra bởi các nhân vật khác sẽ kích hoạt con dấu linh hồn của Hắc pháp sư với _hiệu suất 27%_.\n\n_+3:_ Sát thương vật lý được gây ra bởi các nhân vật khác sẽ kích hoạt con dấu linh hồn của Hắc pháp sư với _hiệu suất 40%_. actors.hero.talent.soul_eater.title=kẻ ăn linh hồn -actors.hero.talent.soul_eater.desc= _+1:_ Con dấu linh hồn cho _0.33 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _10% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết.\n_+2:_ Con dấu linh hồn cho _0.67 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _20% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết.\n_+3:_ Con dấu linh hồn cho _1 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _30% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết. +actors.hero.talent.soul_eater.desc= _+1:_ Con dấu linh hồn cho _0.33 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _10% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết.\n\n_+2:_ Con dấu linh hồn cho _0.67 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _20% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết.\n\n_+3:_ Con dấu linh hồn cho _1 lượt_ no cho mỗi đòn đánh gây sát thương vật lí. Kẻ địch bị đánh dấu linh hồn có _30% cơ hội_ để kích hoạt hiệu ứng-khi-ăn khi chúng chết. actors.hero.talent.necromancers_minions.title=tay sai của kẻ chiêu hồn actors.hero.talent.necromancers_minions.desc=_+1:_ Khi một kẻ địch bị đánh dấu linh hồn bị chết, Hắc pháp sư có _13% cơ hội_ để hồi sinh chúng dưới dạng những bóng ma bị tha hóa.\n\n_+2:_ Khi một kẻ địch bị đánh dấu linh hồn bị chết, Hắc pháp sư có _27% cơ hội_ để hồi sinh chúng dưới dạng những bóng ma bị tha hóa.\n\n_+3:_ Khi một kẻ địch bị đánh dấu linh hồn bị chết, Hắc pháp sư có _40% cơ hội_ để hồi sinh chúng dưới dạng những bóng ma bị tha hóa. @@ -1029,7 +1029,7 @@ actors.hero.talent.longrange_warp.desc=_+1:_ Pháp sư giờ có thể dịch ch #rogue actors.hero.talent.cached_rations.title=khẩu phần ẩn giấu -actors.hero.talent.cached_rations.desc= _+1:_ Kẻ cướp có thể tìm thấy _2 khẩu phần tiếp tế_ đặt trong các rương trong khi anh ta khám phá một vài tầng tiếp theo của hầm ngục.\n_+2:_ Kẻ cướp có thể tìm thấy _3 khẩu phần tiếp tế_ đặt trong các rương trong khi anh ta khám phá một vài tầng tiếp theo của hầm ngục.\n\nKhẩu phần tiếp tế được ăn nhanh chóng, hồi một lượng no vừa phải, hồi phục 5 sinh lực, và hồi 1 năng lượng cho chiếc áo choàng bóng tối. +actors.hero.talent.cached_rations.desc= _+1:_ Kẻ cướp có thể tìm thấy _2 khẩu phần tiếp tế_ đặt trong các rương trong khi anh ta khám phá một vài tầng tiếp theo của hầm ngục.\n\n_+2:_ Kẻ cướp có thể tìm thấy _3 khẩu phần tiếp tế_ đặt trong các rương trong khi anh ta khám phá một vài tầng tiếp theo của hầm ngục.\n\nKhẩu phần tiếp tế được ăn nhanh chóng, hồi một lượng no vừa phải, hồi phục 5 sinh lực, và hồi 1 năng lượng cho chiếc áo choàng bóng tối. actors.hero.talent.thiefs_intuition.title=trực giác của kẻ trộm actors.hero.talent.thiefs_intuition.desc=_+1:_ Kẻ cướp thẩm định những chiếc nhẫn _nhanh hơn gấp 2 lần_, và thẩm định loại nhẫn _khi hắn đeo nó_.\n\n_+2:_ Kẻ cướp thẩm định những chiếc nhẫn _khi hắn đeo chúng_, và thẩm định loại của một chiếc nhẫn _khi hắn nhặt được nó_. actors.hero.talent.sucker_punch.title=cú đấm bất ngờ @@ -1042,7 +1042,7 @@ actors.hero.talent.mystical_meal.desc=_+1:_ Ăn thức ăn khiến Kẻ cướp actors.hero.talent.inscribed_stealth.title=con chữ lén lút actors.hero.talent.inscribed_stealth.desc=_+1:_ Kẻ cướp nhận _3 lượt_ tàng hình sau khi đọc một cuộn giấy hoặc sử dụng một vật phẩm thần chú.\n_+2:_ Kẻ cướp nhận _5 lượt_ tàng hình sau khi đọc một cuộn giấy hoặc sử dụng một vật phẩm thần chú.\n\nThời lượng tàng hình được nhân đôi khi sử dụng một cuộn giấy nâng cấp, biến đổi, hoặc các vật phẩm giả kim cần được chế tạo từ những cuộn giấy đó.\n\nVới các vật phẩm giả kim có số lượng đầu ra lớn hơn (vd: hầu hết các thần chú), tài năng này có tỉ lệ được kích hoạt dựa trên số lượng món vật phẩm đó được tạo ra. actors.hero.talent.wide_search.title=tìm kiếm rộng -actors.hero.talent.wide_search.desc=_+1:_ Phạm vi tìm kiếm của Kẻ cướp được tăng từ một hình vuông 5x5 lên một _hình tròn 7x7_.\n_+2:_ Phạm vi tìm kiếm của Kẻ cướp được tăng từ một hình vuông 5x5 lên một _hình vuông 7x7_. +actors.hero.talent.wide_search.desc=_+1:_ Phạm vi tìm kiếm của Kẻ cướp được tăng từ một hình vuông 5x5 lên một _hình tròn 7x7_.\n\n_+2:_ Phạm vi tìm kiếm của Kẻ cướp được tăng từ một hình vuông 5x5 lên một _hình vuông 7x7_. actors.hero.talent.wide_search.meta_desc=_Nếu tài năng này được nhận bởi một người hùng khác_, nó sẽ tăng phạm vi tìm kiếm của họ từ một hình vuông 3x3 lên một hình tròn 5x5 ở +1, hoặc một hình vuông 5x5 ở +2. actors.hero.talent.silent_steps.title=bước chân tĩnh lặng actors.hero.talent.silent_steps.desc=_+1:_ Kẻ cướp sẽ không đánh thức các kẻ địch đang ngủ khi hắn ta đang _cách chúng 3 ô ở lên_.\n\n_+2:_ Kẻ cướp sẽ không đánh thức các kẻ địch đang ngủ khi hắn ta đang _không ở gần kề với chúng_. @@ -1072,21 +1072,21 @@ actors.hero.talent.speedy_stealth.desc=_+1:_ Vận động viên nhận 2 điể actors.hero.talent.hasty_retreat.title=rút lui gấp actors.hero.talent.hasty_retreat.desc=_+1:_ Sau khi biến đi mất Kẻ cướp nhận _1 lượt_ nhanh nhẹn và vô hình.\n\n_+2:_ Sau khi biến đi mất Kẻ cướp nhận _2 lượt_ nhanh nhẹn và vô hình.\n\n_+3:_ Sau khi biến đi mất Kẻ cướp nhận _3 lượt_ nhanh nhẹn và vô hình.\n\n_+4:_ Sau khi biến đi mất Kẻ cướp nhận _4 lượt_ nhanh nhẹn và vô hình. actors.hero.talent.body_replacement.title=sự thế thân -actors.hero.talent.body_replacement.desc= _+1:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _20 sức khỏe và 1-3 giáp_ đằng sau.\n_+2:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _40 sức khỏe và 2-6 giáp_ đằng sau.\n\n_+3:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _60 sức khỏe và 3-9 giáp_ đằng sau.\n\n_+4:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _80 sức khỏe và 4-8 giáp_ đằng sau.\n\nChỉ có một mồi nhử có thể hoạt động tại một thời điểm. +actors.hero.talent.body_replacement.desc= _+1:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _20 sức khỏe và 1-3 giáp_ đằng sau.\n\n_+2:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _40 sức khỏe và 2-6 giáp_ đằng sau.\n\n_+3:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _60 sức khỏe và 3-9 giáp_ đằng sau.\n\n_+4:_ Sau khi dịch chuyển, Kẻ cướp để lại một mồi nhử gỗ có _80 sức khỏe và 4-8 giáp_ đằng sau.\n\nChỉ có một mồi nhử có thể hoạt động tại một thời điểm. actors.hero.talent.shadow_step.title=bước đi bóng tối actors.hero.talent.shadow_step.desc=_+1:_ Nếu Kẻ cướp sử dụng bom khói khi đang tàng hình, nó xảy ra ngay lập tức và có phí năng lượng _giảm 16%_, nhưng cũng không làm mù kẻ địch hay kích hoạt các tài năng khác.\n\n_+2:_ Nếu Kẻ cướp sử dụng bom khói khi đang tàng hình, nó xảy ra ngay lập tức và có phí năng lượng _giảm 30%_, nhưng cũng không làm mù kẻ địch hay kích hoạt các tài năng khác.\n\n_+3:_ Nếu Kẻ cướp sử dụng bom khói khi đang tàng hình, nó xảy ra ngay lập tức và có phí năng lượng _giảm 41%_, nhưng cũng không làm mù kẻ địch hay kích hoạt các tài năng khác.\n\n_+4:_ Nếu Kẻ cướp sử dụng bom khói khi đang tàng hình, nó xảy ra ngay lập tức và có phí năng lượng _giảm 50%_, nhưng cũng không làm mù kẻ địch hay kích hoạt các tài năng khác. actors.hero.talent.fear_the_reaper.title=hãy sợ cái chết -actors.hero.talent.fear_the_reaper.desc=_+1:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _bị què_.\n_+2:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _sợ hãi và bị què_.\n_+3:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _sợ hãi và bị què_ và kẻ địch trong vòng 3 ô trở nên _bị què_. \n\n_+4:_ Khi một kẻ địch bị đánh dấu để chết đạt có 0 hp, chúng trở nên _sợ hãi và bị què_ và kẻ địch trong vòng 3 ô trở nên _sợ hãi và bị què_. +actors.hero.talent.fear_the_reaper.desc=_+1:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _bị què_.\n\n_+2:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _sợ hãi và bị què_.\n\n_+3:_ Khi một kẻ địch bị đánh dấu để chết đạt 0 hp, chúng trở nên _sợ hãi và bị què_ và kẻ địch trong vòng 3 ô trở nên _bị què_. \n\n_+4:_ Khi một kẻ địch bị đánh dấu để chết đạt có 0 hp, chúng trở nên _sợ hãi và bị què_ và kẻ địch trong vòng 3 ô trở nên _sợ hãi và bị què_. actors.hero.talent.deathly_durability.title=sự bền bỉ chết người -actors.hero.talent.deathly_durability.desc= _+1:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _13_% sinh lực của chúng khi chúng bị đánh dấu.\n_+2:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _25_% sinh lực của chúng khi chúng bị đánh dấu.\n_+3:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _38_% sinh lực của chúng khi chúng bị đánh dấu.\n_+4:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _50_% sinh lực của chúng khi chúng bị đánh dấu. +actors.hero.talent.deathly_durability.desc= _+1:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _13_% sinh lực của chúng khi chúng bị đánh dấu.\n\n_+2:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _25_% sinh lực của chúng khi chúng bị đánh dấu.\n\n_+3:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _38_% sinh lực của chúng khi chúng bị đánh dấu.\n\n_+4:_ Kẻ địch bị giết bởi con dấu chết cho Kẻ cướp lượng khiên bằng với _50_% sinh lực của chúng khi chúng bị đánh dấu. actors.hero.talent.double_mark.title=con dấu đôi actors.hero.talent.double_mark.desc=_+1:_ Đánh dấu một mục tiêu thứ hai cùng lúc với mục tiêu thứ nhất có phí năng lượng được _giảm 30%_.\n\n_+2:_ Đánh dấu một mục tiêu thứ hai cùng lúc với mục tiêu thứ nhất có phí năng lượng được _giảm 50%_.\n\n_+3:_ Đánh dấu một mục tiêu thứ hai cùng lúc với mục tiêu thứ nhất có phí năng lượng được _giảm 65%_.\n\n_+4:_ Đánh dấu một mục tiêu thứ hai cùng lúc với mục tiêu thứ nhất có phí năng lượng được _giảm 75%_. actors.hero.talent.shadow_blade.title=lưỡi kiếm bóng đêm actors.hero.talent.shadow_blade.desc=_+1:_ Bản sao bóng tối nhận thêm _8%_ sát thương của người hùng mỗi lượt, và có _25% khả năng_ sử dụng phù phép từ vũ khí của người hùng.\n\n_+2:_ Bản sao bóng tối nhận thêm _16%_ sát thương của người hùng mỗi lượt, và có _50% khả năng_ sử dụng phù phép từ vũ khí của người hùng.\n\n_+3:_ Bản sao bóng tối nhận thêm _24%_ sát thương của người hùng mỗi lượt, và có _75% khả năng_ sử dụng phù phép từ vũ khí của người hùng.\n\n_+4:_ Bản sao bóng tối nhận thêm _32%_ sát thương của người hùng mỗi lượt, và có _100% khả năng_ sử dụng phù phép từ vũ khí của người hùng. actors.hero.talent.cloned_armor.title=áo giáp nhân bản -actors.hero.talent.cloned_armor.desc= _+1:_ Bản sao bóng tối nhận thêm _12%_ giá trị áo giáp của người hùng, và có _25% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n_+2:_ Bản sao bóng tối nhận thêm _24%_ giá trị áo giáp của người hùng, và có _50% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n\n_+3:_ Bản sao bóng tối nhận thêm _36%_ giá trị áo giáp của người hùng, và có _75% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n_+4:_ Bản sao bóng tối nhận thêm _48%_ giá trị áo giáp của người hùng, và có _100% khả năng_ sử dụng ký tự trên áo giáp của người hùng. +actors.hero.talent.cloned_armor.desc= _+1:_ Bản sao bóng tối nhận thêm _12%_ giá trị áo giáp của người hùng, và có _25% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n\n_+2:_ Bản sao bóng tối nhận thêm _24%_ giá trị áo giáp của người hùng, và có _50% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n\n_+3:_ Bản sao bóng tối nhận thêm _36%_ giá trị áo giáp của người hùng, và có _75% khả năng_ sử dụng ký tự trên áo giáp của người hùng.\n\n_+4:_ Bản sao bóng tối nhận thêm _48%_ giá trị áo giáp của người hùng, và có _100% khả năng_ sử dụng ký tự trên áo giáp của người hùng. actors.hero.talent.perfect_copy.title=bản sao hoàn hảo actors.hero.talent.perfect_copy.desc=_+1:_ Bản sao bóng tối nhận thêm _10%_ sinh lực tối đa của anh hùng, và có thể ngay lập tức tráo chỗ với anh hùng cách đó lên tới _1 ô_.\n\n_+2:_ Bản sao bóng tối nhận thêm _20%_ sinh lực tối đa của anh hùng, và có thể ngay lập tức tráo chỗ với anh hùng cách đó lên tới _2 ô_.\n\n_+3:_ Bản sao bóng tối nhận thêm _30%_ sinh lực tối đa của anh hùng, và có thể ngay lập tức tráo chỗ với anh hùng cách đó lên tới _3 ô_.\n\n_+4:_ Bản sao bóng tối nhận thêm _40%_ sinh lực tối đa của anh hùng, và có thể ngay lập tức tráo chỗ với anh hùng cách đó lên tới _4 ô_. @@ -1098,7 +1098,7 @@ actors.hero.talent.survivalists_intuition.desc=_+1:_ Nữ thợ săn thẩm đ actors.hero.talent.followup_strike.title=đòn nối tiếp actors.hero.talent.followup_strike.desc=_+1:_ Khi Nữ thợ săn đánh một kẻ địch với cung của cô ấy hay 1 vũ khí ném, đòn đánh cận chiến tiếp theo của cô ấy với kẻ địch đó gây _thêm 2 sát thương_.\n\n_+2:_ Khi Nữ thợ săn đánh một kẻ địch với cung của cô ấy hay 1 vũ khí ném, đòn đánh cận chiến tiếp theo của cô ấy với kẻ địch đó gây _thêm 3 sát thương_. actors.hero.talent.natures_aid.title=sự hỗ trợ của thiên nhiên -actors.hero.talent.natures_aid.desc= _+1:_ Nữ thợ săn nhận 0-2 lượng giáp da vỏ cây, nó sẽ mất dần sau mỗi _3 lượt_ khi hiệu ứng thực vật được kích hoạt trong tầm nhìn của cô ấy.\n_+2:_ Nữ thợ săn nhận 0-2 lượng giáp da vỏ cây, nó sẽ mất dần sau mỗi _5 lượt_ khi hiệu ứng thực vật được kích hoạt trong tầm nhìn của cô ấy. +actors.hero.talent.natures_aid.desc= _+1:_ Nữ thợ săn nhận 0-2 lượng giáp da vỏ cây, nó sẽ mất dần sau mỗi _3 lượt_ khi hiệu ứng thực vật được kích hoạt trong tầm nhìn của cô ấy.\n\n_+2:_ Nữ thợ săn nhận 0-2 lượng giáp da vỏ cây, nó sẽ mất dần sau mỗi _5 lượt_ khi hiệu ứng thực vật được kích hoạt trong tầm nhìn của cô ấy. actors.hero.talent.invigorating_meal.title=bữa ăn đầy năng lượng actors.hero.talent.invigorating_meal.desc=_+1:_ Việc ăn thức ăn tốn Nữ thợ săn 1 lượt (những quả mọng được ăn ngay lập tức) và cho cô ấy _1 lượt nhanh nhẹn_.\n\n_+2:_ Việc ăn thức ăn tốn Nữ thợ săn 1 lượt (những quả mọng được ăn ngay lập tức) và cho cô ấy _2 lượt nhanh nhẹn_. @@ -1278,11 +1278,11 @@ actors.hero.talent.flash.title=thần tốc actors.hero.talent.flash.desc=_+1:_ Khi ở trong Hình dạng thánh, Giáo sĩ có thể sử dụng _Thần tốc_ để dịch chuyển với khoảng cách lên tới _3 ô_.\n\n_+2:_ Khi ở trong Hình dạng thánh, Giáo sĩ có thể sử dụng _Thần tốc_ để dịch chuyển với khoảng cách lên tới _4 ô_.\n\n_+3:_ Khi ở trong Hình dạng thánh, Giáo sĩ có thể sử dụng _Thần tốc_ để dịch chuyển với khoảng cách lên tới _5 ô_.\n\n_+4:_ Khi ở trong Hình dạng thánh, Giáo sĩ có thể sử dụng _Thần tốc_ để dịch chuyển với khoảng cách lên tới _6 ô_.\n\nThần tốc ban đầu có chi phí 2 năng lượng của cuốn sách, và thêm 1 năng lượng sau mỗi lần được sử dụng trong cùng một lần sử dụng hình dạng thánh. actors.hero.talent.body_form.title=dạng thân thể -actors.hero.talent.body_form.desc=Giáo sĩ có thể sử dụng _Dạng thân thể_, giúp truyền cho Bộ ba sức mạnh của một phù phép hoặc ký tự mà Giáo sĩ đã thẩm định được trong lần chơi này, với chi phí 2 năng lượng. \n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _20 lượt._ \n_+2:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _27 lượt._ \n_+3:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _33 lượt._ \n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _40 lượt._ \nBộ ba chỉ có thể mang một hiệu ứng thân thể một lúc. Chi phí năng lượng áo giáp của Bộ ba sẽ cao hơn nếu ký tự được chọn là ký tự hiếm và mạnh. +actors.hero.talent.body_form.desc=Giáo sĩ có thể sử dụng _Dạng thân thể_, giúp truyền cho Bộ ba sức mạnh của một phù phép hoặc ký tự mà Giáo sĩ đã thẩm định được trong lần chơi này, với chi phí 2 năng lượng. \n\n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _20 lượt._ \n\n_+2:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _27 lượt._ \n\n_+3:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _33 lượt._ \n\n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ nhận được hiệu ứng đã chọn trong _40 lượt._ \n\nBộ ba chỉ có thể mang một hiệu ứng thân thể một lúc. Chi phí năng lượng áo giáp của Bộ ba sẽ cao hơn nếu ký tự được chọn là ký tự hiếm và mạnh. actors.hero.talent.mind_form.title=dạng trí tuệ -actors.hero.talent.mind_form.desc=Giáo sĩ có thể sử dụng _Dạng trí tuệ_, giúp truyền cho Bộ ba sức mạnh của của một cây đũa phép hoặc vũ khí ném mà Giáo sĩ đã thẩm định được trong lần chơi này, với chi phí 3 năng lượng. \n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+3._ _+2_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+4._ _+3:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+5._ \n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+6._\n\nBộ ba chỉ có thể mang một hiệu ứng trí tuệ một lúc. +actors.hero.talent.mind_form.desc=Giáo sĩ có thể sử dụng _Dạng trí tuệ_, giúp truyền cho Bộ ba sức mạnh của của một cây đũa phép hoặc vũ khí ném mà Giáo sĩ đã thẩm định được trong lần chơi này, với chi phí 3 năng lượng. \n\n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+3._ \n\n_+2_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+4._ \n\n_+3:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+5._ \n\n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ sử dụng hiệu ứng bắn hoặc ném của vật phẩm đã chọn, như thể nó ở cấp _+6._\n\nBộ ba chỉ có thể mang một hiệu ứng trí tuệ một lúc. actors.hero.talent.spirit_form.title=dạng tâm hồn -actors.hero.talent.spirit_form.desc=Giáo sĩ có thể sử dụng _Dạng tâm hồn_, giúp truyền cho Bộ ba sức mạnh của một chiếc nhẫn hoăc cổ vật mà Giáo sĩ đã thẩm định được trong lần chơi này (ngoại trừ cuốn sách thánh), với chi phí 4 năng lượng.\n\n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+1_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+4._\n\n_+2:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+2_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+6._\n_+3:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+3_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+8._\n\n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+4_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+10._\n\nBộ ba chỉ có thể mang một hiệu ứng tâm hồn một lúc. Các cổ vật có hiệu ứng và chi phí năng lượng áo giáp khác nhau khi được kích hoạt bởi Bộ ba. +actors.hero.talent.spirit_form.desc=Giáo sĩ có thể sử dụng _Dạng tâm hồn_, giúp truyền cho Bộ ba sức mạnh của một chiếc nhẫn hoăc cổ vật mà Giáo sĩ đã thẩm định được trong lần chơi này (ngoại trừ cuốn sách thánh), với chi phí 4 năng lượng.\n\n_+1:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+1_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+4._\n\n_+2:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+2_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+6._\n\n_+3:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+3_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+8._\n\n_+4:_ Khi sử dụng Bộ ba, Giáo sĩ sẽ nhận được hiệu ứng của một chiếc nhẫn ở cấp _+4_ trong 20 lượt, hoặc sẽ kích hoạt hiệu ứng của một cổ vật ở cấp _+10._\n\nBộ ba chỉ có thể mang một hiệu ứng tâm hồn một lúc. Các cổ vật có hiệu ứng và chi phí năng lượng áo giáp khác nhau khi được kích hoạt bởi Bộ ba. actors.hero.talent.beaming_ray.title=tia rực sáng actors.hero.talent.beaming_ray.desc=Giáo sĩ có thể sử dụng _Tia rực sáng_ từ một đồng minh được cường hoá với chi phí 1 năng lượng. Tia sáng này có thể đi xuyên tường và dịch chuyển đồng minh đến vị trí được chọn. Nếu có một kẻ địch đang ở vị trí đó, đồng minh sẽ xuất hiện bên cạnh kẻ địch và nhắm vào chúng. Tia rực sáng còn có thể dịch chuyển các đồng minh bất động, nhưng tầm xa sẽ giảm một nửa khi làm vậy.\n\n_+1:_ Tia rực sáng có tầm xa tối đa là _4 ô,_ và tăng hiệu ứng của Sức mạnh số đông lên _+35% sát thương_ đối với kẻ địch gần nhất trong 10 lượt.\n\n_+2:_ Tia rực sáng có tầm xa tối đa là _8 ô,_ và tăng hiệu ứng của Sức mạnh số đông lên _+40% sát thương_ đối với kẻ địch gần nhất trong 10 lượt.\n\n_+3:_ Tia rực sáng có tầm xa tối đa là _12 ô,_ và tăng hiệu ứng của Sức mạnh số đông lên _+45% sát thương_ đối với kẻ địch gần nhất trong 10 lượt.\n\n_+4:_ Tia rực sáng có tầm xa tối đa là _16 ô,_ và tăng hiệu ứng của Sức mạnh số đông lên _+50% sát thương_ đối với kẻ địch gần nhất trong 10 lượt. @@ -1459,7 +1459,7 @@ actors.mobs.armoredstatue.desc=Bạn sẽ nghĩ rằng đó chỉ là một tron actors.mobs.armoredstatue.desc_arm_wep=Mặc dù bản thân bức tượng được làm bằng đá, _%1$s_ và _%2$s_ nó đang trang bị trông như thật. actors.mobs.bandit.name=tên cướp điên -actors.mobs.bandit.desc=Một tên trộm tinh nhuệ, điểm khác biệt nổi bật nằm ở chiếc áo choàng tím xa hoa hơn. Mặc dù có kỹ thuật giỏi hơn, chúng cũng đã trở nên mất trí như những tên cướp thông thường. \nNgoài việc ăn cướp từ bạn, những tên cướp điên sẽ gây mù, què, và đầu độc bạn! Tuy nhiên, chúng có nhiều khả năng mang thêm vật phẩm hơn một tên trộm thông thường. +actors.mobs.bandit.desc=Một tên trộm tinh nhuệ, điểm khác biệt nổi bật nằm ở chiếc áo choàng tím xa hoa hơn. Mặc dù có kỹ thuật giỏi hơn, chúng cũng đã trở nên mất trí như những tên cướp thông thường. \n\nNgoài việc ăn cướp từ bạn, những tên cướp điên sẽ gây mù, què, và đầu độc bạn! Tuy nhiên, chúng có nhiều khả năng mang thêm vật phẩm hơn một tên trộm thông thường. actors.mobs.bat.name=dơi hút máu actors.mobs.bat.desc=Những cư dân nhanh nhẹn và cứng đầu trong hang động này nguy hiểm hơn nhiều so với vẻ ngoài của chúng. Chúng hồi lại sinh lực sau mỗi lần đánh trúng, khiến chúng có thể đánh bại những đối thủ lớn hơn nhiều. diff --git a/core/src/main/assets/messages/actors/actors_zh-hant.properties b/core/src/main/assets/messages/actors/actors_zh-hant.properties index de3b54fb4..c7fadb9f5 100644 --- a/core/src/main/assets/messages/actors/actors_zh-hant.properties +++ b/core/src/main/assets/messages/actors/actors_zh-hant.properties @@ -1,17 +1,17 @@ ###blobs actors.blobs.blizzard.name=暴風雪 -actors.blobs.blizzard.desc=暴風雪在此處肆掠。 +actors.blobs.blizzard.desc=此處正在遭受暴風雪肆掠。 actors.blobs.confusiongas.name=致眩氣體 -actors.blobs.confusiongas.desc=致眩氣體在此處旋繞。 +actors.blobs.confusiongas.desc=此處充斥著致眩氣體。 actors.blobs.electricity.name=電場 -actors.blobs.electricity.desc=明亮的火花在這片電場不斷地閃爍。 +actors.blobs.electricity.desc=此處充斥著高壓電力,火花從中爆出。 actors.blobs.electricity.rankings_desc=觸電 actors.blobs.electricity.ondeath=你因觸電身亡…… actors.blobs.fire.name=火焰 -actors.blobs.fire.desc=火焰在此處燃燒。 +actors.blobs.fire.desc=此處正在遭受火焰肆虐。 actors.blobs.foliage.name=落葉 actors.blobs.foliage.desc=光柱劃破了地下花園中的黑暗。 @@ -23,35 +23,35 @@ actors.blobs.goowarn.name=黑暗能量 actors.blobs.goowarn.desc=黑暗能量在此處湧動! actors.blobs.inferno.name=獄火 -actors.blobs.inferno.desc=一陣獄火在這裡肆虐。 +actors.blobs.inferno.desc=此處正在遭受獄火肆虐。 actors.blobs.paralyticgas.name=麻痺氣體 -actors.blobs.paralyticgas.desc=一股麻痺氣體正環繞於此。 +actors.blobs.paralyticgas.desc=此處充斥著麻痹氣體。 actors.blobs.regrowth.name=再生養分 actors.blobs.sacrificialfire.name=獻祭烈焰 -actors.blobs.sacrificialfire.desc=這是一座祭壇,承載著祭祀之火。在這裡死亡的生物會化為祭品,獻給地下城中的亡靈。\n\n或許只要獻祭夠多,就能得到回報? +actors.blobs.sacrificialfire.desc=這座祭壇承載著祭祀之火。在這裡死亡的生物會化為祭品,獻給地下城中的亡靈。\n\n或許只要獻祭夠多,就能得到回報? actors.blobs.sacrificialfire.worthy=火焰吞噬了你的祭品,燒得更旺盛了。 actors.blobs.sacrificialfire.unworthy=火焰吞噬了你的祭品,但火勢沒有任何變化。 actors.blobs.sacrificialfire.reward=火焰突然竄高,隨後消散在空中,並留下了回報! actors.blobs.smokescreen.name=煙幕 -actors.blobs.smokescreen.desc=此處飄浮著烏黑的濃煙。 +actors.blobs.smokescreen.desc=烏黑的濃煙在此處飄浮。 actors.blobs.stenchgas.name=腐臭氣體 -actors.blobs.stenchgas.desc=腐臭的氣味在此處飄浮。 +actors.blobs.stenchgas.desc=此處充斥著腐臭的氣味。 actors.blobs.stormcloud.name=暴雨 actors.blobs.stormcloud.desc=水氣在此處翻騰。 actors.blobs.toxicgas.name=毒氣 -actors.blobs.toxicgas.desc=青綠色的毒氣在此處盤繞。 +actors.blobs.toxicgas.desc=此處充斥著青綠色的毒氣。 actors.blobs.toxicgas.rankings_desc=窒息 actors.blobs.toxicgas.ondeath=你被毒氣毒死了…… actors.blobs.corrosivegas.name=腐蝕酸霧 -actors.blobs.corrosivegas.desc=致命酸蝕氣體在此處旋繞。 +actors.blobs.corrosivegas.desc=此處充斥著致命酸蝕氣體。 actors.blobs.waterofawareness.name=靈知之井 actors.blobs.waterofawareness.procced=在你小酌一口時,你感覺到知識湧入了你的頭腦。 @@ -68,7 +68,7 @@ actors.blobs.web.desc=這裡所有東西都被厚厚的蜘蛛網覆蓋著。任 ###buffs actors.buffs.adrenaline.name=激素湧動 -actors.buffs.adrenaline.desc=由腎上腺素帶來的純粹的潛能爆發,激素湧動能夠增強一名角色的移動和攻擊速度。\n\n激素湧動允許角色擁有2倍的移動速度和1.5倍的攻擊速度。\n\n效果剩餘:%s回合。 +actors.buffs.adrenaline.desc=激素湧動能引出角色的潛在體能,因而增強移動和攻擊速度。\n\n激素湧動使角色擁有2倍的移動速度和1.5倍的攻擊速度。\n\n效果剩餘:%s回合。 actors.buffs.adrenalinesurge.name=力量激發 actors.buffs.adrenalinesurge.desc=一股強大的力量,可惜只是暫時的。\n\n力量加成:+%d。\n距離效果衰减還剩:%s回合。 @@ -966,7 +966,7 @@ actors.hero.talent.even_the_odds.desc=_+1:_苦痛堅忍結束時,在格內每 #mage actors.hero.talent.empowering_meal.title=食能強魔 -actors.hero.talent.empowering_meal.desc=_+1:_英雄進食後,後3次法杖釋能攻擊,得到額外_2點額外傷害_。\n\n_+2:_英雄進食後,後3次法杖釋能攻擊,得到額外_3點額外傷害_。 +actors.hero.talent.empowering_meal.desc=_+1:_英雄進食後,後3次法杖釋能攻擊,得到_2點額外傷害_。\n\n_+2:_英雄進食後,後3次法杖釋能攻擊,得到_3點額外傷害_。 actors.hero.talent.scholars_intuition.title=活用所學 actors.hero.talent.scholars_intuition.desc=_+1:_鑑定法杖速度提升_3倍_。\n\n_+2:_法杖將於_使用時_鑑定。 actors.hero.talent.lingering_magic.title=魔能餘勢 @@ -1042,7 +1042,7 @@ actors.hero.talent.mystical_meal.desc=_+1:_英雄進食只需一回合(食用可 actors.hero.talent.inscribed_stealth.title=咒術偽裝 actors.hero.talent.inscribed_stealth.desc=_+1:_當英雄使用卷軸、秘卷或法術結晶時,將獲得_3回合_隱形。\n\n_+2:_當英雄使用卷軸、秘卷或法術結晶時,將獲得_5回合_隱形。\n\n如果使用的為升級、轉化卷軸或其製品,隱形回合數會加倍。\n\n大多法術結晶都是多產量製品,這種情況下此天賦會根據一次的產量來決定觸發機率。 actors.hero.talent.wide_search.title=廣域搜尋 -actors.hero.talent.wide_search.desc=_+1:_盜賊的搜索範圍由方形5x5擴大至_圓形7x7_。\n_+2:_盜賊的搜索範圍由方形5x5擴大至_方形7x7_。 +actors.hero.talent.wide_search.desc=_+1:_盜賊的搜索範圍由方形5x5擴大至_圓形7x7_。\n\n_+2:_盜賊的搜索範圍由方形5x5擴大至_方形7x7_。 actors.hero.talent.wide_search.meta_desc=_如果其他英雄獲得此天賦_,由於他們的搜索範圍為方形3x3,所以在+1時只會變成圓形5x5、+2則為方形5x5。 actors.hero.talent.silent_steps.title=低調行事 actors.hero.talent.silent_steps.desc=_+1:_英雄不會吵醒_3格外_的敵人。\n\n_+2:_英雄不會吵醒_未與其相鄰_的敵人。 @@ -1455,7 +1455,7 @@ actors.mobs.albino.desc=這是一種稀有的老鼠,有著純白色的毛皮 actors.mobs.albino.discover_hint=此罕見敵人只在地下城某區域現身。 actors.mobs.armoredstatue.name=裝甲石像 -actors.mobs.armoredstatue.desc=你以為這隻是地下城裡的另一尊靜止石像,但它發出紅光的眼睛讓你知道這可沒這麼簡單。\n雕像裝備著精良的護甲,看上去相當堅硬很難對付。 +actors.mobs.armoredstatue.desc=你以為這隻是地下城裡的另一尊靜止石像,但它發出紅光的眼睛讓你知道這可沒這麼簡單。\n\n雕像裝備著精良的護甲,看上去相當堅硬很難對付。 actors.mobs.armoredstatue.desc_arm_wep=儘管雕像本身是用石頭做的,但它裝備著的_%1$s_和_%2$s_看起來像是真的。 actors.mobs.bandit.name=瘋狂強盜 @@ -1474,7 +1474,7 @@ actors.mobs.brute.enraged=激怒 actors.mobs.brute.def_verb=格擋 actors.mobs.brute.desc=暴徒是豺狼人中體型最龐大、力量最強壯且生命力最頑強的精英。在因傷致死前,他們會陷入瘋狂之中,獲得暫時的護盾和極高的傷害加成。 actors.mobs.brute$bruterage.name=豺狼狂暴 -actors.mobs.brute$bruterage.desc=這位豺狼暴徒的死亡已經不可避免,但牠想拉你一起陪葬! \n\n時間的推移或是外界的傷害都會消磨護盾。在護盾消散殆盡之際,暴徒會徹底消亡。然而,一定要小心,在這一階段牠會造成巨額傷害!\n剩餘的護盾:%d。 +actors.mobs.brute$bruterage.desc=這位豺狼暴徒的死亡已經不可避免,但牠想拉你一起陪葬! \n\n時間的推移或是外界的傷害都會消磨護盾。在護盾消散殆盡之際,暴徒會徹底消亡。然而,一定要小心,在這一階段牠會造成巨額傷害!\n\n剩餘的護盾:%d。 actors.mobs.causticslime.name=蝕黑史萊姆 actors.mobs.causticslime.desc=這個史萊姆似乎已經被地底滲透的黑暗能量完全侵蝕了。它已經失去了體表原有的綠色光澤,並且在不斷滴落腐蝕淤泥。 @@ -1703,7 +1703,7 @@ actors.mobs.rat.desc=雖說老鼠們具有攻擊性,可它們依舊是下水 actors.mobs.ripperdemon.name=惡魔撕裂者 actors.mobs.ripperdemon.leap=惡魔撕裂者正準備撲殺! -actors.mobs.ripperdemon.desc=這種恐怖的生物是惡魔利用這裡殘留的眾多矮人屍骸而組成的。 惡魔撕裂者外觀類似蒼白瘦弱的矮人,具有殘缺不全的軀幹與尖利修長的骨爪。\n惡魔撕裂者難以承受沉重的打擊,但它們行動迅捷並十分危險。 它們能夠瞬間撲過極遠的距離,再用自己的骨爪刺穿目標。 +actors.mobs.ripperdemon.desc=這種恐怖的生物是惡魔利用這裡殘留的眾多矮人屍骸而組成的。 惡魔撕裂者外觀類似蒼白瘦弱的矮人,具有殘缺不全的軀幹與尖利修長的骨爪。\n\n惡魔撕裂者難以承受沉重的打擊,但它們行動迅捷並十分危險。 它們能夠瞬間撲過極遠的距離,再用自己的骨爪刺穿目標。 actors.mobs.rotheart.name=腐莓之心 actors.mobs.rotheart.desc=腐莓的果實很獨特。一般植物的果實會逐漸腐爛並給種子提供養分,但這種果實會生長,變硬,並把種子牢牢包裹在內。它為果實裡生長的內部器官提供保護。這種巨大的球狀物被視為成年的腐莓植物的心臟部分。 @@ -1717,7 +1717,7 @@ actors.mobs.scorpio.name=魔蠍 actors.mobs.scorpio.desc=這些巨大的節肢類惡魔生物會盡可能避免一切近距離接觸,並且會在遠處射出能夠致殘的尖刺。 actors.mobs.senior.name=武僧大師 -actors.mobs.senior.desc=這些僧侶皆是狂熱的信徒,傾其所能從一切異族手中保護國王的安全。 狂熱的信仰使得他們將自己的意志交給了國王,只剩下沒有思想的軀殼在城市中遊蕩。\n這隻武僧掌握了精深的格鬥技巧,相較於普通的武僧,他能在移動時更迅速恢復集中。 精神集中的武僧會必定格擋住一次進攻,哪怕是必中的攻擊。 武僧在移動時會更快地集中精神,在戰鬥中就相對慢些。 +actors.mobs.senior.desc=這些僧侶皆是狂熱的信徒,傾其所能從一切異族手中保護國王的安全。 狂熱的信仰使得他們將自己的意志交給了國王,只剩下沒有思想的軀殼在城市中遊蕩。\n\n這隻武僧掌握了精深的格鬥技巧,相較於普通的武僧,他能在移動時更迅速恢復集中。 精神集中的武僧會必定格擋住一次進攻,哪怕是必中的攻擊。 武僧在移動時會更快地集中精神,在戰鬥中就相對慢些。 actors.mobs.shaman.name=豺狼薩滿 actors.mobs.shaman.bolt_kill=魔力的衝擊粉碎了你…… diff --git a/core/src/main/assets/messages/actors/actors_zh.properties b/core/src/main/assets/messages/actors/actors_zh.properties index 41229e09d..8ae3ba4df 100644 --- a/core/src/main/assets/messages/actors/actors_zh.properties +++ b/core/src/main/assets/messages/actors/actors_zh.properties @@ -796,7 +796,7 @@ actors.hero.hero.noticed_smth=你注意到了些什么。 actors.hero.hero.wait=... actors.hero.hero.search=搜索 actors.hero.hero.search_distracted=你没办法集中精力,探索周边异常费力。 -actors.hero.hero.key_distracted=你摆弄了一下这把锁,却无法打开它。 +actors.hero.hero.key_distracted=你没能解开锁,还得接着试试。 actors.hero.hero.pain_resist=疼痛使你得以抵抗睡意。 actors.hero.hero.revive=重生十字章迸裂出苏生的能量! diff --git a/core/src/main/assets/messages/items/items_el.properties b/core/src/main/assets/messages/items/items_el.properties index fd17563d2..9e401f36b 100644 --- a/core/src/main/assets/messages/items/items_el.properties +++ b/core/src/main/assets/messages/items/items_el.properties @@ -66,7 +66,7 @@ items.armor.glyphs.viscosity.deferred=Αναβεβλημένη %d items.armor.glyphs.viscosity$defereddamage.name=αναβεβλημένη ζημιά items.armor.glyphs.viscosity$defereddamage.ondeath=Η αναβεβλημένη ζημιά σε εξόντωσε... items.armor.glyphs.viscosity$defereddamage.rankings_desc=Εξοντώθηκες από: αναβεβλημένη ζημιά -items.armor.glyphs.viscosity$defereddamage.desc=Η εισερχόμενη ζημιά σού προκαλείται σταδιακά με το πέρασμα του χρόνου αντί για ακαριαία.\nΑναβεβλημένη ζημιά που απομένει: %d. +items.armor.glyphs.viscosity$defereddamage.desc=Η εισερχόμενη ζημιά σού προκαλείται σταδιακά με το πέρασμα του χρόνου αντί για ακαριαία.\n\nΑναβεβλημένη ζημιά που απομένει: %d. items.armor.glyphs.viscosity.desc=Αυτός ο γλύφος μπορεί να αποθηκεύει τη ζημιά που δέχεται ο κάτοχος, κάνοντάς την να του προκαλείται σταδιακά αντί για απευθείας. diff --git a/core/src/main/assets/messages/items/items_es.properties b/core/src/main/assets/messages/items/items_es.properties index 205914c84..6676a2a0b 100644 --- a/core/src/main/assets/messages/items/items_es.properties +++ b/core/src/main/assets/messages/items/items_es.properties @@ -1719,7 +1719,7 @@ items.wands.wandofwarding$ward.name_6=gran centinela items.wands.wandofwarding$ward.desc_6=Este centinela completamente mejorado es significativamente más duradero que sus predecesores. Cada disparo de este centinela infligirá _%1$d-%2$d de daño._\n\nDisparar a este centinela con tu varita de protección lo curará.\n\nEste centinela gastará algo de salud cada vez que dispare a un enemigo, pero puede curarse usando tu varita de protección.\n\nTu varita de protección está usando _%3$d de energía_ para mantener a este centinela. items.wands.wandofwarding$ward.discover_hint=Puedes encontrar a este personaje con una varita especifica. items.wands.wandofwarding$ward.dismiss_title=¿Descartar este guarda? -items.wands.wandofwarding$ward.dismiss_body=Puedes disipar este guarda si ya no quieres que tu varita lo mantenga. Hacerlo destruye al guarda inmediatamente.\n¿Descartar este guarda? +items.wands.wandofwarding$ward.dismiss_body=Puedes disipar este guarda si ya no quieres que tu varita lo mantenga. Hacerlo destruye al guarda inmediatamente.\n\n¿Descartar este guarda? items.wands.wandofwarding$ward.dismiss_confirm=sí items.wands.wandofwarding$ward.dismiss_cancel=no diff --git a/core/src/main/assets/messages/items/items_pt.properties b/core/src/main/assets/messages/items/items_pt.properties index 1aa955d73..0e99e3646 100644 --- a/core/src/main/assets/messages/items/items_pt.properties +++ b/core/src/main/assets/messages/items/items_pt.properties @@ -648,7 +648,7 @@ items.food.pasty.fish_desc=Um peixe inteiro cozido ao vapor, magicamente preserv items.food.pasty.amulet_desc=Você finalmente o encontrou, o amuleto mágico de... espera um minuto, isto é apenas um chocolate embrulhado em papel alumínio feito para parecer o amuleto! Ele não irá dar a você poder ilimitado, mas pelo menos te deixará cheio e lhe dará uma pequena carga de artefato.\n\n1° de Abril! items.food.pasty.egg_desc=Um ovo bem grande de chocolate, envolto em papel alumínio amarelo colorido. Há chocolate de sobra aqui para deixá-lo cheio e o açúcar pode dar aos seus artefatos um pouquinho de carga extra.\n\nFeliz Páscoa! items.food.pasty.rainbow_desc=Esta poção colorida é uma espécie de alimento líquido. Além de satisfazer sua fome, contém um pouco de magia que acalmará um inimigo adjacente que não seja chefe, fazendo-o temporariamente hesitante em lutar contra você.\n\nFeliz Orgulho Gay! -items.food.pasty.shattered_desc=Esta fatia grande de bolo de baunilha tem granulados coloridos e cobertura verde. O bolo foi feito para comemorar anos de experiência e vai lhe conceder um pouco dessa experiência quando comido.\nShattered Pixel Dungeon foi lançado pela primeira vez em 5 de agosto de 2014. Feliz aniversário, Shattered Pixel Dungeon! +items.food.pasty.shattered_desc=Esta fatia grande de bolo de baunilha tem granulados coloridos e cobertura verde. O bolo foi feito para comemorar anos de experiência e vai lhe conceder um pouco dessa experiência quando comido.\n\nShattered Pixel Dungeon foi lançado pela primeira vez em 5 de agosto de 2014. Feliz aniversário, Shattered Pixel Dungeon! items.food.pasty.pie_desc=Um pedaço bem grande de torta de abóbora! Seu sabor doce e apimentado irá deixar você cheio e lhe dará um pouco de cura.\n\nFeliz Dia das Bruxas! items.food.pasty.vanilla_desc=Esta fatia grande de bolo de baunilha tem granulados coloridos e cobertura azul. O bolo foi feito para comemorar anos de experiência e vai lhe conceder um pouco dessa experiência quando comido.\n\nO Pixel Dungeon original foi lançado em 4 de dezembro de 2012. Feliz aniversário, Pixel Dungeon! items.food.pasty.cane_desc=Uma enorme e açucarada bengala doce! É grande o suficiente para matar sua fome, e o açúcar pode dar à suas varinhas um pouquinho de carga extra também.\n\nFeliz Natal! @@ -832,7 +832,7 @@ items.potions.elixirs.elixiroffeatherfall.name=elixir de queda suave items.potions.elixirs.elixiroffeatherfall.light=Você se sente leve como uma pena! items.potions.elixirs.elixiroffeatherfall.desc=Este elixir oferece um efeito de levitação mais fraco, porém mais controlado, permitindo àquele que bebe cair grandes distâncias sem sofrer danos por um curto período de tempo. items.potions.elixirs.elixiroffeatherfall$featherbuff.name=queda suave -items.potions.elixirs.elixiroffeatherfall$featherbuff.desc=Você está sob o efeito de um elixir de queda suave, permitindo com que caia de abismos sem sofrer danos!\nTurnos restantes: %s. +items.potions.elixirs.elixiroffeatherfall$featherbuff.desc=Você está sob o efeito de um elixir de queda suave, permitindo com que caia de abismos sem sofrer danos!\n\nTurnos restantes: %s. items.potions.elixirs.elixirofhoneyedhealing.name=elixir da cura com mel items.potions.elixirs.elixirofhoneyedhealing.desc=Este elixir combina a cura com a doçura do mel. Quando ingerido, aplicará o mesmo efeito de uma poção de cura e irá satisfazer uma pequena quantidade de fome, também pode ser arremessado para curar um aliado.\n\nCriaturas com afinidade por mel podem ser pacificadas se este item for usado nelas. @@ -1314,7 +1314,7 @@ items.spells.phaseshift.desc=Este feitiço caótico irá teleportar qualquer per items.spells.reclaimtrap.name=armazenar armadilha items.spells.reclaimtrap.no_trap=Não há armadilha lá. items.spells.reclaimtrap.desc_trap=O feitiço está atualmente pronto para ativar uma _%s._ -items.spells.reclaimtrap.desc=Esta magia contém resquícios da energia mecânica do DM-300. Quando lançado em uma armadilha ativa, o poder da armadilha será preso a você, permitindo que você use o feitiço de novo para expelir esse poder e ativar o efeito da armadilha em qualquer lugar que queira.\nNo entanto, algumas armadilhas podem não funcionar em todos os lugares, e apenas uma armadilha por vez pode ser armazenada. +items.spells.reclaimtrap.desc=Esta magia contém resquícios da energia mecânica do DM-300. Quando lançado em uma armadilha ativa, o poder da armadilha será preso a você, permitindo que você use o feitiço de novo para expelir esse poder e ativar o efeito da armadilha em qualquer lugar que queira.\n\nNo entanto, algumas armadilhas podem não funcionar em todos os lugares, e apenas uma armadilha por vez pode ser armazenada. items.spells.recycle.name=reciclar items.spells.recycle.inv_title=Reciclar um item @@ -1799,7 +1799,7 @@ items.weapon.enchantments.kinetic.name=%s conservante items.weapon.enchantments.kinetic.desc=Quando um inimigo é morto por uma arma com encantamento conservante, qualquer dano em excesso é conservado na arma e será aplicado ao próximo ataque bem-sucedido. items.weapon.enchantments.kinetic.elestrike_desc=Um ataque elementar com um encantamento conservante aplica 40% do dano conservado a cada inimigo no alcance, exceto ao alvo primário. items.weapon.enchantments.kinetic$conserveddamage.name=dano conservado -items.weapon.enchantments.kinetic$conserveddamage.desc=Sua arma armazenou o excesso de força de um golpe fatal anterior e o aplicará como dano adicional ao seu próximo ataque. No entanto, a energia irá diminuir lentamente ao longo do tempo.Dano Conservado: %d. +items.weapon.enchantments.kinetic$conserveddamage.desc=Sua arma armazenou o excesso de força de um golpe fatal anterior e o aplicará como dano adicional ao seu próximo ataque. No entanto, a energia irá diminuir lentamente ao longo do tempo.\n\nDano Conservado: %d. items.weapon.enchantments.corrupting.name= %s de corrupção items.weapon.enchantments.corrupting.desc=Este poderoso encantamento possui a capacidade de subjugar os inimigos à sua vontade. Quando um inimigo é morto com esta arma, há uma chance de que ele seja corrompido em vez de morrer. @@ -2136,7 +2136,7 @@ items.weapon.missiles.darts.dart.name=dardo items.weapon.missiles.darts.dart.ac_tip=EMBEBER items.weapon.missiles.darts.dart.prompt=selecione uma semente. items.weapon.missiles.darts.dart.tip_title=Dardos Embebidos -items.weapon.missiles.darts.dart.tip_desc=Uma semente pode ser combinada com um ou dois dardos para embebê-los. Cada tipo de semente produz seu próprio tipo de dardo embebido, com um efeito especial de uso único.Embeber dardos com este tipo de semente produzirá _%s._ +items.weapon.missiles.darts.dart.tip_desc=Uma semente pode ser combinada com um ou dois dardos para embebê-los. Cada tipo de semente produz seu próprio tipo de dardo embebido, com um efeito especial de uso único.\n\nEmbeber dardos com este tipo de semente produzirá _%s._ items.weapon.missiles.darts.dart.tip_all=embeber %1$d dardos com %2$d sementes items.weapon.missiles.darts.dart.tip_two=embeber 2 dardos com 1 semente items.weapon.missiles.darts.dart.tip_one=embeber 1 dardo com 1 semente diff --git a/core/src/main/assets/messages/items/items_ru.properties b/core/src/main/assets/messages/items/items_ru.properties index 5e193869a..f3106a12e 100644 --- a/core/src/main/assets/messages/items/items_ru.properties +++ b/core/src/main/assets/messages/items/items_ru.properties @@ -1046,8 +1046,8 @@ items.rings.ringofevasion.upgrade_stat_name_1=Усиление Уклонени items.rings.ringofevasion.desc=Это кольцо ускоряет реакцию владельца, и по нему становится сложнее попасть. Проклятое кольцо, наоборот, понижает шанс увернуться. items.rings.ringofforce.name=кольцо урона -items.rings.ringofforce.stats=При вашей текущей силе, если вы безоружны, это кольцо будет наносить _%1$d-%2$d урона,_ а если вы вооружены, урон вашого оружия увеличится на _%3$d._ -items.rings.ringofforce.typical_stats=При вашей текущей силе, если вы безоружны, это кольцо должно будет наносить _%1$d-%2$d урона,_ а если вы вооружены, урон вашого оружия должен увеличится на _%3$d._ +items.rings.ringofforce.stats=При вашей текущей силе, если вы безоружны, это кольцо будет наносить _%1$d-%2$d урона,_ а если вы вооружены, урон вашего оружия увеличится на _%3$d._ +items.rings.ringofforce.typical_stats=При вашей текущей силе, если вы безоружны, это кольцо должно будет наносить _%1$d-%2$d урона,_ а если вы вооружены, урон вашего оружия должен увеличиться на _%3$d._ items.rings.ringofforce.combined_stats=Ваши надетые кольца объединили свою силу и теперь вместе будут наносить _%1$d-%2$d урона_ если вы безоружны или увеличат урон на _%3$d_ если вы вооружены. items.rings.ringofforce.upgrade_stat_name_1=Безоружный Урон items.rings.ringofforce.upgrade_stat_name_2=Усиление Урона Оружием diff --git a/core/src/main/assets/messages/items/items_tr.properties b/core/src/main/assets/messages/items/items_tr.properties index f61e309c6..5720ba078 100644 --- a/core/src/main/assets/messages/items/items_tr.properties +++ b/core/src/main/assets/messages/items/items_tr.properties @@ -2332,7 +2332,7 @@ items.brokenseal.choose_title=Bir Rün Seçin items.brokenseal.choose_desc=Hem bu zırh hem de kırık mühür bir kabartma taşıyor. Hangi kabartmanın saklanması gerektiğini seçin.\n\nZırh Kabartması: %1$s\nKırık Mühür Kabartması: %2$s\n\nŞu anda zırhın üzerinde bulunan kabartmayı seçerseniz, mührün bunu daha sonra aktaramayacağını unutmayın. items.brokenseal.discover_hint=Kahramanlardan birisi bu eşyayla başlar. items.brokenseal$warriorshield.name=Savaşçı Kalkanı -items.brokenseal$warriorshield.desc_active=Savaşçının kırık mührü şu anda ona direnç kazandırıyor ve sağlığına ek olarak kalkan sağlıyor. Kalkan devreye girdikten sonra, yeniden kullanılmadan önce bir bekleme süresi başlar.\n\nBu kalkan zamanla azalmaz, ancak birkaç tur boyunca yakında düşman yoksa sona erer. Kalkan sona erdiğinde, kullanılmamış kalkan miktarı bekleme süresini azaltır, en fazla %%50 oranında.\nKalan kalkan: %1$d.\n\nMevcut bekleme süresi: %2$d. +items.brokenseal$warriorshield.desc_active=Savaşçının kırık mührü şu anda ona direnç kazandırıyor ve sağlığına ek olarak kalkan sağlıyor. Kalkan devreye girdikten sonra, yeniden kullanılmadan önce bir bekleme süresi başlar.\n\nBu kalkan zamanla azalmaz, ancak birkaç tur boyunca yakında düşman yoksa sona erer. Kalkan sona erdiğinde, kullanılmamış kalkan miktarı bekleme süresini azaltır, en fazla %%50 oranında.\n\nKalan kalkan: %1$d.\n\nMevcut bekleme süresi: %2$d. items.brokenseal$warriorshield.desc_cooldown=Savaşçı kısa süre önce kırılan mühründen kalkan kazanmıştır ve kalkan etkisinden tekrar yararlanana kadar beklemelidir.\n\nKalan hamle sayısı: %d. items.brokenseal$warriorshield.desc_negative_cooldown=Savaşçının kalkanının bekleme süresi şu anda negatiftir, yani kalkanı etkinleştiğinde bekleme süresi normalde 150 turdan daha az olacaktır. Kalkanın bekleme süresi -150 tura kadar düşürülebilir, bu da kalkan etkinleştirildiğinde hemen tekrar kullanılabilir hale geleceği anlamına gelir.\n\nMevcut bekleme süresi: %d. diff --git a/core/src/main/assets/messages/items/items_vi.properties b/core/src/main/assets/messages/items/items_vi.properties index 9525edfb7..b52b77cb2 100644 --- a/core/src/main/assets/messages/items/items_vi.properties +++ b/core/src/main/assets/messages/items/items_vi.properties @@ -687,7 +687,7 @@ items.journal.guidebook.hint_status=Sách hướng dẫn items.journal.guidebook.desc=Cuốn sách hướng dẫn của một nhà thám hiểm, bị bỏ lại ở đây bởi một người đã quyết định rằng phiêu lưu không dành cho họ! Cuốn sách đặc biệt này rất kỳ diệu và có thể nhắc các nhà thám hiểm đọc vào đúng thời điểm.\n\nBỏ qua chức năng đó, cuốn sách vẫn được yêu thích nhất vì dòng chữ lớn "Đừng hoảng!" được viết bằng chữ thân thiện lớn trên bìa. items.journal.guidepage.name=trang sách hướng dẫn bị rách -items.journal.guidepage.desc=Một trang bị rách từ một cuốn sách hướng dẫn phiêu lưu.\n\nHầu hết chữ đều quá nhỏ để có thể đọc ở khoảng cách xa, nhưng bạn có thể nhìn ra tiêu đề của trang:\n_ "%s"_ +items.journal.guidepage.desc=Một trang bị rách từ một cuốn sách hướng dẫn phiêu lưu.\n\nHầu hết chữ đều quá nhỏ để có thể đọc ở khoảng cách xa, nhưng bạn có thể nhìn ra tiêu đề của trang:\n\n_ "%s"_ items.journal.regionlorepage$sewers.name=lá thư cũ nát items.journal.regionlorepage$sewers.desc=Một vật trông có vẻ giống một lá thư, có chữ được viết trên tờ giấy nhám nhem đất này. Bạn sẽ cần phải nhặt nó lên để biết được nó viết gì trong đó. @@ -1353,9 +1353,9 @@ items.stones.runestone$placeholder.name=đá phép items.stones.runestone.discover_hint=Bạn có thể tìm thấy vật phẩm này một cách ngẫu nhiên trong hầm ngục, hoặc chế tạo nó bằng thuật giả kim. items.stones.stoneofaggression.name=đá gây hấn -items.stones.stoneofaggression.desc=Khi hòn đá này được ném vào một đồng minh hoặc kẻ địch, tất cả kẻ địch gần đó sẽ ưu tiên tấn công nhân vật đó trong một thời gian ngắn. \nTuy nhiên, các kẻ địch là trùm có thể kháng lại hiệu ứng này, làm giảm đáng kể thời lượng của nó vâ nhận ít sát thương hơn từ các đòn tấn công của tay sai của chúng. +items.stones.stoneofaggression.desc=Khi hòn đá này được ném vào một đồng minh hoặc kẻ địch, tất cả kẻ địch gần đó sẽ ưu tiên tấn công nhân vật đó trong một thời gian ngắn. \n\nTuy nhiên, các kẻ địch là trùm có thể kháng lại hiệu ứng này, làm giảm đáng kể thời lượng của nó vâ nhận ít sát thương hơn từ các đòn tấn công của tay sai của chúng. items.stones.stoneofaggression$aggression.name=bị nhắm vào -items.stones.stoneofaggression$aggression.desc=Phép thuật thao túng đang khiến tất cả kẻ địch ở gần ưu tiên tấn công nhân vật này. \nLượt còn lại: %s. +items.stones.stoneofaggression$aggression.desc=Phép thuật thao túng đang khiến tất cả kẻ địch ở gần ưu tiên tấn công nhân vật này. \n\nLượt còn lại: %s. items.stones.stoneofaugmentation.name=hòn đá cường hóa items.stones.stoneofaugmentation.inv_title=Cường hóa một vật phẩm diff --git a/core/src/main/assets/messages/items/items_zh-hant.properties b/core/src/main/assets/messages/items/items_zh-hant.properties index 2c10fc498..2e05f3683 100644 --- a/core/src/main/assets/messages/items/items_zh-hant.properties +++ b/core/src/main/assets/messages/items/items_zh-hant.properties @@ -12,7 +12,7 @@ items.armor.curses.displacement.name=位移%s items.armor.curses.displacement.desc=位移詛咒會在穿戴者受到攻擊時試圖將其傳送到安全地帶。不過其效果有些過於強大了,導致使用者只會隨機傳送到同樓層各處。 items.armor.curses.metabolism.name=代謝%s -items.armor.curses.metabolism.desc=具代謝詛咒的護甲,能在穿戴者受傷時,直接將飽食度轉化為生命值,提供額外的治療,但你會很快陷入飢餓之中。 +items.armor.curses.metabolism.desc=具代謝詛咒的裝甲,能在穿戴者受傷時,將飽食度直接轉化為生命值。這能提供額外的治療,但易使人陷入嚴重飢餓。 items.armor.curses.multiplicity.name=分身%s items.armor.curses.multiplicity.desc=具有分身詛咒的護甲含有危險的複製魔法。在戰鬥中它有時會複製出穿戴者的鏡像,但也有同等機率複製攻擊者! @@ -56,18 +56,18 @@ items.armor.glyphs.stone.name=磐岩%s items.armor.glyphs.stone.desc=這種刻印使用沉重的魔法石環繞整種護甲,令使用者無法閃避,但會根據自身原有的閃避率格擋更多傷害。 items.armor.glyphs.swiftness.name=迅捷%s -items.armor.glyphs.swiftness.desc=這種刻印會在附近沒有敵人時使提高穿戴者的移動速度。 +items.armor.glyphs.swiftness.desc=這種刻印會提高穿戴者的移動速度,但穿戴者附近有敵人時,刻印不會生效。 items.armor.glyphs.thorns.name=荊棘%s items.armor.glyphs.thorns.desc=這種_強力_刻印會對攻擊者反擊,使其在攻擊穿戴者時緩慢失血。 -items.armor.glyphs.viscosity.name=粘稠%s +items.armor.glyphs.viscosity.name=黏稠%s items.armor.glyphs.viscosity.deferred=延緩%d點傷害 items.armor.glyphs.viscosity$defereddamage.name=遞延傷害 items.armor.glyphs.viscosity$defereddamage.ondeath=遞延的傷害還是殺掉了你…… items.armor.glyphs.viscosity$defereddamage.rankings_desc=死於遞延傷害 items.armor.glyphs.viscosity$defereddamage.desc=瞬時的傷害受到了延緩,隨時間緩慢釋放。\n\n剩餘的遞延傷害:%d。 -items.armor.glyphs.viscosity.desc=這種刻印可以儲存對穿戴者造成的傷害,讓穿戴者緩慢受傷而不是一下子受到重擊。 +items.armor.glyphs.viscosity.desc=這種刻印在裝甲抵擋傷害後,會儲存部分未能擋下的傷害,將其緩慢地對穿戴者釋放,能避免穿戴者一下子受到重擊。 @@ -135,7 +135,7 @@ items.armor.magearmor.name=英雄法袍 items.armor.magearmor.desc=穿著這件華貴的長袍時,法師可以施展一項特殊技能。 items.armor.mailarmor.name=鎖子甲 -items.armor.mailarmor.desc=由金屬鏈環環相扣製成的一套結實又不失靈活的護甲。 +items.armor.mailarmor.desc=由金屬鏈環環相扣製成的護甲,既結實又靈活。 items.armor.platearmor.name=板甲 items.armor.platearmor.desc=厚重的金屬版拼接成的護甲。重量駭人,但對力量足夠的冒險家來說,其防禦力無與倫比。 @@ -844,7 +844,7 @@ items.potions.elixirs.elixirofmight.name=根骨秘藥 items.potions.elixirs.elixirofmight.msg=新生力量湧入你的體內,你現在擁有%d點力量! items.potions.elixirs.elixirofmight.desc=這種強力的液體會沖刷你的根骨,永久性增加1點力量值並在一段時間內增加%d點生命上限。 增強的生命上限值取決於你當前的最大生命值,不過增強值會隨著等級提升而逐漸消失。 items.potions.elixirs.elixirofmight$htboost.name=最大生命值加成 -items.potions.elixirs.elixirofmight$htboost.desc=你覺得自己不同尋常的強壯與健康。 \n\n你的最大生命在一段時間內會有所提升。 生命提升會隨著你的升級緩慢而穩定地消失。\n目前生命提升量:%d。 剩餘有效等級:%d。 +items.potions.elixirs.elixirofmight$htboost.desc=你覺得自己不同尋常的強壯與健康。 \n\n你的最大生命在一段時間內會有所提升。 生命提升會隨著你的升級緩慢而穩定地消失。\n\n目前生命提升量:%d。 剩餘有效等級:%d。 items.potions.elixirs.elixiroftoxicessence.name=毒粹秘藥 items.potions.elixirs.elixiroftoxicessence.desc=這種秘藥能夠向飲用者注入強大的毒素之力,喝下它會在自己移動時不斷釋放出毒霧,並得到更長時間的毒氣和毒素免疫。 @@ -1149,7 +1149,7 @@ items.scrolls.scrollofmirrorimage.desc=卷軸上的咒文會創造閱讀者的 items.scrolls.scrollofretribution.name=復仇卷軸 items.scrolls.scrollofretribution.blast=強大的魔法能量從卷軸中湧出! -items.scrolls.scrollofretribution.desc=這種卷軸可以將閱讀者的所受的傷痛轉化為能量釋放而出。 閱讀者的傷勢越重,所釋放的能量越大。 閱讀者處於低血量的情況下所釋放的這種能量足以殺死大部分敵人。\n即便如此,這張卷軸依然會影響使用者,使其短時間目盲並虛弱無比。 +items.scrolls.scrollofretribution.desc=這種卷軸可以將閱讀者的所受的傷痛轉化為能量釋放而出。 閱讀者的傷勢越重,所釋放的能量越大。 閱讀者處於低血量的情況下所釋放的這種能量足以殺死大部分敵人。\n\n即便如此,這張卷軸依然會影響使用者,使其短時間目盲並虛弱無比。 items.scrolls.scrollofrage.name=盛怒卷軸 items.scrolls.scrollofrage.roar=卷軸產生的激怒咆哮在地下城中迴盪! @@ -1260,7 +1260,7 @@ items.scrolls.exotic.scrollofpassage.name=歸返秘卷 items.scrolls.exotic.scrollofpassage.desc=卷軸上的法術會閱讀者回到所在區域的第一層入口。很適合用以快速抵達商店。 items.scrolls.exotic.scrollofprismaticimage.name=幻衛秘卷 -items.scrolls.exotic.scrollofprismaticimage.desc=這種秘卷上的咒文會創造閱讀者的一個幻影。 這個像使用者的弱化版複製體的幻影有著相同的防禦,但生命值和造成的傷害更低。\n幻影將吸引敵人的火力從而保護閱讀者。\n當幻影存在時閱讀這張秘卷將會為其恢復所有生命。 +items.scrolls.exotic.scrollofprismaticimage.desc=這種秘卷上的咒文會創造閱讀者的一個幻影。 這個像使用者的弱化版複製體的幻影有著相同的防禦,但生命值和造成的傷害更低。\n\n幻影將吸引敵人的火力從而保護閱讀者。\n\n當幻影存在時閱讀這張秘卷將會為其恢復所有生命。 items.scrolls.exotic.scrollofpsionicblast.name=靈能震爆秘卷 items.scrolls.exotic.scrollofpsionicblast.ondeath=靈能震爆撕碎了你的意識…… @@ -1359,7 +1359,7 @@ items.stones.stoneofaggression$aggression.desc=帶有操控能力的魔法正在 items.stones.stoneofaugmentation.name=強化符石 items.stones.stoneofaugmentation.inv_title=強化一件物品 -items.stones.stoneofaugmentation.desc=這種符石內的強力魔法可以用於強化裝備的一種屬性,但是會以減弱另一種屬性為代價。\n用於武器可以強化傷害或者速度。提升投擲武器的速度也會提升其耐久度。\n\n用於護甲可以強化防禦或者閃避。 +items.stones.stoneofaugmentation.desc=這種符石內的強力魔法可以用於強化裝備的一種屬性,但是會以減弱另一種屬性為代價。\n\n用於武器可以強化傷害或者速度。提升投擲武器的速度也會提升其耐久度。\n\n用於護甲可以強化防禦或者閃避。 items.stones.stoneofaugmentation.discover_hint=此物品為商店的商品,但用錬金釜也可以製造出此物品。 items.stones.stoneofaugmentation$wndaugment.choice=你想增強什麼? items.stones.stoneofaugmentation$wndaugment.speed=速度 @@ -1635,7 +1635,7 @@ items.wands.wandoflivingearth.upgrade_stat_name_3=守衛者防禦 items.wands.wandoflivingearth.bmage_desc=當_戰鬥法師_以靈壤魔杖近戰攻擊目標時,能將部分近戰傷害轉化為靈壤護甲。 items.wands.wandoflivingearth.eleblast_desc=以靈壤魔杖施放的元素爆發會造成100%傷害,並使根據極重的敵人增加以召喚得靈壤守衛者生命值。 items.wands.wandoflivingearth$rockarmor.name=靈壤護甲 -items.wands.wandoflivingearth$rockarmor.desc=魔法泥石環繞在你身邊,當你被攻擊時它們會努力幫你格擋,格擋成功能抵消 50%% 所受傷害。 抵消傷害會消除一定量的泥石。\n剩餘護甲量:%1$d。 \n\n當積攢的泥石達到一定程度時,下一次發動靈壤法杖會使泥石成型為一尊靈壤守衛者為你而戰。 \n\n守護者成型所需護甲量:%2$d。 +items.wands.wandoflivingearth$rockarmor.desc=魔法泥石環繞在你身邊,當你被攻擊時它們會努力幫你格擋,格擋成功能抵消 50%% 所受傷害。 抵消傷害會消除一定量的泥石。\n\n剩餘護甲量:%1$d。 \n\n當積攢的泥石達到一定程度時,下一次發動靈壤法杖會使泥石成型為一尊靈壤守衛者為你而戰。 \n\n守護者成型所需護甲量:%2$d。 items.wands.wandoflivingearth$rockarmor.desc_many=你的靈壤守衛者已被眾人之力強化。 剩餘回合數:%d items.wands.wandoflivingearth$earthguardian.name=靈壤守衛者 items.wands.wandoflivingearth$earthguardian.desc=靈壤法杖發射的魔法泥石組成了一尊靈壤守衛者! 這個有稜有角的大塊頭會攻擊附近的敵人,迫使他們去攻擊守護者。 當附近沒有敵人時,守衛者會重組為你身邊的靈壤護甲,等待你下次使用法杖召喚它。 @@ -1706,20 +1706,20 @@ items.wands.wandofwarding.eleblast_desc=以哨衛魔杖施放的元素爆發會 items.wands.wandofwarding$ward.desc_generic_ward=哨衛元素會自動攻擊其可視範圍內的目標。\n\n對哨衛使用哨衛法杖以升級它。\n\n哨衛在一定的攻擊次數後消散。 items.wands.wandofwarding$ward.desc_generic_sentry=這顆結晶看起來就像法杖頂端上的寶石。即便哨衛結晶與元素型態的傷害相同,但結晶改以消耗生命值取代了有限的攻擊次數。\n\n哨衛在攻擊時會消耗生命值,但能以哨衛法杖治療及升級它。 items.wands.wandofwarding$ward.name_1=小型哨衛元素 -items.wands.wandofwarding$ward.desc_1=這個最基本的哨衛元素會自動攻擊進入其可視範圍內的目標,造成_ %1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其升級。 \n\n這個哨衛在僅發動 1 次攻擊之後就會消散。\n的哨衛法杖在使用_%3$d 點能量_維持這個哨衛。 +items.wands.wandofwarding$ward.desc_1=這個最基本的哨衛元素會自動攻擊進入其可視範圍內的目標,造成_ %1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其升級。 \n\n這個哨衛在僅發動 1 次攻擊之後就會消散。\n\n的哨衛法杖在使用_%3$d 點能量_維持這個哨衛。 items.wands.wandofwarding$ward.name_2=哨衛元素 items.wands.wandofwarding$ward.desc_2=這個升級過的哨衛元素結構更精緻,而且在攻擊數次後才會消散。 它每次發動攻擊能造成 _%1$d~%2$d 點傷害_。使用哨衛法杖向該哨衛施法能使其升級。 這個哨衛在發動 3 次攻擊之後才會消散。 的哨衛法杖在使用_ %3$d點能量_維持這個哨衛。 items.wands.wandofwarding$ward.name_3=大型哨衛元素 -items.wands.wandofwarding$ward.desc_3=這個滿級的哨衛元素能發動更多次攻擊,而且攻擊速度更快。 它每次發動攻擊能造成_%1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其進化。\n這個哨衛在發動 5 次攻擊之後才會消散。\n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 +items.wands.wandofwarding$ward.desc_3=這個滿級的哨衛元素能發動更多次攻擊,而且攻擊速度更快。 它每次發動攻擊能造成_%1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其進化。\n\n這個哨衛在發動 5 次攻擊之後才會消散。\n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 items.wands.wandofwarding$ward.name_4=小型哨衛結晶 -items.wands.wandofwarding$ward.desc_4=這個小小的哨衛結晶攻擊力與大哨衛元素相同,但改以消耗生命值取代有限的攻擊次數。 它的樣子有點像哨衛法杖頂端的寶石。 它每次發動攻擊能造成_ %1$d~%2$d 點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其升級並治療它。\n這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它 。\n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 +items.wands.wandofwarding$ward.desc_4=這個小小的哨衛結晶攻擊力與大哨衛元素相同,但改以消耗生命值取代有限的攻擊次數。 它的樣子有點像哨衛法杖頂端的寶石。 它每次發動攻擊能造成_ %1$d~%2$d 點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其升級並治療它。\n\n這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它 。\n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 items.wands.wandofwarding$ward.name_5=哨衛結晶 -items.wands.wandofwarding$ward.desc_5=這個升級過的哨衛結晶比小哨衛結晶體積更大,形體也更結實。 它每次發動攻擊能造成_ %1$d~%2$d點傷害_。\n使用哨衛法杖向該哨衛施法能使其升級並治療它。\n這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它。 \n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 +items.wands.wandofwarding$ward.desc_5=這個升級過的哨衛結晶比小哨衛結晶體積更大,形體也更結實。 它每次發動攻擊能造成_ %1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能使其升級並治療它。\n\n這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它。 \n\n你的哨衛法杖在使用_ %3$d 點能量_維持這個哨衛。 items.wands.wandofwarding$ward.name_6=大型哨衛結晶 -items.wands.wandofwarding$ward.desc_6=這個滿級的哨衛結晶比之前的堅固了不少。 它每次發動攻擊能造成_%1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能治療它。 這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它。\n你的哨衛法杖在使用_%3$d點能量_維持這個哨衛。 +items.wands.wandofwarding$ward.desc_6=這個滿級的哨衛結晶比之前的堅固了不少。 它每次發動攻擊能造成_%1$d~%2$d點傷害_。\n\n使用哨衛法杖向該哨衛施法能治療它。 這個哨衛每次發動攻擊時會消耗一定的生命值,但你可以用哨衛法杖治療它。\n\n你的哨衛法杖在使用_%3$d點能量_維持這個哨衛。 items.wands.wandofwarding$ward.discover_hint=這個角色由特定的法杖召喚。 items.wands.wandofwarding$ward.dismiss_title=要驅散這個哨衛嗎? -items.wands.wandofwarding$ward.dismiss_body=不想讓法杖繼續維持這個哨衛元素的話,你可以選擇驅散以立即破壞它。\n要驅散這個哨衛元素嗎? +items.wands.wandofwarding$ward.dismiss_body=不想讓法杖繼續維持這個哨衛元素的話,你可以選擇驅散以立即破壞它。\n\n要驅散這個哨衛元素嗎? items.wands.wandofwarding$ward.dismiss_confirm=是 items.wands.wandofwarding$ward.dismiss_cancel=否 @@ -2372,7 +2372,7 @@ items.honeypot.name=蜂蜜罐 items.honeypot.ac_shatter=擊碎 items.honeypot.desc=這個巨型蜂蜜罐只是薄薄的塗了一圈蜂蜜,作為替代裡頭住著一隻巨型蜜蜂!這種大型蜜蜂平常只待在蜂巢裡,也許罐子本身就是某種特殊陷阱屋?蜜蜂看起來對罐子很滿意,當你看向它時它非常警惕地對你回以嗡鳴。 items.honeypot$shatteredpot.name=破碎的蜂蜜罐 -items.honeypot$shatteredpot.desc=這個罐子已經被打碎,僅靠罐沿的粘稠蜂蜜勉強維持形狀,而且正在緩緩解體。\n儘管蜜罐碎了,看來蜜蜂依然想捍衛它的住所。 +items.honeypot$shatteredpot.desc=這個罐子已經被打碎,僅靠罐沿的粘稠蜂蜜勉強維持形狀,而且正在緩緩解體。\n\n儘管蜜罐碎了,看來蜜蜂依然想捍衛它的住所。 items.item.prompt=選擇丟出的方位 items.item.ac_drop=放下 diff --git a/core/src/main/assets/messages/journal/journal_es.properties b/core/src/main/assets/messages/journal/journal_es.properties index 25dc876e6..0edd1883a 100644 --- a/core/src/main/assets/messages/journal/journal_es.properties +++ b/core/src/main/assets/messages/journal/journal_es.properties @@ -138,7 +138,7 @@ journal.document.caves_explorer.gold.body=4 de Verano del 308\n\n¡Nuestros prim journal.document.caves_explorer.troll.title=Encuentro con un Troll journal.document.caves_explorer.troll.body=11 de Verano del 308\n\nTras comenzar nuestra expedición hacia la sección intermedia de las minas, ¡nos encontramos con una cara amistosa! Bueno... relativamente amistosa. Un troll de la caverna ha instalado aquí un pequeño puesto de herrería. Es algo rudo y no habla mucho, pero reparó nuestro equipamiento por algo de oro.\n\nDesafortunadamente, el troll herrero también nos ha informado que todo este precioso oro no es tan bueno como parece. Lo llama "oro oscuro" y al parecer se degrada muy rápido bajo la luz del sol. Eso ciertamente explica por qué nunca ha habido conflictos por los recursos de esta zona.\n\nSupongo que tendremos que seguir descendiendo para ver si hay algo más valioso.\n- Archibald journal.document.caves_explorer.city.title=La Entrada de la Ciudad -journal.document.caves_explorer.city.body=21 de verano del 308\n\nYa han pasado tres semanas, y tras pasar gran parte de los últimos diez días trazando rutas cada vez más profundas, finalmente hemos llegado al fondo de las minas. Encontramos varios artilugios de metal y una gran puerta que bloquea la entrada a la antigua metrópolis de los enanos.\n\nEl herrero nos advirtió sobre algunas de estas máquinas. Al parecer, estaba destinada a la defensa de la zona y tiene tendencia a activarse cuando se la molesta. No tenemos ningún asunto en la ciudad, y el metal tendría un valor mínimo como chatarra, así que pensamos que era mejor hacer caso a su advertencia y regresar.\n\nDebo admitir que tenía curiosidad, pero investigar allí ciertamente no merecía el riesgo.- Archibald +journal.document.caves_explorer.city.body=21 de verano del 308\n\nYa han pasado tres semanas, y tras pasar gran parte de los últimos diez días trazando rutas cada vez más profundas, finalmente hemos llegado al fondo de las minas. Encontramos varios artilugios de metal y una gran puerta que bloquea la entrada a la antigua metrópolis de los enanos.\n\nEl herrero nos advirtió sobre algunas de estas máquinas. Al parecer, estaba destinada a la defensa de la zona y tiene tendencia a activarse cuando se la molesta. No tenemos ningún asunto en la ciudad, y el metal tendría un valor mínimo como chatarra, así que pensamos que era mejor hacer caso a su advertencia y regresar.\n\nDebo admitir que tenía curiosidad, pero investigar allí ciertamente no merecía el riesgo.\n- Archibald journal.document.caves_explorer.alive.title=¡Está Viva! journal.document.caves_explorer.alive.body=23 de verano del 308\n\n¡Una de las máquinas enanas cobró vida de alguna manera! Simplemente pasábamos por allí cuando esta embistió y por poco aplasta a dos de nuestro grupo con sus enormes puños de metal. Por suerte, llevaba mi varita de desintegración conmigo. Unas cuantas ráfagas bien dirigidas y la bestia fue reducida a chatarra.\n\nLo que me preocupa es que no hemos hecho absolutamente nada para provocar a la máquina. Es imposible que los enanos hayan diseñado las máquinas para que sean tan agresivas, ¡es como si hubiera tratado de emboscarnos!\n\nAl menos fui capaz de ofrecer algo de ayuda a mis compañeros por una vez.\n- Archibald journal.document.caves_explorer.report.title=Último Informe @@ -162,13 +162,13 @@ journal.document.city_warlock.seen_it.body=He visto lo que hay debajo, pero no p journal.document.halls_king.title=Diario de ??? journal.document.halls_king.discover_hint=Puedes encontrar este texto en una región especifica, pero solo después de encontrar todos los textos previos de este conjunto. journal.document.halls_king.rejection.title=Rechazo -journal.document.halls_king.rejection.body=¡IMBÉCILES!\n\nDurante los últimos 33 años, nuestro reino ha florecido con nuestra nueva tecnología mágica. Hemos aprendido a invocar espíritus elementales y someterlos a nuestra voluntad, pero de alguna manera ahora es 'demasiado peligroso' seguir experimentando.\n\nSé lo que está pasando en realidad. El rechazo de mis teorías no tiene nada que ver con su mérito y todo que ver con la persona que las sugiere. Probablemente todos se estén riendo de mí a mis espaldas.\n\n¡Pues se acabó! No me importa lo que digan, ¡exploraré los confines más lejanos de nuestro universo yo solo, y me quedaré con todo lo que descubra!- R. +journal.document.halls_king.rejection.body=¡IMBÉCILES!\n\nDurante los últimos 33 años, nuestro reino ha florecido con nuestra nueva tecnología mágica. Hemos aprendido a invocar espíritus elementales y someterlos a nuestra voluntad, pero de alguna manera ahora es 'demasiado peligroso' seguir experimentando.\n\nSé lo que está pasando en realidad. El rechazo de mis teorías no tiene nada que ver con su mérito y todo que ver con la persona que las sugiere. Probablemente todos se estén riendo de mí a mis espaldas.\n\n¡Pues se acabó! No me importa lo que digan, ¡exploraré los confines más lejanos de nuestro universo yo solo, y me quedaré con todo lo que descubra!\n- R. journal.document.halls_king.amulet.title=El Amuleto journal.document.halls_king.amulet.body=¡LO HE LOGRADO!\n\nNo sabía lo que podría encontrar exactamente, pero lo que descubrí ahí fuera fue más allá de mis más disparatadas especulaciones. Tanto poder, justo ahí, listo para ser tomado, ¡y es todo mío!\n\nCon esto ninguno de los tontos de la corte se atreverá a oponerse a mí. Me marea pensar en todas las formas diferentes en que podría humillarlos. Demonios, por qué detenerme ahí, ¡tengo suficiente poder para destruir a cada uno de ellos si quisiera! Quizá sea excesivo, pero no debo tardar mucho en decidirme o sospecharán.\n\n¡Creo que llamaré a este gran poder el Amuleto de Yendor!\n- R. journal.document.halls_king.ritual.title=El Ritual -journal.document.halls_king.ritual.body=Thymor se ha enfrentado públicamente a mí hoy y ha insistido en que explique mi nueva fuente de poder. Lo desestimé lo mejor que pude, pero puedo sentir las miradas juiciosas del resto de la corte sobre mí una vez más.\n\nEsperaba pasar un poco más de tiempo disfrutando de la calma antes de la tormenta, pero realmente no importa. He decidido lo que quiero hacer. Afirmaré que obtuve mi poder a través de un nuevo ritual y me ofreceré a realizarlo con los otros brujos y el Rey. Una vez terminado el ritual, ¡yo seré el rey!\nThymor protestará, por supuesto, pero con tanto poder en oferta, ¡dudo que lo escuchen!\n¡TODOS SE INCLINARAN ANTE MÍ!- Futuro Rey de los Enanos +journal.document.halls_king.ritual.body=Thymor se ha enfrentado públicamente a mí hoy y ha insistido en que explique mi nueva fuente de poder. Lo desestimé lo mejor que pude, pero puedo sentir las miradas juiciosas del resto de la corte sobre mí una vez más.\n\nEsperaba pasar un poco más de tiempo disfrutando de la calma antes de la tormenta, pero realmente no importa. He decidido lo que quiero hacer. Afirmaré que obtuve mi poder a través de un nuevo ritual y me ofreceré a realizarlo con los otros brujos y el Rey. Una vez terminado el ritual, ¡yo seré el rey!\n\nThymor protestará, por supuesto, pero con tanto poder en oferta, ¡dudo que lo escuchen!\n\n¡TODOS SE INCLINARAN ANTE MÍ!\n- Futuro Rey de los Enanos journal.document.halls_king.new_king.title=Un Nuevo Rey -journal.document.halls_king.new_king.body=¡YO SOY EL REY, AHAHAHAHAAA!\n\n¡Simplemente me dejaron hacerlo! Sin apenas convencerles, aceptaron que "compartiera" este poder con ellos en un gran ritual. ¡En un instante pasaron de ser un coro de voces burlonas a mi nueva corte de súbditos silenciosos!\n\nComo era de esperar, Thymor huyó como un cobarde a la primera señal de problemas. También puedo sentir la fuerza de resistencia que está formando. Creo que le permitiré continuar, ¡para que pueda entregar a todos sus conspiradores directamente a mi puerta!\n\nEstá claro que el reino tampoco me respeta, supongo que también me encargaré de eso.- Rey de los Enanos +journal.document.halls_king.new_king.body=¡YO SOY EL REY, AHAHAHAHAAA!\n\n¡Simplemente me dejaron hacerlo! Sin apenas convencerles, aceptaron que "compartiera" este poder con ellos en un gran ritual. ¡En un instante pasaron de ser un coro de voces burlonas a mi nueva corte de súbditos silenciosos!\n\nComo era de esperar, Thymor huyó como un cobarde a la primera señal de problemas. También puedo sentir la fuerza de resistencia que está formando. Creo que le permitiré continuar, ¡para que pueda entregar a todos sus conspiradores directamente a mi puerta!\n\nEstá claro que el reino tampoco me respeta, supongo que también me encargaré de eso.\n- Rey de los Enanos journal.document.halls_king.thing.title=La Cosa journal.document.halls_king.thing.body=Hay un problema. Thymor fue despachado sin esfuerzo, pero parece que mi búsqueda en los planos exteriores no paso desapercibida.\n\n"Algo"... ha sido atraído a mi mundo y está comenzando a abrirse paso por el fondo de los salones inferiores. Para complicar aún más las cosas ¡En ese preciso lugar es donde guardé el amuleto! Qué criatura tan malévola ¿por qué intenta quitarme mi poder cuando hay tal abundancia de poder ahí afuera aún por tomar?\n\nA pesar de mi poder, no creo que pueda simplemente lanzarme y luchar. Su verdadero poder es incalculable, pero debe haber una manera de limitarlo. ¡DEFENDERÉ MI PREMIO! journal.document.halls_king.attrition.title=Desgaste diff --git a/core/src/main/assets/messages/journal/journal_in.properties b/core/src/main/assets/messages/journal/journal_in.properties index 786b8864c..267a6c2b1 100644 --- a/core/src/main/assets/messages/journal/journal_in.properties +++ b/core/src/main/assets/messages/journal/journal_in.properties @@ -166,7 +166,7 @@ journal.document.halls_king.rejection.body=ORANG BODOH!\n\nSelama 33 tahun terak journal.document.halls_king.amulet.title=Jimat journal.document.halls_king.amulet.body=SAYA SUDAH MELAKUKANNYA!\n\nSaya tidak tahu persis apa yang mungkin saya temukan, tetapi apa yang saya temukan di luar sana berada di luar spekulasi terliar saya. Begitu banyak kekuatan, hanya duduk di sana siap untuk diambil, dan itu semua milikku!\n\nDengan ini tidak ada orang bodoh di pengadilan yang berani menentangku. Aku hanya pusing memikirkan semua cara yang berbeda aku bisa mempermalukan mereka. Neraka, mengapa berhenti di situ, saya memiliki kekuatan yang cukup untuk menghancurkan setiap yang terakhir dari mereka jika saya mau! Itu mungkin berlebihan, tapi aku tidak perlu terlalu lama memutuskan atau mereka akan curiga.\n\nSaya pikir saya akan menyebut kekuatan besar ini Jimat Yendor!\n- R. journal.document.halls_king.ritual.title=Ritual -journal.document.halls_king.ritual.body=Thymor secara terbuka menghadapkanku hari ini dan mendesakku untuk menjelaskan sumber kekuatan baruku. Saya memecatnya sebisa mungkin, tapi saya bisa merasakan pandangan hakim dari seluruh pengadilan tertuju pada saya sekali lagi.\n\nSaya berharap untuk menghabiskan lebih banyak waktu menikmati ketenangan sebelum badai, tetapi itu tidak terlalu menjadi masalah. Saya sudah memutuskan apa yang ingin saya lakukan. Saya akan mengklaim bahwa saya memperoleh kekuatan saya melalui ritual baru, dan akan menawarkan untuk melakukan itu pada penyihir lain dan Raja. Setelah ritualnya selesai, aku akan menjadi raja!\n\nThymor tentu saja akan memprotes, tapi dengan kekuatan sebesar ini, aku ragu mereka akan mendengarkannya!\nSEMUA AKAN BUNGKUR DI DEPANKU! \n- Masa Depan Raja Kurcaci +journal.document.halls_king.ritual.body=Thymor secara terbuka menghadapkanku hari ini dan mendesakku untuk menjelaskan sumber kekuatan baruku. Saya memecatnya sebisa mungkin, tapi saya bisa merasakan pandangan hakim dari seluruh pengadilan tertuju pada saya sekali lagi.\n\nSaya berharap untuk menghabiskan lebih banyak waktu menikmati ketenangan sebelum badai, tetapi itu tidak terlalu menjadi masalah. Saya sudah memutuskan apa yang ingin saya lakukan. Saya akan mengklaim bahwa saya memperoleh kekuatan saya melalui ritual baru, dan akan menawarkan untuk melakukan itu pada penyihir lain dan Raja. Setelah ritualnya selesai, aku akan menjadi raja!\n\nThymor tentu saja akan memprotes, tapi dengan kekuatan sebesar ini, aku ragu mereka akan mendengarkannya!\n\nSEMUA AKAN BUNGKUR DI DEPANKU! \n- Masa Depan Raja Kurcaci journal.document.halls_king.new_king.title=Seorang Raja Baru journal.document.halls_king.new_king.body=AKU ADALAH RAJA, AHAHAHAHAAA!\n\nMereka hanya membiarkan saya melakukannya! Dengan hampir tidak meyakinkan mereka setuju untuk mengizinkan saya 'berbagi' kekuatan ini dengan mereka dalam sebuah ritual besar. Dalam sekejap mereka berubah dari paduan suara yang mengejek ke pengadilan baru saya yang diam!\n\nBisa ditebak, Thymor melarikan diri seperti pengecut pada tanda pertama masalah. Saya sudah bisa merasakan kekuatan perlawanan yang dia bangun juga. Saya pikir saya akan mengizinkannya untuk melanjutkan, sehingga dia dapat mengantarkan semua komplotannya langsung ke pintu saya!\n\nJelas kerajaan juga tidak menghormati saya, saya kira saya akan memperbaikinya juga.\n- Raja Kurcaci journal.document.halls_king.thing.title=Hal Itu diff --git a/core/src/main/assets/messages/journal/journal_pt.properties b/core/src/main/assets/messages/journal/journal_pt.properties index e2decdb84..9d5fda850 100644 --- a/core/src/main/assets/messages/journal/journal_pt.properties +++ b/core/src/main/assets/messages/journal/journal_pt.properties @@ -53,7 +53,7 @@ journal.document.adventurers_guide.searching.body=As masmorras estão cheias de journal.document.adventurers_guide.strength.title=Força journal.document.adventurers_guide.strength.body=Não haverá tempo para treinar com as armas e armaduras que encontrar na masmorra, então você precisará de força bruta para usá-las efetivamente.\n\nPoções de força e pergaminhos de aprimoramento são a maneira mais eficaz de atender aos requisitos de força de equipamentos de tier alto.\n\nEventualmente, é importante começar a usar itens de tier alto, mas não ignore os equipamentos que você pode usar agora. journal.document.adventurers_guide.upgrades.title=Aprimoramentos -journal.document.adventurers_guide.upgrades.body=Quanto mais fundo você for na masmorra, mais importante é que você esteja usando equipamentos de tier alto aprimorados magicamente, mas você também precisará de força para usá-los corretamente.\nVarinhas, anéis e artefatos não precisam de força, mas têm usos limitados ou não ajudam diretamente no combate.\n\nFazer boas escolhas sobre o que você aprimora é muito importante para sobreviver no início da masmorra e para se preparar para o sucesso mais adiante nela. +journal.document.adventurers_guide.upgrades.body=Quanto mais fundo você for na masmorra, mais importante é que você esteja usando equipamentos de tier alto aprimorados magicamente, mas você também precisará de força para usá-los corretamente.\n\nVarinhas, anéis e artefatos não precisam de força, mas têm usos limitados ou não ajudam diretamente no combate.\n\nFazer boas escolhas sobre o que você aprimora é muito importante para sobreviver no início da masmorra e para se preparar para o sucesso mais adiante nela. journal.document.adventurers_guide.looting.title=Pilhagem Efetiva journal.document.adventurers_guide.looting.body=Salas com portas trancadas ou que contêm obstáculos geralmente têm saques melhores. Quando um obstáculo bloqueia seu caminho, geralmente você pode encontrar um item que ajude a superá-lo no mesmo andar.\n\nVocê sempre poderá encontrar 2 poções de força e 3 pergaminhos de aprimoramento em cada região de masmorra de cinco andares, sendo esses ótimos indicadores de quão bem você está explorando.\n\n(Você pode ver uma lista de pontos de referência e chaves não utilizadas na aba de notas da janela do diário.) journal.document.adventurers_guide.levelling.title=Ganhando Experiência diff --git a/core/src/main/assets/messages/journal/journal_uk.properties b/core/src/main/assets/messages/journal/journal_uk.properties index b33364688..11282e50f 100644 --- a/core/src/main/assets/messages/journal/journal_uk.properties +++ b/core/src/main/assets/messages/journal/journal_uk.properties @@ -90,7 +90,7 @@ journal.document.intros.dungeon.body=Багато героїв відважил journal.document.intros.sewers.title=Каналізація journal.document.intros.sewers.body=Верхні рівні підземелля - не що інше, як міська каналізація.\n\nПотік темної енергії з глибин зробив мирних мешканців каналізації дуже агресивними. Місто змушене надсилати патрулі вартових сюди, щоб спробувати захистити населення вгорі.\n\nТут небезпечно, проте злі чари в цьому місці все ще слабкі. journal.document.intros.prison.title=В'язниця -journal.document.intros.prison.body=Багато років тому, ця в'язниця була побудована для утримання небезпечних злочинців. Жорстко контрольовані й оточені охороною, найнебезпечніші злодії з усієї поверхні коротали свій час тут.\nАле згодом темні випари стали просочуватись знизу, спотворюючи розум як варти, так і в'язнів.\nУ відповідь на зростаючий хаос, місто замурувало всю в'язницю. Ніхто не знає, що сталося з тими, хто залишився вмирати в її стінах ... +journal.document.intros.prison.body=Багато років тому, ця в'язниця була побудована для утримання небезпечних злочинців. Жорстко контрольовані й оточені охороною, найнебезпечніші злодії з усієї поверхні коротали свій час тут.\n\nАле згодом темні випари стали просочуватись знизу, спотворюючи розум як варти, так і в'язнів.\n\nУ відповідь на зростаючий хаос, місто замурувало всю в'язницю. Ніхто не знає, що сталося з тими, хто залишився вмирати в її стінах ... journal.document.intros.caves.title=Печери journal.document.intros.caves.body=Ці малонаселені печери простягаються ниже покинутої тюрми. Печери, багаті на корисні копалини, колись були центром бурхливої торгівлі та промисловості для дворфського суспільства, але опустіли, коли дворфи стали одержимі темною магією.\n\nЗараз печери в основному заселені підземними дикими тваринами, гнолами та занедбаними механізмами; вони, ймовірно, вражені тією ж силою, яка осквернила попередні регіони. journal.document.intros.city.title=Столиця Дворфів @@ -127,7 +127,7 @@ journal.document.prison_warden.rotberry.body=23-го Осені, 363\n\nОтри journal.document.prison_warden.no_support.title=Відсутність підтримки journal.document.prison_warden.no_support.body=11-те Весни, 364\n\nЩо, в біса, думає місто? Після термінового запиту про допомогу я нічого не почула, навіть порожніх вибачень, які вони зазвичай надсилають, коли мої запити отримують відмову.\n\nТим часом ув'язненим стає все гірше, а деякі з охоронців навіть почали створювати проблеми. Чи планують вони просто дозволити цьому погіршуватися, поки ми не матимемо справу з бунтом!?\n\nПринаймні Томас залишався надійним, як завжди. Його організаційна допомога була неоціненною, а його ідея активувати ті старі агрегати ЗМ-100 була прикрою, але необхідною. Я впевнена, що зможу впоратися з цією ситуацією, мені просто потрібна якась клята підтримка! \n-Сміт journal.document.prison_warden.letter.title=Лист до Томаса -journal.document.prison_warden.letter.body=Томасе,\n\nТи був чудовим другом, тому я роблю тобі послугу.\n\nКоли ти почнеш свою зміну сьогодні ввечері, замкни і зміцни камеру Тенгу, кинь ключ у якусь нішу та виходь. Неважливо, якщо інші в'язні залишаться без нагляду, незабаром ніхто не зможе покинути це місце. Але цей виродок повинен залишатися в безпеці, якщо він втече, невідомо, що він зробить.\n\nНікому про це не розповідай і не шукай мене. Капітан повинен затонути разом зі своїм кораблем.- Кіана +journal.document.prison_warden.letter.body=Томасе,\n\nТи був чудовим другом, тому я роблю тобі послугу.\n\nКоли ти почнеш свою зміну сьогодні ввечері, замкни і зміцни камеру Тенгу, кинь ключ у якусь нішу та виходь. Неважливо, якщо інші в'язні залишаться без нагляду, незабаром ніхто не зможе покинути це місце. Але цей виродок повинен залишатися в безпеці, якщо він втече, невідомо, що він зробить.\n\nНікому про це не розповідай і не шукай мене. Капітан повинен затонути разом зі своїм кораблем.\n- Кіана journal.document.caves_explorer.title=Щоденник дослідника journal.document.caves_explorer.discover_hint=Ви можете знайти цей текст у певній області, але тільки після того, як знайдете всі попередні тексти в цьому наборі. diff --git a/core/src/main/assets/messages/journal/journal_zh-hant.properties b/core/src/main/assets/messages/journal/journal_zh-hant.properties index 034ef27e8..2f05782bc 100644 --- a/core/src/main/assets/messages/journal/journal_zh-hant.properties +++ b/core/src/main/assets/messages/journal/journal_zh-hant.properties @@ -69,7 +69,7 @@ journal.document.alchemy_guide.potions.body=歡迎來到《鍊金術的實際應 journal.document.alchemy_guide.stones.title=鍛造符石 journal.document.alchemy_guide.stones.body=在鍊金釜中放入一張卷軸,就能使卷軸的魔力注入到兩塊石頭中。 就能鍛造出符石,你也能得知卷軸上文字的意思! journal.document.alchemy_guide.energy_food.title=鍊金能量與食物烹飪 -journal.document.alchemy_guide.energy_food.body=大多配方需要消耗鍊金能量。這些能量能從消耗品中提煉出來。與此同時也會鑑定提煉物。\n然而並非所有耗能配方都是神秘且不可告人的。 下面的這些配方比起鍊金更接近傳統烹飪法。 +journal.document.alchemy_guide.energy_food.body=大多配方需要消耗鍊金能量。這些能量能從消耗品中提煉出來。與此同時也會鑑定提煉物。\n\n然而並非所有耗能配方都是神秘且不可告人的。 下面的這些配方比起鍊金更接近傳統烹飪法。 journal.document.alchemy_guide.exotic_potions.title=釀造合劑 journal.document.alchemy_guide.exotic_potions.body=將藥劑與一些煉金能量混合能製造合劑。他們有著比普通藥劑更酷的功能,但通常效果也有所差異。 journal.document.alchemy_guide.exotic_scrolls.title=合成秘卷 diff --git a/core/src/main/assets/messages/levels/levels_pt.properties b/core/src/main/assets/messages/levels/levels_pt.properties index 548b2c69a..f168825b5 100644 --- a/core/src/main/assets/messages/levels/levels_pt.properties +++ b/core/src/main/assets/messages/levels/levels_pt.properties @@ -121,7 +121,7 @@ levels.traps.poisondarttrap.desc=Uma pequena zarabatana deve estar escondida nas levels.traps.rockfalltrap.name=armadilha de desmoronamento levels.traps.rockfalltrap.ondeath=Você foi esmagado pela armadilha de desmoronamento... -levels.traps.rockfalltrap.desc=Esta armadilha está conectada a uma série de pedras soltas acima, ativá-la fará com que elas caiam sobre a sala inteira! Se a armadilha não estiver em uma sala específica, as rochas cairão em uma área ao redor da armadilha.\nFelizmente, o mecanismo de gatilho não está oculto. +levels.traps.rockfalltrap.desc=Esta armadilha está conectada a uma série de pedras soltas acima, ativá-la fará com que elas caiam sobre a sala inteira! Se a armadilha não estiver em uma sala específica, as rochas cairão em uma área ao redor da armadilha.\n\nFelizmente, o mecanismo de gatilho não está oculto. levels.traps.shockingtrap.name=armadilha elétrica levels.traps.shockingtrap.desc=Um mecanismo contendo uma grande quantidade de energia está contido dentro dela. Ativar essa armadilha irá descarregar a energia nas redondezas. diff --git a/core/src/main/assets/messages/levels/levels_zh.properties b/core/src/main/assets/messages/levels/levels_zh.properties index 613e87b64..6932a2432 100644 --- a/core/src/main/assets/messages/levels/levels_zh.properties +++ b/core/src/main/assets/messages/levels/levels_zh.properties @@ -74,7 +74,7 @@ levels.traps.explosivetrap.name=爆炸陷阱 levels.traps.explosivetrap.desc=这个陷阱包含一些粉状炸药和一个触发机制。激活它会导致一定范围的爆炸。 levels.traps.flashingtrap.name=闪光陷阱 -levels.traps.flashingtrap.desc=被触发时,这个陷阱将点燃储存在里面的强效闪光粉,使受害者暂时失明,残废,并受到伤害。\n\n这个陷阱的闪光粉储备显然很多,可以在损坏前触发很多次。 +levels.traps.flashingtrap.desc=被触发时,这个陷阱将点燃储存在里面的强效闪光粉,使受害者暂时失明,残废,并受到伤害。\n\n这个陷阱的闪光粉储备显然很多,可以多次触发而不损坏。 levels.traps.flocktrap.name=羊群陷阱 levels.traps.flocktrap.desc=也许是个来自一些业余法师的玩笑,触发这个陷阱就会创造一群魔法绵羊。 diff --git a/core/src/main/assets/messages/misc/misc_ja.properties b/core/src/main/assets/messages/misc/misc_ja.properties index b77a25140..2d394f5f7 100644 --- a/core/src/main/assets/messages/misc/misc_ja.properties +++ b/core/src/main/assets/messages/misc/misc_ja.properties @@ -228,7 +228,7 @@ challenges.darkness_desc=結局、これが本来のダンジョンなのさ!\ challenges.no_scrolls=禁断のルーン文字 challenges.no_scrolls_desc=あるルーン文字が書かれた巻物は見つけるのが難しくなるだろう。残念ながら、それらは常に最も役に立つものだ。\n\n・ダンジョンの強化の巻物の総数が半分になる。 challenges.champion_enemies=敵対的な猛者 -challenges.champion_enemies_desc=成長するのはあなただけではない!\n通常の敵が1階では1/8の確率で猛者の特別な強化を持って生成され、最大21階で1/6まで確率が上昇する。\n\n・ 猛者は眠った状態で生成されても、生成された直後に目を覚ます\n・ 勇士は猛者の生成を知ることができる\n・ 猛者は味方にできない\n\n猛者は6種類存在する:\n_火焔(橙):_ +25%の近接ダメージ、攻撃命中時に発火、死亡時に炎を撒き散らすが、水タイルには広がらない\n_突出(紫):_ +25%の近接ダメージ、近接攻撃範囲+3\n_反魔(緑):_ 被ダメージ-50%、魔法効果に対する免疫\n_巨体(青):_ 被ダメージ-80%、近接攻撃範囲+1、狭い場所には移動できない\n_祝福(黄):_ 4倍の正確性と回避力\n_成長(赤):_ 正確性、回避力、ダメージ、有効なHPが+20%。4ターンごとに1%ずつ増加する +challenges.champion_enemies_desc=成長するのはあなただけではない!\n\n通常の敵が1階では1/8の確率で猛者の特別な強化を持って生成され、最大21階で1/6まで確率が上昇する。\n\n・ 猛者は眠った状態で生成されても、生成された直後に目を覚ます\n・ 勇士は猛者の生成を知ることができる\n・ 猛者は味方にできない\n\n猛者は6種類存在する:\n_火焔(橙):_ +25%の近接ダメージ、攻撃命中時に発火、死亡時に炎を撒き散らすが、水タイルには広がらない\n_突出(紫):_ +25%の近接ダメージ、近接攻撃範囲+3\n_反魔(緑):_ 被ダメージ-50%、魔法効果に対する免疫\n_巨体(青):_ 被ダメージ-80%、近接攻撃範囲+1、狭い場所には移動できない\n_祝福(黄):_ 4倍の正確性と回避力\n_成長(赤):_ 正確性、回避力、ダメージ、有効なHPが+20%。4ターンごとに1%ずつ増加する challenges.stronger_bosses=より凶悪なボス challenges.stronger_bosses_desc=ボス達は、この挑戦で遥かに手強くなる!\n\n_グゥ:_ 体力+20%\n_・_ 水中での治癒量が毎ターン3に増える\n_・_ 2ターンではなく1ターンで体を膨らませる\n_天狗:_ 体力+25%\n_・_ 第1段階: 罠が非常に致命的になる\n_・_ 第2段階: 能力が更に頻発する\n_DM-300:_ 体力+33%\n_・_ 鉄塔が対処しにくくなり、かつ3基起動する\n_・_ 能力が更に強力かつ頻発する\n_・_ DM-300が超充電時は、より高速になる\n_・_ 剥き出しの電線は通常の2倍に増える\n_ドワーフの王:_ 体力+50%\n_・_ 全段階で手下が強くなる\n_・_ 第1段階: 能力と召喚がより高速になる\n_・_ 第2段階: 各回で手下が2体増える\n_・_ 第3段階: 体力2倍、より高速な召喚\n_ヨグ=ゼーヴァ:_\n_・_ 1度に2体の拳が召喚される!\n_・_ 光線のダメージが+60%増える\n_・_ 手下が強くなる diff --git a/core/src/main/assets/messages/misc/misc_ru.properties b/core/src/main/assets/messages/misc/misc_ru.properties index b47b6bf6e..b2a412cf8 100644 --- a/core/src/main/assets/messages/misc/misc_ru.properties +++ b/core/src/main/assets/messages/misc/misc_ru.properties @@ -228,7 +228,7 @@ challenges.darkness_desc=Это же всё-таки подземелье!\n\n- challenges.no_scrolls=Неграмотность challenges.no_scrolls_desc=Одну из рун стало сложнее найти. И, разумеется, самую полезную из них.\n\n- Удалена половина свитков улучшения challenges.champion_enemies=Вражеские чемпионы -challenges.champion_enemies_desc=Не только ты умеешь поднимать уровень!\n\nЧасть обычных противников появляются _чемпионами_, с возрастающим с глубиной шансом — начиная с 1/8 на 1й глубине, и до 1/6 c 21й.\n\n- Чемпионы просыпаются, если они возникают в спящем состоянии\n- При появлении чемпиона герой об этом узнает- Чемпионы не чувствительны к порче и не могут быть превращены в союзников\n\nСуществует шесть видов противников-чемпионов:\n_Пылающий (оранжевый):_ наносит +25% урона в ближнем бою, поджигает при попадании и распространяет пламя при смерти, но не может поджечь клетки с водой\n_Проецирующий (фиолетовый):_ наносит +25% урона в ближнем бою, +3 радиуса в ближнем бою\n_Антимагический (зеленый):_ получает -50% урона, невосприимчив к магическим эффектам\n_Гигантский (синий):_ получает -80% урона, +1 радиуса в ближнем бою, не проходит в тоннели\n_Благословлённый (желтый):_ имеет 4-кратную меткость и уклонение\n_Растущий (красный):_ имеет +20% меткости, уклонения, урона, и эффективных ОЗ. Растет на 1% каждый четвертый ход. +challenges.champion_enemies_desc=Не только ты умеешь поднимать уровень!\n\nЧасть обычных противников появляются _чемпионами_, с возрастающим с глубиной шансом — начиная с 1/8 на 1й глубине, и до 1/6 c 21й.\n\n- Чемпионы просыпаются, если они возникают в спящем состоянии\n- При появлении чемпиона герой об этом узнает\n- Чемпионы не чувствительны к порче и не могут быть превращены в союзников\n\nСуществует шесть видов противников-чемпионов:\n_Пылающий (оранжевый):_ наносит +25% урона в ближнем бою, поджигает при попадании и распространяет пламя при смерти, но не может поджечь клетки с водой\n_Проецирующий (фиолетовый):_ наносит +25% урона в ближнем бою, +3 радиуса в ближнем бою\n_Антимагический (зеленый):_ получает -50% урона, невосприимчив к магическим эффектам\n_Гигантский (синий):_ получает -80% урона, +1 радиуса в ближнем бою, не проходит в тоннели\n_Благословлённый (желтый):_ имеет 4-кратную меткость и уклонение\n_Растущий (красный):_ имеет +20% меткости, уклонения, урона, и эффективных ОЗ. Растет на 1% каждый четвертый ход. challenges.stronger_bosses=Злые боссы challenges.stronger_bosses_desc=В этом испытании, боссы будут зло лютовать!\n\n_Слизень:_ +20% здоровья\n_-_ Исцеление в воде увеличивается со временем, до 3/ход\n_-_ Накачивается за 1 ход вместо 2\n_Тенгу:_ +25% здоровья\n_-_ Фаза 1: ловушки гораздо смертоноснее\n_-_ Фаза 2: способности противника используются чаще\n_DM-300:_ +33% здоровья\n_-_ Активируется 3 вышки с увеличенными характеристиками\n_-_ Способности противника чаще и сильнее\n_-_ DM-300 ещё быстрее, пока сверх-заряжен\n_-_ Открытые провода встречаются чаще\n_Король Дворфов:_ +50% здоровья\n_-_ Приспешники сильнее во всех фазах\n_-_ Фаза 1: более быстрые способности противника и призыв приспешников\n_-_ Фаза 2: ещё 2 приспешника за раунд \n_-_ Фаза 3: 2х здоровья, более быстрый призыв\n_Йог-Джева:_\n_-_ Две Длани вызываются одновременно\n_-_ +60% урона лазером\n_-_ Более сильные личинки diff --git a/core/src/main/assets/messages/plants/plants_el.properties b/core/src/main/assets/messages/plants/plants_el.properties index 582615ffd..bde840459 100644 --- a/core/src/main/assets/messages/plants/plants_el.properties +++ b/core/src/main/assets/messages/plants/plants_el.properties @@ -70,7 +70,7 @@ plants.sungrass.desc=Ο χυμός του ηλιόχορτου φημίζετα plants.sungrass.warden_desc=_Η Δασοφύλακας_ λαμβάνει ίαση από ποδοπατημένο ηλιόχορτο ακόμη και αν φύγει μακριά του. plants.sungrass$seed.name=σπόρος ηλιόχορτου plants.sungrass$health.name=φυτική ίαση -plants.sungrass$health.desc=Το ηλιόχορτο έχει εξαιρετικές ιαματικές ιδιότητες, αλλά πολύ πιο αργές από αυτές του φίλτρου γιατρειάς.\n\nΑν μετακινηθείς από το φυτό, η ίαση θα σταματήσει.\nΊαση που απομένει: %d. +plants.sungrass$health.desc=Το ηλιόχορτο έχει εξαιρετικές ιαματικές ιδιότητες, αλλά πολύ πιο αργές από αυτές του φίλτρου γιατρειάς.\n\nΑν μετακινηθείς από το φυτό, η ίαση θα σταματήσει.\n\nΊαση που απομένει: %d. plants.swiftthistle.name=αστραποβότανο plants.swiftthistle.desc=Το αστραποβότανο επιταχύνει για λίγο τη ροή του χρόνου, επιτρέποντας σε όποιον το πατάει να κάνει κάποιες ενέργειες ακαριαία. diff --git a/core/src/main/assets/messages/plants/plants_zh-hant.properties b/core/src/main/assets/messages/plants/plants_zh-hant.properties index 53327016e..15294fa2e 100644 --- a/core/src/main/assets/messages/plants/plants_zh-hant.properties +++ b/core/src/main/assets/messages/plants/plants_zh-hant.properties @@ -19,7 +19,7 @@ plants.earthroot.desc=碰到地縛根後,它的根部會在你周邊形成某 plants.earthroot.warden_desc=地縛根的根部會隨_守望者_移動,成為攜帶式樹皮護甲。 plants.earthroot$seed.name=地縛根種子 plants.earthroot$armor.name=植被護甲 -plants.earthroot$armor.desc=這是一種由層層樹皮和藤蔓盤結而成且不可移動的天然護甲。\n\n每當你受到物理攻擊時,植被護甲都會吸收%d點傷害,直到其耐久被耗盡並瓦解。\n\n該護甲是不可移動的,所以一旦你離開原位,護甲便會被破壞且變得無用。\n護甲剩餘量:%d點。 +plants.earthroot$armor.desc=這是一種由層層樹皮和藤蔓盤結而成且不可移動的天然護甲。\n\n每當你受到物理攻擊時,植被護甲都會吸收%d點傷害,直到其耐久被耗盡並瓦解。\n\n該護甲是不可移動的,所以一旦你離開原位,護甲便會被破壞且變得無用。\n\n護甲剩餘量:%d點。 plants.fadeleaf.name=消逝草 plants.fadeleaf.desc=任何觸碰到消逝草的生物都會被傳送到當前層的一個隨機地點。 @@ -70,7 +70,7 @@ plants.sungrass.desc=陽春草因其汁液緩慢但顯著的療傷效果而家 plants.sungrass.warden_desc=_守望者_能將陽春草的治療魔力隨身攜帶。 plants.sungrass$seed.name=陽春草種子 plants.sungrass$health.name=草藥療養 -plants.sungrass$health.desc=陽春草擁有優秀的治療能力,但治療速率比治療藥水慢很多。\n脫離植株將會打斷治療效果。\n剩餘治療量:%d。 +plants.sungrass$health.desc=陽春草擁有優秀的治療能力,但治療速率比治療藥水慢很多。\n\n脫離植株將會打斷治療效果。\n\n剩餘治療量:%d。 plants.swiftthistle.name=速行薊 plants.swiftthistle.desc=被踩踏後,速行薊會加速周圍的時間流動,讓踩踏者可以瞬間行動數次。 diff --git a/core/src/main/assets/messages/scenes/scenes_zh-hant.properties b/core/src/main/assets/messages/scenes/scenes_zh-hant.properties index 4b594b085..b2a868b5a 100644 --- a/core/src/main/assets/messages/scenes/scenes_zh-hant.properties +++ b/core/src/main/assets/messages/scenes/scenes_zh-hant.properties @@ -26,7 +26,7 @@ scenes.changesscene.misc=雜項改動 scenes.changesscene.language=語言更新 scenes.changesscene.right_title=更新詳情 scenes.changesscene.right_body=點擊左側的圖標來了解這次的更新資訊。 -scenes.changesscene.lang_warn=更新詳情皆由開發人員撰寫,且只提供英文文本。 +scenes.changesscene.lang_warn=更新詳情皆由開發者撰寫,僅提供英文文本。 scenes.gamescene.descend=你進入到了地下城的第%d層。 scenes.gamescene.spawner_warn=你感覺有一個惡魔能量的源頭在你頭頂上…… @@ -119,7 +119,7 @@ scenes.startscene.sort_recent=排序方式:最近遊玩 scenes.supporterscene.title=資助遊戲開發 scenes.supporterscene.intro=我不希望破碎像素地城沾染任何廣告或侵入性微交易要素。 那些東西毀了不知多少免費遊戲。 取代而之的,我更希望玩家們能對本遊戲進行直接的支持! -scenes.supporterscene.patreon_msg=如果您喜歡玩破碎像素地城並且希望幫助我持續地開發它,請考慮在Patreon上支援我吧!這樣能讓你擁有一大堆的獨有福利!\n-_搶先體驗_能讓你遊玩擁有未來更新內容的版本。\n-我會透過_每週開發部落格_分享我正著力進行的工作。-你能參與_月度調查_,這會直接影響到我的開發方向。\n-在前三年的資助下能獲得_實體胸針_。-你也能加入我的_Discord社群_,裡面有我的開發現況以及聊天頻道。\n你可以通過訪問在Patreon上的頁面獲得更多資訊。 感謝您百忙之中抽空拜訪,祝地城探險愉快! +scenes.supporterscene.patreon_msg=如果您喜歡玩破碎像素地城並且希望幫助我持續地開發它,請考慮在Patreon上支援我吧!這樣能讓你擁有一大堆的獨有福利!\n-_搶先體驗_能讓你遊玩擁有未來更新內容的版本。\n-我會透過_每週開發部落格_分享我正著力進行的工作。\n-你能參與_月度調查_,這會直接影響到我的開發方向。\n-在前三年的資助下能獲得_實體胸針_。\n-你也能加入我的_Discord社群_,裡面有我的開發現況以及聊天頻道。\n你可以通過訪問在Patreon上的頁面獲得更多資訊。 感謝您百忙之中抽空拜訪,祝地城探險愉快! scenes.supporterscene.patreon_english=(請注意:Patreon僅提供英文內容) scenes.supporterscene.supporter_link=前往 Patreon 頁面 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v3_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v3_X_Changes.java index b20760bab..9f0a83280 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v3_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v3_X_Changes.java @@ -85,10 +85,42 @@ public class v3_X_Changes { changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); - changes = new ChangeInfo("", false, null); + changes = new ChangeInfo("v3.3.5", false, null); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes); + changes.addButton( new ChangeButton(new Image(new ImpSprite()), "Quest Tester Area Enemies", + "The quest tester area now has a tester hazard: Marsupial rats!\n" + + "\n" + + "The rats won't put up much of a fight of course, even with your gear removed, but you can use them to get an idea of how enemies will work in the vault. Enemy AI in the vault has been changed to be much more exploitable for stealth gameplay, including a new 'investigating' AI state and wandering enemies not being able to see very far behind themselves as they move.\n" + + "\n" + + "There's also a few new room types in the tester area, to demonstrate enemies in different situations.\n" + + "\n" + + "Expect to see more room layouts and tester hazards in future patches.")); + + changes.addButton(new ChangeButton(Icons.get(Icons.PREFS), Messages.get(ChangesScene.class, "misc"), + "**-** The in-game randomize buttons now blink white as a reminder if the player is currently qualified for the randomized victory badge and outside of the very start of a run.\n" + + "\n" + + "**-** Slightly improved the visual for the existing 'alerted' and 'target lost' thought bubbles.\n" + + "\n" + + "**-** The Gnoll Geomancer is now willing to switch targets if its current target isn't within attacking range.\n" + + "\n" + + "**-** Necromancers will now move their skeleton (instead of trying and failing to push) if they attempt to summon on top of an immobile enemy.")); + + changes.addButton(new ChangeButton(new Image(Assets.Sprites.SPINNER, 144, 0, 16, 16), Messages.get(ChangesScene.class, "bugfixes"), + "Fixed the following bugs:\n" + + "**Caused by v3.3:**\n" + + "**-** Rare freeze bugs when descending to the vault tester area\n" + + "**-** Rare crash bugs\n" + + "\n" + + "**Existed Prior to v3.3:**\n" + + "**-** Exploit where Warrior could refund his shield cooldown by unequipping armor at the right time\n" + + "**-** Exploit where Gladiator could cancel fury partway through, refunding remaining combo\n" + + "**-** Distortion traps never spawning certain rare enemies\n" + + "**-** Grass generated from ember after a garden room burns not being burnable until after save/load (speed of grass recovery has been adjusted to prevent permanent fires)\n" + + "**-** Rare cases where liquid metal could have a quantity of 0\n" + + "**-** Specific cases where helpful tipped darts could deal damage to allies")); + changes = new ChangeInfo("v3.3.4", false, null); changes.hardlight(Window.TITLE_COLOR); changeInfos.add(changes);