From a00355b71289d38f89f017b1fbb85d0e07f0f053 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 25 Feb 2024 17:18:10 -0500 Subject: [PATCH] v2.4.0: replaced catalysts with a new unstable brew and spell --- .../assets/messages/items/items.properties | 12 +-- .../messages/journal/journal.properties | 4 +- .../main/assets/messages/misc/misc.properties | 2 +- core/src/main/assets/sprites/items.png | Bin 22429 -> 22442 bytes .../ShatteredPixelDungeon.java | 6 ++ .../shatteredpixeldungeon/items/Recipe.java | 8 +- .../items/potions/Potion.java | 4 +- .../items/potions/brews/BlizzardBrew.java | 1 - .../items/potions/brews/InfernalBrew.java | 1 - .../items/potions/brews/ShockingBrew.java | 1 - .../UnstableBrew.java} | 96 ++++++++++-------- .../potions/elixirs/ElixirOfDragonsBlood.java | 1 - .../potions/elixirs/ElixirOfIcyTouch.java | 1 - .../items/potions/elixirs/ElixirOfMight.java | 1 - .../potions/elixirs/ElixirOfToxicEssence.java | 1 - .../items/rings/RingOfWealth.java | 6 +- .../items/scrolls/ScrollOfTransmutation.java | 5 +- .../items/spells/Alchemize.java | 3 +- .../items/spells/Recycle.java | 3 +- ...ArcaneCatalyst.java => UnstableSpell.java} | 43 ++++---- .../journal/Document.java | 1 - .../sprites/ItemSpriteSheet.java | 16 +-- .../shatteredpixeldungeon/ui/QuickRecipe.java | 16 +-- .../ui/changelist/v0_7_X_Changes.java | 2 +- .../windows/WndJournal.java | 6 +- 25 files changed, 116 insertions(+), 124 deletions(-) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/{AlchemicalCatalyst.java => brews/UnstableBrew.java} (57%) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/{ArcaneCatalyst.java => UnstableSpell.java} (88%) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index c3c9d649d..69030f8bc 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -678,9 +678,6 @@ items.potions.potion.shatter=The flask shatters and the liquid splashes harmless items.potions.potion$placeholder.name=potion items.potions.potion$seedtopotion.name=Random Potion -items.potions.alchemicalcatalyst.name=alchemical catalyst -items.potions.alchemicalcatalyst.desc=This thin vial of magical liquid is made from the deconstructed essence of a potion. The liquid is translucent, and glows with shifting colors of the rainbow.\n\nThis catalyst is primarily useful as an alchemy ingredient, but you can also use it directly to get the effect of a random potion. - items.potions.potionofexperience.name=potion of experience items.potions.potionofexperience.desc=The storied experiences of multitudes of battles reduced to liquid form, this draught will instantly raise your experience level. @@ -744,7 +741,8 @@ items.potions.brews.infernalbrew.desc=When shattered, this brew will unleash a r items.potions.brews.shockingbrew.name=shocking brew items.potions.brews.shockingbrew.desc=When shattered, this brew will unleash an electrical storm in a wide area around the location it breaks at. - +items.potions.brews.unstablebrew.name=unstable brew +items.potions.brews.unstablebrew.desc=This magical brew glows with shifting colors of the rainbow. When drank or thrown it will trigger the effect of a random potion. ###elixirs items.potions.elixirs.elixirofarcanearmor.name=elixir of arcane armor @@ -1166,9 +1164,6 @@ items.spells.alchemize$wndalchemizeitem.energize=Turn into %d energy items.spells.alchemize$wndalchemizeitem.energize_1=Turn 1 into %d energy items.spells.alchemize$wndalchemizeitem.energize_all=Turn all into %d energy -items.spells.arcanecatalyst.name=arcane catalyst -items.spells.arcanecatalyst.desc=This ball of golden dust is made from the deconstructed essence of a scroll. It glimmers in the darkness of the dungeon.\n\nThis catalyst is primarily useful as an alchemy ingredient, but you can also channel the magic directly to get the effect of a random scroll. - items.spells.beaconofreturning.name=beacon of returning items.spells.beaconofreturning.preventing=The strong magic aura of this place prevents you from using the spell! items.spells.beaconofreturning.creatures=The Psychic aura of neighbouring creatures doesn't allow you to teleport at this moment. @@ -1229,6 +1224,9 @@ items.spells.telekineticgrab.cant_grab=You can't grab that. items.spells.telekineticgrab.no_target=There's nothing to grab there. items.spells.telekineticgrab.desc=This spell allows the caster to remotely grab all items at a location, or all thrown weapons stuck to an enemy!\n\nIt can't be used to grab items that someone else owns, or to grab containers like chests. +items.spells.unstablespell.name=unstable spell +items.spells.unstablespell.desc=This small black square crystal has shifting runic symbols on each of its surfaces. When activated, it will trigger the effect of a random scroll. + items.spells.wildenergy.name=wild energy items.spells.wildenergy.desc=This spell contains some of the cursed energy which powered DM-300. When cast, it will recharge your wands and worn artifacts, while also triggering a random cursed wand effect. You are able to choose a direction for this cursed magic to shoot in, however. diff --git a/core/src/main/assets/messages/journal/journal.properties b/core/src/main/assets/messages/journal/journal.properties index 9e48ccb59..f5198805c 100644 --- a/core/src/main/assets/messages/journal/journal.properties +++ b/core/src/main/assets/messages/journal/journal.properties @@ -41,10 +41,8 @@ journal.document.alchemy_guide.bombs.title=Enhanced Bombs journal.document.alchemy_guide.bombs.body=A standard black powder bomb can be mixed with a specific item to create an enhanced bomb. journal.document.alchemy_guide.weapons.title=Enhancing Weapons journal.document.alchemy_guide.weapons.body=Some of the lighter or more magical weapons can be used in alchemy!\n\nEach thrown weapon produces enough liquid metal to fully repair another weapon of the same level and tier.\n\nOne wand will produce enough arcane resin to upgrade two wands of the same level, but no higher than +3. -journal.document.alchemy_guide.catalysts.title=Catalysts -journal.document.alchemy_guide.catalysts.body=Catalysts are made by combining a scroll or potion with a single seed or runestone. If the pair of items match, the alchemical energy cost is removed.\n\nCatalysts are most useful as components in recipes covered in the next two pages, but also can be used in a pinch for a random effect. journal.document.alchemy_guide.brews_elixirs.title=Brews and Elixirs -journal.document.alchemy_guide.brews_elixirs.body=Brews and elixirs are advanced potions which provide a variety of effects, and usually have a single use. +journal.document.alchemy_guide.brews_elixirs.body=Brews and elixirs are advanced potions with a variety of effects, usually with a single use. journal.document.alchemy_guide.spells.title=Spells journal.document.alchemy_guide.spells.body=Spells are contained in crystals and provide a variety of effects, usually with multiple uses. diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index 18f23a337..2f059e15a 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -188,7 +188,7 @@ challenges.no_food_desc=Food's already scarce, but you have to watch your portio challenges.no_armor=Faith is my armor challenges.no_armor_desc=You'll need faith in yourself, as your armor won't do much!\n\n- Base blocking power reduced for all armor except cloth\n- All armor now gains very little blocking when upgraded\n- Earthen guardian's defensive power is also significantly reduced challenges.no_healing=Pharmacophobia -challenges.no_healing_desc=Healing potions sure are handy, unfortunately you're allergic!\n\n- Potions of healing, items made using potions of healing, and sunfruit will poison the hero instead of healing them\n- Alchemical catalysts cannot randomly poison or heal the hero\n- These items still work normally for other characters. +challenges.no_healing_desc=Healing potions sure are handy, unfortunately you're allergic!\n\n- Potions of healing, items that use potions of healing in their recipe, and sunfruit will poison the hero instead of healing them\n- Unstable brews cannot randomly poison or heal the hero\n- These items still work normally for other characters. challenges.no_herbalism=Barren land challenges.no_herbalism_desc=There seems to be no clean water left in this accursed dungeon...\n\n- Dew drops are removed\n- Plants are removed\n- Seeds still appear, but will not take root challenges.swarm_intelligence=Swarm intelligence diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 349cbd64edec5e4bb14cdb820886edcea406fac1..72668e18cb7dcd521b1aed307bc70f9a2a25293e 100644 GIT binary patch literal 22442 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

$@~=Yl|BtPcL!*O6G)i-_t?`|{dwvZ7>a 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 literal 22429 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 canThrowPots = new HashSet<>(); static{ - canThrowPots.add(AlchemicalCatalyst.class); - canThrowPots.add(PotionOfPurity.class); canThrowPots.add(PotionOfLevitation.class); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/BlizzardBrew.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/BlizzardBrew.java index 546556417..447eb0f63 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/BlizzardBrew.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/BlizzardBrew.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blizzard; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/InfernalBrew.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/InfernalBrew.java index d2e554f79..ef34a825e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/InfernalBrew.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/InfernalBrew.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Inferno; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/ShockingBrew.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/ShockingBrew.java index db32ae81a..3b1604134 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/ShockingBrew.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/ShockingBrew.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Electricity; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/AlchemicalCatalyst.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/UnstableBrew.java similarity index 57% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/AlchemicalCatalyst.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/UnstableBrew.java index 2224946a4..3261e52a8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/AlchemicalCatalyst.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/UnstableBrew.java @@ -19,14 +19,25 @@ * along with this program. If not, see */ -package com.shatteredpixel.shatteredpixeldungeon.items.potions; +package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHaste; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion; -import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.Random; @@ -35,26 +46,37 @@ import com.watabou.utils.Reflection; import java.util.ArrayList; import java.util.HashMap; -public class AlchemicalCatalyst extends Potion { - +public class UnstableBrew extends Brew { + { - image = ItemSpriteSheet.POTION_CATALYST; - + image = ItemSpriteSheet.BREW_UNSTABLE; } - + + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + actions.add(AC_DRINK); + return actions; + } + + @Override + public String defaultAction() { + return AC_CHOOSE; + } + private static HashMap, Float> potionChances = new HashMap<>(); - static{ - potionChances.put(PotionOfHealing.class, 3f); - potionChances.put(PotionOfMindVision.class, 2f); - potionChances.put(PotionOfFrost.class, 2f); - potionChances.put(PotionOfLiquidFlame.class, 2f); - potionChances.put(PotionOfToxicGas.class, 2f); - potionChances.put(PotionOfHaste.class, 2f); - potionChances.put(PotionOfInvisibility.class, 2f); - potionChances.put(PotionOfLevitation.class, 2f); - potionChances.put(PotionOfParalyticGas.class, 2f); - potionChances.put(PotionOfPurity.class, 2f); - potionChances.put(PotionOfExperience.class, 1f); + static { + potionChances.put(PotionOfHealing.class, 3f); + potionChances.put(PotionOfMindVision.class, 2f); + potionChances.put(PotionOfFrost.class, 2f); + potionChances.put(PotionOfLiquidFlame.class, 2f); + potionChances.put(PotionOfToxicGas.class, 2f); + potionChances.put(PotionOfHaste.class, 2f); + potionChances.put(PotionOfInvisibility.class, 2f); + potionChances.put(PotionOfLevitation.class, 2f); + potionChances.put(PotionOfParalyticGas.class, 2f); + potionChances.put(PotionOfPurity.class, 2f); + potionChances.put(PotionOfExperience.class, 1f); } @Override @@ -80,11 +102,12 @@ public class AlchemicalCatalyst extends Potion { public boolean isKnown() { return true; } - + + //lower values, as it's cheaper to make @Override public int value() { return 40 * quantity; -} + } @Override public int energyVal() { @@ -96,36 +119,29 @@ public class AlchemicalCatalyst extends Potion { @Override public boolean testIngredients(ArrayList ingredients) { boolean potion = false; - boolean secondary = false; - + boolean seed = false; + for (Item i : ingredients){ - if (i instanceof Plant.Seed || i instanceof Runestone){ - secondary = true; - //if it is a regular or exotic potion + if (i instanceof Plant.Seed) { + seed = true; + //if it is a regular or exotic potion } else if (ExoticPotion.regToExo.containsKey(i.getClass()) || ExoticPotion.regToExo.containsValue(i.getClass())) { potion = true; } } - - return potion && secondary; + + return potion && seed; } - + @Override public int cost(ArrayList ingredients) { - for (Item i : ingredients){ - if (i instanceof Plant.Seed){ - return 0; - } else if (i instanceof Runestone){ - return 1; - } - } - return 0; + return 2; } - + @Override public Item brew(ArrayList ingredients) { - + for (Item i : ingredients){ i.quantity(i.quantity()-1); } @@ -135,7 +151,7 @@ public class AlchemicalCatalyst extends Potion { @Override public Item sampleOutput(ArrayList ingredients) { - return new AlchemicalCatalyst(); + return new UnstableBrew(); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfDragonsBlood.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfDragonsBlood.java index 0660a6c3d..97c4d2da8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfDragonsBlood.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfDragonsBlood.java @@ -26,7 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FireImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfDragonsBreath; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.noosa.audio.Sample; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfIcyTouch.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfIcyTouch.java index bd6c52f1f..bec2a3622 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfIcyTouch.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfIcyTouch.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FrostImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.SnowParticle; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfSnapFreeze; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java index 5b42b2385..12a795d65 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java @@ -26,7 +26,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfToxicEssence.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfToxicEssence.java index 351347803..43dd90916 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfToxicEssence.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfToxicEssence.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ToxicImbue; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PoisonParticle; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java index 78786ac38..eb3c6eabc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/rings/RingOfWealth.java @@ -31,12 +31,12 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.UnstableBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll; -import com.shatteredpixel.shatteredpixeldungeon.items.spells.ArcaneCatalyst; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.UnstableSpell; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -235,7 +235,7 @@ public class RingOfWealth extends Ring { i = Generator.randomUsingDefaults(Generator.Category.SCROLL); return Reflection.newInstance(ExoticScroll.regToExo.get(i.getClass())); case 3: - return Random.Int(2) == 0 ? new ArcaneCatalyst() : new AlchemicalCatalyst(); + return Random.Int(2) == 0 ? new UnstableBrew() : new UnstableSpell(); case 4: return new Bomb(); case 5: diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTransmutation.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTransmutation.java index 8f61d37c2..24d0dbc5b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTransmutation.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfTransmutation.java @@ -31,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.Elixir; @@ -75,9 +74,9 @@ public class ScrollOfTransmutation extends InventoryScroll { } else if (item instanceof MissileWeapon){ return item.getClass() != Dart.class; - //all regular or exotic potions. No brews, elixirs, or catalysts + //all regular or exotic potions. No brews or elixirs } else if (item instanceof Potion){ - return !(item instanceof Elixir || item instanceof Brew || item instanceof AlchemicalCatalyst); + return !(item instanceof Elixir || item instanceof Brew); //all regular or exotic scrolls, except itself } else if (item instanceof Scroll){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Alchemize.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Alchemize.java index d48331da8..67e0ebe11 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Alchemize.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Alchemize.java @@ -56,13 +56,12 @@ public class Alchemize extends Spell { @Override public int value() { - //cheap, as ingredients are cheap + //lower value, as it's very cheap to make (and also sold at shops) return (int)(20 * (quantity/8f)); } @Override public int energyVal() { - //also cheap, same reason return (int)(4 * (quantity/8f)); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Recycle.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Recycle.java index 8fad7b2cb..1954c1b1c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Recycle.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Recycle.java @@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Transmuting; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.Brew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.Elixir; @@ -51,7 +50,7 @@ public class Recycle extends InventorySpell { @Override protected boolean usableOnItem(Item item) { - return (item instanceof Potion && !(item instanceof Elixir || item instanceof Brew || item instanceof AlchemicalCatalyst)) || + return (item instanceof Potion && !(item instanceof Elixir || item instanceof Brew)) || item instanceof Scroll || item instanceof Plant.Seed || item instanceof Runestone || diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ArcaneCatalyst.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/UnstableSpell.java similarity index 88% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ArcaneCatalyst.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/UnstableSpell.java index 7b2a42d4c..8ea36d076 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ArcaneCatalyst.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/UnstableSpell.java @@ -37,7 +37,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll; import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone; -import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.Random; import com.watabou.utils.Reflection; @@ -45,10 +44,10 @@ import com.watabou.utils.Reflection; import java.util.ArrayList; import java.util.HashMap; -public class ArcaneCatalyst extends Spell { - +public class UnstableSpell extends Spell { + { - image = ItemSpriteSheet.SCROLL_CATALYST; + image = ItemSpriteSheet.UNSTABLE_SPELL; } private static HashMap, Float> scrollChances = new HashMap<>(); @@ -77,7 +76,8 @@ public class ArcaneCatalyst extends Spell { curItem = s; s.doRead(); } - + + //lower values, as it's cheaper to make @Override public int value() { return 40 * quantity; @@ -89,50 +89,43 @@ public class ArcaneCatalyst extends Spell { } public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe { - + @Override public boolean testIngredients(ArrayList ingredients) { boolean scroll = false; - boolean secondary = false; - + boolean stone = false; + for (Item i : ingredients){ - if (i instanceof Plant.Seed || i instanceof Runestone){ - secondary = true; + if (i instanceof Runestone){ + stone = true; //if it is a regular or exotic potion } else if (ExoticScroll.regToExo.containsKey(i.getClass()) || ExoticScroll.regToExo.containsValue(i.getClass())) { scroll = true; } } - - return scroll && secondary; + + return scroll && stone; } @Override public int cost(ArrayList ingredients) { - for (Item i : ingredients){ - if (i instanceof Plant.Seed){ - return 1; - } else if (i instanceof Runestone){ - return 0; - } - } - return 0; + return 2; } - + @Override public Item brew(ArrayList ingredients) { - + for (Item i : ingredients){ i.quantity(i.quantity()-1); } - + return sampleOutput(null); } - + @Override public Item sampleOutput(ArrayList ingredients) { - return new ArcaneCatalyst(); + return new UnstableSpell(); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java index 51d4cdb20..ca07a0d59 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java @@ -258,7 +258,6 @@ public enum Document { //given in prison ALCHEMY_GUIDE.pagesStates.put("Bombs", debug ? READ : NOT_FOUND); ALCHEMY_GUIDE.pagesStates.put("Weapons", debug ? READ : NOT_FOUND); - ALCHEMY_GUIDE.pagesStates.put("Catalysts", debug ? READ : NOT_FOUND); ALCHEMY_GUIDE.pagesStates.put("Brews_Elixirs", debug ? READ : NOT_FOUND); ALCHEMY_GUIDE.pagesStates.put("Spells", debug ? READ : NOT_FOUND); 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 a0b2f3b2c..f1dc09ab3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -483,13 +483,11 @@ public class ItemSpriteSheet { public static final int SCROLL_BERKANAN = SCROLLS+9; public static final int SCROLL_ODAL = SCROLLS+10; public static final int SCROLL_TIWAZ = SCROLLS+11; - - public static final int SCROLL_CATALYST = SCROLLS+13; - public static final int ARCANE_RESIN = SCROLLS+14; + + public static final int ARCANE_RESIN = SCROLLS+13; static { for (int i = SCROLLS; i < SCROLLS+16; i++) assignItemRect(i, 15, 14); - assignItemRect(SCROLL_CATALYST, 12, 11); assignItemRect(ARCANE_RESIN , 12, 11); } @@ -542,12 +540,11 @@ public class ItemSpriteSheet { public static final int POTION_CHARCOAL = POTIONS+9; public static final int POTION_SILVER = POTIONS+10; public static final int POTION_IVORY = POTIONS+11; - public static final int POTION_CATALYST = POTIONS+13; - public static final int LIQUID_METAL = POTIONS+14; + + public static final int LIQUID_METAL = POTIONS+13; static { for (int i = POTIONS; i < POTIONS+16; i++) assignItemRect(i, 12, 14); - assignItemRect(POTION_CATALYST, 6, 15); assignItemRect(LIQUID_METAL, 8, 15); } @@ -593,6 +590,7 @@ public class ItemSpriteSheet { public static final int BREW_SHOCKING = BREWS+2; public static final int BREW_CAUSTIC = BREWS+3; 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 public static final int ELIXIR_HONEY = ELIXIRS+0; @@ -620,6 +618,7 @@ public class ItemSpriteSheet { public static final int RETURN_BEACON = SPELLS+4; public static final int SUMMON_ELE = SPELLS+5; + public static final int UNSTABLE_SPELL = SPELLS+8; public static final int RECLAIM_TRAP = SPELLS+9; public static final int CURSE_INFUSE = SPELLS+11; @@ -633,7 +632,8 @@ public class ItemSpriteSheet { assignItemRect(WILD_ENERGY, 8, 16); assignItemRect(RETURN_BEACON, 8, 16); assignItemRect(SUMMON_ELE, 8, 16); - + + assignItemRect(UNSTABLE_SPELL, 12, 13); assignItemRect(RECLAIM_TRAP, 11, 11); assignItemRect(CURSE_INFUSE, 10, 15); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java index e83f26cb2..117bff224 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java @@ -35,13 +35,13 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie; import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty; import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.AlchemicalCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.AquaBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.UnstableBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfArcaneArmor; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood; @@ -54,7 +54,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotio import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ExoticScroll; import com.shatteredpixel.shatteredpixeldungeon.items.spells.Alchemize; -import com.shatteredpixel.shatteredpixeldungeon.items.spells.ArcaneCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning; import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; @@ -63,6 +62,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.spells.ReclaimTrap; import com.shatteredpixel.shatteredpixeldungeon.items.spells.Recycle; 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.stones.Runestone; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; @@ -353,19 +353,12 @@ public class QuickRecipe extends Component { new ArcaneResin())); return result; case 7: - result.add(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Plant.Seed.PlaceHolder())), new AlchemicalCatalyst())); - result.add(new QuickRecipe(new AlchemicalCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Runestone.PlaceHolder())), new AlchemicalCatalyst())); - result.add(null); - result.add(null); - result.add(new QuickRecipe(new ArcaneCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Runestone.PlaceHolder())), new ArcaneCatalyst())); - result.add(new QuickRecipe(new ArcaneCatalyst.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Plant.Seed.PlaceHolder())), new ArcaneCatalyst())); - return result; - case 8: result.add(new QuickRecipe(new CausticBrew.Recipe())); result.add(new QuickRecipe(new BlizzardBrew.Recipe())); result.add(new QuickRecipe(new InfernalBrew.Recipe())); result.add(new QuickRecipe(new AquaBrew.Recipe())); result.add(new QuickRecipe(new ShockingBrew.Recipe())); + result.add(new QuickRecipe(new UnstableBrew.Recipe(), new ArrayList<>(Arrays.asList(new Potion.PlaceHolder(), new Plant.Seed.PlaceHolder())), new UnstableBrew())); result.add(null); result.add(new QuickRecipe(new ElixirOfHoneyedHealing.Recipe())); result.add(new QuickRecipe(new ElixirOfAquaticRejuvenation.Recipe())); @@ -376,13 +369,14 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe(new ElixirOfFeatherFall.Recipe())); result.add(new QuickRecipe(new ElixirOfArcaneArmor.Recipe())); return result; - case 9: + case 8: result.add(new QuickRecipe(new TelekineticGrab.Recipe())); result.add(new QuickRecipe(new PhaseShift.Recipe())); result.add(new QuickRecipe(new WildEnergy.Recipe())); result.add(new QuickRecipe(new BeaconOfReturning.Recipe())); result.add(new QuickRecipe(new SummonElemental.Recipe())); result.add(null); + result.add(new QuickRecipe(new UnstableSpell.Recipe(), new ArrayList<>(Arrays.asList(new Scroll.PlaceHolder(), new Runestone.PlaceHolder())), new UnstableSpell())); result.add(new QuickRecipe(new ReclaimTrap.Recipe())); result.add(null); result.add(new QuickRecipe(new Alchemize.Recipe(), new ArrayList<>(Arrays.asList(new Plant.Seed.PlaceHolder(), new Runestone.PlaceHolder())), new Alchemize().quantity(8))); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_7_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_7_X_Changes.java index 5094d38e4..65ebfad87 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_7_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_7_X_Changes.java @@ -461,7 +461,7 @@ public class v0_7_X_Changes { "\n" + "This update also made some substantial design changes to enchantments. Since enchantments were more accessible after v0.7.0, I wanted to adjust them to be more about gameplay variety and less about raw damage. Prior to this update several of the most common enchantments were essentially direct increases to damage. Changing this was a good overall direction, but some of the specific changes in v0.7.2 missed the mark, and so I had to revisit enchantment mechanics shortly after.")); - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.POTION_CATALYST, null), "Catalysts!", + changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.BREW_UNSTABLE, null), "Catalysts!", "Added two new recipes: _Alchemical Catalysts_ and _Arcane Catalysts._\n\n" + "These catalysts are made with any potion/scroll, and a seed/runestone. They replace many specific items for higher-cost recipes. Alchemy should be much more flexible now!\n\n" + "Additional Alchemy Changes:\n\n" + 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 3800ac43a..a0492dcaf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndJournal.java @@ -212,9 +212,9 @@ public class WndJournal extends WndTabbed { public static class AlchemyTab extends Component { private RedButton[] pageButtons; - private static final int NUM_BUTTONS = 10; + private static final int NUM_BUTTONS = 9; - private static final int[] spriteIndexes = {10, 12, 7, 9, 11, 8, 3, 13, 14, 15}; + private static final int[] spriteIndexes = {10, 12, 7, 9, 11, 8, 3, 14, 15}; public static int currentPageIdx = 0; @@ -277,7 +277,7 @@ public class WndJournal extends WndTabbed { if (i == 4){ y += ITEM_HEIGHT; x = 0; - buttonWidth = width()/5; + buttonWidth = width()/4; } } }