From e67d25967ce6a3a3ecbddb44f0e82b6b2f5bbb68 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 24 Feb 2024 13:45:23 -0500 Subject: [PATCH] v2.4.0: aqua blast and feather fall are now a brew and elixir --- .../assets/messages/items/items.properties | 22 ++++----- .../messages/journal/journal.properties | 4 +- core/src/main/assets/sprites/items.png | Bin 22427 -> 22429 bytes .../ShatteredPixelDungeon.java | 11 +++++ .../shatteredpixeldungeon/items/Recipe.java | 8 ++-- .../shatteredpixeldungeon/items/bags/Bag.java | 7 ++- .../brews/AquaBrew.java} | 42 ++++++++-------- .../elixirs/ElixirOfFeatherFall.java} | 45 +++++++----------- .../items/wands/WandOfBlastWave.java | 3 +- .../levels/features/Chasm.java | 4 +- .../sprites/ItemSpriteSheet.java | 10 ++-- .../shatteredpixeldungeon/ui/QuickRecipe.java | 9 ++-- .../ui/changelist/v1_X_Changes.java | 10 ++-- 13 files changed, 90 insertions(+), 85 deletions(-) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/{spells/AquaBlast.java => potions/brews/AquaBrew.java} (76%) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/{spells/FeatherFall.java => potions/elixirs/ElixirOfFeatherFall.java} (76%) 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 6a53f10d30c0136d3938ec8d2bb04cf11d219423..349cbd64edec5e4bb14cdb820886edcea406fac1 100644 GIT binary patch delta 13954 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 { 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" +