v0.9.3: implemented a short desc and final structure for all abilities

This commit is contained in:
Evan Debenham 2021-05-15 22:19:25 -04:00
parent a4f81dda2f
commit f6ed111b3e
20 changed files with 215 additions and 80 deletions

View File

@ -339,43 +339,47 @@ actors.hero.abilities.armorability.prompt=Choose a location to target
actors.hero.abilities.warrior.heroicleap.name=heroic leap
actors.hero.abilities.warrior.heroicleap.prompt=Choose direction to leap
actors.hero.abilities.warrior.heroicleap.short_desc=The Warrior performs a heroic leap towards a targeted location, slamming down to stun all neighbouring enemies. Consumes 35 charge.
actors.hero.abilities.warrior.heroicleap.desc=I haven't decided on this ability yet.
actors.hero.abilities.warrior.heroicleap.short_desc=The Warrior performs a _Heroic Leap_ towards a targeted location, slamming down to stun all neighbouring enemies.
actors.hero.abilities.warrior.heroicleap.desc=TODO
actors.hero.abilities.warrior.shockwave.name=shockwave
actors.hero.abilities.warrior.shockwave.short_desc=The Warrior slams the ground and releases a shockwave in a conical AOE. Enemies caught in the shockwave are damaged and crippled. Consumes 35 energy.
actors.hero.abilities.warrior.shockwave.desc=I haven't decided on this ability yet.
actors.hero.abilities.warrior.warrior3.name=???
actors.hero.abilities.warrior.warrior3.short_desc=I haven't decided on this ability yet.
actors.hero.abilities.warrior.warrior3.desc=I haven't decided on this ability yet.
actors.hero.abilities.warrior.shockwave.short_desc=The Warrior releases a _Shockwave_ in a conical AOE by slamming the ground. Enemies caught in the shockwave are damaged and crippled.
actors.hero.abilities.warrior.shockwave.desc=TODO
actors.hero.abilities.warrior.endure.name=endure
actors.hero.abilities.warrior.endure.short_desc=The Warrior _Endures_, skipping several turns but gaining high damage resistance. He then deals bonus damage based on what he endured.
actors.hero.abilities.warrior.endure.desc=TODO
actors.hero.abilities.mage.elementalblast.name=elemental blast
actors.hero.abilities.mage.elementalblast.short_desc=TODO
actors.hero.abilities.mage.elementalblast.desc=I haven't decided on this ability yet.
actors.hero.abilities.mage.mage2.name=???
actors.hero.abilities.mage.mage2.short_desc=I haven't decided on this ability yet.
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.short_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.mage.elementalblast.short_desc=The Mage emits an _Elemental Blast_ from his staff, covering a large area around him in an effect that varies based on the wand in his staff.
actors.hero.abilities.mage.elementalblast.desc=TODO
actors.hero.abilities.mage.wildmagic.name=wild magic
actors.hero.abilities.mage.wildmagic.short_desc=The Mage unleashes the _Wild Magic_ contained in his wands, randomly firing them multiple times at a chosen target over a single turn.
actors.hero.abilities.mage.wildmagic.desc=TODO
actors.hero.abilities.mage.magicalchains.name=magical chains
actors.hero.abilities.mage.magicalchains.short_desc=The Mage throws out _Magical Chains_, which affect every enemy he has used magic on recently.
actors.hero.abilities.mage.magicalchains.desc=TODO
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.prompt=Choose a location to jump to
actors.hero.abilities.rogue.smokebomb.short_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. Consumes 35 charge.
actors.hero.abilities.rogue.smokebomb.short_desc=The Rogue throws down a _Smoke Bomb_ while blinking away. He becomes temporarily invisible and blinds enemies near his old location.
actors.hero.abilities.rogue.smokebomb.desc=TODO
actors.hero.abilities.rogue.rogue2.name=???
actors.hero.abilities.rogue.rogue2.short_desc=I haven't decided on this ability yet.
actors.hero.abilities.rogue.rogue2.desc=TODO
actors.hero.abilities.rogue.rogue3.name=???
actors.hero.abilities.rogue.rogue3.short_desc=I haven't decided on this ability yet.
actors.hero.abilities.rogue.rogue3.desc=TODO
actors.hero.abilities.rogue.deathmark.name=death mark
actors.hero.abilities.rogue.deathmark.short_desc=The Rogue places a _Death Mark_ on a chosen enemy. Marked enemies take bonus damage, but cannot die until the mark ends.
actors.hero.abilities.rogue.deathmark.desc=TODO
actors.hero.abilities.rogue.shadowclone.name=shadow clone
actors.hero.abilities.rogue.shadowclone.short_desc=The Rogue summons a _Shadow Clone_, which is frail, but can be directed and deals damage based on his weapon.
actors.hero.abilities.rogue.shadowclone.desc=TODO
actors.hero.abilities.huntress.spectralblades.name=spectral blades
actors.hero.abilities.huntress.spectralblades.short_desc=The Huntress throws a spectral blade at a target, inflicting damage depending on her currently equipped melee weapon. Consumes 35 charge.
actors.hero.abilities.huntress.spectralblades.short_desc=The Huntress throws a _Spectral Blade_ at a target, inflicting damage depending on her currently equipped melee weapon.
actors.hero.abilities.huntress.spectralblades.desc=TODO
actors.hero.abilities.huntress.huntress2.name=???
actors.hero.abilities.huntress.huntress2.short_desc=I haven't decided on this ability yet.
actors.hero.abilities.huntress.huntress2.desc=TODO
actors.hero.abilities.huntress.huntress3.name=???
actors.hero.abilities.huntress.huntress3.short_desc=I haven't decided on this ability yet.
actors.hero.abilities.huntress.huntress3.desc=TODO
actors.hero.abilities.huntress.naturesstrength.name=Nature's Strength
actors.hero.abilities.huntress.naturesstrength.short_desc=The Huntress calls upon _Nature's Strength_ to empower her, increasing her movement speed and her bow's rate of fire for a short time.
actors.hero.abilities.huntress.naturesstrength.desc=TODO
actors.hero.abilities.huntress.spirithawk.name=spirit hawk
actors.hero.abilities.huntress.spirithawk.short_desc=The Huntress summons a _Spirit Hawk_ familiar, which can help her scout locations and distract enemies.
actors.hero.abilities.huntress.spirithawk.desc=TODO
actors.hero.abilities.ratmogrify.name=ratmogrify
actors.hero.abilities.ratmogrify.short_desc=The hero _ratmogrifies_ an enemy! This temporarily turns them into a rat with weakened attack power and no abilities.
actors.hero.abilities.ratmogrify.desc=TODO
actors.hero.hero.name=you
actors.hero.hero.leave=You can't leave yet, the rest of the dungeon awaits below!
@ -517,7 +521,7 @@ actors.hero.talent.wand_preservation.desc=_+1:_ When the Mage imbues a new wand
actors.hero.talent.arcane_vision.title=arcane vision
actors.hero.talent.arcane_vision.desc=_+1:_ When the Mage zaps an enemy, he gains mind vision on them for _10 turns_.\n\n_+2:_ When the Mage zaps an enemy, he gains mind vision on them for _15 turns_.
actors.hero.talent.shield_battery.title=shield battery
actors.hero.talent.shield_battery.desc=_+1:_ The Mage can self-target with a wand to convert its charges into shielding at a rate of _5% max HP per charge_.\n\n_+2:_ The Mage can self-target with a wand to convert its charges into shielding at a rate of _7.5% max HP per charge_.
actors.hero.talent.shield_battery.desc=_+1:_ The Mage can self-target with a wand to convert all of its charges into shielding at a rate of _5% max HP per charge_.\n\n_+2:_ The Mage can self-target with a wand to convert all of its charges into shielding at a rate of _7.5% max HP per charge_.
actors.hero.talent.empowering_scrolls.title=empowering scrolls
actors.hero.talent.empowering_scrolls.desc=_+1:_ When the Mage reads a scroll, his next wand zap will get _+1 level_.\n\n_+2:_ When the Mage reads a scroll, his next wand zap will get _+2 levels_.\n\n_+3:_ When the Mage reads a scroll, his next wand zap will get _+3 levels_.
@ -746,6 +750,13 @@ 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.confused=Wha... Where am I? My kingdom needs me!
actors.mobs.npcs.ratking.crown_clothes=Put some clothes on! You're in no state to talk to royalty!
actors.mobs.npcs.ratking.crown_desc=Oooh, is that crown for me!? It looks much shinier than mine, so I graciously accept!\n\nIn fact, I think I can offer you something as a reward for this crown. A tremendous power befitting a hero such as yourself! Would you like that?
actors.mobs.npcs.ratking.crown_yes=Of course!
actors.mobs.npcs.ratking.crown_no=I'm not so sure...
actors.mobs.npcs.ratking.crown_thankyou=Hehehe, thank you! Now go and make your king proud!
actors.mobs.npcs.ratking.crown_fine=Fine! It's not like I wanted it anyway...
actors.mobs.npcs.ratking.crown_after=Enjoying your new armor? No take-backsies!
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.

View File

@ -101,15 +101,15 @@ items.armor.classarmor.low_charge=The armor does not have enough charge to use i
items.armor.clotharmor.name=cloth armor
items.armor.clotharmor.desc=This lightweight armor offers basic protection.
items.armor.huntressarmor.name=huntress cloak
items.armor.huntressarmor.name=hero's cloak
items.armor.huntressarmor.no_enemies=No enemies in sight
items.armor.huntressarmor.desc=... . While wearing this cloak, the Huntress can perform a special ability:
items.armor.huntressarmor.desc=While wearing this cloak, the Huntress can perform a special ability:
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.magearmor.name=mage robe
items.armor.magearmor.desc=... . While wearing this gorgeous robe, the Mage can perform a special ability:
items.armor.magearmor.name=hero's robe
items.armor.magearmor.desc=While wearing this gorgeous robe, the Mage can perform a special ability:
items.armor.mailarmor.name=mail armor
items.armor.mailarmor.desc=Interlocking metal links make for a tough but flexible suit of armor.
@ -117,14 +117,14 @@ items.armor.mailarmor.desc=Interlocking metal links make for a tough but flexibl
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.roguearmor.name=rogue garb
items.armor.roguearmor.desc=... . When wearing this dark garb, the Rogue can perform a special ability:
items.armor.roguearmor.name=hero's garb
items.armor.roguearmor.desc=When wearing this dark garb, the Rogue can perform a special ability:
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.warriorarmor.name=warrior suit of armor
items.armor.warriorarmor.desc=... . While this armor looks heavy, it allows the Warrior to perform a special ability:
items.armor.warriorarmor.name=hero's armor
items.armor.warriorarmor.desc=While this armor looks heavy, it allows the Warrior to perform a special ability:
@ -1678,6 +1678,7 @@ 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.ratgraded=Rat King's hands glow brightly 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 511 B

After

Width:  |  Height:  |  Size: 659 B

View File

@ -27,18 +27,18 @@ import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.QuickSlot;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.Huntress2;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.Huntress3;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.NaturesStrength;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.SpiritHawk;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.SpectralBlades;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.Mage2;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.Mage3;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.WildMagic;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.MagicalChains;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.mage.ElementalBlast;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.rogue.Rogue2;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.rogue.Rogue3;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.rogue.DeathMark;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.rogue.ShadowClone;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.rogue.SmokeBomb;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.warrior.HeroicLeap;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.warrior.Shockwave;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.warrior.Warrior3;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.warrior.Endure;
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
@ -211,13 +211,13 @@ public enum HeroClass {
public ArmorAbility[] armorAbilities(){
switch (this) {
case WARRIOR: default:
return new ArmorAbility[]{new HeroicLeap(), new Shockwave(), new Warrior3()};
return new ArmorAbility[]{new HeroicLeap(), new Shockwave(), new Endure()};
case MAGE:
return new ArmorAbility[]{new ElementalBlast(), new Mage2(), new Mage3()};
return new ArmorAbility[]{new ElementalBlast(), new WildMagic(), new MagicalChains()};
case ROGUE:
return new ArmorAbility[]{new SmokeBomb(), new Rogue2(), new Rogue3()};
return new ArmorAbility[]{new SmokeBomb(), new DeathMark(), new ShadowClone()};
case HUNTRESS:
return new ArmorAbility[]{new SpectralBlades(), new Huntress2(), new Huntress3()};
return new ArmorAbility[]{new SpectralBlades(), new NaturesStrength(), new SpiritHawk()};
}
}

View File

@ -0,0 +1,18 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Ratmogrify extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {
//TODO
}
@Override
public Talent[] talents() {
return new Talent[]{ Talent.RK_1, Talent.RK_2, Talent.RK_3, Talent.HEROIC_ENERGY};
}
}

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Huntress2 extends ArmorAbility {
public class NaturesStrength extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Huntress3 extends ArmorAbility {
public class SpiritHawk extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Mage3 extends ArmorAbility {
public class MagicalChains extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Mage2 extends ArmorAbility {
public class WildMagic extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Rogue2 extends ArmorAbility {
public class DeathMark extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Rogue3 extends ArmorAbility {
public class ShadowClone extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -26,7 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
public class Warrior3 extends ArmorAbility {
public class Endure extends ArmorAbility {
@Override
protected void activate(ClassArmor armor, Hero hero, Integer target) {

View File

@ -21,7 +21,9 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite;
import com.watabou.utils.Random;
@ -35,7 +37,15 @@ public class Rat extends Mob {
maxLvl = 5;
}
@Override
protected boolean act() {
if (Dungeon.hero.armorAbility instanceof Ratmogrify){
alignment = Alignment.NEUTRAL;
}
return super.act();
}
@Override
public int damageRoll() {
return Random.NormalIntRange( 1, 4 );

View File

@ -24,8 +24,14 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatKingSprite;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
import com.watabou.noosa.Game;
import com.watabou.utils.Callback;
public class RatKing extends NPC {
@ -103,10 +109,41 @@ public class RatKing extends NPC {
return super.interact(c);
}
KingsCrown crown = Dungeon.hero.belongings.getItem(KingsCrown.class);
if (state == SLEEPING) {
notice();
yell( Messages.get(this, "not_sleeping") );
state = WANDERING;
} else if (crown != null){
if (Dungeon.hero.belongings.armor == null){
yell( Messages.get(RatKing.class, "crown_clothes") );
} else {
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
GameScene.show(new WndOptions(
sprite(),
Messages.titleCase(name()),
Messages.get(RatKing.class, "crown_desc"),
Messages.get(RatKing.class, "crown_yes"),
Messages.get(RatKing.class, "crown_no")
){
@Override
protected void onSelect(int index) {
if (index == 0){
crown.upgradeArmor(Dungeon.hero, Dungeon.hero.belongings.armor, new Ratmogrify());
((RatKingSprite)sprite).resetAnims();
yell(Messages.get(RatKing.class, "crown_thankyou"));
} else {
yell(Messages.get(RatKing.class, "crown_fine"));
}
}
});
}
});
}
} else if (Dungeon.hero.armorAbility instanceof Ratmogrify) {
yell( Messages.get(RatKing.class, "crown_after") );
} else {
yell( Messages.get(this, "what_is_it") );
}

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
@ -94,27 +95,31 @@ public class KingsCrown extends Item {
if (armor != null){
GLog.p(Messages.get(this, "upgraded"));
if (ability instanceof Ratmogrify){
GLog.p(Messages.get(this, "ratgraded"));
} else {
GLog.p(Messages.get(this, "upgraded"));
}
ClassArmor classArmor = ClassArmor.upgrade(hero, armor);
if (hero.belongings.armor == armor) {
curUser.belongings.armor = classArmor;
((HeroSprite) curUser.sprite).updateArmor();
classArmor.activate(curUser);
hero.belongings.armor = classArmor;
((HeroSprite) hero.sprite).updateArmor();
classArmor.activate(hero);
} else {
armor.detach(curUser.belongings.backpack);
classArmor.collect(curUser.belongings.backpack);
armor.detach(hero.belongings.backpack);
classArmor.collect(hero.belongings.backpack);
}
}
hero.armorAbility = ability;
Talent.initArmorTalents(hero);
curUser.sprite.operate( curUser.pos );
hero.sprite.operate( hero.pos );
Sample.INSTANCE.play( Assets.Sounds.MASTERY );
}

View File

@ -178,12 +178,11 @@ abstract public class ClassArmor extends Armor {
@Override
public String desc() {
//TODO descriptions for each class armor
String desc = super.desc();
ArmorAbility ability = Dungeon.hero.armorAbility;
if (ability != null){
desc += "\n\n" + "_" + Messages.titleCase(ability.name()) + ":_ " + ability.desc();
desc += "\n\n" + ability.shortDesc();
} else {
desc += "\n\n" + "_" + Messages.get(this, "no_ability") + "_";
}

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLivingEarth;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding;
@ -75,7 +76,9 @@ public class SurfaceScene extends PixelScene {
private static final int NSTARS = 100;
private static final int NCLOUDS = 5;
private Pet[] rats;
private Camera viewport;
@Override
public void create() {
@ -142,7 +145,20 @@ public class SurfaceScene extends PixelScene {
a.x = (SKY_WIDTH - a.width) / 2;
a.y = SKY_HEIGHT - a.height;
align(a);
if (Dungeon.hero.armorAbility instanceof Ratmogrify) {
rats = new Pet[30];
for (int i = 0; i < rats.length; i++){
Pet pet = new Pet();
pet.rm = pet.gm = pet.bm = 1.2f;
pet.x = Random.Int(SKY_WIDTH)-10;
pet.y = SKY_HEIGHT - pet.height;
window.add(pet);
rats[i] = pet;
if (dayTime) pet.brightness( 1.2f );
}
}
final Pet pet = new Pet();
pet.rm = pet.gm = pet.bm = 1.2f;
pet.x = SKY_WIDTH / 2 + 2;
@ -239,7 +255,20 @@ public class SurfaceScene extends PixelScene {
fadeIn();
}
private float ratJumpTimer = 0.02f;
@Override
public void update() {
ratJumpTimer -= Game.elapsed;
while (ratJumpTimer <= 0f){
ratJumpTimer += 0.02f;
Random.element(rats).jump();
}
super.update();
}
@Override
public void destroy() {
Badges.saveGlobal();

View File

@ -25,9 +25,11 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.watabou.gltextures.SmartTexture;
import com.watabou.gltextures.TextureCache;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.TextureFilm;
import com.watabou.utils.Callback;
@ -96,7 +98,7 @@ public class HeroSprite extends CharSprite {
@Override
public void place( int p ) {
super.place( p );
Camera.main.panTo(center(), 5f);
if (Game.scene() instanceof GameScene) Camera.main.panTo(center(), 5f);
}
@Override

View File

@ -22,6 +22,9 @@
package com.shatteredpixel.shatteredpixeldungeon.sprites;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify;
import com.watabou.noosa.TextureFilm;
import java.util.Calendar;
@ -33,29 +36,49 @@ public class RatKingSprite extends MobSprite {
public RatKingSprite() {
super();
resetAnims();
}
public void resetAnims(){
final Calendar calendar = Calendar.getInstance();
//once a year the rat king feels a bit festive!
festive = (calendar.get(Calendar.MONTH) == Calendar.DECEMBER
&& calendar.get(Calendar.WEEK_OF_MONTH) > 2);
final int c = festive ? 8 : 0;
int c = festive ? 8 : 0;
if (Dungeon.hero != null && Dungeon.hero.armorAbility instanceof Ratmogrify){
c += 16;
if (parent != null) aura(0xFFFF00);
}
texture( Assets.Sprites.RATKING );
TextureFilm frames = new TextureFilm( texture, 16, 17 );
idle = new Animation( 2, true );
idle.frames( frames, c+0, c+0, c+0, c+1 );
run = new Animation( 10, true );
run.frames( frames, c+2, c+3, c+4, c+5, c+6 );
attack = new Animation( 15, false );
attack.frames( frames, c+0 );
die = new Animation( 10, false );
die.frames( frames, c+0 );
play( idle );
}
@Override
public void link(Char ch) {
super.link(ch);
if (Dungeon.hero != null && Dungeon.hero.armorAbility instanceof Ratmogrify){
aura(0xFFFF00);
}
}
}

View File

@ -65,7 +65,7 @@ public class WndChooseAbility extends Window {
float pos = body.bottom() + 3*GAP;
for (ArmorAbility ability : hero.heroClass.armorAbilities()) {
RedButton abilityButton = new RedButton("_" + Messages.titleCase(ability.name()) + ":_ " + ability.shortDesc(), 6){
RedButton abilityButton = new RedButton(ability.shortDesc(), 6){
@Override
protected void onClick() {
GameScene.show(new WndOptions(new Image(hero.heroClass.spritesheet(), 0, 90, 12, 15),