v0.9.3: thematic changes to tome and armor kit, now mask and crown.

This commit is contained in:
Evan Debenham 2021-03-25 20:12:50 -04:00
parent 3f7c0da811
commit 2dcc716a86
11 changed files with 72 additions and 64 deletions

View File

@ -1620,12 +1620,6 @@ items.ankh.bless=You bless the ankh with magical water.
items.ankh.desc=This ancient symbol of immortality grants the ability to return to life after death. Upon resurrection all non-equipped items are lost. Using a full waterskin, the ankh can be blessed with extra strength.
items.ankh.desc_blessed=This ancient symbol of immortality grants the ability to return to life after death. The ankh has been blessed and is now much stronger. The Ankh will sacrifice itself to save you in a moment of deadly peril.
items.armorkit.name=armor kit
items.armorkit.ac_apply=APPLY
items.armorkit.prompt=Select an armor
items.armorkit.upgraded=You applied the armor kit to upgrade your %s
items.armorkit.desc=Using this kit of small tools and materials anybody can transform any armor into an "epic armor", which will keep all properties of the original armor, but will also provide its wearer a special ability depending on his class. No skills in tailoring, leatherworking or blacksmithing are required.
items.brokenseal.name=broken seal
items.brokenseal.ac_affix=AFFIX
items.brokenseal.prompt=Select an armor
@ -1685,6 +1679,12 @@ items.kindofmisc.unequip_message=You must unequip one of these items first. Sele
items.kindofweapon.equip_cursed=Your grip involuntarily tightens around the weapon.
items.kingscrown.name=Dwarf King's crown
items.kingscrown.ac_wear=WEAR
items.kingscrown.naked=Unfortunately, the crown cannot transform your underwear.
items.kingscrown.upgraded=The crown glows brightly and then disintegrates as your armor transforms!
items.kingscrown.desc=The crown of the last dwarven king, it glows with tremendous magical energy.\n\nWhen worn, the crown's magic will flow into the armor you're currently wearing, transforming it into a _unique epic armor with special abilities._ The new armor will keep all the properties of the original armor.
items.merchantsbeacon.name=merchant's beacon
items.merchantsbeacon.ac_use=USE
items.merchantsbeacon.desc=This odd piece of dwarven technology allows you to communicate from great distances.\n\nAfter being activated, this beacon will let you sell items to Pixel Mart from anywhere in the dungeon.\n\nHowever, the magic within the beacon will only last for one session, so use it wisely.
@ -1697,10 +1697,10 @@ items.stylus.cursed=The stylus's magic will not work on cursed armor.
items.stylus.inscribed=You inscribed your armor with the stylus.
items.stylus.desc=This arcane stylus is made of some dark, very hard stone. Using it you can inscribe a magical glyph on your armor, but you have no power over choosing what glyph it will be, the stylus will decide it for you.
items.tomeofmastery.name=Tome of Mastery
items.tomeofmastery.ac_read=READ
items.tomeofmastery.way=You have chosen the way of the %s!
items.tomeofmastery.desc=This worn leather book is not that thick, but you feel somehow, that you can gather a lot from it. Remember though that reading this tome may require some time.
items.tengusmask.name=Tengu's mask
items.tengusmask.ac_wear=WEAR
items.tengusmask.used=The mask disintegrates as its power flows into you!
items.tengusmask.desc=This mask fell of Tengu's face as he died, you can feel great magical power emanating from it. Was the mask Tengu's source of strength?\n\nWhen worn, the tremendous power of the mask will be transferred into you, enabling you to _choose a subclass for your hero._\n\nWhich subclass will you choose?
items.torch.name=torch
items.torch.ac_light=LIGHT

View File

@ -4,7 +4,7 @@ windows.wndblacksmith.reforge=Reforge them
windows.wndchallenges.title=Challenges
windows.wndchooseway.message=Which way will you follow?
windows.wndchooseway.message=As the mask fits over your face, your eyesight fades and visions of new power flood into your mind. How will you direct the mask's power?
windows.wndchooseway.cancel=I'll decide later
windows.wndclass.mastery=Mastery

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -82,6 +82,12 @@ public class ShatteredPixelDungeon extends Game {
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.items.Waterskin.class,
"com.shatteredpixel.shatteredpixeldungeon.items.DewVial" );
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.items.TengusMask.class,
"com.shatteredpixel.shatteredpixeldungeon.items.TomeOfMastery" );
com.watabou.utils.Bundle.addAlias(
com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown.class,
"com.shatteredpixel.shatteredpixeldungeon.items.ArmorKit" );
}

View File

@ -38,9 +38,9 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.ArmorKit;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
@ -430,9 +430,9 @@ public class DwarfKing extends Mob {
}
h.destroy();
}
Dungeon.level.drop(new ArmorKit(), pos + Dungeon.level.width()).sprite.drop(pos);
Dungeon.level.drop(new KingsCrown(), pos + Dungeon.level.width()).sprite.drop(pos);
} else {
Dungeon.level.drop(new ArmorKit(), pos).sprite.drop();
Dungeon.level.drop(new KingsCrown(), pos).sprite.drop();
}
Badges.validateBossSlain();

View File

@ -36,7 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.ArmorKit;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
@ -150,7 +150,7 @@ public class King extends Mob {
public void die( Object cause ) {
GameScene.bossSlain();
Dungeon.level.drop( new ArmorKit(), pos ).sprite.drop();
Dungeon.level.drop( new KingsCrown(), pos ).sprite.drop();
Dungeon.level.drop( new SkeletonKey( Dungeon.depth ), pos ).sprite.drop();
super.die( cause );

View File

@ -48,7 +48,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SmokeParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SparkParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.TomeOfMastery;
import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb;
@ -199,7 +199,7 @@ public class Tengu extends Mob {
public void die( Object cause ) {
if (Dungeon.hero.subClass == HeroSubClass.NONE) {
Dungeon.level.drop( new TomeOfMastery(), pos ).sprite.drop();
Dungeon.level.drop( new TengusMask(), pos ).sprite.drop();
}
GameScene.bossSlain();

View File

@ -22,12 +22,12 @@
package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@ -36,16 +36,12 @@ import com.watabou.noosa.audio.Sample;
import java.util.ArrayList;
public class ArmorKit extends Item {
private static final String TXT_UPGRADED = "you applied the armor kit to upgrade your %s";
public class KingsCrown extends Item {
private static final float TIME_TO_UPGRADE = 2;
private static final String AC_APPLY = "APPLY";
private static final String AC_WEAR = "WEAR";
{
image = ItemSpriteSheet.KIT;
image = ItemSpriteSheet.CROWN;
unique = true;
}
@ -53,7 +49,7 @@ public class ArmorKit extends Item {
@Override
public ArrayList<String> actions( Hero hero ) {
ArrayList<String> actions = super.actions( hero );
actions.add( AC_APPLY );
actions.add( AC_WEAR );
return actions;
}
@ -62,10 +58,14 @@ public class ArmorKit extends Item {
super.execute( hero, action );
if (action.equals(AC_APPLY)) {
if (action.equals(AC_WEAR)) {
curUser = hero;
GameScene.selectItem( itemSelector, WndBag.Mode.ARMOR, Messages.get(this, "prompt") );
if (hero.belongings.armor != null){
upgrade(hero.belongings.armor);
} else {
GLog.w( Messages.get(this, "naked"));
}
}
}
@ -85,10 +85,11 @@ public class ArmorKit extends Item {
detach( curUser.belongings.backpack );
curUser.sprite.centerEmitter().start( Speck.factory( Speck.KIT ), 0.05f, 10 );
curUser.spend( TIME_TO_UPGRADE );
//TODO add a spell icon?
curUser.spend( Actor.TICK );
curUser.busy();
GLog.w( Messages.get(this, "upgraded", armor.name()) );
GLog.p( Messages.get(this, "upgraded"));
ClassArmor classArmor = ClassArmor.upgrade( curUser, armor );
if (curUser.belongings.armor == armor) {
@ -105,14 +106,14 @@ public class ArmorKit extends Item {
}
curUser.sprite.operate( curUser.pos );
Sample.INSTANCE.play( Assets.Sounds.EVOKE );
Sample.INSTANCE.play( Assets.Sounds.MASTERY );
}
private final WndBag.Listener itemSelector = new WndBag.Listener() {
@Override
public void onSelect( Item item ) {
if (item != null) {
ArmorKit.this.upgrade( (Armor)item );
KingsCrown.this.upgrade( (Armor)item );
}
}
};

View File

@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
@ -37,15 +38,13 @@ import com.watabou.noosa.audio.Sample;
import java.util.ArrayList;
public class TomeOfMastery extends Item {
public class TengusMask extends Item {
public static final float TIME_TO_READ = 10;
public static final String AC_READ = "READ";
public static final String AC_WEAR = "WEAR";
{
stackable = false;
image = ItemSpriteSheet.MASTERY;
image = ItemSpriteSheet.MASK;
unique = true;
}
@ -53,7 +52,7 @@ public class TomeOfMastery extends Item {
@Override
public ArrayList<String> actions( Hero hero ) {
ArrayList<String> actions = super.actions( hero );
actions.add( AC_READ );
actions.add( AC_WEAR );
return actions;
}
@ -62,7 +61,7 @@ public class TomeOfMastery extends Item {
super.execute( hero, action );
if (action.equals( AC_READ )) {
if (action.equals( AC_WEAR )) {
curUser = hero;
@ -111,7 +110,7 @@ public class TomeOfMastery extends Item {
detach( curUser.belongings.backpack );
curUser.spend( TomeOfMastery.TIME_TO_READ );
curUser.spend( Actor.TICK );
curUser.busy();
curUser.subClass = way;
@ -120,9 +119,9 @@ public class TomeOfMastery extends Item {
curUser.sprite.operate( curUser.pos );
Sample.INSTANCE.play( Assets.Sounds.MASTERY );
SpellSprite.show( curUser, SpellSprite.MASTERY );
SpellSprite.show( curUser, SpellSprite.MASTERY ); //TODO new spell icon!
curUser.sprite.emitter().burst( Speck.factory( Speck.MASTERY ), 12 );
GLog.w( Messages.get(this, "way", way.title()) );
GLog.p( Messages.get(this, "used"));
}
}

View File

@ -125,23 +125,23 @@ public class ItemSpriteSheet {
assignItemRect(EBONY_CHEST, 16, 14);
}
private static final int SINGLE_USE = xy(1, 4); //16 slots
public static final int ANKH = SINGLE_USE+0;
public static final int STYLUS = SINGLE_USE+1;
public static final int SEAL = SINGLE_USE+3;
public static final int TORCH = SINGLE_USE+4;
public static final int BEACON = SINGLE_USE+5;
public static final int HONEYPOT = SINGLE_USE+7;
public static final int SHATTPOT = SINGLE_USE+8;
public static final int IRON_KEY = SINGLE_USE+9;
public static final int GOLDEN_KEY = SINGLE_USE+10;
public static final int CRYSTAL_KEY = SINGLE_USE+11;
public static final int SKELETON_KEY = SINGLE_USE+12;
public static final int MASTERY = SINGLE_USE+13;
public static final int KIT = SINGLE_USE+14;
public static final int AMULET = SINGLE_USE+15;
private static final int MISC_CONSUMABLE = xy(1, 4); //16 slots
public static final int ANKH = MISC_CONSUMABLE +0;
public static final int STYLUS = MISC_CONSUMABLE +1;
public static final int SEAL = MISC_CONSUMABLE +2;
public static final int TORCH = MISC_CONSUMABLE +3;
public static final int BEACON = MISC_CONSUMABLE +4;
public static final int HONEYPOT = MISC_CONSUMABLE +5;
public static final int SHATTPOT = MISC_CONSUMABLE +6;
public static final int IRON_KEY = MISC_CONSUMABLE +7;
public static final int GOLDEN_KEY = MISC_CONSUMABLE +8;
public static final int CRYSTAL_KEY = MISC_CONSUMABLE +9;
public static final int SKELETON_KEY = MISC_CONSUMABLE +10;
public static final int MASK = MISC_CONSUMABLE +11; //FIXME placeholder sprite
public static final int CROWN = MISC_CONSUMABLE +12; //FIXME placeholder sprite
public static final int AMULET = MISC_CONSUMABLE +13;
public static final int MASTERY = MISC_CONSUMABLE +14;
public static final int KIT = MISC_CONSUMABLE +15;
static{
assignItemRect(ANKH, 10, 16);
assignItemRect(STYLUS, 12, 13);
@ -156,9 +156,11 @@ public class ItemSpriteSheet {
assignItemRect(GOLDEN_KEY, 8, 14);
assignItemRect(CRYSTAL_KEY, 8, 14);
assignItemRect(SKELETON_KEY, 8, 14);
assignItemRect(MASK, 9, 9);
assignItemRect(CROWN, 13, 6);
assignItemRect(AMULET, 16, 16);
assignItemRect(MASTERY, 13, 16);
assignItemRect(KIT, 16, 15);
assignItemRect(AMULET, 16, 16);
}
private static final int BOMBS = xy(1, 5); //16 slots

View File

@ -22,7 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.items.TomeOfMastery;
import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
@ -36,7 +36,7 @@ public class WndChooseWay extends Window {
private static final int BTN_HEIGHT = 18;
private static final float GAP = 2;
public WndChooseWay( final TomeOfMastery tome, final HeroSubClass way1, final HeroSubClass way2 ) {
public WndChooseWay(final TengusMask tome, final HeroSubClass way1, final HeroSubClass way2 ) {
super();
@ -47,7 +47,7 @@ public class WndChooseWay extends Window {
add( titlebar );
RenderedTextBlock hl = PixelScene.renderTextBlock( 6 );
hl.text( way1.desc() + "\n\n" + way2.desc() + "\n\n" + Messages.get(this, "message"), WIDTH );
hl.text( Messages.get(this, "message") + "\n\n" + way1.desc() + "\n\n" + way2.desc(), WIDTH );
hl.setPos( titlebar.left(), titlebar.bottom() + GAP );
add( hl );