From d2e2172edeffd9eafca062e38ff6b6b2b5c65d4d Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 24 Mar 2021 19:34:47 -0400 Subject: [PATCH] v0.9.3: the dew vial is now a waterskin, and is spawned with the hero --- .../assets/messages/actors/actors.properties | 10 ++--- .../assets/messages/items/items.properties | 21 ++++++----- core/src/main/assets/sprites/items.png | Bin 19346 -> 19430 bytes .../shatteredpixeldungeon/Dungeon.java | 1 - .../ShatteredPixelDungeon.java | 5 +++ .../actors/blobs/WaterOfHealth.java | 6 +-- .../actors/hero/HeroClass.java | 35 +++++++++++------- .../shatteredpixeldungeon/items/Ankh.java | 10 ++--- .../shatteredpixeldungeon/items/Dewdrop.java | 12 +++--- .../items/{DewVial.java => Waterskin.java} | 26 +++++++++++-- .../levels/SewerLevel.java | 6 --- .../sprites/ItemSpriteSheet.java | 6 ++- .../ui/changelist/v0_6_X_Changes.java | 3 +- 13 files changed, 86 insertions(+), 55 deletions(-) rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/{DewVial.java => Waterskin.java} (90%) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 9edd78583..f1b3568d1 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -469,7 +469,7 @@ actors.hero.talent.durable_tips.desc=_+1:_ Tipped darts have _2x durability_ whe actors.hero.talent.barkskin.title=barkskin actors.hero.talent.barkskin.desc=_+1:_ When stepping in grass, the Warden gains barkskin equivalent to her level which fades every _1 turn_.\n\n_+2:_ When stepping in grass, the Warden gains barkskin equivalent to her level which fades every _2 turns_.\n\n_+3:_ When stepping in grass, the Warden gains barkskin equivalent to her level which fades every _3 turns_. actors.hero.talent.shielding_dew.title=shielding dew -actors.hero.talent.shielding_dew.desc=_+1:_ Dewdrops can shield the Warden when her health is full, up to _20% of her max HP_.\n\n_+2:_ Dewdrops can shield the Warden when her health is full, up to _40% of her max HP_.\n\n_+3:_ Dewdrops can shield the Warden for when her health is full, up to _60% of her max HP_. +actors.hero.talent.shielding_dew.desc=_+1:_ Dewdrops can shield the Warden when her health is full, up to _20% of her max HP_.\n\n_+2:_ Dewdrops can shield the Warden when her health is full, up to _40% of her max HP_.\n\n_+3:_ Dewdrops can shield the Warden when her health is full, up to _60% of her max HP_. actors.hero.hero.name=you actors.hero.hero.leave=You can't leave yet, the rest of the dungeon awaits below! @@ -491,25 +491,25 @@ actors.hero.hero.revive=The ankh explodes with life-giving energy! actors.hero.heroclass.warrior=warrior actors.hero.heroclass.warrior_desc_innate=The Warrior starts with a _unique broken seal,_ which he can affix to armor. He will slowly generate shielding over his health while he is wearing armor with the seal affixed.\n\nThe Warrior's seal can be moved between different armor sets, transferring a single upgrade with it.\n\nThe Warrior automatically identifies:\n- Scrolls of Identify\n- Potions of Healing\n- Scrolls of Rage -actors.hero.heroclass.warrior_desc_loadout=The Warrior starts with a _worn shortsword,_ which offers more direct damage than other starter weapons.\n\nThe Warrior starts with _three throwing stones,_ which offer limited ranged damage.\n\nThe Warrior starts with a _velvet pouch,_ which can store small items like seeds and runestones. +actors.hero.heroclass.warrior_desc_loadout=The Warrior starts with a _worn shortsword,_ which offers more direct damage than other starter weapons.\n\nThe Warrior starts with _three throwing stones,_ which offer limited ranged damage.\n\nThe Warrior starts with a _waterskin_, which can store healing water found in the dungeon\n\nThe Warrior starts with a _velvet pouch,_ which can store small items like seeds and runestones. actors.hero.heroclass.warrior_desc_subclasses=A subclass can be chosen after defeating the second boss. The Warrior has two subclasses: actors.hero.heroclass.mage=mage actors.hero.heroclass.mage_unlock=The Mage is an expert with wands, and carries a _unique magical staff._\n\nTo unlock him _use a scroll of upgrade to make an item stronger._ actors.hero.heroclass.mage_desc_innate=The Mage starts with a _unique staff_ of magic missile. The staff recharges significantly faster than a wand, and has 1 more maximum charge.\n\nThe Mage's staff can be imbued with any wand he finds in the dungeon. Imbuing changes the staff's effect and can be used to transfer some upgrades.\n\nThe Mage automatically identifies:\n- Scrolls of Identify\n- Potions of Liquid Flame\n- Scrolls of Upgrade -actors.hero.heroclass.mage_desc_loadout=The Mage starts with his staff as his melee weapon. The staff deals less melee damage than other starter weapons.\n\nThe Mage can use the magic in his staff to attack at range.\n\nThe Mage starts with a _velvet pouch,_ which can store small items like seeds and runestones. +actors.hero.heroclass.mage_desc_loadout=The Mage starts with his staff as his melee weapon. The staff deals less melee damage than other starter weapons.\n\nThe Mage can use the magic in his staff to attack at range.\n\nThe Mage starts with a _waterskin_, which can store healing water found in the dungeon\n\nThe Mage starts with a _velvet pouch,_ which can store small items like seeds and runestones. actors.hero.heroclass.mage_desc_subclasses=A subclass can be chosen after defeating the second boss. The Mage has two subclasses: actors.hero.heroclass.rogue=rogue actors.hero.heroclass.rogue_unlock=The Rogue can control the flow of battle and strike from invisibility using his _unique cloak of shadows._\n\nTo unlock him _perform 10 surprise attacks in one run._ actors.hero.heroclass.rogue_desc_innate=The Rogue starts with a unique artifact: the _Cloak of Shadows,_ which he can use to become invisible at will. Like all artifacts, the cloak becomes more powerful as it is used.\n\nThe Rogue can detect secrets and traps from a greater distance.\n\nThe Rogue automatically identifies:\n- Scrolls of Identify\n- Potions of Invisibility\n- Scrolls of Magic Mapping -actors.hero.heroclass.rogue_desc_loadout=The Rogue starts with a _dagger,_ which deals more damage when surprising enemies.\n\nThe Rogue starts with _three throwing knives,_ which offer some ranged damage and deal more damage to surprised enemies.\n\nThe Rogue starts with a _velvet pouch,_ which can store small items like seeds and runestones. +actors.hero.heroclass.rogue_desc_loadout=The Rogue starts with a _dagger,_ which deals more damage when surprising enemies.\n\nThe Rogue starts with _three throwing knives,_ which offer some ranged damage and deal more damage to surprised enemies.\n\nThe Rogue starts with a _waterskin_, which can store healing water found in the dungeon\n\nThe Rogue starts with a _velvet pouch,_ which can store small items like seeds and runestones. actors.hero.heroclass.rogue_desc_subclasses=A subclass can be chosen after defeating the second boss. The Rogue has two subclasses: actors.hero.heroclass.huntress=huntress actors.hero.heroclass.huntress_unlock=The Huntress is a master of thrown weapons, and has a _unique magical bow_ with infinite arrows.\n\nTo unlock her _hit 15 different enemies with thrown weapons in one run._ actors.hero.heroclass.huntress_desc_innate=The Huntress starts with a _unique spirit bow,_ which can fire an infinite number of conjured arrows. The bow steadily grows stronger as the huntress levels up, and can be augmented and enchanted.\n\nThe Huntress can travel through tall grass without trampling it.\n\nThe Huntress automatically identifies:\n- Scrolls of Identify\n- Potions of Mind Vision\n- Scrolls of Lullaby -actors.hero.heroclass.huntress_desc_loadout=The Huntress starts with a pair of _studded gloves,_ which attack much faster than other starter weapons.\n\nThe Huntress starts with her bow as a ranged option.\n\nThe Huntress starts with a _velvet pouch,_ which can store small items like seeds and runestones. +actors.hero.heroclass.huntress_desc_loadout=The Huntress starts with a pair of _studded gloves,_ which attack much faster than other starter weapons.\n\nThe Huntress starts with her bow as a ranged option.\n\nThe Huntress starts with a _waterskin_, which can store healing water found in the dungeon\n\nThe Huntress starts with a _velvet pouch,_ which can store small items like seeds and runestones. actors.hero.heroclass.huntress_desc_subclasses=A subclass can be chosen after defeating the second boss. The Huntress has two subclasses: actors.hero.herosubclass.gladiator=gladiator diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index b3b270beb..84c28652e 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1616,8 +1616,8 @@ items.amulet.desc=The Amulet of Yendor is the most powerful artifact known to hu items.ankh.name=ankh items.ankh.ac_bless=BLESS -items.ankh.bless=You bless the ankh with clean water. -items.ankh.desc=This ancient symbol of immortality grants the ability to return to life after death. Upon resurrection all non-equipped items are lost. Using a full dew vial, the ankh can be blessed with extra strength. +items.ankh.bless=You bless the ankh with magical water. +items.ankh.desc=This ancient symbol of immortality grants the ability to return to life after death. Upon resurrection all non-equipped items are lost. Using a full waterskin, the ankh can be blessed with extra strength. items.ankh.desc_blessed=This ancient symbol of immortality grants the ability to return to life after death. The ankh has been blessed and is now much stronger. The Ankh will sacrifice itself to save you in a moment of deadly peril. items.armorkit.name=armor kit @@ -1643,13 +1643,6 @@ items.dewdrop.both=+%1$dHP, +%2$dSHLD items.dewdrop.already_full=You already have full health. items.dewdrop.desc=A crystal clear dewdrop.\n\nDue to the magic of this place, pure water has minor restorative properties. -items.dewvial.name=dew vial -items.dewvial.ac_drink=DRINK -items.dewvial.collected=You collect the dewdrop into your dew vial. -items.dewvial.full=Your dew vial is full! -items.dewvial.empty=Your dew vial is empty! -items.dewvial.desc=You can store excess dew in this tiny vessel and drink it later. The more full the vial is, the more you will be instantly healed when drinking it. You will only drink as much as you need.\n\nVials like this one used to be imbued with revival magic, but that power has faded. There still seems to be some residual power left, perhaps a full vial can bless another revival item. - items.equipableitem.unequip_cursed=You can't remove a cursed item! items.equipableitem.ac_equip=EQUIP items.equipableitem.ac_unequip=UNEQUIP @@ -1712,3 +1705,13 @@ items.tomeofmastery.desc=This worn leather book is not that thick, but you feel items.torch.name=torch items.torch.ac_light=LIGHT items.torch.desc=An adventuring staple, when a dungeon goes dark, a torch can help lead the way. + +items.waterskin.name=waterskin +items.waterskin.ac_drink=DRINK +items.waterskin.collected=You collect the dewdrop into your waterskin. +items.waterskin.full=Your waterskin is full! +items.waterskin.empty=Your waterskin is empty! +items.waterskin.desc=A container for liquid, made from leather and string, sealed with a cork stopper. +items.waterskin.desc_water=Right now the waterskin just contains some plain drinking water. Surely there is something in the dungeon that the waterskin could store instead. +items.waterskin.desc_heal=The waterskin is currently being used to store healing water. The more full the waterskin is, the more you will be instantly healed when drinking from it. You will only drink as much as you need. +items.waterskin.desc_full=The full waterskin seems to radiate energy, perhaps it can be used to bless another survival item? diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 1689eec3995b2b49224f68c0dbf437b1b8d47f6e..d11de644a6d1ced62fee99a18a42f5977d288cee 100644 GIT binary patch delta 11592 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 E58~Q&(*OVf diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 6142f25ea..1680c5cc2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -108,7 +108,6 @@ public class Dungeon { GOLEM_EQUIP, //containers - DEW_VIAL, VELVET_POUCH, SCROLL_HOLDER, POTION_BANDOLIER, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index 4d22c1f20..ca2e58a26 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -71,6 +71,11 @@ public class ShatteredPixelDungeon extends Game { com.watabou.utils.Bundle.addAlias( com.shatteredpixel.shatteredpixeldungeon.levels.OldHallsBossLevel.class, "com.shatteredpixel.shatteredpixeldungeon.levels.HallsBossLevel" ); + + //v0.9.3 + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.Waterskin.class, + "com.shatteredpixel.shatteredpixeldungeon.items.DewVial" ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/WaterOfHealth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/WaterOfHealth.java index 9b07adafc..2abf201dc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/WaterOfHealth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/WaterOfHealth.java @@ -31,8 +31,8 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; -import com.shatteredpixel.shatteredpixeldungeon.items.DewVial; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes.Landmark; @@ -67,8 +67,8 @@ public class WaterOfHealth extends WellWater { @Override protected Item affectItem( Item item, int pos ) { - if (item instanceof DewVial && !((DewVial)item).isFull()) { - ((DewVial)item).fill(); + if (item instanceof Waterskin && !((Waterskin)item).isFull()) { + ((Waterskin)item).fill(); CellEmitter.get( pos ).start( Speck.factory( Speck.HEALING ), 0.4f, 4 ); Sample.INSTANCE.play( Assets.Sounds.DRINK ); return item; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index 59929a215..a2b9aa177 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -25,8 +25,10 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.QuickSlot; import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; @@ -72,7 +74,19 @@ public enum HeroClass { hero.heroClass = this; Talent.initClassTalents(hero); - initCommon( hero ); + Item i = new ClothArmor().identify(); + if (!Challenges.isItemBlocked(i)) hero.belongings.armor = (ClothArmor)i; + + i = new Food(); + if (!Challenges.isItemBlocked(i)) i.collect(); + + new VelvetPouch().collect(); + Dungeon.LimitedDrops.VELVET_POUCH.drop(); + + Waterskin waterskin = new Waterskin(); + waterskin.collect(); + + new ScrollOfIdentify().identify(); switch (this) { case WARRIOR: @@ -92,19 +106,12 @@ public enum HeroClass { break; } - } - - private static void initCommon( Hero hero ) { - Item i = new ClothArmor().identify(); - if (!Challenges.isItemBlocked(i)) hero.belongings.armor = (ClothArmor)i; - - i = new Food(); - if (!Challenges.isItemBlocked(i)) i.collect(); - - new VelvetPouch().collect(); - Dungeon.LimitedDrops.VELVET_POUCH.drop(); - - new ScrollOfIdentify().identify(); + for (int s = 0; s < QuickSlot.SIZE; s++){ + if (Dungeon.quickslot.getItem(s) == null){ + Dungeon.quickslot.setSlot(s, waterskin); + break; + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Ankh.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Ankh.java index 23aaee64e..1e42faeb4 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Ankh.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Ankh.java @@ -61,8 +61,8 @@ public class Ankh extends Item { @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions(hero); - DewVial vial = hero.belongings.getItem(DewVial.class); - if (vial != null && vial.isFull() && !blessed) + Waterskin waterskin = hero.belongings.getItem(Waterskin.class); + if (waterskin != null && waterskin.isFull() && !blessed) actions.add( AC_BLESS ); return actions; } @@ -74,10 +74,10 @@ public class Ankh extends Item { if (action.equals( AC_BLESS )) { - DewVial vial = hero.belongings.getItem(DewVial.class); - if (vial != null){ + Waterskin waterskin = hero.belongings.getItem(Waterskin.class); + if (waterskin != null){ blessed = true; - vial.empty(); + waterskin.empty(); GLog.p( Messages.get(this, "bless") ); hero.spend( 1f ); hero.busy(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Dewdrop.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Dewdrop.java index 70fbc2821..c9d9aafa1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Dewdrop.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Dewdrop.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; @@ -45,12 +46,13 @@ public class Dewdrop extends Item { @Override public boolean doPickUp( Hero hero ) { - DewVial vial = hero.belongings.getItem( DewVial.class ); + Waterskin flask = hero.belongings.getItem( Waterskin.class ); - if (vial != null && !vial.isFull()){ - - vial.collectDew( this ); - + if (flask != null && !flask.isFull()){ + + flask.collectDew( this ); + GameScene.pickUp( this, hero.pos ); + } else { if (!consumeDew(1, hero)){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/DewVial.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java similarity index 90% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/DewVial.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java index 6e4d61d81..bed28114f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/DewVial.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Waterskin.java @@ -34,7 +34,7 @@ import com.watabou.utils.GameMath; import java.util.ArrayList; -public class DewVial extends Item { +public class Waterskin extends Item { private static final int MAX_VOLUME = 20; @@ -45,7 +45,7 @@ public class DewVial extends Item { private static final String TXT_STATUS = "%d/%d"; { - image = ItemSpriteSheet.VIAL; + image = ItemSpriteSheet.WATERSKIN; defaultAction = AC_DRINK; @@ -123,7 +123,27 @@ public class DewVial extends Item { } } - public void empty() {volume = 0; updateQuickslot();} + @Override + public String info() { + String info = desc(); + + if (volume == 0){ + info += "\n\n" + Messages.get(this, "desc_water"); + } else { + info += "\n\n" + Messages.get(this, "desc_heal"); + } + + if (isFull()){ + info += "\n\n" + Messages.get(this, "desc_full"); + } + + return info; + } + + public void empty() { + volume = 0; + updateQuickslot(); + } @Override public boolean isUpgradable() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index 1ef801f7d..3c5d0d856 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost; import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple; -import com.shatteredpixel.shatteredpixeldungeon.items.DewVial; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.SewerPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap; @@ -110,11 +109,6 @@ public class SewerLevel extends RegularLevel { @Override protected void createItems() { - if (!Dungeon.LimitedDrops.DEW_VIAL.dropped()) { - addItemToSpawn( new DewVial() ); - Dungeon.LimitedDrops.DEW_VIAL.drop(); - } - Ghost.Quest.spawn( this ); super.createItems(); 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 6dec30544..c8ab70c1f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -666,17 +666,19 @@ public class ItemSpriteSheet { } private static final int BAGS = xy(1, 31); //16 slots - public static final int VIAL = BAGS+0; + public static final int WATERSKIN = BAGS+0; //FIXME placeholder sprite public static final int POUCH = BAGS+1; public static final int HOLDER = BAGS+2; public static final int BANDOLIER = BAGS+3; public static final int HOLSTER = BAGS+4; + public static final int VIAL = BAGS+5; static{ - assignItemRect(VIAL, 12, 12); + assignItemRect(WATERSKIN, 12, 16); assignItemRect(POUCH, 14, 15); assignItemRect(HOLDER, 16, 16); assignItemRect(BANDOLIER, 15, 16); assignItemRect(HOLSTER, 15, 16); + assignItemRect(VIAL, 12, 12); } //16 free slots diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java index 51847bbc0..9ad61acc6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/changelist/v0_6_X_Changes.java @@ -24,7 +24,6 @@ package com.shatteredpixel.shatteredpixeldungeon.ui.changelist; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.effects.BadgeBanner; -import com.shatteredpixel.shatteredpixeldungeon.items.DewVial; import com.shatteredpixel.shatteredpixeldungeon.items.Torch; import com.shatteredpixel.shatteredpixeldungeon.items.armor.curses.Bulk; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; @@ -737,7 +736,7 @@ public class v0_6_X_Changes { "_-_ Health potions now heal more than max HP at low levels, and slightly less than max HP at high levels.\n\n" + "Make sure to read the dew vial changes as well.")); - changes.addButton( new ChangeButton( new DewVial(), + changes.addButton( new ChangeButton( new ItemSprite(ItemSpriteSheet.VIAL, null), "Dew Vial", "The dew vial (and dew) are having their healing abilities enhanced to improve the availability of healing in the sewers, and to help offset the health potion changes.\n\n" + "_-_ Dew drops now heal 5% of max HP\n\n" + "_-_ Dew vial now always spawns on floor 1\n\n" +