From d06603b95bc8983601ce0749e3d08c9fb6b1c754 Mon Sep 17 00:00:00 2001 From: Evan Debenham <Evan.SHPX@gmail.com> Date: Fri, 7 Sep 2018 00:33:58 -0400 Subject: [PATCH] v0.7.0: added 3 early spells, still very wip --- core/src/main/assets/items.png | Bin 17539 -> 17734 bytes .../ShatteredPixelDungeon.java | 3 + .../items/spells/AquaBlast.java | 71 ++++++++++++ .../items/spells/InventorySpell.java | 71 ++++++++++++ .../MagicalInfusion.java} | 20 +--- .../items/spells/PhaseShift.java | 80 +++++++++++++ .../items/spells/Spell.java | 73 ++++++++++++ .../items/spells/TargetedSpell.java | 106 ++++++++++++++++++ .../sprites/ItemSpriteSheet.java | 13 ++- .../messages/items/items.properties | 23 +++- 10 files changed, 437 insertions(+), 23 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/InventorySpell.java rename core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/{scrolls/ScrollOfMagicalInfusion.java => spells/MagicalInfusion.java} (82%) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Spell.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/TargetedSpell.java diff --git a/core/src/main/assets/items.png b/core/src/main/assets/items.png index 2c9534b83f29f442959f2ceee6157b5221ebaf20..38c36a6cd4bad16a22e00d1bd98f40d410a6f285 100644 GIT binary patch literal 17734 zcmb5V2|SeF`#*eU7<)#RBryufQlltj8J{*up%sN8Nt-2P2{R)!?UpQ+W%8l4$W|eS z8B~<D$i9p$LzWrFGGoTv&)w(q{VmVyd7jtn|GZwzeYX2L_kGT}uXA1R>wWGx+S{y= z+8_l0SYvx=|8W2ia1se5#NdnX(-J-a2iDl`|LbHJVx~$w+4X1UjN6ERQn9!d+T-lr zPc~m9;y)XDoW0-R(Jm{xPvMA_{FCgpDjny=ymmg`y*|O)#LH0T#aCO6wFe&6Sqxvr ze$8sCw<u)Ac?t`cWFp>H3a3tIM$AtB{#`H_@wRIA?d!^^)2F)pDM9+dyX4P%w=~pa z<HvUTMVzmc)mz<hC_#Hq>Z2E=rtpNR!PC`QCFpPG(#&;4Hheu_m$oU$ZmXEL>n<s? zq!W@yP-`!6N9F0;Xy6=JX*7rSGXpo;&>MV<4sCgTzuvHfHJGXxZTSx5|F}pg7(KQF zNjcCN<Q;rY@{G7NsicYaAQyRvOnYQRGCirbK1%bUTj=@pmUW~uDQi@~PJ10C>pc^9 z>MK(vX^lSjNh+w_!xz9@{gL0-T&Cmbw>NQG)_-WnHexCL$Y)LFsdihdTa>Mv=M%N; z$k-|{Kg?>g%KkJ-Yy52d5S1WH({hn%c(~5`AaB3Mj59)OwEiu~(ANF?2zOpug9z>5 z?r{X2k5C$t!tHRsf+ydwq?_~7^y3);5*oI5+QxB-2EXJ#Ggt(KR&t6Nv+CAx3c-1^ zEwAuqs3)Yr7IK1x26}nyFDnreN#|QmT!(u4&MUsu4xiStJ>F`qW1FO9TVrmyFZ3dD zva9Do{Wk2-Hrty+S($#ut@peM{JtUK-xC)L64WxI{{H?E7!s#EiGFO;8bwB#`}*DG zev*VMJx|0!KS*fR;BIiP?m3M_gwV-G>Jgr{De@Wu6Z@gJ6BXKWQl%;we$kB4l`rK= zfKD7QKD%b=fSj~~(BC5DZjJVVwrjTX44sAd`iMNFpz~z9{Ke<i6URgeTN0!o)v_$_ zqd}t>ED0&Y79XGS3@Da(-EtEMeVA|8DBmOT=2CKB(Lz;@5Ecs00>5<$X8>Xg*SKZs z%LH)<z1=vK9$KJsdk~FVp#;`Pe~~wxe>!jqj2P5FII#y)LgO;EDdg67joLNwuZU$f z#K&oQ4~6d=L*0`e@+B>2uwE~m0coHP{{b-WcL50+meesqd?18tS8u#&yo+))K=jsN z_VCu7lN5}c0n8Sh1U<rOTQNKCgz!G<*>{@xaYPtD6hTe23sWt6BxUHatlqksBkC;b zw-7(>f;6}}w{cZl_r2Myf4EhkWKLL~(w1++W5`&HeN&Ev6uT}nMGI9vT~2G}RS8Es zbP(E6E7(8++BPYdp=O4M=kGs%xnJMNUDM%Y-!)G_pXfbcdlMQ<!<X)KLb1Q=%YKlr zpGT;xseK4}_}A679~#L1M1Eh$X#TF5q=C-e8}hCZDjUP1a8<>g_$O8a56=>#a;|M) zmQ~*8>93=CQ2L;bDXTKpu=01)2b?~)FM<X&lXC+vObXM!T*?@l-Kk`KOrBAuq<=d3 zqa$)`v%p~}@XRY0<n`fY?F1>@sZ`>~0}~lX;ya?<f5diqLt&|i-_dV<HauuIr44vD z(YTE%VlPdyJ~T)E`#6vBb1ld7`|@4h-TzM~q?0F|-(O5bEF~tc<ybBE2j!pwIJV|0 z9<-@x?Bit>zVAQ@2v|KO4f<}7wjHyA1|wK1&#Ivetm?m=h_(rtLvYD(W5oLZbPF}I zghY`J=e&PkH*aPr)oWm{#K95c7XP3pQqNrVKzVpY`9l@!F(fHbx4=tGPM?&Won87+ ziC#!tohsdq1<gQ9w{88Tq?M1ztenRCMz35QZpNDOeV|(zY>Ka-0tsS&HCWg{8qHOP z9FgmNU67Ae0#yBmW<TSS>6$|ppPc^`q?cIG?TcGQrbWvP0BbM8G)<WlS`0E8rRg7? zLCbR#!)+_@Q6i1H3p7VFP;^uDmpx_CmewFWA!r>Ku~<LVFXnd&SR5Q%xrvg#n+K21 zSc=nzrbRM_P##v{iwNUzDNAX5BndA#U02>RLVU_>uLjg`fdjuW>OZw_z*gN)gUH-_ zeJd9Co@GW2DuHOSokP78iC#Aw94r<v|5Zo%ftTRN^<HKAOrG)G@g3DQ&dab=({o%a z{SEcpCa(eftTdxUdR)2LD{}pmFi?qf($RC2DZ!etfl4fFR!gXu)hp^qFrL2;&|Qb+ z=<!Rh$bj(P!Ag{!6ZLx&2{UtDLgTYyhF97c(+v^O+j^b2UQQR-^FPkYifl$P+$T8p zQES`Gc?Yan$;t@L(}+U~HU*%3VJaX6$@o!Nmxw$Ra0!uHP6fXnwt`=O>JK9V#;MZa zWzZ1nP^muYd?oVFWxqoUGT|iX-kk#u`+yU@ZmC+$m-kiyKjdI%zwDE9)sl<Ia>=l> zLFVJye?GJg?;u2*C5kl~nN`7CAFCMeM35JtrSvS*A?_GHbarHT-%_P=(*$14uUPKg zYCU>Gzc1MCYb?_eiR?I4l<hH40bO|4G*PzU^g=^Q<#%e7*Aukhptd_c`vh2`JT-od zPrZA4=*7Ypa^7*NPsG5TA4p<WbCUco_f>o!_`YWE=NMPh#~yIb3bzS|1NDm=758(~ zC_T@P0p}O}j3)U8GI8j|y}U<RvHXge_PBm|gUVxsG)(n2unnc0_PxJa%YhrEKIO}a zg?_&&ycH$+Nl{?)9Dz$c#S!NGAYmF`hl5ss`yV-Wv#&F7VT(T{!#hre)h_#=L(%0g zq97cNdp!nU6=i3792tjXh*g6vmn9X4>r1AC4O)>Tqr6LY6>O<Ukeh>^K`A&JR9SxV z4oBk(3w^WLUIUr-dSE<!&j;|he)1ENUMhHO+<8TbWXZ=1hfE4(ImTU6>p*H}ZA~4z zJ6ro+)7?B8XSUE$qFQub`dOd0HDj`*{nSAszs2Akb6GFhdV?TmU(NBRerNcuL7E%& z!WdFx+G>clddn6?QmHwwPkI!OyHAOy-zd8PvYo+T5TE8zgrl&7K8XwR7UPQmz@@&| zk9J1n)_LfMm<9D8Ced++8Gjz}w5aJvAOW@g_3n{H(MZVdTPR0a$bs_Cx71mo@gjl_ zGVRjp!+oVmVuDvjK%L`dtFsQgSQYj?dR2%3H=g$FLD7#<8gr3AAYhsbuc=o|<eoz~ z#$vF4Ap#8Up*+OjM#hy26IpZYX91Qdc)N?mjr?>>=S{kdoI++xSazxjQlvl*F8RiK zI#Q$KfWnftU8<t5rq9f-R1|##Dm4Po9#X49q?1@v**17cg|Rr42K*pj7n6~U9k^6i z@(JNB(^<^NoL1rQ^5*^tT(uFY9|^d|(j-QEhA#WY-tUAhhAxLa&X0ckB|{H*%0Cjm zhVjGeLT}ro@N+>J0!)be@A-0?8l`fzH41X}+98-vqlt2zLvq16ZQvBXHlQW7y}XLD zc0JaA`FD_%!0N2Q%?f`Jd0_<$SqzE>Kf`bT71dTtsv5O$0;EA2%GtFw>{vdBED{?K zoVfOe!L^E(N9^0!mY1%`Y5=T0X-fmTc_p&pv<9O<;#>|+36!-e2*cFpQ3(ck@Cv?c z!GkuglJzqeFpKjbJ0s+N-y8^U`HW;FW5#dP5Xc{mqV2clyYdqLNZ)gv_)420O=1V# z;h3*(AYnfDJ?T5uoTC_Nl?^7&psalqfm<Q?ffr#!tUg~twf#PD-pZsX_su$R{@&~^ zX=%o<O0YCuIaEwOtuE@b5qUlt^nXQ$Ef45CX!E+$-jB~aOjm~I-9nT*r{KfKZA}eF zB^*OiEm9p~hm@^*nP77vs$&~47_LB(v@PseNYUj2M|w~l#m@<V4clvRKXCCVYwoq) z0?gzx$}t&BiYx|uq9oXrLzcd=>UK^b(;(Wqt=OQqj+NH1^v$7?hYWZ!ifnj-kP~Jg z4`m`c1X|Cqq+9x6>lt7;G?;S_1-OW6oDf4pKFgMcKMhxG#?m*vXj$r-Zjm1{9z7-X zIn`4?YIaZ%TzSAC(O?UQf?^EEE7Eh1J#$l`pA3<FuLp#Q$D1;$kL(WTRD(exMCp5q zl8X=~XTr~2Ey_5Jk$gCSg%Hoa3imfT4Vn~fPQ78x!;8J<_1{S$m9=(8mDnXEBLdR= z?MfmKg^%SOc7I#?cRX2SB*V!)oQtQheh5*tHM={T!r4()qbxk{Rr1i%j;SBQ>l?k| z7N@CKe)&z~!^iXwvD1S{L7c0<oC&R$+VdwmR*8Yj18*6lg7=nPWq(Iix5p3JN7%o+ z`G^w}6LUHsknnw*vP;d!Wnw=Ei*-NmU$yJ9>ub^DxOcdqD|_Z`4z*S;9_P09os+IO zE*Zu(G3Q_XCsAhVZ~jy}As7msJ{xCG5WowU>HC+H9s&)Sv+{HGQ%GduLLAvc^`p<G z)UDCEeB$RcryO&(;7%Q}UhUp=G)p$n<&|h|Z49xeEn!W@4(An{hKBkxne4uF>2=*4 zarFs1jS6BdaY@y`Ti9yJw9|O1Baj{xyinr`=Bh>i4zI;k1nN|>7C%Hv?uYerkBM@( zNGk@u3vQPTE2%8DLgZ6zxn>1nD8{N)I9bV0NwwCY5Y>hA^0#eKba7l2*vxBKEQSq^ z0i=fDI=t+=wt-rFC0uY2;o(vS1Tvs88Lqm6N`M3+qp^e7W3q`B&yl1cDSBnwv_+vW zf^LQaOhu4!0tDD2=qe~{9cB7QpV%MYG0fqT*RT<?%*#=+R+f6!ykq^w%dj>-1BzmB zuYiX*@i>AmE6hcb)C9IDV9tFc1wz<)>ws%4T<t13YDG+%=QvnBACqC^f8_6<KYn|4 z%F|R6V=3w(X{tk$n8*-p_PAp-OI*1}YWa#qrj{QcOe2wTkTBGOWk;_=+qvCP)gffw zP%WDB7by|Fn|0M+<Zn@6nU+ZHcspdHTDGcRC>TxqZ<F}{XX1FkZ1Ucw0UETz51ru6 zlM@?>I40{D?hVtLMC7F7`=ZeOo@zG$a&={@urH|9Qe4%Z#{G3~>4zP*r^LH4-;Njy z&Yn0?0;HCqIAwRke5V2RUz2`9%gB(67aPh8nAS)^Q2Y$*lZYIn%RORETVJ!u&{dPc zu$(AX#L&AwzshEIeQkIbo@jZP?kLf8pZSOw9DIb}xy95$kE?9p?Dz_lTQ*Nkb`I6m z5htIg^{%zqSQEKomA6xnxs?QO58WTS+@;$*M+lChu0E3efsNa?if7^c*c@n@=|05s z*=4Y?^p<DT&RWWG5IPiPa<zD^iHI;k6q@YoeO}*WP>Ttqh}^{C5su1#F;|Y744ikZ zzY6TiqHORHY+_iL%rLr24EJf{aQuVvSKw?;qBx}NGg^xgg}U{)$Dke`%7^E6X&a;% zJSN4YN$#%pwYoJX_rnp!-XbC*Te$BSK3Q#MT+h7yBp1MAGtr>xMZy|*Z8Es(ZC+|Q zVjA`G3@<e!Kt0GFedKU1eFv5#6cYAH9y!Jp*+|A=DmHReo$;Y=bvv0M=Vd^ZzSXgM z6~b0}SczNMaNL)X1O6GrxzEadaQ8#6oKjtoC;UgTq@9Vw%cumRxx5%DYaOCHbX%Q5 z$j0G3<OA_cZ@>uO&_YC6%3hhfW9^V~31^KkR8SKB^5&IkT7e_F+`{r-Qgw<F+Q4Qu ztTj@uq2?~XMSklM$p{QVxQdXm_|9OlXFRs=1Pgyl5e0R!=2s67Tx+Of*@)yXuM^DC za5YcPv5k~fzzv6NQQ@mx#_;m28Fz$8+*9yX1~(ccDMGSh7V<G<+A@pySdNWeb70t^ ze04A>S(YaCeuTYmcBE=D+{gCtaaqA}F@c<stWa0mmh8AkG^cXgYW5zALx1U6hXTf1 zNIC&pZ-4V|$+6j0R;&$&OFA%`?)h=3UiQ7&FqOLcf+^(xUD*4`Y4-fSyvVye!&4B} zdZ3>DlV4gS?(ZJMZ`xo{>Q>QV701MXxt<Zou$-B%dAY#EW21EXUjd>-&C1Hk@j^}E zryz&&G8$hg;>vK^%!jip(_`t?7rSxyefO+b28iPvD&;47n4}>g?0?>}1e;KVtcS`D z8-*WaE#HSAHd6aiN*7;5lzkJwIon)M_chWr4#CUn($QT!e}lTZx~32PVvN-RaW;)G zmG+d)y3|<xfovHxQ?S%=%A7BMC>qxhH<V@_PshBjrG?F%)6c5EDkTVr9J<C08r1F% z==GWL!nhR9Xax6AkA{Vh3MGUIVXD1K)(Bx?Z=W>noWJofactaj=CkT@kxyY?bE<3A zyKU9ybRq=l=IgUtNVv8g+<im6Vtg0tR#~9Ut^;6bI(Bu$NphWu^m+$w*%@LhnhxbO zTrZaoSZ1m+TMbi(lcOota)OQA)sA+5aw3LJ3qKpQ0D1g|`WGvEe!L0YL5C(x#=Aw* zuHwZ)NGBM~liQKBv!R;%(U6VCO|&v%tNp!42M@y?V7a*J-{Z~G8ya-hxH2Q7_Ho!F z#_I8VCGFRvDiqj6&dcV@Ze%h|DdDph;l6+b{bWsF;@&r>a__3mBsPwBM=3X#Vzzg; z_~EXo>J$2;%hs0dLJ|BFVu*z^I8SHw_l*m8TtRe8%#d4}2+0U+NYgp;Xvd0;&-q=$ z%e-4LINr#20|Y*j9cuuPZQfkVi#xb30CRr@+BH+((26Z*2hHLt7(pTRW_`VXx0jZl z6}PHGvNgGn>BJw^Q!2wlb4G9aluO;(w*(+WxgW)$rY|?Z)))$;cVF)0lO-D);wZ7C z*!#W!@k}Hvzuj*%zM+QLViwYI%x0K1>sKeb4LrQ*b_*B2FkD(l0K$^-9k>^(uyrW( z&5QhU%fA1cpQ+!AVsP=Q!)*ly`DP;zxiy-2PKoYjLhNVQ*TlD9A7+lIg{vC&a|d?G zXgi7!W*b3da4!Y?fdt$huO4M1x29SvGtdDo_w2E<GoIMUE1?lf6>d1w@uBa)D$*|K z6Kyirp|9*A<x-bAN4N6E;JVWWAoal9jzeK?8uUlO3uI*Ea2&-j*;<D|Ze;kpP!nv5 z)uX6MewIHJO9@Y<KdyD)I0pPuBE`@}5>_tL$g~_Ix#jaUXQLuNVCn^rm%K*B1tuHI zp1TDttPA<s-`pH8gh8JuH~JkE9k*w=e(qVLL%)0j2?O3+%*JV=4zDFt2gNRy`XewO z8!>00CE`Vc=sm4N;o|vsTzjw4^sD8$x~bMwP_c^M<SMB}`&rM~V<mFU;c;F;?^nb5 zk)H%AgX~2(!rw73BGgZ3<Ja!iHy7r;dR-_ThQcEsp$Jyu&d41={vd8^+nrWjapKen zkwj~+p!u859M-thS<)!`X0y-iuIL39^z<l$A_~bNAL=25u__X&uhz&q&RIdL%B`j5 ztplCwvi39vG{s+nPN@^hKM1CfAKVcy+UEx_z!4dCOwJxfucMqjqE5gfiQWC^E`l(% zX6gcRlGiC^$<xM&6FU{!R1WJQxVStaaq&{+tg|`?eQ-E$bD{LY7v<>9BH%D+lm%^* z*r8lKZr^NX2IZzya2llT@=VeqbB~@Jf$4rSV2Sx$B-j7rVK)NU_c2KNs62qTc;q2l z{_>KP?mD@jT9akJL<ECF_`$@H+QdBky~u2x`KaJfYW(ucIo?8wzEf`mtIEf)^P2kh zy4~MbKQ2>8yftjAmNEmxA%6_dC`cRl)De5%h9018n5M-K767p>m(PBE!w%DlmQG#> z4>j0kT7onO|BC-b>P!C1;gGywlNh8hwDNbc=(<+7w@ZDo>O!Le+AD8_Tx4$)>YXOa zdLnU{Q0#6>a}>4IwPo*<B{(5Tx+vsc79&3D0;a7U6h1=9d8luHZ&W(@6`3GPYgNpK zaW+$F4Q{|yJ-1leLZeRRRxqu390a44NLpNTJQDFGd!G?05%W-Z;^0jOF3&7RRte0X zVuTv4wf+5>C^1ZbkY+8|12m*a%+FGw@tit)<k4Lf7V`Zz;QGa)3>#LfOwx)|UFxqX z+Gxi$yOEj#%HAMxo#alpuH%Et%i-lGP++859{!$Z1(GfxNl|#C%U4F*u#;U`7k!3Z zFRk&^r@)JaOh&Mz|3YaTy(`}kjme>sDFxERxe^(!IqbVc*Dor$&AR~Gr{&t9D;l@+ zGdg%XwTE{fdD{(r-}l})PeFxXD|Ih~;_aOEvF^f8JNi-nNKRxKgB6L83%lxIG&P@O zykodtG8MQ!2mL!BEfUQL#i&_^5uisvxZvOKO>ad`URDpN3`Gi*qxF=m57_<qbWEHO z5`KIfRg^1#yIh3-o4X9vmot8pv8v}Wp~MQl)PmNE`H^l&cP-;P-=Q=_T|eOmadVH) zFQ}otayA>0xx!&|cI=NuEo+WAJsg-U*g9sWc<|uCe2(FB9C@<4^k-?S)B1{qD@)v= zjb4rJAHUyv*!Qmd6E9#@J|OfmZ+`3pQO$JeSxVKKG*_ew4lR3N)+aB8i2KDD2{t*b zF=_S*I{iRCfM(ILX00$RTuJC|*fFV`AYw;P|4iEX(hWI_u0P$fDy~H^7q2dZb~*~? zOr!cva`!D%hqzDDt~k!eY)yPcyp}#&hk<+%p-|<fmg-;cfZy5ojrUnsz&1OL;Tx^E zH^b2qUfiSmYbj1ZR%jRh<cSP!R`UVB_pR<r%tx;i_QZ0<bhTg+!u?;b*qU`N*2;Dy z==syKO}nKf66M$9KFYszhi?q%-q1;7ok@A&dyUJHe%8+BSXj(S{o)OfaZ8mlV^VJG zS4VKF>R)5!9Kk?zL)5`IZO1)-SGqL9*6c9@09`pfpo^exVMuF86Lc=fGswqZKmof2 zR##BNUposFx5x{c7<1XHOG2N%Eg}M|_6Nw@k(w#n2h`b|_c55+yN<wA=Asiov_xaR zEH%6knr@}g)dlu7ERJ!W@R2BCoZ47JiDlOjI%d`hzV=0g9-ULMCZ+jt#l^bfD4J%0 zMUAKQ5G=0n9b;K47E?PpTSqC_ev^VCzQJtClwo`I;=TEIc8N>?LG11;T1yW{e+<Xd z)D5r2^G4#`L<L`W&Y$o^)}iMf(<<3MP2lh_ZJu^Y$W$I<$3NP$Xj?z0N0Q;@utbj_ zx!DUx(uS8m-dRKA7dg5h6pwOGNNFIU++$@2Gff4P+7>DdpOBK;p*ZGYp*f;hxkG|R zu=AHsK02C7vIRKKBT?ZX@o$tkG@77T;rz*r9g25hUolR~HM}!SuI-4!CmCN9Jwr4c zOJS{2pRVxqmyHaj#(gj0PYap5b@XxP&-#q9qFPJl#a%6uQlPYK>S`Yw%TcH4qrZJy zUS5W4LupI>!;sA;r5cRy)dT|d1Q=Rpe3^+5PUI|d0CD`=lMft#yYD<>L8pYUJ>UyI ztnF@ZILSYv+T9$@X3pX&L)00qPmJ>53*OQ=nV+(dOC4ok`njA`5vXC$n#O1%cju@P z1H;Q0qthTsT<J!xQ~H398M}1~Q@oK&#s$3_qYs%xycnb7qE><%qakiI0=_FO%ybiW z?%qyyVZ!53whmKG@HJeV7&ur%$@qWGPKJx)44w;u?rT<?)`exwe_KA|{sRNU45%nU z%?Wp2);Bw$epRu!L-<&P26i&OkUD>SGNvB8xV13SpZVO;7-L~Y`ldfL60R$ZBK$L` zqqJ7Im1RcS!cpv4${*)*?@gn5dmgVlgtwesGS6`f6a4CGA4wAUC$WsKZW4t<ARE-8 z%4htauAx+=tyyX<X=Kiv6IvK}$^G#rLs(VI8&WOe^NO#2U@6gVG}xPlgx1L~IWR&8 zD|$Vy#&}oWEEg`Zp5h&JpGA#l`4B7-F9K>;-kjAp8k!Z~%3oQzPc+%U%#2#<IsIY3 zaN$SX!8f8W)(hH{mRCc)Bt7o5Ctwk1VllXT0g;?aiXnbY(k{LDee;!T6~@pfP38v1 z_U)}Jy}LtJ)Ky)2yse<67=0PSZ?b=PC9C>MA@s{PrkGF{N4&@Jq~zQ@hRgJ(?Rr<4 zN<DAb>Eyb*J;2KKx~RVh&P@uph9UhWd@C@>(UzHjh7=07Rn*&AOQ{FGbOz&%o|Opw zbtLk}sRR5#HjtlxZAT%~La)%S#fp!bHeY`zG%d`xmN3o6ZeV7^a1%o=U@zXVWuGLy zschA_Z^E%|R=9#WvzCydt}bwXQ&xs#Y+)D+L!9La8<?8yvcmZ3J!x4;ZH>5dk{+=- z6BhBBv>2QsNBru$QqND?(}o_*J@BUf_5w(ABi>UB`eqi=<reycEUcBr8oLkrDaImh zJn_=p3dE-eHSI7Wg71k6B#{vRjbd^H)1^zL=Omk+ddFgzIpCWt3b{#VL6+d&SqcCV z5y{#sxsZPnNlHi2T|gY?TDT1TG~3DY;r19v;6K>5n}tWS$v{{>^d_tctw6|M#t<#u zeYfx+-(&k%Pi`E~$)V{Z3?y+gXz^#@rQ~jDdL65bQ-&bD0Vk2sC`KIT4T*696oAco zW*h1E8H{k^*!&z4mZ>z4C=$7`^1gAquA=qHf6~}cb48TgHp=Gy^<&|^F+=Cp$z8+) z<LuDwdhd0kb%P}|crYFmpncmyU^?rdOPVUEENGU|c+s%QTB}ih>z>6KBY+Qh{^OG| z=AjZOokKAc?~;**4o+2&#W>|@J#@S%@YHsaPz~o@WNBXKk?&vJc{v3^VAqJZ`v4vp z$jKrEbHpDqq;_I8xZQs00(d-I7n$8!=P+^2Y~VHEeuM5R>C1ds$#<Cx)mYg4>=Uvf z3lY$f7jyxH4Wo@n_825P&YCC@&>x+4YS83`;JPg0E(}6`p4n_fYS4$SaZe%jz)gxP z2+o#Cx&XTgFNSHK<qL&6&0zDx3y8=XTQU$GG*1mJ6yGoP?5#5p##qmk#NuG!O3E4| z?x$O=<~-gal2OPdm=pT;NeU8?4b(M>-zl)wkV&?dk`;s@M)kq;ENlYVMi-ffz6T!b zKxftBX~zDP+<ir|(<Xr~CjZ2T{wEy!e}p}uSbpP1fx$~&Z6Z9sSylVf$`GL@;#&<a zc%}4US9F_w=9S<~K@$e*W_-d~8}<z`Fu0*2+Ku0@@^$FC;)7n5zCqNV&4sQX18LvC zfA^glXIcEl&Wsr?=T|{BQL3F~&6utmf;<O`U%-HTDf)dRFYwLT&Dq7ZEf)o?y~|Lx zlJv~9kNw;0kc|(<e<4{PSo=HXc-ll>J2)>QG4TXfI@w`Cr}Z?IhK(upakI$=A3%|) zAT8h3EY>?yhh9_ZcIm8tMVYVZ%)5S~o<QU%cUe_Mr3bqSGZES{)TnOe=@Y>&&-|^# zW{vk`mhHOQdGL)Eymt@<^~55O#JO-whC#l95Y#z5Y4#VyU*+<}`Hu=>*!#}<en^SC z9_mB5{6I)rzMqT?$idBXT)-XP(KLe{^my;f2#-<XtngN`Xckc;3NrVPq9O$GQRgi$ z?At6zGa1HQti>ffC9<<veI-Uq@5h)?KdXt{>G!LZiA47OPiy-h2n|Rbf<06D``Es7 zzdnD^sGfUt0e^{Fdv&{D)3pV0L4$oFGT=lR`JfHY>ya+ngCQX^A;vU;k!RvwBD4zc zIe?;M=P_F8e7e>DgD?w2f^4o2<2z!Z`7MI9ym1%M#e$TVngo_53}yqm>#>=fV6>hH ztC<hm%KCqFx`n#YDH-HeKLI8t=z`VU{Jrsk>qin3AvglF!6s^t_b4R(aAns#Al8|) z-Y+U|KhmNg+!D6i*!VmkPN)V@!DEQ~I^CqqO{A|Yj@FZzbMI-H=P@@f){5n7zGb5y zJFIR<k>K2co7?xTf%g0Ln+>Vg=UFreV`Va{32l22Bb`$XTUR#1GvPOBv)8+xk6Q|w z%tJQ{y^nG+mj`c=1BV^RIv9eW#E@Yl+3}S{<+R8O7x=iqK3s3D9rS&RoZy6CFCI-W zna>-S6!xa!2cOJOS_m4`+1M+!Gy?_U_9J{wUUSBhe^HHCXB?k$jc>%^{b+Dt`?v-l z6E+N~ah-M#;|Hm08g(`a*7N4N$6!bUqe)a|uzodQxf~n9P26fm&=!3G3vSm#U8Ap~ z3;WKR>APlZ+}RGVE)j*WFq|1tcs_FpYTfdu8L=$A-Tf$k*NnsQmIgE|ut`DSkP)yq z&?;z@9LQh_hx}_HTzc6s@x^#hmcVhGFObVyz0ShHKb)`+xDlbxeL<U|I`35i0;jl> zK}OQ?MzOs-8E*EUf~RcS5Ooc!tJ%kbmz`iS6UrO)BBVK3jfaLWUnT}xi4e9P@#bbT z@~QLR?EX;*i{-{CC)~qp{Ex1ATY7LXv|2TtIR-J;xbVKT<x>S2DlWY5Q0x2>k#RF$ zF#dqLiVvO`8XbV*_POxP4<0O;53|v<#G*(J<WoW|9;XXX)Gy^f$`I!+G`OvP<%!Yr z>hc#X=y_KnnQDx7C#yYAtBE8B=m0)YozdQ|y6<Z^$$_}|Zj%|BJz1lPKH4G@dBZT5 zg<-U78m!gLwj7!@BB8x9nL48gD_0XVd$=N;gzjoq5d3=;i7fY1XVhKi08Bx;I5%K5 zQX*i$f=)g$FORW^2)VV&N_Wb;hyEM3rUKlhBH7(fo$JG$o!ohYEp|c#2mSKjiqDr6 zn%c{cz?PLMRw?i30Zt@rKh0QZ#qD%h`tPCoFE-0R>N85){?yCS+oxT;Q`%}Dth4V4 zJyhMC7^z&KY1=m#&a}Rx+5+<&R=ryuRJ25<`~4c@P?iT;6}XF?XIm#e$xAFy3U=4^ znuWwj@VEC}y&PoqF0tmUe`&#-AcQ?aIlC^3H<s2uL+Cf&XzcU!)O8iA2;QaZ?kxY_ zr7w#`eKPAm2JnXade}V?ygoU`fYa2w)zi50x5aCMUa^TxA6!JzcHL;ygMkg>!`t0E zyQ?RUJ{=EHK^YP$E~yB{{zmcjt#3oNN3?{Rvxb=t*6k^WpUDW~-|n&eecI%u1Vn}? zx1!#EH_XQ@`p{bCx5iQE<eA+&%O!}APp8r20}O;{H@;_S<kn&+{IVbZrVv&py8^7X z4~@0If#bckElB#F2UBO3K2<HPyhE#Y-s2C=I$ThgfBD2N4x$LVpueLe4K(@#*7~{M z@;+ag`yINQbD;|nuy<T?h)%aQSI!Ex_e#bsX}(EanR*kc==Ug;9pR))Qe;QLaj{{A zGF}4W20dQhG^CS!rUhvsaK#4MN?J#gM4Dh!WZ5?3#kCFE^qX7t0lE@~>1Xm(3et^0 z>Rl{|yz`v<;dIvcjT?wCuAQ9+B6_^UbbiDFZIyP1(W-56N0Yt3m0Z;Pu=M;_d6Ad( z>Jj<jI3aiBmhTyag>le}O+(OdeDa3ytL=I;F1FNgRFY~k-@WAwzzEr7n~7v3m$R+9 zzXY7-Pv{(eaKr`fB?^vMk~RyR#itMO<=JF}0mzT2M6#twQGAEDp6_<AJVt~ll5mA# z1KXrD#;Hhd{aEK~0K$UbV|!W<?hCF&^%`Bo#S*3nLvz%X96q=YZFwH17@>{a8x#U5 z_2DTTQa|%rR%^s!ICnA`NkZ(lFEbj37PeGgJ4>AQCuOpOcs);4711JlVK;6V&t1_s zwgZ~PT%gwssC%#Fl9^4e?Sk;~S^czXV+k86QjS$x4;-l_uHJK+e$YiJIc)?UF2xSS zFFo&5VxS`;zkPERB~LNci`KAg97ZM8tT|gE%lZTDL>UER9BGnu`&$OqZ$$c;nxI-V z5)p7dlrgdrwH5|!4DM-@v^{;D!1}pMbiCmO@LZj&V%>ewgVExT3x2-ZJfZoPK~^Q4 z847$K+E)|Hd_%Mv2)Q&k^tMyD^#R9Xzxp%D6#wb6Tf0J>o0sT8Zzo^#kg;pI9(jID zgsB}^YKJ<IY+=vqH>FgWo{)NBVjYPg4U7<bXKPq}=fvpsCBBG&yTa@te$~fV%tJM# z;u`j<bPPePZ5S!R#%;44*j}|5Yz~|Kc9F`@&chG!5vdWGe)R0;-OeNN9vMqu*qBvE zePN!88-BNj<Z9-?ZGGHcl)ikaTjfERm6)eY^_?V^emW{wkt7~*585rxP)>WkeI5N~ zs|g@JSE1*bWO-JD{%cl8xx8QaJSoz%Is>r0*@Fq2(zNMY*gibQqS;X4BF796sd%g2 zG=CeC1@*mnLwwdY4jy)&=MRJx_p@S-Q3Hh~YkrSg#vTA8><}CU+N|M<B=%h&zgsVS zi~#f9G9J)2sO|B{6;L2bmBe-RsUr=Di-S5gg?{T(NxSl3g30|UPegyz@<27X%UVqP zco|-;IS!=mO5h#mSOz2<^1;%j+0f;lqYCsxS(>K9pLcG2xYlA5RJYA{uK(79jZc%8 z^~4ST_G9i?>DmsQkfQy6;bn0**K%{TNmFy$jC+6)!EKa!CINXV*BV4~?~zOkhOTCw zT2tgTKw-ixQn3UyE_rUd^>GAH&*%4zaAIl2{2QHI!I>1!V}x9PdZGU~lOWGL^-YA( z1bZ-ht8Jt-paa%=ZK73*ksIzFfy}-+naPm)qL2wo{AHM|Fj?u~?+jC|4z(iLOiyzX z%qc?T66FmsgsqSpiMzu>h9u=*e9Wp9j)drp?GVwRni9m@OtGmt0{`mnL#@l7Hdzx8 zVR5A)$WI1{77&(Y;sa3JVF3$St^#Vvt1=$>G-*20xpaE&CCh@f-D@|7fJe^m!+9-k z2g3-{qDPG)gpH8blMEeLw9cnf^IH*gN>)5g!o<R2TBttIXd?}#-eXDjuYV~MfA!^> zGjr&?KoncZhx$9mPzmC=Q{L~%12-0;78)ANUWDKO_1S=4kYppv&KrLf!X7>qw!ZI3 zM<gYP7hd%S6zP|Hp%QrB&l03**yxT{fe%69Z6D8?d#{hv1{x0$l8CB~Qm<y0d~cr* zQsn*iFLbdNWQ7n^uWv;5z8cZ+arH0jJClTr<V{AXb_JC_p+U^)Uq$J2#+~uPK!IgP zbX3`{8-q^VxO?-QsHK+!yWc;mran<yNV}pMG)PD<77Ghry7Ogmk4wcBZI}ye6hAm% zVVdas3=Sru7<SKOtdX*q>iX0Dos^+cIHK9SSg3rL#N?C+TMIrneo<to=CLjW93S+) zltMDzzPW8-EuYXbf#mvPml>4sHvERB#xV6L?kr{dg;#(=Y*-RgmIjOwYCFGdB>Xwb zu+Re!ETA^Eu5G%c9f<N-3H5|+qpORDj@u{+Ud|3bbel!s2rS<<<72|e3Yqga3BLw2 zwk2mU$6j#%uuDXTYA}&maxaigu4_j#Ec#cG2@8kAJ~Zxok?oi<Tc!upp|W(;`#qxc zOSqL2Fu9~d8T;hTBcCmSYDpb2dL;bDNjoW0+Q-dX6|G0*0Q(&{XSlowy~-pm1$X;m zu+g8WtzS4v9s7P=!{JABR_~E4hLl8q3gze+sGcO_xhCcW?w*?w=2y7w@1t=BX;fL5 zAY;+W$sy*0yA197bhl=^q)}NBi9{m8@OgrShgR2TD(vcgAxDNawQ>XtIK)=*?8fVs zSli>bqvRy=JYC1{X`uFYGb^5?X??9)wc)N-f;qIv=S{)&%#+HTB(1n34!<xjlK+pq z!2g@g^T%LZV0}n-s!p4~Neo`tVZ^U5{j$6JG;BBNVB^f!{b95i_IGxF+4aY+vUZm$ z>o1~bg-@T3fyvRwDjxb4`D&qkn2D+@UyeDq_7DTr`Bf}&<#TF{XUZ^7el2!Tq3ixM z{P-;GY<T%;_4o+E94q-G5H;aT!c>#B)_W{j!?vxJI>V#7z-q7uFmb|wz^r)ljYPro z2?bLTdWGiJjKtRMhG<qfYlvBbIMf>ID@K>Eogozu@{kM1VOrAkT0;fk+IrpqScEu- zAf5^OScffi&^}}40<P^^QlO1BDS<DZaUb@}ukFOdgwC+)e@zNTx~{zf^A!33acvQw z462^6gd;jAQ#B3PPK=`}7L;>M-<*ShUSTA9bdwT2-jA01w)g>GBktdEV1MMGOIWT( zZJph>`t<)a%6qY(E%z@b2al?;(n;6`$3-k%?enLt_HO9&I13BTq$=+257-BDFJ|DP za<NnHJoN@U&w=Y*A6(vDP`R3;nq1(edR6snT~GL^pKFm>XV4NQqn;4oOWe{~oPV94 zsO#>~%*QV;@x5n-l_}&aV{_&87|7lhWgYO2LaG*(N94A1)Uy_-5%Ts~NXAI!ngHPl zI&Yj;UUv#Z#46Eg{c}6ar}fiSQ=KvsgyQ=P0@PlGo9f`3I=%+coPRCA!#s9;o;qV} z-_^`iv_7rgYSu4ny2vB1u6W--yaX14OF)s)EDE}eRHQ+?TB;k^3N2O2w|=ct;av+C zP)`C})%#=o^}S52S=gD&SzU=Apqp35q#JvAF`+~2r$z|SFy4KU@0A2i)pc%IUe%0X ztEbbQSpuQCjuPl!1Afn9_$XL4D;s6%lhhkRp}9xM4A}&D;P<*qT`BnZ;#4saq&QWJ z&nHNEJUY7j(v_<tR)?}-Tr?pKDfk{w=(y1I`1_xUaaj3d>#xY){x9dqwkARf<|(_g zmlqdR9<;xQWrk(R3kIpK@QOEfkR(8px{wAu>DaO7N#g!R#C2VhA?Uvw>&(K(=D2l_ zmW9j#!Uc00QJ0=59{)u|f*cZlesaMgvy5oKS&pBY=v-yhj&w!SaQ(3V8Nk<u7}~h# zNGlXwg6h0wc4#bV89&?6H$<~D@x#4a$ZhiJhZc~DKl)52B@?ppI7_YGHwJOC1Le>_ zlwckbI@_oAp<jXH7{N2@d}fmZqlJb4CGunTuN)EB<Fia!J}&t_;2As?%kv3}n@_{b z>Fd8<;D0{znsB{8ugky_xFNeEm)uWV`~jQIv2ifE%HI{%qp;jN)oOM1kFR~ja661i z!(LQ0db4UWS{;^O^)$`(-Z@GB(n+|Y*)F?TWc?pi!AXi>3u0cv_33GQ1&CO<`_TEM zE3JuN_K2PJ3X0iekhATZp#Ou6u+0DJMZ;L{pMo)ts#yHs9R5~O{!@RM$leX?24$H) z8T^c3Qw**+_<4;S%nBw}jNPtjA73xy>0(AZ;YDYJKUfQk)5j4W<g8Km?f+L;{`J#4 zxNS41P1e_zTqdk6Op3v9f4zr9<7=Mf%8E?&jf)L%=36VRa@_`jKg5;2Z<?A&Rg{+k zOH$vFw?}hOa$n&PVN$%ZwHAER<B*j*NQ|VyY_>4Oei+)kJv#DF1CXlsKsZ=^z$=Fq zYQP#^emG_+7%Zlehs;x#*%9^g>I9baU>!@XF@js=6^{O2jXqOzk&f`UqJ@jQu`-!w zH<RZG!}#XmhoqF=!n5`dZV&5-y&vI`^Wh{x+jr59qLi`l@T)i32`f7URv#ey5AfQ& znDygqboF1WXSc%l8-?5A#g4g$V{0%(xqp_w`^wfLIR5tACVDk3`Z!K%nkJLHa?Atr ze%29><YPs&35wlBm94xSy0Fpu6$Z707dyQA|GZ`C7-JqQQnMZV3Y-Lbq}wM!z`;Lc zy#He6!5NqT&cHN1I0G~NSV{kR%Un7A=<a)l#qzhuytL&S>kn(B#-~^tU|<rV)oEmL zWWMM*p0nhq`TuD^XDZ|tit_&nd|=VGo6f<i@h!Xu{s+)hq~<xg!%-3;$7$9lI8)j4 z>Ltqe>+`rWvx8k<(LJ5;?+`yr#Z8Au|EvjTpvD9^<6lQJuIL;I9s3I|f`dt_a6R<v zGn_g5m(qNa_>lP$xWWE2Q`PWv*8G`HE<BxZdFnFb&vZt@(;4$;I{(w?CpAU?X_^!} ze)n#Me1S7;GAbLF$LcEsPfXPN8f{mYu+48uG5YvV5n9u=_NO$d$iX};!LB?IA-5DK z{+5w6H5a*7Xo+Xa7r27hs9E8=kFhY>ceq}hSpGkWKO*tfk!EQ{QX1Y1Itzp47OB|1 zEH`a@>|o{LYKf}Ql*qL=SbDt83xlWT4@^|O8NJsQ;q+BGd$}O#e>DVEp<39_!{oF2 zvP3OR94;xo7W36+IDRyTZ8Lw2tI69cNQ_hz9<q}9Pc<F$)ei9t?I#EivMc|wApI;p zzuk})`(_le!uDRnu`55U{><c{l@CGE>8r@Xssp!}r|qhZZu=80`?oB7RdYNoAjQHO zBW!B^H^oY~Y!}EEB#BRO1vGr^sd=yphtK{MhDM{)@wIbQMTyFwpGz{a1C^JviXxnv z6+&3A!)s^Vb~$ucy&0FR4E<^0xm@s6XL|4y=YKc49Ii`OkF2;n7!8Nq7;prR3rFAx zf&U*_yBcM|3Y+}jy8nOU<^L$gG*K&}%Lh0z2M5%&ApUP*=+6|^Fjb2;<g`qCQxF-? z)cy*6+DWngwoGtO+MBN9=vYnWxF;PXLR!D)B5yN?-J9%^0J|sb&cbo^B;yr6ele~n ze?@eG_D$N;WfzN>vJO^JgV5_8uo9#~r_RDUDja(A{*SH`I>l`=cr(6QsJGAgHIV<K zF*HQjPaF)ud0@qPg(At&eXKr$1O)dKCrR;4iuG^B{uJxL!9V|L*3YSpfntopoO4-5 zq>Ats@O#`$<WPg%@qDoP?mFxJuom0u4jc*53uoMu1dk>r^C&_GzD_)>vdLPy$!B@) zuo3$22Up#yo)MviwOz5Q6k<qPll<uwB1p<*y_<p%hmxvWUPIy<wt8R{2W;7V9l54< zw^pVto}8)`MR9}B)=7KjuMhrg!R+KJ*g0*G@$BIha$daAgwP(Dw`zn-OdJ6gH=?Bk zswEqchgOLoZ2lL2IufZP+$XIFfQGds7(I*vwkvu8*Tldd8ZTR!LMLJD!86$WyB_=w zFf#ryhCz!ia7H<vUBQFk0pg_tp^Bu)S3v74G0kGwd~Be3O2}kxvXxpJiYw#~W&f8l zK{4-N4RKHUa`q;Kztyx({eA84jWO=my6g^ik<0}B<J}WEYc6PCqH4pWvr~5T7&Ine z?)G<G?O#$LHTPOF!v}G4TQrE^-YY;F4f`O1J=bZ#Cl-~gsiK?Nb?vh1_iHxxDgp!B z<2w7fUMOHA^-M`H2Zy){fU$H!Zi_xWwqKb}6|ObiDRNPSNCkVTz{B?U`;$mnfrKFL z>PCX;o|Si?!c00r3#NSIQhiaxpD+z-R@#GGQqTmnY_(yg{Mbdbm0F|1jhhbA!ojp$ z2c%fH5?yh_s<y2jmZZDMHVJ8QJs!@@qcm)j+=&T)=Jk@RQg7Ji@qM2%s~}$4rjvm; zcb2Gy%P5qpr8BQ&i9%T6tP01T=ap49)G0RNbj342R0A_1Zd2`pty)M@dcgUe+In|r zwIyRfXyhN$C~SXJ?_%Ed5u>ke(ZPsyC8Z;BiqyZt(RR9jHSfX-!Icmk+>v$TH*B8< zN=ikdA@zuEY;}}UYJq4k6EW4_>VGh-xTQUX({zK6+rG(sc_K>YO9k$M@9~2HNSeT( zQid0dQ;LJN!Pvm95C$&dtNI|-V3Gi;yZoRtYilpAYl=6{#$4WD?HM)pEv3nPj74Gp zc*XaGvEpVZ>FVdkFv4iH^bHvGJ3xd|-yB9fvz+$M^9rxU!`z&UXQkY}&m8plQ;TD# z69Z5uS-aa}s{o;6xoMzSNh_ML5<6Ks`e|~h$+mrF=3VEO*p!1_bXoStO!Ju(8WEWx zp%)Y|x5r{3L#aQw{b(Zp*(<BRm<<?xu=h%U458L7E546u8Cm>Y+3vz7bd|VJxp39u z3@C5u=mW5OYwZ+G>GSM)y?@Bc%Qs^2y~@%_1$upa=7m<{O_9&TSH@2GfW5d4X}V!S zyX9JQSwry*-DmQ_y%;Hrm5H1$Q?>cvGy*<-WoOL{|BhVG{e3!R7~OmwZ8&d+vMxIF zpfpylF>W7oryYV|KbOO<!-XxJ;_w}+)&%s(Xo%sOuA_B5&h94OT8#{Fi&$LvFk@pw z=m)><HFMUDl$_`+d9HIrGd9I0$f$0C_8ychvkqRv9e1jFFq!%i=Dh_@xFN1qyb33I zk|fJwFkebf%@0!hnFxj9`7Htc<El(`5124X{H`9xy0V>{jRnYutM3iKbb241ASNe5 z8DDC`1uy8#^gPPziyBr4>GH&s>BLhm`0uvyG`Q9i6NI}|$1gY+I!n8|?eca>jO$pO z^?f0DXZ(l;{TK;#ZeN@`M%wXOLD+%R_+;$4XsBGOQWr@;&>wfE)j-|b93JCgplIUF zpqN3p`NegBvDDW7x$$lfjn}Ie!Y91xMq9B%m;G**w(2ddZn^4ADEvtEB7$yL|11LI zDRw7i_k5lGN4}20*zTEm{gfVpJ|G*}ZK<;H)3x~PR&>!fN?{wL+&a?$!%q^oJ!Vxn zm6|}4MOWbG11X;;4wv6bHzd$5Wr(u_HaMO$n?5*{pGf&OL}W997Mu|G3z0|Lsx<2z zH;Dy`bFw8iA7u|Gqt~ttW_AlXb`46=q4!qF7~^5ℜtQ6z;lD1*{lOdiAP^gxSh? zyuhmzl2cjryz>L?J??E@1X1N-(cq-gO!i@Qo_P@wdR@h!{5T%{LNC`mY7{0CHEy## zPFBM3v~7R8e6}IjCfztS>s4K(WxJwdkkrx48aZo%Cr$k@ms7D0@t`Hq%a(_XSRpJg zs17HHse$PwcWX>p6;lOoIE(fdk^-3~K>=L4ssBEMD|8Rk4*Vs)iR!_4_ou?UD-#O$ zWbB)2#xoYURg0Z3tEi9pDNp6O`h>;9uRgk&b6Fpm>ZZIq6OAvn3(Sd(J(}erxII&I z3}tDLi}tysje>p3=r-N5f!%{)BY!6zy&;$__e!*65Bycus;eK33vAu1YT-lo$X6h^ z!+coaz?HOmpkj?Aeg5@IAS#REhK3ZFib&up0*Dd9TOY-qN6NjBxzVcxHpUUzpFq7G z-O>*}r4!(Spnv~PK|OP!cO;2Zwg`eRA=&_C%fc%Z``bj0*vLxw+1I1aFipW>8;K(; zG@z3oy%-`<We6{8vq@x(9qUKF>MDY`VnBZ&e2O}<W36y=_n-kFnw1!8=m=cJ7ZwCO zj=nPeS3PT<yy1I49JT}#(!$lda&m+g(c`jeg4+(CWl`VYL(4T;E(;O2uDgrDki0$2 zJQl_hU$-Dn0_WxJ_N(_85tSo^S_h|ST|n6L9C#4>Y1u|)SHy7#9a}_yCj)D;g`gOz z!7u=HXq9ba0RE6b7=hdolp!>FqNx?MJgsb1)CIcqY9R1d7nV!~u)Ri^@(-=nlB=() z3^R959xy;dte_shbqoesKaCVagHO`%ksgv^5!~U}P%v?Eu0nomE!yscb@r*X<+?;g zQ9RHcdJ)9-dLlUe7)z4kqh$$OvqcS8<LN`yAW{+tOa*FOu`P!^^y;u?jLAKiTL{4` z6%!FgNvBXv;68@3)=mNO(4#>~iMc0mhwVSaqjMid-hFr%4!+U`l8hcTt=5+v#YQtc zml<_U#T$EP(2Tm9$9^m`tLp6%<=JTp!Tzq}ID=0dow`E?wn_Sk{Jd0W!2qyL+EO%+ zzVnMB1w&t`&Hv>-{I?(Re~`#-QY#<qpV@OgJ<2`l#X2s0cs276QR=%F>StoS#pQr$ zd_dnjBN_W{AJZ%Rp)&NY4ZBB{RZHi{s=6+EZ8jOE)ALnWTPgT>%kmX=Nj>p=A&yh@ zy)g|-TvH&eD9}-MJ0IY+jIG-Sy_too!>_A;96J}WLhgEzY;AgD3hi=GQZ6zE{nYaO ziBeH5C3+o>+I$yP6g>GO87ZNyS-s2ZqZJ*C1>#Vfw#XMGx369H?#%`yw^^;e12#-1 zGV@MK9y;zJ$=wHP(RoJ}&3@NC*iHNHB!;se3Zy^WO48GoTk6U8YzuP2IOmBXsjPet z0EvfI<;y3$*dlOUewYHV`ZrkvTQCP5&WJFShskeJtvw_K<0iD?VWa8<H>9Jj<U)bg zQK<0a_|wGA3uFxS_W^*ILR+xuhbrqx>jlB)q+>`DlvFhiA~zyC^rD$r5wc{F9_@g^ zSD{DWx{z{_-Ak<y_at;S#I#k(I(VV1j31DXkHzHW0M?Exuo-9v;u74EUSX!}wuy-j zJ%p_h>E610f?Dc<dMSEc{C8FMuiynW(jiGkMMan?sY~?5Y03X<9>5XY73U8(Tw!8( z0^CYm!MNl+%dSF;4Tsiz_jb6{-C%I<o3_-0!*3h9WqwcJ$2udLsr5W(z{_^#kUcD4 z&NVE#{~~`X>y5w<z|OvI<09acf(&26$($t43&1A*sb*Dyt@@L`2tCMIaI19ZVaB>7 z0q^O)T8wLU?@?LF@_^$<K^Jh}+=KjhCWiTGc6(VaaXU;Z(FhEGSIlJT+9cFaylydr qJ+N6Q-nI1i^^1%oC(TR$S!4d6KlHHt(I(*eC=8yielF{r5}E)E=_2?5 literal 17539 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 D?a*5R diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index a78aef2f3..0ce6ae705 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -142,6 +142,9 @@ public class ShatteredPixelDungeon extends Game { com.watabou.utils.Bundle.addAlias( com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight.class, "com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight" ); + com.watabou.utils.Bundle.addAlias( + com.shatteredpixel.shatteredpixeldungeon.items.spells.MagicalInfusion.class, + "com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion" ); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java new file mode 100644 index 000000000..32cf22d12 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/AquaBlast.java @@ -0,0 +1,71 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 <http://www.gnu.org/licenses/> + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.spells; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.effects.Splash; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.PathFinder; +import com.watabou.utils.Random; + +public class AquaBlast extends TargetedSpell { + + { + image = ItemSpriteSheet.AQUA_BLAST; + } + + @Override + protected void affectTarget(Ballistica bolt, Hero hero) { + int cell = bolt.collisionPos; + + //TODO perhaps different color based on depth? + Splash.at(cell, 0x00AAFF, 10); + + for (int i : PathFinder.NEIGHBOURS9){ + if (i == 0 || Random.Int(2) == 0){ + int terr = Dungeon.level.map[cell + i]; + if (terr == Terrain.EMPTY || terr == Terrain.GRASS || + terr == Terrain.EMBERS || terr == Terrain.EMPTY_SP || + terr == Terrain.HIGH_GRASS || terr == Terrain.EMPTY_DECO) { + Level.set(cell + i, Terrain.WATER); + GameScene.updateMap(cell + i); + } + } + } + + Char target = Actor.findChar(cell); + + if (target != null && target != hero){ + //just enough to skip their current turn + Buff.affect(target, Paralysis.class, 0f); + } + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/InventorySpell.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/InventorySpell.java new file mode 100644 index 000000000..26676fd95 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/InventorySpell.java @@ -0,0 +1,71 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 <http://www.gnu.org/licenses/> + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.spells; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; +import com.watabou.noosa.audio.Sample; + +public abstract class InventorySpell extends Spell { + + protected String inventoryTitle = Messages.get(this, "inv_title"); + protected WndBag.Mode mode = WndBag.Mode.ALL; + + @Override + protected void onCast(Hero hero) { + curItem = detach( hero.belongings.backpack ); + GameScene.selectItem( itemSelector, mode, inventoryTitle ); + } + + protected abstract void onItemSelected( Item item ); + + protected static WndBag.Listener itemSelector = new WndBag.Listener() { + @Override + public void onSelect( Item item ) { + + //FIXME this safety check shouldn't be necessary + //it would be better to eliminate the curItem static variable. + if (!(curItem instanceof InventorySpell)){ + return; + } + + if (item != null) { + + ((InventorySpell)curItem).onItemSelected( item ); + curUser.spend( 1f ); + curUser.busy(); + (curUser.sprite).operate( curUser.pos ); + + Sample.INSTANCE.play( Assets.SND_READ ); + Invisibility.dispel(); + + } else { + curItem.collect( curUser.belongings.backpack ); + } + } + }; +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java similarity index 82% rename from core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java index 0436aff1f..f9db87045 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/scrolls/ScrollOfMagicalInfusion.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/MagicalInfusion.java @@ -19,7 +19,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> */ -package com.shatteredpixel.shatteredpixeldungeon.items.scrolls; +package com.shatteredpixel.shatteredpixeldungeon.items.spells; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.effects.Enchanting; @@ -32,13 +32,11 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag; -public class ScrollOfMagicalInfusion extends InventoryScroll { - - //TODO transition to a spell +public class MagicalInfusion extends InventorySpell { { mode = WndBag.Mode.ENCHANTABLE; - image = ItemSpriteSheet.SCROLL_ISAZ; + image = ItemSpriteSheet.MAGIC_INFUSE; } @Override @@ -57,18 +55,8 @@ public class ScrollOfMagicalInfusion extends InventoryScroll { Enchanting.show(curUser, item); } - @Override - public void empoweredRead() { - //does nothing for now, this should never happen. - } - - @Override - public boolean isKnown() { - return true; - } - @Override public int price() { - return isKnown() ? 100 * quantity : super.price(); + return 100 * quantity; } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java new file mode 100644 index 000000000..5b4d5bf80 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/PhaseShift.java @@ -0,0 +1,80 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 <http://www.gnu.org/licenses/> + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.spells; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +public class PhaseShift extends TargetedSpell { + + { + image = ItemSpriteSheet.PHASE_SHIFT; + } + + @Override + protected void affectTarget(Ballistica bolt, Hero hero) { + final Char ch = Actor.findChar(bolt.collisionPos); + + if (ch == hero){ + ScrollOfTeleportation.teleportHero(curUser); + } else if (ch != null) { + int count = 10; + int pos; + do { + pos = Dungeon.level.randomRespawnCell(); + if (count-- <= 0) { + break; + } + } while (pos == -1); + + if (pos == -1 || Dungeon.bossLevel()) { + + GLog.w( Messages.get(ScrollOfTeleportation.class, "no_tele") ); + + } else if (ch.properties().contains(Char.Property.IMMOVABLE)) { + + //TODO move text + GLog.w( Messages.get(LloydsBeacon.class, "tele_fail") ); + + } else { + + ch.pos = pos; + if (ch instanceof Mob && ((Mob) ch).state == ((Mob) ch).HUNTING){ + ((Mob) ch).state = ((Mob) ch).WANDERING; + } + ch.sprite.place(ch.pos); + ch.sprite.visible = Dungeon.level.heroFOV[pos]; + + } + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Spell.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Spell.java new file mode 100644 index 000000000..62b9d4ac6 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/Spell.java @@ -0,0 +1,73 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 <http://www.gnu.org/licenses/> + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.spells; + + +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; + +import java.util.ArrayList; + +public abstract class Spell extends Item { + + public static final String AC_CAST = "CAST"; + + { + stackable = true; + defaultAction = AC_CAST; + } + + @Override + public ArrayList<String> actions(Hero hero ) { + ArrayList<String> actions = super.actions( hero ); + actions.add( AC_CAST ); + return actions; + } + + @Override + public void execute( final Hero hero, String action ) { + + super.execute( hero, action ); + + if (action.equals( AC_CAST )) { + + if (curUser.buff(MagicImmune.class) != null){ + GLog.w( Messages.get(this, "no_magic") ); + return; + } + + onCast( hero ); + + } + } + + @Override + public boolean isIdentified() { + return true; + } + + protected abstract void onCast(Hero hero ); + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/TargetedSpell.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/TargetedSpell.java new file mode 100644 index 000000000..a5360423b --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/spells/TargetedSpell.java @@ -0,0 +1,106 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2018 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 <http://www.gnu.org/licenses/> + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.spells; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; +import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Callback; + +public abstract class TargetedSpell extends Spell { + + protected int collisionProperties = Ballistica.PROJECTILE; + + @Override + protected void onCast(Hero hero) { + GameScene.selectCell(targeter); + } + + protected abstract void affectTarget( Ballistica bolt, Hero hero ); + + protected void fx( Ballistica bolt, Callback callback ) { + MagicMissile.boltFromChar( curUser.sprite.parent, + MagicMissile.MAGIC_MISSILE, + curUser.sprite, + bolt.collisionPos, + callback); + Sample.INSTANCE.play( Assets.SND_ZAP ); + } + + private static CellSelector.Listener targeter = new CellSelector.Listener(){ + + @Override + public void onSelect( Integer target ) { + + if (target != null) { + + //FIXME this safety check shouldn't be necessary + //it would be better to eliminate the curItem static variable. + final TargetedSpell curSpell; + if (curItem instanceof TargetedSpell) { + curSpell = (TargetedSpell)curItem; + } else { + return; + } + + final Ballistica shot = new Ballistica( curUser.pos, target, curSpell.collisionProperties); + int cell = shot.collisionPos; + + curUser.sprite.zap(cell); + + //attempts to target the cell aimed at if something is there, otherwise targets the collision pos. + if (Actor.findChar(target) != null) + QuickSlotButton.target(Actor.findChar(target)); + else + QuickSlotButton.target(Actor.findChar(cell)); + + curUser.busy(); + Invisibility.dispel(); + + curSpell.fx(shot, new Callback() { + public void call() { + curSpell.affectTarget(shot, curUser); + curSpell.detach( curUser.belongings.backpack ); + curSpell.updateQuickslot(); + curUser.spendAndNext( 1f ); + } + }); + + } + + } + + @Override + public String prompt() { + return Messages.get(TargetedSpell.class, "prompt"); + } + }; + +} 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 0f6716950..1e0693889 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -553,12 +553,21 @@ public class ItemSpriteSheet { assignItemRect(BREW_FRIGID, 10, 14); assignItemRect(BREW_FROSTFIRE, 10, 14); - assignItemRect(BREW_CAUSTIC, 10, 14); + assignItemRect(BREW_CAUSTIC, 10, 14); assignItemRect(BREW_INFERNAL, 10, 14); assignItemRect(BREW_BLIZZARD, 10, 14); assignItemRect(BREW_SHOCKING, 10, 14); } - //16 free slots + + private static final int SPELLS = xy(1, 27); //16 slots + public static final int PHASE_SHIFT = SPELLS+0; + public static final int AQUA_BLAST = SPELLS+1; + public static final int MAGIC_INFUSE = SPELLS+2; + static{ + assignItemRect(PHASE_SHIFT, 12, 11); + assignItemRect(AQUA_BLAST, 11, 11); + assignItemRect(MAGIC_INFUSE, 10, 15); + } private static final int FOOD = xy(1, 28); //16 slots public static final int MEAT = FOOD+0; diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index 4a5a6f1ea..e6c7b0ab0 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -792,11 +792,6 @@ items.scrolls.scrolloflullaby.name=scroll of lullaby items.scrolls.scrolloflullaby.sooth=The scroll utters a soothing melody. You feel very sleepy. items.scrolls.scrolloflullaby.desc=Reading this scroll emits a soothing melody will lull all who hear it into a deep magical sleep. -items.scrolls.scrollofmagicalinfusion.name=scroll of magical infusion -items.scrolls.scrollofmagicalinfusion.inv_title=Infuse an item -items.scrolls.scrollofmagicalinfusion.infuse=Your %s is infused with arcane energy! -items.scrolls.scrollofmagicalinfusion.desc=This scroll will infuse a weapon or armor with powerful magical energy.\n\nIn addition to being upgraded, A weapon will gain a magical enchantment, or armor will be imbued with a magical glyph.\n\nIf the item already has an enchantment or glyph, it will never be erased by this scroll. - items.scrolls.scrollofmagicmapping.name=scroll of magic mapping items.scrolls.scrollofmagicmapping.layout=You are now aware of the level layout. items.scrolls.scrollofmagicmapping.desc=When this scroll is read, an image of crystal clarity will be etched into your memory, alerting you to the precise layout of the level and revealing all hidden secrets. The locations of items and creatures will remain unknown. @@ -909,6 +904,24 @@ items.scrolls.exotic.scrollofpsionicblast.desc=This scroll contains incredible d +###spells +items.spells.aquablast.name=aqua blast +items.spells.aquablast.desc=WIP + +items.spells.spell.ac_cast=CAST + +items.spells.magicalinfusion.name=magical infusion +items.spells.magicalinfusion.inv_title=Infuse an item +items.spells.magicalinfusion.infuse=Your %s is infused with arcane energy! +items.spells.magicalinfusion.desc=This spell will infuse a weapon or armor with powerful magical energy.\n\nIn addition to being upgraded, A weapon will gain a magical enchantment, or armor will be imbued with a magical glyph.\n\nIf the item already has an enchantment or glyph, it will not be erased by the upgrade. + +items.spells.phaseshift.name=phase shift +items.spells.phaseshift.desc=WIP + +items.spells.targetedspell.prompt=Choose a target +items.spells.targetedspell.inv_title=Infuse an item + + ###runestones items.stones.inventorystone.ac_use=USE