From ae020c1f71a432fc5915aa3ff77e13a1f0ecff50 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 10 Mar 2024 14:26:52 -0400 Subject: [PATCH] v2.4.0: added initial logic for finding/creating trinkets --- .../assets/messages/items/items.properties | 8 + core/src/main/assets/sprites/items.png | Bin 22442 -> 22450 bytes .../shatteredpixeldungeon/items/Recipe.java | 4 +- .../items/trinkets/Trinket.java | 56 ++++++ .../items/trinkets/TrinketCatalyst.java | 171 ++++++++++++++++++ .../shatteredpixeldungeon/levels/Level.java | 13 ++ .../levels/RegularLevel.java | 13 +- .../scenes/AlchemyScene.java | 72 ++++---- .../sprites/ItemSpriteSheet.java | 16 +- .../windows/WndJournal.java | 14 +- 10 files changed, 322 insertions(+), 45 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/Trinket.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 780ef40e9..fbc4ca5ea 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1290,6 +1290,14 @@ items.stones.stoneofintuition$wndguess.incorrect=Your guess was incorrect. items.stones.stoneofshock.name=stone of shock items.stones.stoneofshock.desc=This runestone unleashes a blast of electrical energy which briefly stuns all nearby targets, and grants the thrower wand charge for each target hit. + +###trinkets +items.trinkets.trinketcatalyst.name=trinket catalyst +items.trinkets.trinketcatalyst.window_text=The water begins to glow as you use the catalyst. There are a few nearby items you could imbue with magical energy. +items.trinkets.trinketcatalyst.desc=TODO + +items.trinkets.trinket$placeholder.name=trinket + ###wands items.wands.cursedwand.ondeath=You were killed by your own %s. items.wands.cursedwand.nothing=Nothing happens. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 72668e18cb7dcd521b1aed307bc70f9a2a25293e..4ec8ce97f0f0e1f29c04de51b50bd034926a384f 100644 GIT binary patch literal 22450 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 literal 22442 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

$@~=Yl|BtPcL!*O6G)i-_t?`|{dwvZ7>a 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java index 4eb297c1e..428e56e16 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -55,6 +55,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.spells.SummonElemental; import com.shatteredpixel.shatteredpixeldungeon.items.spells.TelekineticGrab; import com.shatteredpixel.shatteredpixeldungeon.items.spells.UnstableSpell; import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.watabou.utils.Reflection; @@ -189,7 +190,8 @@ public abstract class Recipe { new Recycle.Recipe(), new TelekineticGrab.Recipe(), new SummonElemental.Recipe(), - new StewedMeat.oneMeat() + new StewedMeat.oneMeat(), + new TrinketCatalyst.Recipe() }; private static Recipe[] twoIngredientRecipes = new Recipe[]{ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/Trinket.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/Trinket.java new file mode 100644 index 000000000..af0629599 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/Trinket.java @@ -0,0 +1,56 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2024 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.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public abstract class Trinket extends Item { + + @Override + public boolean isIdentified() { + return true; + } + + @Override + public boolean isUpgradable() { + return false; + } + + public static class PlaceHolder extends Trinket { + + { + image = ItemSpriteSheet.TRINKET_HOLDER; + } + + @Override + public boolean isSimilar(Item item) { + return item instanceof Trinket; + } + + @Override + public String info() { + return ""; + } + + } +} 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 new file mode 100644 index 000000000..e957d25ac --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrinketCatalyst.java @@ -0,0 +1,171 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2024 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.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene; +import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.ui.ItemButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; +import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; +import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.shatteredpixel.shatteredpixeldungeon.windows.IconTitle; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndInfoItem; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost; + +import java.util.ArrayList; + +public class TrinketCatalyst extends Item { + + { + image = ItemSpriteSheet.ARCANE_RESIN; + } + + @Override + public boolean isIdentified() { + return true; + } + + @Override + public boolean isUpgradable() { + return false; + } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe { + + @Override + public boolean testIngredients(ArrayList ingredients) { + return ingredients.size() == 1 && ingredients.get(0) instanceof TrinketCatalyst; + } + + @Override + public int cost(ArrayList ingredients) { + return 6; + } + + @Override + public Item brew(ArrayList ingredients) { + ingredients.get(0).quantity(0); + + //we silently re-add the catalyst so that we can clear it when a trinket is selected + //this way player isn't totally screwed if they quit the game while selecting + new TrinketCatalyst().collect(); + + ShatteredPixelDungeon.scene().addToFront(new WndTrinket()); + return null; + } + + @Override + public Item sampleOutput(ArrayList ingredients) { + return new Trinket.PlaceHolder(); + } + } + + 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 GAP = 2; + + private static final int NUM_TRINKETS = 3; + + public WndTrinket(){ + + TrinketCatalyst cata = new TrinketCatalyst(); + + IconTitle titlebar = new IconTitle(); + titlebar.icon(new ItemSprite(cata)); + titlebar.label(Messages.titleCase(cata.name())); + titlebar.setRect(0, 0, WIDTH, 0); + add( titlebar ); + + RenderedTextBlock message = PixelScene.renderTextBlock( Messages.get(TrinketCatalyst.class, "window_text"), 6 ); + message.maxWidth(WIDTH); + message.setPos(0, titlebar.bottom() + GAP); + add( message ); + + for (int i = 1; i <= NUM_TRINKETS; i++){ + ItemButton btnReward = new ItemButton(){ + @Override + protected void onClick() { + ShatteredPixelDungeon.scene().addToFront(new RewardWindow(item())); + } + }; + btnReward.item(Generator.randomUsingDefaults()); + btnReward.setRect( i*(WIDTH - BTN_GAP) / NUM_TRINKETS - BTN_SIZE, message.top() + message.height() + BTN_GAP, BTN_SIZE, BTN_SIZE ); + add( btnReward ); + + } + + resize(WIDTH, (int)(message.top() + message.height() + 2*BTN_GAP + BTN_SIZE)); + + } + + @Override + public void onBackPressed() { + //do nothing + } + + private class RewardWindow extends WndInfoItem { + + public RewardWindow( Item item ) { + super(item); + + RedButton btnConfirm = new RedButton(Messages.get(WndSadGhost.class, "confirm")){ + @Override + protected void onClick() { + RewardWindow.this.hide(); + WndTrinket.this.hide(); + + TrinketCatalyst cata = Dungeon.hero.belongings.getItem(TrinketCatalyst.class); + + if (cata != null) { + cata.detach(Dungeon.hero.belongings.backpack); + ((AlchemyScene)ShatteredPixelDungeon.scene()).craftItem(null, item); + } + } + }; + btnConfirm.setRect(0, height+2, width/2-1, 16); + add(btnConfirm); + + RedButton btnCancel = new RedButton(Messages.get(WndSadGhost.class, "cancel")){ + @Override + protected void onClick() { + hide(); + } + }; + btnCancel.setRect(btnConfirm.right()+2, height+2, btnConfirm.width(), 16); + add(btnCancel); + + resize(width, (int)btnCancel.bottom()); + } + } + + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index a17312642..f9f4a2465 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -67,6 +67,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfIntuition; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.HeavyBoomerang; @@ -225,6 +226,10 @@ public abstract class Level implements Bundlable { if ( Dungeon.depth == ((Dungeon.seed % 3) + 1)){ addItemToSpawn( new StoneOfIntuition() ); } + + if ( Dungeon.depth == (((Dungeon.seed+1) % 3) + 1)){ + addItemToSpawn( new TrinketCatalyst()); + } if (Dungeon.depth > 1) { //50% chance of getting a level feeling @@ -774,6 +779,14 @@ public abstract class Level implements Bundlable { return null; if (match == null){ + //if we have a trinket catalyst, always return that + for (Item i : itemsToSpawn){ + if (i instanceof TrinketCatalyst){ + itemsToSpawn.remove(i); + return i; + } + } + Item item = Random.element(itemsToSpawn); itemsToSpawn.remove(item); return item; 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 eed6b9282..233a642ff 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -48,6 +48,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.journal.GuidePage; import com.shatteredpixel.shatteredpixeldungeon.items.journal.RegionLorePage; import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.journal.Document; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.levels.builders.Builder; @@ -406,7 +407,17 @@ public abstract class RegularLevel extends Level { for (Item item : itemsToSpawn) { int cell = randomDropCell(); - drop( item, cell ).type = Heap.Type.HEAP; + if (item instanceof TrinketCatalyst){ + drop( item, cell ).type = Heap.Type.LOCKED_CHEST; + int keyCell = randomDropCell(); + drop( new GoldenKey(Dungeon.depth), keyCell ).type = Heap.Type.HEAP; + if (map[keyCell] == Terrain.HIGH_GRASS || map[keyCell] == Terrain.FURROWED_GRASS) { + map[keyCell] = Terrain.GRASS; + losBlocking[keyCell] = false; + } + } else { + drop( item, cell ).type = Heap.Type.HEAP; + } if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) { map[cell] = Terrain.GRASS; losBlocking[cell] = false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java index a217740ad..554cfafa6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java @@ -607,41 +607,9 @@ public class AlchemyScene extends PixelScene { } if (result != null){ - bubbleEmitter.start(Speck.factory( Speck.BUBBLE ), 0.01f, 100 ); - smokeEmitter.burst(Speck.factory( Speck.WOOL ), 10 ); - Sample.INSTANCE.play( Assets.Sounds.PUFF ); - int resultQuantity = result.quantity(); - if (!result.collect()){ - Dungeon.level.drop(result, Dungeon.hero.pos); - } + craftItem(ingredients, result); - Statistics.itemsCrafted++; - Badges.validateItemsCrafted(); - - try { - Dungeon.saveAll(); - } catch (IOException e) { - ShatteredPixelDungeon.reportException(e); - } - - synchronized (inputs) { - for (int i = 0; i < inputs.length; i++) { - if (inputs[i] != null && inputs[i].item() != null) { - Item item = inputs[i].item(); - if (item.quantity() <= 0) { - inputs[i].item(null); - } else { - inputs[i].slot.updateText(); - } - } - } - } - - updateState(); - //we reset the quantity in case the result was merged into another stack in the backpack - result.quantity(resultQuantity); - outputs[0].item(result); } boolean foundItems = true; @@ -657,6 +625,44 @@ public class AlchemyScene extends PixelScene { repeat.enable(foundItems); cancel.enable(false); } + + public void craftItem( ArrayList ingredients, Item result ){ + bubbleEmitter.start(Speck.factory( Speck.BUBBLE ), 0.01f, 100 ); + smokeEmitter.burst(Speck.factory( Speck.WOOL ), 10 ); + Sample.INSTANCE.play( Assets.Sounds.PUFF ); + + int resultQuantity = result.quantity(); + if (!result.collect()){ + Dungeon.level.drop(result, Dungeon.hero.pos); + } + + Statistics.itemsCrafted++; + Badges.validateItemsCrafted(); + + try { + Dungeon.saveAll(); + } catch (IOException e) { + ShatteredPixelDungeon.reportException(e); + } + + synchronized (inputs) { + for (int i = 0; i < inputs.length; i++) { + if (inputs[i] != null && inputs[i].item() != null) { + Item item = inputs[i].item(); + if (item.quantity() <= 0) { + inputs[i].item(null); + } else { + inputs[i].slot.updateText(); + } + } + } + } + + updateState(); + //we reset the quantity in case the result was merged into another stack in the backpack + result.quantity(resultQuantity); + outputs[0].item(result); + } public void populate(ArrayList toFind, Belongings inventory){ clearSlots(); 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 f1dc09ab3..634914ad4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -51,13 +51,13 @@ public class ItemSpriteSheet { public static final int WAND_HOLDER = PLACEHOLDERS+4; public static final int RING_HOLDER = PLACEHOLDERS+5; public static final int ARTIFACT_HOLDER = PLACEHOLDERS+6; - public static final int FOOD_HOLDER = PLACEHOLDERS+7; - public static final int BOMB_HOLDER = PLACEHOLDERS+8; - public static final int POTION_HOLDER = PLACEHOLDERS+9; - public static final int SCROLL_HOLDER = PLACEHOLDERS+11; - public static final int SEED_HOLDER = PLACEHOLDERS+10; - public static final int STONE_HOLDER = PLACEHOLDERS+12; - public static final int CATA_HOLDER = PLACEHOLDERS+13; + public static final int TRINKET_HOLDER = PLACEHOLDERS+7; + public static final int FOOD_HOLDER = PLACEHOLDERS+8; + public static final int BOMB_HOLDER = PLACEHOLDERS+9; + public static final int POTION_HOLDER = PLACEHOLDERS+10; + public static final int SEED_HOLDER = PLACEHOLDERS+11; + public static final int SCROLL_HOLDER = PLACEHOLDERS+12; + public static final int STONE_HOLDER = PLACEHOLDERS+13; public static final int ELIXIR_HOLDER = PLACEHOLDERS+14; public static final int SPELL_HOLDER = PLACEHOLDERS+15; static{ @@ -68,13 +68,13 @@ public class ItemSpriteSheet { assignItemRect(WAND_HOLDER, 14, 14); assignItemRect(RING_HOLDER, 8, 10); assignItemRect(ARTIFACT_HOLDER, 15, 15); + assignItemRect(TRINKET_HOLDER, 16, 11); assignItemRect(FOOD_HOLDER, 15, 11); assignItemRect(BOMB_HOLDER, 10, 13); assignItemRect(POTION_HOLDER, 12, 14); assignItemRect(SEED_HOLDER, 10, 10); assignItemRect(SCROLL_HOLDER, 15, 14); assignItemRect(STONE_HOLDER, 14, 12); - assignItemRect(CATA_HOLDER, 6, 15); assignItemRect(ELIXIR_HOLDER, 12, 14); assignItemRect(SPELL_HOLDER, 8, 16); } 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 a0492dcaf..4424b0b7c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java @@ -214,7 +214,17 @@ public class WndJournal extends WndTabbed { private RedButton[] pageButtons; private static final int NUM_BUTTONS = 9; - private static final int[] spriteIndexes = {10, 12, 7, 9, 11, 8, 3, 14, 15}; + private static final int[] sprites = { + ItemSpriteSheet.SEED_HOLDER, + ItemSpriteSheet.STONE_HOLDER, + ItemSpriteSheet.FOOD_HOLDER, + ItemSpriteSheet.POTION_HOLDER, + ItemSpriteSheet.SCROLL_HOLDER, + ItemSpriteSheet.BOMB_HOLDER, + ItemSpriteSheet.MISSILE_HOLDER, + ItemSpriteSheet.ELIXIR_HOLDER, + ItemSpriteSheet.SPELL_HOLDER + }; public static int currentPageIdx = 0; @@ -237,7 +247,7 @@ public class WndJournal extends WndTabbed { } }; if (Document.ALCHEMY_GUIDE.isPageFound(i)) { - pageButtons[i].icon(new ItemSprite(ItemSpriteSheet.SOMETHING + spriteIndexes[i], null)); + pageButtons[i].icon(new ItemSprite(sprites[i], null)); } else { pageButtons[i].icon(new ItemSprite(ItemSpriteSheet.SOMETHING, null)); pageButtons[i].enable(false);