v0.9.3: the dew vial is now a waterskin, and is spawned with the hero

This commit is contained in:
Evan Debenham 2021-03-24 19:34:47 -04:00
parent b549c304c4
commit d2e2172ede
13 changed files with 86 additions and 55 deletions

View File

@ -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

View File

@ -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?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -108,7 +108,6 @@ public class Dungeon {
GOLEM_EQUIP,
//containers
DEW_VIAL,
VELVET_POUCH,
SCROLL_HOLDER,
POTION_BANDOLIER,

View File

@ -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" );
}

View File

@ -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;

View File

@ -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;
}
}
}

View File

@ -61,8 +61,8 @@ public class Ankh extends Item {
@Override
public ArrayList<String> actions( Hero hero ) {
ArrayList<String> 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();

View File

@ -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)){

View File

@ -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() {

View File

@ -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();

View File

@ -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

View File

@ -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" +