From e7bdda0dbed233cbab711c489c8696b260e9bc53 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 3 Apr 2025 13:12:33 -0400 Subject: [PATCH] v3.1.0: broken seal no longer requires ID or uncurse, just curse known --- .../assets/messages/actors/actors.properties | 2 +- .../assets/messages/items/items.properties | 4 +-- .../items/BrokenSeal.java | 26 ++++++++++++++----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index c4872a778..b3e3476cc 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -799,7 +799,7 @@ actors.hero.hero.revive=The ankh explodes with life-giving energy! ##classes actors.hero.heroclass.warrior=warrior actors.hero.heroclass.warrior_desc_short=The Warrior endures extra damage with shielding granted by his _broken seal._ The seal can be moved between armors and _transfers a single upgrade._ -actors.hero.heroclass.warrior_desc=The Warrior starts with a _unique broken seal_ that generates shielding over his health. The seal can be moved between armors, and can _transfer a single upgrade_ with it.\n\nThe Warrior also starts with a _worn shortsword_, _three throwing stones_, cloth armor, a waterskin, and a velvet pouch.\n\nThe Warrior automatically identifies:\n_-_ Scrolls of Identify\n_-_ Potions of Healing\n_-_ Scrolls of Rage +actors.hero.heroclass.warrior_desc=The Warrior starts with a _unique broken seal_ that grants him a burst of shielding when he is below half health. The seal can be moved between armors, and can _transfer a single upgrade_ with it.\n\nThe Warrior also starts with a _worn shortsword_, _three throwing stones_, cloth armor, a waterskin, and a velvet pouch.\n\nThe Warrior automatically identifies:\n_-_ Scrolls of Identify\n_-_ Potions of Healing\n_-_ Scrolls of Rage actors.hero.heroclass.warrior_unlock=The Warrior is automatically unlocked. actors.hero.heroclass.mage=mage diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 9beb9f2c7..af2122b2a 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -2257,13 +2257,13 @@ items.arcaneresin.discover_hint=You can craft this item via alchemy. items.brokenseal.name=broken seal items.brokenseal.ac_affix=AFFIX items.brokenseal.prompt=Select an armor -items.brokenseal.unknown_armor=You must identify that armor first. -items.brokenseal.cursed_armor=The seal won't apply to cursed armor. +items.brokenseal.unknown_armor=You must identify whether that armor is cursed or not first. items.brokenseal.affix=You affix the seal to your armor! items.brokenseal.desc=A wax seal, affixed to armor as a symbol of valor. All the markings on the seal have worn off with age and it is broken in half down the middle.\n\nA memento from his home, the seal helps the warrior persevere. While wearing the seal the warrior will instantly gain shielding when he is about to be damaged to half health or lower.\n\nThe seal can be _affixed to armor,_ and moved between armors. It can carry a single upgrade with it, so long as that upgrade was applied to the armor while the seal was attached to it. items.brokenseal.inscribed=The seal is inscribed with a _%s._ items.brokenseal.choose_title=Choose a Glyph items.brokenseal.choose_desc=Both this armor and the broken seal are carrying a glyph. Pick which glyph should be kept.\n\nNote that if you pick the glyph that is currently on the armor, the seal will not be able to transfer it later. +items.brokenseal.choose_curse_warn=_Your armor is cursed but your seal is not, so you cannot choose the seal's glyph!_ items.brokenseal.discover_hint=One of the heroes starts with this item. items.brokenseal$warriorshield.name=Warrior Shield items.brokenseal$warriorshield.desc_active=The Warrior's broken seal is currently helping him persevere, granting him shielding on top of his health. There is a 100 turn cooldown after the shielding initially triggers before it can be used again.\n\nThis shield does not decay over time, but will end if no enemies are nearby for a few turns. When it ends, any unused shielding will reduce the cooldown, up to a max of 50%%.\n\nShield remaining: %1$d.\n\nCurrent Cooldown: %2$d. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java index 39435f6b2..33f982907 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/BrokenSeal.java @@ -162,21 +162,27 @@ public class BrokenSeal extends Item { BrokenSeal seal = (BrokenSeal) curItem; if (item != null && item instanceof Armor) { Armor armor = (Armor)item; - if (!armor.levelKnown){ + if (!armor.cursedKnown){ GLog.w(Messages.get(BrokenSeal.class, "unknown_armor")); - } else if (armor.cursed && (seal.getGlyph() == null || !seal.getGlyph().curse())){ - GLog.w(Messages.get(BrokenSeal.class, "cursed_armor")); - - } else if (armor.glyph != null && seal.getGlyph() != null + } else if (armor.glyph != null && seal.getGlyph() != null && armor.glyph.getClass() != seal.getGlyph().getClass()) { + + //cannot apply the seal's non-curse glyph to a curse glyph armor + final boolean sealGlyphApplicable = !armor.glyph.curse() || seal.getGlyph().curse(); + String bodyText = Messages.get(BrokenSeal.class, "choose_desc"); + if (!sealGlyphApplicable){ + bodyText += "\n\n" + Messages.get(BrokenSeal.class, "choose_curse_warn"); + } + GameScene.show(new WndOptions(new ItemSprite(seal), Messages.get(BrokenSeal.class, "choose_title"), - Messages.get(BrokenSeal.class, "choose_desc"), + bodyText, armor.glyph.name(), seal.getGlyph().name()){ @Override protected void onSelect(int index) { + if (index == -1) return; if (index == 0) seal.setGlyph(null); //if index is 1, then the glyph transfer happens in affixSeal @@ -186,6 +192,14 @@ public class BrokenSeal extends Item { armor.affixSeal(seal); seal.detach(Dungeon.hero.belongings.backpack); } + + @Override + protected boolean enabled(int index) { + if (index == 1 && !sealGlyphApplicable){ + return false; + } + return super.enabled(index); + } }); } else {