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 5e7fa9f95..170e0bf66 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -46,6 +46,16 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfVi import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion; 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.AquaBlast; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.BeaconOfReturning; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.CurseInfusion; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalPorter; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.PhaseShift; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.ReclaimTrap; +import com.shatteredpixel.shatteredpixeldungeon.items.spells.Recycle; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart; @@ -169,6 +179,16 @@ public abstract class Recipe { new InfernalBrew.Recipe(), new ShockingBrew.Recipe(), new WickedBrew.Recipe(), + new Alchemize.Recipe(), + new AquaBlast.Recipe(), + new BeaconOfReturning.Recipe(), + new CurseInfusion.Recipe(), + new FeatherFall.Recipe(), + new MagicalInfusion.Recipe(), + new MagicalPorter.Recipe(), + new PhaseShift.Recipe(), + new ReclaimTrap.Recipe(), + new Recycle.Recipe(), new StewedMeat.twoMeat() }; 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 b23843eaf..384bfdafd 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 @@ -23,6 +23,8 @@ package com.shatteredpixel.shatteredpixeldungeon.items.spells; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -55,4 +57,18 @@ public class Alchemize extends Spell implements AlchemyScene.AlchemyProvider { public void spendEnergy(int reduction) { //do nothing } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfRecharging.class, PotionOfLiquidFlame.class}; + inQuantity = new int[]{1, 1}; + + cost = 6; + + output = Alchemize.class; + outQuantity = 3; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java index 32cf22d12..9e3fe5caa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java @@ -28,6 +28,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfStormClouds; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -68,4 +70,18 @@ public class AquaBlast extends TargetedSpell { Buff.affect(target, Paralysis.class, 0f); } } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfIdentify.class, PotionOfStormClouds.class}; + inQuantity = new int[]{1, 1}; + + cost = 4; + + output = AquaBlast.class; + outQuantity = 8; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java index da0ef7c24..f8bcb3611 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/BeaconOfReturning.java @@ -29,7 +29,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPassage; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene; @@ -172,4 +174,18 @@ public class BeaconOfReturning extends Spell { returnDepth = bundle.getInt( DEPTH ); returnPos = bundle.getInt( POS ); } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfPassage.class, ScrollOfMagicMapping.class}; + inQuantity = new int[]{1, 1}; + + cost = 12; + + output = BeaconOfReturning.class; + outQuantity = 4; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/CurseInfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/CurseInfusion.java index ebe6929b6..5f120c735 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/CurseInfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/CurseInfusion.java @@ -23,6 +23,8 @@ package com.shatteredpixel.shatteredpixeldungeon.items.spells; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Boomerang; @@ -59,4 +61,18 @@ public class CurseInfusion extends InventorySpell { } } } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfRemoveCurse.class, MetalShard.class}; + inQuantity = new int[]{1, 1}; + + cost = 2; + + output = CurseInfusion.class; + outQuantity = 3; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java index 776579530..0314e0956 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java @@ -25,6 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -52,4 +54,18 @@ public class FeatherFall extends Spell { public static class FeatherBuff extends FlavourBuff { //does nothing, just waits to be triggered by chasm falling } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfLullaby.class, PotionOfLevitation.class}; + inQuantity = new int[]{1, 1}; + + cost = 8; + + output = FeatherFall.class; + outQuantity = 2; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java index f9db87045..07bcfa0fd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java @@ -26,6 +26,8 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Enchanting; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; +import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -59,4 +61,18 @@ public class MagicalInfusion extends InventorySpell { public int price() { return 100 * quantity; } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfUpgrade.class, StoneOfEnchantment.class}; + inQuantity = new int[]{1, 1}; + + cost = 3; + + output = MagicalInfusion.class; + outQuantity = 1; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalPorter.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalPorter.java index f6af6ae41..3e0ba90d8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalPorter.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalPorter.java @@ -23,7 +23,9 @@ package com.shatteredpixel.shatteredpixeldungeon.items.spells; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.MerchantsBeacon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -60,4 +62,17 @@ public class MagicalPorter extends InventorySpell { //TODO vfx } + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{MirrorImage.class, MerchantsBeacon.class}; + inQuantity = new int[]{1, 1}; + + cost = 2; + + output = MagicalPorter.class; + outQuantity = 10; + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java index bc81b8ea8..bd84b4dbd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java @@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTerror; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; @@ -75,4 +76,18 @@ public class PhaseShift extends TargetedSpell { } } + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfTeleportation.class, ScrollOfTerror.class}; + inQuantity = new int[]{1, 1}; + + cost = 5; + + output = PhaseShift.class; + outQuantity = 8; + } + + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ReclaimTrap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ReclaimTrap.java index 2acdae7d2..64c0528c9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ReclaimTrap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/ReclaimTrap.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArtifactRecharge; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Recharging; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -55,4 +56,18 @@ public class ReclaimTrap extends TargetedSpell { } } + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfRecharging.class, MetalShard.class}; + inQuantity = new int[]{1, 1}; + + cost = 5; + + output = ReclaimTrap.class; + outQuantity = 4; + } + + } + } 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 eb858ae5c..63ebc5a58 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 @@ -25,6 +25,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTransmutation; import com.shatteredpixel.shatteredpixeldungeon.items.stones.Runestone; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; @@ -66,4 +68,18 @@ public class Recycle extends InventorySpell { item instanceof Plant.Seed || item instanceof Runestone; } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{ScrollOfTransmutation.class, ScrollOfMirrorImage.class}; + inQuantity = new int[]{1, 1}; + + cost = 6; + + output = Recycle.class; + outQuantity = 5; + } + + } } 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 0f4b847d2..89accba67 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Document.java @@ -111,9 +111,9 @@ public enum Document { ALCHEMY_GUIDE.pages.put("Heal_Elixirs", false); ALCHEMY_GUIDE.pages.put("AOE_Brews", false); ALCHEMY_GUIDE.pages.put("Imbue_Elixirs", false); - ALCHEMY_GUIDE.pages.put("teaser1", false); - ALCHEMY_GUIDE.pages.put("teaser2", false); - ALCHEMY_GUIDE.pages.put("teaser3", false); + ALCHEMY_GUIDE.pages.put("Tele_Spells", false); + ALCHEMY_GUIDE.pages.put("Item_Spells", false); + ALCHEMY_GUIDE.pages.put("Enviro_Spells", false); } private static final String DOCUMENTS = "documents"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java index b0de353a7..a1e58de31 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/LaboratoryRoom.java @@ -86,8 +86,7 @@ public class LaboratoryRoom extends SpecialRoom { //drops a page every room for now //TODO make pages rarer as players get more, once more alchemy comes out - //3 to ensure teaser pages aren't found - if(missingPages.size() > 3){ + if(!missingPages.isEmpty()){ AlchemyPage p = new AlchemyPage(); p.page(missingPages.get(0)); int pos; diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/journal/journal.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/journal/journal.properties index 1a34cb463..992066f1e 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/journal/journal.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/journal/journal.properties @@ -36,13 +36,19 @@ journal.document.alchemy_guide.food.body=Not all recipes involve magical potions 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. The amount of energy needed varies by the item used.\n\nThe following items can produce an enhanced bomb:\n- Potion of Liquid Flame\n- Potion of Frost\n- Potion of Healing\n- Potion of Invisibility\n- Scroll of Recharging\n- Scroll of Remove Curse\n- Scroll of Mirror Image\n- Scroll of Rage\n- Blob of Goo\n- Cursed Metal Shard journal.document.alchemy_guide.combo_brews.title=Combination Brews -journal.document.alchemy_guide.combo_brews.body=Combination brews are the most simple form of brew, combining the effects of two harmful potions into one.\n\nA wicked brew is created by mixing a potion of toxic gas with a potion of paralytic gas.\n\nA frigid brew is created by mixing a potion of frost with a potion of storm clouds.\n\nA frostfire brew is created by mixing a potion of liquid flame with a potion of snap freeze. +journal.document.alchemy_guide.combo_brews.body=Combination brews are the most simple form of brew, combining the effects of two harmful potions into one.\n\n\nA wicked brew is created by mixing a potion of toxic gas with a potion of paralytic gas.\n\nA frigid brew is created by mixing a potion of frost with a potion of storm clouds.\n\nA frostfire brew is created by mixing a potion of liquid flame with a potion of snap freeze. journal.document.alchemy_guide.heal_elixirs.title=Healing Elixirs -journal.document.alchemy_guide.heal_elixirs.body=Healing elixirs are also quite simple, combining healing and another effect into one item.\n\nAn elixir of restoration is created by mixing a potion of healing with a potion of cleansing.\n\nAn elixir of vitality is created by mixing a potion of healing with a potion of shielding.\n\nAn elixir of honeyed healing is created by mixing a potion of healing with a shattered honeypot.\n\nAn elixir of aquatic rejuvenation is created by mixing a potion of healing and a blob of goo. +journal.document.alchemy_guide.heal_elixirs.body=Healing elixirs are also quite simple, combining healing and another effect into one item.\n\n\nAn elixir of restoration is created by mixing a potion of healing with a potion of cleansing.\n\nAn elixir of vitality is created by mixing a potion of healing with a potion of shielding.\n\nAn elixir of honeyed healing is created by mixing a potion of healing with a shattered honeypot.\n\nAn elixir of aquatic rejuvenation is created by mixing a potion of healing and a blob of goo. journal.document.alchemy_guide.aoe_brews.title=Area of Effect Brews -journal.document.alchemy_guide.aoe_brews.body=Area of effect brews spread a harmful effect over a large area. They are more expensive than combination brews, but also more powerful.\n\nAn infernal brew is created by mixing a potion of dragon's breath and a potion of liquid flame.\n\nA blizzard brew is created by mixing a potion of snap freeze and a potion of frost.\n\nA shocking brew is created by mixing a potion of paralytic gas and a potion of storm clouds.\n\nA caustic brew is created by mixing a potion of toxic gas and a blob of goo. +journal.document.alchemy_guide.aoe_brews.body=Area of effect brews spread a harmful effect over a large area. They are more expensive than combination brews, but also more powerful.\n\n\nAn infernal brew is created by mixing a potion of dragon's breath and a potion of liquid flame.\n\nA blizzard brew is created by mixing a potion of snap freeze and a potion of frost.\n\nA shocking brew is created by mixing a potion of paralytic gas and a potion of storm clouds.\n\nA caustic brew is created by mixing a potion of toxic gas and a blob of goo. journal.document.alchemy_guide.imbue_elixirs.title=Imbuing Elixirs -journal.document.alchemy_guide.imbue_elixirs.body=Imbuing Elixirs will imbue the drinker with a unique power for a short time. They are more expensive than healing elixirs, but also more powerful.\n\nAn elixir of dragon's blood is created by mixing a potion of liquid flame and a potion of purity.\n\nAn elixir of toxic essence is created by mixing a potion of toxic gas and a potion of purity.\n\nAn elixir of earthen power is created by mixing a potion of paralytic gas and a potion of haste.\n\nAn elixir of might is created by mixing a potion of strength and a large amount of alchemical energy. +journal.document.alchemy_guide.imbue_elixirs.body=Imbuing Elixirs will imbue the drinker with a unique power for a short time. They are more expensive than healing elixirs, but also more powerful.\n\n\nAn elixir of dragon's blood is created by mixing a potion of liquid flame and a potion of purity.\n\nAn elixir of toxic essence is created by mixing a potion of toxic gas and a potion of purity.\n\nAn elixir of earthen power is created by mixing a potion of paralytic gas and a potion of haste.\n\nAn elixir of might is created by mixing a potion of strength and a large amount of alchemical energy. +journal.document.alchemy_guide.tele_spells.title=Teleportation Spells +journal.document.alchemy_guide.tele_spells.body=Combining certain ingredients in an alchemy pot will cause magical crystals to precipitate out of the water. The energy in these crystals can be channeled to cast spells! Most spells have multiple uses, but the specific amount varies by spell.\n\nTeleportation spells contain magic that changes the positioning of yourself, enemies, or items in various useful ways.\n\n\nMagical porter is created by mixing a scroll of mirror image with a merchant's beacon.\n\nPhase shift is created by mixing a scroll of teleportation with a scroll of terror.\n\nBeacon of returning is created by mixing a scroll of passage, a scroll of magic mapping, and a lot of alchemical energy. +journal.document.alchemy_guide.item_spells.title=Item Manipulation Spells +journal.document.alchemy_guide.item_spells.body=Item manipulation spells affect the items in your inventory in a variety of different ways.\n\n\nMagical infusion is created by mixing a scroll of upgrade with a stone of enchantment.\n\nCurse infusion is created by mixing a scroll of remove curse with a cursed metal shard.\n\nAlchemize is created by mixing a scroll of recharging with a potion of liquid flame.\n\nRecycle is created by mixing a scroll of transmutation with a scroll of mirror image. +journal.document.alchemy_guide.enviro_spells.title=Environmental Spells +journal.document.alchemy_guide.enviro_spells.body=Environmental spells give you new ways to change or interact with the terrain of the dungeon.\n\n\nReclaim trap is created by mixing a scroll of recharging with a cursed metal shard.\n\nAqua blast is created by mixing a scroll of identify with a potion of storm clouds.\n\nFeatherfall is created by mixing a scroll of lullaby, a potion of levitation, and a good amount of alchemical energy. journal.notes$landmark.well_of_health=well of health journal.notes$landmark.well_of_awareness=well of awareness