From 40afe2a22cb414c32c4b4c994f1906048dfffce1 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 25 Jun 2024 14:56:33 -0400 Subject: [PATCH] v2.5.0: overhauled icons asset file, creating room for more --- core/src/main/assets/interfaces/icons.png | Bin 15615 -> 15077 bytes .../scenes/HeroSelectScene.java | 4 +- .../shatteredpixeldungeon/ui/Icons.java | 333 +++++++++--------- .../ui/changelist/v0_6_X_Changes.java | 2 +- .../ui/changelist/v0_9_X_Changes.java | 8 +- .../ui/changelist/v2_X_Changes.java | 4 +- .../windows/WndGame.java | 2 +- .../windows/WndGameInProgress.java | 2 +- .../windows/WndJournal.java | 8 + .../windows/WndRanking.java | 2 +- 10 files changed, 177 insertions(+), 188 deletions(-) diff --git a/core/src/main/assets/interfaces/icons.png b/core/src/main/assets/interfaces/icons.png index 46efa6a32467e3523b0c63c58c36adfaaf935f80..8da9dc914829bdb141732390aa12f12e0cb6c2cb 100644 GIT binary patch literal 15077 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 literal 15615 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java index 705c64c08..120bf74d0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java @@ -724,14 +724,14 @@ public class HeroSelectScene extends PixelScene { ShatteredPixelDungeon.scene().addToFront(new WndChallenges(SPDSettings.challenges(), true) { public void onBackPressed() { super.onBackPressed(); - icon(Icons.get(SPDSettings.challenges() > 0 ? Icons.CHALLENGE_ON : Icons.CHALLENGE_OFF)); + icon(Icons.get(SPDSettings.challenges() > 0 ? Icons.CHALLENGE_COLOR : Icons.CHALLENGE_GREY)); updateOptionsColor(); } } ); } }; challengeButton.leftJustify = true; - challengeButton.icon(Icons.get(SPDSettings.challenges() > 0 ? Icons.CHALLENGE_ON : Icons.CHALLENGE_OFF)); + challengeButton.icon(Icons.get(SPDSettings.challenges() > 0 ? Icons.CHALLENGE_COLOR : Icons.CHALLENGE_GREY)); add(challengeButton); buttons.add(challengeButton); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index d746ebe45..bc6edd5ee 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -26,11 +26,14 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.Image; +import com.watabou.utils.RectF; public enum Icons { - //title screen icons, variable sizes, spacing for 17x16 + //slightly larger title screen icons, spacing for 17x16 ENTER, GOLD, RANKINGS, @@ -41,14 +44,6 @@ public enum Icons { SHPX, JOURNAL, - //rankings and hero select icons, spacing for 16x16 - STAIRS, - WARRIOR, - MAGE, - ROGUE, - HUNTRESS, - DUELIST, - //grey icons, mainly used for buttons, spacing for 16x16 EXIT, DISPLAY, //2 separate images, changes based on orientation @@ -60,51 +55,45 @@ public enum Icons { CONTROLLER, KEYBOARD, STATS, - CHALLENGE_OFF, - CHALLENGE_ON, - RENAME_OFF, - RENAME_ON, + CHALLENGE_GREY, + SCROLL_GREY, SEED, LEFTARROW, RIGHTARROW, CALENDAR, - //misc icons, mainly used for buttons, spacing for 16x16 until the smaller icons at the end + //misc larger icons, mainly used for buttons, tabs, and journal, spacing for 16x16 + TARGET, + INFO, + WARNING, UNCHECKED, CHECKED, CLOSE, PLUS, REPEAT, ARROW, - INFO, - WARNING, + CHALLENGE_COLOR, + SCROLL_COLOR, + COPY, + PASTE, + + STAIRS, BACKPACK_LRG, TALENT, MAGNIFY, SNAKE, BUFFS, - ENERGY, - COPY, - PASTE, CATALOG, ALCHEMY, - COIN_SML, - ENERGY_SML, - BACKPACK, - SEED_POUCH, - SCROLL_HOLDER, - WAND_HOLSTER, - POTION_BANDOLIER, - //icons that appear in the game itself, variable spacing - TARGET, + //smaller icons, variable spacing SKULL, BUSY, COMPASS, SLEEP, ALERT, LOST, - DEPTH, //depth icons have two variants, for regular and seeded runs + DEPTH, //depth icons have three variants, for regular, seeded, daily, and daily replay runs DEPTH_CHASM, DEPTH_WATER, DEPTH_GRASS, @@ -113,6 +102,13 @@ public enum Icons { DEPTH_TRAPS, DEPTH_SECRETS, CHAL_COUNT, + COIN_SML, + ENERGY_SML, + BACKPACK, + SEED_POUCH, + SCROLL_HOLDER, + WAND_HOLSTER, + POTION_BANDOLIER, //icons that appear in the about screen, variable spacing LIBGDX, @@ -160,27 +156,8 @@ public enum Icons { icon.frame( icon.texture.uvRectBySize( 136, 0, 17, 16 ) ); break; - case STAIRS: - icon.frame( icon.texture.uvRectBySize( 0, 16, 13, 16 ) ); - break; - case WARRIOR: - icon.frame( icon.texture.uvRectBySize( 16, 16, 9, 15 ) ); - break; - case MAGE: - icon.frame( icon.texture.uvRectBySize( 32, 16, 15, 14 ) ); - break; - case ROGUE: - icon.frame( icon.texture.uvRectBySize( 48, 16, 9, 15 ) ); - break; - case HUNTRESS: - icon.frame( icon.texture.uvRectBySize( 64, 16, 16, 16 ) ); - break; - case DUELIST: - icon.frame( icon.texture.uvRectBySize( 80, 16, 13, 14 ) ); - break; - case EXIT: - icon.frame( icon.texture.uvRectBySize( 0, 32, 15, 11 ) ); + icon.frame( icon.texture.uvRectBySize( 0, 16, 15, 11 ) ); break; case DISPLAY: if (!PixelScene.landscape()){ @@ -189,177 +166,178 @@ public enum Icons { return get(DISPLAY_LAND); } case DISPLAY_PORT: - icon.frame( icon.texture.uvRectBySize( 16, 32, 12, 16 ) ); + icon.frame( icon.texture.uvRectBySize( 16, 16, 12, 16 ) ); break; case DISPLAY_LAND: - icon.frame( icon.texture.uvRectBySize( 32, 32, 16, 12 ) ); + icon.frame( icon.texture.uvRectBySize( 32, 16, 16, 12 ) ); break; case DATA: - icon.frame( icon.texture.uvRectBySize( 48, 32, 14, 15 ) ); + icon.frame( icon.texture.uvRectBySize( 48, 16, 14, 15 ) ); break; case AUDIO: - icon.frame( icon.texture.uvRectBySize( 64, 32, 14, 14 ) ); + icon.frame( icon.texture.uvRectBySize( 64, 16, 14, 14 ) ); break; case LANGS: - icon.frame( icon.texture.uvRectBySize( 80, 32, 14, 11 ) ); + icon.frame( icon.texture.uvRectBySize( 80, 16, 14, 11 ) ); break; case CONTROLLER: - icon.frame( icon.texture.uvRectBySize( 96, 32, 16, 12 ) ); + icon.frame( icon.texture.uvRectBySize( 96, 16, 16, 12 ) ); break; case KEYBOARD: - icon.frame( icon.texture.uvRectBySize( 112, 32, 15, 12 ) ); + icon.frame( icon.texture.uvRectBySize( 112, 16, 15, 12 ) ); break; case STATS: - icon.frame( icon.texture.uvRectBySize( 128, 32, 16, 13 ) ); + icon.frame( icon.texture.uvRectBySize( 128, 16, 16, 13 ) ); break; - case CHALLENGE_OFF: - icon.frame( icon.texture.uvRectBySize( 144, 32, 15, 12 ) ); + case CHALLENGE_GREY: + icon.frame( icon.texture.uvRectBySize( 144, 16, 15, 12 ) ); break; - case CHALLENGE_ON: - icon.frame( icon.texture.uvRectBySize( 160, 32, 15, 12 ) ); - break; - case RENAME_OFF: - icon.frame( icon.texture.uvRectBySize( 176, 32, 15, 14 ) ); - break; - case RENAME_ON: - icon.frame( icon.texture.uvRectBySize( 192, 32, 15, 14 ) ); + case SCROLL_GREY: + icon.frame( icon.texture.uvRectBySize( 160, 16, 15, 14 ) ); break; case SEED: - icon.frame( icon.texture.uvRectBySize( 208, 32, 15, 10 ) ); + icon.frame( icon.texture.uvRectBySize( 176, 16, 15, 10 ) ); break; case LEFTARROW: - icon.frame( icon.texture.uvRectBySize( 224, 32, 14, 9 ) ); + icon.frame( icon.texture.uvRectBySize( 192, 16, 14, 9 ) ); break; case RIGHTARROW: - icon.frame( icon.texture.uvRectBySize( 240, 32, 14, 9 ) ); + icon.frame( icon.texture.uvRectBySize( 208, 16, 14, 9 ) ); break; case CALENDAR: - icon.frame( icon.texture.uvRectBySize( 240, 16, 15, 12 ) ); - break; - - case UNCHECKED: - icon.frame( icon.texture.uvRectBySize( 0, 48, 12, 12 ) ); - break; - case CHECKED: - icon.frame( icon.texture.uvRectBySize( 16, 48, 12, 12 ) ); - break; - case CLOSE: - icon.frame( icon.texture.uvRectBySize( 32, 48, 11, 11 ) ); - break; - case PLUS: - icon.frame( icon.texture.uvRectBySize( 48, 48, 11, 11 ) ); - break; - case REPEAT: - icon.frame( icon.texture.uvRectBySize( 64, 48, 11, 11 ) ); - break; - case ARROW: - icon.frame( icon.texture.uvRectBySize( 80, 48, 11, 11 ) ); - break; - case INFO: - icon.frame( icon.texture.uvRectBySize( 96, 48, 14, 14 ) ); - break; - case WARNING: - icon.frame( icon.texture.uvRectBySize( 112, 48, 14, 14 ) ); - break; - case BACKPACK_LRG: - icon.frame( icon.texture.uvRectBySize( 128, 48, 16, 16 ) ); - break; - case TALENT: - icon.frame( icon.texture.uvRectBySize( 144, 48, 13, 13 ) ); - break; - case MAGNIFY: - icon.frame( icon.texture.uvRectBySize( 160, 48, 14, 14 ) ); - break; - case SNAKE: - icon.frame( icon.texture.uvRectBySize( 176, 48, 9, 13 ) ); - break; - case BUFFS: - icon.frame( icon.texture.uvRectBySize( 192, 48, 16, 15 ) ); - break; - case ENERGY: - icon.frame( icon.texture.uvRectBySize( 208, 48, 16, 16 ) ); - break; - case COPY: - icon.frame( icon.texture.uvRectBySize( 224, 48, 13, 13 ) ); - break; - case PASTE: - icon.frame( icon.texture.uvRectBySize( 240, 48, 13, 13 ) ); - break; - case CATALOG: - icon.frame( icon.texture.uvRectBySize( 240, 64, 13, 16 ) ); - break; - case ALCHEMY: - icon.frame( icon.texture.uvRectBySize( 224, 64, 16, 16 ) ); - break; - case COIN_SML: - icon.frame( icon.texture.uvRectBySize( 192, 80, 7, 7 ) ); - break; - case ENERGY_SML: - icon.frame( icon.texture.uvRectBySize( 192, 88, 8, 7 ) ); - break; - case BACKPACK: - icon.frame( icon.texture.uvRectBySize( 201, 80, 10, 10 ) ); - break; - case SCROLL_HOLDER: - icon.frame( icon.texture.uvRectBySize( 211, 80, 10, 10 ) ); - break; - case SEED_POUCH: - icon.frame( icon.texture.uvRectBySize( 221, 80, 10, 10 ) ); - break; - case WAND_HOLSTER: - icon.frame( icon.texture.uvRectBySize( 231, 80, 10, 10 ) ); - break; - case POTION_BANDOLIER: - icon.frame( icon.texture.uvRectBySize( 241, 80, 10, 10 ) ); + icon.frame( icon.texture.uvRectBySize( 224, 16, 15, 12 ) ); break; case TARGET: - icon.frame( icon.texture.uvRectBySize( 0, 64, 16, 16 ) ); + icon.frame( icon.texture.uvRectBySize( 0, 32, 16, 16 ) ); break; + case INFO: + icon.frame( icon.texture.uvRectBySize( 16, 32, 14, 14 ) ); + break; + case WARNING: + icon.frame( icon.texture.uvRectBySize( 32, 32, 14, 14 ) ); + break; + case UNCHECKED: + icon.frame( icon.texture.uvRectBySize( 48, 32, 12, 12 ) ); + break; + case CHECKED: + icon.frame( icon.texture.uvRectBySize( 64, 32, 12, 12 ) ); + break; + case CLOSE: + icon.frame( icon.texture.uvRectBySize( 80, 32, 11, 11 ) ); + break; + case PLUS: + icon.frame( icon.texture.uvRectBySize( 96, 32, 11, 11 ) ); + break; + case REPEAT: + icon.frame( icon.texture.uvRectBySize( 112, 32, 11, 11 ) ); + break; + case ARROW: + icon.frame( icon.texture.uvRectBySize( 128, 32, 11, 11 ) ); + break; + case CHALLENGE_COLOR: + icon.frame( icon.texture.uvRectBySize( 144, 32, 15, 12 ) ); + break; + case SCROLL_COLOR: + icon.frame( icon.texture.uvRectBySize( 160, 32, 15, 14 ) ); + break; + case COPY: + icon.frame( icon.texture.uvRectBySize( 176, 32, 13, 13 ) ); + break; + case PASTE: + icon.frame( icon.texture.uvRectBySize( 192, 32, 13, 13 ) ); + break; + + case STAIRS: + icon.frame( icon.texture.uvRectBySize( 0, 48, 13, 16 ) ); + break; + case BACKPACK_LRG: + icon.frame( icon.texture.uvRectBySize( 16, 48, 16, 16 ) ); + break; + case TALENT: + icon.frame( icon.texture.uvRectBySize( 32, 48, 13, 13 ) ); + break; + case MAGNIFY: + icon.frame( icon.texture.uvRectBySize( 48, 48, 14, 14 ) ); + break; + case SNAKE: + icon.frame( icon.texture.uvRectBySize( 64, 48, 9, 13 ) ); + break; + case BUFFS: + icon.frame( icon.texture.uvRectBySize( 80, 48, 16, 15 ) ); + break; + case CATALOG: + icon.frame( icon.texture.uvRectBySize( 96, 48, 13, 16 ) ); + break; + case ALCHEMY: + icon.frame( icon.texture.uvRectBySize( 112, 48, 16, 16 ) ); + break; + case SKULL: - icon.frame( icon.texture.uvRectBySize( 16, 64, 8, 8 ) ); + icon.frame( icon.texture.uvRectBySize( 0, 64, 8, 8 ) ); break; case BUSY: - icon.frame( icon.texture.uvRectBySize( 24, 64, 8, 8 ) ); + icon.frame( icon.texture.uvRectBySize( 8, 64, 8, 8 ) ); break; case COMPASS: - icon.frame( icon.texture.uvRectBySize( 16, 72, 7, 5 ) ); + icon.frame( icon.texture.uvRectBySize( 0, 72, 7, 5 ) ); break; case SLEEP: - icon.frame( icon.texture.uvRectBySize( 32, 64, 9, 8 ) ); + icon.frame( icon.texture.uvRectBySize( 16, 64, 9, 8 ) ); break; case ALERT: - icon.frame( icon.texture.uvRectBySize( 32, 72, 8, 8 ) ); + icon.frame( icon.texture.uvRectBySize( 16, 72, 8, 8 ) ); break; case LOST: - icon.frame( icon.texture.uvRectBySize( 40, 72, 8, 8 ) ); + icon.frame( icon.texture.uvRectBySize( 24, 72, 8, 8 ) ); break; case DEPTH: - icon.frame( icon.texture.uvRectBySize( 48, 64 + runTypeOfs(), 6, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 32 + runTypeOfsX(), 64 + runTypeOfsY(), 6, 7 ) ); break; case DEPTH_CHASM: - icon.frame( icon.texture.uvRectBySize( 56, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 40 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_WATER: - icon.frame( icon.texture.uvRectBySize( 64, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 48 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_GRASS: - icon.frame( icon.texture.uvRectBySize( 72, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 56 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_DARK: - icon.frame( icon.texture.uvRectBySize( 80, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 64 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_LARGE: - icon.frame( icon.texture.uvRectBySize( 88, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 72 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_TRAPS: - icon.frame( icon.texture.uvRectBySize( 96, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 80 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case DEPTH_SECRETS: - icon.frame( icon.texture.uvRectBySize( 104, 64 + runTypeOfs(), 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 88 + runTypeOfsX(), 64 + runTypeOfsY(), 7, 7 ) ); break; case CHAL_COUNT: - icon.frame( icon.texture.uvRectBySize( 112, 64, 7, 7 ) ); + icon.frame( icon.texture.uvRectBySize( 160, 64, 7, 7 ) ); + break; + case COIN_SML: + icon.frame( icon.texture.uvRectBySize( 168, 64, 7, 7 ) ); + break; + case ENERGY_SML: + icon.frame( icon.texture.uvRectBySize( 168, 72, 8, 7 ) ); + break; + case BACKPACK: + icon.frame( icon.texture.uvRectBySize( 176, 64, 10, 10 ) ); + break; + case SCROLL_HOLDER: + icon.frame( icon.texture.uvRectBySize( 186, 64, 10, 10 ) ); + break; + case SEED_POUCH: + icon.frame( icon.texture.uvRectBySize( 196, 64, 10, 10 ) ); + break; + case WAND_HOLSTER: + icon.frame( icon.texture.uvRectBySize( 206, 64, 10, 10 ) ); + break; + case POTION_BANDOLIER: + icon.frame( icon.texture.uvRectBySize( 216, 64, 10, 10 ) ); break; case LIBGDX: @@ -398,14 +376,12 @@ public enum Icons { return icon; } - private static int runTypeOfs(){ - if (Dungeon.daily){ - if (Dungeon.dailyReplay){ - return 24; - } else { - return 16; - } - } else if (!Dungeon.customSeedText.isEmpty()){ + private static int runTypeOfsX(){ + return Dungeon.daily ? 64 : 0; + } + + private static int runTypeOfsY(){ + if (Dungeon.dailyReplay || !Dungeon.customSeedText.isEmpty()){ return 8; } else { return 0; @@ -415,15 +391,20 @@ public enum Icons { public static Image get( HeroClass cl ) { switch (cl) { case WARRIOR: - return get( Icons.WARRIOR ); + return new ItemSprite(ItemSpriteSheet.SEAL); case MAGE: - return get( Icons.MAGE ); + //mage's staff normally has 2 pixels extra at the top for particle effects, we chop that off here + Image result = new ItemSprite(ItemSpriteSheet.MAGES_STAFF); + RectF frame = result.frame(); + frame.top += frame.height()/8f; + result.frame(frame); + return result; case ROGUE: - return get( Icons.ROGUE ); + return new ItemSprite(ItemSpriteSheet.ARTIFACT_CLOAK); case HUNTRESS: - return get( Icons.HUNTRESS ); + return new ItemSprite(ItemSpriteSheet.SPIRIT_BOW); case DUELIST: - return get( Icons.DUELIST ); + return new ItemSprite(ItemSpriteSheet.RAPIER); default: return null; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java index 429b8f5c7..c324aa19e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java @@ -218,7 +218,7 @@ public class v0_6_X_Changes { "\n" + "I also made some important changes to challenges in v0.6.4, primarily to make stacked challenge games a bit easier. This made high-challenge games more feasible without extreme luck, which led to a big increase in challenge interest among highly skilled players.")); - changes.addButton( new ChangeButton(Icons.get(Icons.CHALLENGE_ON), "Challenges", + changes.addButton( new ChangeButton(Icons.get(Icons.CHALLENGE_COLOR), "Challenges", "Challenges have received several major changes, with the goal of making them more fair and interesting.\n" + "\n" + "_-_ Challenges now have descriptions\n" + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_9_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_9_X_Changes.java index aac394da8..67c1483a7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_9_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_9_X_Changes.java @@ -77,7 +77,7 @@ public class v0_9_X_Changes { "After the defeating the fourth boss, the player now gets to choose between one of three abilities for each hero. Armor abilities also charge much faster, and can be further improved via tier four talents!\n\n" + "Each armor ability has three talents, plus one charge-speed talent that's shared between them. These talents all take up to 4 points, and there are up to 10 points available in tier 4, for levels 21-30.")); - changes.addButton( new ChangeButton(Icons.get(Icons.CHALLENGE_ON), "New Challenge!", + changes.addButton( new ChangeButton(Icons.get(Icons.CHALLENGE_COLOR), "New Challenge!", "A new challenge has been added: _Badder Bosses!_\n\n" + "This challenge is a followup to Hostile Champions in a lot of ways, making the dungeon's bosses much stronger, instead of the enemies. Early bosses like Goo are only a touch tougher, but lategame bosses are quite a lot more deadly!\n\n" + "To go along with this challenge, I've also made a few targeted tweaks to regular boss mechanics:\n" + @@ -342,7 +342,7 @@ public class v0_9_X_Changes { "_- Succubi:_ Damage up to 25-30 from 22-30.\n" + "_- Scorpios:_ HP up to 110 from 95, damage up to 30-40 from 26-36.")); - changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), "Hostile Champions", + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_COLOR), "Hostile Champions", "I've made another round of tweaks to the Hostile Champions challenge to make it more consistent and a bit harder overall:\n\n" + "_-_ Champion spawn rate up to 1/8 from 1/10.\n" + "_-_ Rather than having a 1/8 chance per enemy, the game now guarantees that every 8th enemy is a champion. This should make champion spawn rates much more consistent.\n" + @@ -551,7 +551,7 @@ public class v0_9_X_Changes { "Talents are split into tiers, and to start only the first tier is available, which covers levels 1 to 6. More talents will be added soon!\n\n" + "Previously I would have spent many more months on v0.9.0 and released the entire system in one update, but I'm changing up my strategy and splitting these big updates into smaller parts.")); - changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_ON), "Hostile Champions!", + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_COLOR), "Hostile Champions!", "A new challenge has been added: _Hostile Champions!_\n\n" + "Unlike most other challenges, this one focuses on amping up the difficulty of the dungeon, rather than removing tools from the player. Give it a try if you've unlocked challenges, and you might find some particularly nasty enemies in the dungeon!")); @@ -570,7 +570,7 @@ public class v0_9_X_Changes { "The _Mage_ no longer has an innate wand identification effect, this is replaced by his wand identification talent.\n\n" + "The _Huntress'_ studded gloves have had their base damage reduced to 1-5 from 1-6, to compensate for her damage-dealing talent.")); - changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_OFF), "Existing Challenges", + changes.addButton(new ChangeButton(Icons.get(Icons.CHALLENGE_GREY), "Existing Challenges", "Some existing challenges have been tweaked to reduce the number of items that they remove from the game:\n\n" + "_On Diet_ no longer restricts food, but instead causes all food to be 1/3 as effective at satiating hunger.\n\n" + "_Faith Is My Armor_ no longer restricts the hero to cloth armor, but instead heavily reduces the blocking power of all armor above cloth.\n\n" + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v2_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v2_X_Changes.java index 23d3889ca..01455835e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v2_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v2_X_Changes.java @@ -206,7 +206,7 @@ public class v2_X_Changes { "_-_ Champion's two weapons now share a charge count, but Champion gets boosted max charges and charge speed.\n" + "_-_ Champion's secondary charge talent has been replaced with a new talent that encourages varied ability use.")); - changes.addButton( new ChangeButton(Icons.get(Icons.ENERGY), "Alchemy Changes", + changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.ENERGY), "Alchemy Changes", "I've made a bunch of changes to the alchemy system to streamline things and complement the addition of trinkets:\n" + "\n" + "_-_ Catalysts have been removed entirely, recipes that required one now simply cost 8 or 9 more energy.\n" + @@ -607,7 +607,7 @@ public class v2_X_Changes { changes.hardlight(CharSprite.WARNING); changeInfos.add(changes); - changes.addButton( new ChangeButton(Icons.CHALLENGE_ON.get(), "Hostile Champions", + changes.addButton( new ChangeButton(Icons.CHALLENGE_COLOR.get(), "Hostile Champions", "I've decided to make some changes to the hostile champions challenge, to better balance the difficulty of each of the champion types, and address some common feedback about difficulty spikes:\n" + "\n" + "_- Projecting Champions_ now have +3 attack range, instead of infinite range\n" + diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGame.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGame.java index e380790ef..08cfcb2a7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGame.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGame.java @@ -70,7 +70,7 @@ public class WndGame extends Window { GameScene.show( new WndChallenges( Dungeon.challenges, false ) ); } } ); - curBtn.icon(Icons.get(Icons.CHALLENGE_ON)); + curBtn.icon(Icons.get(Icons.CHALLENGE_COLOR)); } // Restart diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java index 48331e9e2..892726620 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java @@ -78,7 +78,7 @@ public class WndGameInProgress extends Window { Game.scene().add( new WndChallenges( info.challenges, false ) ); } }; - btnChallenges.icon(Icons.get(Icons.CHALLENGE_ON)); + btnChallenges.icon(Icons.get(Icons.CHALLENGE_COLOR)); float btnW = btnChallenges.reqWidth() + 2; btnChallenges.setRect( (WIDTH - btnW)/2, pos, btnW , 18 ); add( btnChallenges ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java index 75713d25f..0046d37ed 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java @@ -39,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.journal.Bestiary; import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog; import com.shatteredpixel.shatteredpixeldungeon.journal.Document; @@ -702,6 +703,13 @@ public class WndJournal extends WndTabbed { } } + //mage's staff normally has 2 pixels extra at the top for particle effects, we chop that off here + if (item instanceof MagesStaff){ + RectF frame = sprite.frame(); + frame.top += frame.height()/8f; + sprite.frame(frame); + } + if (item.icon != -1) { secondIcon = new Image(Assets.Sprites.ITEM_ICONS); secondIcon.frame(ItemSpriteSheet.Icons.film.get(item.icon)); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java index 01fca2c57..abb43ab82 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java @@ -107,7 +107,7 @@ public class WndRanking extends WndTabbed { if (Dungeon.hero != null) { Icons[] icons = - {Icons.RANKINGS, Icons.TALENT, Icons.BACKPACK_LRG, Icons.BADGES, Icons.CHALLENGE_ON}; + {Icons.RANKINGS, Icons.TALENT, Icons.BACKPACK_LRG, Icons.BADGES, Icons.CHALLENGE_COLOR}; Group[] pages = {new StatsTab(), new TalentsTab(), new ItemsTab(), new BadgesTab(), null};