From a1e8bdb1b3381144197c1d81e5bfcc157aabe068 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 20 Nov 2024 12:42:49 -0500 Subject: [PATCH] v3.0.0: implemented the light reading talent --- .../main/assets/interfaces/talent_icons.png | Bin 7321 -> 7340 bytes .../assets/messages/actors/actors.properties | 6 +-- .../actors/hero/Hero.java | 4 +- .../actors/hero/Talent.java | 14 +++++- .../items/LostBackpack.java | 3 ++ .../items/artifacts/HolyTome.java | 45 +++++++++++++++++- .../windows/WndQuickBag.java | 4 +- 7 files changed, 67 insertions(+), 9 deletions(-) diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index fa9bb1153dfe7c5c324c96d6fc0e5ac111982e23..cfbfabe7ed98d8fcabc6fdb821ef5d113080be76 100644 GIT binary patch delta 7029 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 delta 7010 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 Q{ExS1hvW7aTN#)B2U-A5Bme*a diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 51f2bcc90..58ac4ea1e 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -867,7 +867,7 @@ actors.hero.talent.rogues_foresight.title=rogue's foresight actors.hero.talent.rogues_foresight.desc=_+1:_ When the Rogue is on a level with a secret room, he has a _75% chance to notice_ that the level contains a secret.\n\n_+2:_ When the Rogue is on a level with a secret room, he has a _100% chance to notice_ that the level contains a secret. actors.hero.talent.light_cloak.title=light cloak -actors.hero.talent.light_cloak.desc=_+1:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _25% speed_.\n\n_+2:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _50% speed_.\n\n_+3:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _75% speed_. +actors.hero.talent.light_cloak.desc=_+1:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _25% speed_ when unequipped.\n\n_+2:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _50% speed_ when unequipped.\n\n_+3:_ The Rogue can use his cloak of shadows when it is not equipped, but it recharges at _75% speed_ when unequipped. actors.hero.talent.light_cloak.meta_desc=_If this talent is gained by a different hero_ it will instead increase the charging speed of all artifacts by 7/13/20% at +1/+2/+3. actors.hero.talent.enhanced_rings.title=enhanced rings actors.hero.talent.enhanced_rings.desc=_+1:_ When the Rogue uses an artifact, his rings gain +1 upgrade for _3 turns_.\n\n_+2:_ When the Rogue uses an artifact, his rings gain +1 upgrade for _6 turns_.\n\n_+3:_ When the Rogue uses an artifact, his rings gain +1 upgrade for _9 turns_. @@ -1058,8 +1058,8 @@ actors.hero.talent.clerict2e.desc=This talent hasn't been implemented yet, it cu actors.hero.talent.clerict3a.title=Unknown actors.hero.talent.clerict3a.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.clerict3b.title=Unknown -actors.hero.talent.clerict3b.desc=This talent hasn't been implemented yet, it currently does nothing. +actors.hero.talent.light_reading.title=Light Reading +actors.hero.talent.light_reading.desc=_+1:_ The Cleric can use his holy tome when it is not equipped, but it recharges at _25% speed_ when unequipped.\n\n_+2:_ The Cleric can use his holy tome when it is not equipped, but it recharges at _50% speed_ when unequipped.\n\n_+3:_ The Cleric can use his holy tome when it is not equipped, but it recharges at _75% speed_ when unequipped. actors.hero.talent.priestt3a.title=Unknown actors.hero.talent.priestt3a.desc=This talent hasn't been implemented yet, it currently does nothing. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 67d697c22..a54779935 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -2481,8 +2481,10 @@ public class Hero extends Char { for (Item i : belongings){ if (i instanceof EquipableItem && i.isEquipped(this)){ ((EquipableItem) i).activate(this); - } else if (i instanceof CloakOfShadows && i.keptThroughLostInventory() && hasTalent(Talent.LIGHT_CLOAK)){ + } else if (i instanceof CloakOfShadows && i.keptThroughLostInventory() && hasTalent(Talent.LIGHT_CLOAK)) { ((CloakOfShadows) i).activate(this); + } else if (i instanceof HolyTome && i.keptThroughLostInventory() && hasTalent(Talent.LIGHT_READING)) { + ((HolyTome) i).activate(this); } else if (i instanceof Wand && i.keptThroughLostInventory()){ if (holster != null && holster.contains(i)){ ((Wand) i).charge(this, MagicalHolster.HOLSTER_SCALE_FACTOR); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java index 3a9398f24..3d8851796 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Talent.java @@ -179,7 +179,7 @@ public enum Talent { //Cleric T2 ENLIGHTENING_MEAL(164), RECALL_GLYPH(165), SUNRAY(166), DIVINE_SENSE(167), CLERICT2E(168), //Cleric T3 - CLERICT3A(169, 3), CLERICT3B(170, 3), + CLERICT3A(169, 3), LIGHT_READING(170, 3), //Priest T3 PRIESTT3A(171, 3), PRIESTT3B(172, 3), PRIESTT3C(173, 3), //Paladin T3 @@ -540,6 +540,16 @@ public enum Talent { Dungeon.level.drop(toGive, hero.pos).sprite.drop(); } } + + if (talent == LIGHT_READING && hero.heroClass == HeroClass.CLERIC){ + for (Item item : Dungeon.hero.belongings.backpack){ + if (item instanceof HolyTome){ + if (!hero.belongings.lostInventory() || item.keptThroughLostInventory()) { + ((HolyTome) item).activate(Dungeon.hero); + } + } + } + } } public static class CachedRationsDropped extends CounterBuff{{revivePersists = true;}}; @@ -954,7 +964,7 @@ public enum Talent { Collections.addAll(tierTalents, PRECISE_ASSAULT, DEADLY_FOLLOWUP); break; case CLERIC: - Collections.addAll(tierTalents, CLERICT3A, CLERICT3B); + Collections.addAll(tierTalents, CLERICT3A, LIGHT_READING); break; } for (Talent talent : tierTalents){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java index 5068627c5..e5ed4af1d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/LostBackpack.java @@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LostInventory; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster; import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -57,6 +58,8 @@ public class LostBackpack extends Item { ((EquipableItem) i).activate(hero); } else if ( i instanceof CloakOfShadows && hero.hasTalent(Talent.LIGHT_CLOAK)){ ((CloakOfShadows) i).activate(hero); + } else if ( i instanceof HolyTome && hero.hasTalent(Talent.LIGHT_READING)){ + ((HolyTome) i).activate(hero); } else if (i instanceof Wand){ if (holster != null && holster.contains(i)){ ((Wand) i).charge(hero, MagicalHolster.HOLSTER_SCALE_FACTOR); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HolyTome.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HolyTome.java index f8c885193..f41bd7259 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HolyTome.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HolyTome.java @@ -24,8 +24,10 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.ClericSpell; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy; import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -59,7 +61,7 @@ public class HolyTome extends Artifact { @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); - if (isEquipped( hero ) + if ((isEquipped( hero ) || hero.hasTalent(Talent.LIGHT_READING)) && !cursed && hero.buff(MagicImmune.class) == null) { actions.add(AC_CAST); @@ -76,7 +78,7 @@ public class HolyTome extends Artifact { if (action.equals(AC_CAST)) { - if (!isEquipped(hero)) GLog.i(Messages.get(Artifact.class, "need_to_equip")); + if (!isEquipped(hero) && !hero.hasTalent(Talent.LIGHT_READING)) GLog.i(Messages.get(Artifact.class, "need_to_equip")); else { GameScene.show(new WndClericSpells(this, hero, false)); @@ -86,6 +88,40 @@ public class HolyTome extends Artifact { } } + @Override + public boolean doUnequip(Hero hero, boolean collect, boolean single) { + if (super.doUnequip(hero, collect, single)){ + if (collect && hero.hasTalent(Talent.LIGHT_READING)){ + activate(hero); + } + + return true; + } else + return false; + } + + @Override + public boolean collect( Bag container ) { + if (super.collect(container)){ + if (container.owner instanceof Hero + && passiveBuff == null + && ((Hero) container.owner).hasTalent(Talent.LIGHT_READING)){ + activate((Hero) container.owner); + } + return true; + } else{ + return false; + } + } + + @Override + protected void onDetach() { + if (passiveBuff != null){ + passiveBuff.detach(); + passiveBuff = null; + } + } + public boolean canCast( Hero hero, ClericSpell spell ){ return (charge >= spell.chargeUse(hero) && spell.canCast(hero)); } @@ -153,6 +189,7 @@ public class HolyTome extends Artifact { if (cursed || target.buff(MagicImmune.class) != null) return; if (charge < chargeCap) { + if (!isEquipped(target)) amount *= 0.75f*target.pointsInTalent(Talent.LIGHT_READING)/3f; partialCharge += 0.25f*amount; while (partialCharge >= 1f) { charge++; @@ -184,6 +221,10 @@ public class HolyTome extends Artifact { chargeGain *= 0.67f; } + if (!isEquipped(Dungeon.hero)){ + chargeGain *= 0.75f*Dungeon.hero.pointsInTalent(Talent.LIGHT_READING)/3f; + } + partialCharge += chargeGain; //charge is in increments of 1/5 max hunger value. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndQuickBag.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndQuickBag.java index ba116315c..fca0bcead 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndQuickBag.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndQuickBag.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -72,7 +73,8 @@ public class WndQuickBag extends Window { } if (i instanceof Artifact && !i.isEquipped(Dungeon.hero) - && (!(i instanceof CloakOfShadows) || !Dungeon.hero.hasTalent(Talent.LIGHT_CLOAK))){ + && (!(i instanceof CloakOfShadows) || !Dungeon.hero.hasTalent(Talent.LIGHT_CLOAK)) + && (!(i instanceof HolyTome) || !Dungeon.hero.hasTalent(Talent.LIGHT_READING))){ continue; } items.add(i);