From fd4b0cf4ea2835de3a6892d925b3c9eb59752dcd Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 6 Sep 2018 21:08:45 -0400 Subject: [PATCH] v0.7.0: added 2 new elixirs, 1 new brew, 2 new bombs. one of the new elixirs is the old potion of might! also adjusted balance on healing and holy bombs --- core/src/main/assets/items.png | Bin 17413 -> 17539 bytes .../ShatteredPixelDungeon.java | 3 + .../actors/blobs/WaterOfTransmutation.java | 6 +- .../actors/buffs/Burning.java | 5 +- .../actors/buffs/Frost.java | 5 +- .../actors/hero/Hero.java | 6 +- .../shatteredpixeldungeon/items/Heap.java | 7 +- .../shatteredpixeldungeon/items/Recipe.java | 12 +- .../items/bombs/ArcaneBomb.java | 82 +++++++++++ .../items/bombs/Bomb.java | 14 +- .../items/bombs/HolyBomb.java | 5 +- .../items/bombs/ShrapnelBomb.java | 73 ++++++++++ .../items/potions/brews/CausticBrew.java | 68 +++++++++ .../elixirs/ElixirOfAquaticRejuvenation.java | 131 ++++++++++++++++++ .../ElixirOfMight.java} | 29 ++-- .../scrolls/ScrollOfMagicalInfusion.java | 3 +- .../items/stones/StoneOfIntuition.java | 8 +- .../sprites/ItemSpriteSheet.java | 12 +- .../messages/items/items.properties | 24 +++- .../messages/journal/journal.properties | 8 +- 20 files changed, 446 insertions(+), 55 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/CausticBrew.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfAquaticRejuvenation.java rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/{PotionOfMight.java => elixirs/ElixirOfMight.java} (73%) diff --git a/core/src/main/assets/items.png b/core/src/main/assets/items.png index 34ce11af584e04903a9b9897d42b2e32c0f6a48f..2c9534b83f29f442959f2ceee6157b5221ebaf20 100644 GIT binary patch literal 17539 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 S&_DVB!0~|d{ burnable = new ArrayList<>(); //does not reach inside of containers for (Item i : hero.belongings.backpack.items){ - if ((i instanceof Scroll && !(i instanceof ScrollOfUpgrade || i instanceof ScrollOfMagicalInfusion)) + if ((i instanceof Scroll && !(i instanceof ScrollOfUpgrade)) || i instanceof MysteryMeat){ burnable.add(i); } @@ -135,7 +134,7 @@ public class Burning extends Buff implements Hero.Doom { Item item = ((Thief) target).item; if (item instanceof Scroll && - !(item instanceof ScrollOfUpgrade || item instanceof ScrollOfMagicalInfusion)) { + !(item instanceof ScrollOfUpgrade)) { target.sprite.emitter().burst( ElmoParticle.FACTORY, 6 ); ((Thief)target).item = null; } else if (item instanceof MysteryMeat) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java index eb2ceb30c..0bf4bb3af 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java @@ -29,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio; import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; @@ -62,7 +61,7 @@ public class Frost extends FlavourBuff { ArrayList freezable = new ArrayList<>(); //does not reach inside of containers for (Item i : hero.belongings.backpack.items){ - if ((i instanceof Potion && !(i instanceof PotionOfStrength || i instanceof PotionOfMight)) + if ((i instanceof Potion && !(i instanceof PotionOfStrength)) || i instanceof MysteryMeat){ freezable.add(i); } @@ -85,7 +84,7 @@ public class Frost extends FlavourBuff { Item item = ((Thief) target).item; - if (item instanceof Potion && !(item instanceof PotionOfStrength || item instanceof PotionOfMight)) { + if (item instanceof Potion && !(item instanceof PotionOfStrength)) { ((Potion) ((Thief) target).item).shatter(target.pos); ((Thief) target).item = null; } else if (item instanceof MysteryMeat){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 981b07d2a..c6f9bf1e8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -79,7 +79,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key; import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEvasion; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce; @@ -89,7 +88,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfTenacity; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Flail; @@ -718,8 +716,8 @@ public class Hero extends Char { } else { boolean important = - ((item instanceof ScrollOfUpgrade || item instanceof ScrollOfMagicalInfusion) && ((Scroll)item).isKnown()) || - ((item instanceof PotionOfStrength || item instanceof PotionOfMight) && ((Potion)item).isKnown()); + (item instanceof ScrollOfUpgrade && ((Scroll)item).isKnown()) || + (item instanceof PotionOfStrength && ((Potion)item).isKnown()); if (important) { GLog.p( Messages.get(this, "you_now_have", item.name()) ); } else { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java index 51db7268f..3f9bdc034 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Heap.java @@ -43,11 +43,9 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.FrozenCarpaccio; import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; import com.shatteredpixel.shatteredpixeldungeon.items.journal.DocumentPage; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; -import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -237,7 +235,7 @@ public class Heap implements Bundlable { for (Item item : items.toArray( new Item[0] )) { if (item instanceof Scroll - && !(item instanceof ScrollOfUpgrade || item instanceof ScrollOfMagicalInfusion)) { + && !(item instanceof ScrollOfUpgrade)) { items.remove( item ); burnt = true; } else if (item instanceof Dewdrop) { @@ -335,8 +333,7 @@ public class Heap implements Bundlable { if (item instanceof MysteryMeat) { replace( item, FrozenCarpaccio.cook( (MysteryMeat)item ) ); frozen = true; - } else if (item instanceof Potion - && !(item instanceof PotionOfStrength || item instanceof PotionOfMight)) { + } else if (item instanceof Potion && !(item instanceof PotionOfStrength)) { items.remove(item); ((Potion) item).shatter(pos); frozen = true; 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 9f66d1728..5e7fa9f95 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -29,14 +29,17 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.Feast; import com.shatteredpixel.shatteredpixeldungeon.items.food.StewedMeat; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.BlizzardBrew; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.CausticBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrigidBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.FrostfireBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.InfernalBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew; import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.WickedBrew; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfEarthenPower; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfRestoration; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfVitality; @@ -144,6 +147,7 @@ public abstract class Recipe { private static Recipe[] oneIngredientRecipes = new Recipe[]{ new AlchemistsToolkit.upgradeKit(), new Scroll.ScrollToStone(), + new ElixirOfMight.Recipe(), new StewedMeat.oneMeat() }; @@ -151,18 +155,20 @@ public abstract class Recipe { new Blandfruit.CookFruit(), new TippedDart.TipDart(), new Bomb.EnhanceBomb(), + new ElixirOfAquaticRejuvenation.Recipe(), new ElixirOfDragonsBlood.Recipe(), new ElixirOfEarthenPower.Recipe(), - new ElixirOfToxicEssence.Recipe(), new ElixirOfHoneyedHealing.Recipe(), new ElixirOfRestoration.Recipe(), + new ElixirOfToxicEssence.Recipe(), new ElixirOfVitality.Recipe(), + new BlizzardBrew.Recipe(), + new CausticBrew.Recipe(), new FrigidBrew.Recipe(), new FrostfireBrew.Recipe(), - new WickedBrew.Recipe(), - new BlizzardBrew.Recipe(), new InfernalBrew.Recipe(), new ShockingBrew.Recipe(), + new WickedBrew.Recipe(), new StewedMeat.twoMeat() }; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java new file mode 100644 index 000000000..a1a50c2fb --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ArcaneBomb.java @@ -0,0 +1,82 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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.bombs; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; +import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.GooWarn; +import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.BArray; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.PathFinder; +import com.watabou.utils.Random; + +public class ArcaneBomb extends Bomb { + + { + //TODO visuals + image = ItemSpriteSheet.ARCANE_BOMB; + } + + @Override + protected void onThrow(int cell) { + super.onThrow(cell); + if (fuse != null){ + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + for (int i = 0; i < PathFinder.distance.length; i++) { + if (PathFinder.distance[i] < Integer.MAX_VALUE) + GameScene.add(Blob.seed(i, 3, GooWarn.class)); + } + } + } + + @Override + public void explode(int cell) { + //We're blowing up, so no need for a fuse anymore. + this.fuse = null; + + Sample.INSTANCE.play( Assets.SND_BURNING ); + + //no regular explosion damage + + PathFinder.buildDistanceMap( cell, BArray.not( Dungeon.level.solid, null ), 2 ); + for (int i = 0; i < PathFinder.distance.length; i++) { + if (PathFinder.distance[i] < Integer.MAX_VALUE) { + if (Dungeon.level.heroFOV[i]) { + CellEmitter.get(i).burst(ElmoParticle.FACTORY, 10); + } + Char ch = Actor.findChar(i); + if (ch != null){ + //1.5x regular bomb damage + int damage = Math.round(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 ) * 1.5f); + ch.damage(damage, this); + } + } + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java index 5cb69f907..e24400294 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/Bomb.java @@ -38,6 +38,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfFrost; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLiquidFlame; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRage; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; @@ -303,22 +305,30 @@ public class Bomb extends Item { validIngredients.put(PotionOfFrost.class, FrostBomb.class); validIngredients.put(PotionOfHealing.class, HealingBomb.class); validIngredients.put(PotionOfInvisibility.class, Flashbang.class); + validIngredients.put(ScrollOfRecharging.class, ShockBomb.class); validIngredients.put(ScrollOfRemoveCurse.class, HolyBomb.class); validIngredients.put(ScrollOfMirrorImage.class, WoollyBomb.class); validIngredients.put(ScrollOfRage.class, Noisemaker.class); + + validIngredients.put(GooBlob.class, ArcaneBomb.class); + validIngredients.put(MetalShard.class, ShrapnelBomb.class); } private static final HashMap, Integer> bombCosts = new HashMap<>(); static { bombCosts.put(Firebomb.class, 2); bombCosts.put(FrostBomb.class, 1); - bombCosts.put(HealingBomb.class, 5); + bombCosts.put(HealingBomb.class, 4); bombCosts.put(Flashbang.class, 3); + bombCosts.put(ShockBomb.class, 3); - bombCosts.put(HolyBomb.class, 5); + bombCosts.put(HolyBomb.class, 4); bombCosts.put(WoollyBomb.class, 1); bombCosts.put(Noisemaker.class, 2); + + bombCosts.put(ArcaneBomb.class, 6); + bombCosts.put(ShrapnelBomb.class, 6); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java index f766cfc56..1230cdf83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/HolyBomb.java @@ -59,7 +59,10 @@ public class HolyBomb extends Bomb { Buff.prolong(n, Blindness.class, 1f); if (n.properties().contains(Char.Property.UNDEAD) || n.properties().contains(Char.Property.DEMONIC)){ n.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 ); - n.damage(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 ), this); + + //bomb deals an additional 67% damage to unholy enemies in a 5x5 range + int damage = Math.round(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 ) * 0.67f); + n.damage(damage, this); } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java new file mode 100644 index 000000000..e5668efc5 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bombs/ShrapnelBomb.java @@ -0,0 +1,73 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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.bombs; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.BlastParticle; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.ShadowCaster; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Point; +import com.watabou.utils.Random; + +public class ShrapnelBomb extends Bomb { + + { + //TODO visuals + image = ItemSpriteSheet.SHRAPNEL_BOMB; + } + + @Override + public void explode(int cell) { + //We're blowing up, so no need for a fuse anymore. + this.fuse = null; + + Sample.INSTANCE.play( Assets.SND_BURNING ); + + //no regular explosion damage + + boolean[] FOV = new boolean[Dungeon.level.length()]; + Point c = Dungeon.level.cellToPoint(cell); + ShadowCaster.castShadow(c.x, c.y, FOV, 8); + + for (int i = 0; i < FOV.length; i++) { + if (FOV[i]) { + if (Dungeon.level.heroFOV[i] && !Dungeon.level.solid[i]) { + //TODO better vfx? + CellEmitter.center( i ).burst( BlastParticle.FACTORY, 5 ); + } + Char ch = Actor.findChar(i); + if (ch != null){ + //regular bomb damage + int damage = Math.round(Random.NormalIntRange( Dungeon.depth+5, 10 + Dungeon.depth * 2 )); + damage -= ch.drRoll(); + ch.damage(damage, this); + } + } + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/CausticBrew.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/CausticBrew.java new file mode 100644 index 000000000..f64eea4e8 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/CausticBrew.java @@ -0,0 +1,68 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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.potions.brews; + +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; +import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfToxicGas; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.PathFinder; + +public class CausticBrew extends Brew { + + { + //TODO finish visuals + image = ItemSpriteSheet.BREW_CAUSTIC; + } + + @Override + public void shatter(int cell) { + for (int offset : PathFinder.NEIGHBOURS9){ + + Splash.at( cell + offset, 0x000000, 5); + Char ch = Actor.findChar(cell + offset); + + if (ch != null){ + Buff.affect(ch, Ooze.class); + } + + } + } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{PotionOfToxicGas.class, GooBlob.class}; + inQuantity = new int[]{1, 1}; + + cost = 5; + + output = CausticBrew.class; + outQuantity = 1; + } + + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfAquaticRejuvenation.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfAquaticRejuvenation.java new file mode 100644 index 000000000..a42a6a5e1 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfAquaticRejuvenation.java @@ -0,0 +1,131 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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.potions.elixirs; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +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.effects.Speck; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; +import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.noosa.Image; +import com.watabou.utils.Bundle; + +public class ElixirOfAquaticRejuvenation extends Elixir { + + { + //TODO finish visuals + image = ItemSpriteSheet.ELIXIR_AQUA; + } + + @Override + public void apply(Hero hero) { + Buff.affect(hero, AquaHealing.class).set(hero.HT * 2); + } + + public static class AquaHealing extends Buff { + + { + type = buffType.POSITIVE; + announced = true; + } + + private int left; + + public void set( int amount ){ + if (amount > left) left = amount; + } + + @Override + public boolean act() { + + if (Dungeon.level.water[target.pos] && target.HP < target.HT){ + target.HP++; + target.sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 ); + } + + if (left-- <= 0){ + detach(); + } else { + spend(TICK); + if (left <= target.HT/4f){ + BuffIndicator.refreshHero(); + } + } + return true; + } + + @Override + public int icon() { + return BuffIndicator.HEALING; + } + + @Override + public void tintIcon(Image icon) { + FlavourBuff.greyIcon(icon, target.HT/4f, left); + } + + @Override + public String toString() { + return Messages.get(this, "name"); + } + + @Override + public String desc() { + return Messages.get(this, "desc", left+1); + } + + private static final String LEFT = "left"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( LEFT, left ); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + left = bundle.getInt( LEFT ); + + } + } + + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{PotionOfHealing.class, GooBlob.class}; + inQuantity = new int[]{1, 1}; + + cost = 3; + + output = ElixirOfAquaticRejuvenation.class; + outQuantity = 1; + } + + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java similarity index 73% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMight.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java index f3f470f38..d02631c1c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/PotionOfMight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfMight.java @@ -19,22 +19,20 @@ * along with this program. If not, see */ -package com.shatteredpixel.shatteredpixeldungeon.items.potions; +package com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; -public class PotionOfMight extends Potion { - - //TODO finish transitioning this item +public class ElixirOfMight extends Elixir { { - initials = 12; - image = ItemSpriteSheet.POTION_AMBER; + image = ItemSpriteSheet.ELIXIR_MIGHT; } @Override @@ -51,12 +49,21 @@ public class PotionOfMight extends Potion { } @Override - public boolean isKnown() { - return true; + public int price() { + return 100 * quantity; } - @Override - public int price() { - return isKnown() ? 100 * quantity : super.price(); + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { + + { + inputs = new Class[]{PotionOfStrength.class}; + inQuantity = new int[]{1}; + + cost = 12; + + output = ElixirOfMight.class; + outQuantity = 1; + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java index 7f34fcef5..0436aff1f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java @@ -34,10 +34,9 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; public class ScrollOfMagicalInfusion extends InventoryScroll { - //TODO decide what to do with this one + //TODO transition to a spell { - initials = 12; mode = WndBag.Mode.ENCHANTABLE; image = ItemSpriteSheet.SCROLL_ISAZ; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/stones/StoneOfIntuition.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/stones/StoneOfIntuition.java index 5be06de3a..8926ff7e9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/stones/StoneOfIntuition.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/stones/StoneOfIntuition.java @@ -32,7 +32,6 @@ 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.PotionOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMindVision; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfPurity; @@ -43,7 +42,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMirrorImage; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRage; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; @@ -98,8 +96,7 @@ public class StoneOfIntuition extends InventoryStone { PotionOfParalyticGas.class, PotionOfPurity.class, PotionOfStrength.class, - PotionOfToxicGas.class, - PotionOfMight.class + PotionOfToxicGas.class }; public static Class[] scrolls = new Class[]{ @@ -114,8 +111,7 @@ public class StoneOfIntuition extends InventoryStone { ScrollOfTeleportation.class, ScrollOfTerror.class, ScrollOfTransmutation.class, - ScrollOfUpgrade.class, - ScrollOfMagicalInfusion.class + ScrollOfUpgrade.class }; static Class curGuess = null; 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 809961bbe..0f6716950 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -142,6 +142,8 @@ public class ItemSpriteSheet { public static final int HOLY_BOMB = BOMBS+7; public static final int WOOLY_BOMB = BOMBS+8; public static final int NOISEMAKER = BOMBS+9; + public static final int ARCANE_BOMB = BOMBS+10; + public static final int SHRAPNEL_BOMB = BOMBS+11; static{ assignItemRect(BOMB, 10, 13); @@ -154,6 +156,8 @@ public class ItemSpriteSheet { assignItemRect(HOLY_BOMB, 10, 13); assignItemRect(WOOLY_BOMB, 10, 13); assignItemRect(NOISEMAKER, 10, 13); + assignItemRect(ARCANE_BOMB, 10, 13); + assignItemRect(SHRAPNEL_BOMB, 10, 13); } @@ -519,7 +523,8 @@ public class ItemSpriteSheet { public static final int ELIXIR_DRAGON = ELIXIRS+0; public static final int ELIXIR_TOXIC = ELIXIRS+1; public static final int ELIXIR_EARTH = ELIXIRS+2; - + public static final int ELIXIR_MIGHT = ELIXIRS+3; + public static final int ELIXIR_AQUA = ELIXIRS+4; public static final int ELIXIR_RESTO = ELIXIRS+5; public static final int ELIXIR_SURGE = ELIXIRS+6; public static final int ELIXIR_HONEY = ELIXIRS+7; @@ -527,7 +532,8 @@ public class ItemSpriteSheet { assignItemRect(ELIXIR_DRAGON, 10, 14); assignItemRect(ELIXIR_TOXIC, 10, 14); assignItemRect(ELIXIR_EARTH, 10, 14); - + assignItemRect(ELIXIR_MIGHT, 10, 14); + assignItemRect(ELIXIR_AQUA, 10, 14); assignItemRect(ELIXIR_RESTO, 10, 14); assignItemRect(ELIXIR_SURGE, 10, 14); assignItemRect(ELIXIR_HONEY, 10, 14); @@ -538,6 +544,7 @@ public class ItemSpriteSheet { public static final int BREW_FRIGID = BREWS+1; public static final int BREW_FROSTFIRE= BREWS+2; + public static final int BREW_CAUSTIC = BREWS+4; public static final int BREW_INFERNAL = BREWS+5; public static final int BREW_BLIZZARD = BREWS+6; public static final int BREW_SHOCKING = BREWS+7; @@ -546,6 +553,7 @@ public class ItemSpriteSheet { assignItemRect(BREW_FRIGID, 10, 14); assignItemRect(BREW_FROSTFIRE, 10, 14); + assignItemRect(BREW_CAUSTIC, 10, 14); assignItemRect(BREW_INFERNAL, 10, 14); assignItemRect(BREW_BLIZZARD, 10, 14); assignItemRect(BREW_SHOCKING, 10, 14); diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index d26cd1104..4a5a6f1ea 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -351,6 +351,9 @@ items.bags.magicalholster.desc=This slim holster is made from some exotic animal ###bombs +items.bombs.arcanebomb.name=arcane bomb +items.bombs.arcanebomb.desc=This bomb has been imbued with arcane properties, and will explode into a powerful blast similar to Goo's pumped up attack. + items.bombs.bomb.name=bomb items.bombs.bomb.ac_lightthrow=LIGHT & THROW items.bombs.bomb.snuff_fuse=You quickly snuff the bomb's fuse. @@ -383,6 +386,9 @@ items.bombs.noisemaker.desc=This customized bomb will repeatedly make noise inst items.bombs.shockbomb.name=shock bomb items.bombs.shockbomb.desc=This bomb has been modified to unleash a storm of electricity around it when it explodes. +items.bombs.shrapnelbomb.name=shrapnel bomb +items.bombs.shrapnelbomb.desc=This bomb has been modified with scraps of DM-300's metal, which will fragment and fly everywhere when it explodes. You had better hide behind something when using it... + items.bombs.woollybomb.name=woolly bomb items.bombs.woollybomb.desc=This customized bomb will create a field of magical sheep instead of exploding. These sheep will block movement and persist for some time. @@ -531,11 +537,6 @@ items.potions.potionoflevitation.desc=Drinking this curious liquid will cause yo items.potions.potionofliquidflame.name=potion of liquid flame items.potions.potionofliquidflame.desc=This flask contains an unstable compound which will burst violently into flame upon exposure to open air. -items.potions.potionofmight.name=potion of might -items.potions.potionofmight.msg_1=+1 str, +5 hp -items.potions.potionofmight.msg_2=Newfound strength surges through your body. -items.potions.potionofmight.desc=This powerful liquid will course through your muscles, permanently increasing your strength by one point and health by five points. - items.potions.potionofmindvision.name=potion of mind vision items.potions.potionofmindvision.see_mobs=You can somehow feel the presence of other creatures' minds! items.potions.potionofmindvision.see_none=You can somehow tell that you are alone on this level at the moment. @@ -560,6 +561,9 @@ items.potions.potionoftoxicgas.desc=Uncorking or shattering this pressurized gla ###brews +items.potions.brews.causticbrew.name=caustic brew +items.potions.brews.causticbrew.desc=This brew will spread corrosive ooze around the location it shatters in. Anything caught by the ooze will slowly melt if it can't wash it off in water. + items.potions.brews.blizzardbrew.name=blizzard brew items.potions.brews.blizzardbrew.desc=When shattered, this brew will unleash a swirling blizzard which spreads like a gas. @@ -581,6 +585,11 @@ items.potions.brews.wickedbrew.desc=This brew combines the properties of a toxic ###elixirs +items.potions.elixirs.elixirofaquaticrejuvenation.name=elixir of aquatic rejuvenation +items.potions.elixirs.elixirofaquaticrejuvenation.desc=This elixir contains the remains of goo enhanced with a healing potion. While it will not provide immediate healing, it will slowly restore your health while you are standing in water. +items.potions.elixirs.elixirofaquaticrejuvenation$aquahealing.name=Aquatic Healing +items.potions.elixirs.elixirofaquaticrejuvenation$aquahealing.desc=You have temporarily gained restorative properties similar to that of Goo.\n\nWhile standing in water, you will recover a single point of health per turn.\n\nturns left: %d. + items.potions.elixirs.elixirofdragonsblood.name=elixir of dragon's blood items.potions.elixirs.elixirofdragonsblood.desc=When consumed, this elixir will send fiery power coursing through the drinker's veins. This effect will make the drinker immune to fire, and allow them to set enemies aflame with physical attacks. @@ -590,6 +599,11 @@ items.potions.elixirs.elixirofearthenpower.desc=When consumed, this elixir will items.potions.elixirs.elixirofhoneyedhealing.name=elixir of honeyed healing items.potions.elixirs.elixirofhoneyedhealing.desc=This elixir combines healing with the sweetness of honey. When drank, it will satisfy a small amount of hunger, but it can also be thrown to heal an ally.\n\nCreatures with an affinity for honey might be pacified if this item is used on them. +items.potions.elixirs.elixirofmight.name=elixir of might +items.potions.elixirs.elixirofmight.msg_1=+1 str, +5 hp +items.potions.elixirs.elixirofmight.msg_2=Newfound strength surges through your body. +items.potions.elixirs.elixirofmight.desc=This powerful liquid will course through your muscles, permanently increasing your strength by one point and health by five points. + items.potions.elixirs.elixirofrestoration.name=elixir of restoration items.potions.elixirs.elixirofrestoration.desc=This elixir combines the properties of a healing and cleansing potion. When consumed, the drinker will start to rapidly heal, and will be cleansed of all negative effects. 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 cf30f856a..1a34cb463 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 @@ -34,15 +34,15 @@ journal.document.alchemy_guide.energy.body=While the recipes we have discussed s journal.document.alchemy_guide.food.title=Food Recipes journal.document.alchemy_guide.food.body=Not all recipes involve magical potions or scrolls, some are more traditional.\n\nRaw meat can be stewed in an alchemy pot, and the pot's energy will cleanse the meat of disease. The more meat that is used at once, the greater the efficiency of the recipe.\n\nA raw blandfruit can be combined with a seed to create a cooked blandfruit. The cooked fruit will emulate whatever potion the seed corresponds to.\n\nA pasty, full ration, and a piece of meat (any type will do) can be combined to create a feast! Feasts provide an unparalleled culinary experience, but cost a fair amount of energy. 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 +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.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. +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.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. +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.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. +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.notes$landmark.well_of_health=well of health journal.notes$landmark.well_of_awareness=well of awareness