From 640fb1056aa2a249b118266b8e0822dda6b04d69 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 12 Nov 2025 14:09:26 -0500 Subject: [PATCH] v3.3.0: implemented the cracked spyglass trinket (with WIP art) This also involved repositioning some item sprites, and changing trinket crafting to show the 4th option --- .../assets/messages/items/items.properties | 6 ++ core/src/main/assets/sprites/items.png | Bin 24895 -> 24932 bytes .../items/Generator.java | 6 +- .../shatteredpixeldungeon/items/Heap.java | 9 +++ .../items/trinkets/CrackedSpyglass.java | 64 ++++++++++++++++++ .../items/trinkets/TrinketCatalyst.java | 10 +-- .../levels/RegularLevel.java | 14 ++++ .../sprites/ItemSprite.java | 24 ++++--- .../sprites/ItemSpriteSheet.java | 24 +++---- 9 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/CrackedSpyglass.java diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index d9be335bf..fb324cf87 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1404,6 +1404,12 @@ items.trinkets.chaoticcenser.desc=After some time in the alchemy pot this incens items.trinkets.chaoticcenser.typical_stats_desc=Typically this trinket will spawn a harmful gas near an enemy roughly every _%d_ turns. Gasses will only appear when enemies are present. At higher levels these gases are more likely to be exotic and powerful. items.trinkets.chaoticcenser.stats_desc=At its current level, this trinket will spawn a harmful gas near an enemy roughly every _%d_ turns. Gasses will only appear when enemies are present. At higher levels these gases are more likely to be exotic and powerful. +items.trinkets.crackedspyglass.name=cracked spyglass +items.trinkets.crackedspyglass.desc=This handheld telescope would be a demonstration of great and precise workmanship, if it weren't for the crack along its front lens. The spyglass seems to be helping you by revealing new items in the dungeon, but due to its flaw the revealed items are quite hard to see! +items.trinkets.crackedspyglass.typical_stats_desc=Typically this trinket has a _%1$s%% chance_ to create an extra hidden item on each non-boss floor. +items.trinkets.crackedspyglass.stats_desc=At its current level, this trinket has a _%1$s%% chance_ to create an extra hidden item on each non-boss floor. +items.trinkets.crackedspyglass.stats_desc_upgraded=At its current level, this trinket has a _100%% chance_ to create an extra hidden item on each non-boss floor, and a _%1$s%% chance_ to create a second extra hidden item. + items.trinkets.dimensionalsundial.name=dimensional sundial items.trinkets.dimensionalsundial.warning=Your sundial isn't casting a shadow, you feel uneasy. items.trinkets.dimensionalsundial.desc=This small handheld sundial is somehow able to cast a shadow in the depths of the dungeon, even if you aren't holding it upright. Even more strangely, the shadow's position seems to have no relation to the sun in this world. When no shadow is cast, the sundial seems to attract danger. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index be6627846158648c769d5d14e45078402a047c06..ad2d293214c3579ebdd0a3a9df1f898120b4d5f5 100644 GIT binary patch literal 24932 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 E0yt^Uy8r+H diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index 616dfa024..9d339bc72 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -110,6 +110,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfFlock; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfIntuition; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfShock; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ChaoticCenser; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.CrackedSpyglass; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.DimensionalSundial; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ExoticCrystals; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.EyeOfNewt; @@ -590,9 +591,10 @@ public class Generator { VialOfBlood.class, ShardOfOblivion.class, ChaoticCenser.class, - FerretTuft.class + FerretTuft.class, + CrackedSpyglass.class }; - TRINKET.defaultProbs = new float[]{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + TRINKET.defaultProbs = new float[]{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; TRINKET.probs = TRINKET.defaultProbs.clone(); for (Category cat : Category.values()){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java index 8d0f97a92..df03d86bf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java @@ -77,6 +77,7 @@ public class Heap implements Bundlable { public boolean seen = false; public boolean haunted = false; public boolean autoExplored = false; //used to determine if this heap should count for exploration bonus + public boolean hidden = false; //sets alpha to 15% public LinkedList items = new LinkedList<>(); @@ -150,6 +151,7 @@ public class Heap implements Bundlable { } public void drop( Item item ) { + hidden = false; if (item.stackable && type != Type.FOR_SALE) { @@ -183,6 +185,7 @@ public class Heap implements Bundlable { } public void replace( Item a, Item b ) { + hidden = false; int index = items.indexOf( a ); if (index != -1) { items.remove( index ); @@ -197,6 +200,7 @@ public class Heap implements Bundlable { } public void remove( Item a ){ + hidden = false; items.remove(a); if (items.isEmpty()){ destroy(); @@ -206,6 +210,7 @@ public class Heap implements Bundlable { } public void burn() { + hidden = false; if (type != Type.HEAP) { return; @@ -257,6 +262,7 @@ public class Heap implements Bundlable { //Note: should not be called to initiate an explosion, but rather by an explosion that is happening. public void explode() { + hidden = false; //breaks open most standard containers, mimics die. if (type == Type.CHEST || type == Type.SKELETON) { @@ -415,6 +421,7 @@ public class Heap implements Bundlable { private static final String ITEMS = "items"; private static final String HAUNTED = "haunted"; private static final String AUTO_EXPLORED = "auto_explored"; + private static final String HIDDEN = "hidden"; @SuppressWarnings("unchecked") @Override @@ -440,6 +447,7 @@ public class Heap implements Bundlable { haunted = bundle.getBoolean( HAUNTED ); autoExplored = bundle.getBoolean( AUTO_EXPLORED ); + hidden = bundle.getBoolean( HIDDEN ); } @Override @@ -450,6 +458,7 @@ public class Heap implements Bundlable { bundle.put( ITEMS, items ); bundle.put( HAUNTED, haunted ); bundle.put( AUTO_EXPLORED, autoExplored ); + bundle.put( HIDDEN, hidden ); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/CrackedSpyglass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/CrackedSpyglass.java new file mode 100644 index 000000000..ab1ad2e0f --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/CrackedSpyglass.java @@ -0,0 +1,64 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2025 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.trinkets; + +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class CrackedSpyglass extends Trinket{ + + { + image = ItemSpriteSheet.SPYGLASS; + } + + @Override + protected int upgradeEnergyCost() { + //6 -> 8(14) -> 10(24) -> 12(36) + return 6+2*level(); + } + + @Override + public String statsDesc() { + if (isIdentified()){ + if (buffedLvl() >= 2){ + return Messages.get(this, "stats_desc_upgraded", Messages.decimalFormat("#.##", 100 * (extraLootChance(buffedLvl())-1f))); + } else { + return Messages.get(this, "stats_desc", Messages.decimalFormat("#.##", 100 * extraLootChance(buffedLvl()))); + } + } else { + return Messages.get(this, "typical_stats_desc", Messages.decimalFormat("#.##", 100 * extraLootChance(0))); + } + } + + public static float extraLootChance(){ + return extraLootChance(trinketLevel(CrackedSpyglass.class)); + } + + public static float extraLootChance(int level ){ + if (level <= -1){ + return 0; + } else { + return 0.4f*(level+1); + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java index a8348750a..a976f675a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java @@ -158,7 +158,7 @@ public class TrinketCatalyst extends Item { private static final int BTN_GAP = 4; private static final int GAP = 2; - private static final int NUM_TRINKETS = 4; //last one is a random choice + private static final int NUM_TRINKETS = 4; public WndTrinket( TrinketCatalyst cata ){ @@ -174,7 +174,7 @@ public class TrinketCatalyst extends Item { add( message ); //roll new trinkets if trinkets were not already rolled - while (cata.rolledTrinkets.size() < NUM_TRINKETS-1){ + while (cata.rolledTrinkets.size() < NUM_TRINKETS){ cata.rolledTrinkets.add((Trinket) Generator.random(Generator.Category.TRINKET)); } @@ -185,11 +185,7 @@ public class TrinketCatalyst extends Item { ShatteredPixelDungeon.scene().addToFront(new RewardWindow(item())); } }; - if (i == NUM_TRINKETS-1){ - btnReward.item(new RandomTrinket()); - } else { - btnReward.item(cata.rolledTrinkets.get(i)); - } + btnReward.item(cata.rolledTrinkets.get(i)); btnReward.setRect( (i+1)*(WIDTH - BTN_GAP) / NUM_TRINKETS - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE, BTN_SIZE ); add( btnReward ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index da74f4feb..e0e6bb100 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -50,6 +50,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.journal.RegionLorePage; import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.CrackedSpyglass; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.MimicTooth; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.journal.Document; @@ -675,6 +676,19 @@ public abstract class RegularLevel extends Level { } Random.popGenerator(); + //extra spyglass loot + Random.pushGenerator(Random.Long()); + int items = (int)(Random.Float() + CrackedSpyglass.extraLootChance()); + for (int i = 0; i < items; i++){ + int cell = randomDropCell(); + if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) { + map[cell] = Terrain.GRASS; + losBlocking[cell] = false; + } + drop( Generator.randomUsingDefaults(), cell).hidden = true; + } + Random.popGenerator(); + } private static HashMap limitedDocs = new HashMap<>(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java index 1103443b0..42be46f9c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java @@ -213,25 +213,31 @@ public class ItemSprite extends MovieClip { if (heap.size() <= 0 || heap.items == null){ return view( 0, null ); } - + switch (heap.type) { case HEAP: case FOR_SALE: - return view( heap.peek() ); + view( heap.peek() ); break; case CHEST: - return view( ItemSpriteSheet.CHEST, null ); + view( ItemSpriteSheet.CHEST, null ); break; case LOCKED_CHEST: - return view( ItemSpriteSheet.LOCKED_CHEST, null ); + view( ItemSpriteSheet.LOCKED_CHEST, null ); break; case CRYSTAL_CHEST: - return view( ItemSpriteSheet.CRYSTAL_CHEST, null ); + view( ItemSpriteSheet.CRYSTAL_CHEST, null ); break; case TOMB: - return view( ItemSpriteSheet.TOMB, null ); + view( ItemSpriteSheet.TOMB, null ); break; case SKELETON: - return view( ItemSpriteSheet.BONES, null ); + view( ItemSpriteSheet.BONES, null ); break; case REMAINS: - return view( ItemSpriteSheet.REMAINS, null ); + view( ItemSpriteSheet.REMAINS, null ); break; default: - return view( 0, null ); + view( 0, null ); } + + if (heap.hidden){ + alpha(0.15f); + } + + return this; } public ItemSprite view( int image, Glowing glowing ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index c6d2c416b..ebb6c3db0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -434,7 +434,7 @@ public class ItemSpriteSheet { assignItemRect(i, 8, 10); } - private static final int ARTIFACTS = xy(1, 16); //24 slots + private static final int ARTIFACTS = xy(1, 16); //32 slots public static final int ARTIFACT_CLOAK = ARTIFACTS+0; public static final int ARTIFACT_ARMBAND = ARTIFACTS+1; public static final int ARTIFACT_CAPE = ARTIFACTS+2; @@ -486,7 +486,7 @@ public class ItemSpriteSheet { assignItemRect(ARTIFACT_TOME, 14, 16); } - private static final int TRINKETS = xy(9, 17); //24 slots + private static final int TRINKETS = xy(1, 18); //32 slots public static final int RAT_SKULL = TRINKETS+0; public static final int PARCHMENT_SCRAP = TRINKETS+1; public static final int PETRIFIED_SEED = TRINKETS+2; @@ -503,6 +503,7 @@ public class ItemSpriteSheet { public static final int OBLIVION_SHARD = TRINKETS+13; public static final int CHAOTIC_CENSER = TRINKETS+14; public static final int FERRET_TUFT = TRINKETS+15; + public static final int SPYGLASS = TRINKETS+16; static{ assignItemRect(RAT_SKULL, 16, 11); assignItemRect(PARCHMENT_SCRAP, 10, 14); @@ -520,9 +521,10 @@ public class ItemSpriteSheet { assignItemRect(OBLIVION_SHARD, 7, 14); assignItemRect(CHAOTIC_CENSER, 13, 15); assignItemRect(FERRET_TUFT, 16, 15); + assignItemRect(SPYGLASS, 15, 15); } - private static final int SCROLLS = xy(1, 19); //16 slots + private static final int SCROLLS = xy(1, 20); //16 slots public static final int SCROLL_KAUNAN = SCROLLS+0; public static final int SCROLL_SOWILO = SCROLLS+1; public static final int SCROLL_LAGUZ = SCROLLS+2; @@ -543,7 +545,7 @@ public class ItemSpriteSheet { assignItemRect(ARCANE_RESIN , 12, 11); } - private static final int EXOTIC_SCROLLS = xy(1, 20); //16 slots + private static final int EXOTIC_SCROLLS = xy(1, 21); //16 slots public static final int EXOTIC_KAUNAN = EXOTIC_SCROLLS+0; public static final int EXOTIC_SOWILO = EXOTIC_SCROLLS+1; public static final int EXOTIC_LAGUZ = EXOTIC_SCROLLS+2; @@ -561,7 +563,7 @@ public class ItemSpriteSheet { assignItemRect(i, 15, 14); } - private static final int STONES = xy(1, 21); //16 slots + private static final int STONES = xy(1, 22); //16 slots public static final int STONE_AGGRESSION = STONES+0; public static final int STONE_AUGMENTATION = STONES+1; public static final int STONE_FEAR = STONES+2; @@ -579,7 +581,7 @@ public class ItemSpriteSheet { assignItemRect(i, 14, 12); } - private static final int POTIONS = xy(1, 22); //16 slots + private static final int POTIONS = xy(1, 23); //16 slots public static final int POTION_CRIMSON = POTIONS+0; public static final int POTION_AMBER = POTIONS+1; public static final int POTION_GOLDEN = POTIONS+2; @@ -600,7 +602,7 @@ public class ItemSpriteSheet { assignItemRect(LIQUID_METAL, 8, 15); } - private static final int EXOTIC_POTIONS = xy(1, 23); //16 slots + private static final int EXOTIC_POTIONS = xy(1, 24); //16 slots public static final int EXOTIC_CRIMSON = EXOTIC_POTIONS+0; public static final int EXOTIC_AMBER = EXOTIC_POTIONS+1; public static final int EXOTIC_GOLDEN = EXOTIC_POTIONS+2; @@ -618,7 +620,7 @@ public class ItemSpriteSheet { assignItemRect(i, 12, 13); } - private static final int SEEDS = xy(1, 24); //16 slots + private static final int SEEDS = xy(1, 25); //16 slots public static final int SEED_ROTBERRY = SEEDS+0; public static final int SEED_FIREBLOOM = SEEDS+1; public static final int SEED_SWIFTTHISTLE = SEEDS+2; @@ -636,7 +638,7 @@ public class ItemSpriteSheet { assignItemRect(i, 10, 10); } - private static final int BREWS = xy(1, 25); //8 slots + private static final int BREWS = xy(1, 26); //8 slots public static final int BREW_INFERNAL = BREWS+0; public static final int BREW_BLIZZARD = BREWS+1; public static final int BREW_SHOCKING = BREWS+2; @@ -644,7 +646,7 @@ public class ItemSpriteSheet { public static final int BREW_AQUA = BREWS+4; public static final int BREW_UNSTABLE = BREWS+5; - private static final int ELIXIRS = xy(9, 25); //8 slots + private static final int ELIXIRS = xy(9, 26); //8 slots public static final int ELIXIR_HONEY = ELIXIRS+0; public static final int ELIXIR_AQUA = ELIXIRS+1; public static final int ELIXIR_MIGHT = ELIXIRS+2; @@ -660,8 +662,6 @@ public class ItemSpriteSheet { assignItemRect(BREW_AQUA, 9, 11); } - //16 free slots - private static final int SPELLS = xy(1, 27); //16 slots public static final int WILD_ENERGY = SPELLS+0; public static final int PHASE_SHIFT = SPELLS+1;