From c7b144a72081533d6c388e81108e8c44195254e0 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 18 Oct 2024 14:43:11 -0400 Subject: [PATCH] v3.0.0: lots of polish to initial Cleric spells --- core/src/main/assets/interfaces/buffs.png | Bin 1725 -> 1745 bytes .../src/main/assets/interfaces/hero_icons.png | Bin 1863 -> 2039 bytes .../main/assets/interfaces/large_buffs.png | Bin 3788 -> 3886 bytes .../main/assets/interfaces/talent_icons.png | Bin 6549 -> 6809 bytes .../assets/messages/actors/actors.properties | 10 +- .../messages/windows/windows.properties | 5 + .../actors/hero/spells/GuidingLight.java | 4 +- .../actors/hero/spells/HolyWard.java | 22 +++-- .../actors/hero/spells/HolyWeapon.java | 17 +++- .../items/artifacts/HolyTome.java | 4 +- .../ui/BuffIndicator.java | 2 + .../shatteredpixeldungeon/ui/HeroIcon.java | 21 +++-- .../windows/WndClericSpells.java | 86 +++++++++++++----- 13 files changed, 118 insertions(+), 53 deletions(-) diff --git a/core/src/main/assets/interfaces/buffs.png b/core/src/main/assets/interfaces/buffs.png index 64f8054cb8e9eaac5847c5c093c597c167fab30d..864d610c18b0ccd7578714245bf988db19e8e898 100644 GIT binary patch delta 1389 zcmV-z1(N!`4bcs-b^(7zNklzVo1W;!Z&@>HTT9U1?T|e}l zb)!6^!-M1_0;b86^SqEmBTE45x(2|uZ4t140geDT1K_&v`}%(cD66DQsxnOh#2=`0 z0WbtZW8~OgCim9G$AM_T2q0y1nMoq9|A2kpBjEiIz!{g!5BmpDC2^-vKwj4(0Ckau zq#Z)m#U}vxhyZf(oIi*w%k9XGCngapQ>+b5MO@^N6-ap^}G z1nR;2W}xa8)YNbWI8&c>3ur(AEC`4&gde;GE_y|u=of#97!Y;hwfJASdl`FBq+&=6 zi`?IUkC=-`f#wovM))WN#zhHAkB$6U7$DzaV5q=Hf`AhW@cFTe257(;V18(T&rbou8F+=A3xozR z0c;>$OxXbQB@i0W^Lr3L0}@~b%|QSL8baiU8Q^~qWEeu`Lx2V72&!gaktYylV3rg! zfNYLIF#}FM_ZCp#%WuJm8>qSkE)wA)j^hq&7baZv2osH>Ubv_i!@>i3P>fwKDBw{P zxhGk&fbCs)5p_XeEe4U12-}|stmB2aPJu}YaG?3R#}|%o_$D^L{c?dV3b;AY|B!Dn z1h#*7wzqdF;6@zBjd4r5YD&MAYPw<=paO^)1etAE{Ha+_NleF(^2_mKHnoYWs29vtKXT%Igo;1`mbQi-3qV{HuvMFUO)Zi7S5KcvSdiRn5A zfz8dM%}vjLHaR?u{9!lUJ=W-KV1W%BAD@357Y#&J4L|_IPI1*=OhM!?8*t44GV4PF z`U0Mu+|vv|ARGbm7b*=L92`m@GAO*90X3lCQ+4l~0X3jg4>KSgG$a8OpnNree9XZ1 z_KpNR!m7Fj9UYhf{Y2?sa0@17;5o)m^(|Nsr=nTpb=3(M=`&oUAD~(MDN?~$)N_9( za)GUL2wYrTKwyhN;La8CiNEW9Gn0UNjt z4S>)94Vps(eaMHv2o?oQH8WpFVE**^0nbADk)`M#`4n&q4e`v!8Jb@QMOw*SKW^6#)~; zGn#%F67UBJEZ{?aynvhXf0BS>Ckt3VNx%*0`DO59XF&O(0gC)!fuDT~uzxCV+noae v00000Aph4!C@?TEFfcGMFfcGMFfcFxtm3`WkX{tB00000NkvXXu0mjf>Wf$O delta 1369 zcmV-f1*ZDZ4ZRJpb^(7fNklqSZO|yuY8U=x6S%Sd2t}3v73G6}O2m?EDvLNa#^?`J zDFpZ^E7oFMhvd$AJ>DP;!{?)Ap0Et+QDECP6}Wc@99qZ^{UcCD+OeTPT2(MG!V<9< z*9V-}69gpt;H)f^+(?2T8gZ(Fa!7|}EoowzXL-CVG6>Af|Nj%0**ViAYt66K_HsUD zS4$9JJ{qVaz8-&%U=9LvJc21~`6U(Pks00sWa1?Jhn<*zhg z*vxnQqj;Au3IJ-L6quQrMGIeOAkF|Mplsl>L*eT)-~l?rEoGxbBafCd!c8o342-@XMd7R8cS7At>ZRaC{ASQqZTfxRhGu_d-e z?r*?%%ta|MQ701!-=)AFSz6vdSU%W?K$c|?xRqtMAg~wK+9g7P!ys_9aRh;5+@Iqp za6%|>N`bTU^YgRccAW7hAOH&qgee*qI3UX_S<{-?%4)XCM|Ft{0%0Nl5C(p*1-e~c83J2ugoPdKm`yp2r}ES_^H`KcuOb+m=6IOpn-e6du)K8)R_O^ zAp~Tvd&vAOS*bmG{OD0G5Y|c)1K(V!)a!gCjXQT>P&D8)2pbLy*U5q%64P~#0=?do zUeEK-4!5_Fzs-D(K5GmOG}*w@r_Y{BfC+!&4L|@SPI1*=Ou=OzZ@@JJ$gIT%^agx* z_&_rNfp`SSZ-xdQJ$fvG%Y2gKGoS|aJyrLm8BhZ{^*964K|>Ni0m@ecS(t&rU?>5- zk&fSjMx#;Q0;d1OEjW~c=NKOsZ$VQ$7ZW0{t14WipAf(JWhTTGkqXA5o);n)=)Zr2 zz^hlUAkZfecx|sCpw}LaF|xX5_!CAbVBK86(k?N5Ow1_o2JssZF!Lxd%hQ>uy%iF8 z*>8>uARQa|)#|&d8`h4eh72nO;M5HQU2H|uF?@EJpH0AE0}X_;F9c>#00myWeUB}H zzK#I-g+M-b%7=jM>>$e!SPJM!mCt`%=JONj&;aQl;D7=?QozE(O9VP#1Mg!4AT~gQ ziP*pr@*%K;MFCUI%-0c^k34_EvrztJOVK~_Dc}|x;PXcbFJ8QV|306AelCE;Aw+(h zfhFcwQ8n*TIO`ae&vg-OSVH+AHgJU}Fe1P)_`lscumBi{f*=Zk1+It`wGdHA|3!pN z5d*UoJZ_HPB~aoQ+&hx{v>o93cc=}Jmj;9d1b%|R4Fr!61{`<-1PBlyK!5-N0t5&U bAV9zeM+UJbKLjZM00000NkvXXu0mjfmb_3v diff --git a/core/src/main/assets/interfaces/hero_icons.png b/core/src/main/assets/interfaces/hero_icons.png index 4a7c0525f8a35ff79cccca426d8cd5deb9270ec1..669c6c3c57eb7509908bf27e68c027c64d5f64d6 100644 GIT binary patch delta 1821 zcmYjSc~BF17XEbuNeG5RE+rfR527eRT);ccp@)i3+mg z0J=cb@>o;?3nQRFIs(Ej4u`tq5s)ZgK%+DSFd-qmnLoB_U%h(o)%*VWzE@w>>oWgp zQEX=c0h$p2V2}I7%ZB#w(u#k$0oTZ<&#lg8(aXyLNs@-Op}zQVCB`sqI~l(38*piA zZ3)Cc(e+rV(AEk7N=-#+tHQrb)VoTXb1Y<)Y3;vNTGu*PWm zk_^rHK!vS=7>75#XFz-;w>6Sg_jD`}2!V6@gP2b)pR+fq2H%v{u0#^#j(jHV!Vu7! z65BFb-YvO)t&y<`55*>oUs*`sjMUrd7IF$Pg?XWr8sjdSvc^Mu?^C}pg6nkV@#7}B z3vRd8ujS8)k5c7mD90iE%FF$dS=OCbcA-ONgSHwh-pZsOL&5f>N(I!_!GFYSL- z0W~q*A! ztCo;-xAgRM!kUkgzeMu65XNKG=zHBp0nUjc8@3k?L(wMJtCwz)dA*l4Cac%qM<4rk zBo~jkW3a9whuwyf7bX4k?oL5-e!_mpX3OXgCvAdX>-S=_))(KK@^;wV(|Xfm$YgZs zf<`>jAS-?r-L57lC;iSFSvXV^L@m9@p_*(eu0n|`f1t_dUjFi1Zp#+OGRyB-fVdLJ zHHlyL7`k)KzP1pT#KY5?+LiLrAQuJ`-j|rQ;L!JL&w?sdHtVjOVCz?6sw_+>Y;P9| zQ}D5WUEc88Cd{lFJ%^UxTu$U}%pQQGniPz;UNj&^^gVZX!-OAXMc`C#AUjt9HLhPc<;f=_(ML3=l7*?JF zg8jp2t71WHjYAbbb}vpr9?=rBjFe(%-1JUr-_uTMDlvZkP56*G23j1I1l zvp-Oo5WIsEFvk`6!R?K%0t#P8Q|Hi_-*^d(vu~7{jt7H$lNml;!z>+HZea4igpz!@ z>qLJ<@heX=*ZKULxpCFa!WKJG@6T;kEBDCq?ns|gQx1#2TH`~RG13PkXQ5cZiKKM> zt?z~<>Lk2_MMR+iy{Sjb0ZcI8hJt05CPd4TZQpr*a{oSBscOa!2H5m#u0`;$D`{Rs zZ+Qu=_bMGK2H}2gYpdj|hmgByoPcz~!-b!r73N5s_wxeC`fq)z(c2)i#Y|`OBHLvX z+Cm#V+`dB}1SKvLI+*5%3&Q(ym-MFaB2YpN(~QRq*&wg}Qm{STDq1}7OubLqFg zs&}8XiHwNh^*255?7q5FJyJR{+!L6Y!ZN%s07l6-wCewl)uJX2!*jYS=T9_b`@W!> I0Dks=0n`Xw6aWAK delta 1644 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 delta 3517 zcmXw+c{tRI_s2h<&&-E0i)HNVOqP=6l0s7ELxfvu%6iK(N+LookuskT)o2-+mRm}< zMii-}MHJUet3hS7NWO--B~97JQkjgIpZmw}{Bxe?Jm-1N^PJ~>Ugw-zs~46$ThREn z9Th}#a&nd~U3xAr+I!G04*&o#Yt#Br02%5@1OUpmV1M7RTri>a8TiyycXd~K;?IFm zzqC#Ld^+JUbP{vo6RM%}^NwWl@$V|kjzwAy-N9IwgG**##Cbdmd$Z0%LY@+pOnAOL zd)JM%OIPEvd`(FqmYjV);%d0^WH;q7948onDR*>qvNcL@e;OMj4A9O2&LWPT4;Tzr% z=PDo#eMD;MG1v85{=$GsO#m$x)6Fs}fmaUv-v3cok)oEV)}4HNgwGUKT}2J}*GW7AVO(b-jKRHmqj>Jh9Wh?`I%7A#Wx7x^AbPUw%M-A)z zFw^RpeRU;KnNu3_)}|p4_uR!SOEa;17~3VcUBIAV1DGDceg{$hP7woax&Q@hT-pq+ z{|kGEuP!($Fouf&)PTTLX+{$0>M$bVQH|`3t3z>A;|p@EDs~t8lE_-d(F9f0Hhm$n|ZBLA;uPN-B#YC`c2kW48bb5=ekC z$x6Z`UKMHvi5L$semOAmPi%4|;_tB)54Ar)?U2B654awzOd$X(NHZy5P{~{9M~QII z1u=3J5Rpxfdwrm@)#bpenCSP76zWQ;qFNdLjt&_ zt-HGS?snR@w_dhAk)u|7U-&TK6B6OLud)puA;gJ{1Hv13l#=DK}w3u2vlh##*%e zV2MWQu9`bbU9~tj>&PQ?mI$ToFY|wSuaZ=4HDo;XA)zX`uFXPa@u`rDmmnuJmc z9{fVaU(i{n)yQ&!qfHu@J7afMLr}B#d#%O82?eiZ9a{p~C$vhh5whZ3gcUfb*5DHn;tU#B!O`A( zU*DN6B}F;;0^xP>B>xqk1*(^x?~9BVO3~-Vah&q8=YO}Qh37`OU`i9#WK-QW;In5Y z*uKHM6hqx#Y@5lV4z`7A37R(!7rWa3dO<|YTJ*s|&(nV|NC7{$3NKa|nZzE4c@|se zXqynJw;sYS?~7L0HpXH+tSn;2N|NTOhp1Ai(eI(9?tzR|RA>-AD9 zp&nAQBex*S<{;2xoZ*8K`M69l#nW$rdgTyfBqG258i-Gh;dSy&eqZ=#lvZ>AyJ=Ar*&?)m<=j$2BSpDXQ<{HurhDE{ zO;JT`)wtQr&-m|CbJg+R=Yq81n({4A9vXSoCJHj2X`nHIsQpjNm^GFg*SyuUEpoHo zf3NAeOR)C${(pA%3DOS;#tdc)$|LiBH5~o7AzD}r;^o(Lbmih6W4Y+g>g-=&e~qV7 zaut@P4AG_c$|IMcH>vWwc1M7Z6?`sxL1dsk>Yjkj?BD!s54fp(1_E=&`X0;?z;}-e zz3ekEfZc_<+F?p63lAP0g(@$Hs#-Z@d)6gZZi)jmFIjq}Ai!G@I{S7bIY zq7@XjK@l;z4N=gRS_^xT9EIItL*^%2Zn^L48te^-=fyz@2qY>gSl=lys{s?)KHYiX zuRw11-1@~2Y44}dq(gkO8MA?0e^MB}`!%7?JJul9S*T9uk;H==P_`Bilnl=mEZUH@ z0smAP3cZC0GR3=a!8ObqM>s5oHezY(0z8YJT#!IbP#uH#Z!6*6a8^aI_%Va6tk?WF8_B*=*xG(8 z|2O(M{9YAGAZV~phZI(9*9EytSPpcj!F)-o={@Ct#H}ZrJh4VdVP2xMzWB-xzQ^K? zfCe|qG}Y5@rP87Cz!_g2);?8Zo_5fx-jKdkath6}dFnyelTM@*LzfE@Y)+>h^3sv? zjyNHIrQJ7-(5WMG9StM(;UWC|?gk+ww>ohef^i78F+C8gR19Xhd9 zgglG`B;^hYMrTU?yr=0anaA8_*;KvC=~yeqs1u(SDSV^rU3{7r=FSA*#C zy^KI*8CCb}5uSQ}-227E#(Z<|)<{VI3L|y6uKb3cu#}Yhv-Wh(_+?4=etF`>^GsJVq^alv0d2wh+vy^pTsJ!ASh0vT#h9OmbBpy8$P$>#;Sl z2UWDO3MIi+*A-Dk10lQyY!{}?#1R1eQzA1Xt!;jpGmQz=&tQAcuAc|~{Df@Dle7t} z0bJFyN+6o8=2`XFGU#e(T- z4Jft}l7V;@E9aY2MwUp&!EYC5aWecmgvUrblwIMbt&0N1zz`e2NBashs8}&vXJ8AZ zYIDUL4)mGl=0%>^@bue+yGf6Hd1{h|^43c2TlqLi{CAxCTKvc6{Daithb5HjaY;%s z_f_kOtWBmzvxa1cGG}pbt}71H9!28jZ-u*?(*qEfqzgvPNtd(1eQwOrLwH@fKEDd} zCmu&F=q%aD=zQDc)Y7<+6Zl53a~wLY4xJm+a|0Rr`$wnu`h$#5yMhshu)E-VIz<*Y zMPz2KwwhL+yB`7Ddw;rzJzNC_C(X6Axbv-+fNp#xfeFtaO*p#r)0a-#= uoXwc! zkOzJmw?uHc*F>!9f<@S58McQyi=J9>XaPZNkzqT(v|TEkBLKyzzYXU_CshQ3;ZSql zFIQO`=`5?ri)AD=wc{PX(D4RE#EU5AcL{0S}*Xw6hB-T3no*)ZCWyTf{?g*?@8tM@0{$+vOi?lxEgo6k+`+7pXgwDXDh?)WUJn+lSxs*-@7lX0|207+k-*@b$s9;07k^dBTyBNUao^SCY1^c zRtGM>_NWlm`Ra6P&#T_feXnQalvjV)%$?YLW@lfiBs6v3y@!wbZYLS{t?fO!g<0F- zn53GwcB{ap%{Ze5Uv4;^x2DaW{UX)Q_eruNq!X;lPGv`yo?@09QM16i`cKRrFDX&8 zfyPT()mBXOrEZvYWqO7~#uS z(8n;LM=jDTf``*+^V}Bej+OBzMe9qP2p$-6eMvlF?dsg$XM8>W#5=I^&ls6icg^+O zu&AG$olZwCo2wsEWxBh`ScgkkgcbH)&P}RE?QPliIZ`Wblq^#rbsTT$dMetsY$)ot z4ARX>Q7Tv#>v03N2PAWvT?tOz($G4%vU%Ffm9_9`#Ob!~_5~@KEf-xyOiFyzt&DT8 zgOrmD&FjE8nH5~+edeT3G`YuRTEtr{$yRq*yUxj@IZCKc%8F&tG_*y&p1Ak(i|{$+ z=g$^w!9F|^!>PjO=P^=o8{kHePKi*qn6jEu2{K zmw<@&r{=x+_Tfvr6O$b59<+~>$TTO;CVL&UD>u9PA=o9c-K$c@BYZO;$zO?!{7Y*z ztAE$$zq1I%hlJmwfxG*kEZf3do}41UykKfe-0mWrA7t#zz z1Pwg$JESmZWZVj1RE_P*NvBo8!(^`y;;SpUPrxDfltKXnwnKMv*65QKw~0fcLTd?7 z%b7+SEx16o3;UHfm$0Im`hVzT))B4b_W$K3{!1$yqu0~yK)6=%xJ0Y^E-y+2OFmh# z8r5E~j9)LT{s&aS4S{9t_kW=l4U5Whb0hy7F*~)D^?8>JzQi}2vKg2xX-2OP3meZ7ZJHYXnd%}d5OT+WLd8?oI05&ej$%y7m z-L@GMp9yv9I%*}4hYh%i_GicmGnq)Bpl;i3O)&UY|7D*kUh5Z1FxeLIWrCU&Zg-n< zf;(!`s^De~mzE0rLLPJ&I<_W-S(lyC3aSOrMyT9|nqkJjMughb388p|X;TZXc;5W} zfg@iPA2?Kb;H5&5YF3mB++3HBp3MbuFRtSnrOKH%nn=tRXmDL6<(*>v47Gr=_(Ch> zoTkHpBD{3*>PXZMByzTH3h!2S=?_32_JxtZHx1i2#bAehJ<&Mac+H&Wfk`y{7h%jw&fHyoswN%U zff%0cH_+!l#xJG=;&GqpXMxo^&~hzOFrGQ!5C^oRq60Ateh8{ z@NRd~5|_7x2zDS%olt`&XVe*~IaBkPLy_fF7+31~=j(z}NJ zlcl%%dZ=~wVd@;Edr?pYM|9~;LI0vv)C;J%+Vr~~buzp;EFC$qDvw7rC*9-O>)?wM zCFT++FUAWO_QkCFOyo9w60K9FIH8{R_Tflp*%!{fh!bm?cL6wkZ|S_pV!u1$CaY;q zyjhX70}x-p1+J@yzF&f8F_vbSUeV0iK`?9mh@gI_g#AgC3CK4v4!e=tP84GC^zvW> z_Os}GABVk&a#Px-wd(ph6HNTgS};(P2qADovf8U7t9I$$yU%+%Hua%;rWMC(fRh`8r@iP z*l2FYL^$1lJYR4%?XWm*Z&sINyC0v?HC4AFE9GyvJFr=B-XO%}ly}y7;ZBLKi^1Kv zwXDG`-V}~b(Q9rv4UuA+sz8lGjNsXJ5`eWE<3k3xR4t|)g6iAw)i|nZ+HhO=H zNM1mn`KnRvS32so(Y#-!-eUa1+$C`IxYv_V4sNzDVU|8owTw7sNfqwH`p)OYzA^Je zHhh7KVOtCTId1u}^4~F8dLJQW`@!zF*MpB97fFmm?vE$YoPha}dX$+XobxPw;;60C zZ#Su|!ezPIg*JqRu4GYB@BsfF(1_TO9uX_ZAF4;InyrBkK18;CDG9DoJEr&nUU09^ zoNF7ckugDr?0zQamVKm|M^?59f;V=9>bQVRaK)I~*Qi&En-r$YB7c%IRXFMZo~;@@ zU^J8{ghyach0J`^KPx%o8KU<J^p`&9_4>4PRLuL23vYdz=6zXg@bQ>oOOd-G^*=QRsBBWplQ56l zc1+))_Yp$&8t+=bI8^5DRt2FAm>CN!6=SCdw`5lk8BY^1#i}hnpaRJR`@5S1JWr&W zo{+O%Yz6#%syIt}^ak^#kZ#Kc$4@<>V6urRiL{odmjACU%xPt!RGi^9a)<6-3j&P5 zBB8b=d!EX%Gq*tX5$B3aXA)sj>_^a03d)Dy;Whvbsbw;DRfd&OMnS!@9`25k5t>k@ z4HgJLQ?R7m_I^ozZ$GP`YGqvNJ?N{%xQz>++2v*LoTPfDjW7#46C19SEtn=h6HwNq z)T&YIfPl}ZhBzK8-F3iRgH2fv&asEo%HtHeJ;{aOs|(N|f$Kn99)lTBtLJBe_bL__ z$L=|mTnBz#jiJN0)ew=u1yPnN_13henSgNxoK@+gm z@-&-fGhx-3=p>-02Q5L@gVN99Cae#4)Sx@DS&gc}0ILrJza_=AI1oIJHmUqosjNM`290#QEI(3kC8&nt1b(1Kj&T9GzjmAaiO%2Cw&-9&1To_|Q+1Cdt2ud_IFI%QF)0%e6$%(fBOZD?jop+WVP z+QrD90VYW1Wxc;gAH7D27w&adi7@<2)WtO#W-&&+t~9me^X<}MN7Z36kPSB|I|Ql* zXF?S@f?aN_a)sRPKs#XJxZV1oF3(^WRioww^y-fo#ZF6JgW}=F#ebqqJ4J=FyGEfG zqQdAu1GYZcx@2Zj0AsafbBsfU26U|%)COEE>vmx$0?eVooLi`;jykG*KC@GGzcjee zYgySL#sI%C(U4V=8$a-1_xD*ancVIg^C{LiN7EDHL}IlG8|VmArxQ-Vp1w<*Ac0#j zVq#r{trlfD9IZck5?w*oTndy2z-{#Jmscp47m_j6@E7^pn_9+^Nny&Q2oYz;=BylA({g)GBV*N|zaHp(5~cmEcMb%qgl zZ#Jf9oh4YPJ^NUbuMGak|H>@6fF*fJG%V(L0^DF$GzY3*VkUx(Iap}G&RnAyi>ua2 zyZP%<{zCi{7s8TBlHF3d4O_a;o~r7OKUAICM|`KcS3p&m8|PeQ{r4oniP;r_jDftz zG?RlWS1zkcY+oNUFdP2s_-2?SGGCba;m~obagi`kV4%wdKWs_Q^pP&Ppsom=RLf~K zbFl&UOKhvB)zT>R*n1fARgA6^V~*<2oK(|E&TSsrlarpwm+c$mX&|LdJ3+}Xmncr7 zG-MGeMLZn%X&ht`m#Fh)1_P;)3yME_|=)0b_=MGsh#+_8*3C|CvINI5jD8`$^=vXk4x zk27}T!y@pe-}btpICk`Kr1w^!L&WzS35?}NP;o8FYran{+(G?k`3Ma^Fy(q)L}blw zCRNmd0s<*jg|CDV4P^eDgveS9f-x~PW2={n_F2rqWg!lUE%pI2N7zaenfKd+PA-}mcV9LwX(X4lb{W0(L`QxS- zH)j9J1%JrJWY(YWP#uVz!<0ifLyYNcR9w@ef?um&DdNcFtdZy4)C-wPnsNxwo zgj4ysho~107KeC-<=M|Q7WaoqSN%3tg}w3Q0<;15Z8&Fd#m(Em#pWcg)`HE2msnN2 zUrr}M=j@;3RNHS{VcsCI7zzkK8*m@^)`6Cs0AfSSP(pzF%>>w&2B18~ng@q_6J@*Q`APRz_*l24n zND*mENf0C`&0SfFKnNRZG?~6He=AreyotcJ^dFf_jNZ-mx z%frd2jgc4;=r-z(rvd<=NROk(0rf}kc>uK3%dSHCxU-VZj+mm#+XlxXO?9QYNW1;l z$c{eG2ikUj^HHn*Pamz{913mdVub$oRm1DQQwltKnCpka$W3)m*0I}!J^5Vv+VO^O zlKj++FBW<9PsTTRJ5A-sA6NFLyZ#5n{Tgw&-lXPpkAMcTz$w(SHT^Uw7 zUE0Lq?6qp2*h)(tgVY)LKf&5NN||GOQY)HeuJ|fwY#nVBbNsS?T#nmdtnU)1+TfE; zSR#K%ZML)S#&w6wvUbbwzzmdSU6nWcReVg4;1G(pVBY*=y>0<}zBNg|WO{Bk4tc1j z@T)Ar-cHC2hDP$adIlz@PJYFLspkud*sF{F;YNeDm9mP)`fKLNt45qaVZy3F|3?kG zfqzA9An;&3`Pno-2B-x)JcZ2xSue*dOIcyFmTQJ?^{lQfbGdKW=>^GSdDV%PqW1_1 z$vU85v_bqQh)$#v{sbGMm>GJM%`BXt*p4=t_yo`k`RH#?8#?Dn)&LGn#h2JjdWi-_9%} zMSVN^lD`>OH~$snm3|vS=km>TJV#F!orkZRsacR-@u! zt(Doqh=orsH>ct+Z9^oF7+S)Ydl|AxjVxn=Ikb}HMc4|z^(yw?+4zn|47OAlU@n6l zr<~f~xi0LxOIox*Jkl%63(WA~<8KX|=%DoT^@0HRJ)gELtj(Pgds*sQek^I>)oUE1 zjjMCfK>O8;_ElZJ9ScBcKHhE;!_eg~{B5EaFNnM=k=76fbBV4KJH2mZH2gD`bu2bs zh`LZ6p2NH&2lFTr|Cjo|JoUOsY^|NQ8a+aYyA>ymyw04m3~X5JEo4-rZk(NK`>AJw zzVJNs{JEGnV8cnsMQ_JRP(Jz*|8;A3ToC3`(9Z1w#zm_%woG8>74qynO!;0eKk*E4Y79h+8HVVBBw5ldV1*|8+)M zO9{v)#nky>gAWIVN#-XWq);+8R%l&zD2P70=5z_4vbSaxzq~8(P~bjBN}3dQJ0~sV z9jMoEa)V3}0?A-b^aSHnPKAlwKexB!+ADVHBLTy02WW$3Q)ALKtxp~-5h;?AUkq3o z6dAmK?d1APoCa7p(Z^}YTnNF?zD zTRh#2o`Dm-H51@Q_bNF%V$L65#j zoTz^tcRB-<#?0gzBB5o?35{~{3A<;^b(v2vwESi~sIb`L)!Ohg?|UHdv8d*@O9oz~ zqC0*CcQouhkbr-?VIk43I(W|?N2xx>hg?pHQ0B*P!SF&!F}eOpXkxul`As*LX;pt6 z7GT>(HhPDjXzdZ+o5Jgt$B+IMzXGkm;p`RLN#W~al>Ri^UlxmaJb$;ZycS*I@5$R; zkRZ9za{PJtHJyj%eqocZ+l#MAb%qYDxz?ytS?seqoccx+9?sk0NBvD%v}#%8<*eH0 z`=O{@a#1WTQA4DAxy`fIMh&L%VSsTcWn5Gv-M+<6f;pAm$wUCjB#lb zJ#%&LMU~vvgStqZmGH9A>i)ftskMH&?D481=2=Xps%@>$vPdtPy*j)w7U}iXqJxW-W_N)I7u31?b|a{I-P!2 z5U$0cGuAHG1U|g+>CxmWUL;>&Rv^cX)kZuR=oJS7B1M}FAcd{Sm-}~s(9ybp_fnp^ zton!Tq7J1U#&cWm&%|v{5YB&{Q(7dFJYYF+X3r${YZthjmrLDD^B-zOe|93M5%{f5r4=~m&tcBR`Vr|mAK@cCplkjLkN-Tn1@vyiBO;E> ztNt#|ceB@=SIA}UOGU9EXff<|v^f()3z>PZ9KO1S8Q58x3Y5dy=E-_+#9n2Wvudnp zXwFe*Z&RqUvOJYSAyBiK-=eZ@ee;BDBcuYk>9$FP^@xc+$x);lac_gBwUv?!mx|yJ z)PK0-s$}V{z~$qt&&v5>v;03 za!z|g4>cx!EY%c_(uAW_ksrZ7!tA9E;3#-^O*5f?bL_^H1ldDCHx;xPv3OX+w-Th9 zQH~N5>*|pdw4eXw{=mu#+j*L}3m1}rqcWx#s3ksxv7^VlaKhrMUKyp6uEGUQ;VL9O zzbTI!gC`q&i3NXI6=~yXPHttATv-5~ffvc*DQHO&l%2 zkb}UuUV*M$x0-WV{O=Mk@DJT)U9&W`;1ssW2SdB+rq%@vxjjzGX@Yy_1l9qT4V(mc zSu`kPK2ZjR;ixjAy)2dL@9;-$7*`9Is^v0=-tt#6H2kdngMWzrSPzDD(s=>a<}>!Q zzjwkX1@0<{4b;)lkXjHhZd%;pvKE1Zfcmv+qDAGZel|Y`qUn*hDPKaO=+1qMT%2|#QnHt>uN(qpwPDXAh?X9p;WEz@&r?<~dStp&gC zbe9duQ8SiK(4BiItwVT-wVbm-b^(}Hj)fa1#y6SY<)?MXuWz8upCQ3u@i0WyAI;sxa0pi3$~k}O zeoyV|rQ2XXj=bq{BEdhiQit;QI@T^-SOq5TRQx^Wdq}z2?)bHZM?%+6Ng};5Tb0_y z9ctE6cBrZmV7E8enKz*QKe)bdBbw3Pu*}(FhsGlH*d(9&34T3&MPypcSh|(X7Y?S! zGA0pNwKYAqW83!UdH$2JpaS>&+a1MM*~L0~u1||9N66qx%(}4N`ipSqah*7p&1W?o z^VeEF4!5kdtR(?bY}GCrA6>Q0^XHF%>DGn5K&tlVKMsM4-B~pL?^^*!vAvoZJ)Hbo z@wuCh-J1us68?>7oG2Dy)1LG46@eJMyaj7glUV5}8)})yu{J*fc9=Nk$!G5+#^4}T z6q4jv!5sQ;qpGcG(rAg~UW1N#ixk?fld>okzx5horgZH%^CXYrhZGYIpfQ;<*)J}} z)behxhP@ZtD(+`X+^h4hAB5}Z?8i*MpqAlVGoi|TW4B&1XNmNQUfJZvTa7v}lN$}a zNqvJ_gYtOB%8cs_!G6CC{y@dCg)08MZy>+Tcs0D?DH;0eCPx#QKPnu}`V}??TV=+uGJDn_yJpp_b$F`kMgyQ<0`#?KopVKceg4rRRH=36&L6Xt zf(^@i)B2v{Si07hwoonlc|(rGI_ENYHdasGD-%DW_7_jvgNg>8G*A-12|OM(fG#7T zYgdNVKFk2;UC)nakm{p-0r_|>iZ;H*zt2p?s!Ve3`%t;sb#zZ7eZjVJ<;agEJ3@&% z*jX9UXo@zoS0aS?WsDiLo2UDtD$)}LHFKDcjtB?0w+bVOM&p;}@*7#1 zJ&kgB>QxVXS0hzVUb+1UqIn$bmOH9DK7Ox}H9SkIJl#qUC)PS07CS;;MHK|v`+o6R zKfX?XR3}kl1T0#af6pZZQ-L{?)ggXARvDnW5RFS?c6T z_L3aN94%nhnb-#+;D&R#XoSu(z+{M_FByFUDl}cO!)l@EYLe6 zg)V>*zV(OaQJ^gp!#x8c<0*_f$&Q#g7uKzz8}@%Uit`I`h8MumDLtAY0-7>IfIPLu z1qnho-#3RJgVx6gwvITK52^~qttpDE;n%ckv-O|)m9En&nGsv<41ccfI7-fAP$NyA zlMdTX;~qt*70dy{pG-S}1ytfUCmZ&njJt8uPB$7pgzfxTp%{WuSO$Izb4W4Aqx6?D z#p_-vQayJ1F2^Uzt&MH@*@xu36OB8J^tQqMjKhMQBUx_VH&4w+3@cN=ttQC^IXW~? zb?h;%?atd2=qtBXf-bKxlg~G0-rYd0n}b<%K=^pm_xnt|K)Wr%;^#x-|3mh7)yV1l z#U6HOPWC#Jf?vS-#_ZwuIztz$_PkmHpu=&R8xOrVKxP)OEc$Z&Laq($`@Wb-410GF z;7FAJ`sy(xD8ANi$c`Jz59}$sOF({_D%!t%2_jMPm+HUEBzRJOK5Foy+yNr7DjhMI z$&olg)e!XR7l5N(m8ZSn{3|X!gCkAKu~Z6XBL~4>;fM!BLNv+gy)W$0RbNL??(?%X z=e*6!51o_>hu7k?cdl!Y-PZu!c_Hm)QE3cFF$4l_<^N{_K!82*>e_QQAxr0f#RL0} K?k(C)OZ-1O=gT?( diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 03c833224..5ffbb1a32 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -535,17 +535,21 @@ actors.hero.abilities.ratmogrify$transmograt.rankings_desc=Slain by: ratmogrifie ##Cleric Spells actors.hero.spells.guidinglight.name=guiding light actors.hero.spells.guidinglight.prompt=choose a target -actors.hero.spells.guidinglight.desc=TODO, just deals damage atm +actors.hero.spells.guidinglight.desc=The Cleric files a bolt of magical energy which strikes a target, dealing 2-6 damage and illuminating them. The next melee attack made against an illuminated enemy is guaranteed to hit them.\n\nThis spell costs 1 charge. actors.hero.spells.holyward.name=holy ward actors.hero.spells.holyward.glyph_name=%s of light actors.hero.spells.holyward.glyph_desc=This glyph slightly increases the amount of damage armor can block. -actors.hero.spells.holyward.desc=TODO, temp armor buff +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.\n\nThis spell costs 1 charge. +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.holyweapon.name=holy weapon actors.hero.spells.holyweapon.ench_name=holy %s actors.hero.spells.holyweapon.ench_desc=Enemies struck by a holy weapon will take extra magical damage. -actors.hero.spells.holyweapon.desc=TODO, temp melee weapon buff +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.\n\nThis spell costs 2 charges. +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. diff --git a/core/src/main/assets/messages/windows/windows.properties b/core/src/main/assets/messages/windows/windows.properties index 26cfe8dad..f39058bf7 100644 --- a/core/src/main/assets/messages/windows/windows.properties +++ b/core/src/main/assets/messages/windows/windows.properties @@ -39,6 +39,11 @@ windows.wndchoosesubclass.no=No, I'll decide later. windows.wndclass.mastery=Mastery +windows.wndclericspells.cast_title=cast a spell +windows.wndclericspells.info_title=spell info +windows.wndclericspells.cast_desc=Select a spell to cast it, or press the info button to switch to info mode. +windows.wndclericspells.info_desc=Select a spell to learn about it, or press the info button to switch to cast mode. + windows.wndcombo.title=choose a combo move windows.wndcombo.combo_req=(%d combo) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/GuidingLight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/GuidingLight.java index 1b8f7e2a7..7ad22b94c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/GuidingLight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/GuidingLight.java @@ -44,7 +44,7 @@ public class GuidingLight extends ClericSpell { @Override public int icon() { - return HeroIcon.ELEMENTAL_BLAST; //TODO unique icon + return HeroIcon.GUIDING_LIGHT; } @Override @@ -81,7 +81,7 @@ public class GuidingLight extends ClericSpell { } } - tome.spendCharge( 1f ); + tome.spendCharge( chargeUse(hero) ); hero.spend( 1f ); hero.next(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWard.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWard.java index 597d8a942..65ae94bd6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWard.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWard.java @@ -37,12 +37,7 @@ public class HolyWard extends ClericSpell { @Override public int icon() { - return HeroIcon.ENDURE; //TODO unique icon - } - - @Override - public float chargeUse(Hero hero) { - return 1; + return HeroIcon.HOLY_WARD; } @Override @@ -52,7 +47,7 @@ public class HolyWard extends ClericSpell { Item.updateQuickslot(); Sample.INSTANCE.play(Assets.Sounds.READ); - tome.spendCharge( 1f ); + tome.spendCharge( chargeUse(hero) ); hero.sprite.operate(hero.pos); hero.spend( 1f ); hero.next(); @@ -60,9 +55,20 @@ public class HolyWard extends ClericSpell { public static class HolyArmBuff extends FlavourBuff { + public static final float DURATION = 50f; + + { + type = buffType.POSITIVE; + } + @Override public int icon() { - return BuffIndicator.ARMOR; + return BuffIndicator.HOLY_ARMOR; + } + + @Override + public float iconFadePercent() { + return Math.max(0, (DURATION - visualcooldown()) / DURATION); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWeapon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWeapon.java index 3d42a1010..13a89e7be 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWeapon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/spells/HolyWeapon.java @@ -37,7 +37,7 @@ public class HolyWeapon extends ClericSpell { @Override public int icon() { - return HeroIcon.ELEMENTAL_STRIKE; //TODO unique icon + return HeroIcon.HOLY_WEAPON; } @Override @@ -52,7 +52,7 @@ public class HolyWeapon extends ClericSpell { Item.updateQuickslot(); Sample.INSTANCE.play(Assets.Sounds.READ); - tome.spendCharge( 2f ); + tome.spendCharge( chargeUse(hero) ); hero.sprite.operate(hero.pos); hero.spend( 1f ); hero.next(); @@ -60,9 +60,20 @@ public class HolyWeapon extends ClericSpell { public static class HolyWepBuff extends FlavourBuff { + public static final float DURATION = 50f; + + { + type = buffType.POSITIVE; + } + @Override public int icon() { - return BuffIndicator.WEAPON; + return BuffIndicator.HOLY_WEAPON; + } + + @Override + public float iconFadePercent() { + return Math.max(0, (DURATION - visualcooldown()) / DURATION); } @Override 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 9ed2e08ea..0bf9bdfe6 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 @@ -61,8 +61,7 @@ public class HolyTome extends Artifact { ArrayList actions = super.actions( hero ); if (isEquipped( hero ) && !cursed - && hero.buff(MagicImmune.class) == null - && charge > 0) { + && hero.buff(MagicImmune.class) == null) { actions.add(AC_CAST); } return actions; @@ -78,7 +77,6 @@ public class HolyTome extends Artifact { if (action.equals(AC_CAST)) { if (!isEquipped(hero)) GLog.i(Messages.get(Artifact.class, "need_to_equip")); - else if (charge == 0) GLog.i(Messages.get(this, "no_charge")); else { GameScene.show(new WndClericSpells(this, hero, false)); 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 ef7bdebc5..3b9162cd5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -122,6 +122,8 @@ public class BuffIndicator extends Component { public static final int DAZE = 70; public static final int DISGUISE = 71; public static final int WAND = 72; + public static final int HOLY_WEAPON = 73; + public static final int HOLY_ARMOR = 74; 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 20be7d726..d83de5c13 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/HeroIcon.java @@ -67,16 +67,19 @@ public class HeroIcon extends Image { public static final int FEINT = 30; public static final int RATMOGRIFY = 31; - //action indicator visuals - public static final int BERSERK = 32; - public static final int COMBO = 33; - public static final int PREPARATION = 34; - public static final int MOMENTUM = 35; - public static final int SNIPERS_MARK = 36; - public static final int WEAPON_SWAP = 37; - public static final int MONK_ABILITIES = 38; - //cleric spells + public static final int GUIDING_LIGHT = 40; + public static final int HOLY_WEAPON = 41; + public static final int HOLY_WARD = 42; + + //action indicator visuals + public static final int BERSERK = 80; + public static final int COMBO = 81; + public static final int PREPARATION = 82; + public static final int MOMENTUM = 83; + public static final int SNIPERS_MARK = 84; + public static final int WEAPON_SWAP = 85; + public static final int MONK_ABILITIES = 86; public HeroIcon(HeroSubClass subCls){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndClericSpells.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndClericSpells.java index 5c2393223..bb173aafc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndClericSpells.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndClericSpells.java @@ -21,14 +21,15 @@ package com.shatteredpixel.shatteredpixeldungeon.windows; +import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; -import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.ClericSpell; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.GuidingLight; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyWard; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.HolyWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; @@ -38,6 +39,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.Window; +import com.watabou.noosa.NinePatch; import java.util.ArrayList; @@ -45,9 +47,11 @@ public class WndClericSpells extends Window { protected static final int WIDTH = 120; + public static int BTN_SIZE = 20; + public WndClericSpells(HolyTome tome, Hero cleric, boolean info){ - IconTitle title = new IconTitle(new ItemSprite(tome), info ? "Spell Info" : "Cast A Spell"); + IconTitle title = new IconTitle(new ItemSprite(tome), Messages.titleCase(Messages.get( this, info ? "info_title" : "cast_title"))); title.setRect(0, 0, WIDTH, 0); add(title); @@ -63,7 +67,7 @@ public class WndClericSpells extends Window { add(btnInfo); //TODO we might want to intercept quickslot hotkeys and auto-cast the last spell if relevant - RenderedTextBlock msg = PixelScene.renderTextBlock( info ? "Select a spell to learn about it, or press the info button to switch to cast mode." : "Select a spell to cast it, or press the info button to switch to info mode.", 6); + RenderedTextBlock msg = PixelScene.renderTextBlock( Messages.get( this, info ? "info_desc" : "cast_desc"), 6); msg.maxWidth(WIDTH); msg.setPos(0, title.bottom()+4); add(msg); @@ -77,33 +81,15 @@ public class WndClericSpells extends Window { ArrayList spellBtns = new ArrayList<>(); for (ClericSpell spell : spells){ - IconButton spellBtn = new IconButton(new HeroIcon(spell)){ - @Override - protected void onClick() { - if (info){ - ShatteredPixelDungeon.scene().addToFront(new WndTitledMessage(new HeroIcon(spell), spell.name(), spell.desc())); - } else { - hide(); - spell.use(tome, cleric); - - //TODO, probably need targeting logic here - if (spell.useTargeting() && Dungeon.quickslot.contains(tome)){ - QuickSlotButton.useTargeting(Dungeon.quickslot.getSlot(tome)); - } - } - } - }; - if (!info && !tome.canCast(cleric, spell)){ - spellBtn.enable(false); - } + IconButton spellBtn = new SpellButton(spell, tome, info); add(spellBtn); spellBtns.add(spellBtn); } - //TODO rows? - int left = 0; + //TODO rows? Maybe based on spell tiers? + int left = 2 + (WIDTH-spellBtns.size()*(BTN_SIZE+4))/2; for (IconButton btn : spellBtns){ - btn.setRect(left, msg.bottom()+4, 20, 20); + btn.setRect(left, msg.bottom()+4, BTN_SIZE, BTN_SIZE); left += btn.width()+4; } @@ -113,4 +99,54 @@ public class WndClericSpells extends Window { //TODO we probably want to offset this window for mobile so it appears closer to quickslots + public class SpellButton extends IconButton { + + ClericSpell spell; + HolyTome tome; + boolean info; + + NinePatch bg; + + public SpellButton(ClericSpell spell, HolyTome tome, boolean info){ + super(new HeroIcon(spell)); + + this.spell = spell; + this.tome = tome; + this.info = info; + + if (!info && !tome.canCast(Dungeon.hero, spell)){ + enable(false); + } + + bg = Chrome.get(Chrome.Type.TOAST); + addToBack(bg); + } + + @Override + protected void layout() { + super.layout(); + + if (bg != null) { + bg.size(width, height); + bg.x = x; + bg.y = y; + } + } + + @Override + protected void onClick() { + if (info){ + GameScene.show(new WndTitledMessage(new HeroIcon(spell), Messages.titleCase(spell.name()), spell.desc())); + } else { + hide(); + spell.use(tome, Dungeon.hero); + + //TODO, probably need targeting logic here + if (spell.useTargeting() && Dungeon.quickslot.contains(tome)){ + QuickSlotButton.useTargeting(Dungeon.quickslot.getSlot(tome)); + } + } + } + } + }