v0.9.0: overhauled visuals for badges

This commit is contained in:
Evan Debenham 2020-09-29 20:34:20 -04:00
parent cebd646636
commit 7ba15b4712
5 changed files with 140 additions and 216 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -46,48 +46,82 @@ import java.util.List;
public class Badges { public class Badges {
public enum Badge { public enum Badge {
MONSTERS_SLAIN_1( 0 ), MASTERY_WARRIOR,
MONSTERS_SLAIN_2( 1 ), MASTERY_MAGE,
MONSTERS_SLAIN_3( 2 ), MASTERY_ROGUE,
MONSTERS_SLAIN_4( 3 ), MASTERY_HUNTRESS,
GOLD_COLLECTED_1( 4 ),
GOLD_COLLECTED_2( 5 ), //bronze
GOLD_COLLECTED_3( 6 ), UNLOCK_MAGE ( 1 ),
GOLD_COLLECTED_4( 7 ), UNLOCK_ROGUE ( 2 ),
LEVEL_REACHED_1( 8 ), UNLOCK_HUNTRESS ( 3 ),
LEVEL_REACHED_2( 9 ), MONSTERS_SLAIN_1 ( 4 ),
LEVEL_REACHED_3( 10 ), MONSTERS_SLAIN_2 ( 5 ),
LEVEL_REACHED_4( 11 ), GOLD_COLLECTED_1 ( 6 ),
ALL_WEAPONS_IDENTIFIED( 16 ), GOLD_COLLECTED_2 ( 7 ),
ALL_ARMOR_IDENTIFIED( 17 ), ITEM_LEVEL_1 ( 8 ),
ALL_WANDS_IDENTIFIED( 18 ), LEVEL_REACHED_1 ( 9 ),
ALL_RINGS_IDENTIFIED( 19 ), STRENGTH_ATTAINED_1 ( 10 ),
ALL_ARTIFACTS_IDENTIFIED( 20 ), FOOD_EATEN_1 ( 11 ),
ALL_POTIONS_IDENTIFIED( 21 ), POTIONS_COOKED_1 ( 12 ),
ALL_SCROLLS_IDENTIFIED( 22 ), BOSS_SLAIN_1 ( 13 ),
ALL_ITEMS_IDENTIFIED( 23, true ), DEATH_FROM_FIRE ( 14 ),
DEATH_FROM_POISON ( 15 ),
DEATH_FROM_GAS ( 16 ),
DEATH_FROM_HUNGER ( 17 ),
DEATH_FROM_FALLING ( 18 ),
//silver
NO_MONSTERS_SLAIN ( 32 ),
GRIM_WEAPON ( 33 ),
MONSTERS_SLAIN_3 ( 34 ),
MONSTERS_SLAIN_4 ( 35 ),
GOLD_COLLECTED_3 ( 36 ),
GOLD_COLLECTED_4 ( 37 ),
ITEM_LEVEL_2 ( 38 ),
ITEM_LEVEL_3 ( 39 ),
LEVEL_REACHED_2 ( 40 ),
LEVEL_REACHED_3 ( 41 ),
STRENGTH_ATTAINED_2 ( 42 ),
STRENGTH_ATTAINED_3 ( 43 ),
FOOD_EATEN_2 ( 44 ),
FOOD_EATEN_3 ( 45 ),
POTIONS_COOKED_2 ( 46 ),
POTIONS_COOKED_3 ( 47 ),
BOSS_SLAIN_2 ( 48 ),
BOSS_SLAIN_3 ( 49 ),
ALL_POTIONS_IDENTIFIED ( 50 ),
ALL_SCROLLS_IDENTIFIED ( 51 ),
DEATH_FROM_GLYPH ( 52 ),
BOSS_SLAIN_1_WARRIOR,
BOSS_SLAIN_1_MAGE,
BOSS_SLAIN_1_ROGUE,
BOSS_SLAIN_1_HUNTRESS,
BOSS_SLAIN_1_ALL_CLASSES ( 53, true ),
GAMES_PLAYED_1 ( 54, true ),
//gold
PIRANHAS ( 64 ),
//these names are a bit outdated, but it doesn't really matter. //these names are a bit outdated, but it doesn't really matter.
BAG_BOUGHT_SEED_POUCH, BAG_BOUGHT_SEED_POUCH,
BAG_BOUGHT_SCROLL_HOLDER, BAG_BOUGHT_SCROLL_HOLDER,
BAG_BOUGHT_POTION_BANDOLIER, BAG_BOUGHT_POTION_BANDOLIER,
BAG_BOUGHT_WAND_HOLSTER, BAG_BOUGHT_WAND_HOLSTER,
ALL_BAGS_BOUGHT( 24 ), ALL_BAGS_BOUGHT ( 65 ),
DEATH_FROM_FIRE( 25 ), MASTERY_COMBO ( 66 ),
DEATH_FROM_POISON( 26 ), ITEM_LEVEL_4 ( 67 ),
DEATH_FROM_GAS( 27 ), LEVEL_REACHED_4 ( 68 ),
DEATH_FROM_HUNGER( 28 ), STRENGTH_ATTAINED_4 ( 69 ),
DEATH_FROM_GLYPH( 29 ), FOOD_EATEN_4 ( 70 ),
DEATH_FROM_FALLING( 30 ), POTIONS_COOKED_4 ( 71 ),
YASD( 31, true ), BOSS_SLAIN_4 ( 72 ),
BOSS_SLAIN_1_WARRIOR, ALL_WEAPONS_IDENTIFIED ( 73 ),
BOSS_SLAIN_1_MAGE, ALL_ARMOR_IDENTIFIED ( 74 ),
BOSS_SLAIN_1_ROGUE, ALL_WANDS_IDENTIFIED ( 75 ),
BOSS_SLAIN_1_HUNTRESS, ALL_RINGS_IDENTIFIED ( 76 ),
BOSS_SLAIN_1( 12 ), ALL_ARTIFACTS_IDENTIFIED ( 77 ),
BOSS_SLAIN_2( 13 ), VICTORY ( 78 ),
BOSS_SLAIN_3( 14 ), YASD ( 79, true ),
BOSS_SLAIN_4( 15 ),
BOSS_SLAIN_1_ALL_CLASSES( 32, true ),
BOSS_SLAIN_3_GLADIATOR, BOSS_SLAIN_3_GLADIATOR,
BOSS_SLAIN_3_BERSERKER, BOSS_SLAIN_3_BERSERKER,
BOSS_SLAIN_3_WARLOCK, BOSS_SLAIN_3_WARLOCK,
@ -96,48 +130,24 @@ public class Badges {
BOSS_SLAIN_3_ASSASSIN, BOSS_SLAIN_3_ASSASSIN,
BOSS_SLAIN_3_SNIPER, BOSS_SLAIN_3_SNIPER,
BOSS_SLAIN_3_WARDEN, BOSS_SLAIN_3_WARDEN,
BOSS_SLAIN_3_ALL_SUBCLASSES( 33, true ), BOSS_SLAIN_3_ALL_SUBCLASSES ( 80, true ),
GAMES_PLAYED_2 ( 81, true ),
//platinum
HAPPY_END ( 96 ),
ALL_ITEMS_IDENTIFIED ( 97, true ),
VICTORY_WARRIOR, VICTORY_WARRIOR,
VICTORY_MAGE, VICTORY_MAGE,
VICTORY_ROGUE, VICTORY_ROGUE,
VICTORY_HUNTRESS, VICTORY_HUNTRESS,
VICTORY( 34 ), VICTORY_ALL_CLASSES ( 98, true ),
VICTORY_ALL_CLASSES( 35, true ), GAMES_PLAYED_3 ( 99, true ),
HAPPY_END( 36 ), CHAMPION_1 ( 100, true ),
CHAMPION_1( 37, true ),
CHAMPION_2( 38, true ), //diamond
CHAMPION_3( 39, true ), GAMES_PLAYED_4 ( 112, true ),
STRENGTH_ATTAINED_1( 40 ), CHAMPION_2 ( 113, true ),
STRENGTH_ATTAINED_2( 41 ), CHAMPION_3 ( 114, true );
STRENGTH_ATTAINED_3( 42 ),
STRENGTH_ATTAINED_4( 43 ),
FOOD_EATEN_1( 44 ),
FOOD_EATEN_2( 45 ),
FOOD_EATEN_3( 46 ),
FOOD_EATEN_4( 47 ),
MASTERY_WARRIOR,
MASTERY_MAGE,
MASTERY_ROGUE,
MASTERY_HUNTRESS,
UNLOCK_MAGE( 65 ),
UNLOCK_ROGUE( 66 ),
UNLOCK_HUNTRESS( 67 ),
ITEM_LEVEL_1( 48 ),
ITEM_LEVEL_2( 49 ),
ITEM_LEVEL_3( 50 ),
ITEM_LEVEL_4( 51 ),
POTIONS_COOKED_1( 52 ),
POTIONS_COOKED_2( 53 ),
POTIONS_COOKED_3( 54 ),
POTIONS_COOKED_4( 55 ),
MASTERY_COMBO( 56 ),
NO_MONSTERS_SLAIN( 57 ),
GRIM_WEAPON( 58 ),
PIRANHAS( 59 ),
GAMES_PLAYED_1( 60, true ),
GAMES_PLAYED_2( 61, true ),
GAMES_PLAYED_3( 62, true ),
GAMES_PLAYED_4( 63, true );
public boolean meta; public boolean meta;

View File

@ -22,12 +22,17 @@
package com.shatteredpixel.shatteredpixeldungeon.effects; package com.shatteredpixel.shatteredpixeldungeon.effects;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.watabou.gltextures.SmartTexture;
import com.watabou.gltextures.TextureCache;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
import com.watabou.noosa.TextureFilm; import com.watabou.noosa.TextureFilm;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Point;
import com.watabou.utils.PointF; import com.watabou.utils.PointF;
import java.util.HashMap;
public class BadgeBanner extends Image { public class BadgeBanner extends Image {
private enum State { private enum State {
@ -119,149 +124,58 @@ public class BadgeBanner extends Image {
} }
super.kill(); super.kill();
} }
//map to cache highlight positions so we don't have to keep looking at texture pixels
private static HashMap<Integer, Point> highlightPositions = new HashMap<>();
//we also hardcode any special cases
static {
//combo master
highlightPositions.put(66, new Point(3, 7));
}
//adds a shine to an appropriate pixel on a badge
public static void highlight( Image image, int index ) { public static void highlight( Image image, int index ) {
PointF p = new PointF(); PointF p = new PointF();
switch (index) { if (highlightPositions.containsKey(index)){
case 0: p.x = highlightPositions.get(index).x * image.scale.x;
case 1: p.y = highlightPositions.get(index).y * image.scale.y;
case 2: } else {
case 3:
p.offset( 7, 3 ); SmartTexture tx = TextureCache.get(Assets.Interfaces.BADGES);
break;
case 4: int size = 16;
case 5:
case 6: int cols = tx.width / size;
case 7: int row = index / cols;
p.offset( 6, 5 ); int col = index % cols;
break;
case 8: int x = 3;
case 9: int y = 4;
case 10: int bgColor = tx.getPixel(col * size + x, row * size + y);
case 11: int curColor = 0;
p.offset( 6, 3 );
break; for (x = 3; x <= 12; x++) {
case 12: curColor = tx.getPixel(col * size + x, row * size + y);
case 13: if (curColor != bgColor) break;
case 14: }
case 15:
p.offset( 7, 4 ); if (curColor == bgColor) {
break; y++;
case 16: for (x = 3; x <= 12; x++) {
p.offset( 6, 3 ); curColor = tx.getPixel(col * size + x, row * size + y);
break; if (curColor != bgColor) break;
case 17: }
p.offset( 5, 4 ); }
break;
case 18: p.x = x * image.scale.x;
p.offset( 7, 3 ); p.y = y * image.scale.y;
break;
case 20: highlightPositions.put(index, new Point(x, y));
p.offset( 7, 3 );
break;
case 21:
p.offset( 7, 3 );
break;
case 22:
p.offset( 6, 4 );
break;
case 23:
p.offset( 4, 5 );
break;
case 24:
p.offset( 6, 4 );
break;
case 25:
p.offset( 6, 5 );
break;
case 26:
p.offset( 5, 5 );
break;
case 27:
p.offset( 6, 4 );
break;
case 28:
p.offset( 3, 5 );
break;
case 29:
p.offset( 5, 4 );
break;
case 30:
p.offset( 5, 4 );
break;
case 31:
p.offset( 5, 5 );
break;
case 32:
case 33:
p.offset( 7, 4 );
break;
case 34:
p.offset( 6, 4 );
break;
case 35:
p.offset( 6, 4 );
break;
case 36:
p.offset( 6, 5 );
break;
case 37:
p.offset( 4, 4 );
break;
case 38:
p.offset( 5, 5 );
break;
case 39:
p.offset( 5, 4 );
break;
case 40:
case 41:
case 42:
case 43:
p.offset( 5, 4 );
break;
case 44:
case 45:
case 46:
case 47:
p.offset( 5, 5 );
break;
case 48:
case 49:
case 50:
case 51:
p.offset( 7, 4 );
break;
case 52:
case 53:
case 54:
case 55:
p.offset( 4, 4 );
break;
case 56:
p.offset( 3, 7 );
break;
case 57:
p.offset( 4, 5 );
break;
case 58:
p.offset( 6, 4 );
break;
case 59:
p.offset( 7, 4 );
break;
case 60:
case 61:
case 62:
case 63:
p.offset( 4, 4 );
break;
} }
p.x *= image.scale.x;
p.y *= image.scale.y;
p.offset( p.offset(
-image.origin.x * (image.scale.x - 1), -image.origin.x * (image.scale.x - 1),
-image.origin.y * (image.scale.y - 1) ); -image.origin.y * (image.scale.y - 1) );

View File

@ -144,7 +144,7 @@ public class BadgesScene extends PixelScene {
icon = BadgeBanner.image(badge.image); icon = BadgeBanner.image(badge.image);
if (!unlocked) { if (!unlocked) {
icon.brightness(0.25f); icon.brightness(0.4f);
} }
add(icon); add(icon);

View File

@ -39,7 +39,7 @@ public class WndBadge extends Window {
Image icon = BadgeBanner.image( badge.image ); Image icon = BadgeBanner.image( badge.image );
icon.scale.set( 2 ); icon.scale.set( 2 );
if (!unlocked) icon.brightness(0.52f); if (!unlocked) icon.brightness(0.4f);
add( icon ); add( icon );
RenderedTextBlock info = PixelScene.renderTextBlock( badge.desc(), 8 ); RenderedTextBlock info = PixelScene.renderTextBlock( badge.desc(), 8 );