v0.9.4: added proper icons for abilities and subclasses

This commit is contained in:
Evan Debenham 2021-08-12 14:15:39 -04:00
parent bfe6d51820
commit 222031cb97
22 changed files with 170 additions and 48 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -94,6 +94,8 @@ public class Assets {
public static final String TALENT_ICONS = "interfaces/talent_icons.png";
public static final String TALENT_BUTTON = "interfaces/talent_button.png";
public static final String HERO_ICONS = "interfaces/hero_icons.png";
}
//these points to resource bundles, not raw asset files

View File

@ -21,33 +21,34 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.hero;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Fury;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
public enum HeroSubClass {
NONE,
NONE(HeroIcon.NONE),
BERSERKER(HeroIcon.BERSERKER),
GLADIATOR(HeroIcon.GLADIATOR),
BATTLEMAGE(HeroIcon.BATTLEMAGE),
WARLOCK(HeroIcon.WARLOCK),
GLADIATOR,
BERSERKER,
ASSASSIN(HeroIcon.ASSASSIN),
FREERUNNER(HeroIcon.FREERUNNER),
WARLOCK,
BATTLEMAGE,
ASSASSIN,
FREERUNNER,
SNIPER,
WARDEN;
SNIPER(HeroIcon.SNIPER),
WARDEN(HeroIcon.WARDEN);
int icon;
HeroSubClass(int icon){
this.icon = icon;
}
public String title() {
return Messages.get(this, name());
@ -74,34 +75,8 @@ public enum HeroSubClass {
}
}
public Image icon(){
switch (this){
case GLADIATOR: default:
return new BuffIcon(BuffIndicator.COMBO, true);
case BERSERKER:
return new BuffIcon(BuffIndicator.FURY, true);
case WARLOCK:
return new BuffIcon(BuffIndicator.CORRUPT, true);
case BATTLEMAGE:
Image im = new BuffIcon(BuffIndicator.UPGRADE, true);
im.hardlight(1f, 1f, 0f);
return im;
case ASSASSIN:
im = new BuffIcon(BuffIndicator.PREPARATION, true);
im.hardlight(1f, 0f, 0f);
return im;
case FREERUNNER:
im = new BuffIcon(BuffIndicator.MOMENTUM, true);
im.hardlight(1f, 1f, 0f);
return im;
case SNIPER:
return new BuffIcon(BuffIndicator.MARK, true);
case WARDEN:
return new BuffIcon(BuffIndicator.BARKSKIN, true);
}
public int icon(){
return icon;
}
}

View File

@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.utils.Bundlable;
import com.watabou.utils.Bundle;
@ -84,6 +85,10 @@ public abstract class ArmorAbility implements Bundlable {
return Messages.get(this, "desc") + "\n\n" + Messages.get(this, "cost", (int)baseChargeUse);
}
public int icon(){
return HeroIcon.NONE;
}
public abstract Talent[] talents();
@Override

View File

@ -19,6 +19,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportat
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
@ -124,6 +125,11 @@ public class Ratmogrify extends ArmorAbility {
}
@Override
public int icon() {
return HeroIcon.RATMOGRIFY;
}
@Override
public Talent[] talents() {
return new Talent[]{ Talent.RATSISTANCE, Talent.RATLOMACY, Talent.RATFORCEMENTS, Talent.HEROIC_ENERGY};

View File

@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.particles.LeafParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.audio.Sample;
public class NaturesPower extends ArmorAbility {
@ -57,6 +58,11 @@ public class NaturesPower extends ArmorAbility {
}
@Override
public int icon() {
return HeroIcon.NATURES_POWER;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.GROWING_POWER, Talent.NATURES_WRATH, Talent.WILD_MOMENTUM, Talent.HEROIC_ENERGY};

View File

@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.ConeAOE;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MissileSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Callback;
@ -154,6 +155,11 @@ public class SpectralBlades extends ArmorAbility {
return null;
}
@Override
public int icon() {
return HeroIcon.SPECTRAL_BLADES;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.FAN_OF_BLADES, Talent.PROJECTING_BLADES, Talent.SPIRIT_BLADES, Talent.HEROIC_ENERGY};

View File

@ -46,6 +46,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BatSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.TextureFilm;
import com.watabou.utils.Bundle;
@ -124,6 +125,11 @@ public class SpiritHawk extends ArmorAbility {
}
@Override
public int icon() {
return HeroIcon.SPIRIT_HAWK;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.EAGLE_EYE, Talent.GO_FOR_THE_EYES, Talent.SWIFT_SPIRIT, Talent.HEROIC_ENERGY};

View File

@ -74,6 +74,7 @@ import com.shatteredpixel.shatteredpixeldungeon.mechanics.ConeAOE;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.Game;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Callback;
@ -426,6 +427,11 @@ public class ElementalBlast extends ArmorAbility {
return desc;
}
@Override
public int icon() {
return HeroIcon.ELEMENTAL_BLAST;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.BLAST_RADIUS, Talent.ELEMENTAL_POWER, Talent.REACTIVE_BARRIER, Talent.HEROIC_ENERGY};

View File

@ -41,6 +41,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
@ -248,6 +249,11 @@ public class WarpBeacon extends ArmorAbility {
}
}
@Override
public int icon() {
return HeroIcon.WARP_BEACON;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.TELEFRAG, Talent.REMOTE_BEACON, Talent.LONGRANGE_WARP, Talent.HEROIC_ENERGY};

View File

@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.CursedWand;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;
@ -169,6 +170,11 @@ public class WildMagic extends ArmorAbility {
}
}
@Override
public int icon() {
return HeroIcon.WILD_MAGIC;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.WILD_POWER, Talent.FIRE_EVERYTHING, Talent.CONSERVED_MAGIC, Talent.HEROIC_ENERGY};

View File

@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbili
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.audio.Sample;
@ -127,6 +128,11 @@ public class DeathMark extends ArmorAbility {
public static class DoubleMarkTracker extends FlavourBuff{};
@Override
public int icon() {
return HeroIcon.DEATH_MARK;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.FEAR_THE_REAPER, Talent.DEATHLY_DURABILITY, Talent.DOUBLE_MARK, Talent.HEROIC_ENERGY};

View File

@ -42,6 +42,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.TextureFilm;
@ -123,6 +124,11 @@ public class ShadowClone extends ArmorAbility {
}
@Override
public int icon() {
return HeroIcon.SHADOW_CLONE;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.SHADOW_BLADE, Talent.CLONED_ARMOR, Talent.PERFECT_COPY, Talent.HEROIC_ENERGY};

View File

@ -42,6 +42,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportat
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.TextureFilm;
@ -128,6 +129,11 @@ public class SmokeBomb extends ArmorAbility {
}
}
@Override
public int icon() {
return HeroIcon.SMOKE_BOMB;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.HASTY_RETREAT, Talent.BODY_REPLACEMENT, Talent.SHADOW_STEP, Talent.HEROIC_ENERGY};

View File

@ -37,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Bundle;
@ -181,6 +182,11 @@ public class Endure extends ArmorAbility {
}
};
@Override
public int icon() {
return HeroIcon.ENDURE;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.SUSTAINED_RETRIBUTION, Talent.SHRUG_IT_OFF, Talent.EVEN_THE_ODDS, Talent.HEROIC_ENERGY};

View File

@ -37,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfBlastWave;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.Camera;
import com.watabou.utils.Callback;
import com.watabou.utils.PathFinder;
@ -129,6 +130,11 @@ public class HeroicLeap extends ArmorAbility {
public static class DoubleJumpTracker extends FlavourBuff{};
@Override
public int icon() {
return HeroIcon.HEROIC_LEAP;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.BODY_SLAM, Talent.IMPACT_WAVE, Talent.DOUBLE_JUMP, Talent.HEROIC_ENERGY};

View File

@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
import com.shatteredpixel.shatteredpixeldungeon.mechanics.ConeAOE;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Camera;
import com.watabou.noosa.audio.Sample;
@ -142,6 +143,11 @@ public class Shockwave extends ArmorAbility {
});
}
@Override
public int icon() {
return HeroIcon.SHOCKWAVE;
}
@Override
public Talent[] talents() {
return new Talent[]{Talent.EXPANDING_WAVE, Talent.STRIKING_WAVE, Talent.SHOCK_FORCE, Talent.HEROIC_ENERGY};

View File

@ -0,0 +1,59 @@
package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.watabou.noosa.Image;
import com.watabou.noosa.TextureFilm;
//icons for hero subclasses and abilities atm, maybe add classes?
public class HeroIcon extends Image {
private static TextureFilm film;
private static final int SIZE = 16;
//transparent icon
public static final int NONE = 31;
//subclasses
public static final int BERSERKER = 0;
public static final int GLADIATOR = 1;
public static final int BATTLEMAGE = 2;
public static final int WARLOCK = 3;
public static final int ASSASSIN = 4;
public static final int FREERUNNER = 5;
public static final int SNIPER = 6;
public static final int WARDEN = 7;
//abilities
public static final int HEROIC_LEAP = 8;
public static final int SHOCKWAVE = 9;
public static final int ENDURE = 10;
public static final int ELEMENTAL_BLAST = 11;
public static final int WILD_MAGIC = 12;
public static final int WARP_BEACON = 13;
public static final int SMOKE_BOMB = 14;
public static final int DEATH_MARK = 15;
public static final int SHADOW_CLONE = 16;
public static final int SPECTRAL_BLADES = 17;
public static final int NATURES_POWER = 18;
public static final int SPIRIT_HAWK = 19;
public static final int RATMOGRIFY = 20;
public HeroIcon(HeroSubClass subCls){
super( Assets.Interfaces.HERO_ICONS );
if (film == null){
film = new TextureFilm(texture, SIZE, SIZE);
}
frame(film.get(subCls.icon()));
}
public HeroIcon(ArmorAbility abil){
super( Assets.Interfaces.HERO_ICONS );
if (film == null){
film = new TextureFilm(texture, SIZE, SIZE);
}
frame(film.get(abil.icon()));
}
}

View File

@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.IconButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
@ -61,7 +62,7 @@ public class WndChooseSubclass extends Window {
RedButton btnCls = new RedButton( subCls.shortDesc(), 6 ) {
@Override
protected void onClick() {
GameScene.show(new WndOptions(subCls.icon(),
GameScene.show(new WndOptions(new HeroIcon(subCls),
Messages.titleCase(subCls.title()),
Messages.get(WndChooseSubclass.this, "are_you_sure"),
Messages.get(WndChooseSubclass.this, "yes"),

View File

@ -6,6 +6,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbili
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.TalentsPane;
import com.watabou.noosa.Image;
@ -15,7 +16,7 @@ import java.util.LinkedHashMap;
public class WndInfoArmorAbility extends WndTitledMessage {
public WndInfoArmorAbility(HeroClass cls, ArmorAbility ability){
super( new ItemSprite( ItemSpriteSheet.CROWN, null ), Messages.titleCase(ability.name()), ability.desc());
super( new HeroIcon(ability), Messages.titleCase(ability.name()), ability.desc());
ArrayList<LinkedHashMap<Talent, Integer>> talentList = new ArrayList<>();
Talent.initArmorTalents(ability, talentList);

View File

@ -4,6 +4,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.shatteredpixel.shatteredpixeldungeon.ui.TalentsPane;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHeroInfo;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTitledMessage;
@ -14,7 +15,7 @@ import java.util.LinkedHashMap;
public class WndInfoSubclass extends WndTitledMessage {
public WndInfoSubclass(HeroClass cls, HeroSubClass subCls){
super( subCls.icon(), Messages.titleCase(subCls.title()), subCls.desc());
super( new HeroIcon(subCls), Messages.titleCase(subCls.title()), subCls.desc());
ArrayList<LinkedHashMap<Talent, Integer>> talentList = new ArrayList<>();
Talent.initClassTalents(cls, talentList);