From f5c4ccf20b28d507958523133fbb6f3e5d375d12 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 3 Sep 2024 14:50:39 -0400 Subject: [PATCH] v2.5.0: added a 4th trinket option: random --- .../assets/messages/items/items.properties | 2 ++ .../items/trinkets/TrinketCatalyst.java | 33 ++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index b0611a15f..929749e04 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1402,6 +1402,8 @@ items.trinkets.wondrousresin.stats_desc=At its current level this trinket will f items.trinkets.trinketcatalyst.name=magical catalyst items.trinkets.trinketcatalyst.window_text=The water begins to glow as you add the catalyst. There are a few nearby items you could imbue with energy to turn into a magical trinket. items.trinkets.trinketcatalyst.desc=This ball of magical golden dust glimmers in the darkness of the dungeon. This catalyst can be used at an alchemy pot with a little alchemical energy to produce a unique trinket item.\n\nTrinkets provide various different effects that slightly alter the dungeon or its inhabitants. Trinkets can be upgraded with more energy to make their effect more powerful, or dropped to forego the effect entirely. +items.trinkets.trinketcatalyst$randomtrinket.name=random trinket +items.trinkets.trinketcatalyst$randomtrinket.desc=One nearby item is stuck inside a pouch that you can't get open.\n\nThe alchemy process will dissolve the pouch away, but you won't know what trinket you'll get until you do it! items.trinkets.trinket$placeholder.name=trinket 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 ce15cfa0f..b740623e4 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 @@ -134,14 +134,22 @@ public class TrinketCatalyst extends Item { } } + public static class RandomTrinket extends Item { + + { + image = ItemSpriteSheet.TRINKET_HOLDER; + } + + } + public static class WndTrinket extends Window { private static final int WIDTH = 120; - private static final int BTN_SIZE = 32; - private static final int BTN_GAP = 5; + private static final int BTN_SIZE = 24; + private static final int BTN_GAP = 4; private static final int GAP = 2; - private static final int NUM_TRINKETS = 3; + private static final int NUM_TRINKETS = 4; //last one is a random choice public WndTrinket( TrinketCatalyst cata ){ @@ -157,18 +165,22 @@ public class TrinketCatalyst extends Item { add( message ); //roll new trinkets if trinkets were not already rolled - while (cata.rolledTrinkets.size() < NUM_TRINKETS){ + while (cata.rolledTrinkets.size() < NUM_TRINKETS-1){ cata.rolledTrinkets.add((Trinket) Generator.random(Generator.Category.TRINKET)); } for (int i = 0; i < NUM_TRINKETS; i++){ - ItemButton btnReward = new ItemButton(){ + ItemButton btnReward = new ItemButton() { @Override protected void onClick() { ShatteredPixelDungeon.scene().addToFront(new RewardWindow(item())); } }; - btnReward.item(cata.rolledTrinkets.get(i)); + if (i == NUM_TRINKETS-1){ + btnReward.item(new RandomTrinket()); + } else { + 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 ); @@ -194,13 +206,18 @@ public class TrinketCatalyst extends Item { RewardWindow.this.hide(); WndTrinket.this.hide(); + Item result = item; + if (result instanceof RandomTrinket){ + result = Generator.random(Generator.Category.TRINKET); + } + TrinketCatalyst cata = Dungeon.hero.belongings.getItem(TrinketCatalyst.class); if (cata != null) { cata.detach(Dungeon.hero.belongings.backpack); Catalog.countUse(cata.getClass()); - item.identify(); - ((AlchemyScene)ShatteredPixelDungeon.scene()).craftItem(null, item); + result.identify(); + ((AlchemyScene)ShatteredPixelDungeon.scene()).craftItem(null, result); } } };