From d88a21a33ffd3c10f791f067e99287f3bfcbfeb4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 30 Oct 2024 16:00:49 -0400 Subject: [PATCH] v3.0.0: implemented the divine sense talent --- core/src/main/assets/interfaces/buffs.png | Bin 1765 -> 1789 bytes .../src/main/assets/interfaces/hero_icons.png | Bin 2144 -> 2183 bytes .../main/assets/interfaces/large_buffs.png | Bin 3949 -> 3994 bytes .../main/assets/interfaces/talent_icons.png | Bin 6964 -> 7005 bytes .../assets/messages/actors/actors.properties | 14 ++- .../shatteredpixeldungeon/Dungeon.java | 3 +- .../actors/hero/Talent.java | 6 +- .../actors/hero/spells/ClericSpell.java | 5 + .../actors/hero/spells/DivineSense.java | 89 ++++++++++++++++++ .../shatteredpixeldungeon/levels/Level.java | 4 + .../ui/BuffIndicator.java | 1 + .../shatteredpixeldungeon/ui/HeroIcon.java | 1 + 12 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/DivineSense.java diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index 21a892820b15c2b79d0dd1fe914c81019adfdfec..02024face4e3933e6279b16ea03efe7a30f058f7 100644 GIT binary patch delta 1452 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 diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index 9d00bc7fdf5011430e71f7067137559022313bfb..2bc1903eb6eb581235a8387a5965d4125929c1f6 100644 GIT binary patch delta 1741 zcmV;;1~U2J5Qh=@9z9wt z9z7xewMLV=0Y!giWF}!k0BTLaK*pVC5zlT7jb8*(j~UB>09K#S^m7T^bs)g>1MC;U z&mO@%R6X9@z$;iEfVW->7K6t$07^0!K4Jp7+fa!k(*bl5dKCu@3{ey^r=ML~u zI7BC)@e{yL&aDUT4M(y34ru8Fg#99>Gbv#HuVV+`PcIr$dfAZvZ|r~d>Q%ns%?oU% z0{dUD0_q;0EdW0O_}|1E3T6txPeAs|%{HGa0KXuB8JH_TcKob@?1#wA67ahEn}C=v zz;}8R?#R5h8|;Q?17a2M zp+LaPm%fJK<1K2yC(#DT|M~N02fQlOfG=Ww062f(<;DQ?U%zT-1HOemo&g6)537J- zSS*IY0Z;?*J0NS}?*QowrN9<^|B~0Q@e%uNlzTodL8SdI6F@c%Z=n^8XMqo&o$W zz%RHvAlnHLo`q2W6YxMV1=aua=g*MeYe4oKfdAL~_rEB};s|g6evNezdKSh3_$g2T z{;hwlE$M~*8g=>Y^R&oBaEW9;pvONoAYyxa8~?^%IWb313DOtot$wVgGM`8U6XMUjp!#Uk~yFX6_Csob+cv`b-D{>{kE<=QsL8eg#l~zXk-q9~=;Xp9lNf0Ph0) zL=a%V19V*r1yF!ru=x4?Ag3H=@Rxr_2WS;uc3%N%Dsq7R1gM}=w;?kiO29V1A7p<& zz%PIRQ@h)KhSAV+*9dM${ z+i)BZYytx8cL07--+#U5{jU?i0iA8g5^zAf2y1}@s^0J}}`LUTQx%-2YZ4 z*v~|NO0DECulrBL&sX^) zP|kDofpcJCz(pDQuUB{o?-hSkFhGnd0LqGh3yJ;`0GzKtxgQM>xfvo109hKKYA99^ z{3!l%VFB=klmNLoVgc~b#Q``dS}@{2)6arI0R2QX0JxuxJFqB#eilUk>eP&`&r44*>nu zI`DYh)W2;J#FY@HcYmA!3+S)50ukA^5{AtX2m^={U;!I@E3m6xWXon4c0_8og60Gi z7``hOv8%FeN2E~C0RJ@siH8Xf=nc8amR)fq$QuB|gHf44;P)SnlO#!!BuSDaNs=T< zei0uZe`0`$_*oQu+F*ZYES24rt^?)*)G5>}?S$RYVZ$QofO1;z&|d<0_Fk)iZn7=_ z^z+2#f!~z%`HQ0gI}X7f+rsC;@C8r;=qJ(70dNAX0M5Z*yk7O4a-dy#b_Fn@8BqI) zD6xQQ8^MmxUm~yS&Zy)bKz%&DKl(jDngJE#0SAR4z70$Th|qs;xV{yz<4UmO)3^xS z-rNe}B9M-LgMQLn3F1@d+vMNTuh&)p{iHsBv1@Jy3O9mdxtJ0S}Ws0d5a^Cv<579z9wt z9z7xeHKUWd0Y!g`Y$jns0O~;#K*pVC5zlT7jb8*(j~UB>09IdyS5O{t*MR`j53pYZ zKYIl8Q1y6o1Fv91fV{pGF!1sjht4aop8#II_LXFJVo9)WA8wHV_)S0rnH%eeih0F+@Xe8&ZIu0Mma7upff8$7e10`v(yL&m9nh z55i6W{w9E*oLdjv8;)Z69njDV2>V4$XIjAQU&ju>pI$Vi^s*uS-`M}^)vJ8Nn-|zj z1@^yQ1=Kx0TL69n@V|*S6wDNWp8)x@n{7T<0DeILGcZ?x?D$y)*$uL0R}0RCU^-~XZ@izC1R_%+r==vf#C;HN+V z__u$ywxk#KYt-ep&(k6k!6lOYfFA$UfQaqwZTzq8he-kW0rASuE~x(gD~Q_`!|09)=xi*H+>mVuK zN_!3C|G&TAFb+IusKUd;Dm-ea{^LS^vKw0ey`|ky))Mmaa9~1|fdH@@lKm8*jR*&z zhF-uT0{@~3$mheFfRht_G;9bstp)aLJXLdF2+@ z*9xEjKLN#Gem%$!n7KQkaMGUv=`$e+uwMZboZsjV`4vC`{u&VcesDkleje;^1H23H z6G4Fe4$yTi6hHxf!Q$ulgPd}h!C!wK9iUZs*?k45smKBL6QF`h-GO0teuCKtmP_)?x|B`(NPi9L1NHm)Zb%xLhA#Sc97aWQX!tjJW?|-#n6BhhZS9 zE=<10Uuy3h?tiO~YEoSq3QnrY#&cf1XHa3qIH2MCZ^vDdBuSDa$?_ey|L)&0(;s8b z@)CW+%z%|M^{>~a5WcHxpay?{%nw*qCVmFEW^Gp9!vJ7IfLQ_bo5O;}Z^b`6tOWh5 zlmKi5<_6fS;{}0#Nxupv0rU&Z3823zkUyM28vtxKn=SA`0p`eGeiuL2JO}{jCLa>8 zmcL?}e-yy~UY;Knur~S0Fab@Z`bWpWcDsQ;@DT^0QBPYm0T#$VItzb*nE}mdXr=)~ z6Hq~I>{-C4Kkxw;BDb?3osJ8ZuDB3%S0R6RAwpdQp$S~P6h2??cj8Mi?Q*Gre9_G)Ffrke-;RGT|J#ED v0RR9103iR@Mo?8%RaI40RaI40RaI31XA5- diff --git a/core/src/main/assets/interfaces/large_buffs.png b/core/src/main/assets/interfaces/large_buffs.png index cb182bd2f2222b4ceeb9292ddcf619e989451f86..6d7a24e1b321b9e187d5880e845d0a3f059ebaa2 100644 GIT binary patch delta 3648 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 P>+xE)X6apbe)@j^%_@B2 delta 3602 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 Y;4(Y3@-O~!&3}o-3zh{|&X3LdA8!m(!~g&Q diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index 9a007f2994185d364ba87b56c16a4581db384f76..ae5792312256c2e2a152c589253ef44e09447bab 100644 GIT binary patch delta 3230 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 delta 3188 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 diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index c54845814..5185ae532 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -543,6 +543,12 @@ actors.hero.spells.detectcurse.uncursed=This item is free of malevolent magic. actors.hero.spells.detectcurse.short_desc=identifies whether an item is cursed or not. actors.hero.spells.detectcurse.desc=The Cleric focuses their senses on an item and determines whether it is cursed or not without having to equip it. +actors.hero.spells.divinesense.name=divine sense +actors.hero.spells.divinesense.short_desc=Gain temporary mind vision in a wide range. +actors.hero.spells.divinesense.desc=The Cleric focuses their senses on their surroundings, gaining mind vision with a %d tile range for 50 turns. +actors.hero.spells.divinesense$divinesensetracker.name=divine sense +actors.hero.spells.divinesense$divinesensetracker.desc=The Cleric is temporarily able to see other nearby creatures with their mind!\n\nTurns remaining: %s. + actors.hero.spells.guidinglight.name=guiding light actors.hero.spells.guidinglight.prompt=Choose a target actors.hero.spells.guidinglight.short_desc=Deals ranged magic damage and guarantees a hit. @@ -554,7 +560,7 @@ actors.hero.spells.holyward.glyph_desc=This glyph slightly increases the amount actors.hero.spells.holyward.short_desc=Temporarily overrides glyphs to boost armor blocking. actors.hero.spells.holyward.desc=The Cleric imbues their worn armor with glyphs of holy light, increasing the armor's damage blocking by 1.\n\nThis glyph lasts for 50 turns, and will override any beneficial glyph the armor has for the duration. actors.hero.spells.holyward$holyarmbuff.name=holy ward -actors.hero.spells.holyward$holyarmbuff.desc=The Cleric has imbued their worn armor with holy energy, temporarily overriding any existing glyph and causing the armor to block an extra 1 point of damage.\n\nTurn renaming: %s. +actors.hero.spells.holyward$holyarmbuff.desc=The Cleric has imbued their worn armor with holy energy, temporarily overriding any existing glyph and causing the armor to block an extra 1 point of damage.\n\nTurns renaming: %s. actors.hero.spells.holyweapon.name=holy weapon actors.hero.spells.holyweapon.ench_name=holy %s @@ -562,7 +568,7 @@ actors.hero.spells.holyweapon.ench_desc=Enemies struck by a holy weapon will tak actors.hero.spells.holyweapon.short_desc=Temporarily overrides enchantments to boost damage. actors.hero.spells.holyweapon.desc=The Cleric enchants their worn weapon with holy energy, causing the weapon to deal an additional 2 magical damage any time they strike an enemy with it.\n\nThis enchantment lasts for 50 turns, and will override any beneficial enchantment the weapon has for the duration. actors.hero.spells.holyweapon$holywepbuff.name=holy weapon -actors.hero.spells.holyweapon$holywepbuff.desc=The Cleric has imbued their worn weapon with holy energy, temporarily overriding any existing enchantment and causing the weapon to deal an extra 2 magical damage on each attack.\n\nTurn renaming: %s. +actors.hero.spells.holyweapon$holywepbuff.desc=The Cleric has imbued their worn weapon with holy energy, temporarily overriding any existing enchantment and causing the weapon to deal an extra 2 magical damage on each attack.\n\nTurns renaming: %s. actors.hero.spells.shieldoflight.name=shield of light actors.hero.spells.shieldoflight.prompt=Choose a target @@ -1017,8 +1023,8 @@ actors.hero.talent.clerict2b.title=TODO actors.hero.talent.clerict2b.desc=TODO actors.hero.talent.clerict2c.title=TODO actors.hero.talent.clerict2c.desc=TODO -actors.hero.talent.clerict2d.title=TODO -actors.hero.talent.clerict2d.desc=TODO +actors.hero.talent.divine_sense.title=Divine Sense +actors.hero.talent.divine_sense.desc=_+1:_ The Cleric can cast _Divine Sense,_ a spell that grants them _8 tiles_ of Mind Vision for 50 turns, at the cost of 2 charges.\n\n_+2:_ The Cleric can cast _Divine Sense,_ a spell that grants them _12 tiles_ of Mind Vision for 50 turns, at the cost of 2 charges. actors.hero.talent.clerict2e.title=TODO actors.hero.talent.clerict2e.desc=TODO diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index 654c17eb4..e7ec9c8fd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.SpiritHawk; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.DivineSense; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith; @@ -946,7 +947,7 @@ public class Dungeon { GameScene.updateFog(l, t, width, height); - if (hero.buff(MindVision.class) != null){ + if (hero.buff(MindVision.class) != null || hero.buff(DivineSense.DivineSenseTracker.class) != null){ for (Mob m : level.mobs.toArray(new Mob[0])){ if (m instanceof Mimic && m.alignment == Char.Alignment.NEUTRAL && ((Mimic) m).stealthy()){ continue; 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 fe265ac68..8cb3b2c85 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 @@ -175,7 +175,7 @@ public enum Talent { //Cleric T1 SATIATED_SPELLS(160), DETECT_CURSE(161), SEARING_LIGHT(162), SHIELD_OF_LIGHT(163), //Cleric T2 - ENLIGHTENING_MEAL(164), CLERICT2B(165), CLERICT2C(166), CLERICT2D(167), CLERICT2E(168), + ENLIGHTENING_MEAL(164), CLERICT2B(165), CLERICT2C(166), DIVINE_SENSE(167), CLERICT2E(168), //Cleric T3 CLERICT3A(169, 3), CLERICT3B(170, 3), @@ -510,7 +510,7 @@ public enum Talent { } } - if (talent == HEIGHTENED_SENSES || talent == FARSIGHT){ + if (talent == HEIGHTENED_SENSES || talent == FARSIGHT || talent == DIVINE_SENSE){ Dungeon.observe(); } @@ -915,7 +915,7 @@ public enum Talent { Collections.addAll(tierTalents, FOCUSED_MEAL, LIQUID_AGILITY, WEAPON_RECHARGING, LETHAL_HASTE, SWIFT_EQUIP); break; case CLERIC: - Collections.addAll(tierTalents, ENLIGHTENING_MEAL, CLERICT2B, CLERICT2C, CLERICT2D, CLERICT2E); + Collections.addAll(tierTalents, ENLIGHTENING_MEAL, CLERICT2B, CLERICT2C, DIVINE_SENSE, CLERICT2E); break; } for (Talent talent : tierTalents){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/ClericSpell.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/ClericSpell.java index f1b96a21c..790c10510 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/ClericSpell.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/ClericSpell.java @@ -66,6 +66,7 @@ public abstract class ClericSpell { tome.spendCharge(chargeUse(hero)); } + //TODO separate based on tiers? public static ArrayList getSpellList(Hero cleric){ ArrayList spells = new ArrayList<>(); @@ -81,6 +82,10 @@ public abstract class ClericSpell { spells.add(DetectCurse.INSTANCE); } + if (cleric.hasTalent(Talent.DIVINE_SENSE)){ + spells.add(DivineSense.INSTANCE); + } + return spells; }; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/DivineSense.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/DivineSense.java new file mode 100644 index 000000000..00684201e --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/DivineSense.java @@ -0,0 +1,89 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2024 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.watabou.noosa.audio.Sample; + +public class DivineSense extends ClericSpell { + + public static final DivineSense INSTANCE = new DivineSense(); + + @Override + public int icon() { + return HeroIcon.DIVINE_SENSE; + } + + @Override + public void onCast(HolyTome tome, Hero hero) { + FlavourBuff.affect(hero, DivineSenseTracker.class, 50f); + Dungeon.observe(); + + Sample.INSTANCE.play(Assets.Sounds.READ); + + hero.spend( 1f ); + hero.busy(); + hero.sprite.operate(hero.pos); + + onSpellCast(tome, hero); + } + + public String desc(){ + return Messages.get(this, "desc", 4+4*Dungeon.hero.pointsInTalent(Talent.DIVINE_SENSE)) + "\n\n" + Messages.get(this, "charge_cost", (int)chargeUse(Dungeon.hero)); + } + + public static class DivineSenseTracker extends FlavourBuff { + + public static final float DURATION = 50f; + + { + type = buffType.POSITIVE; + } + + @Override + public int icon() { + return BuffIndicator.HOLY_SIGHT; + } + + @Override + public float iconFadePercent() { + return Math.max(0, (DURATION - visualcooldown()) / DURATION); + } + + @Override + public void detach() { + super.detach(); + Dungeon.observe(); + GameScene.updateFog(); + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index a24529c5b..ce3d84b4b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -49,6 +49,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.huntress.SpiritHawk; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.DivineSense; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollGeomancer; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; @@ -1370,6 +1371,9 @@ public abstract class Level implements Bundlable { if (((Hero) c).hasTalent(Talent.HEIGHTENED_SENSES)){ mindVisRange = 1+((Hero) c).pointsInTalent(Talent.HEIGHTENED_SENSES); } + if (c.buff(DivineSense.DivineSenseTracker.class) != null){ + mindVisRange = 4+4*((Hero) c).pointsInTalent(Talent.DIVINE_SENSE); + } mindVisRange = Math.max(mindVisRange, EyeOfNewt.mindVisionRange()); if (mindVisRange >= 1) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index 72451e6ce..b5788f53a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -126,6 +126,7 @@ public class BuffIndicator extends Component { public static final int HOLY_ARMOR = 74; public static final int SPELL_FOOD = 75; public static final int LIGHT_SHIELD= 76; + public static final int HOLY_SIGHT = 77; public static final int SIZE_SMALL = 7; public static final int SIZE_LARGE = 16; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java index 594697986..db2e63c77 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -73,6 +73,7 @@ public class HeroIcon extends Image { public static final int HOLY_WARD = 42; public static final int SHIELD_OF_LIGHT = 43; public static final int DETECT_CURSE = 44; + public static final int DIVINE_SENSE = 45; //action indicator visuals public static final int BERSERK = 80;