From 9924f5d28d5264a40adc2e874ef5726a1d5d73d4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 17 Jul 2017 15:07:18 -0400 Subject: [PATCH] v0.6.1: improvements to badges and badges scene: - badges scene now shows as many blanks as missing badges - badges scene is a bit more condensed on phone screens - YASD badge now covers death by falling/glyph - games played badges reduced from 10/100/500/200 to 10/50/250/1000 - A couple of badges no longer override others --- .../shatteredpixeldungeon/Badges.java | 20 +++++--- .../scenes/BadgesScene.java | 49 +++++++++++-------- .../messages/misc/misc.properties | 8 +-- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index cd92e0be5..2e8046be0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -523,19 +523,25 @@ public class Badges { Badge badge = Badge.DEATH_FROM_GLYPH; local.add( badge ); displayBadge( badge ); + + validateYASD(); } public static void validateDeathFromFalling() { Badge badge = Badge.DEATH_FROM_FALLING; local.add( badge ); displayBadge( badge ); + + validateYASD(); } private static void validateYASD() { if (global.contains( Badge.DEATH_FROM_FIRE ) && global.contains( Badge.DEATH_FROM_POISON ) && global.contains( Badge.DEATH_FROM_GAS ) && - global.contains( Badge.DEATH_FROM_HUNGER)) { + global.contains( Badge.DEATH_FROM_HUNGER) && + global.contains( Badge.DEATH_FROM_GLYPH) && + global.contains( Badge.DEATH_FROM_FALLING)) { Badge badge = Badge.YASD; local.add( badge ); @@ -793,13 +799,13 @@ public class Badges { if (Rankings.INSTANCE.totalNumber >= 10) { badge = Badge.GAMES_PLAYED_1; } - if (Rankings.INSTANCE.totalNumber >= 100) { + if (Rankings.INSTANCE.totalNumber >= 50) { badge = Badge.GAMES_PLAYED_2; } - if (Rankings.INSTANCE.totalNumber >= 500) { + if (Rankings.INSTANCE.totalNumber >= 250) { badge = Badge.GAMES_PLAYED_3; } - if (Rankings.INSTANCE.totalNumber >= 2000) { + if (Rankings.INSTANCE.totalNumber >= 1000) { badge = Badge.GAMES_PLAYED_4; } @@ -870,11 +876,12 @@ public class Badges { leaveBest( filtered, Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4 ); leaveBest( filtered, Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4 ); leaveBest( filtered, Badge.POTIONS_COOKED_1, Badge.POTIONS_COOKED_2, Badge.POTIONS_COOKED_3, Badge.POTIONS_COOKED_4 ); - leaveBest( filtered, Badge.BOSS_SLAIN_1_ALL_CLASSES, Badge.BOSS_SLAIN_3_ALL_SUBCLASSES ); leaveBest( filtered, Badge.DEATH_FROM_FIRE, Badge.YASD ); leaveBest( filtered, Badge.DEATH_FROM_GAS, Badge.YASD ); leaveBest( filtered, Badge.DEATH_FROM_HUNGER, Badge.YASD ); leaveBest( filtered, Badge.DEATH_FROM_POISON, Badge.YASD ); + leaveBest( filtered, Badge.DEATH_FROM_GLYPH, Badge.YASD ); + leaveBest( filtered, Badge.DEATH_FROM_FALLING, Badge.YASD ); leaveBest( filtered, Badge.ALL_WEAPONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); leaveBest( filtered, Badge.ALL_ARMOR_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); leaveBest( filtered, Badge.ALL_WANDS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); @@ -882,9 +889,6 @@ public class Badges { leaveBest( filtered, Badge.ALL_ARTIFACTS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); leaveBest( filtered, Badge.ALL_POTIONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); leaveBest( filtered, Badge.ALL_SCROLLS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); - leaveBest( filtered, Badge.VICTORY, Badge.VICTORY_ALL_CLASSES ); - leaveBest( filtered, Badge.VICTORY, Badge.HAPPY_END ); - leaveBest( filtered, Badge.VICTORY, Badge.CHAMPION ); leaveBest( filtered, Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4 ); ArrayList list = new ArrayList( filtered ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/BadgesScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/BadgesScene.java index 873d6b203..2163d741b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/BadgesScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/BadgesScene.java @@ -61,16 +61,8 @@ public class BadgesScene extends PixelScene { archs.setSize( w, h ); add( archs ); - float pw = Math.min( w, (ShatteredPixelDungeon.landscape() ? MIN_WIDTH_L : MIN_WIDTH_P) * 3 ) - 16; - float ph = Math.min( h, (ShatteredPixelDungeon.landscape() ? MIN_HEIGHT_L : MIN_HEIGHT_P) * 3 ) - 32; - - float size = (float)Math.sqrt( pw * ph / 27f ); - int nCols = (int)Math.ceil( pw / size ); - int nRows = (int)Math.ceil( ph / size ); - size = Math.min( pw / nCols, ph / nRows ); - - float left = (w - size * nCols) / 2; - float top = (h - size * nRows) / 2; + float left = 5; + float top = 15; RenderedText title = PixelScene.renderText( Messages.get(this, "title"), 9 ); title.hardlight(Window.TITLE_COLOR); @@ -82,17 +74,32 @@ public class BadgesScene extends PixelScene { Badges.loadGlobal(); List badges = Badges.filtered( true ); - for (int i=0; i < nRows; i++) { - for (int j=0; j < nCols; j++) { - int index = i * nCols + j; - Badges.Badge b = index < badges.size() ? badges.get( index ) : null; - BadgeButton button = new BadgeButton( b ); - button.setPos( - left + j * size + (size - button.width()) / 2, - top + i * size + (size - button.height()) / 2); - align(button); - add( button ); - } + + int blankBadges = 34; + blankBadges -= badges.size(); + if (badges.contains(Badges.Badge.ALL_ITEMS_IDENTIFIED)) blankBadges -= 6; + if (badges.contains(Badges.Badge.YASD)) blankBadges -= 5; + blankBadges = Math.max(0, blankBadges); + + //guarantees a max of 5 rows in landscape, and 8 in portrait, assuming a max of 40 buttons + int nCols = ShatteredPixelDungeon.landscape() ? 7 : 4; + if (badges.size() + blankBadges > 32 && !ShatteredPixelDungeon.landscape()) nCols++; + + int nRows = 1 + (blankBadges + badges.size())/nCols; + + float badgeWidth = (w - 2*left)/nCols; + float badgeHeight = (h - 2*top)/nRows; + + for (int i = 0; i < badges.size() + blankBadges; i++){ + int row = i / nCols; + int col = i % nCols; + Badges.Badge b = i < badges.size() ? badges.get( i ) : null; + BadgeButton button = new BadgeButton( b ); + button.setPos( + left + col * badgeWidth + (badgeWidth - button.width()) / 2, + top + row * badgeHeight + (badgeHeight - button.height()) / 2); + align(button); + add( button ); } ExitButton btnExit = new ExitButton(); diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/misc/misc.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/misc/misc.properties index 25bdaf4ae..08d7ff532 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/misc/misc.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/misc/misc.properties @@ -28,7 +28,7 @@ badges$badge.death_from_gas=Death from toxic gas badges$badge.death_from_hunger=Death from hunger badges$badge.death_from_glyph=Death from a glyph badges$badge.death_from_falling=Death from falling down -badges$badge.yasd=Death from fire, poison, toxic gas & hunger +badges$badge.yasd=Death from fire, poison, toxic gas, hunger, glyph, and falling badges$badge.boss_slain_1=1st boss slain badges$badge.boss_slain_2=2nd boss slain badges$badge.boss_slain_3=3rd boss slain @@ -59,9 +59,9 @@ badges$badge.no_monsters_slain=Level completed without killing any monsters badges$badge.grim_weapon=Monster killed by a Grim weapon badges$badge.piranhas=6 piranhas killed badges$badge.games_played_1=10 games played -badges$badge.games_played_2=100 games played -badges$badge.games_played_3=500 games played -badges$badge.games_played_4=2000 games played +badges$badge.games_played_2=50 games played +badges$badge.games_played_3=250 games played +badges$badge.games_played_4=1000 games played badges$badge.happy_end=Happy end badges$badge.champion=Challenge won