From 3333377c9f02ffd8fb4187c6526dac009bcfe19e Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 13 Jan 2025 15:40:28 -0500 Subject: [PATCH] v3.0.0: skeleton impl for trinity --- .../src/main/assets/interfaces/hero_icons.png | Bin 3279 -> 3481 bytes .../main/assets/interfaces/talent_icons.png | Bin 7405 -> 7498 bytes .../assets/messages/actors/actors.properties | 28 +++++++--- .../actors/hero/Talent.java | 4 +- .../actors/hero/abilities/cleric/Trinity.java | 47 ++++++++++++++++- .../actors/hero/spells/BodyForm.java | 48 ++++++++++++++++++ .../actors/hero/spells/ClericSpell.java | 12 ++++- .../actors/hero/spells/MindForm.java | 48 ++++++++++++++++++ .../actors/hero/spells/SpiritForm.java | 48 ++++++++++++++++++ .../shatteredpixeldungeon/ui/HeroIcon.java | 5 +- .../windows/WndChooseAbility.java | 3 +- .../windows/WndChooseSubclass.java | 3 +- 12 files changed, 229 insertions(+), 17 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/BodyForm.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/MindForm.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/SpiritForm.java diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index 535eb2e75c5471163ac5e66545cc21c33b67136e..ec1da32601e5d0a122eefd19a2eca48ba2651301 100644 GIT binary patch delta 3294 zcmY*ceK?bg`+uH2vrW-P#Ky7ZrErv6lEiC6^G)WBnz2vGKy_&wy$&jet&$wpMUP_x?isA{@nNH{^RZ@78&u(!Ke8a z4KSbvfFdBZ%&Q#$05E>H-yVQIF&GX2TG`$nu6vWfmcq=7Lrw&ZEw%mcCQDEMwdJK+ z9qPzm4k2Z*2SDdzTpPz24 zxv?T~I$)}bYsY5ku0!v*Z#ii;_RgYu=f6>#>!2S%_gV1(>9XeM% zU6D*D2RXEu8EWzh>QLX3WVVZcn+X|+Q^I5Fr}jiwHhKlKI>;Sa0~#9)Q56GcKs$1Q zk}w76qhnXKY-X~oA<62V#imakwtCvFoAqRwh^G!h&Zse{EN(hN_COzAN2#Uv9MbPm zqDzZoErr|S^xy`8hWQJkkRjZ=PGd$qRtU%&tg;?76i?RwoK+)G2NtWpElk&^2d=dK zOx2I{R6XU(W2~XUv5le|)t?0kKbwIvO`f`T*knZy*Fl|ulHfrvzmsS5(}Sz8tZWwK z1Ikn+6oYeu$CH}s;nkpS=5kV=uw|c8@0dCq1xJe*U;t)^jU>jLFW008W8XCkiV*4u zjs|XCBZ^a&;COP+w;J;!iwXNTx-HUFx#&OTF(B#1sSSb^n+-&Zg&L>_o1g{P@iY1- zZRjo51U_mPx%DD97ZXxGADYgx0~JcAjB6eP!`|^n$|vg^mf7X+S93mF^b7bQFs2hB zQr%CNJmL_kX&-?@n0LVhFtBnyK$xbFOPah6$jRHzdLWm7qlg~bt)bv}iO%$I>lwfD zP-VpeJpzHU1c3e0>H{OI0d%@RV~3Fz_?o-jwFHSct0N*1*ejYViTI7-iDKK@0s?yH@rNrV z0~drdT_uk5+?jF-PLg(Aw*CBEAeXudkZ)gP>`#}0Pn9S*L92DMeag45x0SAojKK`q z+VOd;4_n4f>nPinGQsXpd1G}{PjFXniuMnTZm4ZtWPrZ3xeX?2Y8XTS(1l9L0NGQa zcKZB&UH#`HVM|iQ?CNO_Sr-9d^D$RaH1Vs{-RI0wzT!Iz&?#xW(T>49*mU>CAtoB_tVcnIra$TYU1 zmc);BMo>!Z2O95J^ssjL`X7sf#c8PV0WA+#B2o_6;bq3)n@VJMWOzDStdL62>50}0 zeS+~mj-eBzi8&%K2=qgX3}&y1reVDL<&p_O%;|++=dG5jOuvSmGH6k?2XA!qRl$=s=Z{m)p_i|K zq|se|cTrFdp!J4$7W|zxILk<|ivgU~pi1Y=o#~2^V00fge+Sp!9qr$PlC0+O2D55z z0q1B0w4T>o^EO>x56KwM+eY03%twJKYA2OCn6C7RFTs>gTtnN=I-GV>pe zD$8cI;!WxZT&q>6{x+t3>k6=|H%NdFDtWoQAGK+>mGFQzK~SsD?WQ^+1e_{a#}=j>}qF69bL4|OC+ zxG@tMW*aUIyeIzi=()9P;cl-#W`=$feP5TXc?SNXx{yFk$T*QL>3#U;Tl3;<=yOd` zWo=2+lQ465>Ej?0Y*;;YAn4*9x7TwR9`w{X&rCE89ZMg|ar$ul#4(j&;`O8Ng!6GZ z62+J?Gg}l;y)VU)Cx0l$p7AQ=D3)BBWv*<6K`7AprCpt1AHvEb>%7%gVZ;Ilm+zSV zu#SzE6M0$@pNIMR>x-v~wZB(o36X6*^Nu)RomR5K@L8nT80_LKN& zZHdrdw6b(BwjUCKJezOQ?P+R*FPM|4s!$SXxjG4B*!~S*&g6WcIE@(T%p5;N7GceC zRw4Htp6E2o-)BFZtl3Gx+keK-c2bc~(?7I7D=;E?Rq(ni&T1=lclEzQ%Htc)Ta3+y z3&ZQ*dnfxqEuQwy^1aPuYi83(#;V8Xd61$o=Al-O&Na3=IZt$%1#dhS*VvO^7LHYA z=CwmQD?^Q37EX{P3+dxnd9-k+2%buIwr?~p1n0Xzf~)E_=lm_=`I~Fd(jb(hi1kO! zbIgQ+w#+*clf#Hs#9)G~I1G2k5Y{?{oX2^iW#4p^rdbkxr9F<>miTP%HpoSLDSN!v zpY>c;%&mx;%!NBJUp@O|8714maRX9*U6`ZjzF}M7?2pQO{n=f@iV&6^rE3j5AqGjZ zLp1!adUt=aZRHd22J5qYzuuK;K!Lq2(RG1g3;Ax&haIxJ9htAb|A!4*+T4kzOBLL? zzRd-(!$5mw>z*O7!LVvz+F~#~m#+4M^A*3~$0g$ScE;WtYj>7vQQ6kA%uyT#^;1vt z$U3Zi4IGmEtI;li;i5;IJLKbn(gbR-^ZGC8SM{yLMe2-pZO8Eeh#Q$g3=GslM7BhKi(OA=s#lQ(|x5{XeW^XdieOndF)uzls^V1e_W3+0%im zBgQtr>>C6}^S+Ga)=8_xj3)3VE;`d^(Cs<@cOJP%Cz>;j4N+1AOI)h3ERHH-owJmlFPPQgd{RNa>DAb(ctf=Rj~jVHAoa>XzHeI}e;(Z-Eqp z;!91&$Jkp>yq(+kOGuSTtuvA+YDT_XSYA1_hd0uhM- zIzvJGNmbQvwG2o6npZdKiijZ{?M6H4@qes+h0NhIo_E_{7MVk^bNo5L=}a4wP&%87 zTimpg5PJrp+(T;mC7w8OidEb112(SCJ&)fPeL!pmoHoUtjsCtL*@_RcxMB$wmFsW6J&41 zhjacFbCz0ukpl-jykmmbx)aNR8T-Z%ys~k@Y0TsXaMXn6O#%IEyn-R=mWet2{PqSh>i#r#Q(<08pjaZ0sMxEZ{P;kmBE+Nlt(&;r0%}(K^k9{75J_nZw~aC zbdZdZEw?{}K_&lE&Kj*CJ{fAYFeF^es$zlH3;ra7=_7i_ANIL;GA%IA`V7#og!CAi)DPhUE;=OY%v zw7h1g1!HQsxYrNA3+Jal%IuR6c-{_`yLdcD=jVIlQVPM4)6eNyC$1Ai>ix%c zn?T3Be%v#7;t<^ACvi|Et=>CH_jkNs)pKS7#{`r{l**e9hu)$OEE6X+l}|a{bkHfj z_+0HHn{E3V)gk_ZX>`7A@3wanF6CIu<(b9Vv8WJN~Y>Q*o>fH!_!KkrYn!Qk+ zBmz(2P+KyWmoIYZ)pJho;hyxOD>cS^p<&(d3#oIA}4Tz6@?MY`!tn9c-9Sfe5elm4Z=lo(as8Bd=9mq&E5ddnaH)7ULd#4 zeHYL!ZjNAvrZOzU(%xdT+3V?}^|}(T8uEZoLk3uRT1Tt0jQWyd)bl6vF(5oZ2h?G< zmf#1QQ|OfS^0phSpV4f^cAYX#a2?^>80apGk~?c!so=2jHxd3zi(@+5)C+cwBGoqo z*OE(r0cD{3MwO}Qi4Q7@iDI-L247>NBAykqKS;>1(F3%A8744~tsc$*iIGG#KrO-b z9_Vj(+u<67#|_UA?Vr!Q$3(J=69TVidaxd?UTv&dgSjUPJxERhhRe$Iv?QyWnY|h> zJ0Uq(ahQDn1UVY20+0ZqnMCU)!eYfq-=N*opq1OQY$%QJpeMr=W@jBtyM;=B*CX zs+yX-mOVb#kI``>_mQo0zHkFV+6jvJ$Zk))@4Vd-YcxN0A9bX*lYM5~9|6{8*(ydIU?Q$%nX zQDto}#7fBk6%l3wI^qfdLs9^DTzdu-UU(mzhU8QZI<_BppJ)mYW}V7E_YH-(*}U0hifFgV&T@@)q;W$_Cyqc+5g)rt^|?Uw6RQbsGfrTy)O|de z0X)kv>dTE;%0pJ!n~bGYi9Y^U3&_490Fo~1g!&95>4KloAjlh^p+5BnijTigl&%5d z&lO~ZFfZR*V!2^1V0Qtmfq_u>5^c11{LsI6um7$QOTP+JaRb6V(?(aJSFCdQQTFxiB{y&5;_*U=u6dZ!h@)d$~Gfb zWP2Drd@jXEt@k7{iBkX^G0tgk*`^GkLx0I&=vBiFc)~2#p?s2S5cKCd8*FA@? zL@ggugsIxewxGe8>LR){(25_my?6CDU9hs?(&a#Wyqd)luA|!3-*$}kjscalpFM4c z8RuBC!UDG{JWE{mrS?(Wh??fb`>ao&Rb5JM%t%8lB}jyL<<$&bu`K}%3naM@#H)!@ zQ^139JEdb05~z`AVxS$mX}#2=bWM~nY&)d1qBS~!qi=Tfe+ir10#wc4(Y9Ru@u)`i z(${;YPk^puW#+FX#dEKPj04Ff#s1!h)?Dh(e5iu<^DY{`r`|t}GTQdEAZZmeF)lm6$9&fC0)~DWoKl=7uo8juNkwi{sh+hXZm3x^q zrd&Ogln=|cj|4@CJG0E@E>2ZkrqnTLF6#Ew-hj^w?!BjP!eOVWAL$-s|f$*m)hfHgtvNKN6$C{m;iHoqj^z?~Q$Y`>(dYa2aD z%!;?Yg;Tp2p`1c&#eyx;R6nFh5kR*dS)dW?N3T08tk_3ga^ zO!Ui(a#mL0^TR`s!B1^n`pwNbsxJ%JJkQ91fej6}p~V@GN5`9FZG~$%?o}P@h+PmE z{L~pAUHw;mJ$YN${Pz9GBf*E7eeA~bV2$Jyo0<=>98jLriO}a-7~WsEXq5ntG~K*L zvY@Dq(d@yYrU%GI4qI1q;5I6Ync5RG7p|FjOmlq=yl`qRBJ|e4^)7LRZ?e8xKUtAC z^6-kU`R6O7I#r8qKx$Z!xldR!Xu~daUU-{-HAt@?Pg2N&5Kg^wl3#_(jlkp)4ivXC zQXfJih)pSWeBO?cV(5?G7@K+kkAutfovmKAz^3yegkv>H)XI8QYFi5B9&m@LzqDt4 z?*-$xK4Qb^@N+$o^n?w!ny+EiOafz0j~Ir!^H=PQcByT7?Znv~g8q#-{s$D#O__v1 z@(BHY(W%kImJ5g58V#)sHt$gXC^=UiiRnzJG3MrL;LCBtqU3pc~uBMS9k zcglbO^3mrsPh%0aX8}lR{$kYmAagJJ>9o1?AFtj-ZQ0#`|CwkQ=!2P6@i#3k>gcd5c6HSA;1 zj>Eh8OWte!DwFi@zsljelLwe<2fi-U={7{!gKJ#8vULpaz$eJ}4#+mG9*#BpB5WP4 qL|9si=FpeCtegKE_P>bXtb2Za-}y9b=i1i~_z`yoc$a%JFa8fP_PxIV diff --git a/core/src/main/assets/interfaces/talent_icons.png b/core/src/main/assets/interfaces/talent_icons.png index 33be81c5e242e6da4ff9deaab93d2d749ac78a4f..38e8311360654785dafd40b72ba198592f463948 100644 GIT binary patch delta 7167 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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 9de801729..658c06be8 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -547,8 +547,8 @@ actors.hero.abilities.cleric.ascendedform.desc=The Cleric projects holy energy f actors.hero.abilities.cleric.ascendedform$ascendbuff.name=ascended form actors.hero.abilities.cleric.ascendedform$ascendbuff.desc=Radiant energy is emanating from the Cleric's body. While in this form the Cleric gains 2 attack range (from the holy energy projecting from them), and 10 shielding whenever they spend a holy tome charge. They are also able to cast the spells which are unlocked via ascended form's talents.\n\nThe shield granted by ascended form and its spells will not decay normally, but will instantly fade when ascended form ends.\n\nCurrent shielding: %1$d.\nTurns remaining: %2$d. actors.hero.abilities.cleric.trinity.name=trinity -actors.hero.abilities.cleric.trinity.short_desc=_(UNFINISHED)_ The Cleric gains a _Trinity_ of new spells, which each cost tome charges and armor charge. -actors.hero.abilities.cleric.trinity.desc=_Trinity has not been implemented yet, and so is currently unselectable._ +actors.hero.abilities.cleric.trinity.short_desc=_(UNFINISHED)_ The Cleric gains a _Trinity_ of abilities, which emulate equipment they have seen and can be swapped between by using new spells. +actors.hero.abilities.cleric.trinity.desc=_Trinity has not been implemented yet, and so is currently unselectable._\n\nThe Cleric gains a _Trinity_ of armor abilities, which can be swapped between by using three new spells. Each of these spells focuses on emulating the effects of equipment that the Cleric has identified during this run: Body (weapons and armor), Mind (wands and thrown weapons), and Spirit (rings and artifacts).\n\nOnly one of these effects can be active at a time, changing Trinity's form will end all active Trinity effects. actors.hero.abilities.cleric.powerofmany.name=power of many actors.hero.abilities.cleric.powerofmany.short_desc=_(UNFINISHED)_ The Cleric channels the _Power of Many_, empowering an existing ally or creating a new one. actors.hero.abilities.cleric.powerofmany.desc=_Power of Many has not been implemented yet, and so is currently unselectable._ @@ -568,6 +568,10 @@ actors.hero.spells.blessspell.name=bless actors.hero.spells.blessspell.short_desc=Blesses & shields Cleric, blesses & heals others. actors.hero.spells.blessspell.desc=The Cleric places a holy blessing on themselves or another character they can see.\n\nWhen cast on themselves the effect is weaker, granting %1$d turns of bless and %2$d barrier.\n\nWhen cast on other characters the spell is more powerful, granting %3$d turns of bless and %4$d healing. Excess healing is converted into barrier. +actors.hero.spells.bodyform.name=body form +actors.hero.spells.bodyform.short_desc=TODO +actors.hero.spells.bodyform.desc=TODO + actors.hero.spells.cleanse.name=cleanse actors.hero.spells.cleanse.short_desc=Clears debuffs and grants shielding. actors.hero.spells.cleanse.desc=The Cleric instantly clears all harmful effects on themselves and visible allies. After the spell ends all characters affected also gain %1$d turns of debuff immunity, and %2$d barrier. @@ -638,6 +642,10 @@ actors.hero.spells.judgement.name=judgement actors.hero.spells.judgement.short_desc=Damages all visible enemies. actors.hero.spells.judgement.desc=The Cleric slams their fist onto the ground, causing an eruption of light that deals damage to all enemies they can see. This deals %1$d-%2$d damage at base, but also deals an additional 5-10 damage for each spell the Cleric has cast since entering ascended form (or since they last cast Judgement).\n\nCurrently Judgement will deal %3$d-%4$d damage. +actors.hero.spells.mindform.name=mind form +actors.hero.spells.mindform.short_desc=TODO +actors.hero.spells.mindform.desc=TODO + actors.hero.spells.mnemonicprayer.name=mnemonic prayer actors.hero.spells.mnemonicprayer.short_desc=Extends buffs/debuffs on an ally/enemy, & re-applies illuminated. actors.hero.spells.mnemonicprayer.desc=The Priest utters a prayer that extends the duration of all buffs or debuffs on a specific target by %1$d turns. Positive effects will last longer on allies (including the Priest themselves), and harmful effects will last longer on enemies. This spell will also re-apply illuminated to an enemy that has been illuminated previously.\n\nMnemonic Prayer can only extend a specific instance of a buff or debuff once, and cannot extend buffs granted from armor abilities. @@ -658,6 +666,10 @@ actors.hero.spells.shieldoflight.desc=The Cleric creates a thin barrier of light actors.hero.spells.shieldoflight$shieldoflighttracker.name=shield of light actors.hero.spells.shieldoflight$shieldoflighttracker.desc=A thin shield of light is standing between the Cleric and an enemy. It's not strong enough to outright block attacks, but will soften them.\n\nTurns Remaining: %s +actors.hero.spells.spiritform.name=spirit form +actors.hero.spells.spiritform.short_desc=TODO +actors.hero.spells.spiritform.desc=TODO + actors.hero.spells.sunray.name=sunray actors.hero.spells.sunray.short_desc=Deals ranged magic damage and blinds a target once. actors.hero.spells.sunray.desc=The Cleric fires a ray of blinding light at a target, dealing %1$d-%2$d damage and blinding them for %3$d turns. Sunray always deals maximum damage to undead and demonic targets.\n\nAfter being struck with this spell an enemy's vision will adjust, preventing them from being blinded by it again. However, if they are struck again while blinded by this spell, then the light is overwhelming and paralyses them instead. @@ -1145,12 +1157,12 @@ actors.hero.talent.judgement.desc=_+1:_ While in Ascended Form, the Cleric can c actors.hero.talent.flash.title=flash actors.hero.talent.flash.desc=_+1:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _3 tiles_ away.\n\n_+2:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _4 tiles_ away.\n\n_+3:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _5 tiles_ away.\n\n_+4:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _6 tiles_ away.\n\nFlash costs 1 tome charge initially, and 1 more charge for each use in the same ascended form. -actors.hero.talent.cleric_a2_1.title=Unknown -actors.hero.talent.cleric_a2_1.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.cleric_a2_2.title=Unknown -actors.hero.talent.cleric_a2_2.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.cleric_a2_3.title=Unknown -actors.hero.talent.cleric_a2_3.desc=This talent hasn't been implemented yet, it currently does nothing. +actors.hero.talent.body_form.title=body form +actors.hero.talent.body_form.desc=The Cleric can cast _Body Form_, which causes Trinity to assume the power of an enchantment or glyph that the Cleric has identified this run, at the cost of 2 charges.\n\n_+1:_ When Trinity is used, the Cleric gains the chosen effect for _20 turns._\n\n_+2:_ When Trinity is used, the Cleric gains the chosen effect for _27 turns._\n\n_+3:_ When Trinity is used, the Cleric gains the chosen effect for _33 turns._\n\n_+4:_ When Trinity is used, the Cleric gains the chosen effect for _40 turns._\n\nTrinity's armor charge cost is higher if the chosen glyph is rare and powerful. +actors.hero.talent.mind_form.title=mind form +actors.hero.talent.mind_form.desc=The Cleric can cast _Mind Form_, which causes Trinity to assume the power of a wand or thrown weapon that the Cleric has used this run, at the cost of 3 charges.\n\n_+1:_ When Trinity is used, the Cleric uses the zap or throw effect of the chosen item, as if it were _+3._\n\n_+2:_ When Trinity is used, the Cleric uses the zap or throw effect of the chosen item, as if it were _+4._\n\n_+3:_ When Trinity is used, the Cleric uses the zap or throw effect of the chosen item, as if it were _+5._\n\n_+4:_ When Trinity is used, the Cleric uses the zap or throw effect of the chosen item, as if it were _+6._ +actors.hero.talent.spirit_form.title=spirit form +actors.hero.talent.spirit_form.desc=The Cleric can cast _Spirit Form_, which causes Trinity to assume the power of a ring or artifact that the Cleric has identified this run (except the holy tome), at the cost of 4 charges.\n\n_+1:_ When Trinity is used, the Cleric will gain a ring's effect at _+1_ for 20 turns, or will trigger an artifact's effect at _+4._\n\n_+2:_ When Trinity is used, the Cleric will gain a ring's effect at _+2_ for 20 turns, or will trigger an artifact's effect at _+6._\n\n_+3:_ When Trinity is used, the Cleric will gain a ring's effect at _+3_ for 20 turns, or will trigger an artifact's effect at _+8._\n\n_+4:_ When Trinity is used, the Cleric will gain a ring's effect at _+4_ for 20 turns, or will trigger an artifact's effect at _+10._\n\nSome artifacts have different effects or armor charge costs when triggered by Trinity. actors.hero.talent.cleric_a3_1.title=Unknown actors.hero.talent.cleric_a3_1.desc=This talent hasn't been implemented yet, it currently does nothing. 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 009635e09..3b4690333 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 @@ -186,8 +186,8 @@ public enum Talent { PALADINT3A(174, 3), PALADINT3B(175, 3), PALADINT3C(176, 3), //Ascended Form T4 DIVINE_INTERVENTION(177, 4), JUDGEMENT(178, 4), FLASH(179, 4), - //Cleric A2 T4 - CLERIC_A2_1(180, 4), CLERIC_A2_2(181, 4), CLERIC_A2_3(182, 4), + //Trinity T4 + BODY_FORM(180, 4), MIND_FORM(181, 4), SPIRIT_FORM(182, 4), //Cleric A3 T4 CLERIC_A3_1(183, 4), CLERIC_A3_2(184, 4), CLERIC_A3_3(185, 4), diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/Trinity.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/Trinity.java index 18fcda30e..5341411d3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/Trinity.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/Trinity.java @@ -26,22 +26,65 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.utils.Bundle; public class Trinity extends ArmorAbility { + { + baseChargeUse = 25; + } + + private Class form = null; + + @Override + public String targetingPrompt() { + //TODO varies based on form? Or just directly jump into item logic? + return super.targetingPrompt(); + } + @Override protected void activate(ClassArmor armor, Hero hero, Integer target) { + //always happens atm + if (form == null){ + GLog.w("Trinity has no form currently, use one of its spells!"); + } + + } + + private static final String FORM = "form"; + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + if (form != null){ + bundle.put(FORM, form); + } + } + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + if (bundle.contains(FORM)){ + form = bundle.getClass(FORM); + } } @Override public int icon() { - return HeroIcon.CLERIC2; + return HeroIcon.TRINITY; + } + + @Override + public String desc() { + //TODO a lot of variance here based on form probably. + return super.desc(); } @Override public Talent[] talents() { - return new Talent[]{Talent.CLERIC_A2_1, Talent.CLERIC_A2_2, Talent.CLERIC_A2_3}; + return new Talent[]{Talent.BODY_FORM, Talent.MIND_FORM, Talent.SPIRIT_FORM, Talent.HEROIC_ENERGY}; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/BodyForm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/BodyForm.java new file mode 100644 index 000000000..b7a701e75 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/BodyForm.java @@ -0,0 +1,48 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2025 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.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +public class BodyForm extends ClericSpell { + + public static BodyForm INSTANCE = new BodyForm(); + + @Override + public int icon() { + return HeroIcon.BODY_FORM; + } + + @Override + public float chargeUse(Hero hero) { + return 2; + } + + @Override + public void onCast(HolyTome tome, Hero hero) { + GLog.w("not implemented yet!"); + } + +} 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 ec1ffdb89..6a2f55d00 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 @@ -151,15 +151,23 @@ public abstract class ClericSpell { if (cleric.hasTalent(Talent.DIVINE_INTERVENTION)){ spells.add(DivineIntervention.INSTANCE); } - if (cleric.hasTalent(Talent.JUDGEMENT)){ spells.add(Judgement.INSTANCE); } - if (cleric.hasTalent(Talent.FLASH)){ spells.add(Flash.INSTANCE); } + if (cleric.hasTalent(Talent.BODY_FORM)){ + spells.add(BodyForm.INSTANCE); + } + if (cleric.hasTalent(Talent.MIND_FORM)){ + spells.add(MindForm.INSTANCE); + } + if (cleric.hasTalent(Talent.SPIRIT_FORM)){ + spells.add(SpiritForm.INSTANCE); + } + } return spells; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/MindForm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/MindForm.java new file mode 100644 index 000000000..6726882d0 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/MindForm.java @@ -0,0 +1,48 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2025 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.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +public class MindForm extends ClericSpell { + + public static MindForm INSTANCE = new MindForm(); + + @Override + public int icon() { + return HeroIcon.MIND_FORM; + } + + @Override + public float chargeUse(Hero hero) { + return 3; + } + + @Override + public void onCast(HolyTome tome, Hero hero) { + GLog.w("not implemented yet!"); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/SpiritForm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/SpiritForm.java new file mode 100644 index 000000000..eda4da334 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/SpiritForm.java @@ -0,0 +1,48 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2025 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.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +public class SpiritForm extends ClericSpell { + + public static SpiritForm INSTANCE = new SpiritForm(); + + @Override + public int icon() { + return HeroIcon.SPIRIT_FORM; + } + + @Override + public float chargeUse(Hero hero) { + return 4; + } + + @Override + public void onCast(HolyTome tome, Hero hero) { + GLog.w("not implemented yet!"); + } + +} 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 c9c919a8e..445ecb810 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -68,7 +68,7 @@ public class HeroIcon extends Image { public static final int ELEMENTAL_STRIKE= 29; public static final int FEINT = 30; public static final int ASCENDED_FORM = 31; - public static final int CLERIC2 = 32; + public static final int TRINITY = 32; public static final int CLERIC3 = 33; public static final int RATMOGRIFY = 34; @@ -91,6 +91,9 @@ public class HeroIcon extends Image { public static final int DIVINE_INTERVENTION = 58; public static final int JUDGEMENT = 59; public static final int FLASH = 60; + public static final int BODY_FORM = 61; + public static final int MIND_FORM = 62; + public static final int SPIRIT_FORM = 63; //all cleric spells have a separate icon with no background for the action indicator public static final int SPELL_ACTION_OFFSET = 32; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java index da87382ee..41fec31fb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java @@ -38,6 +38,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.utils.DeviceCompat; public class WndChooseAbility extends Window { @@ -98,7 +99,7 @@ public class WndChooseAbility extends Window { add(abilityButton); //TODO CLERIC these abilities aren't playable atm - if (ability instanceof Trinity || ability instanceof PowerOfMany){ + if (!DeviceCompat.isDebug() && (ability instanceof Trinity || ability instanceof PowerOfMany)){ abilityButton.enable(false); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java index 1f397c91b..6e4c7631e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseSubclass.java @@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.utils.DeviceCompat; public class WndChooseSubclass extends Window { @@ -85,7 +86,7 @@ public class WndChooseSubclass extends Window { add( btnCls ); //TODO CLERIC paladin is not implemented yet - if (subCls == HeroSubClass.PALADIN){ + if (!DeviceCompat.isDebug() && subCls == HeroSubClass.PALADIN){ btnCls.enable(false); }