From 755817e81a0bed03d50996c2a5a61ce21a0ae524 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Mon, 14 Aug 2023 14:07:57 -0700 Subject: [PATCH] modified visuals and cultist AI --- Assets/Sounds/fire-burst-flash.wav | Bin 0 -> 67238 bytes Assets/Sounds/fire-burst-flash.wav.import | 24 ++++++++ Characters/DocCenturion.tscn | 1 + .../{doc-cultist.tscn => DocCultist.tscn} | 22 +++++-- Characters/NPC.cs | 5 +- Characters/Player.tscn | 1 - Entities/UnwantedFrequency.cs | 9 ++- Entities/UnwantedFrequency.tscn | 29 +++++++++- Items/Weapons/ProjectileSpawner.cs | 8 ++- Items/Weapons/Pugio.tscn | 1 - Scenes/Maps/Arena.tscn | 4 +- Scenes/Maps/ArenaExterior.tscn | 54 +++++++++++------- State/Thinker/AttackState.cs | 10 +++- 13 files changed, 130 insertions(+), 38 deletions(-) create mode 100644 Assets/Sounds/fire-burst-flash.wav create mode 100644 Assets/Sounds/fire-burst-flash.wav.import rename Characters/{doc-cultist.tscn => DocCultist.tscn} (95%) diff --git a/Assets/Sounds/fire-burst-flash.wav b/Assets/Sounds/fire-burst-flash.wav new file mode 100644 index 0000000000000000000000000000000000000000..f5406bff764807ae32e172e24c0d165b2b08ac88 GIT binary patch literal 67238 zcmZ6z1y~zR)F@1{Np?3ulHgh#3N5rqTS{B%MoZC_y1To(yStaRP@~>bytr#{0wFHM z(1alOl=r*;cc1?`&+N|5&YYP!zOy?UK5P2)XB2|of=TnIt=qcCo~fs&M*x`mQBUte zG(nH3M~9L%EBCBC0JZes%0bUpZ>rvWy|sEf_0H=()l1N;(NpN@^b80lgrS6~gjIwy zgtvq&0+-N7FeRE3?TKbYQ{qtKB;p3*Lt;F!2%rFzb99a#pGAy+vKg} z?d0#|cCsJk807^el|nQ}1W;~Jep3__3)CBpKrf*&=wb8(>Vr-| zpQB{#B!=M#Zi^e?diW50Djtci$4}ws@dDhQ8bZBAJx%qd8d8NgA72Gm3Dh#`Tk379 zjOsvpO|#X<^%?qX$nj}Y^kemB8JsfsWl(D%HE0J=8Dtt{8T>FPG_W-cH(Y4A&TzWn z2*V)5Fo2bYHx0852MoiEf{ntBT#eXe0DbKXq zbcUIaIn@HS)VGSZdSX>=m1*_JdcTdC?H}7d+gG-hcGvBe4S8n&z+t!JLMI#NpU&Yf z1un*};jV$MlU?_@zIQEgt9Re&!5qdM-ZgxMSD06oSD?4mh-oAD`6T(${i8X6)mDrvXdHjt`66MIm=x&{wK}RKDm&_4lvmW3 zNLr*Y+%X&vI}{ooIzDu6=;qLMq5DGjgq{ff5h@E^5ylA%48Iiq8sK{P-f-9O=CGi! zv7tNXxre-;`+aWX+|wa?^IYeJLsEy#3(1}Pe9re^;q1Ayx6gh%J7^9$%=OA}7`eF1gI7da>E|5kwMjnsY7O^qnbc86PF(Nr4BjRsF zb3|C=;>azL9+3|t$Pt^v8^RujS%(#cx`vjA%%1BQ{AA|R>8VpLP6`XsjLR6CFor#9 zss9|mFyF;K`aV}i`uQyLwe`;(9WvH){GFhQlP*jiHYI#Y(3HQE?@bDvcxuAKaRGs< zfZt={M@Nr(=@;!AKl0ItT5pk;o|orv#;`}8jA8l1dcCM4SNs0;_ZuBQCLrKtz^(wh z0P``qqoVvb`tnB3AFgD?8eXl^t% z)tq*Oc2&REz|`m&-H74Mn8T3MeHaalNT#Ln65~D0UPdyVK>uL0+32!Sy3r$}k4BzG z*@oqYM3CNXMzu!HbaRFiGt~I4$wSjIW<_Ra%*1Bl=K2nMhPqfDWUrF^E4P$n9HR#MJWGAR;@ zJ~|7XiaMbs=tXQ9euMgn`hz-|It_2f*qA>)n>vs7LZ5BGFtVi|p|{aL(qGay(YMi) z>7yAKbBJ-A@llg0CSAtsjANMg%qqrQ#&fzJeYnvk!!&~e{pYlm)IjVWC5N;DF+?he zABf+GJ%mt#iyo&xyYEXcN4Hd$-oxz4*Y4Er(DrJZ;9RGf-@UfWr;FaTz5Ar*s`h?Q zZ_f-}p3b_L*PGvWu0ML>T>D?>U%sCKZqybpQ+zz!3M>KE9k9^ z9Zb4$53`)P-dNAX%k-yNt+}UVgXI#d<5ugeY^{ncgDv-3NX);O&o|F9KWAQRR%%Kx zku#RkFB!TSh-ho66r71oMvqf`D7B=s$Q#1UfttR6zNX%x{Z;)2dc}H62rmdn2!RA5 z;k%v(;Su32F%g+U7E&f)EEv@s>R4(X-i9v&?(fmRXK=~rDE%PgG~*t9zmcio9k6Ii z^?eK)3|1Nz8fpw%4SyL6w*71O%zn9} z+}YD@?oc<+6T{98pAS}JyLYAct`XW1k4F0V-0}JA^U#Mgl0Guod$*Tt*agoe9)UwC zLvOeTxi`CgbA93Rz!x$U~l?Vj67w@Gf7 zT%BC4TsOM*yL}!ye;D06bY!OQM!%{4t-kww){S6z%^TL~v3O{Y+eKFg=VMOwj%S=y zE{SgC?p7X5caGa4H?sRo&vD*IeG*40M@IzE173}Z9~Iy?)+gNizPD(^SzpoUnSuKz zIE9y{7}$`hWGA^`-R)HT$}JJ3`vIZQI*o+RD_IRT8C8@lGLC zG{Nzq!ck$QSf_Zds8!f2$17JVT~xnRrs_@VI8~|gt75GDKx@2=CX1KWNhD%_@imc& z$XQe=JRs~Br1KH}V_pz%8SgmHf!D?@;eO*Lb4$6E+!n5Y`;_a?`^LOd0PI)IIU( znnGW$Jybv-o_)}`s^Oj?saUK zfrp;QUytP;Gd-#9`p%#1OfB-5D-Cs2Cn^>HNeiNl)sMz)ko~%u>Zign+^da~nm@M0 z3KmFT$p5I=?eSfkwHtda`?n7`>$MH^4k!oS3=AFk(0{tGw^y&vqwjqG?SZ>`euNWx zD+fw@uWQr0vfJ9!9F@2FNZT!Sj}lcFON+#-#5X0)t@Wyi&Vin*gk2b!kzrwEzsohy zli=;|bIMQW?>qYas1pCveu!`N$i5N&Bl5f>y{CJB1ix)G9P?~-_jj#!QaN@wtaPk% zv~#-aWaxatd8Uh>>kC&0x6N+1-K^ae?iYvN^5A-CJ(@ihc`!UYJPbXKd93z`9_r=( z&1JY#v;Abd^)|<>9$6^O=%y!(J(#WxI-`=IXS~YP%-qoOrqvtk7dFneuWe1vclc8!h?fMW!E&-!XJXuM9sLxEM6)>-60XUKnT$!VIenw;0W%6PVA91*X;( zXRS0gSB6+S4t4f({p6~4J?IkP)H~$5wVqkM;aN1M?@f2CN>6!9rEVY5+eTcXKhAib zWvZ=*J!Oj%P=<$X!#a*nOmaUJhxIeyP+cYaYKK)opyP?Jf5c==qul!4Gd=1&)x(wy|2({K_}AfPUbuIQ_v4Xw zd=C4X_)YNJ?I-mM^{0+19hEgYW6bQaxq*UlE)%E|gyRFp&l$IP+`DlN<0B?!Ofs5! zd8+ADlPSFuOD6b_e>FB_6wQ}4^n^3bVZ)Fm&Qm-Ocz*TT;5KB4!isBJWxn0+odehP zhP%L3&n?5H$|cZkhWp&1YdpSs;GUVD1)jG&Q#@|F*Sf583bPm39k6|EGu}pGU209X zd1_;5``dP$-8nnQA<`lD>@yv#9j`g8w!d$?*DA^EDsz}o1T75LM~6@%$=)O_F^bUN zKcla`=Zki~2GI~SXEe=Pf8Ce9)dN!r`@vi05%Y-;h;hgsQWT{hZO0R6S^7&M7Jj4O zuAidcU=V6#%a~#8Xs9t7omiA3IyECfuT1ReYXqQXZi_X36=BiQ33G!@3 zmuh{xeb*9gS?_qg;ban;icdk!NU6HN^4-lNN^Yf|O`QAlYJw)|O!BLguvF93#RM3(E8JtVuh;Cr2&pj>kXk?QYf)-%@{&oq9*++{M-bgsz+likKn#(&L9tQ58< z9bY;0*@q9I+q&3R*oE5%I$v?|aC2}ocm3uZ>)2>NX^6euXuD;08-^^i&$176FmtG~ zkGEfH&$NF#L}y30E3q-Lwy}I=W@)mOal-HvZ98U7o=6NCFzFkw<7kI#?`hJz4ZEW| z)7!7Bw=0e0snToWQNkzuVZ4hi`#A5}`|DR!3(AHSdFC2qBI(-XV~JJ26Mw{i9TLC& zz0JE7u_3XCVwcA5h}|2zEA~L_{@8tx`v?2sYA>W+u^VEK#74wkjeQtb`0n_}t)KUP zE&d+$3;%O3IVpWuR&ZWk!M@@bCEH3fOZSz!lpQHQUb(m?ss2aPeC|=f4zZgwPnImp zlf9PSm8=xoiM|S>gp-7?g>iyXei3&hht%|?flzN+C$E`VgH|7BJ*%)NdsS>$_$|*W z_ipyrEMexKjB|hIq!*{wr*tHXlLit^5?%lNNcfv@IYFHek#Oxd<5$b~cVB0Hw)`~a zBjdxt_ucO--bKY}W6#0p55;bWS?r75GdQzi<`^AI5nIdO01tIQB4{17jD*&HwN-zVH_>ad!Hizpj5fQyzUA z|JE;VTC9KU`q)vi3uA3!yWa-Hg}t@^b~Al@*`<~N?u+Xr=CbRp;}ns~`Kn`TueOl(`yCTIUbJPa8YP|*J&{7%+wrM?A6Chr z(#7;_sxu{@^Z|)N_L4dY7Y3sG5B4JcReDPhA>|eRh!$#?#`t19+RWKZ!F+7A3HwD1 z>(^?(YvQ`X+DnvIB{#WMO+V_EHm&9VP(1JL$CAwLoD#jCj?SGBKUqFy0G>d5r%`9c z%yyaM3eSIC!TNLF244<79eiPC%e1bf_X5{M=MKB^ z*5+nHW(<9c(GDX5-IqDc1UHYd47S3oCt4G&!)@2tuW=-~{&tZ%uXbMOG|l<5`!SE( zUJl+N!?$@(cUQXzT$j0B81`$#9RJh+#kiE9#3`{e@@I|>Zl8KN=z$N(`Iz}0S`e8_ zwnh)p_nA~%S=i{CI@0&)V`!6UlXavuVs(-FPE*+Xqi-nvio0TXsDJBFp0Scts^}75 zRb_N=^hRM%Xzz?nm?Ml&F#Z_brd-r}qOI!4>71{b-*=dF5i2ryZ{*0ZH_kL!X6fqS z@8&Y{ioaVx;Mn5Pb4D#6waMRf%$zYdM)~+9dM9~2b-U-}>vY0V-zm@OrBk5OBFAX^ zq9Jxeq;~2dK11qlU)g-HVq3=A^x0N8=sS;czUuted5iOPHwTZ8!z5mxy$HjNJzQN{ zZBdhZxSnoqn@+q`@Li}cJ}!T*y5IJsou_tC705kg1rnOrM>I~T=KthfY6)o8H2T%I z*S@ZqQFE$>Uma8(!+Ks$C=D*0oEMV~>`UV&fBf_5*ZiN=-?#s0`!WAl%5N2Dg}6*rI#41lt}c3C=vBbV)6YGd&CgtzG4yX= z+N0Fal+8(p|GfTP|1;=E%eUiS$zOEwtWWBX!5{B^$bV0Jzwljd94D?ct|d+x_cd-? z+-^u=ae;C2*y~`|kAdYsIA|gNvu*!u(*Fzp*{6Rc|K0z8@BMG-|G(A$t@W?Xe?H~E zlK(8^f0pmx@!!4wtl&S(ybo+(R_w62*>N|(HXn~$A2%|N5+{nSj4g;wiTx4#KK54Z z3DC)%(B}Wz&;Q2o&u9I^vm0Pt?8?~7vG-%m-d%mq`;_(7_1BQ3r)io@e(ub|OC<&6 zFIg*Ve$?gHa~l>mXzI=Dhu4MFuB_Q!y}D`%YeA)Xg{myO^iRp0l4~WdrG)Y+6-?IX zD%W5YHS;-Y$WnHDyO4~~!N`p&RLUJtq zQL>=qa51UqXTh9&%e=JQmATD1UvfU?{La~yyEgA_?!nxKET0Usbi35aDSuPWr}U)o zQs$>DPkEjqPWh2)n--V4D|J!IgJi$t{G>HWR!PZ;;}RPZM<(ef*C)S7&PvKm+?tU6 zJLy-?uY%tN308^olI)X>Q!b}WOZ7}c(yjj*WO!w4&N%t^LwZY^W!jI_i>cnJ4JqGJ zrly=sVW+sHUQXSadL>1gyd~*bV#%Lfe=hvV_~V%PAn|cxdZJfi>K}tYn-gdWIlsUE z{`qPeR?5)|yvvad+vrTgJayDe^XW!47oHZqDLe`9|by?|IR@o`pi*ndG z%W}WxN^`^Vp5)Q;Pv)oQbMl4xSM$&3@66ww9|LeXe|^4TetzE9ysLRO`D^p<!SSJ71PRqu@nBb-|YcPQj)^K_RE;PVuSYGsT*s#YOFf zs|$}6T+F|aHzjvOu0`&v+;e#)dBVJ1dEU9qoO4-IGL16=|62Ve{GFZAn<2{FoMoK# zBGW7LNJdSDVi^ZBW$RsWYtqR&UTahyAFD%86+SOVd6F7r6N~h1<$NS!G2P|x@H0EM|paws`zu!nnE4W@JH_N zoVhvDY=a!X98u1L+*x^~{JHt_^Rx5Y^IsR7E2I_eEvhamD+($$D*0UUtu(moLRm(c zsEks+y}YE{v*KpO@XGwkc`Oktvg%?LwI-=7LsGg)gtdK}V zd@h?+BVcjLwH10SBUTLS0}Er>)hO#Mnl?c^`9%~j{vbLgr145PG3*x&f%PVJFKhAI zz?#tNUo5opK$)s|cH#28&ADT9Jaf+F+{}KI6_$DCZ+!Z!^nx^5+J>~dsa+{EQ&`C% zpgHFNo+bAsMI`-7Y)mvsI+-*)`FHZVl;5e5>8mrGvUlZ9FYqhcT;f!Ep!9wTR#caN zFlS7bHp3(1YerD!qfEQ3)tPA-Z~h)kf1RdEbxz%%Vvuqxxi0xwiY}!%6-g^ijZ3vm zRixOZ?oM5hHagw*FFm6zqde0y>uJ`cEKTN(Opi=zreUUa=FH4hnVT~2WR`-=G-PIG zPRq2)e4p_#qcI~i(;`cqm6aWnQ;=hydpXBCCp-I8wkkUb_)wddlK-^eaN&$1V)2*a z86_)9+Dm4ajwriTZc$ms`cPe6V_i2;S6F|iA+RyNQP=3h4q!*K*RuDsZ?iA4H?SA6 zN3%zyQXnzqqN~b1HGZL{#yOYdiVMpb!D}twS<~q)oZKARgbBzsv=cI zv9?r3R7@@ZSbC%QW?@2pZ|;j+Jl8RIa;{CTQ|`%JN$#RNO1?C&EH5kXa$Z&5ru;?u zw)xBQPUnoz=4DRHs87#Ioscv(q51oTFS<{a9~Qh{`)+&O9kAa=Vz+`N|Mw*FpT9T= z*9T(P#I6{Oiap}ieXxrU`}X>0Rl>%kNh!^#nQ6}HRhj8I+#Lm5X{E$W5-naN3KRMZRJ=djs1|=tZPSV- zGNjGTb2+zLu5%Hd6xQ@I1ZzYc;z`n{GL7tb>%P_~|wK_&ES08IT)E?h4(0RVQM&s49TDQ7)OkYV~Q{TeA z-@OjHjXejoh;~5pL*uBq+%4}c?wHwb+qOpiUZtm6tgMkQZXG9e7JnCPvPShp zo!GXco!arR!@l!S=kw0Y&JUe0J3n@w>KxZu&|%gwwf$7vJ9U}LNX1kJD$dG9t=X;Y zRzvwwd9qw5_f*VNY*s8+oK_rEWGX_HY~>eKxO$p8M14ucQAR176gw1d3ZkM-K2wpQ zn5EQH9ahOzyVTw4FKyZFtPZqmad(bpdQX?`QD0(z-$0_?9YO+;g;2>6l$Gc~Y#we( z{X$(pyGo0twb1Hlx%wf7>*)85FPeR^d|`9U?v%a2VTe0YK~Qs)eEZ(t3J!G77TN_NfOhY-eN$cDKG^kp1hl!Mvg*#a4&sZ zqy5agrfl;=mNTs0S>CX`W8rJzVR6^|msy%A!{iOKhH-;F&FH;>5p6NHh|+~TC2l5+ z8raddQFl|@rSaE(*G|+;@7>pTzyH&~Q@t$&526n-m$(pFPI9AAFd>fU7aKe_N?@Ea z9&LKntkdkP8OdzENucp##(MfZBaOjBePfyA9z&uc+lfbrZ;16oUt}urC&5;) zy1&2gK;Of@=zav&Sv?35#B5|Pc`D@>z$o%m(g2}ePdspWfT;IC&zDd_cum*|ueA^L zkLi7?m2}HG*LE6r-tL^zRo?wwTc&&8KVPqq;6Nl1v;!0R>w3TUF7DmiH=)0xKV-mS z;8FkZ{%w7Wdi`_@w4vR{JKwe61RcMr{;PIT2dWH}6XkDZfzl@NaPcA0HqjyxSL7$Y zF3u1$#m1r_VGduzw-?+MgbRa&O9VQ8KJO-v%@gt*_y+tryuaKfTyYBt(xaBqEiX7N z&EuL+HgVX&Y$vuQyNW%ec^1cu+s}Q%%jWIn+4J(b8@Rq)EwpHF@#Ny%+!l|PoMyYG zagA2>@wLlqUR5us-c>!MrmbdG-NE|ChP1}xY!SPJoy^|Hc4yZ&u5A3$z^&)iW!9$E zT&%9EvaSkdJ*qrg5ng_)ETi;D>4nmhrMF5GN-Ij8%4*A&l#9xDRh+DlR9vf^&YD}b zv07UlQ)63uxVEcydEK_US#>^jFKXLs=hoHL{i!!<5Y~6qU$1{vzobFX@Ud|NyO&-jN3*pJQ(|DP@Y5bvrRe}qGLjpfR1=!w4JQCNm<#=;pQ)*Lv)6C|a z=4;KTo3op&o2Ih2H{NP^UvE;sxNce9);d+)tNI-c^BaTNyPG1KM{@pfY+6RN5L%va zl+DAM$xT%D`G)27tH9r%sr_0jt-VpVqHbzkL9Jcw&zk);6KbMrJZeg+Pgc8Ef2x{P z702?c^sKmAb`oOib)`mSj^%&KuU2?eCRAQ#ZKw*UHm}juRMg7rCN`XIWHbde594S! zku6_a>RQ@cxGh;NhgBCri7+vO~;x(HYGLnGzB-ynr=09vfbFf8#gz0He77L8fMf>>VDPTuVdB8 z>fYDA02+J1%um$agsTyCNws@xEo&WXgK9^@oO){B)oiVCt@%?OQvIz;&6>)(TB%o= zT(P?%w8Flkr2Ig+b@}(Q!(~&-Ov|*Tf>KUtPpNC!jIsk|x5{porI%^TMwXv0|5|># z{7(6pa>sJ_@*ub_DwmX-SNK*$R=llfs~BB*tnz;4waVj_D=X=hsTJN8`^y{3hLy#X z?k(*qxm1#0e646<;j)5h`B?tjyajmBeyAMbPhNBLH3#KbJ-EF${LxyHrq6(F6Tt9cV1i`FK=OfRsPI^ z+JYH{rwiqU#~|)WERHDgh9@q!lA$G^N&-r6lv2lP@~`Lc3j<^0Or%3&}PYE>U=0LD`SBg$u8XH8(~vCdaMtSqS{uvV~+vm99r z)@xWX_+D8HC1Y4C0gFx5`KsQkrPbT3S5+^mwyBP)K2cp?9a8h6Mp)xhyS?^LEu$`^ z?oi#Ey5ze0I?MX7`X}|=daH(rhQkfd8*&<&8#E1QqgkU{@qgJ z32jPe?`7Mt%Nm;->l$Lv$=>+H+ySoXpuPE%ZSFy|cSBPWmZnbXIa)UvrHrsWlA-h-AuE$WtI+-uwm z+yz`|%gvS@E#tu!3~6cMWN=<_E^yv)iXpw`Oy#JX1n?4COR5e{4S5 ze6#svb4aseGq34!)B2_%O`q7I>=>ZKmxi?sD;lmh+-!ISaI4{b!xboTYrr8|mV)J~ zY&g@{(MV-mv#D%(qX&Bx`x#rsp4arJDZH7%*~4k$=s0W+hoj_>TY_5lwY+Z8;~wI6 za_{rZ_)GXP{3HBr{A2tp{1*N=!A`+zL4`mrFoU)7X~HSO2||C!Efek)J`lzUV}y@| zw}r=qONA4KhQdyPRG@+QE&^87Nuq-yooJc3R7{ZANM=iRNZw0Kq?4q(q`Tp0DeaZi zN;)Myk~~SgWQoK|(kpHh*NL0O-^6#t6U0K%W6?6vG|^nqR?$6?P!uBmDRz|{kvx42nJ@)u6Xz?cTI`L)k0&%)1SQIPt z6)qA63zrC^g-XE@!4|=2!6d<2K{CYSyLgYetGMU5ySc^Oqg;8*u@+)W9OoDCV<{(+ zW65y=espu@fgC(;xzzF!iS1E@4X)=`O zr|>re=QhFJFi3m&5BS;qTE3L8<@fOQ1)hRwg871VF#DZ?1K<^p2#yO54pL*aV2L0c z?nMY91v3Rp1$zWH1&M+pK?bDng5QEHL5|=rlzb9=5EKfU1swvakR(Ka<3_^C!X3g7 zFnV**IMGtkUeP7dMbQ({9nmilUt}r{6JHd65wpcgFtw&mawdz{e%0J7qaqNvIDXOvf;9^vZb=qvahmwnOugoQd>=139VSGVXI5)Nrg+-yXlzoGlW7j!e3=a?DH0%j(pG-fSR z%(O5LHoj%tWb9*d!=%bY-*lL%p=qy4naL-UrzR&%mYGa6={L?XK5snTm}LBwIg44s z2x8o#ThpH#t${E2CK`np1sXAo>J0Z9S{i;Zm}OvMP_N$zkguPu|4IL`evJNmfN%PH z^#k-pwCl8J+IX4=Z8*)F=1dz&n@o$M?V??xU7-}p_WiHsj1W_)Vow4>PLJ4GsUK(_b5H&&*W|7>10o`K3PptkVK>=QZwlX z=|1TIX$k2xsgN|D+)6%1aY8?$HrRDcjje(&8aGkNw3oD*`f~jf2Ihtj3{8w47@5#- z(8-J?j7RY8mxkfP+{C=e`~$Rl%RJAV#w0LrGMpIK>77Q)jJ_H68ca1O38NS2ZfL=!5q2;I=HN_@jYq6u)UF;*4iS=P)@Y6U8cc5;e zex$ZjHPn7;F7+UFG_?nBz_mDq>Q9{w-zQC^I#YY`O8gDJ2cLyo<6T$@76Vv9FgjL% z?nkZA9LiCOKc$_VPQFIoOrA;h017BbEK(XNfs{zG{d)(k_ zxLR$J_70To)$YOWc1c@ZTSr@0o2E_KR@U~l?P1%lwlQsJTa0>{+Ct4&6{-?dA5^bZM^y{q z2|io7U1_OofHj(n@Wg&u5d&XYeNfy}EPyYqlH~{FljL@CXSt``1*~9|p;r?*lNL@5CSA zNq8x|=e)DLExhHtP+lag3~l9|;XUNN)=0MLA;O+yjP0!#hwtyoD|21 z^Tp-hOPj>CVxd?nrbrwl<0XqEdnMN-ZzTzmB1y5NPEsvlO9YZuNx#GZ;(~`}A zeS&1T#884s`o%Pm%8`NmT~OjKSqQD-BvlZ}xkw|WC#A2XX;QAVOF9l@ zzCh;Ky0Z0FYep-pb)eN1y!lS~J^62WgPf`usaU8urZ}QFq1dNbqgbn0qFAh0qzF|^ zQv@iy6b=e~g+^W`|0zEwUoD>^caW0@SI**F&$g~>o!aWy+Aph=#mkP$7Rmf%mNK$T zC1p$Vp!ciNmC|`IGhgW_X@GRRbgDE+IvH{SFjpt3o755ROp?x(E|so;nyaJ>rP0!v z(pl1p(ize)>00So=}T#aV>WhZ6VWe*2i|Ai<;EhDrtVElfq z(_6z}E<0N-hg^OYg;9LZ2&xaHj6mJ!Iih6}o(F^gCfznJlLK&{ysl1_lt&CUx zR{m1{RhB9xN{VWzDnzwc^+J`WlB)F8R%&;(k9w>+T)k8MKwYR-tC?-?ZKKo9!RlbJ_*%+IFjs09fJP-EpqtR>zBu z4;^XXWqLZSIs-cwbZ+fD18ZpSI@3F=Iu)JzU0z+0U5C3~b!BvMyZXAA-LBn!-GSXR z0iwE>cJJyw-~F`vTX#lxUUx}%Wp`6|Yj{rVQBO;ecj#Nnr>}(UpGlZ)}R`SrVFmc-EB}t)|hELHB&Uvn$?>90B1B; zHIFr)HEEg}ja;MF5VZs?S!<{@(|T#AXqRgbXfJ7>YCmX`wME)0tyHVin)Uegg!k;| zIp6cJ=UvZ_o~)jVo|Ya-kGeAER! z^)EL^H%m8H7pj}5i`0ebA|Qq9qI8RNYjm4+TXlPN8{xbPV1sUxZinuGZlCTDr2V>` zP`*w#AKH)8jUMd5A9B+HPq;1`u*`)>A_z*x=qBoB1K#Dj6@YU&;Esgr5U95h+V9XE z*WH8IB3oChQ|Nkh`Vf!!_b%)`+WW4zy0^R6rf*DNc;C*x%YE^%3g6W?q<>QX+Wyo1 zkNXq)3;Koqx_)E$QZ;B`(ZJq;+XJ5mk_T7=^#ihjfdQtTx86*>C3<@XcL9CV%Z7bG z0=;$sB7sVmkAg!fnDcLM$PkkV?oUR1%sAwE!$a5uprLVQUEW zP|`vW5>x~&0Uq~^LmGm(B3?)!G69*6gdykorxD{X%_uSstqy&}CNy&ye< z^JCHz(nCm3Nsk~shB~)N*GN}L7of#i(s5{c5T2WMkT#OmLFB&xFwZ2-BF!MpCIth` zBh4Yrh4XAU|0|zKnhL!Kz$pA+EFL5WcvdhZ>5w+07RH+k5|#=(+zh}mLY3_ zHoFE}UqEg^?I*}1Xmt--{g)oVj=Bec^(J6B3wVwIrhS8$_JVY8gZAq{N0tJeBaq<# zk#i5wB_^Ve3=lhs3L=MCP0R#sdow7HH;Ffi*Fh$)4f6Cd@bxV5DDZe2aXavOH}L>* zFUaaHkk$<#4U0f)=MrawtcMOt#|Du1fAX;r>hFM>M~SCF?*B=~L*iY4>wx_lqJWX0{Y4wGL>u9cZ-^*$w9{aJ>Rq1?3BoXe1I@0JY}BITTt154H7BF{1t4;tV;1CRAt4ErUhQZ!yU>@a28T3~Sxhm+d31-6ukiu-b5dw^m z4kNdQJ)2G>_d)Q0qYETwNDeS3n?Z|f2=xrX?*1E%HI&;yvLV?H-eW@fzqw*CHX@8n z2cv0)o@$VMBppcrs(u?xKahB^<*z|g9)bql0QtUw+=kpk;K4(X`5PebCy+zHvE73@ za}KoZ5|my7E?ot<2G&J7-~!tp$C@hH^&$KykTKI7bAiyNRnPobwc;OTedH+YD` zLCYh6S^uMQFYrwV7N{F2*baPDfkjfom|NleA1Hvb8sG&Avt|NcZ2=sBE-oZb(r}V5 z$)7Za6hxXxnm%Yj=73F^57uij*qimF-K2f+w)Pb14CxYBrF*0|q)((&Siz|!@kkO< zC#jEwkquyd!jfzU;6!#N4<~z(eE@vP{$xKm`oVb&c@%jZc@lXVIfNWejwUZ9uOhF9 zow7&B=g8N|&&jXJ-^jnondB036}bs^(#pviau1nI(WjWgo>?b~7i9$O!<#{wO$nz& zP$DUdDAAO~lm(Q9lqgErAcRxq!_`VyRar(^0=Y#{D+*E=w3q`cF4HIzD1m^-hcb-f z328XRn=%rx22jSp9>0H>=K#zDhyYAcfc;+|iy*%YaIT?jplqh>pzNU>pq!wbqFkrk zqCBF!q`as6prlYrD2=cyPzQT`ZBS2i3_1gyjV?eJqifNf=uz}K`V5Ulf1{~rG0H+Y zs1hY$=9mXI5nF`qz%F7>un$-gmWMTAQmhx#$1QPBJOI|0mf~yhefTl_8vY1YoIc|z zcpj`h)#6-Sh^uf7-jCC$OsXx_9rgr|qK=_XpiZSuqs|40q|T=zdqw=ZUR07Qawm{g@JZWQTvuMj{TWM!#cWAF@ zA8GNlpR_-;zqCwRKCP5iPOG7@0R%J-t(jI!tD;pxX$e3vjRpBST0KAm)GMN8(GqFD zXkP$BJna+hEA0auV`$H44*>IhSV_DM$LqA4w2QQJ(A!bk0opd&2HGmx0$6_xq0I)E z0HYa38w%rM(8x3$RY?_58>zK0>QvZu`J8%(dX9PmX0(I4nYxy`3}zk-RPdz^rCL&r zs5lj&_T$~S9H0f~0PU*qVmuB1jlaWR;?MBA_#L3`CD>nm3_pZ#!8hP5@Mt_7pNR+I zV{vbM80^G0$7!&x*^S9D9#)5yW2IOQmVqT=@mL)82)l<}1rDCYj$nte1K3tmXgc}_O-BEsS#ZTd*{BrcK@Y<*3(Nr+V20TO<`LK^Y$_IvMPbWf9di@N(H>ZbJPIQ@597H8 zqq+|1GQhu*e{dDM0;`?3Va(64m)KkEGxi(H#)`0JOn`M@1F-Mh6lUv$y8(FOLvdH! z8FzqW2^28GQJjG5ur90(lL7EBF6?xz!B|)^R*2;So*XP4`wJ-<;49GPC9J*P!7gE^ zfhrqejKSCxn2#%FgE24~rib;QT|k!(v>ok6`v5SEikZM&Cu|th^T&b!W&ja2)%-ygSFW$ z=xTH!?8Kjk&H?S5j7~%+!Eq)U3}s8v_2?#aE4mBa4KI0{vV;&qFUK&;#fWup7(4e$0hk#z6pn@TUMb)Eagm(@+wMpgoj+ zik8w1&`#-~r~s6dRsa!&52=~bM5&^bQZnE>lTVbllsA+(N(?0y(!cy`xQc`Q%-<+q z;P{#H70#dF>Jud%?#ED`P;P^5yG%JlIZHVVe=s-#=`7_EpNxjY3zUd(cxb`^RV;`V}~n4*dCN z4J*(ZSdXtni_l!qi3GS83$(fp)ISKea|>`~6~IEk5DIwa0R*EVu#!IuodUg1hF(M9 zFA9s$l~8Lv&}{>{8ThydsQ8ahX9wXVdK&0@29E!@cnIjb9%Nw!U|k4U=K+o}=t!Wj z18N80fV!YV!HRpLUNF1iQ0@tTXBZ1J3`6GwUzQBEjD)Ly;|T!_5daH8hE_q(n?Z)Q zqTA7p0Nc^MAWP?gvro_$@TTJj=zTtDeLdQO3PDO`r~*I^I-mrp?L;-G7VSa%(E-p0 z1SFXP)`N;MLF+9rE3g5sU=PNC9!$mNVPV(`Yy)-(^!g6Gf%pvmqXetRS}_$^Dh;Gw ztRF)_YcU-EpG3l`xIS)y+klP_gSR82@j!e$J`JCO&jpLO5MPCF#CPEb;62Dqu!}G7 z*LW=c9_-{t{4Jb60>nf5fPV!@!T;jZu?hxFJx)10MtPr#7`@DZu-ZYdKh04Rj}C0H$3 z&40GD9faAZj0cr?GGx$@1BiImc(8oZ~o%!e* z_#eq3(8t^G_mKp&3>CwlM~uP$cmn1Tm@in{>0q&!VQavz?8XjaCjicZ|F{Yxy$z#$ ziM<+}=Lhg3&$0V(=LGnl)z|{C&?CTC8DS{c_yLe)1T(E2V)m{K&KMH>7HTDN6 z!o{=@>$u?lcrd;Q-v&~00zC0;;O0Ni`~rUn(sKd+P_PA`5Axy%p2z~Y)&caZ1ghi! zh9aO%J=TILK;rd)i-x!v@YV)u{*!MXd^qGxKnJv#5`30$P&X)0!vi?F96yXdz(3)+ z@Yb&hm*A~<2i}f%K@#D0cm~M%ZIGPBAOVhmp&R;;VG>9j=ra*`bPGEJ+P4d+vlrVB zvpp`Yer$~q3?@O{u}5a1q#^UBS0?K z;737!o`XJo2fazhvq48|Kr@8^Qe1%ZKtn4)vr<4`K7oFJ2i+=!8bX+TKaNmQ>Htor z5~vuJPBo!gLmXuRISRy4YFr5*1}rTAbr4HcfbJIp4gYD~mqDF-0DYeaK3;;j>MnjC z;09>nNtn|*m|rmHx;OmSh6Zm=TYxfg*o8s4iGq2}#b$%A4+Kf^#GE0u_ z=>NQ_{Qz?FPmh{mw%r&B_-zI9;{`mL0k~I#g*gP)>meQk_Ms4Fsla<+CMHxH>M-g^ z>LiE^7f{zz55xa*-ou}B3gF*44G{Utsl8MZM81|ZYdB&MV~XIdb_(?cywg4g(ee`N zOllyscct1xM5#v=0Pa69*Kg2EE?B-oJPY!V@#|n~j)J@%hI9x&0>_j1Wsss6pm99Z z_zt`%0_u0;REXJ!!Mo*2@XwH0a14UzeI%5)QeB`ACQuuJ_s$BSa6VYFcfiYMpcAj) z86XCK0#v<-pTqZqRoe)>UV$$G?O6!ca}wArI?`QlUU;^c43X53!I+Vb*#lK4 z0wtG&4sLa>6rFqafCv0QN2v?AK9v7R$i+7!4xeSzzstfHnFA{H?=fAWI1Fg+_&C0csc6i#j|9 zxDx|@^5dWeRYFM_NJb3MVL8yn1uP8(bXN;@rxPSrfHe-Y?zsunVFfHnX_ToFf%jrhBwU2$%L7inK|+Q zds@lwxi9YYN4Ce7rH1ONQ>UuiVDpgRSi#8{i9FbXy7W%R;P!YpZFtoL>8it=EsD32 z8gC>CM+$l~8e?;hZ?6Cm&&D>b2J>tt<6wMOxXZX%R4F^q@EX z!~T{2S^gP3ZuOr4#XbY&T0s%%hj_+ewEEQ_8H868R6m_w-j3%L3f?>n5<3%g1%Lb@ZMB&v@~ZM0 zZzDS`iW?jpY~!bVMAn`J-9yICV{uO+IeY1~Wgz$|TyJjBQpz%p*3yP`pp zwmU1?OKgTS*%<>rGSKPg40C2VYn>C$UFV$>aK1ZU|4+yA`~9~67ymtnF}dQLbxu21 zc^w3^QNuq7On(y3z>n=OgnaY{eXj`G0K)zcjJ??4@Z+@T8S_T%yGYwkgUFu*{UAFg z9sN)}xG@@_JF}vHa9=#!Zj60%>`oaFLVRZ88@_ceXb;TBDrVd^5d0l_GCVpbGdQ3! z_;et;<21TDJzn()@Y=aB-^0WX$qN_JIb=l0$dF+n146puySE5w&YnaiL(*Y&p1^VJ z0rPDJ;mt#%)&!YF!t#GLh}Lhk%2|-rUTo-9^vKWP2-xVXpo9+S+sWWTl_lugV|e^8 z!u)_KdC&80aOnlEeUkSNVHwvmZ|73RvcFmzv{pfIL0o)Y;Rr8xdq~YUqm{ZK<&lE# z&}Ti-B`H8yR?t`cpLdMqYo2{U36bD-^ynE7dp73A46OC@;D}tWB)Yi?JGeDKN0vrg zrbH(Mxbjgn;WQA#2+-7YqhI%cWZnk<#dq?6Hj7cJf;Gkc%ti-|MH4jx50rqHD9a~J zX=^vEOb^g1K*SlM>ypNVKC*}zL6n|EP6*!1XF@_3Xe^zb(j&oL0rM0&R= z{U#rvV3-Qja}ZW$AA0O_7@x8EZ?W+kv21NQClNJ&3idifzl4Hk`=u7 z2nHdJL32&1?MN*DQoef;rYcfMdbp_)a8o6DtN<@n6Mm`!Ry7@WaYDXO$JYj%+(6f^ z2K99S$7BN+g}^yH;a0SHVD735}sPLpr8In_`ZkH z3cK-CFQ7pJc&Q2S;4-2)G6bbXpT-CZ!}#5Wvs=ghe53sRVDvisJNn!Eo5S}N@Tc&5 z{g0e8&Q@~RGzZ5s|N1yRonFkv`OYC`T3A@bN-%-5xW`*^*y^J*4=|4$p2nI847yzfKB7mKXJh<@vtuGu%U$*&noy{73lxWd}f7tY-Da8wz(&kunAYF z2Hs1LzJ7_$+Q~dyL7UeFZ34CL;D+!VPuno zK5C&|7lM>-p*KE)jO1-RLh^6p`5nPeoNVx10pu$r_yxGpkfuFwW4`ptIVt-!HmT=hI)kH@$!RPL6xS*v* z+9$#O4Wq_mU<8*kqjzIJZZnVl)G-q_rvXTODvZKmbnbQI^Ss8^`S3=)*uY1;djQ?C z00iHHv56Y|039@kEB0ir*P_Phki4+4g&&yLkCET==)_gbiD58$o%|jAt^G}iYBVOU z(GKm`iQ{kPOH)cCG+{HI>-b9&9ZBjB56-asVf@kkDgAl<`8d)MlZgpt$xd{n89vXmm8L{r zJVm01(-%pQ{u6MYebL$p{LjHw-JLv+?VKXs-riT3$lohs;uDF;R`M1kuOfvv8nI`O z_b0gkjyHlg2ALM|i0wx9I$q2BjZA^Jo|hcoJzqTEOoaNS=RT3)E98P)_uL?t;D;xk zw=mJ&e%^s5-ZzQZ-8N!&_lTQ5Czg4hSmJ)~X`+gs$QwxD%jnBX3n|YkIdB{G}b{GCec_-P#5ZvmQFCGFT)h7$PxxFl_J-5c*Tf zU8AwLV|j#d5W!@$h^;v7xf02+K%*0aRxh`h||_ZV%j;wk*0n0Pk2yLN37#% z@UMdviH(Pm0=rlgn_7=~+=!!`v8leGJN}($gVA7w?tG^ueO-dA_ptug$m1%!nzl|2 zr?gWRX{>^LRdUKWIgrX&PI&U>ZRZE`;67^yuJibYNOLqI%o&|rPC??x#henXFv!P$ z8Hp|zhNpCnPrf@b@V$zm z7iw};K;M;Mlr!T)2GIwX$l~ANtY$u~<=Duq+QhLA>Db8?&T@r|%*W%*t)0#e&R7mw z972n#Fjvw#iOK!X)Va=ledfHTd~!Y#-TvwPa6EW%9`L4(ehm=s{>&K< znawAh{oMNi*S^ksQHfAjMql>>Ypp{1zW7sPReE4KrlBn-WA_K5QwxJaUV?hoqKQX= z!y40;+Wkr-cS~DApE}f=%v%-H>~xp zHn}6~$!=KTol9OrU$Rx|d5e*A7L8n&PvpPc_FN=$>X>IQ*)dx@TgjzbMb6kt&jvE8 zLiy|x#~F^h=t-N*n8fU?U4l%PuH-!|@ox5>AXDTaxe8vgHPVrHP>Gce9ejO^);a2X z&o~!$8iBgUJJZo$tLXFH&MtanD_H_7$rhN3T(%*TAd&OcchdK-Zvri8=c~$wlkBmRm%+v~fD3zneRC_`jf&pV^WF`A^D>3CjwR@968FzOeL5PR{NK zcd&#W+lK}_gf#7>AD5!nx;s_L&In;$%6;Em-#eeziOv6ooN7)pc%=Nb1eE?UV>@1_Lp|tgj6XK8LkKlKhagUgDS71P%IB%H^Vf<12 zanKeS$=k>Qr;!2;9iEvP;*Si^lhI!o^wAuw-i9oV(y%^BIXgC}Br}Xk6&R2jApg9) zpN@00ll@VG|Eqy++TyJYC8jw5ozw=DQ^j9~PqX>s`h)#n==+c8i^%AJOuUzo`zIg^ zO?0xG zUXm4cjqEE);$>bxAs^2}{!@H1^zxF?*P8sA*}k=8*6j3cAv16y88=;h9qHNDidMdS zzF5Au-2Z@gBXej0vuG&UO8-zslJB&T`>rQDX)pIV%RP^heYTQZz`o=MRw5fVr8ky0 zBKqT($LqDpu#DqPmSX&Z*8{5S#7ME+x@?<@{149p8m4h#+q;Qu~kDz^^Q z2^0-v4`kvf6{r{J5g5Zc2LlfR(XG-}Uu&&(&H81s?0NPK zd#XLs9%Q$-Ytw7#?f7;?R*D7NjvawMOvF2RxmOjt33<`|?D6(w?law8!4;p<@PkL)x&O07Iis0mz~i5Ze6!lTK%kQRwgU9<+Z*9o&+uh4hJ>|mIh`7 zMhAujIs}>rss@VFJ6Qu6I0^)+1=%j`bVNQ;q5SXSles+?Et;_%L-V* zb{snmt*U2tr@oVD#Z=lefkQdpo9sRG(*?4WKiEP19z+Iq{K&=cK~y4Bcm%%)almr{ z-G2l7c9)#s_u%*-Y(z?LA#yaklf63GI}RCD7VAXj+9qc6b>`0}W=|qtb~IsCUoGk~`NL9oYaKUj`o|hc6ShDG5g^&di1GtmLbQ)fz`O-8tVEUjj62Wv3yUy#qSF z16Zah7O(+0y}r}L=>`Kl9Xz%P9kdTkegyn-8%_0t3_08X0iC%6%+m!8o&#+g?0hCK z?=80AyU)je5uBLdcWL-CV61xF<8P4CP-mjE0MxP-+i(iZagoR4puVkG*d=^2$C(EH z?Ll1{Qc|C9Z5@TwMo@8(kG@!w*T4|fz_^SS>MOivIPJQx%n z48Dv60#Aeon8tX>5n$my!z7(1OJy$FxH(!_8ax7s=%sT3TfYn&F&ce4)ER-_Av8V{ zEU=tk+L+7xU1&!QtW!tcUjw?jj3v3_ym5T!?eciE1NoJW;pq5*Tzecf`xoRSpL7)O z4ukQU!t1GgF4n3WcAx`xqyY%9IR0%h>_jc_R&QFk9ADuQOu!df6M#8-iZ6SBR!)R7 ztOgGlOwMK`uyis?N@^V! zsR`liTiEY8WUQA%o_&SZEDsa2?OWhdaTEq4>rxz(5hb$ymQon7vh-qxFX|qb7g~M|uZ?i@K4~ z+=a*9_{~F^ZS%2l%Cp^IFzI@1+5s%f1u}ncVnZL1)v65R@IIgKCpPdh=x#su=MdIy zA33_q$(o&trCj3O4zj(%H*Vu`U*UBqc5wmsDUP3ii9GNAo`xX33}}R4&kxoiJVMjn zVcmjOHQYv9+(*-Xvcs?%Bo1iM=Xq;iwfCbJXQ5eoqoteLjX2t&9|zfE(7el8TXK=L z58=_&1<)>y$Tjatruk@c%cqfBz7VW@fd2U83D0_wjI1cJo%3`C<8og$!{;l`iDZ~xL4+N9ZwCgXL(Oi-pTAq zgSBuxA6V0J7~3!h4L`{4V|TSX+5gxBuq>k}BhdYwsDCA_P8zJjU;OCKQ|lahca=4T z6*Zl#7FJcO4E8jOm5ow>*Hx_gthcFy{jJJ#L)IO4vHDwMteMsZ>xA{x3S-B#Q`;Hs ztXPTyc3HbR*KcFD<<7mi-)wBuKKnFw>nSTdzOzo`7ppv8g0U~#Cs~uTpR&u|YV6Kh z9{1aq_%xy?J?;C4KG{P*JOQo0qda1Dz!}dWBX28_xz$MBD*A3dy*$n{m_F~#>W_h} zZkfb4m++~2bCqW?ub1+?(X#_NKF&2x^0<%P!&fmn3;1j$lDnNxw{gwotPYsOI)lER zUaT$n8&qG>lbc@?3b1bQC?d=tw{7m zaem*a8}d63Y1&Nxt+SWWr;{0n5%w_Z*PYL6A$vtw{gubgZs)YK(5ungj|Nf%K2F##^&MBP*~^C1Ktf-(d-PM zyk^YEG4=w+e>tda2CsXuqQ8k<6Vz7IuFGQuWGM?X(+2nM=3f1*mi+3K=446cV{$8s z^$YZR6J#42I1o4vs(Ku-tjK(l!b%0QifV)b8_|6e8+3O37iic3GC(S$GFGdz}mnxaO}XqAcJ&=@H`?g z7TmiaunKHBY(P<3wKdXS^FQ?zyO21Tgti5cfgW@~sCqZVc?= z^%*eXGcdV_7Ni8v*9Q|$u$C|aYpvy`tVJ#^(z{*|U|KsL+NBetzLxcSuk8>|Y&`Z{ zo>J(F`m6wIg4~w!WJM20^@L%*YOUHydpihu3_7rtUEi+3jH^q3|ASQjhxWO`?}gn* zH(dd5ALrM@wxc;`q9bcEd&Aprty{?V5pd~tFzHf8eJHxGrBwrYu8A&eWprV8t26Cv z%)5o@EBeF3YPulGUs%3~Jcgr$u)Z#)Co$K}#+9?6cN2Lc@y+M- z$u8#GDEx)mNN#3o9LD~FJfEfwtCOpr>}j$NcbwWBpzd{7bFj%Y!DY=530#AB~r~3e>(Ebg+X} zmfLtdh#!2~a6`fqpIDQb5OiJk}Pl!1?7(#34PJ zHybNBOQEsrvf8jdpOoSMOrU}^X!Byc(~=hSh=KoqC*~Z+bHta_Qjw-MmI;z2$G{kr64*xLKw;Y_i zjOfG!5OXK+Z*8z~cIx$=Sjt)0kIUTW6BsZUtM-#ukFaZ}7~i${XA8l2I_5F%qsv7419Ec@V(>bcI&8O4hv|o7oTpSU%RGwI1sgEGT zTV|c>6IQE+2Qg*^e^mlMwuko{0L~a|$^_4NR^846Tdo0dY`~sw$DZy0_3Z);i!0p5 zvBk5QGv>1Xa2!Rra5bMF<@X5hc%Fg|1Mrc-Fp}TlQ59dh0Q!4I%qbf3QXDDMnpCaI zY>zZmkAe(JaaXNU5)uU7|(wh-wfp%Pg&9HMMK1)H?pH|%Cerg2AH!pv$X|l zF8k8z*&x$(riGiCjk`grC&8wZ6}aJ9 zL7f@CxC*k~jusBUH<*B2FTo4gfL!lHp3mWVzkosZF(btx=SOy0vrcxLZyp}?W{Oy= zvCQIHc;D&Zv=YFzDb7}%^ZNM4u;O+;>u{I(wh{ljiFfo99`u9nA^hbA`0=TDaJtfA ze6*jw=&WEXi?`Vrue?59dUgEh8cr>I(7O2Owej2w!v=JP#)AgWbxB48}wXC5Ik#^?Nkl zJG6HI{T+;4{$f@1T`a>+#&RyBGZCI+He<9N%Ww&eZ}BUaNzvN{kW8)gu82oaky4KT zOB*Xu!i-!4PgA5;tE8J^E6Z_yYHYv{bnrD(o?;>X!g6Nk?CNOaCL9epvkpf+Y-?-Q z+75#WUy2kTX6$Z*$1T>QXJXxJ8~8kp*c$w|P3YMJAk7=JIUMUSOXB7Bp-1LYW;3(L z!F~2c?{xNcK{GYS$1Q~pPH9$)hG(uPggq(6I5tBIccCBqaQ-0Q2>jy7jNw99$~i_q zv_r>K#LLc4Kj($5EP$>k#^@JhEp$F#9$uBgx2}K(UH~>G1x!qOUR6R1b-|HBeAyAC^P9Xt;QaPrtM11MV6v6b2>Br zcQ|JCSI<{w&>L1n-^E9K!1HH3Zc+h3?EzlD!@qt)Bw8_v>&&fJcmuXKEVeK+7NiN+ z9LGIm8^i%GMmMfvbV3=IcZ^GH+M5}+ItRU%4!s={F4)Hk*bgww=a_YKS&`a+>m=oh zukgT*pwm_|+o!X)Kp$3KH$y6Fvj)EoTC^#;U<5wcMtrK9)YwlHJrNcwD~xYGEM6XO zPAph5^gt}MZwkW%7iGR{9k^D4m%{cX;yWK`X(-x6v6zO)XJW9)3nYIB_-z`RsSn7Z z2Uvd~jO85k+FoYBY4DxOQO>)9_x_lj1U|7Ffrsw~8Fcd(evDYu%18P5bwT=$p3jp{|lBl4boQ;xo*nZ{$6lAvUclXV2%+H zx?-f~vhN7`V-=qaVRp2@F4jZd{sxx}g)bV!d(F5)L00;wK)Xf73OZQEpYZuUB6^O` z_I);Mm(L(+`?&WG6BpP3PcKGgIkGUHG8YM4jU=9eS9t`F@{AF`NrdhI^_>Lb5CasC zQ4fK&k51c?F*YeEnP`1QENCy}YCf{Gn=3r!-m#IQDy$lw0S+Ikwku9)`lgP7c^t1`e7>eXBA~ z@oCR5?CKr#?h&licI0^-woClLPOR`|Ud>_mivh@TLwtyIpwH)c1gns=@nGOF9MkYP zm!pS;$Dbo*2pJqvT+l*s>|#6Y;TUZCdS<~bW^M=)m4*mlX>4@^5L7oLV;T&XA~agZ z{tQ0LBL0#LO;H>Uu8Pq_xu|(G-&b(hX?l1AG1ZJD$dh0tJf`ev=jV>#UG!DXs9%CK2<-~wX%mKq(jTm1yINM2#&jPsQ zZAAGlG1_0r8%abQuL2RbhGbn-U^LVDWBLCg@0s*3Vtp~;e^dHXu{v9kyl7+{`PoVE z6W{!3V&y?dOH?9%Ny*j7Lo}};@-mVvqlK`$OH9_$Jf3I4+V&+=qa;^~06YGkjOmx$ z{~1w5H~Rk4BHcu3@zkxWGPZSG%pAc)4m6DkFSr{}bBq%HK zBXM2~9<>XCb`D90b!te&a5g&N1QEqIq_0FJhae-_1jWdVXaH+Jm`J|X%Fm@|7tyzS zhy&awuOUFZGBI`e*<~nSID2gOs>Fg`1KX^&rHL1_ov6|k>QY5tRNO! zn+%G`%$gg%1K6sG*tNP?zeLpXEo~Fe`V5T{f%c{`5sXMgGhbl44x1?8LJ69!UPtYTqto z>9X&o&qkI?(%xxAug^P=f5&695!bCsq@V+t5Xv-d$2$M=L~gUw^1Nt=VvKnKqPB^M zCBNo-JINfFPaIuU9uz!6NisU zWa0(d_@Hkc5;h#|+!*ar1j$T?en~+|&1>xgQIHlFXAhYo21lhsW+NaA-(lLrVq>y^ zjp~8Xx`M)nqh&|&*pI7q!(SVM#$Q4G4}*WM6Ak}Dlpz6er@Tb|3sZ8^zgdY>WTB)- zvZb#h5vBOcA$8j1`rO6x9mD1w=UF!J1lQUO8lPhDRwwXTXE0!U69=gTrprLj1*03E zFbDV3-^1|3GojTl;zy13bO*1N^yGj$h~Rk#VmGbdDJCO7Y-9(txY;fT}CwUG;(!UW@{1>dc~!mh*4F2>rl;h6$=|c z7eA#u2IF19IvvC!EhBC)lDv~H6#de`K>S5nmcyL!)adaa=2*r!Ka)Bi@g#n zwjTs_41W6ry>bn7_=dABua{o>%Jomuf(c-tW?;9#{h6&3K$5fYnY07dBJ|rR^ln?MPD#EM8_)EG$?n)d-wcFXs0Ml{VEUjC zt7JJv)SNzXl(3hS47F@YULY3jd)e27{jm@z@Wo z)gHd75O(Mr*6ze_zU(O4WH)nmDG|gONW)B?r^9fKqrWFHgXc1%r_$Hn80ta8yP zS26gpGOz_T__RL$fiemzb5!TG__8{Do)0u3JbMfjKi1^u6#?_5z)OjW&+-mlSx$HA8k=#*^w#oUc5xAVqlwcgWoH{3RVIU=R>BW`#zCL zwUKN5L%&yJhNi(Y`;P8AguWZi4q)|ZM`7BP1O>`~;|K}juSc&Lp zC%Z3v*9`psmGE7=;55&`$3DbfepO&t0&@&CK<2Itrt@-&YZ;1NQJylmor|A7_u;sc(8S_sqaOvT)a|JZ8tbWi>};K1)gK{UDKh)L8MG58TsFEkfv#C`f81>d6cY`3XabNIyq`5s$#=hlS(!p%*?d zj`!iVFEZN4L4x}j={4}F6N%CHMBWsMEoWpi8BzR%c3k8$Ez#tHL}hE(&0)^Rf+;s3 z%LgfkV4x0i93^6RhH?(+QG9)khX!3Q+Eh5SdWDst2yp4yrS?+_EYUSh2$jv2}~wO{IY%O*cCh&@w-h^$8BKC$ft z!~rxXlk+M*G4crH5BkXwiNt>?h+k(TYLJ88$wPnS=g3K9KA9bhGx(({>obw>ca-;J zF?>ht{^FA)^q%rUa+BqdpD2DQyDEFLDto3Ar8CcelV#X~o~=*MmnR#d2xk`IxuV&_ zwGGk7zTo!BXn|=k-=kpxdl08+L_9G!aYnEGnE31pV#dA55N%9`L33K%gXs21qWKeu zOim_(Kh_#$Ud=I)D{^H z2yC~GSr>@%Kc)Xa(R1NV{I)c)EJ4OMn>@?Y=uYus zuhDZ}W?gbneP!n509duz%-V(6pG5}sPN#ljsaYSqo318fM|;kWL<{P1G;?|(_DZp& zGx$3RQhmLB9^_&7Xu^)Ex zC1@-NG!X;M7z=$Fo7d5K6_rDKB*p@xr2tRoz%wrZLd=VAoE?3dk5@(UkjsM`8-pl2 z!S440RSqSlGzVP0lI*{=#C-PS!M-4-6yIcab|U9}Jzo01m`r3H&R}?q{;;1zSnV11Gq9T+3^YB(XyMBul31e)IMJQxmz>%p_1e`W`h|^!8r-IdQ`LTz!!dv<1TAu zu28O$fB%5>2j5tsVw+VdA7Rkmkf;CM@v{mrJX!d$VBzBM9FA2r@5tJ};oM}U$~`hL zADHrp$9r7yGS@l_6LSup>Nqvr#U77qU@PWO=P@uAgDF!$@q0M)Dc286-IJ5)U)1nC zJ;~ji3Zu7?z08i2Q+mOFmVD8J{=G0 zflaz$R@ZHUYtd>T`5;Sa#T0U4$FM?U9M2QUN*xKi)C1pb@Jn5I)t*%qEh%lx zJ3U#|(vLGI!{TkEM=r45=cf~q`{bi0jgf|)WT=j!Z8KO^xezvdI;(#A@_sGDnC7B) z;=^lxrmv5}fiHpGnhMi8h384|Ws~`DHjL&9uD+dBM0+S3xYuOlr6cjnO87_xST~X% zR;CD?Oewe-t)nUg%b3lu=yAv=jSdSI5l+ToO-T^1V!*DaAX79Yd`==5(zr1Bv3ZP- zhn9)&6<{q&aahWt9L0E59)GMpJX9;Phr80=0m$h%>Zf&CV|hK4)g>DJ-f(g4;od5n z6(%|0igLjbY1hy+l;m(=S$L-a^~?`9o5@MVI+t)TMX$)3y~6xD16Q=4{DqZS({m$m?_p2Q6P=fiIe=yfMeAHZ_gn^vT<6s}KHCR+Uk{$1hdvvK zuB(fF7weG%jT#H=5eZHpB6>O+x-})}Bp0@zAbK|+S~fcxH8r|7CP?Ko81Xn3WEBWt z9%U9h)eNl4?B9{z-9)&q6WOx3Vp?>5Z9J4d=*kIbR^^PYqz)@MmJ`!hOP#jESnNPE zu0i8YHoJj$2WNHwQ?@g9rVX~BA+=S$O%@Px5V4L+VBIw!^vPJ;{^Trn!Ls#)I~zjQ z>rAp2{{zSD0~wzH$y~=ODW^UP?G&q%igv`u;zgpRQD}L5N@BdB=wPp3Sj4;Ft&>=Z z?ZmKGajga1XCB8wjwRr!`9xXf()N|)f9?e53zzLC?zh9-@tBG5o#5TQTw%S*{ab;> zT?xOpo?hF(Kap&ZC1ex#&GEl2HV85S4$**Cvw(*TwwC*3cz!o6A+LRh5 z=dKoyRl$8lKsf2J?D4>TF(?s1K4B>ld7YR~vf-DMCfl0==d)9=^XvIhjHJ+p*&BmMCn717ckjpA3$Ii$Oqg79@|6)>JBm_50Wu@ zk_^ntbi2+_s2J*}d<}3uNtjIXm#Otg>QSNqA5M&$B=Ragfj|X!vW|X#p z-_C&Fgwey&ilnqPJ9DiZ^Q1jJGne^v9`^MozIsfeqNxl!=EeXj;-BjfQ>Sb&?cv>l zIGy&9Z@@d1@YnLeOC}($`W1oViGIw2KFLr0TwmAab_&wVHDPzV!f*^WJEl*-M_OPql6IpL6zLSMI)>kW z9t|dR^?;b51z(c{E9vK-kLAWo+QJOdI-NVr;1A}v z1T5sj&A*S&JyIewX_(VFkfjpHc5Sp*2gBh^Vh$`e-tl&mNA-}lIA(Oj&MUvJ1{r$F zt}8^0KP7%`LXN}~{dPlK_~Iz=SbxD}d1&otzWp9HUVQvL(B=h7DCMBZSXx3KjDZ6Z zQzQv`_+ z1cv@4F$v}k9I9G$2^|@1?juda(CU0N-13&+D+o`YCg93Rnb~pa*LXa} z=5A4_fuCA`K+YfFQAx&+fN@mzGD-(cjAB1+(0Yh19Kt^uyNkvL)6BTe>rl|oHrlz4 z`L_}&5O+1uaHPT+Ezo7Put6oTK1C>Hf5$^Qf?Gx~59VXPlqu2J?Gml4mes0{-sxZ>RpPeSQPV@z>9m=jp+vic&2GYXKA_xV6mIk14f^6T z=ZFPAgWsrCejm`^ezdT1Th#kenN#YG&q($QdPKTV`AeE*(a|Ic&=^V49Llmtj%21r z?`NcBg@0Gc%#2IT%!|!;g1tYv!X0$$PUgiN{MccpKU&bL8WgS9X^Qo2WBR8#Ev-Y_ z{$rg~jSCi#(XCS=33t5%bdUY)f<)fe+w6R-)}zl&8H z`#Jx(b&55jx8cNI!8(1hey}FgZ--;;Oag3w0T`ktAgw`gdsDgZTrk-j?9N;)&mwTy z8t}zdP{uASzxcX!*dn1dtwGvju-8>A5SQwLyYRXj>twpY zI`y*tVU5fLYXQ8}0qY9uV?J3yv?)1PD+hAvPDFbqJ*gbs+aOz;dc;04+% z8Aa>bGOm?a$*t8avCV3gFg(WKbrRNzq-GU&Cf1`AfyJx`tJ$628p}GEf8px(vi9H_ z+~-?H+hM&_0%8dH;1q?Q>w)2$!XRv)C7Jxb3G7EoUHc~UoNRCj;Ob)F&8p>S;(AHtxYcg1Wp1Fei z{W;uyy7}f};{mMa9@~(OEj%wn{-(fUj>NAT$*)t5u;(gU3 z%2S^4D`A&mw$@}dOlzd4FMTkEHcz7;)#o!PlWD(tO)D5j(>p_d_uF84Z8T*H=PY3K zvYrc^YgEVH~gJyMXfa~pp&Ien^mWZNIP&kfef9men3 z$szCOD2)CYw97f>#u+@JP?+k&Xvag$mcx`|yc5djq3FwFXcVomKgf9(m`AVhmcp`X zF*W0&Urj5If7F;SNXcV8Ph(>jDpR(bJmcb%50AsWRF?6N~UH1i7j7GD~2TyFk0v|-1g<}1W{MKd4 zin)z_{^}8qjsr4E3FcBpue`R}W-U)0{Dpc%pBhpcgF72?G$!Ax4bd+BPLKA#=)uvQ z|JoCktw+SR9DYWA{3b=?BM|x4j$sc$NGHKj!bfXBM=RiH{-s{a(X~Q7>v&v^AFv4B zI@cWY@zUmT%;NtUXzK~+?*aH3YF%e=Pk+3x;j~aWHxnu2XshdGjN-j99P-}#GVj}h zG3sEqD;Vrh8Ma?qp%eaoPrMQNg~PB5qs=!)@y${EH-<8f=gHhz5rkQkNxV0RJBuX{ zu5X1tX=wCGVZ3^+(n^V!?_!ZK*uVh3+e`GyCG3*x=`BK+&M=mDK67#fe(96jX^eDQ;5UV8W&#DMjh^ zi*Ey|?G*ZNwaModhCR)AUosxf4BKwxJ{0YK9_c@4Vv6#fufq>MgKhZ< z!=l*`4)hlS+VXgQV%OgB*;8R?IVz&(1(m%-vt2=J><4$PWbNW?qGS^(<5~SZ!Wx7v?*d+H zZ8at8)(pGe+3Lx=qd+h7t!3EjedwJV#LTq9C=t=Zav-wK;J-24UzW|)@QaWQp)Tz{ zvc|}VEUtDZQPGMQx3>M@#>7i@L$7o*MKQ#7X!cfIw?2AQ44(9NYS2=AvulWhE>>Lf zF}nMj(b$*Klo!yIr&(uw1pRoxlzrw=nDQu}NSj`ychHlM=!w^0j$fdT@L02W z*oQwW-t(aUilO~VQOcN7773_Kf7YN*bvd*?ydK)K26j)mNKg(f8Ei_jcB*@a&9zo3hI^EFkj*-voV@E z=#8voRAe?fI};qHV!M&BCO?VNzQ<;L!e&|6^Dx+{SbRSN8ona+{TqEflHOmy=xpNt zCy}m)MhZV7b3e>_bgeo4fb88ivtE(!J=A&&=da^iON`wfPCW-2WHXKtpU!)Wkjb^C zCECG8NaJ6yhB#nZ`=v<0X5@DtR^cQX;RSqLc;=w|5^;%&O;$A=r+(?L7`h=p_$D(5 zI389)G5$9Ot6vA*Xnz4^;OyjjJ53SV--dqL%V+19S2qj}I?wBiAjSKpg<3=Vz##t{ zwD}SUW#}uT#!)?tZQ#N!ZDub_iLnrVrQC zW4n=*P&CE`zO8HAGS_miAsw~822xe-6T+~N<)#160k?qF3tDP|VaGgnv;8I3Yb9p1yUG`o39h{|a zuj5O}kGjv}P3m}t*2`Ox&oCamHxNxIDG|aOk8YR-qL!5G{QtB{>w9z+dApAoQ#_R#_>laDiAvFPt?fGtS{}=e`Z@l_xM(ZoDw9@Vc-?&5#chDotnRPR` z_b^)D-snTE#4ifI$-|7$EHB8s6}D;4=Uq6fv+0v&%wMf47h=o7OiKrPOi4+~b8-%4 zQ>5Vkbj-o*u+c@)QspT^c}2;4%Eot6F=ykmi$-*?byz#VJ_1h-&O1Ps!hh^SFdLma zfwlTGtVQVI4S15f(XH}p=NgV26I_~bR8KLWo#Ko33x z^?l$D+CfSCLxtts=-fLl*j-VN=;*h<4BGt0dC&OX9rWNebmn<9rqE?5Z2MKN^#+Zo zJ4OKeN8x+g`yv)sip^s@^nDUqt?ZdJloVj#xV#?)Efb#WJGAl(HF-*{?r|+4>a%Fy zL+D}M;R1KO#ai=+)c7^^klvLCkqo_?9-XEv6lIhYq7+2y7c{oE2z@H-T!Kf9T@gku z7n&~>by3@*Qdjj%cpf8}S|+D{nXyc{DS3I$V{*~*@;zN$W1g2sY53BNSq(fOY**agPB}ZGdYB%P}K;yHxdvGaEvF!!tEu{~?DRni+FhIZ z&=zU$NzI2dM`WS?qt1uXUYE?gdxls285O9^m$MgkG%Vt^2_$ZSVV*;QD%8M@M|vatyrwq$d<>VR0A{Dg|loz^hB|= zR-oucl*XXm&YGvLB9r>_rKs$`4ePs( zd!0Zp-$SduHvKAn`Hecs|B6VBli+=&Vw@5)QZX21l{l2dcmYWn@%W5;9PD&FUM0aV zP&`>is>%Wzixi4C83MK#hQ*MlI-Y(KKOz=KYuy)9#2vUcZaCi<#jF#PGLGkwd~YB# zw=b5hA2YHK*6tr(cSEmtp{F|%oo!F)Krbmy*oSjM~mnHvKgt9>`*X(;0^H{-7TZwgUI z*F!IX3{=AZXow|mX=JIbktE^g#>h;4W7iw;x(V8<6|Mi9BJM<4dXlT=lxBP?#-u(P zPWZMFpR_g7)R!?)FZJY`+B>iw_Y%WXk{aZvpK=*An#Ewz)Yyc?SiN}Y;no(R z<^=4g_M{odo+W)@UEAZUwC3o5$MO&S;&8L`&kW9&ebt^mJGh!Slq2Tx0G#t?KKa*N zbphP$Vs?XB$fNcETEzP!|q-a$=$~GpZooa1db0nl? z3He_=AqyIZ_Y-iQ(0o#3LtVZlD`-A5C7r<;!VO7Guekjf6YU+v=yE-ZkBeojUSzcU zU(`Z8om(PtW=!sxgc_-LGb1ZSv0U{T26yd%lcwGTWs7)_5rLS7>*o1jrhd!%@O{vJI<)~#@ zzE_$~jO!)efB{ndrr%ScQ)KFMZbz9oLBVR^?pX!`)L%waZ9xnNR6hX;`5|?J%ZM6knT* zp3TT;$rG0rOTcp~`XC4A6*E46O|IO8J1FP55v)-KT3^6iTPWGhJ<>dm$=r>Dyd*#> z=s_=EBFTD*G#GnXZELdWh7Xjx2cGB65aL=vD=B7uE_K!gD-(pzxg z17zctb=#DCApM6F?Ykyl;XeQ01(}QQcF(wLu=-=H&MS1=SIdi^pxs&H7|9pzk7-`T zr^bmXNzB|(PI+?bAP-0*`v+_1;J*y?RbpBx?|zQxLY z0JXlM&a$EROzrgi$mC?d;gi?KpK$k-dt%;|uk#8$>>jTS?p5adFKQkP>W#?#+}f+Q zD$>Z(z44i8DVTlQ#V-?MorQX5<8^xKn}~CyTQx>;8Dn{Qn(gv)Tz^kmJ24|K-RwRl z;!OEJ8l^NwcK$HtnlZVJtmi;_vUB8Q{BluT+1K0>t6mOCk=Iz(%s0uMyi)CJr<^pG zNove|l|L@5-UZz_2wkZt(hQK1u#w7Q4q>F#hBXk2um$#D9Y{;jD}6f0aD`L(rg*|J zprzrUB_XYm{3l!B#>3`u-YkR16l)QWASBfV+usZsugtv3Nm~^G($2je`zu`28%FXq zT`{Z-j~kKX>@sEdQslIxL6?>?F?6ycjS?0gB86 z0F|9atL_C6tRrUqFS=GJLu(91uwr1iIR;y9839u|fqmnqan20lpL1bGm$RN=8%RMb zF|>E0b_@K#JtUR#-^DO$_RCth7(v!UmRj>K#Ua~X(noBvUv9yk~ZEDVuy-1Gy zC1gfLr#C}P-@nHDyG8BKQ~ML36vcMoSdV5#=3nP>t3+khSMv`1)Vt32`DDy&7R&x(u|AgxxM(UhpK zR;QF^m%RLDx4~>Y=I6iCyjz`5n{zMm$D`>@_0$~tO1mu1!Jf_K(7uZ^=u6=_x3>p# zc0Wpg^Vo-4bph42<(?|dxMu^h2&!8Zta8Mgi?H`$9`+*4LVQ^}BPJ)_oQ&rb?An*X z%FZVR*u$^{yCIh28 zoOc@06ZQG54lS)}V*9n`0%eTa5eVpf0JXM_em9J0ONwVJx3zTb32z?^oal zk2-$xnm75x!{Ox>OSvpR=Z9lI$e4UTBRyG;`?X?RdK)}DjXqljSF{TZdjSppl$rM@ zKSDmf_!@CNVq~K7e^g{n^G-4+%$?3imF9xDn;1rp9HIi6tR9~A+HaoyNG(4_g5*Y^ zL}hl0WASt5S2Xr3r29Ft_Xw>mOL7qjJV~8|skQ!Q9c7Jq+>A8tfY&<6>^hC#a}{a5 z$@~xlFXrkwn*6OPpO`OSDc>pIuoD5xXSDerE2x>DgnCOaYsP5RlB-$8@(4*tdx{xK zZ)S|Nw~(4Ue}q}|9nCc96X8K|dU{O7f6^_o$uVhX_}@Mrizn!Tzv#^v=y@@D5q{e- z4?X3wa#2i=>od3Cqw&8qnEGG%T)v`>HniwfA6L`2!f}U4#=^T^f$J*?8MywE{0CXv zKVv3jDyvWsO(ry13AFP^!!-bRGzA;Wr|tTGrKdsBJ;BS}jrZFfyCG&vc0*CArC5qJ z*oqA>O)j&)ns?_IFI+l*D3(DP4DuD^i;u(OR@`Pbw!vMqH36@CG?v8Oe|V&MJ%O_( zaIXCD{@hXQhWu`=3F`_T>x*wc4qGF3Y!%jNli|C?6KsJgQ0C5d7>nI-277r_rubGq zk-xCn)Kt+gc@C>!50+us=Ht7}#8yqCRa3a`B<`=h?-dQxj`5SY+h}Z2C*uBQwDpim3f(vt<*?`BrF5}W#%!Xc~7=q7$GiWBu+Ix^C=ad3D1h5 zRD7rk*jJvjP@tF_`COg3qxc8;Gm3O6&LuCWC#9R|9ql*V0_<7`dtb)jfFj1bFN93z zHx@y5Kt~ozF5VN$5Fc8~AZH<9A=*-WSDa~H&XJ6ZA5DnGiH5xkhvaEq`;1N2Ja=;$ z^yo2jU(E4OEcXv=)<=WL9x<~o!%-ZBmzD><((K&2f_c5cSUT;HdkLTT2FG>mr?Mu* zZd^tiTqJAZ3^V=^zRFh4U&R`|`DprSCdxPxYpQIif6QK^e;Z5F7(G`L?JPZ90^MAc zQp{-X66okk=+`>N@-(zm8la6E8!fGsf%5v>QDoD)7)v&gJzdAZ56m!L{c`HQihBQt zPqhX6D3<*g_VP4ZOD#|yh|9USD;!;{A|E~;Jt({@tRZR0ii~7K>$v{9cE^^@RxH8w z7Tgt-E{YQl7Cx7jRd$VXYXWGs@AUCEqv^D>@GG>abm(pBaS5HSIOS0^=|SqakDlLw zMpZ`qE-d?g^sBNzj({?hA99{PSEih>##_eio8f-N{|g68bIXsAK9Yx+5Q$A{^qewz z#16>ck#2E$CCQC)Q?gKRMLDDmg*DvYX%Np4`S;ayJz=?IoF{$iGVSt{gmYa#TBuqx zNirywJ`!~j{&x|-@c##jVwJD405567Q-j4GFcxjM;vZOE)_Y>o!}r(Kza3{@&KYvuh`Fu1WM z=V%>4Tkv*!gSp#+zFQe@xuHRn^|@AKu&`!#SJ;#RXgkHdg_`H0*|Y*i>tDpDtb|e7 zi2nMc({>r%rnNBJDPs9IqR+IZSXmUxo><0fMNzk)8MkssJ4@>+o~mE)SjJh4K=X6C z+f;D7IOKll6EPs-k(*PyhO}9+EBVsW60Q%gh>CX6&iz}4bC^+++!jJ_lrWx%`a&yK z6cJIMHRF0JjVKLF?}=e{{Saw%X}7VHMPo|sQH2UK1dJn_az z*C*!0=ieSl0Ei>otKUtD!JV{*IU7AvlF_ee+N#ydz39y$ct-BN`tpoMbBJA@On)oO zRI$)?jEWnXJw+7s0*7MFXJPkG60JQ9@1^X?b&QwTYW*IItk58?t(>dB(e^G!AVx?$ zgZe}Mp^AE^kns++!ljy#Uoi`<>03#qxZT!fR3y(D71@9BzU_^z5v$!7sT_z69!|}b zCo7h39(A8@WM>|BUipub*qPK$zcHg|T0jG{O~*;zNM zqzgUYl^&8E?u@jyHNB`+Ly~TBcGU16kk@F& zLf*ZYSs|`JIWyB3Ct)0+8bvz#GV|q`yOARC`f8uBUJujmPQ2sFi!vm|_%-}JGb_>#<)w$&cZ9-ASXci01qh2dbn<+?INFra_(NF zYm3pHYe0hkBCW1Wi_4y8w4?e>`9^M;iA+zU7pEGmD2dmhqEB?DW``IQ>EKn=R2eL5 zDAKrp^sTO;nKIRkhh~rRfrUQ*yyuROaIx4G#ioRd-3(XdK#VbZWE%IIk7jT)=JYF1 zb4}fZrQP^de`HsBUC)YTbw_?$BVXE0K{{2uZUHo@xT|#7*rez)@la8*gRZ?7&miwX zY?rX3__=(HcoF1R(p#M?Daxamk*ryBWLG*|b426ThdWD$$P-ZJvRdNuMat(;j`U#j ziEQ5l+OM8eo{wZ!QoDdrSz-E7xu41!TF7V0R+IGp@eh>2+m1Uc_9VNk92D8EYRHoE zsFYJBOk2oU4Yf7{?Qt_P!KS-qUq77sc?qwq1Hk z9*p`(y`%`6*t2vTZma(Eg^OXeKac95ySdpG?!9$2Nmova`cR&Sya{1B?I0pX*v$wL zvmlQ(Aw|5fB3lW0l<%szpUWW2UvhbFaeRtliR%`t5T2r608^fVUMq(q9IqoI$+5xS ziILyb)IAg9A(SdRsUlf+^LI4j8f!OeIWH|KiC&Ucm4B>wsIoKUgUS2T=qT$+esO2U z$BizzGAFbmEvG{$NHK?M%o0V`YjZ83K50 z!;_s;q(d!I=73v-7&NE5;66fl=g383~HVxEAq$^F_>rdR?vS#TY1WTpC9F^Jp09Nk)IT zt4CKFtSc{Hhj!ahSz#Vmp_!E#r;JHqW8sTE1{WOQagX5*_L}Ft=3VXMa|CP>N>Ntc zNrP2R@t^R@|MK@-{H=^yWu}gyZwFID$%~j2)n2&+ZA`D#VH|}KWDhm!uC=VryXq?! z69`31!)pDCvWT@BTq`1^f!$fAndf?oZVXJ!wItV-5otn2yvmu`Es57`6gG6@i*D>p zex_mtn!`HW*{p0d@kAO$*=RRwRdG2X97(yNe5!{=PS@7V(xFk*6{VBJX%wTzk_HvA z3~r8FMbq*>zJ>J9pYx=b6zfz(!+l6ApIuxBN%xZpGxp z$|>R|U80z`xHT0qZDR4oYiOq<9}GqSPf))gsC61*++B7~vGM5W5;yWAzgH0}m*Wwm zBi}R*zN3mF4`S}b#);pNkC2pe-5ft@OXZG9Gb{F}ykNy|++J~e=8pytHk1w$p8Qj! zDfF&-UwxOB+F~W8wcT7p@tul8i}}>!AOBr(kIamgGT2H{2Sq$;o7pLE zO*tL%(o~e)p;&Koo?D|0l=C5-Aa6}ptRuQXXtgOLu%Ea%FuRaq3dZ%Zz)?)((QV?xj0ucr92fE!@ILWb5$B%dR}XF zT!gD}R5Y$E*Okwz=()zp%@B}(CTt;#BbG!AhwP%eo?~s z9zCjQwPa1LclmmGq+)+1bBZwPH+B^5(W9GfsqxNcG=O?n5q;TywOkrnnnpH7_DQ*k zE~<0wi|k(~G_SIGmGvt;H^yjO<>?ErDSD_iRzhqluKpEj)5;Dpt;-D#RwQvDXDjL` z&+!kYp7MYAS1jx}t}eSY2<`5oS0N&?uJVCgR3wY{NB-oEDgR$<7Q`jUOOg$1Wqe$< zs3}@k|GO=bCGU%Nc2_cq?R6uUbHV9anWx`F(GDWYR^E(-*k&xmeq#kr;aw;r{014q z56NSBMLx?1@>-N-_{QY6ydY2SF`sGOg>qWl^>oVO*1Ec@zsqI(-ixN3$EVey$Mbk6 zvMlmk-CUQ=)Ip537#wjus*j5NR_#P6R!1w_7SpT3#`@he6sFX|EXnOo#VDnD7c zvlkdfS!?Ry0j3Q6zsEoQE+0^SuJEVyf#L(*&G&@swZd))eW-C7Y{tpWfa}D0@-&nw zAzV}&$&zm>_N=ja77JDvU7>7PVI8+<_Q(?IS+86qBpl`L(ILcClkd2QshXK_u8x$R zln*T?&b?we=CCZK%U6k&{9lnKlD3f^Qd~!xGL_NlLb$H3aG7%DBxue{CrMYhe!S+d ztFPn{y2=J|^9zJ=|NpE=;@{^A zJ1Yx8s93oX!pxfO?xC~XYY96muRxmd&$+sX-WMaSNB2s)V{|l%w5rx?3O@^1OUFvT z>iClx=6Z&1c7t@SVjR*cu3i)dkyTSnL6%K=RGPGyu>tNFsPCmsrPsyVxhqlhzup&q zaPz6$EbD@N(?t<(|GHOHq(W9xMV7|3GCEfo6N-1p#tO&i+10wbud8=8vdS40Dp1y- zvJ90QCvQTYLpV6*FoyjW1FqPmVr@D?_+L4j%0Bt{n{$2!pL`#d*QkNK)BE1 znPh+{HX(HsDmhB3u4OtP3 ze^JUY?zR|#kj|N^!!=O@&k2mk@H(*Bd{gT#j*tCz0e2 zyx$|TgRdgea9^=Val)uma$h2dXO$2~{H%fdp3G6mMW}_lAHTn3pYed2iD2X>U{tA> z=mQGcIJ0?*Df1&z`8W4sAkWAsi671=u~hO2?ujo9f3v6A&$v4!?&Rg8inU6;D)#d<*wQB!#M~M%z1^sOGN(v$;iu)2YuxEA{ihV3dk}Lhr}A*Q$v@i zcH>!?SL`QpVBGK-?l<6#yEL*AvMl`3Z=>3^kh7vcvL!g@%@upJlTQYWssVLMp5+XS ze9N414?&KL?~)H*Cq8+Pz&(p|yPPlVxXV2{Ex--!P)eRimgt-fOCnO(m(hvQfRvD* z`RR`HO8Ut&2kJ0U6Y|M-_QqkF!)%FjXg%{$?w5!~+?|l6Gd}rwt*ylKfcOuh{0~tw zP2)NfWkmK*+((+`!qQ?~v2M7VLn>D*eqn3O%X5S>R*?G(q7*To$ZZTXPfHy8shuY@ ze$(s`i}8xshX$}M-+7^bv`^IZ9acVX@c7H9%NWXYTb^BbOl4eUlqJXINd{wZt$jzr zXzlkieG!GZr?f=;W(JKS8RQRFWVwu4@Rr;eBS^Gi^l`)`>JHaJ=_2#z?li59J3nK+oOu}S2I_@-BkbPfXMEg!SSO_stc@ph zkTLjv0>^Lep&2jH3L~ZGHJnl(L1q43V^^uRbK;~|{QWDEv2_@BUF@c$dZ zU@*4}bRq~V-h}@~*#iq-jsBf%&vr*&u)V+N3N(hcAnTC#>|Q8y|Ii~n!y?gRVwoy) zbnZZA={t7(7T?Be$s+8tcr89eUc#DvGB1!OV4l*S{;dA}LA`xmy$9p)oRA~n6`2|M z10frp7M|qEKr9{?#^kUt8wZ34{G#xHJA~udC?w!r!oRH+5^$C99jipEh4NS{eBgSa z8n+6exl40B9uT_ZKwvQs2{->p%;7jJ+{sblIlmF;4}T&0DYf@ZU_h7);;(A3{jqQt zKZ#j6KUe>lPtM$&=YlBVI~-svf23=l4MfJ%LS{S_c+2kzIW!CF#NlO;M=4guM_TNwTQ0+LGW^?IJ{e!n2kclz|XxpdygcrUvhXT@RA3G<2a z0(+#-U7~w~J2=ecK538HJf7#kHT!hs16ua0jt2u{dmwZR()MA^(LuY9s^!PjhvSmT zNlE1i$sP@SSIZOn{VmbSK*7>az6O3IY~qk=I4C;QA@=!2ok!vvEbyT8hUVbr!RSqL zu{-$KDP%ANNAy3J-O}6MAik)uH#qZ5CH~Vm%a=r;hWVf4UkM!SSGA@!llQ+Ky`+!s z*HQKVF-aRN(=l-kp6NvJ=r5ncJ-ov`{6pUfTSNxOMb=cxfVos??TF-PN#Z5oq)hDb zo7RxsqdNDX`UGybTel#0_lnp1L}=6!@pflN+dJjS+vUrfTcbaGTi*4tPK{!pX`!}ETPGg+P-qf8CSg0a9!qPVuEiRVk!3+-BO0s~ z{+ih4Xh4MHKaYP_Xg1S|W<~r4jZ8Uoht44qeqOPI=y7LYxY@F|MrDqc)JA=*P2Q)i zFX$X%kE72z$zXlNAEbaBAY`4|!OnXL9|j>0K7O;V-k>_}5h3HdL$)Q~4La)M9D(aK z>H{%-rTAG9^Y@ktcYRB|Lfjb9PJx6py(Col`e@J*h2-Nm$AqF{qqrNRSSNOqs zLJ8g!IBgJui&WRGqECsI31xV@FoK_vRFU9H5%RMXO8zMoQ1Rg6u@YOzM)9{LBm=)G z8CxD!OT4y?U?=QjxnA-J$6aol=8G%XB~}UkewBK*Ts>W;FXYklC9%F$zm^6Uti1Y?@*foTDXQ6Wi9^IyVj%M#i3&x;2S=V`5k*dP zqK;$hHzTevH`5W~k%$owMCd5oM}Hnul5vs$m(c;+NdXqc@J2L?F37qReFB(lSGasQZDKJHt#F_9)?)&tT8LxaRsG|IeBmB1Stx&zG#2NrPmNi)mqO zL3Ug2H+3YB{H+7l$a{gV@^!3{uH{XwM1QWdzUJwBqt;rjt;dh*2r^(X&5d)>EcMW{ zg_7A4Ne^wHigM;~G* za>{IlzInkOiyXx{vOFR!(Uy42)pdR5H~4BsTxUqNcFd)|tSvoxnYe~;kD*JXNywgE z7G{fKZ9ld}+PbhU_BgxznbPu8Y$JJht_BwsPtZnc#Mwvk39p>XXv0?vs;`R`1BeWe zqs3Ak=PXO8x=xb&*Gd17sD$P@ScZX(Z%P%kQ(Ke6GXl7`po{4>*$?>aH%S_D~yjt@; zu2Id`iQXrAf3(CNCD%rq?~Pd@oYxoa(*ycIEv_qDbbIg848SWi5Ad>Pn&t?;Lv!jb zZ7$Z_z>E87ioQ-eSu+NiGYDNMx>=of~qo+)`@i zNt(zADNPC~TT+wNKV*egE|q?!N=wM=vW~QnlliZ;tq7THui=5EF(*Z z{EOMkQ088>r8M)kjHK3CN#EM1_F1BgSsN zwa=U!$9*!j9fA?q)num@z{YwK8->*S|b7FA#N+ikJ#J?6MrvC&>>ndZ6f zC%uRJlnqB6i*4JfDO;`W*nVn1rkB*~>)eigA3joR#gq5SPO~>9x0IjzWz7)PYvk{a z2pPXCisP^LS?53O=a@%yuhGxBk>i`AT8(~|!_*juN>}zgtk>S_?1&7)IYebhnImP+ zkXZxy(YQ{oRL3~##bwS8$PLI2lAM(|SD+=b7Fr%GW~9b)+x9@px}%TtyGfD#IPY=) zoy}#Qb53)PzQFKi{r`eDbvM5wo}0DgwzoWg58PJm)NLA!t31}r1uY^^sGT>uWbppv`FXTmM{gNf zDH*48PG{t4c@x5}Y+b$Uv^;Fi_C~&MYe*X=uZPA*4m`G>kLn-tN|}^Yuz=CcSvFS#AaW&5n+xJrkrvA5m9e`h__ewL&a)REdtousyg+NP~yha8m^c4|<)x{gd?C=B3eVnir=RuVt`n k&(K$eUKyR<^wO)F|3&)8TZ7W8nwLWY^Sn%IUgF<>0inkKvj6}9 literal 0 HcmV?d00001 diff --git a/Assets/Sounds/fire-burst-flash.wav.import b/Assets/Sounds/fire-burst-flash.wav.import new file mode 100644 index 0000000..4994a68 --- /dev/null +++ b/Assets/Sounds/fire-burst-flash.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://braj74by0oowo" +path="res://.godot/imported/fire-burst-flash.wav-9c015de28d7fd87270e17866ce60cb91.sample" + +[deps] + +source_file="res://Assets/Sounds/fire-burst-flash.wav" +dest_files=["res://.godot/imported/fire-burst-flash.wav-9c015de28d7fd87270e17866ce60cb91.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Characters/DocCenturion.tscn b/Characters/DocCenturion.tscn index 56f7b2a..0284afa 100644 --- a/Characters/DocCenturion.tscn +++ b/Characters/DocCenturion.tscn @@ -315,6 +315,7 @@ MaxDistanceToTarget = 128.0 UseItemDistance = 48.0 PassiveState = NodePath("../Idle") PursueState = NodePath("../Idle") +PursueOnLineOfSight = false NPC = NodePath("../..") [node name="Idle" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PursueState", "NavigationAgent", "NPC")] diff --git a/Characters/doc-cultist.tscn b/Characters/DocCultist.tscn similarity index 95% rename from Characters/doc-cultist.tscn rename to Characters/DocCultist.tscn index 27852da..7f9e868 100644 --- a/Characters/doc-cultist.tscn +++ b/Characters/DocCultist.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=43 format=3 uid="uid://3bcudbixirkj"] +[gd_scene load_steps=44 format=3 uid="uid://3bcudbixirkj"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_2lfeo"] [ext_resource type="Script" path="res://Characters/Enemy.cs" id="2_l16dp"] @@ -10,6 +10,7 @@ [ext_resource type="Script" path="res://State/Thinker/PursueState.cs" id="7_q01ij"] [ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_n0iqj"] [ext_resource type="Script" path="res://State/Thinker/AttackState.cs" id="8_woh6n"] +[ext_resource type="Script" path="res://State/Thinker/IdleState.cs" id="9_kypol"] [ext_resource type="Material" uid="uid://bat28samf7ukd" path="res://Assets/Sprites/Particles/NPCDamageProcessMaterial.tres" id="9_x36vb"] [ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="10_io6bw"] [ext_resource type="Material" uid="uid://2tsvsp45elru" path="res://Assets/Sprites/Particles/NPCDeathParticles.tres" id="10_yyggy"] @@ -422,24 +423,36 @@ Character = NodePath("../..") [node name="ThinkerStateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")] script = ExtResource("6_8y4xc") -InitialState = NodePath("Pursue") +InitialState = NodePath("Idle") -[node name="Pursue" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("NavigationAgent", "AttackState", "NPC")] +[node name="Pursue" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("NavigationAgent", "AttackState", "PassiveState", "NPC")] script = ExtResource("7_q01ij") NavigationAgent = NodePath("../../NavigationAgent2D") AttackState = NodePath("../Attack") +PassiveState = NodePath("../Idle") MinDistanceToTarget = 96.0 +MaxDistanceFromOrigin = 256.0 ThinkDelta = 0.05 NPC = NodePath("../..") [node name="Attack" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PassiveState", "PursueState", "NPC")] script = ExtResource("8_woh6n") MaxDistanceToTarget = 128.0 +UseItemDistance = 128.0 PassiveState = NodePath("../Pursue") PursueState = NodePath("../Pursue") +PursueOnLineOfSight = false NPC = NodePath("../..") -[node name="Idle" type="Node" parent="ThinkerStateMachine"] +[node name="Idle" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PursueState", "NavigationAgent", "NPC")] +script = ExtResource("9_kypol") +PursueState = NodePath("../Pursue") +MinTargetDistance = 32.0 +PursueOnLineOfSight = true +MinLineOfSightDistance = 128.0 +ShouldReturnToOriginalPosition = true +NavigationAgent = NodePath("../../NavigationAgent2D") +NPC = NodePath("../..") [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] debug_enabled = true @@ -524,6 +537,7 @@ script = ExtResource("17_sjq8t") [node name="ProjectileSpawner" parent="Inventory" instance=ExtResource("17_dmlbb")] Projectile = ExtResource("18_lwg36") ShouldOverrideProjectileDamage = false +ShouldOverrideVelocity = false ShouldRotate = false UseTime = 2.0 diff --git a/Characters/NPC.cs b/Characters/NPC.cs index 4f761c2..1143e5d 100644 --- a/Characters/NPC.cs +++ b/Characters/NPC.cs @@ -90,10 +90,7 @@ public partial class NPC : Character { if (AttackAnimation is not null) { - if (AttackAnimation.HasAnimation("attack")) - { - AttackAnimation.Play("attack"); - } + AttackAnimation.TryPlay("attack"); } } }; diff --git a/Characters/Player.tscn b/Characters/Player.tscn index 68f9cf7..0c0242a 100644 --- a/Characters/Player.tscn +++ b/Characters/Player.tscn @@ -324,7 +324,6 @@ script = ExtResource("1_flygr") Camera = NodePath("Camera2D") DirectionMarker = NodePath("Direction2D") Speed = 80.0 -Stealth = 1.0 HandTexture = ExtResource("3_3dqh7") Sprite = NodePath("Sprites/Node2D/Character") Inventory = NodePath("Inventory") diff --git a/Entities/UnwantedFrequency.cs b/Entities/UnwantedFrequency.cs index 27a2146..fe4243c 100644 --- a/Entities/UnwantedFrequency.cs +++ b/Entities/UnwantedFrequency.cs @@ -12,10 +12,14 @@ public partial class UnwantedFrequency : Projectile, Utils.ITarget public Utils.Trail Trail { get; private set; } + public Utils.Trail Trail2 { get; private set; } + public Node2D TrailRotation { get; private set; } public Node2D TrailPosition { get; private set; } + public Node2D TrailPosition2 { get; private set; } + public GpuParticles2D DeathParticles { get; private set; } public GpuParticles2D SpawnParticles { get; private set; } @@ -30,7 +34,9 @@ public partial class UnwantedFrequency : Projectile, Utils.ITarget { TrailRotation = GetNode("TrailRotation"); TrailPosition = TrailRotation.GetNode("TrailPosition"); + TrailPosition2 = TrailRotation.GetNode("TrailPosition2"); Trail = TrailPosition.GetNode("Trail"); + Trail2 = TrailPosition2.GetNode("Trail"); DeferDeathTimer = GetNode("DeferDeath"); DeathParticles = GetNode("DeathParticles"); SpawnParticles = GetNode("SpawnParticles"); @@ -51,6 +57,7 @@ public partial class UnwantedFrequency : Projectile, Utils.ITarget float radians = (float)_currentLifetime * 24; TrailRotation.Rotation = Direction.Angle(); TrailPosition.Position = new Vector2(0, 4 * Mathf.Sin(radians)); + TrailPosition2.Position = -TrailPosition.Position; if (CharacterTarget is not null) { @@ -64,7 +71,7 @@ public partial class UnwantedFrequency : Projectile, Utils.ITarget public override void Die() { - IsDead = Trail.IsDead = true; + IsDead = Trail.IsDead = Trail2.IsDead = true; Hitbox.SetDeferred("monitoring", false); DeferDeathTimer.Timeout += () => { diff --git a/Entities/UnwantedFrequency.tscn b/Entities/UnwantedFrequency.tscn index c1b4e30..9032d58 100644 --- a/Entities/UnwantedFrequency.tscn +++ b/Entities/UnwantedFrequency.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=22 format=3 uid="uid://1y5r6sklwgrp"] +[gd_scene load_steps=24 format=3 uid="uid://1y5r6sklwgrp"] [ext_resource type="Script" path="res://Entities/UnwantedFrequency.cs" id="1_6sbe0"] [ext_resource type="PackedScene" uid="uid://du5vhccg75nrq" path="res://BoundingBoxes/Hitbox.tscn" id="2_gxtvd"] [ext_resource type="PackedScene" uid="uid://cojxmcin13ihm" path="res://Utils/Trail.tscn" id="3_67uhs"] [ext_resource type="AudioStream" uid="uid://cn2wop7rfxku8" path="res://Assets/Sounds/karabast.mp3" id="4_pbgsi"] +[ext_resource type="AudioStream" uid="uid://braj74by0oowo" path="res://Assets/Sounds/fire-burst-flash.wav" id="5_6tm7d"] [ext_resource type="Texture2D" uid="uid://c1a7lvb4uuwfy" path="res://Assets/Sprites/Particles/circle-16.png" id="5_qbbx7"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_30y8q"] @@ -17,6 +18,10 @@ point_count = 2 offsets = PackedFloat32Array(0.00662252, 0.715232, 1) colors = PackedColorArray(0.996078, 0, 0.164706, 0, 0.996045, 0, 0.166638, 1, 1, 1, 1, 1) +[sub_resource type="Gradient" id="Gradient_m1y6u"] +offsets = PackedFloat32Array(0.00662252, 0.715232, 1) +colors = PackedColorArray(0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1) + [sub_resource type="Gradient" id="Gradient_2q0ut"] offsets = PackedFloat32Array(0.525926, 0.740741, 1) colors = PackedColorArray(1, 1, 1, 1, 1, 0.00784314, 0.215686, 0.784314, 1, 0, 0, 0) @@ -121,7 +126,6 @@ Delay = 1.0 [node name="Hitbox" parent="." instance=ExtResource("2_gxtvd")] collision_layer = 0 monitorable = false -priority = 5 Damage = 12.0 Knockback = 324.0 @@ -144,6 +148,19 @@ end_cap_mode = 2 MaximumPoints = 64 Frequency = 30 +[node name="TrailPosition2" type="Node2D" parent="TrailRotation"] + +[node name="Trail" parent="TrailRotation/TrailPosition2" instance=ExtResource("3_67uhs")] +self_modulate = Color(2, 2, 2, 1) +width = 2.0 +width_curve = SubResource("Curve_eu273") +gradient = SubResource("Gradient_m1y6u") +joint_mode = 2 +begin_cap_mode = 2 +end_cap_mode = 2 +MaximumPoints = 64 +Frequency = 30 + [node name="DeferDeath" type="Timer" parent="."] wait_time = 4.0 @@ -153,6 +170,14 @@ volume_db = -16.0 autoplay = true max_distance = 64.0 attenuation = 8.0 +bus = &"Effects" + +[node name="Burst" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("5_6tm7d") +autoplay = true +max_distance = 512.0 +attenuation = 4.0 +bus = &"Effects" [node name="SpawnParticles" type="GPUParticles2D" parent="."] emitting = false diff --git a/Items/Weapons/ProjectileSpawner.cs b/Items/Weapons/ProjectileSpawner.cs index fb0a800..453e598 100644 --- a/Items/Weapons/ProjectileSpawner.cs +++ b/Items/Weapons/ProjectileSpawner.cs @@ -23,7 +23,11 @@ public partial class ProjectileSpawner : Ranged projectile.Hitbox.Faction = Character.Faction; projectile.Direction = Character.Target.Normalized(); projectile.GlobalPosition = GlobalPosition; - projectile.Speed = InitialVelocity; + + if (ShouldOverrideVelocity) + { + projectile.Speed = InitialVelocity; + } if (ShouldRotate) { @@ -45,5 +49,7 @@ public partial class ProjectileSpawner : Ranged target.CharacterTarget = npc.FindBestTarget(); } } + + Character.Inventory.EmitSignal("UsedItem", this); } } diff --git a/Items/Weapons/Pugio.tscn b/Items/Weapons/Pugio.tscn index b4631d7..eb037f8 100644 --- a/Items/Weapons/Pugio.tscn +++ b/Items/Weapons/Pugio.tscn @@ -473,7 +473,6 @@ hframes = 3 [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Node"] top_level = true -remote_path = NodePath("../../Shield") update_position = false [node name="Shield" type="Sprite2D" parent="."] diff --git a/Scenes/Maps/Arena.tscn b/Scenes/Maps/Arena.tscn index f647150..17a6a79 100644 --- a/Scenes/Maps/Arena.tscn +++ b/Scenes/Maps/Arena.tscn @@ -11,7 +11,7 @@ [ext_resource type="PackedScene" uid="uid://dldnp8eunxj3q" path="res://BoundingBoxes/InteractionTrigger.tscn" id="9_3401j"] [ext_resource type="Script" path="res://BoundingBoxes/ConnectorBox.cs" id="9_fg062"] -[sub_resource type="ShaderMaterial" id="ShaderMaterial_7dryp"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_eas6j"] resource_local_to_scene = true shader = ExtResource("5_h8k5p") shader_parameter/color = Vector4(1, 1, 1, 1) @@ -113,7 +113,7 @@ visible = false position = Vector2(120, -112) [node name="Doc" parent="Entities" index="0" instance=ExtResource("4_ej0f3")] -material = SubResource("ShaderMaterial_7dryp") +material = SubResource("ShaderMaterial_eas6j") [node name="PointLight2D" type="PointLight2D" parent="Entities" index="1"] position = Vector2(168, -42) diff --git a/Scenes/Maps/ArenaExterior.tscn b/Scenes/Maps/ArenaExterior.tscn index 842a50e..36ef66b 100644 --- a/Scenes/Maps/ArenaExterior.tscn +++ b/Scenes/Maps/ArenaExterior.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=59 format=3 uid="uid://dr3bcvql7burk"] +[gd_scene load_steps=61 format=3 uid="uid://dr3bcvql7burk"] [ext_resource type="PackedScene" uid="uid://clwv2owvk6abe" path="res://Scenes/BaseMap.tscn" id="1_ci4ij"] [ext_resource type="TileSet" uid="uid://l61kbx31ug4p" path="res://Scenes/Maps/ArenaTileset.tres" id="2_m6h7j"] @@ -29,6 +29,7 @@ [ext_resource type="PackedScene" uid="uid://cdj50hb84aujp" path="res://Characters/DocLegionary.tscn" id="27_84gw4"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="28_b3suq"] [ext_resource type="PackedScene" uid="uid://dhamcei7tfta8" path="res://Characters/DocCenturion.tscn" id="30_qfl2k"] +[ext_resource type="PackedScene" uid="uid://3bcudbixirkj" path="res://Characters/DocCultist.tscn" id="30_xj4yo"] [sub_resource type="Gradient" id="Gradient_jupxw"] offsets = PackedFloat32Array(0.00740741, 0.2, 1) @@ -161,70 +162,77 @@ size = Vector2(64, 97) [sub_resource type="RectangleShape2D" id="RectangleShape2D_5pcme"] size = Vector2(18, 6) -[sub_resource type="ShaderMaterial" id="ShaderMaterial_1q1be"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_xq8mc"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_obny8"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_w21tu"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_exlka"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bgnx0"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ec2v5"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_wpwa5"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_ohpa0"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_nayll"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_aiu1q"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ng6wy"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_bf84d"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_vxxuo"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_7skkn"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_xq55r"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_soae1"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_1c5jm"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_to8fm"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_r6iyg"] +resource_local_to_scene = true +shader = ExtResource("28_b3suq") +shader_parameter/color = Vector4(1, 1, 1, 1) +shader_parameter/intensity = 0.0 +shader_parameter/alpha_modulate = 1.0 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_3ca81"] resource_local_to_scene = true shader = ExtResource("28_b3suq") shader_parameter/color = Vector4(1, 1, 1, 1) @@ -677,45 +685,49 @@ position = Vector2(256, -9) position = Vector2(80, 373) [node name="Centurion" parent="Entities" index="7" instance=ExtResource("30_qfl2k")] -material = SubResource("ShaderMaterial_1q1be") +material = SubResource("ShaderMaterial_xq8mc") position = Vector2(-360, 31) [node name="Centurion2" parent="Entities" index="8" instance=ExtResource("30_qfl2k")] -material = SubResource("ShaderMaterial_obny8") +material = SubResource("ShaderMaterial_w21tu") position = Vector2(-224, 131) [node name="Legionary" parent="Entities" index="9" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_exlka") +material = SubResource("ShaderMaterial_bgnx0") position = Vector2(-214, 72) [node name="Legionary2" parent="Entities" index="10" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_ec2v5") +material = SubResource("ShaderMaterial_wpwa5") position = Vector2(-496, 15) [node name="Legionary3" parent="Entities" index="11" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_ohpa0") +material = SubResource("ShaderMaterial_nayll") position = Vector2(-240, 152) [node name="Legionary4" parent="Entities" index="12" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_aiu1q") +material = SubResource("ShaderMaterial_ng6wy") position = Vector2(-300, 384) [node name="Legionary5" parent="Entities" index="13" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_bf84d") +material = SubResource("ShaderMaterial_vxxuo") position = Vector2(-300, 401) [node name="Legionary6" parent="Entities" index="14" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_7skkn") +material = SubResource("ShaderMaterial_xq55r") position = Vector2(-316, 425) [node name="Legionary7" parent="Entities" index="15" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_soae1") +material = SubResource("ShaderMaterial_1c5jm") position = Vector2(-300, 449) [node name="Legionary8" parent="Entities" index="16" instance=ExtResource("27_84gw4")] -material = SubResource("ShaderMaterial_to8fm") +material = SubResource("ShaderMaterial_r6iyg") position = Vector2(-404, 505) +[node name="Cultist" parent="Entities" index="17" instance=ExtResource("30_xj4yo")] +material = SubResource("ShaderMaterial_3ca81") +position = Vector2(191, 567) + [editable path="Props/StaticBookshelf"] [editable path="Props/StaticBookshelf/InteractionTrigger"] [editable path="Props/StaticBookshelf2"] diff --git a/State/Thinker/AttackState.cs b/State/Thinker/AttackState.cs index eec8f91..e34fe3a 100644 --- a/State/Thinker/AttackState.cs +++ b/State/Thinker/AttackState.cs @@ -40,6 +40,9 @@ public partial class AttackState : ThinkerState [Export] public ThinkerState PursueState { get; set; } + [Export] + public bool PursueOnLineOfSight { get; set; } = true; + protected Characters.Character _bestTarget; protected float _preferredWeightDistance = 64.0f; @@ -167,7 +170,12 @@ public partial class AttackState : ThinkerState if (PursueState is not null) { // pursue the player if they can not be seen or is too far away - if (dist > MaxDistanceToTarget || !NPC.HasLineOfSight(bestTarget)) + if (dist > MaxDistanceToTarget) + { + return PursueState; + } + + if (PursueOnLineOfSight && !NPC.HasLineOfSight(bestTarget)) { return PursueState; }