From a77194317ef62e0995a4109c6cc7fd4349dab441 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 10 Mar 2016 00:44:52 -0500 Subject: [PATCH] v0.3.5: lots of broken sigil implementation --- assets/items.png | Bin 13243 -> 13892 bytes .../shatteredpixeldungeon/Bones.java | 2 +- .../actors/hero/HeroClass.java | 3 +- .../items/BrokenSigil.java | 70 ++++++++++++++++-- .../shatteredpixeldungeon/items/Item.java | 4 +- .../items/armor/Armor.java | 66 +++++++++++++++-- .../items/artifacts/LloydsBeacon.java | 4 - .../items/potions/Potion.java | 22 +++--- .../items/rings/Ring.java | 6 +- .../items/scrolls/Scroll.java | 6 +- .../messages/items/items.properties | 10 +++ .../sprites/ItemSpriteSheet.java | 47 ++++++------ 12 files changed, 180 insertions(+), 60 deletions(-) diff --git a/assets/items.png b/assets/items.png index 471ea791b1f515acde73c7d56468a6e6be1554a1..a24f95aeb2302042521ea8d586583c1776dd0004 100644 GIT binary patch literal 13892 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 literal 13243 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 diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/Bones.java b/src/com/shatteredpixel/shatteredpixeldungeon/Bones.java index fe7654735..8d30d10f4 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/Bones.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/Bones.java @@ -181,7 +181,7 @@ public class Bones { } } - item.sync(); + item.reset(); return item; } else { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index c3c7a1008..849013b0a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; +import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSigil; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClothArmor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; @@ -108,7 +109,7 @@ public enum HeroClass { Dart darts = new Dart( 8 ); darts.identify().collect(); - hero.belongings.armor.activate(hero); + new BrokenSigil().collect(); Dungeon.quickslot.setSlot(0, darts); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSigil.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSigil.java index bc473c726..2bdcd1d24 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSigil.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSigil.java @@ -1,11 +1,72 @@ package com.shatteredpixel.shatteredpixeldungeon.items; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; +import com.watabou.noosa.audio.Sample; -//TODO: add actual item properties here -public class BrokenSigil { +import java.util.ArrayList; + +public class BrokenSigil extends Item { + + public static final String AC_AFFIX = "AFFIX"; + + { + image = ItemSpriteSheet.SIGIL; + + cursedKnown = levelKnown = true; + unique = true; + bones = false; + } + + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + actions.add(AC_AFFIX); + return actions; + } + + @Override + public void execute(Hero hero, String action) { + if (action.equals(AC_AFFIX)){ + curItem = this; + GameScene.selectItem(armorSelector, WndBag.Mode.ARMOR, Messages.get(this, "prompt")); + } else { + super.execute(hero, action); + } + } + + @Override + public boolean isUpgradable() { + return false; + } + + protected static WndBag.Listener armorSelector = new WndBag.Listener() { + @Override + public void onSelect( Item item ) { + if (item != null && item instanceof Armor) { + Armor armor = (Armor)item; + if (!armor.levelKnown){ + GLog.w(Messages.get(BrokenSigil.class, "unknown_armor")); + } else if (armor.cursed || armor.level() < 0){ + GLog.w(Messages.get(BrokenSigil.class, "degraded_armor")); + } else { + GLog.p(Messages.get(BrokenSigil.class, "affix")); + Dungeon.hero.sprite.operate(Dungeon.hero.pos); + Sample.INSTANCE.play(Assets.SND_UNLOCK); + armor.affixSigil((BrokenSigil)curItem); + curItem.detach(Dungeon.hero.belongings.backpack); + } + } + } + }; public static class SigilShield extends Buff { @@ -16,10 +77,9 @@ public class BrokenSigil { public boolean act() { if (armor == null) detach(); else if (armor.isEquipped((Hero)target)) { - //1 + half of your DR, rounded up. - int maxShield = (int)(armor.DR()/2f + 1.5f); + int maxShield = 1 + armor.tier + armor.level(); if (target.SHLD < maxShield){ - partialShield += (maxShield - target.SHLD)/50f; + partialShield += 1/(30*Math.pow(0.9f, (maxShield - target.SHLD))); } } while (partialShield >= 1){ diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/Item.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/Item.java index 20bc575c3..7fc2d18fe 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/Item.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/Item.java @@ -117,8 +117,8 @@ public class Item implements Bundlable { Dungeon.level.drop( detachAll( hero.belongings.backpack ), hero.pos ).sprite.drop( hero.pos ); } - //'syncs' an item to be consistent between two separate game instances. - public void sync(){ + //resets an item's properties, to ensure consistency between runs + public void reset(){ //resets the name incase the language has changed. name = Messages.get(this, "name"); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java index 8a7a21b5f..d67451422 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java @@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; -import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSigil; import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem; @@ -49,11 +48,14 @@ import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; import com.watabou.utils.Random; +import java.util.ArrayList; + public class Armor extends EquipableItem { private static final int HITS_TO_KNOW = 10; private static final String TXT_TO_STRING = "%s :%d"; + private static final String AC_DETACH = "DETACH"; public int tier; @@ -73,11 +75,14 @@ public class Armor extends EquipableItem { private static final String UNFAMILIRIARITY = "unfamiliarity"; private static final String GLYPH = "glyph"; + private static final String SIGIL = "sigil"; + @Override public void storeInBundle( Bundle bundle ) { super.storeInBundle( bundle ); bundle.put( UNFAMILIRIARITY, hitsToKnow ); bundle.put( GLYPH, glyph ); + bundle.put( SIGIL, sigil ); } @Override @@ -87,6 +92,44 @@ public class Armor extends EquipableItem { hitsToKnow = HITS_TO_KNOW; } inscribe((Glyph) bundle.get(GLYPH)); + sigil = bundle.getBoolean(SIGIL); + if (sigil) unique = true; + } + + @Override + public void reset() { + super.reset(); + //armor can be kept in bones between runs, the sigil cannot. + sigil = false; + } + + @Override + public ArrayList actions(Hero hero) { + ArrayList actions = super.actions(hero); + if (sigil) actions.add(AC_DETACH); + return actions; + } + + @Override + public void execute(Hero hero, String action) { + if (action.equals(AC_DETACH) && sigil){ + sigil = false; + BrokenSigil.SigilShield sigilBuff = hero.buff(BrokenSigil.SigilShield.class); + if (sigilBuff != null) sigilBuff.setArmor(null); + + BrokenSigil sigil = new BrokenSigil(); + if (level() > 0){ + sigil.upgrade(); + degrade(); + } + GLog.i( Messages.get(Armor.class, "detach_sigil") ); + hero.sprite.operate(hero.pos); + if (!sigil.collect()){ + Dungeon.level.drop(sigil, hero.pos); + } + } else { + super.execute(hero, action); + } } @Override @@ -120,8 +163,18 @@ public class Armor extends EquipableItem { @Override public void activate(Char ch) { - if (Dungeon.hero.heroClass == HeroClass.WARRIOR) - Buff.affect(ch, BrokenSigil.SigilShield.class).setArmor(this); + if (sigil) Buff.affect(ch, BrokenSigil.SigilShield.class).setArmor(this); + } + + public void affixSigil(BrokenSigil sigil){ + this.sigil = true; + if (sigil.level() > 0){ + //doesn't override existing glyphs, but doesn't create one either + upgrade(glyph != null); + } + if (isEquipped(Dungeon.hero)){ + Buff.affect(Dungeon.hero, BrokenSigil.SigilShield.class).setArmor(this); + } } @Override @@ -136,8 +189,8 @@ public class Armor extends EquipableItem { hero.belongings.armor = null; ((HeroSprite)hero.sprite).updateArmor(); - BrokenSigil.SigilShield sigil = hero.buff(BrokenSigil.SigilShield.class); - if (sigil != null) sigil.setArmor(null); + BrokenSigil.SigilShield sigilBuff = hero.buff(BrokenSigil.SigilShield.class); + if (sigilBuff != null) sigilBuff.setArmor(null); return true; @@ -247,8 +300,7 @@ public class Armor extends EquipableItem { @Override public Emitter emitter() { - //if (!sigil) return super.emitter(); - if (Dungeon.hero.heroClass != HeroClass.WARRIOR) return super.emitter(); + if (!sigil) return super.emitter(); Emitter emitter = new Emitter(); emitter.pos(10f, 6f); emitter.fillTarget = false; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/LloydsBeacon.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/LloydsBeacon.java index 307d5ceee..c69f8a0b0 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/LloydsBeacon.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/LloydsBeacon.java @@ -268,10 +268,6 @@ public class LloydsBeacon extends Artifact { } return desc; } - - public void reset() { - returnDepth = -1; - } private static final Glowing WHITE = new Glowing( 0xFFFFFF ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/potions/Potion.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/potions/Potion.java index ce69de13d..eaaddce9d 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/potions/Potion.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/potions/Potion.java @@ -20,32 +20,32 @@ */ package com.shatteredpixel.shatteredpixeldungeon.items.potions; -import java.util.ArrayList; -import java.util.HashSet; - +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Badges; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Fire; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning; -import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; -import com.watabou.noosa.audio.Sample; -import com.shatteredpixel.shatteredpixeldungeon.Assets; -import com.shatteredpixel.shatteredpixeldungeon.Badges; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.ItemStatusHandler; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; +import com.watabou.noosa.audio.Sample; import com.watabou.utils.Bundle; +import java.util.ArrayList; +import java.util.HashSet; + public class Potion extends Item { public static final String AC_DRINK = "DRINK"; @@ -112,12 +112,12 @@ public class Potion extends Item { public Potion() { super(); - sync(); + reset(); } @Override - public void sync(){ - super.sync(); + public void reset(){ + super.reset(); image = handler.image( this ); color = handler.label( this ); }; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/rings/Ring.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/rings/Ring.java index c0d30e05b..7d652df0e 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/rings/Ring.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/rings/Ring.java @@ -92,11 +92,11 @@ public class Ring extends KindofMisc { public Ring() { super(); - sync(); + reset(); } - public void sync() { - super.sync(); + public void reset() { + super.reset(); image = handler.image( this ); gem = handler.label( this ); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java index dc415b221..f8dd258f9 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/Scroll.java @@ -100,12 +100,12 @@ public abstract class Scroll extends Item { public Scroll() { super(); - sync(); + reset(); } @Override - public void sync(){ - super.sync(); + public void reset(){ + super.reset(); image = handler.image( this ); rune = handler.label( this ); }; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index 92b6445e2..ccea6984a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -29,6 +29,8 @@ items.armor.glyphs.viscosity$defereddamage.desc=While your armor's glyph has pro ###armor +items.armor.armor.ac_detach=DETACH +items.armor.armor.detach_sigil=You detach the sigil from your armor. items.armor.armor.equip_cursed=your %s constricts around you painfully items.armor.armor.identify=you are now familiar enough with your %s to identify it. It is %s. items.armor.armor.incompatible=Interaction of different types of magic has erased the glyph on this armor! @@ -801,6 +803,14 @@ items.bomb.desc_burning=A fairly hefty black powder bomb. An explosion from this items.bomb$doublebomb.name=two bombs items.bomb$doublebomb.desc=A stack of two hefty black powder bombs, looks like you get one free! +items.brokensigil.name=Broken Sigil +items.brokensigil.ac_affix=AFFIX +items.brokensigil.prompt=Select an armor +items.brokensigil.unknown_armor=You must identify that armor first. +items.brokensigil.degraded_armor=That armor is in too poor a condition. +items.brokensigil.affix=You affix the sigil to your armor! +items.brokensigil.desc=A broken sigil from the warrior's past.\n\nMORE STUFF NEEDED HERE. + items.dewdrop.name=dewdrop items.dewdrop.value=%+dHP items.dewdrop.already_full=You already have full health. diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/src/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index ad3201d37..92f7ae4eb 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -46,39 +46,40 @@ public class ItemSpriteSheet { public static final int DEWDROP = ROW1+1; public static final int PETAL = ROW1+2; public static final int SANDBAG = ROW1+3; + public static final int DBL_BOMB = ROW1+4; // Heaps (containers) - public static final int BONES = ROW1+4; - public static final int REMAINS = ROW1+5; - public static final int TOMB = ROW1+6; - public static final int GRAVE = ROW1+7; - public static final int CHEST = ROW1+8; - public static final int LOCKED_CHEST = ROW1+9; - public static final int CRYSTAL_CHEST = ROW1+10; + public static final int BONES = ROW1+5; + public static final int REMAINS = ROW1+6; + public static final int TOMB = ROW1+7; + public static final int GRAVE = ROW1+8; + public static final int CHEST = ROW1+9; + public static final int LOCKED_CHEST = ROW1+10; + public static final int CRYSTAL_CHEST = ROW1+11; // Placeholders - public static final int WEAPON = ROW1+11; - public static final int ARMOR = ROW1+12; - public static final int RING = ROW1+13; - public static final int SMTH = ROW1+14; + public static final int WEAPON = ROW1+12; + public static final int ARMOR = ROW1+13; + public static final int RING = ROW1+14; + public static final int SMTH = ROW1+15; //Row Two: Miscellaneous single use items public static final int GOLD = ROW2+0; public static final int TORCH = ROW2+1; public static final int STYLUS = ROW2+2; public static final int ANKH = ROW2+3; + public static final int WEIGHT = ROW2+4; + public static final int BOMB = ROW2+5; + public static final int HONEYPOT = ROW2+6; + public static final int SHATTPOT = ROW2+7; + public static final int SIGIL = ROW2+8; // Keys - public static final int IRON_KEY = ROW2+4; - public static final int GOLDEN_KEY = ROW2+5; - public static final int SKELETON_KEY = ROW2+6; + public static final int IRON_KEY = ROW2+9; + public static final int GOLDEN_KEY = ROW2+10; + public static final int SKELETON_KEY = ROW2+11; //Boss Rewards - public static final int BEACON = ROW2+7; - public static final int MASTERY = ROW2+8; - public static final int KIT = ROW2+9; - public static final int AMULET = ROW2+10; - public static final int WEIGHT = ROW2+11; - public static final int BOMB = ROW2+12; - public static final int DBL_BOMB= ROW2+13; - public static final int HONEYPOT= ROW2+14; - public static final int SHATTPOT= ROW2+15; + public static final int BEACON = ROW2+12; + public static final int MASTERY = ROW2+13; + public static final int KIT = ROW2+14; + public static final int AMULET = ROW2+15; //Row Three: Melee weapons public static final int KNUCKLEDUSTER = ROW3+0;