v0.3.4: externalized all remaining actor strings
This commit is contained in:
parent
c3b964a8cc
commit
2c76c77360
src/com/shatteredpixel/shatteredpixeldungeon
actors
Char.java
mobs
Acidic.javaAlbino.javaBandit.javaBat.javaBee.javaBrute.javaCrab.javaDM300.javaElemental.javaEye.javaFetidRat.javaGnoll.javaGnollTrickster.javaGolem.javaGoo.javaGreatCrab.javaGuard.javaKing.javaMimic.javaMob.javaMonk.javaNewbornElemental.javaPiranha.javaRat.javaRotHeart.javaRotLasher.javaScorpio.javaSenior.javaShaman.javaShielded.javaSkeleton.javaSpinner.javaStatue.javaSuccubus.javaSwarm.javaTengu.javaThief.javaWarlock.javaWraith.javaYog.java
npcs
items/scrolls
messages
windows
|
@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Yog;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.features.Door;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
|
@ -44,15 +45,6 @@ import com.watabou.utils.Random;
|
|||
import java.util.HashSet;
|
||||
|
||||
public abstract class Char extends Actor {
|
||||
|
||||
protected static final String TXT_HIT = "%s hit %s";
|
||||
protected static final String TXT_KILL = "%s killed you...";
|
||||
protected static final String TXT_DEFEAT = "%s defeated %s";
|
||||
|
||||
private static final String TXT_YOU_MISSED = "%s %s your attack";
|
||||
private static final String TXT_SMB_MISSED = "%s %s %s's attack";
|
||||
|
||||
private static final String TXT_OUT_OF_PARALYSIS = "The pain snapped %s out of paralysis";
|
||||
|
||||
public int pos = 0;
|
||||
|
||||
|
@ -72,7 +64,7 @@ public abstract class Char extends Actor {
|
|||
|
||||
public int viewDistance = 8;
|
||||
|
||||
private HashSet<Buff> buffs = new HashSet<Buff>();
|
||||
private HashSet<Buff> buffs = new HashSet<>();
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
|
@ -121,7 +113,7 @@ public abstract class Char extends Actor {
|
|||
if (hit( this, enemy, false )) {
|
||||
|
||||
if (visibleFight) {
|
||||
GLog.i( TXT_HIT, name, enemy.name );
|
||||
GLog.i( Messages.get(Char.class, "hit", name, enemy.name) );
|
||||
}
|
||||
|
||||
// FIXME
|
||||
|
@ -173,10 +165,10 @@ public abstract class Char extends Actor {
|
|||
Dungeon.fail( Utils.format( ResultDescriptions.MOB, Utils.indefinite( name )) );
|
||||
}
|
||||
|
||||
GLog.n( TXT_KILL, name );
|
||||
GLog.n( Messages.get(Char.class, "kill", name) );
|
||||
|
||||
} else {
|
||||
GLog.i( TXT_DEFEAT, name, enemy.name );
|
||||
GLog.i( Messages.get(Char.class, "defeat", name, enemy.name) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -188,9 +180,9 @@ public abstract class Char extends Actor {
|
|||
String defense = enemy.defenseVerb();
|
||||
enemy.sprite.showStatus( CharSprite.NEUTRAL, defense );
|
||||
if (this == Dungeon.hero) {
|
||||
GLog.i( TXT_YOU_MISSED, enemy.name, defense );
|
||||
GLog.i( Messages.get(Char.class, "you_missed", enemy.name, defense) );
|
||||
} else {
|
||||
GLog.i( TXT_SMB_MISSED, enemy.name, defense, name );
|
||||
GLog.i( Messages.get(Char.class, "smb_missed", enemy.name, defense, name) );
|
||||
}
|
||||
|
||||
Sample.INSTANCE.play(Assets.SND_MISS);
|
||||
|
@ -218,7 +210,7 @@ public abstract class Char extends Actor {
|
|||
}
|
||||
|
||||
public String defenseVerb() {
|
||||
return "dodged";
|
||||
return Messages.get(this, "def_verb");
|
||||
}
|
||||
|
||||
public int dr() {
|
||||
|
@ -264,7 +256,7 @@ public abstract class Char extends Actor {
|
|||
if (Random.Int( dmg ) >= Random.Int( HP )) {
|
||||
Buff.detach( this, Paralysis.class );
|
||||
if (Dungeon.visible[pos]) {
|
||||
GLog.i( TXT_OUT_OF_PARALYSIS, name );
|
||||
GLog.i( Messages.get(Char.class, "out_of_paralysis", name) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -318,7 +310,7 @@ public abstract class Char extends Actor {
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Buff> HashSet<T> buffs( Class<T> c ) {
|
||||
HashSet<T> filtered = new HashSet<T>();
|
||||
HashSet<T> filtered = new HashSet<>();
|
||||
for (Buff b : buffs) {
|
||||
if (c.isInstance( b )) {
|
||||
filtered.add( (T)b );
|
||||
|
@ -381,7 +373,7 @@ public abstract class Char extends Actor {
|
|||
|
||||
@Override
|
||||
protected void onRemove() {
|
||||
for (Buff buff : buffs.toArray( new Buff[0] )) {
|
||||
for (Buff buff : buffs.toArray(new Buff[buffs.size()])) {
|
||||
buff.detach();
|
||||
}
|
||||
}
|
||||
|
@ -440,7 +432,7 @@ public abstract class Char extends Actor {
|
|||
next();
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> EMPTY = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> EMPTY = new HashSet<>();
|
||||
|
||||
public HashSet<Class<?>> resistances() {
|
||||
return EMPTY;
|
||||
|
|
|
@ -28,7 +28,6 @@ import com.watabou.utils.Random;
|
|||
public class Acidic extends Scorpio {
|
||||
|
||||
{
|
||||
name = "acidic scorpio";
|
||||
spriteClass = AcidicSprite.class;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ import com.watabou.utils.Random;
|
|||
public class Albino extends Rat {
|
||||
|
||||
{
|
||||
name = "albino rat";
|
||||
spriteClass = AlbinoSprite.class;
|
||||
|
||||
HP = HT = 15;
|
||||
|
@ -50,10 +49,4 @@ public class Albino extends Rat {
|
|||
|
||||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This is a rare breed of marsupial rat, with pure white fur and jagged teeth.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ public class Bandit extends Thief {
|
|||
public Item item;
|
||||
|
||||
{
|
||||
name = "crazy bandit";
|
||||
spriteClass = BanditSprite.class;
|
||||
|
||||
//1 in 30 chance to be a crazy bandit, equates to overall 1/90 chance.
|
||||
|
|
|
@ -34,7 +34,6 @@ import com.watabou.utils.Random;
|
|||
public class Bat extends Mob {
|
||||
|
||||
{
|
||||
name = "vampire bat";
|
||||
spriteClass = BatSprite.class;
|
||||
|
||||
HP = HT = 30;
|
||||
|
@ -65,11 +64,6 @@ public class Bat extends Mob {
|
|||
return 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "evaded";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackProc( Char enemy, int damage ) {
|
||||
|
||||
|
@ -96,14 +90,7 @@ public class Bat extends Mob {
|
|||
return super.createLoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These brisk and tenacious inhabitants of cave domes may defeat much larger opponents by " +
|
||||
"replenishing their health with each successful attack.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( Leech.class );
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ import com.watabou.utils.Random;
|
|||
public class Bee extends Mob {
|
||||
|
||||
{
|
||||
name = "golden bee";
|
||||
spriteClass = BeeSprite.class;
|
||||
|
||||
viewDistance = 4;
|
||||
|
@ -126,7 +125,7 @@ public class Bee extends Mob {
|
|||
return enemy;
|
||||
|
||||
//find all mobs near the pot
|
||||
HashSet<Char> enemies = new HashSet<Char>();
|
||||
HashSet<Char> enemies = new HashSet<>();
|
||||
for (Mob mob : Dungeon.level.mobs)
|
||||
if (!(mob instanceof Bee) && Level.distance(mob.pos, potPos) <= 3 && (mob.hostile || mob.ally))
|
||||
enemies.add(mob);
|
||||
|
@ -145,15 +144,8 @@ public class Bee extends Mob {
|
|||
this.target = target = potPos;
|
||||
return super.getCloser( target );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Despite their small size, golden bees tend " +
|
||||
"to protect their home fiercely. This one is very mad, better keep your distance.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Poison.class );
|
||||
IMMUNITIES.add( Amok.class );
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BruteSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -33,11 +34,8 @@ import com.watabou.utils.Bundle;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
public class Brute extends Mob {
|
||||
|
||||
private static final String TXT_ENRAGED = "%s becomes enraged!";
|
||||
|
||||
{
|
||||
name = "gnoll brute";
|
||||
spriteClass = BruteSprite.class;
|
||||
|
||||
HP = HT = 40;
|
||||
|
@ -83,20 +81,13 @@ public class Brute extends Mob {
|
|||
enraged = true;
|
||||
spend( TICK );
|
||||
if (Dungeon.visible[pos]) {
|
||||
GLog.w( TXT_ENRAGED, name );
|
||||
sprite.showStatus( CharSprite.NEGATIVE, "enraged" );
|
||||
GLog.w( Messages.get(this, "engraged_text") );
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "engraged") );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Brutes are the largest, strongest and toughest of all gnolls. When severely wounded, " +
|
||||
"they go berserk, inflicting even more damage to their enemies.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Terror.class );
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ import com.watabou.utils.Random;
|
|||
public class Crab extends Mob {
|
||||
|
||||
{
|
||||
name = "sewer crab";
|
||||
spriteClass = CrabSprite.class;
|
||||
|
||||
HP = HT = 15;
|
||||
|
@ -57,17 +56,4 @@ public class Crab extends Mob {
|
|||
public int dr() {
|
||||
return 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "parried";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These huge crabs are at the top of the food chain in the sewers. " +
|
||||
"They are extremely fast and their thick carapace can withstand " +
|
||||
"heavy blows.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -55,7 +56,6 @@ import com.watabou.utils.Random;
|
|||
public class DM300 extends Mob {
|
||||
|
||||
{
|
||||
name = "DM-300";
|
||||
spriteClass = DM300Sprite.class;
|
||||
|
||||
HP = HT = 200;
|
||||
|
@ -101,7 +101,7 @@ public class DM300 extends Mob {
|
|||
sprite.emitter().burst( ElmoParticle.FACTORY, 5 );
|
||||
|
||||
if (Dungeon.visible[step] && Dungeon.hero.isAlive()) {
|
||||
GLog.n( "DM-300 repairs itself!" );
|
||||
GLog.n( Messages.get(this, "repair") );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -156,25 +156,17 @@ public class DM300 extends Mob {
|
|||
GLog.p("Your beacon grows stronger!");
|
||||
}
|
||||
|
||||
yell( "Mission failed. Shutting down." );
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notice() {
|
||||
super.notice();
|
||||
BossHealthBar.assignBoss(this);
|
||||
yell( "Unauthorised personnel detected." );
|
||||
yell( Messages.get(this, "notice") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This machine was created by the Dwarves several centuries ago. Later, Dwarves started to replace machines with " +
|
||||
"golems, elementals and even demons. Eventually it led their civilization to the decline. The DM-300 and similar " +
|
||||
"machines were typically used for construction and mining, and in some cases, for city defense.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( Death.class );
|
||||
RESISTANCES.add( ScrollOfPsionicBlast.class );
|
||||
|
@ -185,7 +177,7 @@ public class DM300 extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( ToxicGas.class );
|
||||
IMMUNITIES.add( Terror.class );
|
||||
|
|
|
@ -38,7 +38,6 @@ import com.watabou.utils.Random;
|
|||
public class Elemental extends Mob {
|
||||
|
||||
{
|
||||
name = "fire elemental";
|
||||
spriteClass = ElementalSprite.class;
|
||||
|
||||
HP = HT = 65;
|
||||
|
@ -96,14 +95,7 @@ public class Elemental extends Mob {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Wandering fire elementals are a byproduct of summoning greater entities. " +
|
||||
"They are too chaotic in their nature to be controlled by even the most powerful demonologist.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Burning.class );
|
||||
IMMUNITIES.add( Fire.class );
|
||||
|
|
|
@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Death;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Leech;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.EyeSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -43,10 +44,7 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class Eye extends Mob {
|
||||
|
||||
private static final String TXT_DEATHGAZE_KILLED = "%s's deathgaze killed you...";
|
||||
|
||||
{
|
||||
name = "evil eye";
|
||||
spriteClass = EyeSprite.class;
|
||||
|
||||
HP = HT = 100;
|
||||
|
@ -131,7 +129,7 @@ public class Eye extends Mob {
|
|||
|
||||
if (!ch.isAlive() && ch == Dungeon.hero) {
|
||||
Dungeon.fail( Utils.format( ResultDescriptions.MOB, Utils.indefinite( name ) ) );
|
||||
GLog.n( TXT_DEATHGAZE_KILLED, name );
|
||||
GLog.n( Messages.get(this, "deathgaze_kill") );
|
||||
}
|
||||
} else {
|
||||
ch.sprite.showStatus( CharSprite.NEUTRAL, ch.defenseVerb() );
|
||||
|
@ -141,14 +139,7 @@ public class Eye extends Mob {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"One of this demon's other names is \"orb of hatred\", because when it sees an enemy, " +
|
||||
"it uses its deathgaze recklessly, often ignoring its allies and wounding them.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( WandOfDisintegration.class );
|
||||
RESISTANCES.add( Death.class );
|
||||
|
@ -160,7 +151,7 @@ public class Eye extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Terror.class );
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ import java.util.HashSet;
|
|||
public class FetidRat extends Rat {
|
||||
|
||||
{
|
||||
name = "fetid rat";
|
||||
spriteClass = FetidRatSprite.class;
|
||||
|
||||
HP = HT = 20;
|
||||
|
@ -83,17 +82,7 @@ public class FetidRat extends Rat {
|
|||
Ghost.Quest.process();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Something is clearly wrong with this rat. Its greasy black fur and rotting skin are very " +
|
||||
"different from the healthy rats you've seen previously. It's pale green eyes " +
|
||||
"make it seem especially menacing.\n\n" +
|
||||
"The rat carries a cloud of horrible stench with it, it's overpoweringly strong up close.\n\n" +
|
||||
"Dark ooze dribbles from the rat's mouth, it eats through the floor but seems to dissolve in water.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( StenchGas.class );
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ import com.watabou.utils.Random;
|
|||
public class Gnoll extends Mob {
|
||||
|
||||
{
|
||||
name = "gnoll scout";
|
||||
spriteClass = GnollSprite.class;
|
||||
|
||||
HP = HT = 12;
|
||||
|
@ -56,11 +55,4 @@ public class Gnoll extends Mob {
|
|||
public int dr() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Gnolls are hyena-like humanoids. They dwell in sewers and dungeons, venturing up to raid the surface from time to time. " +
|
||||
"Gnoll scouts are regular members of their pack, they are not as strong as brutes and not as intelligent as shamans.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@ import com.watabou.utils.Bundle;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
public class GnollTrickster extends Gnoll {
|
||||
|
||||
{
|
||||
name = "gnoll trickster";
|
||||
spriteClass = GnollTricksterSprite.class;
|
||||
|
||||
HP = HT = 20;
|
||||
|
@ -105,16 +105,6 @@ public class GnollTrickster extends Gnoll {
|
|||
Ghost.Quest.process();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"A strange looking creature, even by gnoll standards. It hunches forward with a wicked grin, " +
|
||||
"almost cradling the satchel hanging over its shoulder. Its eyes are wide with a strange mix of " +
|
||||
"fear and excitement.\n\n" +
|
||||
"There is a large collection of poorly made darts in its satchel, they all seem to be " +
|
||||
"tipped with various harmful substances.";
|
||||
}
|
||||
|
||||
private static final String COMBO = "combo";
|
||||
|
||||
@Override
|
||||
|
|
|
@ -34,7 +34,6 @@ import com.watabou.utils.Random;
|
|||
public class Golem extends Mob {
|
||||
|
||||
{
|
||||
name = "golem";
|
||||
spriteClass = GolemSprite.class;
|
||||
|
||||
HP = HT = 85;
|
||||
|
@ -63,28 +62,14 @@ public class Golem extends Mob {
|
|||
public int dr() {
|
||||
return 12;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "blocked";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void die( Object cause ) {
|
||||
Imp.Quest.process( this );
|
||||
|
||||
super.die( cause );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The Dwarves tried to combine their knowledge of mechanisms with their newfound power of elemental binding. " +
|
||||
"They used spirits of earth as the \"soul\" for the mechanical bodies of golems, which were believed to be " +
|
||||
"most controllable of all. Despite this, the tiniest mistake in the ritual could cause an outbreak.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
}
|
||||
|
||||
|
@ -93,7 +78,7 @@ public class Golem extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Amok.class );
|
||||
IMMUNITIES.add( Terror.class );
|
||||
|
|
|
@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
|
@ -52,8 +53,8 @@ import com.watabou.utils.Bundle;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
public class Goo extends Mob {
|
||||
|
||||
{
|
||||
name = "Goo";
|
||||
HP = HT = 100;
|
||||
EXP = 10;
|
||||
defenseSkill = 8;
|
||||
|
@ -184,8 +185,8 @@ public class Goo extends Mob {
|
|||
}
|
||||
|
||||
if (Dungeon.visible[pos]) {
|
||||
sprite.showStatus( CharSprite.NEGATIVE, "!!!" );
|
||||
GLog.n( "Goo is pumping itself up!" );
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "!!!") );
|
||||
GLog.n( Messages.get(this, "pumpup") );
|
||||
}
|
||||
|
||||
spend( attackDelay() );
|
||||
|
@ -219,10 +220,10 @@ public class Goo extends Mob {
|
|||
super.damage(dmg, src);
|
||||
if ((HP*2 <= HT) && !bleeding){
|
||||
BossHealthBar.bleed(true);
|
||||
GLog.w("Goo Becomes Enraged!!");
|
||||
sprite.showStatus(CharSprite.NEGATIVE, "enraged");
|
||||
GLog.w( Messages.get(this, "enraged_text") );
|
||||
sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "enraged"));
|
||||
((GooSprite)sprite).spray(true);
|
||||
yell("GLUUUURP!");
|
||||
yell(Messages.get(this, "gluuurp"));
|
||||
spend( TICK );
|
||||
}
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
|
@ -241,24 +242,14 @@ public class Goo extends Mob {
|
|||
|
||||
Badges.validateBossSlain();
|
||||
|
||||
yell( "glurp... glurp..." );
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notice() {
|
||||
super.notice();
|
||||
BossHealthBar.assignBoss(this);
|
||||
yell( "GLURP-GLURP!" );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Little is known about The Goo. It's quite possible that it is not even a creature, but rather a " +
|
||||
"conglomerate of vile substances from the sewers that somehow gained basic intelligence. " +
|
||||
"Regardless, dark magic is certainly what has allowed Goo to exist.\n\n" +
|
||||
"Its gelatinous nature has let it absorb lots of dark energy, you feel a chill just from being near. " +
|
||||
"If goo is able to attack with this energy you won't live for long.";
|
||||
yell( Messages.get(this, "notice") );
|
||||
}
|
||||
|
||||
private final String PUMPEDUP = "pumpedup";
|
||||
|
@ -282,7 +273,7 @@ public class Goo extends Mob {
|
|||
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
RESISTANCES.add( Death.class );
|
||||
|
|
|
@ -26,13 +26,14 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.LightningTrap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GreatCrabSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
||||
public class GreatCrab extends Crab {
|
||||
|
||||
{
|
||||
name = "great crab";
|
||||
spriteClass = GreatCrabSprite.class;
|
||||
|
||||
HP = HT = 25;
|
||||
|
@ -66,8 +67,8 @@ public class GreatCrab extends Crab {
|
|||
//crab blocks all attacks originating from the hero or enemy characters or traps if it is alerted.
|
||||
//All direct damage from these sources is negated, no exceptions. blob/debuff effects go through as normal.
|
||||
if (enemySeen && (src instanceof Wand || src instanceof LightningTrap.Electricity || src instanceof Char)){
|
||||
GLog.n("The crab notices the attack and blocks with its massive claw.");
|
||||
sprite.showStatus( CharSprite.NEUTRAL, "blocked" );
|
||||
GLog.n( Messages.get(this, "noticed") );
|
||||
sprite.showStatus( CharSprite.NEUTRAL, Messages.get(this, "blocked") );
|
||||
} else {
|
||||
super.damage( dmg, src );
|
||||
}
|
||||
|
@ -82,15 +83,4 @@ public class GreatCrab extends Crab {
|
|||
Dungeon.level.drop( new MysteryMeat(), pos );
|
||||
Dungeon.level.drop( new MysteryMeat(), pos ).sprite.drop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This crab is gigantic, even compared to other sewer crabs. " +
|
||||
"Its blue shell is covered in cracks and barnacles, showing great age. " +
|
||||
"It lumbers around slowly, barely keeping balance with its massive claw.\n\n" +
|
||||
"While the crab only has one claw, its size easily compensates. " +
|
||||
"The crab holds the claw infront of itself whenever it sees a threat, shielding " +
|
||||
"itself behind an impenetrable wall of carapace.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GuardSprite;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
|
@ -42,7 +43,6 @@ public class Guard extends Mob {
|
|||
private boolean chainsUsed = false;
|
||||
|
||||
{
|
||||
name = "prison guard";
|
||||
spriteClass = GuardSprite.class;
|
||||
|
||||
HP = HT = 30;
|
||||
|
@ -104,7 +104,7 @@ public class Guard extends Mob {
|
|||
return false;
|
||||
} else {
|
||||
final int newPosFinal = newPos;
|
||||
yell("get over here!");
|
||||
yell( Messages.get(this, "scorpion") );
|
||||
sprite.parent.add(new Chains(pos, enemy.pos, new Callback() {
|
||||
public void call() {
|
||||
Actor.addDelayed(new Pushing(enemy, enemy.pos, newPosFinal), -1);
|
||||
|
@ -134,11 +134,6 @@ public class Guard extends Mob {
|
|||
return 7;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "blocked";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Item createLoot() {
|
||||
//first see if we drop armor, chance is 1/8 (0.125f)
|
||||
|
@ -156,13 +151,6 @@ public class Guard extends Mob {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Once keepers of the prison, these guards have long since become no different than the inmates. " +
|
||||
"They shamble like zombies, brainlessly roaming through the halls in search of anything out of place, like you!\n\n" +
|
||||
"They carry chains around their hip, possibly used to pull in enemies to close range.";
|
||||
}
|
||||
|
||||
private final String CHAINSUSED = "chainsused";
|
||||
|
||||
@Override
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -58,7 +59,6 @@ public class King extends Mob {
|
|||
private static final int MAX_ARMY_SIZE = 5;
|
||||
|
||||
{
|
||||
name = "King of Dwarves";
|
||||
spriteClass = KingSprite.class;
|
||||
|
||||
HP = HT = 300;
|
||||
|
@ -103,11 +103,6 @@ public class King extends Mob {
|
|||
return 14;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "parried";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean getCloser( int target ) {
|
||||
return canTryToSummon() ?
|
||||
|
@ -168,7 +163,7 @@ public class King extends Mob {
|
|||
GLog.p("Your beacon grows stronger!");
|
||||
}
|
||||
|
||||
yell( "You cannot kill me, " + Dungeon.hero.givenName() + "... I am... immortal..." );
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -225,26 +220,17 @@ public class King extends Mob {
|
|||
} while (dist < undeadsToSummon);
|
||||
}
|
||||
|
||||
yell( "Arise, slaves!" );
|
||||
yell( Messages.get(this, "arise") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notice() {
|
||||
super.notice();
|
||||
BossHealthBar.assignBoss(this);
|
||||
yell( "How dare you!" );
|
||||
yell( Messages.get(this, "notice") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The last king of dwarves was known for his deep understanding of processes of life and death. " +
|
||||
"He has persuaded members of his court to participate in a ritual, that should have granted them " +
|
||||
"eternal youthfulness. In the end he was the only one, who got it - and an army of undead " +
|
||||
"as a bonus.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
RESISTANCES.add( Death.class );
|
||||
|
@ -257,7 +243,7 @@ public class King extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Paralysis.class );
|
||||
IMMUNITIES.add( Vertigo.class );
|
||||
|
@ -273,7 +259,6 @@ public class King extends Mob {
|
|||
public static int count = 0;
|
||||
|
||||
{
|
||||
name = "undead dwarf";
|
||||
spriteClass = UndeadSprite.class;
|
||||
|
||||
HP = HT = 28;
|
||||
|
@ -338,20 +323,8 @@ public class King extends Mob {
|
|||
public int dr() {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "blocked";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These undead dwarves, risen by the will of the King of Dwarves, were members of his court. " +
|
||||
"They appear as skeletons with a stunning amount of facial hair.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Death.class );
|
||||
IMMUNITIES.add( Paralysis.class );
|
||||
|
|
|
@ -48,7 +48,6 @@ public class Mimic extends Mob {
|
|||
private int level;
|
||||
|
||||
{
|
||||
name = "mimic";
|
||||
spriteClass = MimicSprite.class;
|
||||
|
||||
properties.add(Property.DEMONIC);
|
||||
|
@ -69,7 +68,7 @@ public class Mimic extends Mob {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
items = new ArrayList<Item>( (Collection<Item>) ((Collection<?>) bundle.getCollection( ITEMS ) ));
|
||||
items = new ArrayList<>( (Collection<Item>) ((Collection<?>) bundle.getCollection( ITEMS ) ));
|
||||
adjustStats( bundle.getInt( LEVEL ) );
|
||||
super.restoreFromBundle(bundle);
|
||||
}
|
||||
|
@ -112,17 +111,10 @@ public class Mimic extends Mob {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Mimics are magical creatures which can take any shape they wish. In dungeons they almost always " +
|
||||
"choose a shape of a treasure chest, because they know how to beckon an adventurer.";
|
||||
}
|
||||
|
||||
public static Mimic spawnAt( int pos, List<Item> items ) {
|
||||
Char ch = Actor.findChar( pos );
|
||||
if (ch != null) {
|
||||
ArrayList<Integer> candidates = new ArrayList<Integer>();
|
||||
ArrayList<Integer> candidates = new ArrayList<>();
|
||||
for (int n : Level.NEIGHBOURS8) {
|
||||
int cell = pos + n;
|
||||
if ((Level.passable[cell] || Level.avoid[cell]) && Actor.findChar( cell ) == null) {
|
||||
|
@ -146,7 +138,7 @@ public class Mimic extends Mob {
|
|||
}
|
||||
|
||||
Mimic m = new Mimic();
|
||||
m.items = new ArrayList<Item>( items );
|
||||
m.items = new ArrayList<>( items );
|
||||
m.adjustStats( Dungeon.depth );
|
||||
m.pos = pos;
|
||||
m.state = m.HUNTING;
|
||||
|
@ -174,7 +166,7 @@ public class Mimic extends Mob {
|
|||
return m;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( ScrollOfPsionicBlast.class );
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfAccuracy;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level.Feeling;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
|
@ -56,6 +57,7 @@ import java.util.HashSet;
|
|||
public abstract class Mob extends Char {
|
||||
|
||||
{
|
||||
name = Messages.get(this, "name");
|
||||
actPriority = 2; //hero gets priority over mobs.
|
||||
}
|
||||
|
||||
|
@ -184,7 +186,7 @@ public abstract class Mob extends Char {
|
|||
if ( enemy == null || !enemy.isAlive() || state == WANDERING ||
|
||||
((buff( Amok.class ) != null || buff(Corruption.class) != null) && enemy == Dungeon.hero )) {
|
||||
|
||||
HashSet<Char> enemies = new HashSet<Char>();
|
||||
HashSet<Char> enemies = new HashSet<>();
|
||||
|
||||
//if the mob is amoked or corrupted...
|
||||
if ( buff(Amok.class) != null || buff(Corruption.class) != null) {
|
||||
|
@ -241,7 +243,7 @@ public abstract class Mob extends Char {
|
|||
super.add( buff );
|
||||
if (buff instanceof Amok) {
|
||||
if (sprite != null) {
|
||||
sprite.showStatus( CharSprite.NEGATIVE, TXT_RAGE );
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "rage") );
|
||||
}
|
||||
state = HUNTING;
|
||||
} else if (buff instanceof Terror) {
|
||||
|
@ -257,7 +259,7 @@ public abstract class Mob extends Char {
|
|||
public void remove( Buff buff ) {
|
||||
super.remove( buff );
|
||||
if (buff instanceof Terror) {
|
||||
sprite.showStatus( CharSprite.NEGATIVE, TXT_RAGE );
|
||||
sprite.showStatus( CharSprite.NEGATIVE, Messages.get(this, "rage") );
|
||||
state = HUNTING;
|
||||
}
|
||||
}
|
||||
|
@ -426,7 +428,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
int exp = exp();
|
||||
if (exp > 0) {
|
||||
Dungeon.hero.sprite.showStatus( CharSprite.POSITIVE, TXT_EXP, exp );
|
||||
Dungeon.hero.sprite.showStatus( CharSprite.POSITIVE, Messages.get(this, "exp", exp) );
|
||||
Dungeon.hero.earnExp( exp );
|
||||
}
|
||||
}
|
||||
|
@ -456,7 +458,7 @@ public abstract class Mob extends Char {
|
|||
}
|
||||
|
||||
if (Dungeon.hero.isAlive() && !Dungeon.visible[pos]) {
|
||||
GLog.i( TXT_DIED );
|
||||
GLog.i( Messages.get(this, "dead") );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -497,7 +499,7 @@ public abstract class Mob extends Char {
|
|||
}
|
||||
|
||||
public String description() {
|
||||
return "Real description is coming soon!";
|
||||
return Messages.get(this, "desc");
|
||||
}
|
||||
|
||||
public void notice() {
|
||||
|
@ -514,8 +516,8 @@ public abstract class Mob extends Char {
|
|||
}
|
||||
|
||||
public interface AiState {
|
||||
public boolean act( boolean enemyInFOV, boolean justAlerted );
|
||||
public String status();
|
||||
boolean act( boolean enemyInFOV, boolean justAlerted );
|
||||
String status();
|
||||
}
|
||||
|
||||
protected class Sleeping implements AiState {
|
||||
|
@ -554,7 +556,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format( "This %s is sleeping", name );
|
||||
return Messages.get(this, "status", name );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -591,7 +593,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format( "This %s is wandering", name );
|
||||
return Messages.get(this, "status", name );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -630,7 +632,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format( "This %s is hunting", name );
|
||||
return Messages.get(this, "status", name );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -668,7 +670,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format( "This %s is fleeing", name );
|
||||
return Messages.get(this, "status", name );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -685,7 +687,7 @@ public abstract class Mob extends Char {
|
|||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format( "This %s is passive", name );
|
||||
return Messages.get(this, "status", name );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,17 +31,15 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.food.Food;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Knuckles;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MonkSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class Monk extends Mob {
|
||||
|
||||
public static final String TXT_DISARM = "%s has knocked the %s from your hands!";
|
||||
|
||||
{
|
||||
name = "dwarf monk";
|
||||
spriteClass = MonkSprite.class;
|
||||
|
||||
HP = HT = 70;
|
||||
|
@ -76,11 +74,6 @@ public class Monk extends Mob {
|
|||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "parried";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die( Object cause ) {
|
||||
Imp.Quest.process( this );
|
||||
|
@ -106,7 +99,7 @@ public class Monk extends Mob {
|
|||
Dungeon.quickslot.clearItem(weapon);
|
||||
weapon.updateQuickslot();
|
||||
Dungeon.level.drop(weapon, hero.pos).sprite.drop();
|
||||
GLog.w(TXT_DISARM, name, weapon.name());
|
||||
GLog.w(Messages.get(this, "diarm", weapon.name()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -114,14 +107,7 @@ public class Monk extends Mob {
|
|||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These monks are fanatics, who devoted themselves to protecting their city's secrets from all aliens. " +
|
||||
"They don't use any armor or weapons, relying solely on the art of hand-to-hand combat.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Amok.class );
|
||||
IMMUNITIES.add( Terror.class );
|
||||
|
|
|
@ -30,7 +30,6 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.NewbornElementalSprite;
|
|||
public class NewbornElemental extends Elemental {
|
||||
|
||||
{
|
||||
name = "newborn fire elemental";
|
||||
spriteClass = NewbornElementalSprite.class;
|
||||
|
||||
HT = 65;
|
||||
|
@ -62,13 +61,4 @@ public class NewbornElemental extends Elemental {
|
|||
super.die(cause);
|
||||
Dungeon.level.drop( new Embers(), pos ).sprite.drop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Fire elementals are a byproduct of summoning greater entities. " +
|
||||
"They are too chaotic in their nature to be controlled by even the most powerful demonologist.\n\n" +
|
||||
"This fire elemental is freshy summoned, and is weakened as a result. " +
|
||||
"In this state is it especially vulnerable to the cold. " +
|
||||
"Its offensive capabilities are still great though, caution is advised.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ import com.watabou.utils.Random;
|
|||
public class Piranha extends Mob {
|
||||
|
||||
{
|
||||
name = "giant piranha";
|
||||
spriteClass = PiranhaSprite.class;
|
||||
|
||||
baseSpeed = 2f;
|
||||
|
@ -140,15 +139,8 @@ public class Piranha extends Mob {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These carnivorous fish are not natural inhabitants of underground pools. " +
|
||||
"They were bred specifically to protect flooded treasure vaults.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Burning.class );
|
||||
IMMUNITIES.add( Paralysis.class );
|
||||
|
|
|
@ -28,7 +28,6 @@ import com.watabou.utils.Random;
|
|||
public class Rat extends Mob {
|
||||
|
||||
{
|
||||
name = "marsupial rat";
|
||||
spriteClass = RatSprite.class;
|
||||
|
||||
HP = HT = 8;
|
||||
|
@ -51,11 +50,4 @@ public class Rat extends Mob {
|
|||
public int dr() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Marsupial rats are aggressive but rather weak denizens " +
|
||||
"of the sewers. They have a nasty bite, but are only life threatening in large numbers.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import java.util.HashSet;
|
|||
public class RotHeart extends Mob {
|
||||
|
||||
{
|
||||
name = "rot heart";
|
||||
spriteClass = RotHeartSprite.class;
|
||||
|
||||
HP = HT = 80;
|
||||
|
@ -102,14 +101,6 @@ public class RotHeart extends Mob {
|
|||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"A Rotberry's fruit is very unique. Instead of rotting away and providing nutrients, the fruit grows, " +
|
||||
"hardens, and encompasses the seed. It provides protection for the internal organs which grow " +
|
||||
"inside the fruit. This giant orb is referred to as the heart of an adult rotberry plant.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( ToxicGas.class );
|
||||
|
|
|
@ -36,7 +36,6 @@ import java.util.HashSet;
|
|||
public class RotLasher extends Mob {
|
||||
|
||||
{
|
||||
name = "rot lasher";
|
||||
spriteClass = RotLasherSprite.class;
|
||||
|
||||
HP = HT = 40;
|
||||
|
@ -101,14 +100,6 @@ public class RotLasher extends Mob {
|
|||
return 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The rot lasher is a part of a mature rotberry plant's root structure, and also their primary means of defence. " +
|
||||
"Lashers are stuck into the ground, but will violently assault anything that gets near to them. " +
|
||||
"When there is no nearby prey, they stand motionless, attempting to blend in with surrounding vegetation.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( ToxicGas.class );
|
||||
|
@ -119,10 +110,5 @@ public class RotLasher extends Mob {
|
|||
return IMMUNITIES;
|
||||
}
|
||||
|
||||
private class Waiting extends Mob.Wandering{
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format("This %s is idle", name);
|
||||
}
|
||||
}
|
||||
private class Waiting extends Mob.Wandering{}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,6 @@ import com.watabou.utils.Random;
|
|||
public class Scorpio extends Mob {
|
||||
|
||||
{
|
||||
name = "scorpio";
|
||||
spriteClass = ScorpioSprite.class;
|
||||
|
||||
HP = HT = 95;
|
||||
|
@ -106,14 +105,7 @@ public class Scorpio extends Mob {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These huge arachnid-like demonic creatures avoid close combat by all means, " +
|
||||
"firing crippling serrated spikes from long distances.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( Leech.class );
|
||||
RESISTANCES.add( Poison.class );
|
||||
|
|
|
@ -30,7 +30,6 @@ import com.watabou.utils.Random;
|
|||
public class Senior extends Monk {
|
||||
|
||||
{
|
||||
name = "senior monk";
|
||||
spriteClass = SeniorSprite.class;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
|||
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
|
||||
|
@ -42,10 +43,7 @@ public class Shaman extends Mob implements Callback {
|
|||
|
||||
private static final float TIME_TO_ZAP = 1f;
|
||||
|
||||
private static final String TXT_LIGHTNING_KILLED = "%s's lightning bolt killed you...";
|
||||
|
||||
{
|
||||
name = "gnoll shaman";
|
||||
spriteClass = ShamanSprite.class;
|
||||
|
||||
HP = HT = 18;
|
||||
|
@ -89,7 +87,7 @@ public class Shaman extends Mob implements Callback {
|
|||
|
||||
boolean visible = Level.fieldOfView[pos] || Level.fieldOfView[enemy.pos];
|
||||
if (visible) {
|
||||
((ShamanSprite)sprite).zap( enemy.pos );
|
||||
sprite.zap( enemy.pos );
|
||||
}
|
||||
|
||||
spend( TIME_TO_ZAP );
|
||||
|
@ -110,7 +108,7 @@ public class Shaman extends Mob implements Callback {
|
|||
|
||||
if (!enemy.isAlive()) {
|
||||
Dungeon.fail( Utils.format( ResultDescriptions.MOB, Utils.indefinite( name ) ) );
|
||||
GLog.n( TXT_LIGHTNING_KILLED, name );
|
||||
GLog.n( Messages.get(this, "zap_kill") );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -125,16 +123,8 @@ public class Shaman extends Mob implements Callback {
|
|||
public void call() {
|
||||
next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The most intelligent gnolls can master shamanistic magic. Gnoll shamans prefer " +
|
||||
"battle spells to compensate for lack of might, not hesitating to use them " +
|
||||
"on those who question their status in a tribe.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( LightningTrap.Electricity.class );
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ShieldedSprite;
|
|||
public class Shielded extends Brute {
|
||||
|
||||
{
|
||||
name = "shielded brute";
|
||||
spriteClass = ShieldedSprite.class;
|
||||
|
||||
defenseSkill = 20;
|
||||
|
@ -37,11 +36,6 @@ public class Shielded extends Brute {
|
|||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "blocked";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die( Object cause ) {
|
||||
super.die( cause );
|
||||
|
|
|
@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
|||
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
|
@ -41,7 +42,6 @@ public class Skeleton extends Mob {
|
|||
private static final String TXT_HERO_KILLED = "You were killed by the explosion of bones...";
|
||||
|
||||
{
|
||||
name = "skeleton";
|
||||
spriteClass = SkeletonSprite.class;
|
||||
|
||||
HP = HT = 25;
|
||||
|
@ -84,7 +84,7 @@ public class Skeleton extends Mob {
|
|||
|
||||
if (heroKilled) {
|
||||
Dungeon.fail( Utils.format( ResultDescriptions.MOB, Utils.indefinite( name ) ) );
|
||||
GLog.n( TXT_HERO_KILLED );
|
||||
GLog.n( Messages.get(this, "explo_kill") );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,20 +110,7 @@ public class Skeleton extends Mob {
|
|||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "blocked";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Skeletons are composed of corpses bones from unlucky adventurers and inhabitants of the dungeon, " +
|
||||
"animated by emanations of evil magic from the depths below. After they have been " +
|
||||
"damaged enough, they disintegrate in an explosion of bones.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Death.class );
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ import com.watabou.utils.Random;
|
|||
public class Spinner extends Mob {
|
||||
|
||||
{
|
||||
name = "cave spinner";
|
||||
spriteClass = SpinnerSprite.class;
|
||||
|
||||
HP = HT = 50;
|
||||
|
@ -96,14 +95,7 @@ public class Spinner extends Mob {
|
|||
super.move(step);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"These greenish furry cave spiders try to avoid direct combat, preferring to wait in the distance " +
|
||||
"while their victim, entangled in the spinner's excreted cobweb, slowly dies from their poisonous bite.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
|
||||
static {
|
||||
RESISTANCES.add(Poison.class);
|
||||
|
@ -114,7 +106,7 @@ public class Spinner extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
|
||||
static {
|
||||
IMMUNITIES.add(Roots.class);
|
||||
|
|
|
@ -34,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon.Enchantment;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Death;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Leech;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.StatueSprite;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
|
@ -147,13 +148,11 @@ public class Statue extends Mob {
|
|||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"You would think that it's just another one of this dungeon's ugly statues, but its red glowing eyes give it away." +
|
||||
"\n\nWhile the statue itself is made of stone, the _" + weapon.name() + "_, it's wielding, looks real.";
|
||||
return Messages.get(this, "desc", weapon.name());
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
RESISTANCES.add( Poison.class );
|
||||
|
|
|
@ -47,7 +47,6 @@ public class Succubus extends Mob {
|
|||
private int delay = 0;
|
||||
|
||||
{
|
||||
name = "succubus";
|
||||
spriteClass = SuccubusSprite.class;
|
||||
|
||||
HP = HT = 80;
|
||||
|
@ -106,7 +105,7 @@ public class Succubus extends Mob {
|
|||
cell = route.path.get(route.dist-1);
|
||||
|
||||
if (Level.avoid[ cell ]){
|
||||
ArrayList<Integer> candidates = new ArrayList<Integer>();
|
||||
ArrayList<Integer> candidates = new ArrayList<>();
|
||||
for (int n : Level.NEIGHBOURS8) {
|
||||
cell = route.collisionPos + n;
|
||||
if (Level.passable[cell] && Actor.findChar( cell ) == null) {
|
||||
|
@ -136,14 +135,7 @@ public class Succubus extends Mob {
|
|||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The succubi are demons that look like seductive (in a slightly gothic way) girls. Using its magic, the succubus " +
|
||||
"can charm a hero, who will become unable to attack anything until the charm wears off.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( Leech.class );
|
||||
}
|
||||
|
@ -153,7 +145,7 @@ public class Succubus extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Sleep.class );
|
||||
}
|
||||
|
|
|
@ -43,7 +43,6 @@ import com.watabou.utils.Random;
|
|||
public class Swarm extends Mob {
|
||||
|
||||
{
|
||||
name = "swarm of flies";
|
||||
spriteClass = SwarmSprite.class;
|
||||
|
||||
HP = HT = 50;
|
||||
|
@ -86,7 +85,7 @@ public class Swarm extends Mob {
|
|||
public int defenseProc( Char enemy, int damage ) {
|
||||
|
||||
if (HP >= damage + 2) {
|
||||
ArrayList<Integer> candidates = new ArrayList<Integer>();
|
||||
ArrayList<Integer> candidates = new ArrayList<>();
|
||||
boolean[] passable = Level.passable;
|
||||
|
||||
int[] neighbours = {pos + 1, pos - 1, pos + Level.WIDTH, pos - Level.WIDTH};
|
||||
|
@ -122,11 +121,6 @@ public class Swarm extends Mob {
|
|||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "evaded";
|
||||
}
|
||||
|
||||
private Swarm split() {
|
||||
Swarm clone = new Swarm();
|
||||
clone.generation = generation + 1;
|
||||
|
@ -155,11 +149,4 @@ public class Swarm extends Mob {
|
|||
Dungeon.limitedDrops.swarmHP.count++;
|
||||
return super.createLoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The deadly swarm of flies buzzes angrily. Every non-magical attack " +
|
||||
"will split it into two smaller but equally dangerous swarms.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.PrisonBossLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SpearTrap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -54,7 +55,6 @@ import com.watabou.utils.Random;
|
|||
public class Tengu extends Mob {
|
||||
|
||||
{
|
||||
name = "Tengu";
|
||||
spriteClass = TenguSprite.class;
|
||||
|
||||
HP = HT = 120;
|
||||
|
@ -116,7 +116,7 @@ public class Tengu extends Mob {
|
|||
//phase 1 of the fight is over
|
||||
if (beforeHitHP > HT/2 && HP <= HT/2){
|
||||
HP = (HT/2)-1;
|
||||
yell("Let's make this interesting...");
|
||||
yell(Messages.get(this, "interesting"));
|
||||
((PrisonBossLevel)Dungeon.level).progress();
|
||||
BossHealthBar.bleed(true);
|
||||
|
||||
|
@ -144,7 +144,7 @@ public class Tengu extends Mob {
|
|||
GLog.p("Your beacon grows stronger!");
|
||||
}
|
||||
|
||||
yell( "Free at last..." );
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -216,20 +216,12 @@ public class Tengu extends Mob {
|
|||
BossHealthBar.assignBoss(this);
|
||||
if (HP <= HT/2) BossHealthBar.bleed(true);
|
||||
if (HP == HT) {
|
||||
yell("You're mine, " + Dungeon.hero.givenName() + "!");
|
||||
yell(Messages.get(this, "notice_mine", Dungeon.hero.givenName()));
|
||||
} else {
|
||||
yell("Face me, " + Dungeon.hero.givenName() + "!");
|
||||
yell(Messages.get(this, "notice_face", Dungeon.hero.givenName()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"A famous and enigmatic assassin, named for the mask grafted to his face.\n\n" +
|
||||
"Tengu is held down with large clasps on his wrists and knees, though he seems to have gotten rid of his chains long ago.\n\n" +
|
||||
"He will try to use traps, deceptive magic, and precise attacks to eliminate the only thing stopping his escape: you.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
|
|
|
@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ThiefSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -149,7 +150,7 @@ public class Thief extends Mob {
|
|||
|
||||
if (item != null && !item.unique && item.level() < 1 ) {
|
||||
|
||||
GLog.w( TXT_STOLE, this.name, item.name() );
|
||||
GLog.w( Messages.get(this, "stole", item.name()) );
|
||||
Dungeon.quickslot.clearItem( item );
|
||||
item.updateQuickslot();
|
||||
|
||||
|
@ -170,15 +171,10 @@ public class Thief extends Mob {
|
|||
|
||||
@Override
|
||||
public String description() {
|
||||
String desc =
|
||||
"Though these inmates roam free of their cells, this place is still their prison. " +
|
||||
"Over time, this place has taken their minds as well as their freedom. " +
|
||||
"Long ago, these crazy thieves and bandits have forgotten who they are and why they steal.\n\n" +
|
||||
"These enemies are more likely to steal and run than they are to fight. " +
|
||||
"Make sure to keep them in sight, or you might never see your stolen item again.";
|
||||
String desc = super.description();
|
||||
|
||||
if (item != null) {
|
||||
desc += String.format( TXT_CARRIES, Utils.capitalize( this.name ), item.name() );
|
||||
desc += Messages.get(this, "carries", item.name() );
|
||||
}
|
||||
|
||||
return desc;
|
||||
|
@ -189,7 +185,7 @@ public class Thief extends Mob {
|
|||
protected void nowhereToRun() {
|
||||
if (buff( Terror.class ) == null && buff( Corruption.class ) == null) {
|
||||
if (enemySeen) {
|
||||
sprite.showStatus(CharSprite.NEGATIVE, TXT_RAGE);
|
||||
sprite.showStatus(CharSprite.NEGATIVE, Messages.get(this, "rage"));
|
||||
state = HUNTING;
|
||||
} else {
|
||||
|
||||
|
@ -212,7 +208,7 @@ public class Thief extends Mob {
|
|||
|
||||
}
|
||||
|
||||
if (item != null) GLog.n("The thief gets away with your " + item.name() + "!");
|
||||
if (item != null) GLog.n( Messages.get(this, "escapes", item.name()));
|
||||
item = null;
|
||||
state = WANDERING;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Death;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.WarlockSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
@ -44,10 +45,7 @@ public class Warlock extends Mob implements Callback {
|
|||
|
||||
private static final float TIME_TO_ZAP = 1f;
|
||||
|
||||
private static final String TXT_SHADOWBOLT_KILLED = "%s's shadow bolt killed you...";
|
||||
|
||||
{
|
||||
name = "dwarf warlock";
|
||||
spriteClass = WarlockSprite.class;
|
||||
|
||||
HP = HT = 70;
|
||||
|
@ -92,7 +90,7 @@ public class Warlock extends Mob implements Callback {
|
|||
|
||||
boolean visible = Level.fieldOfView[pos] || Level.fieldOfView[enemy.pos];
|
||||
if (visible) {
|
||||
((WarlockSprite)sprite).zap( enemy.pos );
|
||||
sprite.zap( enemy.pos );
|
||||
} else {
|
||||
zap();
|
||||
}
|
||||
|
@ -114,7 +112,7 @@ public class Warlock extends Mob implements Callback {
|
|||
|
||||
if (!enemy.isAlive() && enemy == Dungeon.hero) {
|
||||
Dungeon.fail( Utils.format( ResultDescriptions.MOB, Utils.indefinite( name ) ) );
|
||||
GLog.n( TXT_SHADOWBOLT_KILLED, name );
|
||||
GLog.n( Messages.get(this, "bolt_kill") );
|
||||
}
|
||||
} else {
|
||||
enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.defenseVerb() );
|
||||
|
@ -147,16 +145,8 @@ public class Warlock extends Mob implements Callback {
|
|||
|
||||
return loot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"When dwarves' interests have shifted from engineering to arcane arts, " +
|
||||
"warlocks have come to power in the city. They started with elemental magic, " +
|
||||
"but soon switched to demonology and necromancy.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( Death.class );
|
||||
}
|
||||
|
|
|
@ -42,7 +42,6 @@ public class Wraith extends Mob {
|
|||
private int level;
|
||||
|
||||
{
|
||||
name = "wraith";
|
||||
spriteClass = WraithSprite.class;
|
||||
|
||||
HP = HT = 1;
|
||||
|
@ -83,24 +82,12 @@ public class Wraith extends Mob {
|
|||
defenseSkill = attackSkill( null ) * 5;
|
||||
enemySeen = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "evaded";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean reset() {
|
||||
state = WANDERING;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"A wraith is a vengeful spirit of a sinner, whose grave or tomb was disturbed. " +
|
||||
"Being an ethereal entity, it is very hard to hit with a regular weapon.";
|
||||
}
|
||||
|
||||
public static void spawnAround( int pos ) {
|
||||
for (int n : Level.NEIGHBOURS4) {
|
||||
|
@ -131,7 +118,7 @@ public class Wraith extends Mob {
|
|||
}
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Death.class );
|
||||
IMMUNITIES.add( Terror.class );
|
||||
|
|
|
@ -47,6 +47,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfPsionicBla
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Death;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BurningFistSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
|
@ -62,7 +63,6 @@ import com.watabou.utils.Random;
|
|||
public class Yog extends Mob {
|
||||
|
||||
{
|
||||
name = "Yog-Dzewa";
|
||||
spriteClass = YogSprite.class;
|
||||
|
||||
HP = HT = 300;
|
||||
|
@ -76,11 +76,6 @@ public class Yog extends Mob {
|
|||
properties.add(Property.DEMONIC);
|
||||
}
|
||||
|
||||
private static final String TXT_DESC =
|
||||
"Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves " +
|
||||
"barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then " +
|
||||
"imprisoned it in the halls below their city, believing it to be too weak to rise ever again.";
|
||||
|
||||
public Yog() {
|
||||
super();
|
||||
}
|
||||
|
@ -133,7 +128,7 @@ public class Yog extends Mob {
|
|||
@Override
|
||||
public int defenseProc( Char enemy, int damage ) {
|
||||
|
||||
ArrayList<Integer> spawnPoints = new ArrayList<Integer>();
|
||||
ArrayList<Integer> spawnPoints = new ArrayList<>();
|
||||
|
||||
for (int i=0; i < Level.NEIGHBOURS8.length; i++) {
|
||||
int p = pos + Level.NEIGHBOURS8[i];
|
||||
|
@ -177,23 +172,17 @@ public class Yog extends Mob {
|
|||
Dungeon.level.drop( new SkeletonKey( Dungeon.depth ), pos ).sprite.drop();
|
||||
super.die( cause );
|
||||
|
||||
yell( "..." );
|
||||
yell( Messages.get(this, "defeated") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notice() {
|
||||
super.notice();
|
||||
BossHealthBar.assignBoss(this);
|
||||
yell( "Hope is an illusion..." );
|
||||
yell( Messages.get(this, "notice") );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return TXT_DESC;
|
||||
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
|
||||
IMMUNITIES.add( Death.class );
|
||||
|
@ -223,7 +212,6 @@ public class Yog extends Mob {
|
|||
private static final int REGENERATION = 4;
|
||||
|
||||
{
|
||||
name = "rotting fist";
|
||||
spriteClass = RottingFistSprite.class;
|
||||
|
||||
HP = HT = 300;
|
||||
|
@ -280,13 +268,7 @@ public class Yog extends Mob {
|
|||
if (lock != null) lock.addTime(dmg*0.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return TXT_DESC;
|
||||
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
RESISTANCES.add( Death.class );
|
||||
|
@ -298,7 +280,7 @@ public class Yog extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Amok.class );
|
||||
IMMUNITIES.add( Sleep.class );
|
||||
|
@ -366,7 +348,7 @@ public class Yog extends Mob {
|
|||
|
||||
if (!enemy.isAlive() && enemy == Dungeon.hero) {
|
||||
Dungeon.fail( Utils.format( ResultDescriptions.UNIQUE, name ) );
|
||||
GLog.n( TXT_KILL, name );
|
||||
GLog.n( Messages.get(Char.class, "kill", name) );
|
||||
}
|
||||
return true;
|
||||
|
||||
|
@ -397,13 +379,7 @@ public class Yog extends Mob {
|
|||
if (lock != null) lock.addTime(dmg*0.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return TXT_DESC;
|
||||
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<>();
|
||||
static {
|
||||
RESISTANCES.add( ToxicGas.class );
|
||||
RESISTANCES.add( Death.class );
|
||||
|
@ -415,7 +391,7 @@ public class Yog extends Mob {
|
|||
return RESISTANCES;
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Amok.class );
|
||||
IMMUNITIES.add( Sleep.class );
|
||||
|
@ -434,7 +410,6 @@ public class Yog extends Mob {
|
|||
public static class Larva extends Mob {
|
||||
|
||||
{
|
||||
name = "god's larva";
|
||||
spriteClass = LarvaSprite.class;
|
||||
|
||||
HP = HT = 25;
|
||||
|
@ -461,11 +436,6 @@ public class Yog extends Mob {
|
|||
public int dr() {
|
||||
return 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return TXT_DESC;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,32 +46,8 @@ import com.watabou.utils.Bundle;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
public class Blacksmith extends NPC {
|
||||
|
||||
private static final String TXT_GOLD_1 =
|
||||
"Hey human! Wanna be useful, eh? Take dis pickaxe and mine me some _dark gold ore_, _15 pieces_ should be enough. " +
|
||||
"What do you mean, how am I gonna pay? You greedy...\n" +
|
||||
"Ok, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, " +
|
||||
"I'm the only blacksmith around.";
|
||||
private static final String TXT_BLOOD_1 =
|
||||
"Hey human! Wanna be useful, eh? Take dis pickaxe and _kill a bat_ wit' it, I need its blood on the head. " +
|
||||
"What do you mean, how am I gonna pay? You greedy...\n" +
|
||||
"Ok, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, " +
|
||||
"I'm the only blacksmith around.";
|
||||
private static final String TXT2 =
|
||||
"Are you kiddin' me? Where is my pickaxe?!";
|
||||
private static final String TXT3 =
|
||||
"Dark gold ore. 15 pieces. Seriously, is it dat hard?";
|
||||
private static final String TXT4 =
|
||||
"I said I need bat blood on the pickaxe. Chop chop!";
|
||||
private static final String TXT_COMPLETED =
|
||||
"Oh, you have returned... Better late dan never.";
|
||||
private static final String TXT_GET_LOST =
|
||||
"I'm busy. Get lost!";
|
||||
|
||||
private static final String TXT_LOOKS_BETTER = "your %s certainly looks better now";
|
||||
|
||||
{
|
||||
name = "troll blacksmith";
|
||||
spriteClass = BlacksmithSprite.class;
|
||||
}
|
||||
|
||||
|
@ -89,7 +65,7 @@ public class Blacksmith extends NPC {
|
|||
if (!Quest.given) {
|
||||
|
||||
GameScene.show( new WndQuest( this,
|
||||
Quest.alternative ? TXT_BLOOD_1 : TXT_GOLD_1 ) {
|
||||
Quest.alternative ? Messages.get(this, "blood_1") : Messages.get(this, "gold_1") ) {
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
|
@ -104,7 +80,7 @@ public class Blacksmith extends NPC {
|
|||
} else {
|
||||
Dungeon.level.drop( pick, Dungeon.hero.pos ).sprite.drop();
|
||||
}
|
||||
};
|
||||
}
|
||||
} );
|
||||
|
||||
Journal.add( Journal.Feature.TROLL );
|
||||
|
@ -114,15 +90,15 @@ public class Blacksmith extends NPC {
|
|||
|
||||
Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class );
|
||||
if (pick == null) {
|
||||
tell( TXT2 );
|
||||
tell( Messages.get(this, "lost_pick") );
|
||||
} else if (!pick.bloodStained) {
|
||||
tell( TXT4 );
|
||||
tell( Messages.get(this, "blood_2") );
|
||||
} else {
|
||||
if (pick.isEquipped( Dungeon.hero )) {
|
||||
pick.doUnequip( Dungeon.hero, false );
|
||||
}
|
||||
pick.detach( Dungeon.hero.belongings.backpack );
|
||||
tell( TXT_COMPLETED );
|
||||
tell( Messages.get(this, "completed") );
|
||||
|
||||
Quest.completed = true;
|
||||
Quest.reforged = false;
|
||||
|
@ -133,16 +109,16 @@ public class Blacksmith extends NPC {
|
|||
Pickaxe pick = Dungeon.hero.belongings.getItem( Pickaxe.class );
|
||||
DarkGold gold = Dungeon.hero.belongings.getItem( DarkGold.class );
|
||||
if (pick == null) {
|
||||
tell( TXT2 );
|
||||
tell( Messages.get(this, "lost_pick") );
|
||||
} else if (gold == null || gold.quantity() < 15) {
|
||||
tell( TXT3 );
|
||||
tell( Messages.get(this, "gold_2") );
|
||||
} else {
|
||||
if (pick.isEquipped( Dungeon.hero )) {
|
||||
pick.doUnequip( Dungeon.hero, false );
|
||||
}
|
||||
pick.detach( Dungeon.hero.belongings.backpack );
|
||||
gold.detachAll( Dungeon.hero.belongings.backpack );
|
||||
tell( TXT_COMPLETED );
|
||||
tell( Messages.get(this, "completed") );
|
||||
|
||||
Quest.completed = true;
|
||||
Quest.reforged = false;
|
||||
|
@ -155,7 +131,7 @@ public class Blacksmith extends NPC {
|
|||
|
||||
} else {
|
||||
|
||||
tell( TXT_GET_LOST );
|
||||
tell( Messages.get(this, "get_lost") );
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -167,27 +143,27 @@ public class Blacksmith extends NPC {
|
|||
public static String verify( Item item1, Item item2 ) {
|
||||
|
||||
if (item1 == item2) {
|
||||
return "Select 2 different items, not the same item twice!";
|
||||
return Messages.get(Blacksmith.class, "same_item");
|
||||
}
|
||||
|
||||
if (item1.getClass() != item2.getClass()) {
|
||||
return "Select 2 items of the same type!";
|
||||
return Messages.get(Blacksmith.class, "diff_type");
|
||||
}
|
||||
|
||||
if (!item1.isIdentified() || !item2.isIdentified()) {
|
||||
return "I need to know what I'm working with, identify them first!";
|
||||
return Messages.get(Blacksmith.class, "un_ided");
|
||||
}
|
||||
|
||||
if (item1.cursed || item2.cursed) {
|
||||
return "I don't work with cursed items!";
|
||||
return Messages.get(Blacksmith.class, "cursed");
|
||||
}
|
||||
|
||||
if (item1.level() < 0 || item2.level() < 0) {
|
||||
return "It's a junk, the quality is too poor!";
|
||||
return Messages.get(Blacksmith.class, "degraded");
|
||||
}
|
||||
|
||||
if (!item1.isUpgradable() || !item2.isUpgradable()) {
|
||||
return "I can't reforge these items!";
|
||||
return Messages.get(Blacksmith.class, "cant_reforge");
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -212,7 +188,7 @@ public class Blacksmith extends NPC {
|
|||
((EquipableItem)first).doUnequip( Dungeon.hero, true );
|
||||
}
|
||||
first.upgrade();
|
||||
GLog.p( TXT_LOOKS_BETTER, first.name() );
|
||||
GLog.p( ScrollOfUpgrade.TXT_LOOKS_BETTER, first.name() );
|
||||
Dungeon.hero.spendAndNext( 2f );
|
||||
Badges.validateItemLevelAquired( first );
|
||||
|
||||
|
@ -243,13 +219,6 @@ public class Blacksmith extends NPC {
|
|||
public boolean reset() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This troll blacksmith looks like all trolls look: he is tall and lean, and his skin resembles stone " +
|
||||
"in both color and texture. The troll blacksmith is tinkering with unproportionally small tools.";
|
||||
}
|
||||
|
||||
public static class Quest {
|
||||
|
||||
|
@ -308,7 +277,7 @@ public class Blacksmith extends NPC {
|
|||
public static boolean spawn( Collection<Room> rooms ) {
|
||||
if (!spawned && Dungeon.depth > 11 && Random.Int( 15 - Dungeon.depth ) == 0) {
|
||||
|
||||
Room blacksmith = null;
|
||||
Room blacksmith;
|
||||
for (Room r : rooms) {
|
||||
if (r.type == Type.STANDARD && r.width() > 4 && r.height() > 4) {
|
||||
blacksmith = r;
|
||||
|
|
|
@ -39,10 +39,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.SewerLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
@ -54,7 +54,6 @@ import java.util.HashSet;
|
|||
public class Ghost extends NPC {
|
||||
|
||||
{
|
||||
name = "sad ghost";
|
||||
spriteClass = GhostSprite.class;
|
||||
|
||||
flying = true;
|
||||
|
@ -62,39 +61,6 @@ public class Ghost extends NPC {
|
|||
state = WANDERING;
|
||||
}
|
||||
|
||||
private static final String TXT_RAT1 =
|
||||
"Hello %s... Once I was like you - strong and confident... " +
|
||||
"But I was slain by a foul beast... I can't leave this place... Not until I have my revenge... " +
|
||||
"Slay the _fetid rat_, that has taken my life...\n\n" +
|
||||
"It stalks this floor... Spreading filth everywhere... " +
|
||||
"_Beware its cloud of stink and corrosive bite, the acid dissolves in water..._ ";
|
||||
|
||||
private static final String TXT_RAT2 =
|
||||
"Please... Help me... Slay the abomination...\n\n" +
|
||||
"_Fight it near water... Avoid the stench..._";
|
||||
|
||||
private static final String TXT_GNOLL1 =
|
||||
"Hello %s... Once I was like you - strong and confident... " +
|
||||
"But I was slain by a devious foe... I can't leave this place... Not until I have my revenge... " +
|
||||
"Slay the _gnoll trickster_, that has taken my life...\n\n" +
|
||||
"It is not like the other gnolls... It hides and uses thrown weapons... " +
|
||||
"_Beware its poisonous and incendiary darts, don't attack from a distance..._";
|
||||
|
||||
private static final String TXT_GNOLL2 =
|
||||
"Please... Help me... Slay the trickster...\n\n" +
|
||||
"_Don't let it hit you... Get near to it..._";
|
||||
|
||||
private static final String TXT_CRAB1 =
|
||||
"Hello %s... Once I was like you - strong and confident... " +
|
||||
"But I was slain by an ancient creature... I can't leave this place... Not until I have my revenge... " +
|
||||
"Slay the _great crab_, that has taken my life...\n\n" +
|
||||
"It is unnaturally old... With a massive single claw and a thick shell... " +
|
||||
"_Beware its claw, you must surprise the crab or it will block with it..._";
|
||||
|
||||
private static final String TXT_CRAB2 =
|
||||
"Please... Help me... Slay the Crustacean...\n\n" +
|
||||
"_It will always block... When it sees you coming..._";
|
||||
|
||||
public Ghost() {
|
||||
super();
|
||||
|
||||
|
@ -106,11 +72,6 @@ public class Ghost extends NPC {
|
|||
return 1000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "evaded";
|
||||
}
|
||||
|
||||
@Override
|
||||
public float speed() {
|
||||
return 0.5f;
|
||||
|
@ -148,13 +109,13 @@ public class Ghost extends NPC {
|
|||
switch (Quest.type) {
|
||||
case 1:
|
||||
default:
|
||||
GameScene.show(new WndQuest(this, TXT_RAT2));
|
||||
GameScene.show(new WndQuest(this, Messages.get(this, "rat_2")));
|
||||
break;
|
||||
case 2:
|
||||
GameScene.show(new WndQuest(this, TXT_GNOLL2));
|
||||
GameScene.show(new WndQuest(this, Messages.get(this, "gnoll_2")));
|
||||
break;
|
||||
case 3:
|
||||
GameScene.show(new WndQuest(this, TXT_CRAB2));
|
||||
GameScene.show(new WndQuest(this, Messages.get(this, "crab_2")));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -181,13 +142,13 @@ public class Ghost extends NPC {
|
|||
switch (Quest.type){
|
||||
case 1: default:
|
||||
questBoss = new FetidRat();
|
||||
txt_quest = Utils.format(TXT_RAT1, Dungeon.hero.givenName()); break;
|
||||
txt_quest = Messages.get(this, "rat_1", Dungeon.hero.givenName()); break;
|
||||
case 2:
|
||||
questBoss = new GnollTrickster();
|
||||
txt_quest = Utils.format(TXT_GNOLL1, Dungeon.hero.givenName()); break;
|
||||
txt_quest = Messages.get(this, "gnoll_1", Dungeon.hero.givenName()); break;
|
||||
case 3:
|
||||
questBoss = new GreatCrab();
|
||||
txt_quest = Utils.format(TXT_CRAB1, Dungeon.hero.givenName()); break;
|
||||
txt_quest = Messages.get(this, "crab_1", Dungeon.hero.givenName()); break;
|
||||
}
|
||||
|
||||
questBoss.pos = Dungeon.level.randomRespawnCell();
|
||||
|
@ -201,15 +162,8 @@ public class Ghost extends NPC {
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"The ghost is barely visible. It looks like a shapeless " +
|
||||
"spot of faint light with a sorrowful face.";
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( Paralysis.class );
|
||||
IMMUNITIES.add( Roots.class );
|
||||
|
@ -220,8 +174,6 @@ public class Ghost extends NPC {
|
|||
return IMMUNITIES;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static class Quest {
|
||||
|
||||
private static boolean spawned;
|
||||
|
@ -337,7 +289,7 @@ public class Ghost extends NPC {
|
|||
|
||||
public static void process() {
|
||||
if (spawned && given && !processed && (depth == Dungeon.depth)) {
|
||||
GLog.n("sad ghost: Thank you... come find me...");
|
||||
GLog.n( Messages.get(Ghost.class, "find_me") );
|
||||
for (Mob m : Dungeon.level.mobs){
|
||||
if (m instanceof Ghost)
|
||||
m.beckon(Dungeon.hero.pos);
|
||||
|
|
|
@ -22,7 +22,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Journal;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Golem;
|
||||
|
@ -32,10 +31,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DwarfToken;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.CityLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Room;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ImpSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndImp;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
@ -44,36 +42,9 @@ import com.watabou.utils.Random;
|
|||
public class Imp extends NPC {
|
||||
|
||||
{
|
||||
name = "ambitious imp";
|
||||
spriteClass = ImpSprite.class;
|
||||
}
|
||||
|
||||
private static final String TXT_GOLEMS1 =
|
||||
"Are you an adventurer? I love adventurers! You can always rely on them " +
|
||||
"if something needs to be killed. Am I right? For a bounty of course ;)\n" +
|
||||
"In my case this is _golems_ who need to be killed. You see, I'm going to start a " +
|
||||
"little business here, but these stupid golems are bad for business! " +
|
||||
"It's very hard to negotiate with wandering lumps of granite, damn them! " +
|
||||
"So please, kill... let's say _6 of them_ and a reward is yours.";
|
||||
|
||||
private static final String TXT_MONKS1 =
|
||||
"Are you an adventurer? I love adventurers! You can always rely on them " +
|
||||
"if something needs to be killed. Am I right? For a bounty of course ;)\n" +
|
||||
"In my case this is _monks_ who need to be killed. You see, I'm going to start a " +
|
||||
"little business here, but these lunatics don't buy anything themselves and " +
|
||||
"will scare away other customers. " +
|
||||
"So please, kill... let's say _8 of them_ and a reward is yours.";
|
||||
|
||||
private static final String TXT_GOLEMS2 =
|
||||
"How is your golem safari going?";
|
||||
|
||||
private static final String TXT_MONKS2 =
|
||||
"Oh, you are still alive! I knew that your kung-fu is stronger ;) " +
|
||||
"Just don't forget to grab these monks' tokens.";
|
||||
|
||||
private static final String TXT_CYA = "See you, %s!";
|
||||
private static final String TXT_HEY = "Psst, %s!";
|
||||
|
||||
private boolean seenBefore = false;
|
||||
|
||||
@Override
|
||||
|
@ -81,7 +52,7 @@ public class Imp extends NPC {
|
|||
|
||||
if (!Quest.given && Dungeon.visible[pos]) {
|
||||
if (!seenBefore) {
|
||||
yell( Utils.format( TXT_HEY, Dungeon.hero.givenName() ) );
|
||||
yell( Messages.get(this, "hey", Dungeon.hero.givenName() ) );
|
||||
}
|
||||
seenBefore = true;
|
||||
} else {
|
||||
|
@ -98,11 +69,6 @@ public class Imp extends NPC {
|
|||
return 1000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "evaded";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage( int dmg, Object src ) {
|
||||
}
|
||||
|
@ -126,11 +92,13 @@ public class Imp extends NPC {
|
|||
if (tokens != null && (tokens.quantity() >= 8 || (!Quest.alternative && tokens.quantity() >= 6))) {
|
||||
GameScene.show( new WndImp( this, tokens ) );
|
||||
} else {
|
||||
tell( Quest.alternative ? TXT_MONKS2 : TXT_GOLEMS2, Dungeon.hero.givenName() );
|
||||
tell( Quest.alternative ?
|
||||
Messages.get(this, "monks_2", Dungeon.hero.givenName())
|
||||
: Messages.get(this, "golems_2", Dungeon.hero.givenName()) );
|
||||
}
|
||||
|
||||
} else {
|
||||
tell( Quest.alternative ? TXT_MONKS1 : TXT_GOLEMS1 );
|
||||
tell( Quest.alternative ? Messages.get(this, "monks_1") : Messages.get(this, "golems_1") );
|
||||
Quest.given = true;
|
||||
Quest.completed = false;
|
||||
|
||||
|
@ -138,26 +106,19 @@ public class Imp extends NPC {
|
|||
}
|
||||
}
|
||||
|
||||
private void tell( String format, Object...args ) {
|
||||
private void tell( String text ) {
|
||||
GameScene.show(
|
||||
new WndQuest( this, Utils.format( format, args ) ) );
|
||||
new WndQuest( this, text ));
|
||||
}
|
||||
|
||||
public void flee() {
|
||||
|
||||
yell( Utils.format( TXT_CYA, Dungeon.hero.givenName() ) );
|
||||
yell( Messages.get(this, "cya", Dungeon.hero.givenName()) );
|
||||
|
||||
destroy();
|
||||
sprite.die();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Imps are lesser demons. They are notable for neither their strength nor their magic talent, " +
|
||||
"but they are quite smart and sociable. Many imps prefer to live among non-demons.";
|
||||
}
|
||||
|
||||
|
||||
public static class Quest {
|
||||
|
||||
private static boolean alternative;
|
||||
|
|
|
@ -25,17 +25,12 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ImpSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
|
||||
public class ImpShopkeeper extends Shopkeeper {
|
||||
|
||||
private static final String TXT_GREETINGS = "Hello, %s!";
|
||||
public static final String TXT_THIEF = "I thought I could trust you!";
|
||||
|
||||
|
||||
{
|
||||
name = "ambitious imp";
|
||||
spriteClass = ImpSprite.class;
|
||||
}
|
||||
|
||||
|
@ -45,7 +40,7 @@ public class ImpShopkeeper extends Shopkeeper {
|
|||
protected boolean act() {
|
||||
|
||||
if (!seenBefore && Dungeon.visible[pos]) {
|
||||
yell( Utils.format( TXT_GREETINGS, Dungeon.hero.givenName() ) );
|
||||
yell( Messages.get(this, "greetings", Dungeon.hero.givenName() ) );
|
||||
seenBefore = true;
|
||||
}
|
||||
|
||||
|
@ -66,11 +61,4 @@ public class ImpShopkeeper extends Shopkeeper {
|
|||
sprite.emitter().burst( Speck.factory( Speck.WOOL ), 15 );
|
||||
sprite.killAndErase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"Imps are lesser demons. They are notable for neither their strength nor their magic talent. " +
|
||||
"But they are quite smart and sociable, and many of imps prefer to live and do business among non-demons.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,11 +37,9 @@ import com.watabou.utils.Random;
|
|||
public class MirrorImage extends NPC {
|
||||
|
||||
{
|
||||
name = "mirror image";
|
||||
spriteClass = MirrorSprite.class;
|
||||
|
||||
state = HUNTING;
|
||||
|
||||
}
|
||||
|
||||
public int tier;
|
||||
|
@ -98,7 +96,7 @@ public class MirrorImage extends NPC {
|
|||
protected Char chooseEnemy() {
|
||||
|
||||
if (enemy == null || !enemy.isAlive()) {
|
||||
HashSet<Mob> enemies = new HashSet<Mob>();
|
||||
HashSet<Mob> enemies = new HashSet<>();
|
||||
for (Mob mob:Dungeon.level.mobs) {
|
||||
if (mob.hostile && Level.fieldOfView[mob.pos]) {
|
||||
enemies.add( mob );
|
||||
|
@ -111,13 +109,6 @@ public class MirrorImage extends NPC {
|
|||
return enemy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This illusion bears a close resemblance to you, " +
|
||||
"but it's paler and twitches a little.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSprite sprite() {
|
||||
CharSprite s = super.sprite();
|
||||
|
@ -140,7 +131,7 @@ public class MirrorImage extends NPC {
|
|||
Dungeon.hero.busy();
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<Class<?>>();
|
||||
private static final HashSet<Class<?>> IMMUNITIES = new HashSet<>();
|
||||
static {
|
||||
IMMUNITIES.add( ToxicGas.class );
|
||||
IMMUNITIES.add( Burning.class );
|
||||
|
|
|
@ -24,12 +24,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatKingSprite;
|
||||
|
||||
public class RatKing extends NPC {
|
||||
|
||||
{
|
||||
name = "rat king";
|
||||
spriteClass = RatKingSprite.class;
|
||||
|
||||
state = SLEEPING;
|
||||
|
@ -68,19 +68,17 @@ public class RatKing extends NPC {
|
|||
sprite.turnTo( pos, Dungeon.hero.pos );
|
||||
if (state == SLEEPING) {
|
||||
notice();
|
||||
yell( "I'm not sleeping!" );
|
||||
yell( Messages.get(this, "not_sleeping") );
|
||||
state = WANDERING;
|
||||
} else {
|
||||
yell( "What is it? I have no time for this nonsense. My kingdom won't rule itself!" );
|
||||
yell( Messages.get(this, "what_is_it") );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return ((RatKingSprite)sprite).festive ?
|
||||
"This rat is a little bigger than a regular marsupial rat. " +
|
||||
"It's wearing a tiny festive hat instead of its usual crown. Happy Holidays!"
|
||||
: "This rat is a little bigger than a regular marsupial rat " +
|
||||
"and it's wearing a tiny crown on its head.";
|
||||
Messages.get(this, "desc_festive")
|
||||
: super.description();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,15 +20,15 @@
|
|||
*/
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.SheepSprite;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
public class Sheep extends NPC {
|
||||
|
||||
private static final String[] QUOTES = {"Baa!", "Baa?", "Baa.", "Baa..."};
|
||||
private static final String[] LINE_KEYS = {"Baa!", "Baa?", "Baa.", "Baa..."};
|
||||
|
||||
{
|
||||
name = "sheep";
|
||||
spriteClass = SheepSprite.class;
|
||||
}
|
||||
|
||||
|
@ -55,15 +55,8 @@ public class Sheep extends NPC {
|
|||
public void damage( int dmg, Object src ) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This is a magic sheep. What's so magical about it? You can't kill it. " +
|
||||
"It will stand there until it magcially fades away, all the while chewing cud with a blank stare.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interact() {
|
||||
yell( Random.element( QUOTES ) );
|
||||
yell( Messages.get(this, Random.element( LINE_KEYS )) );
|
||||
}
|
||||
}
|
|
@ -34,11 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
|
|||
|
||||
public class Shopkeeper extends NPC {
|
||||
|
||||
public static final String TXT_THIEF = "Thief, Thief!";
|
||||
private int startPos = -1;
|
||||
|
||||
{
|
||||
name = "shopkeeper";
|
||||
spriteClass = ShopkeeperSprite.class;
|
||||
|
||||
properties.add(Property.IMMOVABLE);
|
||||
|
@ -83,13 +79,6 @@ public class Shopkeeper extends NPC {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This stout guy looks more appropriate for a trade district in some large city " +
|
||||
"than for a dungeon. His prices explain why he prefers to do business here.";
|
||||
}
|
||||
|
||||
public static WndBag sell() {
|
||||
return GameScene.selectItem( itemSelector, WndBag.Mode.FOR_SALE, "Select an item to sell" );
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CeremonialCandle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Embers;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Rotberry;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Journal;
|
||||
|
@ -48,60 +49,8 @@ import com.watabou.utils.Random;
|
|||
public class Wandmaker extends NPC {
|
||||
|
||||
{
|
||||
name = "old wandmaker";
|
||||
spriteClass = WandmakerSprite.class;
|
||||
}
|
||||
|
||||
private static final String INTRO_WARRIOR =
|
||||
"Oh, what a pleasant surprise to meet a hero in such a depressing place! " +
|
||||
"If you're up to helping an old man out, I may have a task for you.\n\n";
|
||||
|
||||
private static final String INTRO_ROGUE =
|
||||
"Oh Goodness, you startled me! I haven't met a bandit from this place that still has his sanity, " +
|
||||
"so you must be from the surface! If you're up to helping a stranger out, I may have a task for you.\n\n";
|
||||
|
||||
private static final String INTRO_MAGE =
|
||||
"Oh, hello %s! I heard there was some ruckus regarding you and the wizards institute? " +
|
||||
"Oh never mind, I never liked those stick-in-the-muds anyway. If you're willing, I may have a task for you.\n\n";
|
||||
|
||||
private static final String INTRO_HUNTRESS =
|
||||
"Oh, hello miss! A friendly face is a pleasant surprise down here isn't it? " +
|
||||
"In fact, I swear I've seen your face before, but I can't put my finger on it... " +
|
||||
"Oh never mind, if you're here for adventure, I may have a task for you.\n\n";
|
||||
|
||||
private static final String INTRO_1 =
|
||||
"I came here to find a rare ingredient for a wand, but I've gotten myself lost, " +
|
||||
"and my magical shield is weakening. I'll need to leave soon, but can't bear to go without getting what I came for.";
|
||||
|
||||
|
||||
private static final String INTRO_DUST =
|
||||
"I'm looking for some _corpse dust_. It's a special kind of cursed bone meal that usually shows up in places like this. " +
|
||||
"There should be a barricaded room around here somewhere, I'm sure some dust will turn up there. " +
|
||||
"Do be careful though, the curse the dust carries is quite potent, _get back to me as fast as you can_ and I'll cleanse it for you.\n\n";
|
||||
|
||||
private static final String INTRO_EMBER =
|
||||
"I'm looking for some _fresh embers_ from a newborn fire elemental. Elementals usually pop up when a summoning ritual isn't controlled, " +
|
||||
"so just find some candles and a ritual site and I'm sure you can get one to pop up. " +
|
||||
"You might want to _keep some sort of freezing item handy_ though, elementals are very powerful, but ice will take them down quite easily.\n\n";
|
||||
|
||||
private static final String INTRO_BERRY =
|
||||
"The old warden of this prison kept a _rotberry plant_, and I'm after one of its seeds. The plant has probably gone wild by now though, " +
|
||||
"so getting it to give up a seed might be tricky. Its garden should be somewhere around here. " +
|
||||
"Try to _keep away from its vine lashers_ if you want to stay in one piece. Using fire might be tempting but please don't, you'll kill the plant and destroy its seeds.\n\n";
|
||||
|
||||
private static final String INTRO_2 =
|
||||
"If you can get that for me, I'll be happy to pay you with one of my finely crafted wands! " +
|
||||
"I brought two with me, so you can take whichever one you prefer.";
|
||||
|
||||
private static final String REMINDER_DUST =
|
||||
"Any luck with corpse dust, %s? Look for some barricades.";
|
||||
|
||||
private static final String REMINDER_EMBER =
|
||||
"Any luck with those embers, %s? You'll need to find four candles and the ritual site.";
|
||||
|
||||
private static final String REMINDER_BERRY =
|
||||
"Any luck with a Rotberry seed, %s? Look for a room filled with vegetation.";
|
||||
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
|
@ -114,11 +63,6 @@ public class Wandmaker extends NPC {
|
|||
return 1000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String defenseVerb() {
|
||||
return "absorbed";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage( int dmg, Object src ) {
|
||||
}
|
||||
|
@ -158,13 +102,13 @@ public class Wandmaker extends NPC {
|
|||
String msg = "";
|
||||
switch(Quest.type){
|
||||
case 1:
|
||||
msg = REMINDER_DUST;
|
||||
msg = Messages.get(this, "reminder_dust", Dungeon.hero.givenName());
|
||||
break;
|
||||
case 2:
|
||||
msg = REMINDER_EMBER;
|
||||
msg = Messages.get(this, "reminder_ember", Dungeon.hero.givenName());
|
||||
break;
|
||||
case 3:
|
||||
msg = REMINDER_BERRY;
|
||||
msg = Messages.get(this, "reminder_berry", Dungeon.hero.givenName());
|
||||
break;
|
||||
}
|
||||
GameScene.show(new WndQuest(this, Utils.format(msg, Dungeon.hero.givenName())));
|
||||
|
@ -176,42 +120,42 @@ public class Wandmaker extends NPC {
|
|||
String msg2 = "";
|
||||
switch(Dungeon.hero.heroClass){
|
||||
case WARRIOR:
|
||||
msg1 += INTRO_WARRIOR;
|
||||
msg1 += Messages.get(this, "intro_warrior");
|
||||
break;
|
||||
case ROGUE:
|
||||
msg1 += INTRO_ROGUE;
|
||||
msg1 += Messages.get(this, "intro_rogue");
|
||||
break;
|
||||
case MAGE:
|
||||
msg1 += INTRO_MAGE;
|
||||
msg1 += Messages.get(this, "intro_mage", Dungeon.hero.givenName());
|
||||
break;
|
||||
case HUNTRESS:
|
||||
msg1 += INTRO_HUNTRESS;
|
||||
msg1 += Messages.get(this, "intro_huntress");
|
||||
break;
|
||||
}
|
||||
|
||||
msg1 += INTRO_1;
|
||||
msg1 += Messages.get(this, "intro_1");
|
||||
|
||||
switch (Quest.type){
|
||||
case 1:
|
||||
msg2 += INTRO_DUST;
|
||||
msg2 += Messages.get(this, "intro_dust");
|
||||
break;
|
||||
case 2:
|
||||
msg2 += INTRO_EMBER;
|
||||
msg2 += Messages.get(this, "intro_ember");
|
||||
break;
|
||||
case 3:
|
||||
msg2 += INTRO_BERRY;
|
||||
msg2 += Messages.get(this, "intro_berry");
|
||||
break;
|
||||
}
|
||||
|
||||
msg2 += INTRO_2;
|
||||
msg2 += Messages.get(this, "intro_2");
|
||||
final String msg2final = msg2;
|
||||
final NPC wandmaker = this;
|
||||
|
||||
GameScene.show(new WndQuest(wandmaker, Utils.format(msg1, Dungeon.hero.givenName())){
|
||||
GameScene.show(new WndQuest(wandmaker, msg1){
|
||||
@Override
|
||||
public void hide() {
|
||||
super.hide();
|
||||
GameScene.show(new WndQuest(wandmaker, Utils.format(msg2final, Dungeon.hero.givenName())));
|
||||
GameScene.show(new WndQuest(wandmaker, msg2final));
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -220,13 +164,6 @@ public class Wandmaker extends NPC {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return
|
||||
"This old yet hale gentleman wears a slightly confused " +
|
||||
"expression. He is protected by a magic shield.";
|
||||
}
|
||||
|
||||
public static class Quest {
|
||||
|
||||
private static int type;
|
||||
|
|
|
@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
|||
|
||||
public class ScrollOfUpgrade extends InventoryScroll {
|
||||
|
||||
private static final String TXT_LOOKS_BETTER = "your %s certainly looks better now";
|
||||
public static final String TXT_LOOKS_BETTER = "your %s certainly looks better now";
|
||||
|
||||
{
|
||||
name = "Scroll of Upgrade";
|
||||
|
|
|
@ -64,9 +64,9 @@ actors.buffs.hunger.onhungry=You are hungry.
|
|||
actors.buffs.hunger.onstarving=You are starving!
|
||||
actors.buffs.hunger.ondeath=You starved to death...
|
||||
actors.buffs.hunger.cursedhorn=The cursed horn steals some of the food energy as you eat.
|
||||
actors.buffs.hunger.desc_intro_hungry=You can feel your stomach calling out for food, but it's not too urgent yet.\n\n
|
||||
actors.buffs.hunger.desc_intro_starving=You're so hungry it hurts.\n\n
|
||||
actors.buffs.hunger.desc=Hunger slowly increases as you spend time in the dungeon, eventually you will begin to starve. While starving you will slowly lose health instead of regenerating it.\n\nRationing is important! If you have health to spare starving isn't a bad idea if it means there will be more food later. Effective rationing can make food last a lot longer!
|
||||
actors.buffs.hunger.desc_intro_hungry=You can feel your stomach calling out for food, but it's not too urgent yet.
|
||||
actors.buffs.hunger.desc_intro_starving=You're so hungry it hurts.
|
||||
actors.buffs.hunger.desc=\n\nHunger slowly increases as you spend time in the dungeon, eventually you will begin to starve. While starving you will slowly lose health instead of regenerating it.\n\nRationing is important! If you have health to spare starving isn't a bad idea if it means there will be more food later. Effective rationing can make food last a lot longer!
|
||||
actors.buffs.invisibility.name=Invisible
|
||||
actors.buffs.invisibility.desc=You are completely blended into the surrounding terrain, making you impossible to see.\n\nWhile you are invisible enemies are unable to attack or follow you. Physical attacks and magical effects (such as scrolls and wands) will immediately cancel invisibility.\n\nThis invisibility will last for %s.
|
||||
actors.buffs.levitation.name=Levitating
|
||||
|
@ -178,4 +178,218 @@ actors.hero.herosubclass.sniper_desc=The _Sniper_ is able to detect weak points
|
|||
actors.hero.herosubclass.warden=warden
|
||||
actors.hero.herosubclass.warden_desc=Having a strong connection with forces of nature allows the _Warden_ to gain additional health from dew, armor from trampling grass, and seeds and dew from plants.
|
||||
|
||||
actors.mobs.npcs.blacksmith.name=troll blacksmith
|
||||
actors.mobs.npcs.blacksmith.gold_1=Hey human! Wanna be useful, eh? Take dis pickaxe and mine me some _dark gold ore_, _15 pieces_ should be enough. What do you mean, how am I gonna pay? You greedy...\nOk, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, I'm the only blacksmith around.
|
||||
actors.mobs.npcs.blacksmith.blood_1=Hey human! Wanna be useful, eh? Take dis pickaxe and _kill a bat_ wit' it, I need its blood on the head. What do you mean, how am I gonna pay? You greedy...\nOk, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, I'm the only blacksmith around.
|
||||
actors.mobs.npcs.blacksmith.lost_pick=Are you kiddin' me? Where is my pickaxe?!
|
||||
actors.mobs.npcs.blacksmith.gold_2=Dark gold ore. 15 pieces. Seriously, is it dat hard?
|
||||
actors.mobs.npcs.blacksmith.blood_2=I said I need bat blood on the pickaxe. Chop chop!
|
||||
actors.mobs.npcs.blacksmith.completed=Oh, you have returned... Better late dan never.
|
||||
actors.mobs.npcs.blacksmith.get_lost=I'm busy. Get lost!
|
||||
actors.mobs.npcs.blacksmith.same_item=Select 2 different items, not the same item twice!
|
||||
actors.mobs.npcs.blacksmith.diff_type=Select 2 items of the same type!
|
||||
actors.mobs.npcs.blacksmith.un_ided=I need to know what I'm working with, identify them first!
|
||||
actors.mobs.npcs.blacksmith.cursed=I don't work with cursed items!
|
||||
actors.mobs.npcs.blacksmith.degraded=It's junk, the quality is too poor!
|
||||
actors.mobs.npcs.blacksmith.cant_reforge=I can't reforge these items!
|
||||
actors.mobs.npcs.blacksmith.desc=This troll blacksmith looks like all trolls look: he is tall and lean, and his skin resembles stone in both color and texture. The troll blacksmith is tinkering with unproportionally small tools.
|
||||
actors.mobs.npcs.ghost.name=sad ghost
|
||||
actors.mobs.npcs.ghost.rat_1=Hello %s... Once I was like you - strong and confident... But I was slain by a foul beast... I can't leave this place... Not until I have my revenge... Slay the _fetid rat_, that has taken my life...\n\nIt stalks this floor... Spreading filth everywhere... _Beware its cloud of stink and corrosive bite, the acid dissolves in water..._
|
||||
actors.mobs.npcs.ghost.rat_2=Please... Help me... Slay the abomination...\n\n_Fight it near water... Avoid the stench..._
|
||||
actors.mobs.npcs.ghost.gnoll_1=Hello %s... Once I was like you - strong and confident... But I was slain by a devious foe... I can't leave this place... Not until I have my revenge... Slay the _gnoll trickster_, that has taken my life...\n\nIt is not like the other gnolls... It hides and uses thrown weapons... _Beware its poisonous and incendiary darts, don't attack from a distance..._
|
||||
actors.mobs.npcs.ghost.gnoll_2=Please... Help me... Slay the trickster...\n\n_Don't let it hit you... Get near to it..._
|
||||
actors.mobs.npcs.ghost.crab_1=Hello %s... Once I was like you - strong and confident... But I was slain by an ancient creature... I can't leave this place... Not until I have my revenge... Slay the _great crab_, that has taken my life...\n\nIt is unnaturally old... With a massive single claw and a thick shell... _Beware its claw, you must surprise the crab or it will block with it..._
|
||||
actors.mobs.npcs.ghost.crab_2=Please... Help me... Slay the Crustacean...\n\n_It will always block... When it sees you coming..._
|
||||
actors.mobs.npcs.ghost.def_verb=evaded
|
||||
actors.mobs.npcs.ghost.find_me=Thank you... come find me...
|
||||
actors.mobs.npcs.ghost.desc=The ghost is barely visible. It looks like a shapeless spot of faint light with a sorrowful face.
|
||||
actors.mobs.npcs.imp.name=ambitious imp
|
||||
actors.mobs.npcs.imp.golems_1=Are you an adventurer? I love adventurers! You can always rely on them if something needs to be killed. Am I right? For a bounty of course ;)\nIn my case this is _golems_ who need to be killed. You see, I'm going to start a little business here, but these stupid golems are bad for business! It's very hard to negotiate with wandering lumps of granite, damn them! So please, kill... let's say _6 of them_ and a reward is yours.
|
||||
actors.mobs.npcs.imp.monks_1=Are you an adventurer? I love adventurers! You can always rely on them if something needs to be killed. Am I right? For a bounty of course ;)\nIn my case this is _monks_ who need to be killed. You see, I'm going to start a little business here, but these lunatics don't buy anything themselves and will scare away other customers. So please, kill... let's say _8 of them_ and a reward is yours.
|
||||
actors.mobs.npcs.imp.golems_2=How is your golem safari going?
|
||||
actors.mobs.npcs.imp.monks_2=Oh, you are still alive! I knew that your kung-fu is stronger ;) Just don't forget to grab these monks' tokens.
|
||||
actors.mobs.npcs.imp.cya=See you, %s!
|
||||
actors.mobs.npcs.imp.hey=Psst, %s!
|
||||
actors.mobs.npcs.imp.def_verb=evaded
|
||||
actors.mobs.npcs.imp.desc=Imps are lesser demons. They are notable for neither their strength nor their magic talent, but they are quite smart and sociable. Many imps prefer to live among non-demons.
|
||||
actors.mobs.npcs.impshopkeeper.name=ambitious imp
|
||||
actors.mobs.npcs.impshopkeeper.greetings=Hello, %s!
|
||||
actors.mobs.npcs.impshopkeeper.thief=I thought I could trust you!
|
||||
actors.mobs.npcs.impshopkeeper.desc=Imps are lesser demons. They are notable for neither their strength nor their magic talent. But they are quite smart and sociable, and many of imps prefer to live and do business among non-demons.
|
||||
actors.mobs.npcs.mirrorimage.name=mirror image
|
||||
actors.mobs.npcs.mirrorimage.desc=This illusion bears a close resemblance to you, but it's paler and twitches a little.
|
||||
actors.mobs.npcs.ratking.name=rat king
|
||||
actors.mobs.npcs.ratking.not_sleeping=I'm not sleeping!
|
||||
actors.mobs.npcs.ratking.what_is_it=What is it? I have no time for this nonsense. My kingdom won't rule itself!
|
||||
actors.mobs.npcs.ratking.desc_festive=This rat is a little bigger than a regular marsupial rat. It's wearing a tiny festive hat instead of its usual crown. Happy Holidays!
|
||||
actors.mobs.npcs.ratking.desc=This rat is a little bigger than a regular marsupial rat and it's wearing a tiny crown on its head.
|
||||
actors.mobs.npcs.sheep.name=sheep
|
||||
actors.mobs.npcs.sheep.baa!=Baa!
|
||||
actors.mobs.npcs.sheep.baa?=Baa?
|
||||
actors.mobs.npcs.sheep.baa.=Baa.
|
||||
actors.mobs.npcs.sheep.baa...=Baa...
|
||||
actors.mobs.npcs.sheep.desc=This is a magic sheep. What's so magical about it? You can't kill it. It will stand there until it magcially fades away, all the while chewing cud with a blank stare.
|
||||
actors.mobs.npcs.shopkeeper.name=shopkeeper
|
||||
actors.mobs.npcs.shopkeeper.thief=Thief, Thief!
|
||||
actors.mobs.npcs.shopkeeper.sell=Select an item to sell
|
||||
actors.mobs.npcs.shopkeeper.desc=This stout guy looks more appropriate for a trade district in some large city than for a dungeon. His prices explain why he prefers to do business here.
|
||||
actors.mobs.npcs.wandmaker.name=old wandmaker
|
||||
actors.mobs.npcs.wandmaker.intro_warrior=Oh, what a pleasant surprise to meet a hero in such a depressing place! If you're up to helping an old man out, I may have a task for you.
|
||||
actors.mobs.npcs.wandmaker.intro_rogue=Oh Goodness, you startled me! I haven't met a bandit from this place that still has his sanity, so you must be from the surface! If you're up to helping a stranger out, I may have a task for you.
|
||||
actors.mobs.npcs.wandmaker.intro_mage=Oh, hello %s! I heard there was some ruckus regarding you and the wizards institute? Oh never mind, I never liked those stick-in-the-muds anyway. If you're willing, I may have a task for you.
|
||||
actors.mobs.npcs.wandmaker.intro_huntress=Oh, hello miss! A friendly face is a pleasant surprise down here isn't it? In fact, I swear I've seen your face before, but I can't put my finger on it... Oh never mind, if you're here for adventure, I may have a task for you.
|
||||
actors.mobs.npcs.wandmaker.intro_1=\n\nI came here to find a rare ingredient for a wand, but I've gotten myself lost, and my magical shield is weakening. I'll need to leave soon, but can't bear to go without getting what I came for.
|
||||
actors.mobs.npcs.wandmaker.intro_dust=I'm looking for some _corpse dust_. It's a special kind of cursed bone meal that usually shows up in places like this. There should be a barricaded room around here somewhere, I'm sure some dust will turn up there. Do be careful though, the curse the dust carries is quite potent, _get back to me as fast as you can_ and I'll cleanse it for you.
|
||||
actors.mobs.npcs.wandmaker.intro_ember=I'm looking for some _fresh embers_ from a newborn fire elemental. Elementals usually pop up when a summoning ritual isn't controlled, so just find some candles and a ritual site and I'm sure you can get one to pop up. You might want to _keep some sort of freezing item handy_ though, elementals are very powerful, but ice will take them down quite easily.
|
||||
actors.mobs.npcs.wandmaker.intro_berry=The old warden of this prison kept a _rotberry plant_, and I'm after one of its seeds. The plant has probably gone wild by now though, so getting it to give up a seed might be tricky. Its garden should be somewhere around here. Try to _keep away from its vine lashers_ if you want to stay in one piece. Using fire might be tempting but please don't, you'll kill the plant and destroy its seeds.
|
||||
actors.mobs.npcs.wandmaker.intro_2=\n\nIf you can get that for me, I'll be happy to pay you with one of my finely crafted wands! I brought two with me, so you can take whichever one you prefer.
|
||||
actors.mobs.npcs.wandmaker.reminder_dust=Any luck with corpse dust, %s? Look for some barricades.
|
||||
actors.mobs.npcs.wandmaker.reminder_ember=Any luck with those embers, %s? You'll need to find four candles and the ritual site.
|
||||
actors.mobs.npcs.wandmaker.reminder_berry=Any luck with a Rotberry seed, %s? Look for a room filled with vegetation.
|
||||
actors.mobs.npcs.wandmaker.def_verb=absorbed
|
||||
actors.mobs.npcs.wandmaker.desc=This old yet hale gentleman wears a slightly confused expression. He is protected by a magic shield.
|
||||
|
||||
actors.mobs.acidic.name=acidic scorpio
|
||||
actors.mobs.albino.name=albino rat
|
||||
actors.mobs.albino.desc=This is a rare breed of marsupial rat, with pure white fur and jagged teeth.
|
||||
actors.mobs.bandit.name=crazy bandit
|
||||
actors.mobs.bat.name=vampire bat
|
||||
actors.mobs.bat.def_verb=evaded
|
||||
actors.mobs.bat.desc=These brisk and tenacious inhabitants of cave domes may defeat much larger opponents by replenishing their health with each successful attack.
|
||||
actors.mobs.bee.name=golden bee
|
||||
actors.mobs.bee.desc=Despite their small size, golden bees tend to protect their home fiercely. This one is very mad, better keep your distance.
|
||||
actors.mobs.brute.name=gnoll brute
|
||||
actors.mobs.brute.enraged=enraged
|
||||
actors.mobs.brute.enraged_text=The brute becomes enraged!
|
||||
actors.mobs.brute.desc=Brutes are the largest, strongest and toughest of all gnolls. When severely wounded, they go berserk, inflicting even more damage to their enemies.
|
||||
actors.mobs.crab.name=sewer crab
|
||||
actors.mobs.crab.def_verb=parried
|
||||
actors.mobs.crab.desc=These huge crabs are at the top of the food chain in the sewers. They are extremely fast and their thick carapace can withstand heavy blows.
|
||||
actors.mobs.dm300.name=DM-300
|
||||
actors.mobs.dm300.notice=Unauthorised personnel detected.
|
||||
actors.mobs.dm300.defeated=Mission failed. Shutting down.
|
||||
actors.mobs.dm300.repair=DM-300 repairs itself!
|
||||
actors.mobs.dm300.desc=This machine was created by the Dwarves several centuries ago. Later, Dwarves started to replace machines with golems, elementals and even demons. Eventually it led their civilization to the decline. The DM-300 and similar machines were typically used for construction and mining, and in some cases, for city defense.
|
||||
actors.mobs.elemental.name=fire elemental
|
||||
actors.mobs.elemental.desc=Wandering fire elementals are a byproduct of summoning greater entities. They are too chaotic in their nature to be controlled by even the most powerful demonologist.
|
||||
actors.mobs.eye.name=evil eye
|
||||
actors.mobs.eye.deathgaze_kill=The deathgaze killed you...
|
||||
actors.mobs.eye.desc=One of this demon's other names is "orb of hatred", because when it sees an enemy, it uses its deathgaze recklessly, often ignoring its allies and wounding them.
|
||||
actors.mobs.fetidrat.name=fetid rat
|
||||
actors.mobs.fetidrat.desc=Something is clearly wrong with this rat. Its greasy black fur and rotting skin are very different from the healthy rats you've seen previously. It's pale green eyes make it seem especially menacing.\n\nThe rat carries a cloud of horrible stench with it, it's overpoweringly strong up close.\n\nDark ooze dribbles from the rat's mouth, it eats through the floor but seems to dissolve in water.
|
||||
actors.mobs.gnoll.name=gnoll scout
|
||||
actors.mobs.gnoll.desc=Gnolls are hyena-like humanoids. They dwell in sewers and dungeons, venturing up to raid the surface from time to time. Gnoll scouts are regular members of their pack, they are not as strong as brutes and not as intelligent as shamans.
|
||||
actors.mobs.gnolltrickster.name=gnoll trickster
|
||||
actors.mobs.gnolltrickster.desc=A strange looking creature, even by gnoll standards. It hunches forward with a wicked grin, almost cradling the satchel hanging over its shoulder. Its eyes are wide with a strange mix of fear and excitement.\n\nThere is a large collection of poorly made darts in its satchel, they all seem to be tipped with various harmful substances.
|
||||
actors.mobs.golem.name=golem
|
||||
actors.mobs.golem.def_verb=blocked
|
||||
actors.mobs.golem.desc=The Dwarves tried to combine their knowledge of mechanisms with their newfound power of elemental binding. They used spirits of earth as the "soul" for the mechanical bodies of golems, which were believed to be most controllable of all. Despite this, the tiniest mistake in the ritual could cause an outbreak.
|
||||
actors.mobs.goo.name=Goo
|
||||
actors.mobs.goo.notice=GLURP-GLURP!
|
||||
actors.mobs.goo.defeated=glurp... glurp...
|
||||
actors.mobs.goo.!!!=!!!
|
||||
actors.mobs.goo.pumpup=Goo is pumping itself up!
|
||||
actors.mobs.goo.enraged=enraged
|
||||
actors.mobs.goo.enraged_text=Goo Becomes Enraged!!
|
||||
actors.mobs.goo.gluuurp=GLUUUURP!
|
||||
actors.mobs.goo.desc=Little is known about The Goo. It's quite possible that it is not even a creature, but rather a conglomerate of vile substances from the sewers that somehow gained basic intelligence. Regardless, dark magic is certainly what has allowed Goo to exist.\n\nIts gelatinous nature has let it absorb lots of dark energy, you feel a chill just from being near. If goo is able to attack with this energy you won't live for long.
|
||||
actors.mobs.greatcrab.name=great crab
|
||||
actors.mobs.greatcrab.noticed=The crab notices the attack and blocks with its massive claw.
|
||||
actors.mobs.greatcrab.blocked=blocked
|
||||
actors.mobs.greatcrab.desc=This crab is gigantic, even compared to other sewer crabs. Its blue shell is covered in cracks and barnacles, showing great age. It lumbers around slowly, barely keeping balance with its massive claw.\n\nWhile the crab only has one claw, its size easily compensates. The crab holds the claw infront of itself whenever it sees a threat, shielding itself behind an impenetrable wall of carapace.
|
||||
actors.mobs.guard.name=prison guard
|
||||
actors.mobs.guard.scorpion=get over here!
|
||||
actors.mobs.guard.def_verb=blocked
|
||||
actors.mobs.guard.desc=Once keepers of the prison, these guards have long since become no different than the inmates. They shamble like zombies, brainlessly roaming through the halls in search of anything out of place, like you!\n\nThey carry chains around their hip, possibly used to pull in enemies to close range.
|
||||
actors.mobs.king.name=King of Dwarves
|
||||
actors.mobs.king.notice=How dare you!
|
||||
actors.mobs.king.defeated=You cannot kill me, %s... I am... immortal...
|
||||
actors.mobs.king.def_verb=parried
|
||||
actors.mobs.king.arise=Arise, slaves!
|
||||
actors.mobs.king.desc=The last king of dwarves was known for his deep understanding of processes of life and death. He has persuaded members of his court to participate in a ritual, that should have granted them eternal youthfulness. In the end he was the only one, who got it - and an army of undead as a bonus.
|
||||
actors.mobs.king$undead.name=undead dwarf
|
||||
actors.mobs.king$undead.def_verb=blocked
|
||||
actors.mobs.king$undead.desc=These undead dwarves, risen by the will of the King of Dwarves, were members of his court. They appear as skeletons with a stunning amount of facial hair.
|
||||
actors.mobs.mimic.name=mimic
|
||||
actors.mobs.mimic.desc=Mimics are magical creatures which can take any shape they wish. In dungeons they almost always choose a shape of a treasure chest, because they know how to beckon an adventurer.
|
||||
actors.mobs.mob.died=You hear something died in the distance
|
||||
actors.mobs.mob.rage=#$%^
|
||||
actors.mobs.mob.exp=%+dEXP
|
||||
actors.mobs.mob$sleeping.status=This %s is sleeping
|
||||
actors.mobs.mob$wandering.status=This %s is wandering
|
||||
actors.mobs.mob$hunting.status=This %s is hunting
|
||||
actors.mobs.mob$fleeing.status=This %s is fleeing
|
||||
actors.mobs.mob$passive.status=This %s is passive
|
||||
actors.mobs.monk.name=dwarf monk
|
||||
actors.mobs.monk.disarm=The monk knocks the %s from your hands!
|
||||
actors.mobs.monk.def_verb=parried
|
||||
actors.mobs.monk.desc=These monks are fanatics, who devoted themselves to protecting their city's secrets from all aliens. They don't use any armor or weapons, relying solely on the art of hand-to-hand combat.
|
||||
actors.mobs.newbornelemental.name=newborn fire elemental
|
||||
actors.mobs.newbornelemental.desc=Fire elementals are a byproduct of summoning greater entities. They are too chaotic in their nature to be controlled by even the most powerful demonologist.\n\nThis fire elemental is freshy summoned, and is weakened as a result. In this state is it especially vulnerable to the cold. Its offensive capabilities are still great though, caution is advised.
|
||||
actors.mobs.pirahna.name=giant piranha
|
||||
actors.mobs.pirahna.desc=These carnivorous fish are not natural inhabitants of underground pools. They were bred specifically to protect flooded treasure vaults.
|
||||
actors.mobs.rat.name=marsupial rat
|
||||
actors.mobs.rat.desc=Marsupial rats are aggressive but rather weak denizens of the sewers. They have a nasty bite, but are only life threatening in large numbers.
|
||||
actors.mobs.rotheart.name=rot heart
|
||||
actors.mobs.rotheart.desc=A Rotberry's fruit is very unique. Instead of rotting away and providing nutrients, the fruit grows, hardens, and encompasses the seed. It provides protection for the internal organs which grow inside the fruit. This giant orb is referred to as the heart of an adult rotberry plant.
|
||||
actors.mobs.rotlasher.name=rot lasher
|
||||
actors.mobs.rotlasher.desc=The rot lasher is a part of a mature rotberry plant's root structure, and also their primary means of defence. Lashers are stuck into the ground, but will violently assault anything that gets near to them. When there is no nearby prey, they stand motionless, attempting to blend in with surrounding vegetation.
|
||||
actors.mobs.rotlasher$waiting.status=This %s is idle
|
||||
actors.mobs.scorpio.name=scorpio
|
||||
actors.mobs.scorpio.desc=These huge arachnid-like demonic creatures avoid close combat by all means, firing crippling serrated spikes from long distances.
|
||||
actors.mobs.senior.name=senior monk
|
||||
actors.mobs.shaman.name=gnoll shaman
|
||||
actors.mobs.shaman.zap_kill=The lightning bolt killed you...
|
||||
actors.mobs.shaman.desc=The most intelligent gnolls can master shamanistic magic. Gnoll shamans prefer battle spells to compensate for lack of might, not hesitating to use them on those who question their status in a tribe.
|
||||
actors.mobs.shielded.name=shielded brute
|
||||
actors.mobs.shielded.def_verb=blocked
|
||||
actors.mobs.skeleton.name=skeleton
|
||||
actors.mobs.skeleton.explo_kill=You were killed by the explosion of bones...
|
||||
actors.mobs.skeleton.def_verb=blocked
|
||||
actors.mobs.skeleton.desc=Skeletons are composed of corpses bones from unlucky adventurers and inhabitants of the dungeon, animated by emanations of evil magic from the depths below. After they have been damaged enough, they disintegrate in an explosion of bones.
|
||||
actors.mobs.spinner.name=cave spinner
|
||||
actors.mobs.spinner.desc=These greenish furry cave spiders try to avoid direct combat, preferring to wait in the distance while their victim, entangled in the spinner's excreted cobweb, slowly dies from their poisonous bite.
|
||||
actors.mobs.statue.name=animated statue
|
||||
actors.mobs.statue.desc=You would think that it's just another one of this dungeon's ugly statues, but its red glowing eyes give it away.\n\nWhile the statue itself is made of stone, the %s, it's wielding, looks real.
|
||||
actors.mobs.succubus.name=succubus
|
||||
actors.mobs.succubus.desc=The succubi are demons that look like seductive (in a slightly gothic way) girls. Using its magic, the succubus can charm a hero, who will become unable to attack anything until the charm wears off.
|
||||
actors.mobs.swarm.name=swarm of flies
|
||||
actors.mobs.swarm.def_verb=evaded
|
||||
actors.mobs.swarm.desc=The deadly swarm of flies buzzes angrily. Every non-magical attack will split it into two smaller but equally dangerous swarms.
|
||||
actors.mobs.tengu.name=Tengu
|
||||
actors.mobs.tengu.notice_mine=You're mine, %s!
|
||||
actors.mobs.tengu.notice_face=Face me, %s!
|
||||
actors.mobs.tengu.interesting=Let's make this interesting...
|
||||
actors.mobs.tengu.defeated=Free at last...
|
||||
actors.mobs.tengu.desc=A famous and enigmatic assassin, named for the mask grafted to his face.\n\nTengu is held down with large clasps on his wrists and knees, though he seems to have gotten rid of his chains long ago.\n\nHe will try to use traps, deceptive magic, and precise attacks to eliminate the only thing stopping his escape: you.
|
||||
actors.mobs.thief.name=crazy thief
|
||||
actors.mobs.thief.stole=The thief stole %s from you!
|
||||
actors.mobs.thief.carries=\n\nThe thief is carrying a _%s_. Stolen obviously.
|
||||
actors.mobs.thief.escapes=The thief gets away with your %s!
|
||||
actors.mobs.thief.desc=Though these inmates roam free of their cells, this place is still their prison. Over time, this place has taken their minds as well as their freedom. Long ago, these crazy thieves and bandits have forgotten who they are and why they steal.\n\nThese enemies are more likely to steal and run than they are to fight. Make sure to keep them in sight, or you might never see your stolen item again.
|
||||
actors.mobs.warlock.name=dwarf warlock
|
||||
actors.mobs.warlock.bolt_kill=The shadow bolt killed you...
|
||||
actors.mobs.warlock.desc=When dwarves' interests have shifted from engineering to arcane arts, warlocks have come to power in the city. They started with elemental magic, but soon switched to demonology and necromancy.
|
||||
actors.mobs.wraith.name=wraith
|
||||
actors.mobs.wraith.def_verb=evaded
|
||||
actors.mobs.wraith.desc=A wraith is a vengeful spirit of a sinner, whose grave or tomb was disturbed. Being an ethereal entity, it is very hard to hit with a regular weapon.
|
||||
actors.mobs.yog.name=Yog-Dzewa
|
||||
actors.mobs.yog.notice=Hope is an illusion...
|
||||
actors.mobs.yog.defeated=...
|
||||
actors.mobs.yog.desc=Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then imprisoned it in the halls below their city, believing it to be too weak to rise ever again.
|
||||
actors.mobs.yog.rottingfist.name=rotting fist
|
||||
actors.mobs.yog.rottingfist.desc=Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then imprisoned it in the halls below their city, believing it to be too weak to rise ever again.
|
||||
actors.mobs.yog.burningfist.name=burning fist
|
||||
actors.mobs.yog.burningfist.desc=Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then imprisoned it in the halls below their city, believing it to be too weak to rise ever again.
|
||||
actors.mobs.yog.larva.name=god's larva
|
||||
actors.mobs.yog.larva.desc=Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then imprisoned it in the halls below their city, believing it to be too weak to rise ever again.
|
||||
|
||||
actors.char.hit=%2$s hit %1$s
|
||||
actors.char.kill=%s killed you...
|
||||
actors.char.defeat=%s defeated %s
|
||||
actors.char.you_missed=%s %s your attack
|
||||
actors.char.smb_missed=%s %s %s's attack
|
||||
actors.char.out_of_paralysis=The pain snapped %s out of paralysis
|
||||
actors.char.def_verb=dodged
|
||||
|
||||
items.bags.bag.name=backpack
|
||||
|
|
|
@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.watabou.noosa.BitmapTextMultiline;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
|
@ -166,7 +167,7 @@ public class WndTradeItem extends Window {
|
|||
} else {
|
||||
for (Mob mob : Dungeon.level.mobs){
|
||||
if (mob instanceof Shopkeeper) {
|
||||
mob.yell(((Shopkeeper) mob).TXT_THIEF);
|
||||
mob.yell(Messages.get(mob, "thief"));
|
||||
((Shopkeeper) mob).flee();
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user