From f309f249e0daab6b89438d562ea66045e89193a6 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 25 Sep 2019 13:21:38 -0400 Subject: [PATCH] v0.7.5: added code for new Tengu abilities --- .../assets/custom_tiles/prison_exit_new.png | Bin 14164 -> 3103 bytes android/src/main/assets/items.png | Bin 19156 -> 19305 bytes .../actors/mobs/NewTengu.java | 492 +++++++++++++++++- .../shatteredpixeldungeon/effects/Speck.java | 2 +- .../effects/particles/SparkParticle.java | 22 +- .../levels/NewPrisonBossLevel.java | 4 +- .../sprites/ItemSpriteSheet.java | 6 + .../messages/actors/actors.properties | 12 + 8 files changed, 521 insertions(+), 17 deletions(-) diff --git a/android/src/main/assets/custom_tiles/prison_exit_new.png b/android/src/main/assets/custom_tiles/prison_exit_new.png index f7251f44b2206a75900d20a6bca0786ebe611e79..caa5f3c5d0707f53dcc3f5881ff9b142981c799e 100644 GIT binary patch literal 3103 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 X<7(fYS1;U1!)kus9ItC0QCWWgPPAHK literal 14164 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 diff --git a/android/src/main/assets/items.png b/android/src/main/assets/items.png index baf9248a04a22835f84274f445adaf0000b065f5..1b517df9e00384fe917d3116d15822f2dfcf8bb4 100644 GIT binary patch literal 19305 zcmbTdc|6qL_c(rM#xmAXDinrS3ng2U5Hr!fplpQ5X#gOSEEK?HB(G~v-thrAZgTX%ewQf7^b^@oLsPiaaspe_nuVM> z_G-BMM%!NI^hsx^ht3R_zAN^!+hB~9QDDt=GVbc*Lm0diJ%wLwQSx5=E(fvrBW8~E zchZMFTe#tZxz%L>e)Dx`iyjs76)RllvIT4}veNPj4kOB|qh&QwCAtKWPJGI5Bn}Gi zgnZdV`{!x&?oGQ1@(|t-1tVp%=KL;;-IpQ-JgFSLThH~xoI8j4&ew1FX91_2H0O(` z%W3K#1Zb&NIZ(92z8GBCo3i9(nIR~L=3ZPMadVR3Dcm7@GX3{xnQsLI>{p8(y09;$ zvC;onj^HCW@tKrq%+OCtK<3w4iGz+Y>|?(|LiQdXi==O<+Z#J{tgAptDka9o*NF_G(xFV=Z)%LRD)rV8FtW zfML5kDtnk@jGKiqUhe^^2LVSrr&U`P1m`Vz5;&(F%I?p+i2J7Sxnn>bmxD0I$jVaN z|C+iSraBzi(ty*xfBR?mu2}I(gR(+*@+I&3xVRAq(Z}H!^k>&|lOprzPs&OAZ$3?< z?%u3==M6TTq`<;~{@lOrR3-A(szk^2@=@Ps6s_D9`3=awIMc-u3*@Y(E+ zRci-fOneyB=g0-AmRM`=WeXBUC*+MTw(X&T)T~p8+`c-K zULhgZB}sgocy3Fna>5NN%D1WgFSB9Nc}oqbyeQ34d2Px;laHZ%d+I?R#HQE|y*&Xl zwL>ockbF{(4XDX5`pt^;+8$9h+9AI-fo^mYh!!u)%4^E*FRRxlPzK7m()SW`r~LE; zWhp5Ka;95jPr=viND+UtIDCQ0mRgY3?Yt39!+0j0kY@^uFvFfH-yag=HOuA<)F$6QFu1i7+|tE7Bm>({hab5yg4_5 zvvXu!E4l>(rGdO`C9roy6EM}ZfMUEnW4RY2jh?e4jKOlhTLJ{(29e(r`{LSl@Ie=C zz_ZWDR8e45N}(rI1TIx$zf{%1t6mb9R5#%Vygg}^e0iYd!&*<+Ly}qqoxSdm@>Bj4 z#WS~{ihb{^zl9edg2+&N!hW9sVIEb*N9BwMo}xG*f44<=k#&l85c3`*I!{Fw z!b~;fDngqOe6@J5?b1~NgLI!b<85U^*f?D(oV!{nUdxI(Vw7nRpx0aLWt7=A8e0AD z%j5d`wI%OtcaO+VH9xLsTc61JaoqUmgKTNe_dv%7f9XxZ_U+pB*F}f@JLSw@BQU}# z_fhA#z|U%WWaHhB-Zos_gk;xN_WmxtKJt6|uEmCpZD%kQceykptoIGn(!))WsMYe0 zt}`vG@2(Xg8y4KYwpFc;{P?%54NA@sFpms9-G1v!{e6%}dJ=OvPXl^`r>dLFtV~5m z3Ar?BCw#O|Oy1i&+=~OeGxKc*(oT-_=!DMyAjC6M+oYX>zgx_m|F3b|hH+~be$Z%o z|I(H%OE7SIjKVj7B_`ANd&Ah1z=x2KffYX7hr%y({CjD%b$ZYQaCqNjz)}ymeX2$j zN#Q>OQ+%?mOTbRQxc)s*eX$TFj5uhca4GqU!~>VbmC4Gri zN_}B4l|Pw=PkLGp)LA}X!;n>{K**ghD;j2(KD2!XkInp*zeY#%n5iS9KS1XgkJLL5 z0jS1t)0B`J|m}uFOYD%tTf&1GPW^dnpi(>t!be2@VcTX$NWQ@C{ z54=iVkNPW+i#^0m*oxJI+>gbSI5>D5mI4UXS-OOvnPPh|^wTpH)V#M)hJ*)_G@(^q zx)r{jK{hbL5U%}=FM1c~n;Ea$DDxT|c`DUik@KIl=c&|*>KG_>^aq4mkdvA%2ON6# zJyis^Z$qiSnt(}_4p5xU0U^~;#@A|j@H&hPJyQ&$UeN+>EKoWCqrQhq*2zg(!i*+W zy|S(66t^cY2SS4wn=jj+^unZKWxQnTx(A8e|7@>Ab9fNmF*m?+?-uXW+!^E^M-w9C z`F<|E)p67f5i9TS-^30DLzGqVB(hh1ufG$+0cKL>rn+|l)>)XKC_ULtH~yhlUU&Ak zVRP8Fu6+&Pix71$){eUeC{TH?{@D}!=*p`c`lH|9oJ|}adO#20!+vZ;chSxsZrF{B zEqLo_w(q-Fi;~yR!F*0V@8i|&A=i}-@G`wmy;uVtdnlhtMGr7hHM3Fui@N(f*ufj7 zHbhQkCSM{|C;&q#wSjnBB`1!cos)f|a%9JA@-Z0h#7RhQ!`54uow-S* zNQWPrZ?l7HL?4K_^!s{4ijGy{ZR;h1@eoJ6nw;hnJ(@kxyj3?BO0b>)6TK=onXTmk zmaZLuU{-tiwsnY%E%@;u^&UZP=c}LcznZX0C?vT&hvVmMm<=UxuUMWXZXi*^`qe>S zCMK;V_BceRqmC_(9ysi46xQ$(=(sCs?iLWVJoaI>csB@#kh&@^aCK;|r#*q%b+GMQ zxhOP-^eOD{2VI{8{004+AB#4915_8j|Lxu@RsddGg6#7%a|XGGOP@A(Z#BR8!Qea&yo*)4Fc# zJ~c`ibaoY8+Y0)o!mh{zY6t$_3(R<42MH+)4)U(c9|L<|T?bD~1sC&VQ^Z-#i4)iV znph*1gc`Z}`b6Jb@;P0V^Ao0IMz9g+T(xiU1u%kB>$d6JYQ~THn%%Wc3nA1w{8`^JYHUs%B1sd}; zfE4MHV?0rH;&~4B@3qk8=CCcZ5TC4$%a*bx3t#1Sg=g9JXD9<8WYF5vF9v^G%j?Hm z9#>aH3780o?W+ta^bRS;B?stiwXmj17(pZqw6)uMGW`ut@;vJmUpt7hi185WsIoL* zSjeJbu%(2E9RSofNU3-DKVA0*w-*gRJf@J>x~{D_7M`!Udw3o6IsmaZon-)lRw0Y7 zQA4Xy$uP752y%7gsdCfh!JBY!<|T}3qy=28p*o$4KqPzBYCTA@dgqa^DGO=^CgYn~ zdS6*`E-y-BSM2R3Oh3Nkt`zC!!U&wOzqzg?SZ8rmRyC%K3zt3@32+OI8tv8w{kolA_ZtuKBEXggSsyF4+^LyysD~0b!Q69B8eX^K zz(`qMW*d~C$34$Wm3<{Aq0VpR6%(=^Ja7SbF0ouzR2W2j>@m2_D=V-=F&^D%`ci@E z?%cif#j$o0P(vNS??nK|JAgAWU@REAK?-E{_;1z#CdTaV5+33R2l5W4vAl;cyT_m8?aEKM3H>Ksukvm&?N*e^HJ<1fg1d zKHt0Y?Ses2y)t2Wm>*G~0SY=CzlWX$6DovFaa*ed?9&)96^}Syu`|-Ae`X3YN>@x5 z_itB(%>4RU{|>zP~8cRCe(Sjw0HT8hRJH{kXXLyjS_G$mkPRivrtw4+3m!haY|@s$KdSDBVl!apv|= zMBc#l+(Ri3XsBBmyBRX2>mzIzB|V#5%=RgAUwFy+lqQsD!eX5@ItsB0 zc)hhL(mL;5P+PbZ-xa9>CHC;?`tJAPlc&#?`s}aquE*^SVzC@~qj#S$WRIJCd?z2j zMXEe22|)UExwCl|1#0^9E}zD5|W(?Zy2WVf$B>ivAltfn?jl&)h?@NnDR9$3P38VJ;UP{6AWHa5lmw2xA8aVDM zvoAvq?`#7Ih>HS`WfhNk~AQBio~!5!of6kBC|8(8E&c z-;HetcD7;wM4Yb2M7Dd9(0Bk2A&&Q;0G8{o>dIs=pFy9DF2tf z{D1JOan-$n*yrA2y28hNkKxg7&ET^ZaOK`CQalhZ=A$0*wX2+W#6qBP9T~D;o^G!_ zmRUCec~sLfm`xUm#z}Z@6Z*7BC9{?(^qJ}GydN@*g30jmbIhGC1C>~Z2$k^pX4I}G z`eRnc@LesDM48*Y9t@JkM#86sPMnUXmd>wEWHn(I!tO=z1~!7H^VQbUC|sp-TQzYx z%OG&A!?`r#`=&;TuoE16NKM&5lRt0Li0?PrB@ywag1q?-LUS+zz>%6-Qm!eE54f8U z#J>c2nGBlbp6F~?vc_kzae;vfh&2*4GRYH`<~*;U!=QUBFAkN8Qo!}9T1lg>rb8b? z?j!IxSZAR8vn0xE7CABZ3s6^AS4pC(C!;zK@n$+NQi&^hN*2FIMv9pA-tfe#`>5GY_x!UFE0^I%m_lEAtpoe z_&P)J-f1PYV{-?+>M)!tXdci2VI2c+)(HA8p|)8U@dh-Y*E37Und5wf4P+t27#Kvf8vhT9=N&Oq-Vb!45t!g_@M5gq!Tb0Z8ug5JdY@8B> ziJ0>F|@#DS5Tr&Gl~XG7cK=NFauZK{}l_hf>csB?$FN(w6_>f9-~y}@v8 z$!7Ql-sECfKC`3xSZRMv?dMeY{@3Meo|s=d9^@#nQO28S+aCoVI7p-5Z`LQg$<5;V zYqD($mD>6pgL}_zz*LfV*4#iw3)*7j^4bZg&h0#V@hX(%jVA8_2RY5aXLhhU@ zrQ5U88#EBrG3yxwhxM`4VB~d)LqfV@=(wO;u|NH!cj2f;( zC>Br8hK~2tei9syd}RHK{Q-0u@?KN%qVJp5;QC|oiC^?0&mOPY3!sAOL}c3cYv6C@ zI7NQ5)VFYcS}|&hQkHz7TmZ?1MSblm9CbfN#dCW?S10pF;@n$1UqYyErDdD}Pvk8B zi!8&qfVlE~h6Vu~3hukZuJB>y(1m{0Bna9MZ+De|lrIWg2R4d=6bQA!o}P?CMr-IB z&H~rLOGdF0=XY{HT%AE{-3e^J&sa3#e?K^UsGeekAncX00(e50gH^prcbk=gbFkJhKjDy1(wlAjRXhmCAPL zLITn#fnldAG$W%kHTJE}a2r2%~*kNTG9Lz5JS5HtrT1Qw5BLrJ9TcezMBCo+OG$O#pyD`iIgwshR z_j@K7tQ^moFDzD^o})FX1dJ|N&s4p4^4C~qF$@T#^YCzAFoB2X*->K)h^(JIFsAI- zE%J2YBcwn7dK1DA7cQAU7%s~>Rs6Fw;yaJ@>WPhU?)q?exV4}L;sZYej+En^a_^G1 zE8&~xP*l2qGiBY*H!3DvkEMaYi0)ffdOmFKL`~4FsFmYM->E7{(T2b3m6Cm3)s7dd zZTozVHvQLv(PZ;u6S#)woL|!Y zYrIn3yGON@X5lvRIXiZ@z!HhR_-P%K6B{lx?mHE<@3x<)af`s^R~{dp#^t8Ci0vcT#iJM&V8;5;T5>I<)F5(54(@VdA(>^?#eXA7*Y5`Y@e@w zS`~6jM{P+pV>7;;u+aWlIT}Yi{eXB&9hEzyUpK;0}YrI!7H-4B1mv#d78X| z13ThITjQ}8+*2xxkG+&pFBvpl@c4v^3RW6FZ_OvQeijV4%n>6GQYG@AgM@e}Cg*TQa4+R~K;7A`VH*%EYt^$R$bmn;z9w8k>&W92lc`G)FJ0#cW zlTPB)lVyq*W zs4ci^bK8!o!!T;kU3qc2_<%3`&NcydZ>PLq z5*+C*D|z<@9Hg?)91v0r*S#-|@`zSK4eb!jRmAe%$brYyk-76~v1-(w`gs+CXFTfr zM?|=7-O_3y6pd286XzFJ-^`x6l)NIlDEG>J`u%(P__12yq+7!R$9+AJ(&l#+^>9l{ z(wjRjCV{~dV8Rr?+>AL10yyu_vZu~l3YM&AcQO14;pN&PECa~uq1;Q*+@rN#=Uy&} zr$cGI)>I?$S|ryQG? zK_9T_mby2d;iaFnwrP}y-NM73eo!U=UhzTnCp+WEo)RoB}FAc?3AyWqpsuca<@zW&Pd|u=w zahi*^xbtG|1>ncGUdssU*JK>ba~t))DK6fqOGRp5E=P(;x=Ycl8D9-6zK_Gj&ux|G zZJus|CZROE=lIh0w^ToEjGg&#J?zC1#y)$9o9=xjlymetG301xXTZWGowfz2)n-BC zQspaSy&pFM6e)pDoJ9SL=kV`|aPe}_-UW;(picA=BL*QlOqBy9po^i>O4b^PYLl=VTrd)Kek zMQ7D=3XDx&<}`P%26E)^?HzZs82(BzkVh(a&aH)h`&<0-N$dS7>7)bjfMlEHL1z_c zsSHxvBIs#puL{)Z5c~iq)tQza|AH3y%2u6ODU063Xx-JC`=AJNLD|GiFvUH-@32X^ zD4El2NiqL)@%TwN1d^+B#bJk(3+SV~Xi{-9#QKsieo5bc9pqN*1_3gV#{9DbDJrGS zj&EB4>cXU`d4==FpL z{R88z&d|(Np+5`8JCZO4D!AsYnlYfCY4Jt5!S)`{rn4BIVTk{ZNV`OJ)WCupy#5(S zHVFyNN^A|e@;td~hmKzjvQ%Yc?RSCPcXFp9&l_-NTJvy!*{X@YZfsuIgas=cXUzrw z`pB)2Ty2ZZQUU8hGN+@zy!tp|D<@KDp*w@|D%2s&Gb_F2I_2efZ>*Syv##uzfLx&8 z%YmTQPv`?hr2Fy0jS+4ZAQS z{ArJtC7jj~h&-|9)b^wpK$ZZ*&qWT;1uw}`A;SRAzNzbUV=KCu?V-D_{EZUAUaf(j zSh37>|Dgw+xja43DUD>-x;83P#M*UjJqC9Vo_$&rn%XY_GI+4sA!el zmUEVC|1Qi;*hD|-CcKVOZ!Z*oyMLjlEde=Jj|+47RM1-d<}7!4ftE9{AlCOXdQ?;|g-YQK(L z$!2rC**jwAqMV7en7CkCt=-jzs8~q-Fe|2R_#%ZQ>Dr*iI=70$Njl^dN3J~cmSFi~ z+m@H{?=~2v+HBz{gO_RG5XJV*uGrM6$ z>D0n2V0C3G|KK-IANlbh!Kup^dNYOKA|8*TTWnIn#eEzJC7IdRX;sr4SF7S2Dl&HD$SrRAEZV#hEaqngt2)dQ;E*d#dJx%@gG9bGI z&uY8~Ma>11+iKYj24o?_P<dmtf` z>ZsP_2;=pgNd-rQEt*VmXSBtKC6$Tm(n^-=WC;@?eGxSuAi27&u~)T}H=^x^r(I~x z;@DQ;8HF}FGq%qYUt}P!0(F?UoC2`}K~l;Py~W+lKo^uXOb=Y$Y;RsY{tx9Iv-RCh zbwS9BHcv>1YRE>m*7)1IE!gh#M#>kF^JPT5X|75t@Q6xikGQ(BUZ7io3i`Dga9z$? zvCootEg^0r7hD?J?cQEDaiy9+TWh{JU)>SsP-Vky{s+{5D%h}&0J|~6)I-7qpC748 z^4An$aMaV)J)WA-xHvoBTWyHb?sf2_r=148>f)UMpz@4E*FkLz5D@A&;A2c^!d`WR z^ua}!TE8FU;K$l5GJ9DI5G*{mRp>GI7`aXG7`b=+>8sXug4R7I{n8tov!tuS2)NHN z-eq%50yKA9pCVAA3_BuWU>R^!;EKSoC|E|S2j(OZS&bpUCP6j-TrMjOlA8)ncFR(g zCnk^k$C)Y<(xE=Gi;H^OND1Ibild^1N3>BOXVW4SS_~s>Tm16Y?kt?A;xm0j7BEw@ z6OJ?zuS@JkL3ML254F*D1-j_xk91WAuq%qx)}U>>zkf@0h7jVyfqrt7J_xJsr;z+` zNHOuG^mex{h)L=44QQL$i0{|73Rdy=-Bg4v&*u<=YAYo<6go%n#}R}fd=B^!YGwn% zmwj_4oH?r4tNEK`K!?ECvqG_@Zjt+vjOHChtHE??WvOnY_6Z2%12P6=C_|$Daza4b zZEY+;q~9zmgw1CQOPPUh}x^TkqeR z1{~{-p5F<2IiFU6SGb^lSM)E-A6JC)qisYD4UPVnJ*%}2;-tFpkByRA#&`2c60g#* zUNq8jSGB4~VspK0e&EpRflI|hr{f4nk3Ehh*wu%RM4|^r$0fFMD1l>t`pxI` z#FlJt(A2S7HdWEBDjGO&VIWiDiPpv*DS{BTGsM5`eL|><>Pg6-zNuPUu0{b?s~ZauW$X^|xhy<|e`^ZPPMM=ciYb;7Y>hITRASGT2b?;t0uzl~Q8=5efH$cS5s>fwHiK~5Ox}YvqP~Ad zr4_HnLxvb1*#jP8d>%!NQ^K22^{&Ge@h`SLTKzAx$17LfIPKrTE8gcoLb~1}GxLpY zO%!kyf)E88*@R%6aG8$B_e*T-7n_wVwg_IWdhwzKlbqu;R;#+Iq4=wr-iKn_q3|}b zLdB|KH%#ztw&wVr9E%PwM;?puSz^-!f;{8KN#G;=`6hVt`=3wxD6TwYVKa(?Q(W*& z7Aue%4z(-hH~t9Xv6>LKrx3W(a={yNLygbRW5O7=@MzC_$|%Xx+Vl!n3-{&6e5H#c z$D(fT(7E7b68EQTGvyy;u|3x>N?#3Uy>Epxl9>!a+2v-e#w`!IHwTOOsT9%iEQ^KA z9|t+a`XKyq4(k#9j3b9evZ-C=6v&8PM({GbnV5%ic-b1^%Fv}7e2e}Is-FdX>kxqk zcV+$&i9r+##=|^C4vmyLW$}+y)1BuU8UAfVno<6!tRP^;8c-?)T1hC%s2*>mqyc*{ zSv+JVXk)dO#!4rVhH%|u;rz3x8;s>3Jg&`=BcAv6p>!F#)a>IPTdS-PY~GK#lQeK_!aLk|MQ>YoXIpW`QT zV_A+#GX8weVm(1|FVU4(kUK5W8Mrq89Y4bU5?xQT7M!MaZVVh7S~xebjVz+jpSof; zO|`wDhsC-HKj9zLjiYdf+=P3~KNpGx+r>|ompe9nDWrr&?R}%|zI&Qm0yvYU^H;{$ z7+5T}sv^Exo6*%AiFnKk1SI9SB`m>_c4bWR?1&EkAQAwQD2nn2WaNtdpIT&trwL8c zk>i~Im<6%5QJ?NWa3+0IZnoXe3FazLQ%yU#DOduc(gVR^x=A1guh=vOzt?6o7x%(q zt9t%lP1rbi$Qv#|R&>|$etk9@8O0ATowCBNiK!lz=uzu=zf8?di4l+4Oe}dBn~7^& zRQNgYhan{@k=Z^*exAX!n0kpGCHU)y7rpjRgVBz4(FY~4Co6NZ=B=$bj6R8lQobMB zBzH~X^}}DdJ9m1l8?t6exGiXF%xrlz)jGI7Z$jeaSRi?}3iQj@s*-|VcKg2yRBY<=$HEXQ8xJ=(}GZI>6%(D}oalL;!1 zPi1?hsRz{;R~#Pl?ENO(1!eqt@wGD0dFTw%2iH*Eg(@6ql=$uO&?iCLr2eLgIa4F2 zgQC!;0t4Z}lWxU5QVaR`X=4p&GDnqH${K_E!V3@{sZ_-# zrPh$JO|NbVPZW#a=R01Jrj``x#dhU88iy@bJ8yisTIP1PzEiKbZim-tGSfY18`#PC z*8?TdNvrDTg+hz?VPWTN3 zZ0}kBTT3HElu=*)8mhhOHu#jRo5#z}*R8g9r_|zNJ@?zh(+=4z9hIRTGbrAD!V}71 zSK5^Of}*!mR>_A>o|5=oBjCH`3F^47Wj*;3@Ck{JA1wUb0j?Z`l(yaoJVqZwZlK-+ zovdH2LF>R}e<`YQ=CKz5FeZB&d{8~_x{{LbHEst12gwKm@qU>0SWT+roSUs*_U;XM zt9_q^Eefp3*-!N->Ee0_H{yP-1t!#%&@4IeJx_Kn^TSx;K?3lwsoXYV7isJ9}^I6 zQ{gtiA5N{|2P=UYc5wr?`Pyqk4Ss$KWWOxHLX*4_>6Do$0`c-?Pl?#Tm6tb3vtl|5K&KB=I5{0Mrn>p+IkglfOK*FPe+LcI)EL@xR_=xmT7q>18);- zdew98tgyPa2ZVNUlf?5jfuRGZ%&Y5q!|PKzp_p-&oFy~g5R%(Ce51<-g4<^pt_jRU zc{050Dadry$Efd++}4%d%<<0@iES^pOA*AaEuE4qMdRufrr4m7$s1y=0wc( zA#DIUX9}WOE5sY&r6h{=++IaO%xv{xS#)eM zrPB&LNk(xYM4nuXsTXfb-OdT6zYaUIB$})m4se{Zo*!|uPvV`caWiPk1OHhKL4Gc|g z#sLyX68VK!H9_EZ@OPlGiik4q@2z`|(aI!e`XsgorcRjIyIdx#(uf$RE97E<6!KmSa2-^jf-~=a&;7$*T^wrq87o=iuZ@Lw zdR;*iEW~H4D}rY#YVG!Nj3O3ft5`S_B~iL#s~?V5Nh@r4z5F7Ldkawa6~l6mnMaQ} zVv)6G4f0QowE(+*nRQxC7OgFCF)Owy8cU;n?=l>p=y|c87znvx#(fPF^kNGYZJ#Em zzICkZT{ciFVqKOd3_Ue~69n1uc19BSS`mGvqfWKBiyO~r<%b0jEC;=S}(?^)G?Y3&j+S*v%6B~^DM0f1F zXioXa`rDmd$|Fi@A6XGIlW7)d3y2{P2i}L(CaY`p9RZTq(#d_yScCWFsp!_<9L)6= z$n(ad(=cfziZalG9t3Mcc;&E2MgunPGN5)%E$AKGPvs8oDILHL?kNOxtDs#wA7NdO zSL#W589`4vT4EzT&U4x-0y*TpOx4nmO|{Xs3YX$EU^PHNYF6#K~1 z2KnC01xB_EB8g@^&+-neabpJ#NtoNm_g??MS9;&rGcga16=`H={{3U+-Rg{0b^5Z?1#!R|o zjOs3VnU!f#%w;-!t7==nF5(B?&lVQoCl|#H8i5z@uDbVdza6`BclVRotOth-R;PHA zaITUxUKNwm#@` zk8x5+Dn#)C9%hn%U!6*&9j2%}|0m=jg18c$MHiCwsmYxyt86v9^zXOOgPW-l4e(Gq zcr*qjw1Y3tA)DDK>6?x+f7?&o>o|%O+TDD2ONN)aJz2#LuAB5feTeGavIX;PbiP0l z&C}a9yQ_>cyJJwMQtJXmFu(j4%HYv@8JqC$=^_1DF+LJoL)E;s+JGZ&Z?9{W66vbK zpRQ#bW9v)DU}dtU({1BFnB_Iv;6+t-Yk1m<|B59&yQB)< zr5neU`A2xaV;jK7PDCsuWd9zx&oe{)9xA<#8XJ`#BO0dd z11loj45T!PvsdTDauLXO{_D3QDt`_3inv&&9H@(4c~Vm#RH32=B&6SW+Me(Pg~R+( z5;(!|h({R2GAQ&E7Dm;^?~@9skv^dEghEJ+gj02t=S`z1-lz>7i-wf3t&C=(A?k2I zfI{wy{NS<$gdYd*bi<1?F^FSS_NsOLgnq$O@SbW+5!kdnR1n{OGT)UM`)Td(4L+Ox zun#u40k0#^NNF>g*)iDi?8tYhg!8x8T8;mroC7J$Az6gwm|0dgni+nxCQ$N!I{~) zc{LjYAXCYd|FrhC7P{~r#j1CXpAq6DPiU)+CS)7q^=TcW4lj4&Q{@@#l0oXdLDsjF zxw6*Lda&ru-rOn~&E3Xa@YMK_z-DG)xj_?!v`(h5RDZctozOhZXcL{0vdw|Hb zXU@H~Mr2Q4#yU6-Eac;s`!nlwL`1D>ACGZIcAhl_(iF}fH^w>x7bMilU-Z;CVL+ei z>d02eH5b|LM4dXF1$l@OZQvcW4D8)``~ij_VI36Z1gT>x1yB4tFS-VF z*GBGINOnm|B{E7fR|;`*2PCueXU83wG?!#Y-FcDpxX2fRgmei?{;ekVN7iU2pHIV52bOT!&v13y+OkOEf#39c*3}o<0JV`RthdHkSFsafi~(ChYWynWhK{V=v)h$50*dhQL;% zLW88Zg(A4NWRbhDPj-#1#vK*X9m&{q`p8#Ba4}QQ`HL~WO?X${=NFfizLc@w2vlYn6{T(<2}=U3Ui=E z>B+KkB51iFuD!h`@!s|p-9FP-#*|-Y61V+Lw)@i~xNK4}@m?QpGyKM#&!Uxu@lA{O zBI{rYT7K{F<3o`a6Jal2s7$MO(I|lpew`>WH%vm#;_@zQ)`_dGC3Bg3?n^seS_gh_ zPlUpS`yol9TyP%m1m2?b34O?Q=xKz!&XTOO3O^BgQ_}oFR0VQ}*HLRCPo#gm2lD{7 z0`C&3hZQ1+JbEg9`y!uXos2``@;lkh>~*Vgyk~Y41jTt`nHecBv=#g>pqTIUGHBnG z=liPFzd)TJuYn6lEjBy#b0ZD0q)W9&*mR!?QoG_Kl(4kS0zwnITn^UaI6}@#W_OeD zTUqnF>ym#pCN`DZ!A+^DPzjU=C4~NR%pyB?>dyop`nMFBEsQLbEc|DDWw)xVCa#rmSWd#>f1BHl-!-hAR?CqP z(dKwS;|OkLU{vkD&dyUA%S-!`naq2XG@cf6E`h zc+3Z8s++xvs1uolT9joXg!_5+`2Wx1k}Q)be14#_BSz>jc1Zv7vci5Oz1+mY?kG+w zZh9oSdd;!<%@ZGa_au#yDKOt>7f9=+Sg0}ub#^X zv$HqlZ9yg6V}q)HQ6RN7O#g%R>ea6T_($BSUDMvTX3p-KcKD1-8QR|8QEI)FuW=*) z0;+j7ecHe8*+ZdXt@AsQZ{)Ehv;Qa1>Or{`hI0W9De$5oa3yqE6pfuoVl6jzaQTe! z)i_R=(3V&I-^~<1j&5EW>USpQe^bfQ9g3F~>O~&-q2MAu-7UBbGr^^;vT%Mw;tFiG z(2h*$#Vl`Pi7IFMwT7Si)X53CqOcZ!r6&;sq4GBzQbo7#87S7U2V5Z5`S#+$ z>M*6Bm-C1 z1)uN--@e^1cB*UCr(Rx-c`w?4#AfgRxSsveXFR-4M6!G@>S(xD{jDMH7y(b&OT$zu z2)`v>8gT6B>#jQ;*+{dUTstsP*joQk=>I5r{|KhA@W@if6Z5v*N{VpCwYc4Qa6X2? z58Sw@h8n0U{5^{DrwOmM8}SFm{Nv`M<+m?ytDPNE5f8oYmquUN4D&CX3$PSzg}Qkn%KAOB_6{wdcD3sR7iL zfuCar7UUVq%5cn#kQcMLUAYp9?Gg2BI!43OZERRZm>;bCq zD6!w8J6&{7FP<(2dYi~kj!-a3bcmI^bN6oXFuRFu5C7Qq&h%m?RNq}{vXASWiPsQKLkWdU_F)M6Srh3raLMQ7uLC{X1zo2=No?pc^bbuL zQ-5f3dH07VC;L-C#eP=7MbykYT&qb?6W%)EN?U2GC*B?1018J{SJs4MfFIKM zp%7kUOgJCgdI6O%tH5a9yty59V5>?BN*{t0Rj7f{M8}u^%46J$YxhlWN{XV*pBfFU z4CxrxY*EqnARZRJ&4;Cc_J=-ln$1gH=0iVm|D;+d2lt(@q(+$V0+ZoJgm5c0wAC{O z^lNZn*qcCK9ha~tLb#JqBN}TJJvXi;&SevyFIPc7wX8?)DFN@UOY6u4u+~sk^cSz8 z<2E@NINI9jr#l#*#%sJ@?x6Jh>8tke&rg5f^|i`yay(y0UL1^HDvchkdpwS;D&9}p zcO?eiRnN)nE*_y*>g7Z=6*gUrX!HL_5xucoS+T$>4)ZOR<380Cv@e{w&RQcg+CbiQ z*(71IM*2f*&go&4XpR`zkt(`%ORiQd;zy%aw!UW6a@cic!lgjc$BARPwMgG{HC@^2 z-X|8=7f|)yqK_9pwOigmC7R5LTdsvxFcbyzEbTIS$*Sj_5~(AJt({wWM6a4MHF6tP z8!k4>)N%2l};kVp5`4>>`ERPZ47gt zh~rqgaT70+X4Ju#)cR(69*OC=9Z=rStg9)kxfcJYIijtQ5-RP&H{}sbczGq5)smj% zfBw<73Tm(k5yZyul2(?w%q)E6(9B+S-@_c!8F9NDZnRojx&@3&XV|{RB5fB34S1_G zinfjH%#_*0;JmCfwR7Y8WF&KTnm8)7js4!Mwz-~~IxH)y>=10*35Fxv{RoBo_vflM zbqqx8AUs^1oXqa)$`87_?6`qCgna6caC}5{PQ#<3zqIH>C>EW!e%y|MZO?iAX>b_S zD+aqcX@q}4$`3}5KWpJPc|%<4F^!x^xRvp3d7lex!-vfn2ZznnVfsHneJABT*VFF~ zUBf2TJAo6XhEha@e|+YcO~TLm5v*n)2bigQXYBtjMdALhM$Z19>4lBs->rF=tu_iN z&OEd{R48?hJj|M;bUfUtsmPS{aKgxqvIk>^yAJA1=5_AwX6jHnn({g*W7=XxsDmi6 z5mtHFn3(x)yVrkk{(|e5>-BkE*XR1YuZ51K|EhkhuMQu6k?ft-z%$iR7oJd3M}n<} zn3C>z_!e?^lEn<94!F$hl^mYmbp<4TBtMA6#J3i@nE(44Pf>*t%ok0qK{}L2aFl^f zNxw<24^jd|FH)}VOc8WD_v|fm!+TWO=vbfSkeh^MT)_ZI}9no6>7G(j74$7jC? zXNR6Hy*#9vt-4%%Ds3XMSs_-W-aPry&>)RcgYjXB4^bqh4fy2uCzwW5P@C{pla5 z5YNR2B@ic!Njo&|h7aq0)~Nx?3dC#X$(r*+mc7%>t6|18q0JIgTiu}uFOG6QU_hF} zb+j&d<{tr>U8t)et;C~$z1d4Ve7i(S)}DZtnpL2%jFe0`Zh~lx89(lEkK2cQ_e-v% z){wrkz&Ay0rpK79tPHw4WMXii=@Z{ZyJ~$!{uym&mCmd#G!-m5(&jzYpj+Dr-aC8I zYbF-iD%JEUa(ip_yR8{6uErzVyz|}e+AqH$5t#>fsv~+1?MFU~+^wI&PF!p2>gBd> zTUT!8n_J@8Gy^2An1gZ;Zht}~R@R^^Y5?yoMrY|}mnXn?TwUBWD%7bG*-y$&BcrCI zg1k+yh5PTXpCk-i=nD6-CdQn3A-u#_qV~AGiRq+Hl2<4J`gLEighGQpCg-7_mkB3L z9j^S&7kT83)}zPU=V{bw)#enf8dkZ_p5jU3$%geh_TF@@?J8gQm5(&=de!#g1QIxI zJxy(4-`OrTV&m>pW1A8kIyRlIGh1{X(MgOF)?>P}gK6V;6gH(_n7`K4gY*S9oU#zx zlWD<|@zvT$yY}I9g#Ozg36;PvY)$-{ulMhL*kdKwM0G=cSM#_qatufi>Z!4L!_hvHz7b_jU}hJW31w>%wnTMe3NO zsjiZg3b|S56H= z89oI8?hJOgrf|id;l-H?CUu!(ClGBUxmfxIM^!(bl$)}ID&4ITFVMDr^u@whHeBLP zf#ATSA#kVWlIhQ!V@-pv2!fdCGY-a(C}?@lj>ob-MuTHs>z?3nDzO4hFmn9IwlwDwdigI6?01axpo0l;B0W=!iP(InsF95w|VA$0l7MHWnr=xpAHSGO`C5wwp0wS zKRKH{pyiVj&wlE1e_ZfLM+k$LN|Kwa2HbN(l)ONzqTfT}F8mAfk^Zgmp;6rT)LR&& z)UH8Id`;VvYw#cA)xjQiry)b>)jwDm-!!WG+KKAlkz>KjJOW2rR-T2c1A%-@=lcOU z5##nudw^7+{G>=QX+ap>I0BudliiShny1X^QapTC82TUCu;rlN1B;De8|YyaY$+f% ztn%sl)b91?9MuELNLOsc6Bx1fWI}wk;_oIHzQE#w2ccQdHAHSCJ45Z#KR>e`-csH= zSr*;F6f+);RX;P@h-D~A&w72)R9k4jTTU>BR$8#8C`1NEK6)G5mcoOo*|V{!*YrDl zW2O-HA2h?^nUcr2Dp%0X_=-GfG#45NuRuQuk+E>LO-W}6SkIUXDA{=0Pa4OLno6j0 zOk#+GwM*YR1N-2zR!zEh+cNAZRLoijsT+`=#)m;XKbr=0+y{0o!8BRkb)rADSo_7T z_IV}R8iJCSoP#LV`qE)Tb+8&a{01n7Sa29P8?>fKH*nQ_##5aN$-_q6GPJkY;JKYE z1A>HTH&hwkg|uY_+t!kEZ*`$yjbA+4sUQ8#_C=sY0>ZvTDs#8yDj zj{1not#f`k-rznsK6LJ`1^uAu+k!J+^t46bAD>!un3NNuCn}d&mEnaJa40Bj|06#J@eN^03iG(6o?4%FJ8&TYyi%soc-&>r9j9+vhaQLLlWkp4Wm4Rh31{-n18!i z^p6o{GdppWv$^4>q z3&I&|&4X*aGUGj!0wQ)O0og>H(v??I`Gb{F;u0CKb;O{m8TPfA>q-wQR3t-6p;U@) zCiQ&v1J2xKGM#{j2JJ|Ut?vDFm$xh!V)gP}+MzLG6K|LNJ>8=aqKUrl7g;MTAE|1_19-#?c)SVXqwy3 zOLX}k!QPW+-ZHLUq)a?`ctL$=VEmts=@n_QU+W6h|FBC)?$Z^2ZymD3*6P^drrVyK z^mDw{WsO;hrA_C}|5Ii@qNHA$U-Ep-u4~gc%w7~1*(yB>$$)a&e^3RiB)?n6r|A?5 zpRn|0M(L0uUqymJnZV6bb^`L(c@b%@hD<<*@iBpu-G^BP+%xOcq*Miv84EFE;wyPy zIt5Qi%TAyuT$v+s0%0Apaub@XrDBjgvtGBWZ=~hVhV_;Ro0W7!7cA}4)SBEoNEcsA zhg8p#1(}+iX~~8Nfv)v`05{$*o5)fB$`||)op2H3G6#ey-4;LMC5C7mIv@N zk36Z?DTt_!maT~Nfsw1Ra6rtT@IDU6Q+_~@egw!ve>TzbunDa#TS1ujUM$cW1@g%7 z%T6Z`JSItl8}G>3jkU4J9#B}yy_ERqce4cW-g3MH$;c~!-p=aA>?+(YC|~I5moj$| zF?vlf5`+_bH_gM;h^q7flH1?%4@ME!VvK^dosv#|Ezjr8?wbn7(VOCfgdh{%AIGP~ ze7;wr%8`B>ttwZ!XNgM**iGH)@oC?OZyrCoRo5}?TjijW@UKgLQJ!?bhqcUIb~cFS zGKQ}qrw7T--BEQ7(Cq1M`+alMMZ|+Dt=o)%Ykt%0Wda2xKc1pbB7mw`ysBuct)c6veZz+bTFRHp zrzjq`Z19D1LjL71*NVJyu`_J#!>xm}!wY*9I<6u{nm4Dtk&)=Rxw*^|x7-*n259Y& z6%rCUJR~eEd@6Xn7X1O@!zwa%D7FxNrL$c}q1kcN@}! zne>0pAYjAYDwCLhv5|VtPFq^jhZSwiand;!|7n7&!az;e z?*WkJ`ceVi4_wzlv7)5SJUgV#dT?wX-cTDVf>=ihJu45L-Q|P-CkW?NlrKCa6eACQ z@&Efrn3*D<2!C+fHS|`B6t4Cm*p~x*SZ%12-A>@;L%o?Q_(q>5PsA`7qBqcxNI}xi zK!}I5DD2J6m5vXPLZ6Ao&Qt;=J$R+#JLsKZ;s-_^0%DKD+Y3khIM#lqc`&n-N$hp+ zK}bf|GAgek7}(^S!B!F(?D-&}6P?vg!XPZ_MSKSoM{E-0Kf-{^oMbf16MWJKAU<2q zauQuRor#0|XLi;vt=E+!`h*^ zF-&*P4Kowa{|xCxJ!|I0;D4!SiBCOu0G$LeV6|p4dLHT~<2LTUr>>!<2ATH%%pyVAzPctBzN1?#B0}_A~*ui1LjVta2%PbXaSR1{vu%P0fbejh97oLbt z`S(%6C#Qy_DDU^T7dK>~AH?Rfe&7(cwqVx!?9E^2O(!V&nsb>J-d@#QaV$eW zqPD+_9zi4h1vPtOc8Eg=nR$_fCtyMiwnMc*Ww;dXSEQK~=43%a2VYbNBg|TbaSe+$ z;JtYO4JLE-eA%(DPu9dR<4&dNbXTW?DNx+nT|+HQS~AgZSRM=|AYz+CE`rwBq-m5c zPcgA0)mjSIN-=yKi6}IWk$O6nP{8bhON(d;NI+}`rB&(v-+hnd5gfj&udE`gqzfBR z{USFHQGe|MiFbKZneb!EAi{BQ<9o#{PMx^ftz(I_%zo=0EftbNCo^YHi=KLK?;L{nizf&!2SqWrhUrX5z?yVUf z69i;R%;YSkYPrjm0WsT#NqyW7T8<(B-g!B-w=NvpGjU?+k#DcMhzM5P!`v-AI><;C zss=Zmk>y+v1lO^xMiMSSdcIbaofU(uelFZIl${14E@MlDGkRdNL5~X>ackcJ&Tw6m zvlC}9)AEiH56FoK+wP|LLFq|uLyCL*1B-mGJ6nsUI58NG+$RAZTbE=LM@0Sqwsy&l zAd<`v+z>ql|I09Q{fZgOMgcz9su5wE0$nl=c$P+ZI%4T!WT zr22C#Zlr*BXo6d9L0l{<={e2(Y$n6)@4!W%*0iKyxQ;AYfFmh@Q|@}R4~@X#*)7oao4oKr)~kWj9q{uc(3{Z5P3Krly=-ZYI3Wy3VnU-Mu%yb){ZN=mG&a0 zAFq~^@P`C00cng?QT>V^_#zvV#6D&pW7E492{K}#I4db&WD0UAATW>6%K}f+{+bDf z*;WsO)}wUY-I=<6TrFY;q3Yz4(=xj9i<+5<09gx0)+eB^{(1V$*5#f29niZ-ktXK} z6aI0svCXKqs);pcwY-#ja2}7 zt3U*+4RKk7>7cF3Q#6Fhr#VHZvpWgqsr~eK{cBOH=@q# z4G@1YIHSL!o92y$n>_(Qn8V^PehDB+Fa`6U&8T`$6OvB4dM`9k*O7odk(I zPLFPuJ9t-zeIB0$$v6pA=F}U$w|qc>enIcA18zK__;2}}IWo>dV(zwYq06>p22Ee8lYioUJoyauJsTGQ>N%Id~x=9 z`grqh|LF8*uSr zsCgu!>AB>sM)H-jYln07#{jv(&X%zxh(P*RTR~by$c#Y*+TU&#Wa#gBzTVW z(?M;ftD4PjIA~1S3Epfrj`%S@<0hvWEh?aM!fcokql1FsOhIB(m^;jD4d{7k0ea9f za~Os*R4Nnz9|r)KQovYklUfdvgM5sInHiG~`=r&Irt2MPDwyx0=L8+$d_iu*Ah8CI zyc$WD;DGGOa4@^JRonMiI!IYyXrPm-8~Q7PzycY05TEAMtfy*J z^Sh=A9Z;az*~x!aBmTNI)0TRSvrchNgXu{?P8$ikhynvRK?CfjfaJVEy1pa4^%y60 zw~`6?(M?RY{(aj%5*S<)QY6oP32X(9N}U0hT8x)D|B5Id+&j6Q8{K%+rm9KTnyc}IZ=GTTVxG@}c3v_GDg zDBkWW#;vcf{|Lpg`)bp^2bmt_Fep6kisa8w7ZtQ#v?J`mIffFIcz%X9nQt&EHShtkJ_?)zUMg z=~4NQodv-}MMdS`xbMQ=lH9pi`*6g4f)eIxc+a$z0I{%`x8cXMe~e#?uxfyhyoa0y zmjKpAC4nCGJ%Uh3EqI*K4rUh@Wh00NPf)$?%*9@fCVUt6x6E*9Xv>Y;p!!-!)*~^@ zbNU8tYZpK~{Ams%iGiLhMn?ZGZXg(nY3c|5Wg&LK!&|6zr(FfD4jtB}9yCSuOkO&J&D5OqMsBjl@a-;Ll z2ZcI6fPVq=cMh+D<^WP_7o9yII8`uvDt~@YMx=9@ki*hp=41h?VV4KJ_&xQF)H?W=%i z)(Zd4E12IDzx<%?2I+fK7t767@3Z=!fR+bvadywUiB$5c{K>xsE78_vJIQkhlQ=Rbur zC1`{twpHat6|VH-&Q!y`AjN5KleNg;wO@5pah~h%?s5B!s3paF_XU~N`FdGB?xhK8WNaOC8$e_p7?7r26da!=T=Z0=o3g82$R zQqFDh8GATbbpLB8828kkz%G9=jhw)%b?78%SvwTwm=xdkP=@Ygn*WIls|C2d2RLxk z)z?1CCklzyRJK((YD=r(E@I>&citMg%PXQgy=HGkf{98LN&NCZ3Z6dHbX-M&meR9L#K3P**fFR3!IA}|Yibv21A!|NV zLNS%sf2yX<^+iA%nLtZjobLAawikGWJ4i3lwi6&Yd0}(;}m2y=7e$+rm&g7F!OXu4DKHSN4bi z{y`MtdSTXR@cOzhTfgFs{bu=VYR}NUIPc&I`3Jc>nN`-iIP81uH}^JKj(Z0T0dy=< zNVQi1tb^P4^!;Par~Y!ukePtD+o)g|Em^yuMojW`AprR#$}xF$n7IpR+i&HL;LA9i z$Kw1;ptm@uWr=rIjbnU&MgOoD1AaCdrb@IPD=R9^ zgFGen;KkGhy8PLe_Sk+xU1VwRiZD)!e8@T{-dS6Um*ml&8Kv@k&=Fy73d7~ONRsvI zAXPMmc7t>It-Aw@gAhP3Kt7PUqg0aV5Hcmy2r`OLYR8Fi!OPjO3=!^iL1JD4_A2=c zxy4tD6H;%f1B=ucDhJJiU^8s3jZFIzwJddq zLzxkzeC-yFF_hD3Csn~rP_B97;M*_c+b}_G`&~uN-wq^RaQs{hbfssD`ZuYQyk>pm z+b3qS^rlnvlD$G$k<6r?R}mp1@)I7W<{5ePJ|(dM9dJ}Y0Z@lAlGqQX(rfMwACT#b zEs2OROeqJ)`>j5hz<}G^?d-Z{;ZL<@-f2QZ4hjKh|Hhc*jQj#Gk@t<(;IzU^k zKkew5XB*a@f?3KUb}}ox=Wu!r%CzF`g9-Aa?$;&MQFf^RtBnWI3V3VhqMJ`@*-JG( z$73E2MTVZESvxXbMTK?zd_oc(r1Pf6qo1gmRlvBm`PF5sISrfa*&;B@VGL1K&1y%*fmwUH_f5Q|3Q^n5oh!jp-py;ZFzppwjxYfBJ4#>sZ{AASlkqu*JR z?K}s?^=3tGykL!PI!ISKI0~UYObn`l!~@dOL6X=uk9COY1^O2;9Pq1@KC-?Hd>(3Y zzC`v?_0AY*n$ah2+g)!$usCRY7})rGJ17;#<-8ylAO)Z=Gn;%M*D;l=7P~}|6BLSs zmIxTo7bGk_<4>{?F0C-SBE63w37!IS^;EFAD*aMcV^A`-1BDv%V7ZSgcOc6Zj=cP?361 zbXEb&K?9f3vKbC5#FOI1us>MZn3L!-(j)uiXv6UtVO;RwY*l|F=b&&v;} zx+{uG*ar1E0?BCMtVIwuK`+@e7*yVs#Lnw4UB}@ehrg`h?43n>odxdh1<9oym$e@* zcqdSuX`qH6{52#DcpLdpFZ~5=xvxqh4^YxozP)y` zowulX7uv#TZ!?GeTG=3*3|tA`Ge30aOLEILUY2cHDn=>9L6#8JNG7XpWM-l6D)=oN zU!dJEs@J_GSu;NFl-Y6jb8jLRrz-G#w0kx7M%{9=VjE9N3H#%@Zc~!E>K3hGKe9U> zyC<%NWblyT@3Ii1E`&_D5GF5L);?~|DZ3kCwiILWdYvj7-ya!cn*OwH%n>2>D@jgFvQkc6!an0UcNAK zmVOl+T@$^e3|(EAi*@5pD3-qa~;Pf-*mCpBH0D41B4F&`#A$67L~a+NS5KobMJRTQJzEMg%K{}Z=`Qu;l$llF~6p(`Yr-@WeCGw6jTGA z^oeIOn)AQ*o&@J4Ad=X`wTd4#y!Y<&;oC5Nz#ob^;3tusa16Hq*%?lv6C}Qg#Saif zFqLsUg{k5Xdn0h*so9P|5BZfMKe4Ge2i2 zLr6y>z86?%l3TDc#gSL&O?wXkJ$|lcPowv!bINmJaKC9Mh?KU`6#5KM<-cg6sbVO5 z@&1PD{3PjK9RkmQb6T*`yE4KRu4>G=lGHHR@&+sEPj$Z0;mmA#|Cw&vtb*HxdBnEd zC_sYWY8kK$F{Y?jkmWsZ!%6b+iAxY^J5w?o?MYv3$>i;>4`Qkxi)UACfFBdt1~cAs zWiJGA)nlvD84tmZ1_J#^mt)XVB5E&6beCZV|14~HqQXh^srJ{2f`tf#Tfyh|!mqgx zS9g-Lp=sj4)%>mqpWA2|j3pSFD5!&ug#j@krleZx4wbYByjbR1;fFF z8R=d~hO7vIm*6DXw0G+qkyo^#((4S?8d{_QSb0 zaOiK&Jr}&|;n|#R<1}yCTdD(@wOGz|viEV7$^{-D}FsL43dK zLo)uS@$H9X#1K1&kCT2@hL6v|ozvoEudVTMgoT8(rZg~CWBfR8MihHDou2*wanYPH zia%-pRe<+Rwwri6h=(E_6>9_^*1So)pZc)Xh^|2XlDx z?KznGtr1;}@x|CHy;k^6)j9R}Q)4}%m))ZZ5m(p_?9ptF`zztr{cH)qUBx^gJP7zo2 z*lG4a)PRW({4H9;*XUk}eNR{xDh36j0T>g??AAi(e&eg(-H^OKcDy2osf;Qn@V02{ zjRn|WN8`OKnIi^>bwe%rwHMFUgOAiOo*|A#Pfy#OC$cUiq&3(Rt>qf6Va(JADq^ae zihdE;@V==yvZ=047U)B=mn)jiFz=+s zoY!WOR>zb0|66>=iUw|1dIrO!nMY{USP{1(UcVL(cGcIMj!@WXhZ}$Dxe;{QuydQ%}eB9e~^uPD|4bvx++hd|>|1OHkq;Oaf@5NpQ1Z6pD13R*`h+Y z(nQ2Y@N^98Mq|wMc%PN)@nqoz9~G`+Kze70|N4do?hU=~07yieT`0T;R4`amECN)D znQ2I01x^M836cA7qO93pf>E#`^~6KeSRKScfEBUXivY$M**%rNiya_;$^L1RFtZQ# z;jSX5CYlfQ^r?gp$`A0Rp*f|`iNJuAb(Pfs67Q2bV=7?Gtr#|lf0!%g*W4LaN_|>_X|x; z>+c+(m4Dm(0I8?dvw!dvG#sL;1Z7V0&INm!ESe`0jC8<6v)O*J^w*%*1@)`nT_X( zsbcF|Rm>LR_~u0mA`2P{t^@yeHGXUeICety(c22RcE4ax4Uz@vhIU2*s`POr0&S{# z5ghymr6UCH#%XZALvfeErUAY1_ehxFePQC7>@{!2rQm&!QBGiPL+voTPYZmOls?lC zj?l&Z5(D;vs%O;;%!bnJJR!sb;6QK%CC`k%<43)&d2M_+SN#7cOUAom0t?1!%S9B!j zdilMi5Am(Nf0bw-ztAomxV$3xXvr3THi%;$YjvcWDh7J>AoR(WJ67$5dpA6VA%&nUDU^IW^ccvP5=vJJhya5bWUFDaYpXz-Q z+heN2wSgcz5{P8|L-9Q{R{RD*j7znhAQVA(wL%=m#g%3wfBN|8VN>SM;jlutqR7#?&YXgj^OJ@I>)$P6=MUxwwPmE-rn`~M;S7lKpGVX0?40QK=37*62bwWyIDc)0HyL@Im5aSu$C+9#TQTPq22pvf ztg@9F_bb}iwg(mc!5r~T&uMQ(rQEm{V}+lLi-74bUvhuC#~Bt9q&M<~???582drP| z)^Ese`r3}hS!ah(l*xT|NP|m;Bmw+5A^Q)?WHI*-49m>0;qSD$DorK3e_b;-Hz7#V z*6nY!N-5UC$>gT1Gc4H^fUxR0%wLS#cRbIlUCA=m{lAsv+K$REC-++%b?;2nds%X0VL-bRp=JPZ5Tym ziDr(2+Y?$o-anf4;eqnZmquQhGk4`sGG!XlBh}T}ltwrZY~N&jtdsh4AI{Lis?;A0 zR)*k~NAFJmrf|+slsO#H+trsuci;#UL6iTeEJ;oCix+qa!$#Kz9FPwR1`7qmCN$|2 zMCIh}CQ{AD@e3s)iEVPkD5;_TLeB3Ox=8%STMf(f7FH$4)O+lc8$|liP7r@*bl``@ z&S7zD63L;vfJc0&xozcBQjQo8&!h0(hl-|JS5BCW)=Ice1;x4Zbkhy?%My?2STi>_ zH?JFQ)H1GXux!UmoibyTOQc4%XygDLTX31Up+TOAvL<;i?p?(pG<@2>mPL(;)9HRy z#8VnT5Gti7ckueEyj7n;^mdmMJ9gs2$K=dtBhAOXQ-Z+(S!cl9Zn@-{XVNtt0rjEF zB@kHx$*!207PLypE7=D8*}(1YrC{E#oQ4?eob>rj_ z61!PnRsrqcQOU_-(*`HLrge!$pZ^;Y$P5*g zu;Zu3izJ2^>l$P@>?*jr{z$O*oi46ovA*cS=#8em3;O`piCZ3}jjQzBLBz)o`v?M} zYf0$$H6=2-XO*%o^(L@*hy=)!-EIn$gHE+WJ9QjdU&=9Xqm&0ub0(@A=u`^B$uxpg za}GiTirMx_bi%`IbF?FNffSKO_cOWOSk7v~*<9iiB3Da4(6yb|i8zSc9t@n+P<>6Y zn)hyUO-9$_thp{aO4^`%Q;E70ka=ST_%cKty;8D5m^hqX$R4hr4MH=U-i_t8qJ1hu z#t*TVANc>3-U~VE-KdY{a`q9`-xW9mfn*gaF6Utgr1UW<0jCSP7ovbQ;3*rtr zL*+$1bD+eR)-Y~rk+99|@dZeP^5*7!-pX(7#rRC&$Z$kA=YHsm;c;hObrZyRKx$p~ za^S|Oud)IK{nW(F^Aa+py2y=omGqHZHQ+NGqS7c5QaIQ;12M1!>ovSMaUv^$ny0_u z)>>|~9-|~A;0%UjRHsxp>0`~Xke3I=aW%7^1!V*0`QEVh|DOF{KOgrwuzGE}ZeP-(scm$qUY>bx6RHtm6U2bubTZp02u zb=C*na`$js4v}ay2=P2!pM6_5;~XTgFks~VVPa3rlWsX8E9w@G(62(Y4^Z;12b>4U z3ryB;(p@d^SgHi9L_rq!17Y3|MdWRK%AtWm&EDUBfE!2%EZ419fvnJfsHmcXrBYBv z9a_^2`pwj8-<`U6!p)KX+9*A^i_-X;oGpD#G6*k7G>rfX*zS&RvgfqDwTH<9RtRu#Z`Gu*f)-lcaf+~fv2_NHdjSH z3z`Mq6!f{}S{HTUZX!6nlG-4u+w4=D(%{N6UN5xpa6caCz^b(q2a^g7Choi`C|$#h zXu5iet}Y*jx(=;Wc81oAfchxHC$K_C`5)@s{*)l{baKw- z13}y-4*+=l*48q*5wBbx?G|n)8nXJ8tCi3rz_}8?T&`-;|Rb_8K zb`n8Ko_fSH>_{+_z}bgFU$0X)1kIRpHQk-L=OI2HJs_2g!6cDtT3<`cID zEV~BEgX!^`St031P~@1IF%>ZJZP^&tjQ(yi!CT%ai3o{Og7zN-*}XrkaETg3Q;<&S zGQ}xze70!NN%cI78S3_5somKNIiQgF4aE^Opl*ra?=6U3%9J*e9$;X-C)E7Ne2SJ?U zKu#@~$L`wK|Adra_OpjG$P=1;Is=>NamGgp$*Z&e=6ad!-xK&3&3uo&<#GYHJ#Fd> zsV|>&dJzX6-G#NzRTwvV9Xtz351853JZ&_XbY#(`=BUzLlj!MKq&ya0M*9SNnZBlm znfQkpf;V06U0jqwjDGt_2(@(W9&z@#3^O@8=RfItE?%W*`)dK-u%@!RN^0xF4D!T= zAlWiQ#0)BhK)G2v4dO|~fP5`_+STtAk%7KOJ7G^RzAQ#hXjcB^A6MJ)V{t#^?C##x zmKdYNaua5r&ITE8y0v(LaX8%qfgQ4ET+<@TVOG6_DB^%TS$iZHK81cFsHg4W3`}^H z0rwrRf*e5Z-({kj($lxN51bXlTnX^8(A~h{AAN;fVEAH@jsk~IpteMo4(>>!Og&nL zVENm-J{-j~Q9Uonm-lqPiRlWzoFR_xn-G;8c@h(Vt%Q=7u`lXyH{cMTUp?G+x{$z1 zuWcP4rjnkGM(%l-zCxzBZ~g-%yXA}c3Q8La0L}rNe5Yxhce!|vvTzNx#ZvWcjQb?| z?7Y%)C0=*sJNJ}XI!)~H-B1y74A0dpvaqP(GU`QIB7C`a&%=)=56aa_@r#B`dKe|x zT(Cmc=p?GYN!Zhd5R%@_gSy0>+|4)MXQnmIiXBBxHMwHaDFHmcS8e9Ae(I?Sd-i`t zibVA3>9}rt{|+qpsVDJA)@@lZxA==64*RC&-$LmZnc)vUW_lf)c=3N21pdbl`au|+ zPvkpP6=C?lA-vvRbNBV^_~wT`V^Zzf1tE@tfh9GFndF&TiWf zx~?!d5x$tgA6nqcr1V^$`@2L~j~B^U{2Wz3?oZ0y|D>Z*Dqpd!uMIu3iNfxV_sk>Q zRiW0g2VNAtJT%8uk0qq_x8Q?#TUW7L>TjcBSB93RE3jUIz?vzFj5fvPYlFx38=|e- z&j`G>YNNEguf=YE6%Qq^=fi!r7V*Bks<8>?dO;o$njyONNf+F!Oa^;I_qp~Uj0Aq;Mw zgthzKhBh)Kl`mGDTL&v8nDN^2PbLDNjA77-N1!lL87lqt?@$TkMJ#HkwPJVCY_uQWvaV;FGAOt^#+remRCH$hlnG<^Y1HkKhREI7m*Yjl&xFyxf_i^9rhWUFq zq5mVdn#b+hx=hUr$+v8?t-S6y2oEl%{_%@%uoo*TU~rQ{z6W`Kp}UPga7X!gkY|d) zgPVQFOT8uz=Z8~IulW0>SLvn^wErU&(+9r<4!EAL=Cw|FYpyM4k7H2-&b+5n6YosQ zgKx1dbIO3o{V`2dOVw>=MjCiT>R)KBYqCASS^u}t+5}mzAdXejy zjwzFuOLBOSHyxzYKTRCe@jdUSs+?XLjIFP+9iEubjHCP7SVn?2nlTimC1Hm(R?FJv zcglx-#0V4wr&Rm@B9-(-%6lmD+w`@SL!~{=$6fFJH1W~dZEfJM1s$ESMPN^coe^D3 zp$ps&P;m_!Ctazbp&azBvkUmaT`Sk%O5*LE%d-QGKhmY&hS zpdv+*A_2Ggq*CRG6@!vV%14950sN-kNV`kNBQJ%CZe%BAHEtdiNuk$Ul61=t&eh7{APf9{C54s%jA8B2mi3nK>lJBL7!441*Lmh#DSBeVBt8-T+KM}-A-H-X(Y}pX_#ajzd;Xf zSy92zu8ud+lskf%b*^YQA>aUQV&m1cDQCQ>HtOF<77P`P_Y^;$xNvO8%q_=jKnuv? z#K=PrqaNp#`S>HC2d)*r@4YYgC3dA@Jj=Ix zLc_1T-E*f@Ma;JvuzhnF^?ywxY z{x8bk>%!(b%r+0deh;;Qd;;&K_lNakMNV2U-fZWyRD;jbb9|P*`@_;OK1-o|mJ0A$ zD*D%d5XdVRKNJYmL=XNUJL!nrO2+{kc)h~>lmA;V%X=KEc59WJ5$BZ<* z4dYrZRYGV(LjL4n3x-q(?e=&WO}WdMUYCUyt`9g$BW}E!QD%;RuZ59}lLP)B@zIOX z+E)(fPER1(%cn&Wv~eaJiic8_gO>GBluD<8Z`GyrLhGxC!qgKir$vM1r$iETK_l`} zv%@O~ojA<}@sGNc*6BbboX2)1w@zO~HzNIh?fEy1NrqeKB(%vq3ZX}-Cv;4SvWwk1 z3>vj?S|zB=jppg15S1X>VV242xZ4VPwytA}(Hor5M#q0!59v34ctil3qR%o4SyOc8P+LVZ~qOWTF)OsHM*^U z&?~fz|DXqBe{w_;+F+~vW4q26pCl8rmH_bYp1#e^fA=8d<@HdF{3%6h{D#*hBF1X& zr56S#bjdv8bGmWK@woL+UB`@QO~A0pjSZa?&4qC{#(zihMeir7gjC-f4|hIBYbZ$G zAlr2X({pA_nU@(VoG)lN=4Y)i;qHHdbp;Uds}u15hX(yGJ=#Li*xFj-JR}q?VeRW; z8E?7VAZ|73>INZiyp4Y%$Ule~^Uh_HuF#0J?+Ju-0%lszx<*KBjqwxnu{NaK-AQbD zQCOQ0IpdkLK+75Iu^@ZB$-^g{O9)_Xx5Gp*%4D^Gl97%s%S%r8!L$VupTA1lC|G81 zo+U_0JV38)Ax+;y3-NhgbZwre?k`oHmU3RC9CnyILsE2VB=9=QS#J|U>-!6A%^lp4 z%dC`D>JOVa=Y;y((+n)5+0{E}dXln|%;rohSFX9bN;+Y_+ushaR0;;v^w7A5lmkwu z)w`!}bAJyfHN=EY@^=09JwRa1q$q~8szvoa^&6(7T>=DjpjS9=c}1%9gu^SY$)=`m zaWoQLX9m^D+ zp*EhEay*@yGEVp*ZC#Mm<6I%WRpxrU44+;XR}nWR=uELq_;tEMcTFb^rOCGePWWj@ zBSPEW6!}^nmrXHsaPl3YJ@e-Cf`&bgr2QDdmhcSPj|Y?fK0YyuF4z?Jp_<@>hp&cX z)4ZH#<;?<@X3`1c%TR+Ga-N%>u`iUm3i<**Pp}9NCRz2%$`@Rdva`^<(KUBWSvS-U zQD4+x9eVRcZI-qNrZd-1V%&ubLnpK|jw2u3bEjXxhnsSiIj0r9ZqdhsX_DgH=NdjO zmpylJ7@GPxZExNKnf3A_ne}2=c4)uU{MPNG_#US;uen+XKO9L_KEA9NqR-d(o9!~F-d%#9C>^y^S4P{YQn(K zBF)z_{y^Kv*sB%M9|`;4|6R0Y{i#9Uyz+48&EB^+3;b)j&nYL{Q=x=R^ZVAgDhE`OeJE6?&gn=x>?z zQ@m9{>HX^Z4D))>J|$`lc`tM0eEQbJyWeV@1N@3C6?zFEe?b#_pe~~R8k~IKAo`Ub zgoBE9#RzcUmDgEjGs4pdGijub1G zpi*s2GEYI?b=N>YCF|;d%Ggs(S3%OJDpqu&B#JOrio{0JBvT<(?XBSnXn1v9LnLI%FG+xTMqlo}vtV@MMxQu;I=VjyR} z3EDXQpRej?@cyEh&(shq*#q)^<{J3SYAqrhJy{bor;9BA`>i&v-B-}&T0YR~ki{Jp zbB|e-LuiC5+K`0$V=dmkH@GzJ>5lws^i_*91sU=7K9A>d+xk#T!Qgnn2?1UKcKsdN zj^*m4_Ye_IQO2sioc{R+z8V@%Dn@X~!twgumIv|Eyfs2{i8Hp2O)kb_7A|>CziTPt z)K5y}Z&sgEci9ndEBmTB#L z{98)GG{YZn>ybORv!~J6G5c2PZuobc`pw zq*$obWNeWAI@uptcCt{j;307<3q}OtJfw2CT)Mi}zKd^QU!h6t6@(*1gCqV?64&b5n~yv}=|pIQlb-$(7@}ip%m_s}`?e6m zgYm4&g+BYC*pilFfpa}G1Jdi@D%ek+=+x@1=EhgsSLm)A5G3P(!%2u8AL@hBH#goci3r*pO-n)lPjgA!jcQSQ|uco=x)9}+8pf@Gk9>V^U z+XLPA0rtf$k>aP!{1X7GVbw2C!m`%;K*_!8`r>=haf|*X=RnSslW_L;3YB1!DtRap zD4On_&1zo8svBic%Q3~|71@S8QubwoWkp^`pfm#iibH}zf~keOBctGSY(?gFhr7xS zm3IEV7zG$x^r{^r&E)pnvE+;a^OL^p%GN*ye)l5;r+YV6q56`BP=R%3heXaZ*Dm|? z)Qh@AF5H^en4^H?qkPOG=9H6X4<)u}xzwg?i-}QzwYR^Z8~Kn_RZ2vrN;vA2y)1$j za1CLko$l$!>Z>*W?6g)Cq^;X+5Ej&%AbCt9rFFufq-psYS|elnDW8II-x zF9{2`Xtm1?j(O{ee$OQ5C-d~-o&y*1P*t_dqivR5-xI0jxU-f+74FnBo}`;V#gWxS z6M@=%B5d&H+ibS8a)ToDwM)Snw_|-QLQZNkG$e|CTw<1zEiV*_b=eR8TEm2WH+R^N zukmQ@Yn%gii_X^w_V%Kjytb;tPkxm0UIbSi`rqQvZH5j|8a8#4+aqTo>AXj`I5#y_J16}hcr-4j+DDrYJ0!t3ny}ny* zHt1L2vbe&O$AbG!hWM;j0GfW%1=i@(HVzD>srx-n0wpANqWBzbdSXF=1xcD$un||E z7QugZ>r&m@hLKwod+0&X$Pxdh;TUxS<2InUj#OwPOv0ahC}=Q22Wx^hdS{ECST*xgoU? zknu9z(_FTDbin*60dM(bl<^-GQp(ks$<1!iX5!-l82zr5I%Xm8oQL0IGE9agy}%Qw z1O@r7#S$xpi_b(1oITaBX5G(3q@d3g-MN8MkvbG$@;k~Q_OGY#7Hw?Ee-Wd`l7I=z z0DpZ?re3Ar%C`PI7CHWzWGbir2>B}e+TpbKcH_*PeyBU=i8Jd zAuP?im<+|_0c+Xbv6(3JFa{fRj-icXj1H;RHnqqYveDSnNr}87?!mKxV!y`nJ4o}} zA)6Snfk0Klo2e{(><2wln^*tFpC!Ma@VvW$(m5adETB>5wxBCPGRh5NRGiH2H(mJiwf~1J3hC^!ROEn; z{0-GrCOl)EZJaB)eVqc9+;qCBm}F_NQAj$o>v@6>N3e^>awfdrotklQwt|8nh8(xb zE2k=sBe#~ZU>zG=O{0|WVH!W)OlsQLAIyac7q=r;9TyuXvTUMVta}vo(TGAE09Cn= zHY!whZVf2$%DC<|gP)Fx(ena@Nj?-hVsnemnWWPCDM!%YPoimA?PNtx#Zw$uEPb_(E#&o 7 || + level.distance(newPos, pos) < 6 || Actor.findChar(newPos) != null); if (level.heroFOV[pos]) CellEmitter.get( pos ).burst( Speck.factory( Speck.WOOL ), 6 ); @@ -312,4 +331,453 @@ public class NewTengu extends Mob { } } } + + //***************************************************************************************** + //***** Tengu abilities. These are expressed in game logic as buffs, blobs, and items ***** + //***************************************************************************************** + + //****************** + //***Bomb Ability*** + //****************** + + public static class BombAbility extends Buff { + + public int bombPos; + private int timer = 3; + + @Override + public boolean act() { + + PointF p = DungeonTilemap.raisedTileCenterToWorld(bombPos); + if (timer == 3) { + FloatingText.show(p.x, p.y, bombPos, "3...", CharSprite.NEUTRAL); + PathFinder.buildDistanceMap( bombPos, BArray.not( Dungeon.level.solid, null ), 2 ); + for (int i = 0; i < PathFinder.distance.length; i++) { + if (PathFinder.distance[i] < Integer.MAX_VALUE) { + GameScene.add(Blob.seed(i, 4, BombBlob.class)); + } + } + } else if (timer == 2){ + FloatingText.show(p.x, p.y, bombPos, "2...", CharSprite.WARNING); + } else if (timer == 1){ + FloatingText.show(p.x, p.y, bombPos, "1...", CharSprite.NEGATIVE); + } else { + Heap h = Dungeon.level.heaps.get(bombPos); + if (h != null){ + for (Item i : h.items.toArray(new Item[0])){ + if (i instanceof BombItem){ + h.remove(i); + } + } + } + detach(); + return true; + } + + timer--; + spend(TICK); + return true; + } + + private static final String BOMB_POS = "bomb_pos"; + private static final String TIMER = "timer"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put( BOMB_POS, bombPos ); + bundle.put( TIMER, timer ); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + bombPos = bundle.getInt( BOMB_POS ); + timer = bundle.getInt( TIMER ); + } + + public static class BombBlob extends Blob { + { + actPriority = BUFF_PRIO - 1; + } + + @Override + protected void evolve() { + + boolean exploded = false; + + int cell; + for (int i = area.left; i < area.right; i++){ + for (int j = area.top; j < area.bottom; j++){ + cell = i + j* Dungeon.level.width(); + off[cell] = cur[cell] > 0 ? cur[cell] - 1 : 0; + + if (off[cell] > 0) { + volume += off[cell]; + } + + if (cur[cell] > 0 && off[cell] == 0){ + + Char ch = Actor.findChar(cell); + if (ch != null){ + int dmg = Random.NormalIntRange(5 + Dungeon.depth, 10 + Dungeon.depth*2); + dmg -= ch.drRoll(); + + if (dmg > 0) { + ch.damage(dmg, Bomb.class); + } + + if (ch == Dungeon.hero && !ch.isAlive()) { + Dungeon.fail(NewTengu.class); + } + } + + if (Dungeon.level.heroFOV[cell]) { + exploded = true; + CellEmitter.center(cell).burst(BlastParticle.FACTORY, 2); + } + } + } + } + + if (exploded){ + Sample.INSTANCE.play(Assets.SND_BLAST); + } + + } + + @Override + public void use(BlobEmitter emitter) { + super.use(emitter); + + emitter.pour( SmokeParticle.FACTORY, 0.1f ); + } + + @Override + public String tileDesc() { + return Messages.get(this, "desc"); + } + } + + public static class BombItem extends Item { + + { + dropsDownHeap = true; + + image = ItemSpriteSheet.TENGU_BOMB; + } + + @Override + public boolean doPickUp( Hero hero ) { + GLog.w( Messages.get(this, "cant_pickup") ); + return false; + } + + //TODO change for when tengu throws this + @Override + protected void onThrow(int cell) { + super.onThrow(cell); + Buff.append(curUser, BombAbility.class).bombPos = cell; + } + + @Override + public ItemSprite.Glowing glowing() { + return new ItemSprite.Glowing( 0xFF0000, 0.5f ); + } + } + } + + //****************** + //***Fire Ability*** + //****************** + + public static class FireAbility extends Buff { + + public int direction; + private int[] curCells; + + HashSet toCells = new HashSet<>(); + + @Override + public boolean act() { + + if (curCells == null){ + curCells = new int[1]; + curCells[0] = target.pos; + } + + toCells.clear(); + + for (Integer c : curCells){ + spreadFromCell( c ); + } + + for (Integer c : curCells){ + toCells.remove(c); + } + + if (toCells.isEmpty()){ + detach(); + } else { + curCells = new int[toCells.size()]; + int i = 0; + for (Integer c : toCells){ + GameScene.add(Blob.seed(c, 2, FireBlob.class)); + curCells[i] = c; + i++; + } + } + + spend(TICK); + return true; + } + + private void spreadFromCell( int cell ){ + if (!Dungeon.level.solid[cell + PathFinder.CIRCLE8[left(direction)]]){ + toCells.add(cell + PathFinder.CIRCLE8[left(direction)]); + } + if (!Dungeon.level.solid[cell + PathFinder.CIRCLE8[direction]]){ + toCells.add(cell + PathFinder.CIRCLE8[direction]); + } + if (!Dungeon.level.solid[cell + PathFinder.CIRCLE8[right(direction)]]){ + toCells.add(cell + PathFinder.CIRCLE8[right(direction)]); + } + } + + private int left(int direction){ + return direction == 0 ? 7 : direction-1; + } + + private int right(int direction){ + return direction == 7 ? 0 : direction+1; + } + + private static final String DIRECTION = "direction"; + private static final String CUR_CELLS = "cur_cells"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put( DIRECTION, direction ); + bundle.put( CUR_CELLS, curCells ); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + direction = bundle.getInt( DIRECTION ); + curCells = bundle.getIntArray( CUR_CELLS ); + } + + public static class FireBlob extends Blob { + + { + + actPriority = BUFF_PRIO - 1; + } + + @Override + protected void evolve() { + + boolean observe = false; + boolean burned = false; + + int cell; + for (int i = area.left; i < area.right; i++){ + for (int j = area.top; j < area.bottom; j++){ + cell = i + j* Dungeon.level.width(); + off[cell] = cur[cell] > 0 ? cur[cell] - 1 : 0; + + if (off[cell] > 0) { + volume += off[cell]; + } + + if (cur[cell] > 0 && off[cell] == 0){ + Fire.burn( cell ); + + if (Dungeon.level.flamable[cell]){ + Dungeon.level.destroy( cell ); + + observe = true; + GameScene.updateMap( cell ); + } + + if (Dungeon.level.heroFOV[cell]){ + burned = true; + CellEmitter.get(cell).start(FlameParticle.FACTORY, 0.03f, 10); + } + } + } + } + + if (observe) { + Dungeon.observe(); + } + + if (burned){ + Sample.INSTANCE.play(Assets.SND_BURNING); + } + } + + @Override + public void use(BlobEmitter emitter) { + super.use(emitter); + + emitter.pour( Speck.factory( Speck.STEAM ), 0.2f ); + } + + @Override + public String tileDesc() { + return Messages.get(this, "desc"); + } + } + } + + //********************* + //***Shocker Ability*** + //********************* + + public static class ShockerAbility extends Buff { + + public int shockerPos; + private Boolean shockingOrdinals = null; + + @Override + public boolean act() { + + if (shockingOrdinals == null){ + shockingOrdinals = Random.Int(2) == 1; + + spreadblob(); + } else if (shockingOrdinals){ + + target.sprite.parent.add(new Lightning(shockerPos - 1 - Dungeon.level.width(), shockerPos + 1 + Dungeon.level.width(), null)); + target.sprite.parent.add(new Lightning(shockerPos - 1 + Dungeon.level.width(), shockerPos + 1 - Dungeon.level.width(), null)); + + if (Dungeon.level.distance(Dungeon.hero.pos, shockerPos) <= 1){ + Sample.INSTANCE.play( Assets.SND_LIGHTNING ); + } + + shockingOrdinals = false; + spreadblob(); + } else { + + target.sprite.parent.add(new Lightning(shockerPos - Dungeon.level.width(), shockerPos + Dungeon.level.width(), null)); + target.sprite.parent.add(new Lightning(shockerPos - 1, shockerPos + 1, null)); + + if (Dungeon.level.distance(Dungeon.hero.pos, shockerPos) <= 1){ + Sample.INSTANCE.play( Assets.SND_LIGHTNING ); + } + + shockingOrdinals = true; + spreadblob(); + } + + spend(TICK); + return true; + } + + private void spreadblob(){ + GameScene.add(Blob.seed(shockerPos, 1, ShockerBlob.class)); + for (int i = shockingOrdinals ? 0 : 1; i < PathFinder.CIRCLE8.length; i += 2){ + if (!Dungeon.level.solid[shockerPos+PathFinder.CIRCLE8[i]]) { + GameScene.add(Blob.seed(shockerPos + PathFinder.CIRCLE8[i], 2, ShockerBlob.class)); + } + } + } + + private static final String SHOCKER_POS = "shocker_pos"; + private static final String SHOCKING_ORDINALS = "shocking_ordinals"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + bundle.put( SHOCKER_POS, shockerPos ); + bundle.put( SHOCKING_ORDINALS, shockingOrdinals ); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + shockerPos = bundle.getInt( SHOCKER_POS ); + shockingOrdinals = bundle.getBoolean( SHOCKING_ORDINALS ); + } + + public static class ShockerBlob extends Blob { + + { + actPriority = BUFF_PRIO - 1; + } + + @Override + protected void evolve() { + + int cell; + for (int i = area.left; i < area.right; i++){ + for (int j = area.top; j < area.bottom; j++){ + cell = i + j* Dungeon.level.width(); + off[cell] = cur[cell] > 0 ? cur[cell] - 1 : 0; + + if (off[cell] > 0) { + volume += off[cell]; + } + + if (cur[cell] > 0 && off[cell] == 0){ + + Char ch = Actor.findChar(cell); + if (ch != null){ + ch.damage(2 + Dungeon.depth, Electricity.class); + + if (ch == Dungeon.hero && !ch.isAlive()) { + Dungeon.fail(NewTengu.class); + } + } + + } + } + } + + } + + @Override + public void use(BlobEmitter emitter) { + super.use(emitter); + + emitter.pour( SparkParticle.STATIC, 0.10f ); + } + + @Override + public String tileDesc() { + return Messages.get(this, "desc"); + } + } + + public static class ShockerItem extends Item { + + { + dropsDownHeap = true; + + image = ItemSpriteSheet.TENGU_SHOCKER; + } + + @Override + public boolean doPickUp( Hero hero ) { + GLog.w( Messages.get(this, "cant_pickup") ); + return false; + } + + //TODO change for when tengu throws this + @Override + protected void onThrow(int cell) { + super.onThrow(cell); + Buff.append(curUser, ShockerAbility.class).shockerPos = cell; + } + + @Override + public ItemSprite.Glowing glowing() { + return new ItemSprite.Glowing( 0xFFFFFF, 0.5f ); + } + } + + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java index e549de881..cd3118d0c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/Speck.java @@ -271,7 +271,7 @@ public class Speck extends Image { break; case STEAM: - speed.y = -Random.Float( 20, 30 ); + speed.y = -Random.Float( 10, 15 ); angularSpeed = Random.Float( +180 ); angle = Random.Float( 360 ); lifespan = 1f; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/particles/SparkParticle.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/particles/SparkParticle.java index ff951c779..c5bd5311b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/particles/SparkParticle.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/particles/SparkParticle.java @@ -36,7 +36,18 @@ public class SparkParticle extends PixelParticle { @Override public boolean lightMode() { return true; - }; + } + }; + + public static final Emitter.Factory STATIC = new Factory() { + @Override + public void emit( Emitter emitter, int index, float x, float y ) { + ((SparkParticle)emitter.recycle( SparkParticle.class )).resetStatic( x, y ); + } + @Override + public boolean lightMode() { + return true; + } }; public SparkParticle() { @@ -58,6 +69,15 @@ public class SparkParticle extends PixelParticle { speed.polar( -Random.Float( 3.1415926f ), Random.Float( 20, 40 ) ); } + public void resetStatic( float x, float y){ + reset(x, y); + + left = lifespan = Random.Float( 0.25f, 0.5f ); + + acc.set( 0, 0 ); + speed.set( 0, 0 ); + } + @Override public void update() { super.update(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewPrisonBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewPrisonBossLevel.java index cf77bbd62..2cf91c163 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewPrisonBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewPrisonBossLevel.java @@ -429,9 +429,7 @@ public class NewPrisonBossLevel extends Level { cleanMapState(); tengu.state = tengu.HUNTING; - do { - tengu.pos = Random.Int(length()); - } while (solid[tengu.pos] || distance(tengu.pos, Dungeon.hero.pos) < 6); + tengu.pos = (arena.left + arena.width()/2) + width()*(arena.top+2); GameScene.add(tengu); tengu.notice(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index ab177f516..35f55e062 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -81,6 +81,9 @@ public class ItemSpriteSheet { public static final int GUIDE_PAGE = UNCOLLECTIBLE+6; public static final int ALCH_PAGE = UNCOLLECTIBLE+7; + + public static final int TENGU_BOMB = UNCOLLECTIBLE+9; + public static final int TENGU_SHOCKER = UNCOLLECTIBLE+10; static{ assignItemRect(GOLD, 15, 13); assignItemRect(DEWDROP, 10, 10); @@ -90,6 +93,9 @@ public class ItemSpriteSheet { assignItemRect(GUIDE_PAGE, 10, 11); assignItemRect(ALCH_PAGE, 10, 11); + + assignItemRect(TENGU_BOMB, 10, 10); + assignItemRect(TENGU_SHOCKER, 10, 10); } private static final int CONTAINERS = xy(1, 3); //16 slots diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties index fb7b7d546..40f2afd79 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties @@ -590,6 +590,18 @@ actors.mobs.newtengu.defeated=Free at last... actors.mobs.newtengu.rankings_desc=Assassinated by the Tengu actors.mobs.newtengu.desc=A famous and enigmatic assassin, named for the mask grafted to his face.\n\nTengu is held down with large clasps on his wrists and knees, though he seems to have gotten rid of his chains long ago.\n\nHe will try to use traps, deceptive magic, and precise attacks to eliminate the only thing stopping his escape: you. +actors.mobs.newtengu$bombability$bombblob.desc=A cloud of superheated smoke is billowing here. Watch out, it's going to explode! +actors.mobs.newtengu$bombability$bombitem.name=Smoke Bomb +actors.mobs.newtengu$bombability$bombitem.cant_pickup=It's stuck to the ground, you can't move it! +actors.mobs.newtengu$bombability$bombitem.desc=Tengu has thrown a strange looking smoke bomb here, which is billowing a thick hot smoke. It's making a loud ticking noise, as if its counting down to an explosion!\n\nThe bomb has anchored itself to the ground, so you can't pick it up. + +actors.mobs.newtengu$fireability$fireblob.desc=Tengu has thrown a fine powder that seems to be catching into steam here, it's about to ignite! + +actors.mobs.newtengu$shockerability$shockerblob.desc=Electrical energy is building here, anything standing on this tile will be shocked next turn! +actors.mobs.newtengu$shockerability$shockeritem.name=Shocker +actors.mobs.newtengu$shockerability$shockeritem.cant_pickup=It's putting out too much electricity, you can't grab it! +actors.mobs.newtengu$shockerability$shockeritem.desc=Tengu has thrown a curious machine here, which seems to be made of robot parts. The machine is constantly arcing electricity around it, but it seems to be going in a predictable pattern.\n\nWith all the electricity arcing around it, there's no way you can pick this up. + actors.mobs.oldtengu.name=Tengu actors.mobs.oldtengu.notice_mine=You're mine, %s! actors.mobs.oldtengu.notice_face=Face me, %s!