From eb9c42f4193626576bac67fb0e79785a7125ba43 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 13 Dec 2024 14:40:01 -0500 Subject: [PATCH] v3.0.0: barebones initial impl of ascended form, plus full flash spell --- .../src/main/assets/interfaces/hero_icons.png | Bin 2976 -> 3279 bytes .../main/assets/interfaces/talent_icons.png | Bin 7289 -> 7405 bytes .../assets/messages/actors/actors.properties | 23 ++++-- .../actors/hero/Talent.java | 4 +- .../hero/abilities/cleric/AscendedForm.java | 41 +++++++++- .../actors/hero/spells/ClericSpell.java | 14 ++++ .../actors/hero/spells/Flash.java | 77 ++++++++++++++++++ .../shatteredpixeldungeon/ui/HeroIcon.java | 6 +- .../windows/WndChooseAbility.java | 7 +- 9 files changed, 154 insertions(+), 18 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Flash.java diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index 461d8d57c593cf03848bec2cf8bd330db0232915..535eb2e75c5471163ac5e66545cc21c33b67136e 100644 GIT binary patch delta 3113 zcmZ9Oc~Db__Q&tNNk~}Ipt4&fMG-+(S*t9UMS-V4K&&WW;>IEeuV8N0ADzYY)iopfKCIk=?kS!$K$NSBD|NPF(nKN_#IrBZ=&zU(qeW4-e z1>*ZV24I-O7K0GiErk(42kX+AV?l+50C1%J_Jc7P008i8NZ>vI{v?h90L_>FKAxdT z;PV1v!mNw7&!5(%4yDLnr3=Lv_V)DSw35d%FTXXM3r=^-rwdJDhyL{tHqV94yJ2&^ zBq>)IrI<|?U@SQ5b?xomfBG_@y~rmllwoz8)@(i ziJH+%*OHh}<651vSMEmg3P(-d(;WnwBq4YjhuV=j+ybF%uYpU3m~+aTrqUYogNF4Z zE;0}P*vj4Dqk)LO18RX-OLY=UExtf{gSsFH)P% zYzDL3AXdsO2u^V!Js-?vRT?2t?WEwWE{}oqdUyeoGssEYU}aI{(td5#5T1F%10SXb zf6GDg(5^~AI*Z!OF=`(NY5NW4FKCW(hh8~5qyZuPD;B!T zq~y(*S1H*n{7r=S%JR70cFn?Fqct~!R_o;#Kso5KL2Yts{G*z3yaers!8h2bkZaB8 z4;IjE4FDZrngPsVD@QUxViZvW&`5N<2L{;RcDxSZal_L@hv(BDFroa?c&+y{1K5Dd z*BEQjV(g7Z50R4*V7R>8Ku5B&iP5X|stZzpl}E_;Pm*JxY9LTxA<=n-Fq!ePw`k84 zXzjivA4(@Y5NDdhtn5SSw@^!g%94imN~PvssLGcw!?_Xmc5!w?>+`yT%1W`jU{rK; z^cQ4YIZOa&)?Ga(kE9|iq>e73@FV38W|{-D2#B@Uk0IepKN=5yIs}wN+z?RgwWiM34jMi7Ejs74X1yWI_=|_rWPh zVaP_u4gepL%mKoTbH$f_qAcyUo|O*|P;~pkPYxuZN)4DTavIhGC@w?OxWz|+qInbN zF!<@bLKpVHh0s2>N zgv2>R88C_P(8;am7ho8TOQZ@uKVKyMp~U99Y->;ba_tT)iI6><07Qd?y7b?XiaP9E z>L0=daa{jNgZ1D1BbC+U2W%Vs);lEhsNK*7^~uz4r}&_J&f*G1xW{Z)h1MF9)Y!_I zU0Yk35Vu?Xd9CngW;5Jwn#fvi_;e~0c$R6>mlwO3kF2mZn#v3%M)=<>A&165NVcFC z<~xwA4}M02As>9E=Hy!_ApyBqoS_Bc&lhHfGOpZPWV&OnU{9wZn?G^%F*YJb>+_}O z>c5?ZL#p*Q@M57grQPODJw%5!HCbYbxnn-kR?0bcn$YtxIqUuMQ0U^V*7;rPu61b7 z_nko(5ide6q8qRG{@FqM_*# zwp*DwMl$FpWZO*OEZ#sN(&}gTmBysw@&LhNAK@*NZp^TvZny@h$yOWgq#_$K!wP<) zysK#&qs*fsiJc4Gw8a{C!6DREZMz9Gsw12hF`H_l(R*qFrv%s{ob$f&jhO<+{?fs) zS+Qx^hO!Sf=JGhs39MaygH=d9@DB>+_HD-B??pV=` zFF)V_`tE$Y@yhOzBz9M*ejS~;9t0Lyob1V@UxvMpvWO;%o^G|;K8tZ9k9 zO))p8nxDPCrVj<+DMqcLt1yj%~T4#TxZ&+t!dj;QNwu z@9DdUr3r19mv(0ncNaAU$T8S&xJ#G!7<)fw|KGs+swBa=abHn3n|>wMm>_=9v|gZ; zH@&ksnpPT`+@@fE#%d(3|k95s@QP5mf3JN-wE9J~X~j4FzAmzUuS!$Z*epWC~QT3T||Ulp>rUQq)B z>l$xE3)7yDPBhDr_M%lD_o~94 zVFAE&M7c6&LZ4evM1RAAbs{*@eDgZVlA1f`6yq4?zyekhe7GN;({xI0Hmpg(`7ZxjQbhn8r&+Pv$5 zjTeLn+j@eill{8Pt_;dM=m8u4+L8UeH;muVIDkW z+1_Ng#^yK9>^-6A--y%yh~m1dk|9N;QNQr?Xj1FNBkfJ=e{y5z8%k_?Lq$USx@F(< zO)cpz#-KZy(an<#yR$9bjq{EwHA6fo1GSK^5xZpyi>yBfK(cKwM_mpv_MxB8Y;*bZ z_1oypdm8b-(61)qMA>P_5Vsr-IW|!jK$gGvJiye=JOy@6v10z9BvPBW=(G4fO;D_XeG1-rWDjrAXLVjxveEt5xjYZ@0AuyQ*MvFWhA4Y+ zO$%4Ij^Q171jW7q`NowaaTZ^Nuc4L-%F57O+M>5j%YU?*{7>+IDu%NW|MsElY51BlQ+LsroLRq*Jz$5F5@0OaN4HAVf(!t($njS93Z3T`mUOi)WR@#ZFSDB z`H$(|Gpi;A_%iS=%|)ejLt{m-W*e)9Qid;vVObN0(EZaocPLzEI8wHzpY}a&Ox6u zE3K*DstO|d3X@Y0i8wm}cFgRz z#F4}aOXCnL(89em=10g*(2{adY48DDjg6%g>=Vl$m?Au+P56S+@;dHPwA<9gA`TglnOq9V3qA)~wtQ7tC=tvo$=(!$X zd(rTERNxk#=GRHViSM@@KEFYq@!F#2{!%~=*W4QdZ_k<~e=46(`nYS=VuRA5=1Xzl z38z^;30Yiia_n#QRHeB!t_i*XC}VY5XzYN6M>Gxo&L>h+ElgwyjZ5b<3U{LyVps*IFT#?qidZdqHU0%a)QQL#v@r+`N?&Si)_ncdAWRr1vxJ_RAkhR?&QN+z2oM0M&8SCdOEx>^=XwGmX#{Zq zz{Yj(iJ^Xn(bvB8>lbUpFav|`()9oK7Rw^zurBX%nHggMs!zWUu<&p~%XvOo3Dbgn zW(Fotqp0%gy~>C+Uk(U(<$1ac7lzt~D*XHRGvtQjua6(m)FsiUJ!6dN!F6gzv@!@K zif+%g6>L|<#sF+iSx+NQ(#qt#uaDr5lHUu&Mq;hN*)s%qgcrQt9Z+oe;aHX@2Ole; z^h&dyz6i}or&Q~`fMq(&E$*SvfJ#zn1aEa8)NhMRY79JEoM0d>15TgUd8d|lNs92?$iph_0 z_`U*8qZqPQ`{EHeYBr#-- zffP&Xf{|qEQWhPby)Xv)gKQ{&2G&Yw({_o#XVxGdt(zDpFdjsN4&~?e4yhdHvKXX1 z9x}V&CweCFl7Y8#C7be~b3EYqf**n#C7(Q|WLKBW?j>ESkuxsL|ypPGRC zv6-er_)(@Yav3=9qeS250UTe*bBsX-`OyKjFDM9$N9PTH~mAe43r5G=q^aN9lx>r~*o1lY@M}PlaqIX44@g6 z;SAB?=_97j(5-=28^ciozv>Oc9gZho*>;nmu}+!FMNsKN6zg?c5MU^6tg|EYk}y|)QXMT z@2!)H{HDHkW55v4=wfsELrhvN&j7fzJ5wHiYRESEDdoT(v$MP*QknC`gw>jL=Ue0t z&?uSC)*go?`!S68v(piW-Jo_Jf!%RYcwsq0*R>bJm)@V|N${9M*RzaPw@?R8VC`A# z-|B6_io?+5JOctHQMFn8fgpEnM&zUgg$d*WMOZD5!47na%aUSph1dV+i&$BeKWr%L ze2{r`c^G$3!D+{jw;`dRg%rdHN)aA^K)mmaHpnce4M9d@eRIkg1z|w&=R}%kRq%~J zCgA_7jDlP1ZE!9qk$kS+0#zwibGFipHtpm#M?M3KN=KIz&v~embbS9Dlu`n@MO!{Z z5)avdelD%bYw!gwdJbQ}ll;Z31tR|)&B&hD+G{R&qBK`Jn^c|iwq?xeri_Uk_Ztk5(J}^K9MUe}2WAQ>m}JamsXQKw z+iO-&rK*E7UvQrjEW#0g9^UHC&gZT+qPg{?6Xjr+w>OJn0XMTbcs3%QV5={)ZAF{p+Ch$nW0BR6CM%Zn58VGTUKC0f zp9z;C>WZh7mLl1#X!n4(jN26f>A)^Rdg{$aweQtI1(hMMDE6U%?Rw%qAnl6}$KID& z(loB6ocBeWQzd@Hfo0NL#c==uVLI`kP);1U$GzDKKi{;eiDb`sW=+gO^@&aveJI-H z7LRfSCF(Y+EC^s%mZQADuRC<|#Y1So=(dClQFMK$UVHQ{MHg_BsfiNp>|-?TX1n&5 zJU0guyBY1;Xr;sqQc8AZpVvz&iW;f#PBAUoD3Yj{ zMToK|OJQaZ$~G8`SzkY&>-)#={`1_|{d}BropU{}bKOFl3ESdG2-fv;+2MRN8mi2` ze(8yw#*T?UYW3#RyUw(TP?9iUbW15q%iq}FbZuIA`q-=6?|xoT3EJv@b!*PifWHm0 zhL&}uvmE6P5wp+w>Zp_UD{+}y-^jLO%;ha-1MS;8_MclyydTIWosFVDJ199j@Yq*$ zrhWgOt}eMD=c1V=-Fs~Kh0~9moWFgY@suao=k&q6Sn9)!0^kQ8u!566>)-oc34hl< zAG;1-tEl)BKW!)+rr8GPqC1FAH@{s(y+M4uRmjILNTAb5gj=%}^`&m90f@tW&;g-h z{U3JV8@dYk!%+JEUpIw4!^-XUzhMVoz@p~SIv>m!D%rr=uS8MqK)rInk)-}%n4^q* zuPgH&1I6yh-q3muDfHN|If&e~n=i8~>V&e{&yH$n@Coz5i&yD)nI@p*-;eXhI9r$$ zt4A+|TlPX-mA((}-!DhrJ$-T``PQLDp*&2lF8Jnc{su2J2W!P+SSuZ9;UNZMPD_pf zRT%ge=_n1EF99?=npcN4lj|OEUe=^ddoUDK%hW;$bcQNYg1IZ~f?ga4a6Q`TQ;43) z)aKgNKWW-pb@9|R4?`55m(wnaey&8C=0P;=XCb#j~(Tu-TBvzDlQm+We<>H|V?)Z*}=bdGx&^%tnVDEpfnY z5{~^zp(}?jGzc4=3D`rj*&L|&o#ZwiM8i*Clelp^Sf%p&t9y5E0xZ7uiQRYMWPMj* zj*+<9I~*<%cRh+9X2%;R20sh?$Lh|XM&WDY{Ct6AwYtH}dtJB0@Snemz-Xv}?HVuw zidO+L$w(1&pq{}vR&&{G`r%b-6nBumAH#x;Z-PClGsy%hm5Q7}vzfq6=9Mfm2I+Sl z;r&%(vLq&xnYVP8&9~7j*R$cXatrk~IeTWp7D?X27YX%OCA$fd1cV_Ce;)e6-`%k4W&B-@5d0?{HP+e*J}#LzRo~Eus(ux2rAnLO66OP z!8MG97_&?D2LVH_+V^)Akl=v>+u<=RNx&&S!nB5c#Hg0=c7S?$VDdrT$~%9oR++dv zBw-OF49B!O68w-d>x{|dOS9kLS+mI2vfSb~Ybv5ZZ=fUJ3S7{k0;zoKs`S2K6M#qY zd{|D+@DP@`R|yN^lC@cH*O1@Jdtivi8Hyl=2@9Q911uCQt*NzwkzMjw*RS+1Jc=5z zXO!~!vHB1}bUYBaF4q8)7YS7n7zI`-9_*c(BG{k(x%}hpoo(HAvXw6^lK$D!*zIE> zCqs))&|d}8pFcm>H9P+4?BDyM9bS(jj$O{E8wRC#WagQ&ksdkbNKKuetmhx%^mb&U z++9KOA3btuu(ijYhx70lfhNNF@Uoo zPGjne*&MeeEVm20HxU#9K0d{)1?!Q=D?m(_Yg7(C=~wjoC$+8^PX+uTXgoO}8}kTE zD3kfo&<+Ei0Z9v~nzHmo>wrw>oM+3D_N8wY9>k0BFg~fQSg%m6&`V9;yEA+W%}NsE z*1r1}fEiPdKtGEl7>uN2Di2@fQ22q+verxRhG=Aw8oGyIRgQN50oF zv&F?_dqa3dU2)xoZ1b&Y6}2Ut!K5Wvx4UMJ>NHkP2xEl`NKU?6Xhcm8pf^gjl)>)Z zyT@Q<8r<7|6^DeyQTcoY{o@cr&$wD&jlvX-ZkUgYr^S02e?SJ0u`+WN+@iHA!A27u zqnpV~gPNo*%As;Pcy251+V5@iHhG`sJYt!`T{q&!FEjlmy}Y-&nNw=z=;>KM-4^WH zXy`J$*Zbk#!6Q%!Yz~efp^~Hsva_BvpMd=G~SnmNOdt`qcV5U zEKr#%b6KoNQFg)|2Eu$Evvoe`q$%vO z)YYQnOOLdwhJM8@XC6hkXwz||`Y&pIAaV8@rZq#Qc*=E(`35l1B3n5mM5n#v^s}S{ zuOcwrQN`9-} ztN#a#yznlvGBBe~-qrZ_nJ|g6>2ap!*fr?H=5iO@^dgJHZ0Sa>PrTHBm)6XW>A?8D zul~;-&s6;pODD}cSGhT81BP_ovpe~+5FaS15uxwkN%t}7B-3lkHllnh*>kZ4>rp@G zH>n`8Ha?9sW3D1QJV*!Unh(l^r(iz%2j#zo8g!j~WaYeuiN>;2Iv8*R;=h}bXj)L@ zR+M7AN2R&{i+XK+c@DgRb#H_Fec>fJjlfD9JdtvM&?q^wijyz}$_|6g-I4-8i%VP& zh}S!(-GeF(F?(}M`8hCxRrCp8f?UerL5enU1T_Ep1IMpnD|g1yH-z9q z<@p3W&6^zu)vSb@`!$T1W$Yq-rw0=_$`rSMds+B~ZcOYWj*{wTWPc_;s%O(pokI?G z7&&y)WT0~c23+a6yr_N>FZrD63~3)4NFa2D5NbK%>d2jpIx2il z+jon2wzP?QB>1_*-u{gCN{aQa8}^N-EF8BMaJu${C6^0Fu#w83KwE_w6L00@p8%B} z!!7tU{=&R4Gd~F)S~;!B8@pJm!ym?_lU7Vxx;?u9PsD&dxOCJCmok`he6^Bm9Nf27 zYV`*~8HYa+ku|M+xcS*Lm?)B)gm3hij0TZfZ za<>Gvd1ghFCAxu*i9AzcqEp2pB$OW*_dzu(dJyw;Y&6JJVS4~^K2IgRPM|`glPpn~ zC-dOHS$t*o7Krf5Q|&EQj-7J6&-T3%SxLDdRW)k)>3LiD6G@3TRo02w2F;qLuS}PQ zoC2OOB4i+=?hrTb!RE=(ndf@j`Ls}E`??X~xr#ASNI~n%#KQ9YY;e6T=NbVuV;Vnz6 zZzW|_Flp~;oeP&@R(fb+UjWL6g{AJ;bLVj2wSphcG4#FQ9oz>QIdEYcD$;tKP3hCR;0z7;sp3 zZG}kNQ6rGZ9USyKX%d}f%VFxDFcZ8?c-oQTE1&w|83PWvKaea+e7CxI6*KcAsee*Ro>o45V_Mk%fR{($M zGq!3%1KbCZa_J)e$^eIxxB5<8J>`L{%#B&GCkWs=VG{0-K0s*i8+lj<{w|HBpC(N-tc-+tLkm16>NIcWgsn$OYbRmtyGgfz??nFq zY=ix?OPzPqa8Z5tI4*S1)iYj=SlPE7S=|f_*hit_0L+y9mG?-fV#;@SonA#>Br!D@ zCr~Em>D079Hy9I3ZG_La4BiPp{sJg}K<{^IFgrG&%~%71TsCJ~_dL?wtavbV{thch zDg>pbvUtFmPW;`OagF!XzIIFnc8h59)hIM)<=3ikpW3V+ZzHMH-zLkd*ehnsUiUid z-5Sw&`nQ&D1O6e_yVQBJUF!7W9!;1W5Y0T`q3ga)tD|j~ssaj1pLrVbXLraRd$oN} z%Y2&oYfgWC_3GEfcG6KbS%-dQ7&x7?xINm)p4e!O;a&XRuDo?sUQaONyS2gT@}nAWKKICT{qzjNMxVs6bQA#kkrT{7 zcHToe(GCzf$3L@G1)ls^jV9o4a@e~LMKjU6B}%N3mb$@_mXck)AuvlDv2hq!(LcvY zjEF~v8WK(~4}FkTw$jk(p|cWEq61lYdXJ6qc^5;pi_dQ+^bf76_$BJw0(`QJHy-^= z(oL&2o-8N$_7v1|ss0NH|KME?w(O-x`8)O3L&zJzV zhxZO`gwj`Ih;dZZkyjz7XLf(VSUK>fYfh#ZJrOinvff1vbPkj(F`Qb#>?kok2Jj(S zo~k5&7nP6_6*2=zH)?|X&2DNetZeL*3Rh(B;=ZnRBOks5b?6kA_fUKv6%720aRnL3 zW~lY4@4}b(UyO?NTXa;cBojIC^uf}7vs=VX z|E8roNo3BeK*x#&9n2IrC-QDMG3VZouHfhT(3CNyc-@FDWCV5Seh@tGTN;0Czkq_H zHRGDcG1-PRpRTNu1OaM(v~m8ZX#)R1L_+;sbB1Q-txebHju?a^qr>ou;Q7J+PZXb9 z)ox;sz0`}ToaNsa zLaqZ7=m1!jcqiXtj<3*;hFsnNYDLci*O1@zRhnV|UsQd;RSi)1aj31siT@*&(5!}~ zKcw>RIJn1IfwdQGa$=db0X?)#l4WgbxhLVP%pO=etih1QJKau#CNDtVb$^cv5u*s6 z$1HWv&^F9>F{_}=pPWTo^8W?JSehJ5O}u?KAbZ2rYy&eynk%F;hX;OAbr*sEK-{jj z8~v&|eI=K^EP10`mZU^nY>w_9N1z1LaDSE@NZ38UAISEALQc49x+9};p3Z>kEs0Cr zpmc0;cb?o2OXOrQmMepgYk@NN-f@iS2|1$&c))0|1e6}ixofZWu-RiG9EO`@|7EvD zRb!UMu(Wp-$Xs$)8iL_oRYWxEKwp&fCG!Z5X1k~Hn_&Jits=hC!nt1378PaXF)p8HTCDo1x*hQS`k*Xk{M@OFjAC|Y7~19|Y&zMNYoGry!z-eWk0`bJr>Q-|ieu&N3c ze@4~6RPbUXl8lQsg;|FDp8A#id@Z~Ex2=Xp1O06WvMLP_M`!B*7ut_5o`O>+@kv|8 zJrFrmFojHa)WsFv%vS0#J-(|qdxJ}Rigr?4Ht9kDuZ``U!pm77IaeU zUIq9N@1Ppt#yb!(3dhbmUR6k=Ju`vG&Nm+g2D{1RGdk5bK_e|mq z!X*95s#IKlr~FFwfpoGnKR~ zGLh8 zKb@9^bA-ajGkFSXyatl0dO?59YI&8U-FnG`Q6A?{q?>8;A+7*MA}Ibbj;eF}F}ZXc zS0Me=-&Hk4r~`If=KG~ca6AHsg*yV-c)=O9O9uy-+MPGo1DWfh`CDK0lGSve-cb5e zf={$Z;DxA$5YuF8gX{bK{iQ$@xS7C`+YBQw`>lt+aJ}~HjM@}f>qaVUCLyEuS&cee zz%`7JhQoL_Ssun{2RPsS&QOl^DW91G7LF^aq_(veNX`30!X&V(u=o#L1X7ezEcGa7 zul4}F3Al-8cnLhU2nPBv{acF2T(8cRZupH-4dpBq zbUR)b%KYNZ)&qropGvSwtVaaJqf3c!Ic!#Fz9h7``}D9U&=1Fx;h^&OMyH0VJJ4ol z+Bh@6yx72>uF}OHGNla*l7pDqZ)S>YnXbZh`xA@V9^ahFbeTnad-BVTLDo*h#oBDZ zX&s|BV8MZ%M7={>+!XHL*sv1W%ldVW7OanqW7ZBYelcBJE#3#*a4grR7WlR011U6= zT7c3q+zCf3;3E>JjtSWVMVpv}Q;?#&u*->=wMLF6Il7wx!4$wt*~0gw{%c z^!w$1=7@}Ji!19;A~R4ug_FYd3m1T$zl73;`J{TlX>h2T@%0C+Y4WT+HV?35KN^mn zlJep;O&q-mqks7%*!1hQsvt1VJ5;opNqFD|dgWOof`*$jN1_Lo(-wOtdi>lQ?pAWM zfw~umfv`^-xID%gfiHU4McXG4nJUD^oj!7(RyJ@G?D}E>d7$gNgFP|AA4eG7nta<` zdU!~&onzR%k*LS(lE{j)#sT+?j!_t#s879XyoPPunCeue_jF3iv%r!b)Bdb5 zf$My4o2wtJJ@WRx;HD*cPOep+P9JifUa&)RrUxVh0-J8Yx?G|HN^tc0vuh$A)&KkO z>^c|JHaG8$!viK7wEOig#?t3$s4aZd`I3lps{J zy@rf#244&0ElP&l@ze6y3m%$Vnn!eR{!ox3ZkX!-pPJ++*bG11rbg}v3m|YXzA73* z-M?3LiM9UNEsOhabP{xlZm>}stC$KI5-mY3Ghi#RQC&Vo(j}j5pZHdtD_Q*=?ehiS zRWm&IKdQ?KhIIc;lG9Mvi$027mVes+xSPDu9?)}5XD1ZHlE ze73O2KGE(mYDLA$$=WR5jG2M2Y;a>v#;iMIbUm*XQ>j98nyM)7I8Y9d^FU^h38kGb zxR!|?yApLN1Hz!Sel+9vXMlUN797QrNKEgO@`a7*vU~Fdl>D zS*A%Q^_`e2%7Xa!AdRNEV6Jd^V2??}5i3?BXV1UkGdn&xY3!g)CD-9#9WA4jC0J+A zPHeOxjaLcRgB|xoU|RVYLjWyTz-TTMC12K&SCk}-2Z;LeA9;lE<7CeSsN>e@Zi{7= zLNR9G)IRxHiGq}SAwL_1mzSEV*D??GaL%t~;%G$RnETJK&~7zyEDQqHyxcMxG9(z>)_vk2))6jIR^C{8+&@wK+V|K(Gzzi8Rd+e1Kfa0I81}|OqfxKCJph>(5 zR{aK*JWm0A{5L2J2EE|ZoibgbcnJ~YW9l(ahxKQK;)o^?sY!edVyP+Y{1_Sgk^S>> xr*N{Jb4sScy7E-AO@{$@JEHRvV2sim)SuZ|`5mI|fW#?u zxq#Ag3}rVEQVnSpY}~$2hWW5nOzH+4^4e4noZulD2i~K`y>NN{UG`4Qp1wG3vF*pW zB_F8EI$U|VlQ@Oom@>%#wD%IKPQF>bt()2-{D!$hN!p05mvFDY8KV*tyV%9xKIJ0o zURcS83U{^JM_;aXc$(%uR_c95t!q`lwk@-S<&*4i=|iVm?Uu_!X)f~ zbWo)-bFsfyVHoA^cTjI<(tt#KEu|Mew1irbIOa5#X17gwgaYk$K0Vh)_qm5~Ec&_P znPEdrsZa#Hz?)(GNTsEWF)FrBjCYg^ER>j-VnX4@EtLdcKh6%B@1>5P_JJFcYnQ9V zLhp!iI!(hYLUrLp4c~qw-e4#VA~kNL4f_2~>u)ykF)D*qKYN~F&Z0-)v*GfPaW^yG ztXv-2kq7cfgiS~dYG<^WQ=Btu{_r%E-+KVj+eBN6n{@;+WPeF{c{!+D3_{l+BK{fh z3B$N36z11jOV(1Ytm2eBb#%nn^Tyd3(1o)nWRru!Bqey0#*u*wS|ZYGN#rI(>no4H zHf7HsG#IF!C!B%vFek?Iw4hg@Qj!t{<t4TJL-yrs!LCO8k<_XXf_~AqhzY) z-8PJgSUWO6v4&Ny0gKxqQh6GM{f+WacBCXp(7ykW*(c17y=YQJm4%k=KBRX4%AZwT z0e3({B(zgzYBSghj2EDC%_+%4FiC&l3Y9is%CjrsL5Zid>}OdTcS*KrH+#Q2Efu2~ zy75aW-kl#0W))2wSOm`dO7NT4lbE;h*x-Qc-gQD!n37eMWlNwWO2b_0#`r=bU$!W_ z3)4@ral|C?e}WECKyf+R7POcS*6Hhka5Yop^+#k>J5QYxJgK43o1H*?^#n(Y)iLRT zGw))r{>+o?Pg+*-7*p78opb72tcV*%=0aEhEdl1D&|8Iza!~buQh_m@N*^QwJ>#Ie zIF4Qi>X>u^{*GR>*#8E=hR`J7Ld@>x=s79lG>`?3cEy4(nAEF4TBjoA(4Czt$Z~-j zJRSZq@`u)u5@KE{tuF%q696C6nj(qLzW%;l<)1#O%5ArY();*w5XvfD=|Ki=sHO`7>(XeCgiwGcsAdqJ7~ZJSG#aV1w{ zXk#>z8i%+?qE3)^;)0_!YPWY?y(tjEoG8K*rvXVBBF{MFD(A&?fUPS(o@$nE`1pqt z+whT-JJjoVT$!kzw<#HoomnbQy#3GO^s8ELX7!kY;Czya~_?x0c=a7cH2vfAJR z;YG$nco)?B=g%J+1dmT#mQetL`5OYU4E87_$xw71ga})?7!p~jz z(!3xLakVpT%P-@L7L?XZvW;X6P~YWks!N^^#;nwTH1H@oj+#Z^*hcFnn$AaB^nSRK z`?X~qY|U60nw(S?SoQY`zey!zsszYxs9BG&M(%y>rQ<*%ei1XjgvAA-d(gjIHOO-> zEQei2=?b?b5&vWRwyfi6dXX}CB2mOBu}DeL33setvhw@?TjmXlLDHdjYKn%;=n0Tz$6N_>)y zw*KN#73XGRZ!Inpb%vr*fg9p3Dt{{fz-%RwbprWHt%K=EsTiJ81J*{59(n!BsCaP< z^jB24%PD&G(jhmN(7m#v%jv|(NgPsBv$tsaZgm#=^##6(^0tQ*=?Pzu-fjdwOKnFD z5H%XfEIHTFZY!^LhXz@+S91TGO`ho8Rhv&`*Dshjs%teQxA+o=z(T7o4%>I9i^ zTa8wjVfh?beB3*bqS+Ks7;-O~ew>f*EUVBnrf44OmkvqA{N9=qegDfgG)Q&)KhDc- z%+3Yc>@OFu!ghAGOR5 zdpqxw*ES}8gO|VFe-xCye}AR!OVc|S!Rj%=-5&9|3id*qT&^jFtyT0x47_Hj8Z=3X zmNyTyfrShl{A|GkdBb&(ylXOXRqey4x@y7Cas5*-hk4vPt;uX-;T1r4b(SE3rF~`CnFLBQR(08lJ zEm=rkW!K}=0B=Gj79;VAxCWL~!k5nyHFEsw1!A)a_^K5g6`v7Z;=!*!4plQGBbeX8 zbQl-v)dY`Bsgc=ldss@=+7q~_2+=}{y%Fv>&2csWQ$?h$v$GHO^%4A&nt0h1iM}Ip zbD{$z&^2(YQJXin&@M>ZX@!2yui{GL=kGUkC~5T=J3W(G+`Ljo47y21V<>1+Wwd{I`#aNLXPfIXSSOR9)$;^eeXf%R_hvLC*=x!eB;*o%t*wu2g-v~E3ue>JWA z-sK$L`Sm!P@~m?pNuN&5eDILis&z1->IYt!TxI1USOoV0$G^r@(l!J8!Y4eG5jDL| zYF4l@u+$g|ecIk}rta^rej>o zk?MdA$iB%ch@*A)^M+@=ty9VkJg$QyHKocbojv7CpI|9XP9N}ueDX#x=Fn%<6I-;N zFJ7}iQZ-El3ustZ9T*I9F$~$=dMa0tX%hUtY(zsD_VhW^wySTz7aZO>$pkXJKPsB9 zkSBs>av!eCOXatN?T4ujA}aC+F}}|gx+&9YBR-sYo$+3IqaIq>rvhv!pp)Qt$vg9f zIq`6VPhe?7>vjD#2qrN$niRB^upa_knHyld92L~>0`*LU{!_}Epq!%t=1OaQ>Vw1=6BL~y#&z(#5$pRg?tfXOkn%>}d>7bdm;08e6EJc1E+M_G>>c5#xk8*`F zuVRcxS74_;XS6m!%`wN+5Sl_r22S>Xbv5*n>XR&;Tz^wrh4@XXVSWgY!dTvn1 ztA!hcxcmOR&c40X=HfHqN+jp2d~%?^2Bk zQv6+8oQF)o+YWQrqwrry9WV8>dB}mWE^nUqd#N*kZDqi#)1pb>*7RUiM#Ign+tt6S znq0B-G<<-)nQ_5f(<)$T^zNPon69^{d3#_VgsR~H&7Ec^i9KR{4;iLSUBTL9#fJTM z3Z#Gw)CU5=dvp?;c^p*(69N@WZ6NmzX7zz5DPCw3Z1CWfoGkpw}GkyV}yZa2Q+#gJS>r+lJqQvP${Rcwx2f|?rBU!b1o=rg9tf`I6me)Ch=oiW= zWJ>;e{k^70^$UPVeA^i-v&-sbC(JLxCMt)7rVh@9MDJz_#KKX3T5PeP=-V80(b${S z2IFXG{zJDOG-qtp8_lyl4Gp5eOOwJI8_e6BPiz7BEiTF-rT*-ila!Q?A=}HV7WUWj ziLp;#x!75Gpo@U05D1>3`k;jQ+H$iLO~MoXgg9!nA^ZKHkA<6^hvxyuU3S~7mGxIt zmV>8OM^(1tsa>;~b1Xdg4j!Ol5PS{^?77d`$0@Je+dTD1ulJo4_$^J7)DIe$*6dxR z_SE+A;cWlDkc4CNF)N5%nYAD+ay=OXI?!w2`%KAnyW7GbpzVX4A}Oe0zyZwL|6*mV z^i1ut?@33&j^fCRE65nK@6bifo<3}psh6xdNO{-VeVt-zJgsGqd=c~+IDsh!c@OYU zLL0Wx(y3T!mXn7#P_?%hX)^vTqpLJ*GBde+0hFZ>q4z>sZ&#G!zs6Zf$qNf39N)yU zZzVhSG-vY^h!bZ2eL;npB38@TA!WN6k$E8(7Mv}iYC^e^*$wLfQIYvCR2paLx5n~~ zN9~N4SM~-l?NDxhoH8kosPwjQnt-S5G^1^*65Gqi$Ydd<*37CyMB4!B7t~-&!NlD@ zuYT)rgOLfsl~WySSE_b8gTat&K6Ufm0r6=rU9GKo}nSH4e^|s~Tvw}|^jNP5DZ<{;PB>y^EX4Q_LJZYK$ zvUS20Rb=_!nWH5%VEbSxn5-1yxh9(=`)M2SltWyOWd$nrN-b?*OGlqgzWa_WN}<;s zwHrVS(ja4jX&$IO85{*CF4G1(a?T-B5qm~N3Bx8m_>~0<3adcy1D^bM35O$FgnY366z2+4*0|=59Dp=G z(LSNu0V^MnpW>b3=gM|^?Er7BGS;D{Ao+_xC=)#!M@_t0y=}P@EO-eO7DA0B(#@wN z)^PRTGP>g+fy`8}R-2K`%%Q;IAzfI&Vci!f*@y1@&Z#AA;t{rszbX+y|>YO-u z$LW0zD+hc{f2X01eGD8UY)6NK-7pMK1_t`Gx#;Dpk2A!ImsC<-1Qc_)GN?jSFV4lU zaX-c?lVH%8Qqx)=;?GY{q(TVOuMx$ax+#jh>NN| z+>z?bNgw$5AA+I(!h49%yhhvv9n*ZV6~dQ#=Q;&^yJ7eF(yTv6?ToNRaC}H$)pY%W z$6Jfajt`&XuD^3FX>Yq=|M4i7{o0zgPD)u)TtuxT{<(ZyC`2nTe+pj-RKS<9z>5xl z792;u!ID|snAPzf8*i;%2Xb#o28;VfGvrU92|^zKRS4YG`y1T^8YEJ*ID4RS zr6Az4>nc!#>za! z-|&E^Q$v{xAl+A%#6>}(wtlu8XVeg|cuf6vRClBlpGz9#!=evf5a zQKe-YMGU68O-|juSTGcOO))Ao5@GJl))Hg#X{Z+z2%j^T*@36I`t9xbhz=&t=90Ro zv#a}J;IY~-XJlW>PP$aJzAJCX#yYu;$`E);Y$w4HivImTl_>!Wl-X!W54L_>djq+^pUh0=j*<*Rl%I(Q0WJ*X4#_c`=$5r z5ryOtLz`f;lPoR%=;`rQ$=k(IdX%8E}@Adbhsi())HZLNt|mKXr6 zG~;}Db-G+F(@eg?hY+(xYQ%`vUGp!9YO$ZtBo3Sz;RR^M!{;=Jl6oeO0p}iro=Sng z1HWDkP~KOP2F%Q{%1gFCcF4^xH264D$}Hy!=OASgM3A8he)7;eAXJximJL*T7lF4vG%BQi#Xh}Y zIG>9xN*xm(^MF=cX^O^gnCg3?MJdrQ>n@*(YBPC$`aI8zd{pEI}$dHe!jWWWKTrpYVw)MmBGYUq)_ z^d8K5)_~(5w>mad>ijZ;vKo1P{A0%>`PnDjP;&vlN8YF&Ts7rUxbKjT$_^gA5)M_- z%n5*Iv3bi3KX4kG7(TtwK!IHydsmT^3KHR86vja)ZFNF>^d!7fPW!XJy*aL$v;23n zHII*>5$>ninbRglmI9H5hP@6&GCoYy((mAgty|mHPVC!P{AjQ^?ryw3Tb_`$J_j?S z@VGATJ0CwZGzJx_ zd@mk?{Si%W`W|lX6C?&#dyD6ykDYJRqPbqXl{5T!TnFK@@*T@hy3QVYtH#zKfULQt zGe|mrQ{@1A_sQ89#iEolHtM{#Bm=7UFp^y|3}5s)^k)GZo*!_`LozqjaaURr1MOmN zrS&Gfz2acMn${+P(I*byC1=2NfFf{O+Ka6=0(3_kk)fWhwHQ+0Kt(bpN+9gp@h1ONn zcT_QOy}sqE=q(^YNmPk_?{oa;s@^M>#1@c*7AhoWqw^aWg8`{0N2T}0Kzil$FdHKp zxYBufw*ny%3ids;C%zyw0q!DcDiIdAGFP6pz;Oa_1vb7jwsAA()f`~)M>PE4U*B=y z2zIJ49lCS6#3qhS`b62D3}Mi^8rt4-Kfudu8ObCvec%J9hV$EK}R&EP9H^Onn*ip`2Wa0A$r^aV`oJPRdZ zjUA-cPURlNag_-3qOO)ectYO!V*^Yf54)ve!sRV4yghset+Mr0{w=B_SN!S%>5{iW zGMP{{ZRK@4o}79|#Na;DI&nbr9nIv!hiH#cuf7dr_R6O-nzN2MF{U6V1_d2`mA*J2 z(zkcaN3@{QdyeWx5jX<961S2Dx@!ivyI+5s4;=n7R0s`b~1wUp6C}8tjG$C_j4PpT?uWtr*4>lua zOgv4>Nf!upk&YKl0iA2G`=p$N(oPB%{@}hDfKuhj@`;R>gpCIt+`NJ_tO7!nrNRFn^O%><7ye5R{I2l7x&8k*?0LD1 G5&eITa8g?U diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index e114e7977..9afda9cea 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -524,8 +524,8 @@ actors.hero.abilities.duelist.feint.short_desc=The Duelist _Feints_, faking an a actors.hero.abilities.duelist.feint.desc=The Duelist fakes an attack while dashing to an adjacent tile, leaving behind a momentary afterimage of herself. Enemies that were attacking the Duelist will attack her afterimage instead.\n\nEnemies that attack the afterimage become confused, which cancels their next action and leaves them open to a surprise attack. actors.hero.abilities.cleric.ascendedform.name=ascended form -actors.hero.abilities.cleric.ascendedform.short_desc=_(UNFINISHED)_ The Cleric assumes an _Ascended Form_, gaining bonus shielding when they use spells. -actors.hero.abilities.cleric.ascendedform.desc=_Ascended Form has not been implemented yet, and so is currently unselectable._ +actors.hero.abilities.cleric.ascendedform.short_desc=The Cleric assumes an _Ascended Form_, gaining new spells, attack range, and shielding. +actors.hero.abilities.cleric.ascendedform.desc=The Cleric projects holy energy from themselves, assuming an extended radiant form for 10 turns. While in this form the Cleric can cast new spells, gains 2 attack range, 30 shielding, and any additional spells they cast will grant 10 shielding per holy tome charge used.\n\nThe shielding from ascended form does not decay normally, but will immediately fade once ascended form ends. The ability can be re-used to refresh ascended form's duration. 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._ @@ -563,6 +563,11 @@ actors.hero.spells.divinesense.desc=The Cleric focuses their senses on their sur 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.flash.name=flash +actors.hero.spells.flash.prompt=Choose a location +actors.hero.spells.flash.short_desc=Blink to a nearby location. +actors.hero.spells.flash.desc=TODO + actors.hero.spells.guidinglight.name=guiding light actors.hero.spells.guidinglight.short_desc=Deals ranged magic damage and guarantees a hit. actors.hero.spells.guidinglight.desc=The Cleric fires a bolt of magical energy which strikes a target, dealing 2-6 damage and illuminating them. The next physical attack made against an illuminated enemy is guaranteed to hit them. @@ -571,7 +576,7 @@ actors.hero.spells.guidinglight$guidinglightpriestcooldown.name=Guiding Light actors.hero.spells.guidinglight$guidinglightpriestcooldown.desc=The Priest will be able to cast Guiding Light for free again after 100 turns elapse.\n\nTurns remaining: %s. actors.hero.spells.hallowedground.name=hallowed ground -actors.hero.spells.hallowedground.prompt=choose a location +actors.hero.spells.hallowedground.prompt=Choose a location actors.hero.spells.hallowedground.short_desc=Heals allies, slows enemies, and spreads grass in an AOE. actors.hero.spells.hallowedground.desc=The Priest focuses their divine magic into the ground nearby, creating a %1$dx%1$d area of hallowed terrain for 20 turns.\n\nWhen it is cast, this spell heals all allies for 10 HP (healthy allies and the Priest get shielding), briefly roots enemies, and spreads short grass.\n\nThe hallowed terrain heals allies for 1 HP per turn (healthy allies and the Priest get shielding), cripples enemies, and randomly causes tall grass to grow.\n\nHallowed terrain is destroyed by fire, and will produce furrowed grass if passive regen effects are disabled or the Priest has not gained exp in a while. actors.hero.spells.hallowedground$hallowedterrain.desc=The ground has been hallowed here. Hallowed ground slowly enemies, heals allies, and causes grass to spread. @@ -1105,12 +1110,12 @@ actors.hero.talent.paladint3b.desc=This talent hasn't been implemented yet, it c actors.hero.talent.paladint3c.title=Unknown actors.hero.talent.paladint3c.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.cleric_a1_1.title=Unknown -actors.hero.talent.cleric_a1_1.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.cleric_a1_2.title=Unknown -actors.hero.talent.cleric_a1_2.desc=This talent hasn't been implemented yet, it currently does nothing. -actors.hero.talent.cleric_a1_3.title=Unknown -actors.hero.talent.cleric_a1_3.desc=This talent hasn't been implemented yet, it currently does nothing. +actors.hero.talent.divine_intervention.title=divine intervention +actors.hero.talent.divine_intervention.desc=_+1:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _200 shielding._\n\n_+2:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _250 shielding._\n\n_+3:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _300 shielding._\n\n_+4:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _350 shielding._\n\nDivine Intervention costs a whopping 6 charges, and can only be cast once in the same ascended form. +actors.hero.talent.judgement.title=judgement +actors.hero.talent.judgement.desc=This talent hasn't been implemented yet, it currently does nothing. +actors.hero.talent.flash.title=flash +actors.hero.talent.flash.desc=_+1:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _3 tiles_ in any direction.\n\n_+2:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _4 tiles_ in any direction.\n\n_+3:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _5 tiles_ in any direction.\n\n_+4:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _6 tiles_ in any direction.\n\nFlash costs 1 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. 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 c42e93265..e6e0513bc 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 @@ -184,8 +184,8 @@ public enum Talent { HOLY_LANCE(171, 3), HALLOWED_GROUND(172, 3), MNEMONIC_PRAYER(173, 3), //Paladin T3 PALADINT3A(174, 3), PALADINT3B(175, 3), PALADINT3C(176, 3), - //Cleric A1 T4 - CLERIC_A1_1(177, 4), CLERIC_A1_2(178, 4), CLERIC_A1_3(179, 4), + //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), //Cleric A3 T4 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/AscendedForm.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/AscendedForm.java index eda73e713..fcb5d931f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/AscendedForm.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/abilities/cleric/AscendedForm.java @@ -21,27 +21,64 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility; +import com.shatteredpixel.shatteredpixeldungeon.effects.Flare; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.watabou.noosa.audio.Sample; public class AscendedForm extends ArmorAbility { + { + baseChargeUse = 50; + } + @Override protected void activate(ClassArmor armor, Hero hero, Integer target) { + Buff.prolong(hero, AscendBuff.class, AscendBuff.DURATION); + hero.sprite.operate(hero.pos); + Sample.INSTANCE.play(Assets.Sounds.CHARGEUP); + new Flare(6, 48).color(0xFFFF00, true).show(hero.sprite, 2f); + + armor.charge -= chargeUse(hero); + armor.updateQuickslot(); + Invisibility.dispel(); + hero.spendAndNext(Actor.TICK); + } @Override public int icon() { - return HeroIcon.CLERIC1; + return HeroIcon.ASCENDED_FORM; } @Override public Talent[] talents() { - return new Talent[]{Talent.CLERIC_A1_1, Talent.CLERIC_A1_2, Talent.CLERIC_A1_3}; + return new Talent[]{Talent.DIVINE_INTERVENTION, Talent.JUDGEMENT, Talent.FLASH, Talent.HEROIC_ENERGY}; + } + + //TODO become shielding buff + public static class AscendBuff extends FlavourBuff { + + public static float DURATION = 10f; + + public int flashUses = 0; + + @Override + public void fx(boolean on) { + if (on) target.sprite.add(CharSprite.State.GLOWING); + else target.sprite.remove(CharSprite.State.GLOWING); + } + } } 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 9cab000ff..8c37eee9d 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 @@ -132,6 +132,20 @@ public abstract class ClericSpell { spells.add(MnemonicPrayer.INSTANCE); } + } else if (tier == 4){ + + if (cleric.hasTalent(Talent.DIVINE_INTERVENTION)){ + //TODO + } + + if (cleric.hasTalent(Talent.JUDGEMENT)){ + //TODO + } + + if (cleric.hasTalent(Talent.FLASH)){ + spells.add(Flash.INSTANCE); + } + } return spells; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Flash.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Flash.java new file mode 100644 index 000000000..071e47442 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/Flash.java @@ -0,0 +1,77 @@ +/* + * 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.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.AscendedForm; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +public class Flash extends TargetedClericSpell { + + public static Flash INSTANCE = new Flash(); + + @Override + public int icon() { + return HeroIcon.FLASH; + } + + @Override + public float chargeUse(Hero hero) { + if (hero.buff(AscendedForm.AscendBuff.class) != null){ + return 1 + hero.buff(AscendedForm.AscendBuff.class).flashUses; + } else { + return 1; + } + } + + @Override + public boolean canCast(Hero hero) { + return super.canCast(hero) && hero.buff(AscendedForm.AscendBuff.class) != null; + } + + @Override + protected void onTargetSelected(HolyTome tome, Hero hero, Integer target) { + + if (target == null){ + return; + } + + if (Dungeon.level.solid[target] || !Dungeon.level.heroFOV[target] + || Dungeon.level.distance(hero.pos, target) > 2+hero.pointsInTalent(Talent.FLASH)){ + GLog.w(Messages.get(this, "invalid_target")); + return; + } + + if (ScrollOfTeleportation.teleportToLocation(hero, target)){ + hero.spendAndNext( 1f ); + onSpellCast(tome, hero); + hero.buff(AscendedForm.AscendBuff.class).flashUses++; + } + + } +} 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 388129bcd..c9c919a8e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -67,7 +67,7 @@ public class HeroIcon extends Image { public static final int CHALLENGE = 28; public static final int ELEMENTAL_STRIKE= 29; public static final int FEINT = 30; - public static final int CLERIC1 = 31; + public static final int ASCENDED_FORM = 31; public static final int CLERIC2 = 32; public static final int CLERIC3 = 33; public static final int RATMOGRIFY = 34; @@ -87,6 +87,10 @@ public class HeroIcon extends Image { public static final int HOLY_LANCE = 51; public static final int HALLOWED_GROUND = 52; public static final int MNEMONIC_PRAYER = 53; + //Paladin spells go here + public static final int DIVINE_INTERVENTION = 58; + public static final int JUDGEMENT = 59; + public static final int FLASH = 60; //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 7cbbedd64..da87382ee 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndChooseAbility.java @@ -24,9 +24,8 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility; -import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.AscendedForm; -import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.Trinity; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.PowerOfMany; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.Trinity; import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -98,8 +97,8 @@ public class WndChooseAbility extends Window { abilityButton.setRect(0, pos, WIDTH-20, abilityButton.reqHeight()+2); add(abilityButton); - //TODO CLERIC no abilities are actually playable atm - if (ability instanceof AscendedForm || ability instanceof Trinity || ability instanceof PowerOfMany){ + //TODO CLERIC these abilities aren't playable atm + if (ability instanceof Trinity || ability instanceof PowerOfMany){ abilityButton.enable(false); }