From 629f6cefeb67ee6e5279cd58a004ef4943f330b6 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 22 Jul 2025 15:42:55 -0400 Subject: [PATCH] v3.2.0: enchant/curse adjustments for thrown weapons: - projecting can now stack from multiple sources - explosive now deals an extra 9x uses of durability dmg - friendly thrown weps now deal 0 dmg if charmed --- .../main/assets/messages/items/items.properties | 2 +- .../items/weapon/curses/Explosive.java | 5 +++++ .../items/weapon/curses/Friendly.java | 4 ++++ .../items/weapon/missiles/MissileWeapon.java | 17 ++++++++++++----- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 2bf8606fc..f4c12932f 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1718,7 +1718,7 @@ items.weapon.curses.displacing.elestrike_desc=An elemental strike with a displac items.weapon.curses.explosive.name=explosive %s items.weapon.curses.explosive.warm=Warm... items.weapon.curses.explosive.hot=Hot! -items.weapon.curses.explosive.desc=Explosive weapons steadily build up power and explode, damaging the wearer and enemy. +items.weapon.curses.explosive.desc=Explosive weapons steadily build up power and explode, damaging anything nearby. items.weapon.curses.explosive.desc_cool=Your weapon is currently cool to the touch. items.weapon.curses.explosive.desc_warm=Your weapon is building energy and getting warm... items.weapon.curses.explosive.desc_hot=Your weapon is hot! It's about to explode! diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Explosive.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Explosive.java index aaa1ac964..0daff0f01 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Explosive.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Explosive.java @@ -81,6 +81,11 @@ public class Explosive extends Weapon.Enchantment { durability = 100; Item.updateQuickslot(); + + if (weapon instanceof MissileWeapon){ + //the explosion damages thrown weapons + ((MissileWeapon) weapon).damage(9*((MissileWeapon) weapon).durabilityPerUse()); + } } if (weapon instanceof MissileWeapon diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Friendly.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Friendly.java index 6aef6d8a0..34025810e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Friendly.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/curses/Friendly.java @@ -36,6 +36,10 @@ public class Friendly extends Weapon.Enchantment { @Override public int proc(Weapon weapon, Char attacker, Char defender, int damage ) { + if (attacker.buff(Charm.class) != null && attacker.buff(Charm.class).object == defender.id()){ + damage = 0; + } + float procChance = 1/10f * procChanceMultiplier(attacker); if (Random.Float() < procChance) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java index b2fa3ecdc..b5a5f0382 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/MissileWeapon.java @@ -189,18 +189,20 @@ abstract public class MissileWeapon extends Weapon { @Override public int throwPos(Hero user, int dst) { - //TODO do we want to let these stack? - boolean projecting = hasEnchant(Projecting.class, user); + int projecting = 0; + if (hasEnchant(Projecting.class, user)){ + projecting += 4; + } if (Random.Int(3) < user.pointsInTalent(Talent.SHARED_ENCHANTMENT)){ SpiritBow bow = Dungeon.hero.belongings.getItem(SpiritBow.class); if (bow != null && bow.hasEnchant(Projecting.class, user)) { - projecting = true; + projecting += 4; } } - if (projecting + if (projecting > 0 && (Dungeon.level.passable[dst] || Dungeon.level.avoid[dst] || Actor.findChar(dst) != null) - && Dungeon.level.distance(user.pos, dst) <= Math.round(4 * Enchantment.genericProcChanceMultiplier(user))){ + && Dungeon.level.distance(user.pos, dst) <= Math.round(projecting * Enchantment.genericProcChanceMultiplier(user))){ return dst; } else { return super.throwPos(user, dst); @@ -421,6 +423,11 @@ abstract public class MissileWeapon extends Weapon { durability = Math.min(durability, MAX_DURABILITY); } + public void damage( float amount ){ + durability -= amount; + durability = Math.max(durability, 1); //cannot break from doing this + } + public final float durabilityPerUse(){ return durabilityPerUse(level()); }