diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index f2a073f49..c3c9d649d 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -729,12 +729,15 @@ 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 in a wide area 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.aquabrew.name=aqua brew +items.potions.brews.aquabrew.desc=When shattered, this brew will release a burst of pressurized water at its location. It's only forceful enough to damage fiery enemies, but it also spreads water to nearby terrain, douses fires, and knocks back characters near the burst. items.potions.brews.blizzardbrew.name=blizzard brew items.potions.brews.blizzardbrew.desc=When shattered, this brew will unleash a swirling blizzard which quickly spreads like a gas. +items.potions.brews.causticbrew.name=caustic brew +items.potions.brews.causticbrew.desc=This brew will spread corrosive ooze in a wide area 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.infernalbrew.name=infernal brew items.potions.brews.infernalbrew.desc=When shattered, this brew will unleash a raging inferno which quickly spreads like a gas. @@ -755,6 +758,12 @@ items.potions.elixirs.elixirofaquaticrejuvenation$aquahealing.desc=You have temp 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. +items.potions.elixirs.elixiroffeatherfall.name=elixir of feather fall +items.potions.elixirs.elixiroffeatherfall.light=You feel light as a feather! +items.potions.elixirs.elixiroffeatherfall.desc=This elixir offers a weaker but more controlled levitation effect, allowing the drinker to fall great distances without harm for a short time. Each use of the elixir will only provide enough protection for one chasm. +items.potions.elixirs.elixiroffeatherfall$featherbuff.name=feather fall +items.potions.elixirs.elixiroffeatherfall$featherbuff.desc=You are under the effects of a feather fall elixir, allowing you to fall into a chasm without taking damage! This effect will expire when it is used, or after a bit of time passes.\n\nTurns remaining: %s. + 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. @@ -1157,9 +1166,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.aquablast.name=aqua blast -items.spells.aquablast.desc=This spell will create a burst of water at the target location. It's only forceful enough to damage fiery enemies, but it also spreads water to nearby terrain, douses fires, and knocks back characters near the burst. - 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. @@ -1177,12 +1183,6 @@ items.spells.curseinfusion.name=curse infusion items.spells.curseinfusion.inv_title=Curse an item items.spells.curseinfusion.desc=This spell infuses a piece of equipment with the same powerful malignant magic present within DM-300. The item it is used on will immediately be cursed, and any enchantment or glyph it may have had will be overridden.\n\nIn the case of weapons, armor, and wands, the item will gain upgrades in addition to being cursed. Curse infusion upgrades do not stack, and the upgrades are lost if the item becomes uncursed.\n\nMultiple curse infusions can also be used to change the curse on a weapon or armor. -items.spells.featherfall.name=feather fall -items.spells.featherfall.light=You feel light as a feather! -items.spells.featherfall.desc=This spell manipulates gravity's effect on the caster, allowing them to fall great distances without harm for a short time. Each use of the spell will only provide enough protection for one chasm. -items.spells.featherfall$featherbuff.name=feather fall -items.spells.featherfall$featherbuff.desc=You are under the effects of a feather fall spell, allowing you to fall into a chasm without taking damage! This effect will expire when it is used, or after a bit of time passes.\n\nTurns remaining: %s. - items.spells.spell.ac_cast=CAST items.spells.spell.no_magic=You can't cast spells while magic immune. diff --git a/core/src/main/assets/messages/journal/journal.properties b/core/src/main/assets/messages/journal/journal.properties index 8463d859c..9e48ccb59 100644 --- a/core/src/main/assets/messages/journal/journal.properties +++ b/core/src/main/assets/messages/journal/journal.properties @@ -44,9 +44,9 @@ journal.document.alchemy_guide.weapons.body=Some of the lighter or more magical 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 with a single use. +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.spells.title=Spells -journal.document.alchemy_guide.spells.body=Spells are contained in crystals and provide a variety of effects with multiple uses. +journal.document.alchemy_guide.spells.body=Spells are contained in crystals and provide a variety of effects, usually with multiple uses. journal.document.intros.title=Region Introductions journal.document.intros.dungeon.title=Dungeon diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 6a53f10d3..349cbd64e 100644 Binary files a/core/src/main/assets/sprites/items.png and b/core/src/main/assets/sprites/items.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index 8cd634460..20ce9f7b7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -47,6 +47,17 @@ public class ShatteredPixelDungeon extends Game { public ShatteredPixelDungeon( PlatformSupport platform ) { super( sceneClass == null ? WelcomeScene.class : sceneClass, platform ); + //pre-v2.4.0 + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfFeatherFall.class, + "com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall" ); + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfFeatherFall.FeatherBuff.class, + "com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall$FeatherBuff" ); + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.AquaBrew.class, + "com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast" ); + //pre-v2.3.0 com.watabou.utils.Bundle.addAlias( com.shatteredpixel.shatteredpixeldungeon.items.bombs.Bomb.ConjuredBomb.class, 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 ed7880ce6..37ade20db 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.food.MeatPie; 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; @@ -35,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfArcaneArmor; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfFeatherFall; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight; @@ -43,11 +45,9 @@ 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.AquaBlast; 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.FeatherFall; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.spells.PhaseShift; import com.shatteredpixel.shatteredpixeldungeon.items.spells.ReclaimTrap; @@ -176,15 +176,15 @@ public abstract class Recipe { new ArcaneResin.Recipe(), new BlizzardBrew.Recipe(), new InfernalBrew.Recipe(), + new AquaBrew.Recipe(), new ShockingBrew.Recipe(), new ElixirOfDragonsBlood.Recipe(), new ElixirOfIcyTouch.Recipe(), new ElixirOfToxicEssence.Recipe(), new ElixirOfMight.Recipe(), + new ElixirOfFeatherFall.Recipe(), new MagicalInfusion.Recipe(), - new AquaBlast.Recipe(), new BeaconOfReturning.Recipe(), - new FeatherFall.Recipe(), new PhaseShift.Recipe(), new Recycle.Recipe(), new TelekineticGrab.Recipe(), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bags/Bag.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bags/Bag.java index 343ba9e73..2c256f4ca 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bags/Bag.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/bags/Bag.java @@ -156,7 +156,12 @@ public class Bag extends Item implements Iterable { loading = true; for (Bundlable item : bundle.getCollection( ITEMS )) { - if (item != null) ((Item)item).collect( this ); + if (item != null){ + if (!((Item)item).collect( this )){ + //force-add the item if necessary, such as if its item category changed after an update + items.add((Item) item); + } + } } loading = false; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/AquaBrew.java similarity index 76% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/AquaBrew.java index a37d7b5ab..6e6b5a79e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/brews/AquaBrew.java @@ -19,34 +19,33 @@ * along with this program. If not, see */ -package com.shatteredpixel.shatteredpixeldungeon.items.spells; +package com.shatteredpixel.shatteredpixeldungeon.items.potions.brews; -import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.PotionOfStormClouds; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.GeyserTrap; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; -public class AquaBlast extends TargetedSpell { - - { - image = ItemSpriteSheet.AQUA_BLAST; - usesTargeting = true; - } - - @Override - protected void affectTarget(Ballistica bolt, Hero hero) { - int cell = bolt.collisionPos; +public class AquaBrew extends Brew { + { + image = ItemSpriteSheet.BREW_AQUA; + } + + @Override + public void shatter(int cell) { GeyserTrap geyser = new GeyserTrap(); geyser.pos = cell; geyser.source = this; - if (bolt.path.size() > bolt.dist+1) { - geyser.centerKnockBackDirection = bolt.path.get(bolt.dist + 1); + + int userPos = curUser.pos; + Ballistica aim = new Ballistica(userPos, cell, Ballistica.STOP_TARGET); + if (aim.path.size() > aim.dist+1) { + geyser.centerKnockBackDirection = aim.path.get(aim.dist + 1); } geyser.activate(); } - + @Override public int value() { return (int)(60 * (quantity/8f)); @@ -56,18 +55,19 @@ public class AquaBlast extends TargetedSpell { public int energyVal() { return (int)(12 * (quantity/8f)); } - + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { - + { inputs = new Class[]{PotionOfStormClouds.class}; inQuantity = new int[]{1}; - + cost = 11; - - output = AquaBlast.class; + + output = AquaBrew.class; outQuantity = 8; } - + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfFeatherFall.java similarity index 76% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfFeatherFall.java index 2cef88c73..c9f1b561b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/FeatherFall.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfFeatherFall.java @@ -19,12 +19,10 @@ * along with this program. If not, see */ -package com.shatteredpixel.shatteredpixeldungeon.items.spells; +package com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs; -import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; -import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; @@ -33,36 +31,28 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.Image; -import com.watabou.noosa.audio.Sample; -public class FeatherFall extends Spell { - +public class ElixirOfFeatherFall extends Elixir { + { - image = ItemSpriteSheet.FEATHER_FALL; + image = ItemSpriteSheet.ELIXIR_FEATHER; } - + @Override - protected void onCast(Hero hero) { + public void apply(Hero hero) { Buff.append(hero, FeatherBuff.class, FeatherBuff.DURATION); - hero.sprite.operate(hero.pos); - Sample.INSTANCE.play(Assets.Sounds.READ ); - hero.sprite.emitter().burst( Speck.factory( Speck.JET ), 20); - + + hero.sprite.emitter().burst(Speck.factory(Speck.JET), 20); GLog.p(Messages.get(this, "light")); - - detach( curUser.belongings.backpack ); - updateQuickslot(); - Invisibility.dispel(); - hero.spendAndNext( 1f ); } - + public static class FeatherBuff extends FlavourBuff { //does nothing, just waits to be triggered by chasm falling { type = buffType.POSITIVE; } - public static final float DURATION = 30f; + public static final float DURATION = 50f; @Override public int icon() { @@ -79,7 +69,7 @@ public class FeatherFall extends Spell { return Math.max(0, (DURATION - visualcooldown()) / DURATION); } } - + @Override public int value() { return (int)(60 * (quantity/2f)); @@ -89,18 +79,19 @@ public class FeatherFall extends Spell { public int energyVal() { return (int)(12 * (quantity/2f)); } - + public static class Recipe extends com.shatteredpixel.shatteredpixeldungeon.items.Recipe.SimpleRecipe { - + { inputs = new Class[]{PotionOfLevitation.class}; inQuantity = new int[]{1}; - + cost = 17; - - output = FeatherFall.class; + + output = ElixirOfFeatherFall.class; outQuantity = 2; } - + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java index b85167ec6..af5203d45 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/wands/WandOfBlastWave.java @@ -30,7 +30,6 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; import com.shatteredpixel.shatteredpixeldungeon.effects.Effects; import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing; -import com.shatteredpixel.shatteredpixeldungeon.items.spells.AquaBlast; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Elastic; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; @@ -163,7 +162,7 @@ public class WandOfBlastWave extends DamageWand { if (ch.isActive()) { Paralysis.prolong(ch, Paralysis.class, 1 + finalDist/2f); } else if (ch == Dungeon.hero){ - if (cause instanceof WandOfBlastWave || cause instanceof AquaBlast){ + if (cause instanceof WandOfBlastWave){ Badges.validateDeathFromFriendlyMagic(); } Dungeon.fail(cause); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java index 15b5a42b0..9353523be 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/Chasm.java @@ -30,7 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; -import com.shatteredpixel.shatteredpixeldungeon.items.spells.FeatherFall; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfFeatherFall; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; @@ -130,7 +130,7 @@ public class Chasm implements Hero.Doom { Hero hero = Dungeon.hero; - FeatherFall.FeatherBuff b = hero.buff(FeatherFall.FeatherBuff.class); + ElixirOfFeatherFall.FeatherBuff b = hero.buff(ElixirOfFeatherFall.FeatherBuff.class); if (b != null){ hero.sprite.emitter().burst( Speck.factory( Speck.JET ), 20); 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 84c4e5c81..a0b2f3b2c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -592,6 +592,7 @@ public class ItemSpriteSheet { public static final int BREW_BLIZZARD = BREWS+1; public static final int BREW_SHOCKING = BREWS+2; public static final int BREW_CAUSTIC = BREWS+3; + public static final int BREW_AQUA = BREWS+4; private static final int ELIXIRS = xy(9, 25); //8 slots public static final int ELIXIR_HONEY = ELIXIRS+0; @@ -601,9 +602,12 @@ public class ItemSpriteSheet { public static final int ELIXIR_TOXIC = ELIXIRS+4; public static final int ELIXIR_ICY = ELIXIRS+5; public static final int ELIXIR_ARCANE = ELIXIRS+6; + public static final int ELIXIR_FEATHER = ELIXIRS+7; static{ for (int i = BREWS; i < BREWS+16; i++) assignItemRect(i, 12, 14); + + assignItemRect(BREW_AQUA, 9, 11); } //16 free slots @@ -615,9 +619,7 @@ public class ItemSpriteSheet { public static final int WILD_ENERGY = SPELLS+3; public static final int RETURN_BEACON = SPELLS+4; public static final int SUMMON_ELE = SPELLS+5; - - public static final int AQUA_BLAST = SPELLS+7; - public static final int FEATHER_FALL = SPELLS+8; + public static final int RECLAIM_TRAP = SPELLS+9; public static final int CURSE_INFUSE = SPELLS+11; @@ -632,8 +634,6 @@ public class ItemSpriteSheet { assignItemRect(RETURN_BEACON, 8, 16); assignItemRect(SUMMON_ELE, 8, 16); - assignItemRect(AQUA_BLAST, 11, 11); - assignItemRect(FEATHER_FALL, 11, 11); 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 5239d0d9f..e83f26cb2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickRecipe.java @@ -37,6 +37,7 @@ 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; @@ -44,6 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.brews.ShockingBrew import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfAquaticRejuvenation; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfArcaneArmor; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfDragonsBlood; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfFeatherFall; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfHoneyedHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIcyTouch; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight; @@ -52,11 +54,9 @@ 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.AquaBlast; 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.FeatherFall; import com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion; import com.shatteredpixel.shatteredpixeldungeon.items.spells.PhaseShift; import com.shatteredpixel.shatteredpixeldungeon.items.spells.ReclaimTrap; @@ -364,15 +364,16 @@ public class QuickRecipe extends Component { 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(null); - result.add(null); result.add(new QuickRecipe(new ElixirOfHoneyedHealing.Recipe())); result.add(new QuickRecipe(new ElixirOfAquaticRejuvenation.Recipe())); result.add(new QuickRecipe(new ElixirOfMight.Recipe())); result.add(new QuickRecipe(new ElixirOfDragonsBlood.Recipe())); result.add(new QuickRecipe(new ElixirOfIcyTouch.Recipe())); result.add(new QuickRecipe(new ElixirOfToxicEssence.Recipe())); + result.add(new QuickRecipe(new ElixirOfFeatherFall.Recipe())); result.add(new QuickRecipe(new ElixirOfArcaneArmor.Recipe())); return result; case 9: @@ -382,9 +383,7 @@ public class QuickRecipe extends Component { result.add(new QuickRecipe(new BeaconOfReturning.Recipe())); result.add(new QuickRecipe(new SummonElemental.Recipe())); result.add(null); - result.add(new QuickRecipe(new AquaBlast.Recipe())); result.add(new QuickRecipe(new ReclaimTrap.Recipe())); - result.add(new QuickRecipe(new FeatherFall.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))); result.add(new QuickRecipe(new MagicalInfusion.Recipe())); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v1_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v1_X_Changes.java index b89b88436..68d3aadcb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v1_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v1_X_Changes.java @@ -473,10 +473,10 @@ public class v1_X_Changes { "_-_ Released March 23rd, 2022\n" + "_-_ 103 days after Shattered v1.1.0\n\n" + "v1.2.0 focused on a number of improvements to try and make Shattered play just as well for desktop users as it does for phone users. While these changes weren't perfect right at launch, they played a major role in making Shattered feel like more than a mobile port and helped it have a successful launch on Steam.\n" + - "\n" + - "One big change for desktop users that's external to the game itself was native executables. Previously Shattered's desktop version required a separate installation of Java to run. After v1.2.0, I started making versions of Shattered with built-in Java instead. This meant that most users could just download the game and run it, much nicer.\n" + - "\n" + - "v1.2.0 also included a variety of little additions and tweaks. Most of them are self-explanatory, but the badge additions in particular were timed with the game's release on Steam so they could tie into steamworks achievements and give newer players a little more to do.")); + "\n" + + "One big change for desktop users that's external to the game itself was native executables. Previously Shattered's desktop version required a separate installation of Java to run. After v1.2.0, I started making versions of Shattered with built-in Java instead. This meant that most users could just download the game and run it, much nicer.\n" + + "\n" + + "v1.2.0 also included a variety of little additions and tweaks. Most of them are self-explanatory, but the badge additions in particular were timed with the game's release on Steam so they could tie into steamworks achievements and give newer players a little more to do.")); changes.addButton( new ChangeButton(Icons.get(Icons.DISPLAY_LAND), "Desktop Enhancements and Steam Release!", "_Shattered Pixel Dungeon has received a bunch of new features in preparation for its release on Steam!_\n\n" + @@ -583,7 +583,7 @@ public class v1_X_Changes { "_- Summon Elemental_ energy cost down to 6 from 8\n" + "_- Alchemize_ energy cost down to 2 from 3")); - changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.AQUA_BLAST), "Alchemy Buffs", + changes.addButton( new ChangeButton(new ItemSprite(ItemSpriteSheet.ENERGY), "Alchemy Buffs", "Several recipes have also been buffed, in addition to the cost reductions:\n\n" + "_- Scroll of Foresight_ duration up to 400 from 250\n" + "_- Scroll of Dread_ now grants 1/2 exp for defeated enemies\n" +