v0.9.3: cleaned up and polished class armor descs and interfaces

This commit is contained in:
Evan Debenham 2021-04-16 20:07:46 -04:00
parent 7972a5e271
commit 6f6e79128b
8 changed files with 52 additions and 27 deletions

View File

@ -347,6 +347,7 @@ actors.hero.abilities.mage.mage2.desc=I haven't decided on this ability yet.
actors.hero.abilities.mage.mage3.name=??? actors.hero.abilities.mage.mage3.name=???
actors.hero.abilities.mage.mage3.desc=I haven't decided on this ability yet. actors.hero.abilities.mage.mage3.desc=I haven't decided on this ability yet.
actors.hero.abilities.rogue.smokebomb.name=smoke bomb actors.hero.abilities.rogue.smokebomb.name=smoke bomb
actors.hero.abilities.rogue.smokebomb.fov=You can only jump to an empty location in your field of view
actors.hero.abilities.rogue.smokebomb.desc=The Rogue blinks to any nearby location which he can see, leaving a plume of smoke where he stood. This ability makes the rogue temporarily invisible, and blinds any enemies adjacent to his old location. actors.hero.abilities.rogue.smokebomb.desc=The Rogue blinks to any nearby location which he can see, leaving a plume of smoke where he stood. This ability makes the rogue temporarily invisible, and blinds any enemies adjacent to his old location.
actors.hero.abilities.rogue.smokebomb.prompt=Choose a location to jump to actors.hero.abilities.rogue.smokebomb.prompt=Choose a location to jump to
actors.hero.abilities.rogue.rogue2.name=??? actors.hero.abilities.rogue.rogue2.name=???

View File

@ -93,6 +93,8 @@ items.armor.armor.seal_attached=The Warrior's broken seal is attached to this ar
items.armor.armor$glyph.glyph=glyph items.armor.armor$glyph.glyph=glyph
items.armor.armor$glyph.killed=%s killed you... items.armor.armor$glyph.killed=%s killed you...
items.armor.classarmor.ac_ability=CHOOSE ABILITY
items.armor.classarmor.no_ability=Your armor currently has no ability, you should choose one!
items.armor.classarmor.not_equipped=You need to be wearing this armor to use its special power! items.armor.classarmor.not_equipped=You need to be wearing this armor to use its special power!
items.armor.classarmor.low_charge=The armor does not have enough charge to use its special power! items.armor.classarmor.low_charge=The armor does not have enough charge to use its special power!
@ -100,16 +102,14 @@ items.armor.clotharmor.name=cloth armor
items.armor.clotharmor.desc=This lightweight armor offers basic protection. items.armor.clotharmor.desc=This lightweight armor offers basic protection.
items.armor.huntressarmor.name=huntress cloak items.armor.huntressarmor.name=huntress cloak
items.armor.huntressarmor.ac_special=SPECTRAL BLADES
items.armor.huntressarmor.no_enemies=No enemies in sight items.armor.huntressarmor.no_enemies=No enemies in sight
items.armor.huntressarmor.desc=While wearing this cloak, the huntress can create a fan of spectral blades. Each of these blades will target a single enemy in the huntress's field of view, inflicting damage depending on her currently equipped melee weapon.\n\nUsing this ability will consume 35% of the armor's charge. The armor steadily builds charge as the huntress gains experience. items.armor.huntressarmor.desc=... . While wearing this cloak, the Huntress can perform a special ability:
items.armor.leatherarmor.name=leather armor items.armor.leatherarmor.name=leather armor
items.armor.leatherarmor.desc=Armor made from tanned monster hide. Not as light as cloth armor but provides better protection. items.armor.leatherarmor.desc=Armor made from tanned monster hide. Not as light as cloth armor but provides better protection.
items.armor.magearmor.name=mage robe items.armor.magearmor.name=mage robe
items.armor.magearmor.ac_special=MOLTEN EARTH items.armor.magearmor.desc=... . While wearing this gorgeous robe, the Mage can perform a special ability:
items.armor.magearmor.desc=While wearing this gorgeous robe, the mage can cast a spell of molten earth. All the enemies in his field of view will be rooted to the ground and blasted by flames.\n\nUsing this ability will consume 35% of the armor's charge. The armor steadily builds charge as the mage gains experience.
items.armor.mailarmor.name=mail armor items.armor.mailarmor.name=mail armor
items.armor.mailarmor.desc=Interlocking metal links make for a tough but flexible suit of armor. items.armor.mailarmor.desc=Interlocking metal links make for a tough but flexible suit of armor.
@ -118,18 +118,13 @@ items.armor.platearmor.name=plate armor
items.armor.platearmor.desc=Enormous plates of metal are joined together into a suit that provides unmatched protection to any adventurer strong enough to bear its staggering weight. items.armor.platearmor.desc=Enormous plates of metal are joined together into a suit that provides unmatched protection to any adventurer strong enough to bear its staggering weight.
items.armor.roguearmor.name=rogue garb items.armor.roguearmor.name=rogue garb
items.armor.roguearmor.ac_special=SMOKE BOMB items.armor.roguearmor.desc=... . When wearing this dark garb, the Rogue can perform a special ability:
items.armor.roguearmor.fov=You can only jump to an empty location in your field of view
items.armor.roguearmor.prompt=Choose a location to jump to
items.armor.roguearmor.desc=When wearing this dark garb, the rogue can blink to any nearby location which he can see, leaving a plume of smoke where he stood. This ability makes the rogue temporarily invisible, and blinds any enemies adjacent to his old location.\n\nUsing this ability will consume 35% of the armor's charge. The armor steadily builds charge as the rogue gains experience.
items.armor.scalearmor.name=scale armor items.armor.scalearmor.name=scale armor
items.armor.scalearmor.desc=The metal scales sewn onto a leather vest create a flexible, yet protective armor. items.armor.scalearmor.desc=The metal scales sewn onto a leather vest create a flexible, yet protective armor.
items.armor.warriorarmor.name=warrior suit of armor items.armor.warriorarmor.name=warrior suit of armor
items.armor.warriorarmor.ac_special=HEROIC LEAP items.armor.warriorarmor.desc=... . While this armor looks heavy, it allows the Warrior to perform a special ability:
items.armor.warriorarmor.prompt=Choose direction to leap
items.armor.warriorarmor.desc=While this armor looks heavy, it allows the warrior to perform a heroic leap towards a targeted location, slamming down to stun all neighbouring enemies.\n\nUsing this ability will consume 35% of the armor's charge. The armor steadily builds charge as the warrior gains experience.

View File

@ -6,6 +6,7 @@ windows.wndchallenges.title=Challenges
windows.wndchooseability.message=The crown glows as it rests on your head, and both it and your armor become hot to the touch. You can feel the magic of the crown begin to act on your armor, but it must be directed. Which armor ability do you choose? windows.wndchooseability.message=The crown glows as it rests on your head, and both it and your armor become hot to the touch. You can feel the magic of the crown begin to act on your armor, but it must be directed. Which armor ability do you choose?
windows.wndchooseability.message_no_crown=Choose an ability for your armor! windows.wndchooseability.message_no_crown=Choose an ability for your armor!
windows.wndchooseability.cancel=I'll decide later
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.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.wndchooseway.cancel=I'll decide later

View File

@ -36,7 +36,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.RogueArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
@ -62,7 +61,7 @@ public class SmokeBomb extends ArmorAbility {
!Dungeon.level.heroFOV[target] || !Dungeon.level.heroFOV[target] ||
Actor.findChar( target ) != null) { Actor.findChar( target ) != null) {
GLog.w( Messages.get(RogueArmor.class, "fov") ); GLog.w( Messages.get(this, "fov") );
return; return;
} }

View File

@ -104,6 +104,10 @@ public class Item implements Bundlable {
return actions; return actions;
} }
public String actionName(String action, Hero hero){
return Messages.get(this, "ac_" + action);
}
public boolean doPickUp( Hero hero ) { public boolean doPickUp( Hero hero ) {
if (collect( hero.belongings.backpack )) { if (collect( hero.belongings.backpack )) {

View File

@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.armor;
import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal; import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
@ -35,13 +36,12 @@ import java.util.ArrayList;
abstract public class ClassArmor extends Armor { abstract public class ClassArmor extends Armor {
private static final String AC_SPECIAL = "SPECIAL"; private static final String AC_ABILITY = "ABILITY";
private static final String AC_CHOOSE = "CHOOSE";
{ {
levelKnown = true; levelKnown = true;
cursedKnown = true; cursedKnown = true;
defaultAction = AC_SPECIAL; defaultAction = AC_ABILITY;
bones = false; bones = false;
} }
@ -114,12 +114,21 @@ abstract public class ClassArmor extends Armor {
@Override @Override
public ArrayList<String> actions( Hero hero ) { public ArrayList<String> actions( Hero hero ) {
ArrayList<String> actions = super.actions( hero ); ArrayList<String> actions = super.actions( hero );
if (hero.HP >= 3 && isEquipped( hero )) { if (isEquipped( hero )) {
actions.add( AC_SPECIAL ); actions.add( AC_ABILITY );
} }
return actions; return actions;
} }
@Override
public String actionName(String action, Hero hero) {
if (hero.armorAbility != null && action.equals(AC_ABILITY)){
return hero.armorAbility.name().toUpperCase();
} else {
return super.actionName(action, hero);
}
}
@Override @Override
public String status() { public String status() {
return Messages.format( "%.0f%%", charge ); return Messages.format( "%.0f%%", charge );
@ -130,15 +139,12 @@ abstract public class ClassArmor extends Armor {
super.execute( hero, action ); super.execute( hero, action );
if (action.equals(AC_SPECIAL)) { if (action.equals(AC_ABILITY)){
//for pre-0.9.3 saves //for pre-0.9.3 saves
if (hero.armorAbility == null){ if (hero.armorAbility == null){
GameScene.show(new WndChooseAbility(null, this, hero)); GameScene.show(new WndChooseAbility(null, this, hero));
return; } else if (!isEquipped( hero )) {
}
if (!isEquipped( hero )) {
GLog.w( Messages.get(this, "not_equipped") ); GLog.w( Messages.get(this, "not_equipped") );
} else if (charge < 35) { } else if (charge < 35) {
GLog.w( Messages.get(this, "low_charge") ); GLog.w( Messages.get(this, "low_charge") );
@ -159,8 +165,17 @@ abstract public class ClassArmor extends Armor {
@Override @Override
public String desc() { public String desc() {
//TODO custom desc, core desc + description of ability //TODO descriptions for each class armor
return super.desc(); String desc = super.desc();
ArmorAbility ability = Dungeon.hero.armorAbility;
if (ability != null){
desc += "\n\n" + "_" + Messages.titleCase(ability.name()) + ":_ " + ability.desc();
} else {
desc += "\n\n" + "_" + Messages.get(this, "no_ability") + "_";
}
return desc;
} }
@Override @Override

View File

@ -80,6 +80,17 @@ public class WndChooseAbility extends Window {
pos = abilityButton.bottom() + GAP; pos = abilityButton.bottom() + GAP;
} }
RedButton cancelButton = new RedButton(Messages.get(this, "cancel")){
@Override
protected void onClick() {
hide();
}
};
cancelButton.setSize(WIDTH, 18);
cancelButton.setRect(0, pos, WIDTH, 18);
add(cancelButton);
pos = cancelButton.bottom() + GAP;
resize(WIDTH, (int)pos); resize(WIDTH, (int)pos);
} }

View File

@ -23,7 +23,6 @@ package com.shatteredpixel.shatteredpixeldungeon.windows;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
import java.util.ArrayList; import java.util.ArrayList;
@ -52,7 +51,7 @@ public class WndUseItem extends WndInfoItem {
ArrayList<RedButton> buttons = new ArrayList<>(); ArrayList<RedButton> buttons = new ArrayList<>();
for (final String action : item.actions( Dungeon.hero )) { for (final String action : item.actions( Dungeon.hero )) {
RedButton btn = new RedButton( Messages.get(item, "ac_" + action), 8 ) { RedButton btn = new RedButton( item.actionName(action, Dungeon.hero), 8 ) {
@Override @Override
protected void onClick() { protected void onClick() {
hide(); hide();