~x+{wWw*Qt5^KUg4UmS`Zh
zW{o(RKZ%mWQ*b+WMM)m{6P}WelK*!fzlsaZzt=4F+0Z(%66KMu&GxEPseN?*{P9Hv
z_G=KS+F$p?!!&v!&^=_8^ijKL0Df%r7|3E@aCbIaVAs`)!kg!v03^3e_@vWu|(?xJp{+t!UnHR4UP8YVctX0
zpt=i3n1d$ak>q<7Ka)-mobOTR)JOA)c){aO;yM(=P)it%|skrNnT(@N7XnD#Wr=n!2(Bn
z0$$#>mQM+mZ~VVKE9;o+<66ysLioFB|2awPI8KAn2V&QM>)Z*Qm1!<`KlRvEvuWn0
z$u6JQS)JEC{sD3TR{yUy!y`kisBG@j&aY1P0cDg{r_*xtgzS?zlhpr>L2H-hFG&DSBz@w&e#WbKK1TW$Z@>V((!micunoQt5rq}aiM>vuH
za)MhveW7piOe#gW#FvhY|0c^Rgca(k;>;oKKsLpcK0ZBkk33-Me`E41F-g8em}^~8
z$deBOh<|A{R7N?-Y9k>gewP4up%w!XLxcjl$>jkJK|8_T`2YRVCzB{;3)))~LAfaM
zhaeph5mXQmV84Cov@b3v>BC+AH-4KCd`I5^II+3IHsg2eT}|hn@8wH8U7k;HKBnqR
zeV?(M{=Zcc(!MgeQ4y1yJI6da0sE$NzqfjvdxlH6j8>G943@
zCBB>{`ETp~)jIzi;-4-49sK_`_W%E%ehnT4s{L8uW8l*>JbA6<48N6fV1*n_Irqy6
z%QoW&3VtA2vk{NQ2EqytP;Y=E?uea%_I`!pf4FeBKD|ebRiLzduKBhp4A&d_YffvD
zoiuvt`w?XEzem%ZET{0%lRrI$b*BkW1wQMzma~d+Eo1F}r|>Z@a0D-;{mrlZ!${fN
z#P;Gzzhr#8+{(ul7|n`K8M|*#+olr;V33RShXd+NV{gV{>E?y-L)v}zehGBlKVkUv
zbU95FS2ZLVzoSwT?zFRegY|GhEC;61KOS|>63`eV5Z9HK$cJ@`FveguRqcQ<0oGnS
zE7(r@U5H;|1FYcTfy{FZ&ob5sVE4Wb)-402CeYika6U|}SR5<=Xp$17_
zkhBGSCIC2H!CpI{08t7_JPGON7*|xR!V-j~d|q4_pky!Or=b0yB_6#>^hfSP(c{Y3
z!{1U00@}fUG}i3OI35k`(Y?!P_3=T!&_;hv4!n=Qc;50D6noXCg}}Gzm^dV6ZJ_-r
z2>3LTQtY)ClSJv5NUcIMOlgBh<>0NUh9vzo*&^o{{|K;R6N&0~Qwx>C7muTq=g_Yf
z_YECC7c&z~pn%dFCVru|zB%|6^jVppxwR3Gr!Xdz=GHiAyWiooR`lMouDjb^vxBO~
z&C}g}Y_0fIp{Hy#(;{BRL(jLKZ{KhBtFiXC{EANGJ8Mzijw5GwVw$&$xyKlu6_Vr+
zsX<9iR;DX}9A|uKJTszJbzrVtN1!oA|I*MWbhWO?F~q
z!2rjlmo|8eH3mre66UEt|D^j>mfW;l3NJ^Y3M#Z*Nz$7YSr&QSzPs{1@yuztxVgL_
z!J?c)HLzx6M>+CDD9m)KRN5uMyVeKf{|1>=MKMr^S3jY`EBZ<#JS8xI7Vi#%eEB9R
zB*eF^t-W&@qtRnWSjx6I@4?tI?6pi$$u53M!MMwARiVH%Op0+yYBw{U59{fYty#Ngz)An|Uhx6dKf1fH~mi&;rwL;n;OQ`xBea
z$~u;31=(w(E`b0~^$C)%&(8Ow`1@(MhjgsRr@nOuGYO5A|M|H-fUqYRIq0ZLjJeU@
ztPxuOy@k5F-U$4p=Q=~>;H{74=){Iwsf9_E;H$&J7m_j-QpNL1hI1TKjEv#+XO<)j
zUJa;wlqbB>)Waj6YhiDH1MM4pD7@jsAbwiGwPt$u<(H7f%XevgG%@PzX1fkS+D{Fm
zKlc{i?R#Q*?Ye{7ZgOJ=dnQFL2WsP1)C`rPo*Vke<5?9?0h1(I(%u`h&n594#r+-v
z4e;sPr1o9N)xl>Y%5?s1*(vDLiS*XE`QKQnBki=a(+v?5W3mhC$)WC*+oYCl
zw!e{&d}^rrOn0C^!LHGZg{oRJj6%2GcpEMSAoHQY`udqgbsrL$TTKPbMJ7XSF3O^R
zU#om)y8Wq%hglC#ZCed$#OAhn#jOBXo6D38O!{)|to{YpV6%Mx`L?kq&rEj*!GWc2
zj3k9*HjFchbf*UEkh-dW)=ooyWLJPhABR1*_94%3_aW^_Zuu(Csj>R{Q>YMa?aMPG
zn3IIcS=F*Yj%|dNJEQQ0BT40l1|rV98AbWCs$th%jyjekk@KepJ~7#b1mg@fy3AN(
zUUci(To8t>PjMCqI!=DY>TlHnST3wpNWE@lQndVm{vUVIdo8B-xW}pvIYYuU0FhJ)
z%j-6ga)I+HoOOV@zE_@r`Qn|A+_O$59~jbHRSaT+pUcTrYC7P25Ly2Q$+F@*(?y>;>Kt%1dbz$TOuZ*W2ovCHr7f687@Q7006aO|+}JcEX+ne*dJ;DI
zY$he5C!qHDg4;mRn!?1#-fq^q`xVYb>iLp0aCY}`%WcuRg9#&qDh62~3EUJesJcGU
zaAq6~Z?sc`9ynL7ZrcuWvtYXDW~oaEXk&3ii1pfI>~;_76_+
zcI@{&S{9M{aXhx=rPR
zj>5M`5>iM^z*`Pr|3N6W<`yfW`kJl=6gfYSl7jO2N91emZ{GDmHe@=p&PD?$)CB##
zbXVvyPFIvjel(2e^OkZ(ZMk{7A1_#w_PlQbGQsDc6zEKd`qnW*4V5DP*D`SCg;_H2
z;F)i(x;3?c-UjxuM~8y2mbYI5Vy?}sDJH2FgGV0liBZx9HkZ5jK_&7c*@3--2G)WH
zdgGk#LZ|5wabC7S5Eezo6Rn7{+M&C2h+!T33-2Z)QMxqwL0>aD2gHpTRYrM??I!~$
z&>e7UPd|UCeKz%Efz72s%CT622g*6}z@|p&g-m?vM-a8P4fb`$XZ$R^sSBOe3wQ**
z_|j!j0%hx(m{+qy6PfOnz+lhYWc^~|rI_oUnX*fQm8|($B3{Ie0ezfV*oCk_uqv@C
zu5ZoOcQ~tytx<4g$v7u15kE!GyC^ZBY_Uq4HN))6sw2yB7$uofP9YhgPtnnzP|lXT
zEFtl%fKXlKb~Juy3#Ie9TJsS~OUCh{&Mpm&U1o0Giz8hJkRUAMV*0*eVnY5dxso(e
z{zq93=t=tRv~^({c2hnBak!P+Q^3LCR=s8SZH%zqUw3Y;^==9^!t#NivAz04k?^fr
zdtI#d-9}X^liW{DkLnAJF>L%JPcDsnEHCEDk*VQV1GjuqNMPQpj#l@$p73;r2<;}|
z5CJSqd>oJ8{c}S;J?-U#iqm3J7)Roh(puCTpqB+@sGwi#YW2X?k9sp`*0Z-}QxKov7W*)F;
zsT`TO+Pc22t4x9WMNHO0f?xfbET&u+9Guhnuu!aPadkyGThF%b1}c9#F7ziQ4>14!
z(B$j!9ICsb87>(xn>64ey=Pm_UuR%rO}2#|Hg8YcH*`U5Kp~<$2^fv|CC=t_@Zg<(
zib+JjGjMzqa>#+$6g7s3VGcm~^VofHn@}JkXc1FB*1f8=nfYPx;y-+;HO@pqI}W#s
zgZx}OEJS!}DV(%Z0|w;8sVg1y7YoJSu|lrij`os2XWlIVM#)q3k1}WgO3sEBn?(}+
zI_sl=B?6tMT8ev+j!XJCkBnZ0HNta!`*ofo?(EGx&=m#e>2(6dA@F_?W!~u<)01Hf
zhAdy*9hO7PDHnTMw_q{8mSODMTa9NN1SF?6-iPq3TXm_sr;f66p~8zX=4vpPGl`eb|8HZ
z`M#&8A3&H_N?(r$;;y$3Q|_#VlAh=gh<0=B9@>1X--a}69MC@B^${`D8%p;vsU5uJmIPmuxt`7B#v<^J;&6b*#KRjbLt
z=VjmJ>DW7sgphE@;M%AG7AkjJk}}imlKCFmzqL20?`ZJ$^bjgi`E(gT#z3`#48$|@
zdKk4XxLcAdi{>~kh**R$*D3!cjytDpqIH|@f)}O~yUTd89;L1ShCLC3O2+ST8Zy;#
zuo4lCea#B}9z)~pZ}U7!CEk$wLyC9R-6#pAJtFmN)^?A+i_K@u7Q5r!wN8Z^71Of{
z@45}_{brM21{vwf#ofVxh!V4agy*5$uC(5XT+is=S&k3)W+Fjh{DT>W*#Y*lk#^IJHoleN(_+ItortD&YzC4Mv
zs~pnw^qy0r3z+cCBmqPWlt6I?B-bOS+W4kCDdIfWmX^4wC->=TFg}!BLDTw2|4EVM
z1CVAfPL%i4@xU;lZ`;M87u4zKcA+(idSOQ^IL>sE3E;T?Vu9Z;Fe&mM8uM=K);^n<
z!^(cU519+lm5w_g_l1zzs+387t>Kf?MxA-=sX1^SRyBD*8KS$O^1c4VbywV{NP$2(
zR(eH~tX8;)K$9mUv%YO7eah7qTsNpAPyXh^cCw=0Z86ZJIG;
z>-(69b>KmP&4>9jE21^K={?7?VuAYu&0ja6D2`3`T`mi2Uodb^XichJzjc5nH@)}{
z*CNyG?e9GxbbrYV&(XFnOr>S@wI>H^03a_3j1fY#@FO$H-i=}SG<#I&Unrhnj}>Cf
z?5=4gQSJoNy-*Id_t~x9*7g~CCvpv8tRu7e=IULg{n3nDL6Bv;%S7x)_&|H@FHMDx
zcbgNQ^}4U$2~g1)+Pa@5y`8WlG~`x*4yXwm+Bm_alNmvI{z}6x4)1+z5A0K?50e*u
zSZ9Gi%4qVongZ|~xs_0%mD)VGv|SuydmfQ=G9~`7lo=+wGu?M^oSEg=Lq`DVHi>VOM#ASEbnj+D>F^wa8c|jk
z?l{j1=hc;KmG(pE3`-t)>Wp1VI&Hq*s-FE;R3J|wUu
zPh4rZ5LD-3_oJUz6=@}LHLwn5-YBy_Je^hKmT~X`+Nw2D9NkD~GnKT}1El=Vgvt_4
z^(?Wo%lDy01bK9G=TCS18mi`x?WqhGt%p(lTwH}~WcPr!ZT9A2N~?PV^copNq0s`y
zF<(GkNx$3~X>OVFdtb_ivMCe+I7{Q1PHUrtd0Nv7H8;{l^(4nm3MeL0Wu?=6FGORi
z*!9dT5=Csshg$mkbYN|WaSNetBY2k1^>2vy|IaiHe4pk#Y^
zc$5lH-Jdf2Vn6oU(XW&0#!cdLC~fjN)x^^-aZWUtUi<{=lUcvFvH8w`Ygh};%EZso
zR=wgAR!!e|ww)j6764CQ&sjE0^|^#5V9iTh%wY
z2N(=_&8+{c>Cb}R)61hn6K$nQHKmUd(jVi9Nf=dk#*BmWXemokbp#EFq*cS@GE5cB
zvExPpcDV!*&McuxCh>WcHiAbv;l#MsBG4B8Zb2lprB53)V|##HrJnz<&){0S#w09<
zQZuv*p=i%UZ4bn+UNpM3-aIbzGT&y?5(%X^8Kby*bmWOQ5I;xL{(#jiA^5MM{tV%%
zNTug0=&^p{pXrCZdsM`QbxFNy3pK$%!TtDg
zFzk9AkH5vT;rsX~Yn6Ou}xZ`=c>(LlRV=|Qo;0#=|Omceq0pPs*?z=Xi
zH{Rp5y;ykKh&Qs@o{mDbyA1UsBp&)fZ2j;(cvm)K5{c`(h-WbVC=-m8{
zO#FEguLgJKLx}qd@?-k|eg)pfx@BteLcB#Xz#v%HeRYkfYs%p4{f#+r^|x=81T4kL
zXZ(?(#(#RmR&*PTv=0eY=w(g{0FR{NN=ye&j(8MCF?xZg`sBw
z1Wi6`1j7*V&=c9f3t`JV$>^%ofTj{_Bl<4_aa>8}Mod!ftEA43*r7~Z@Wh9N8MKJw
z?-4aq^=+13SGephcSNEIpAYbj@yHD`OlGH#fqmVpgGaSM%BJkTTK^4Z(Fh
z_ux7J`GT>^PKOiKV8JAV!BWnjW%fS;|U?t%6=86GeS0_*+&jT8#>x|Bhmc{91%Htg}*qnBWBdX`;
zgK1hTP0vn^D^A(>)%V!h&P0z|@?{DGD7m>xfn5v&Jpn_(YiBuCXEq-b6!ChkwXiz*
z?>;XF|BZ7({s%NJP5~J#JSP#Jb_OxKkN5QAunq{V!RIWK^IT>+{ZlNzR*B2zxHhMX
z=!7e}AQIsh!jb?*=ssW62uL}8Qo9O_LH<@orT#t=tw&)(SwRNmtz2O?E{p<>rDb2@
zA~dWcpp$eztXT|Zn|nO!qC&ya8_PN`Vbj6!yTraae}n^WwgCskr#Br9oXO#a(;Nzozn=4k8u-Y+XlxRLivv)F7(;l#4L~MD%B8=%P4r(*
z^9M-7Repz*8M$}U*e(=asOK>N3q-lQJvFC7a%NCj8^LM3`%GVV@1oBI=o~CyWUX)9
z@mK{=I>9!pZP8n9<>Y&?%DOXS2?gQ*mc8~~iC2q#%*Brh0e#=P$p
zj1&Y)lLqh;>+k7vHrVlU=inrBi!?JcEBaTHbQUGfw6GYz$MFSvm_1V&HX-$4dLpOt
z{$0{vb>ddQWt`GKEwygCUtq~L2j4j^qfSnarZ6xfo)cQK834^rC{*`#3Xy;21Uc}M
zO4ex|vnk??ZdQ^4l9bmcQ@9elJ!VEYtP^&a!Eg^wY;SVu88is2W=xG2{=DvB$0Yen
zg+mi`s}hmB>&z)@S*XU|+Cz=xX^_a9kLTu+0V2-~_Uc!Fa9=-aIJjxNXZ-57wYie^Cj^vcX7Ad{UK@O69csr_{V2x91a4t
zexAEg5Cp(M;}hwwaU0WrcIfq%w(wt|zsoAMPSNR*-Y|>=!#pr)Oh7Tm;1bMQ0Bkrm6Oa$o<$2uu{|F!V=PXP`%{@)_1N2Xb
zHrK75r=+e7&tQ#zj3n*_0@t(lHDQ$}uwMsu*B5K+V#?(yF;}HLznR(ByHc)MI=N&W
zoM*B$0n{y)-p4v^Ym8_>mWJ3BCV*Dy9NLhK25>E}AE58sq>jdkbXZN|Ly>d;`ZbMo
zeN@nJURZD#KVvO;vTK?yFwp>(jz}L%GEcq11Y!+#WH9rb_nj%l`!ZJTKSuR8m3!@P
zZuRx=e7_jXl5CH4PrNWo=o9VA;r6{R4Ju?K3OM*v7!K|x5O?N7hC`MXvmfk!dyk#p
zaUjX}a&EiKtqpToH6*^(&s~1uuOI;ynOk}CnX?A}O=KabXpzF}9;j^;UKFmQ+}2U-
z$Evmsho*QKJ^(H?`u~Y2<@HZ$F?ebRORqGu5q7NUYD1&@`n%!h7w+I_{*a5%&rR{k
zxS6FP!__mx(>6oT9lvrSBe`h;+18(R9Q>pI{(qs$jNUVB`WgVK_2=B#y=Z~_K_u@#
zuFkHS?n82MwvNyq(2;|H7)AkYh{U1YQ;MC%!*2gr*EnVbUEoFY>uo>)2cn9c?>?wR
z1^F$fDbgPX`B4cTzXcqY4Xx?fL5UCB{C`X+{h^VXdf(R%?f|v*#9gxqwE%Db`N99D
z6%BRjE(B87AFtvM)#_pAm6`yyjsl`;VOPI^(N^5&$@BbB^QIqGD!UcdVaG?De}^68
ze9SEeXqnLc06KcjINp9>3A58S&yA>e7{w1z#zpV;(eMuZ!az{mJbVEe#F5y0@NO~j
zQv>Ozzh)K2e-n#e3p}sZ-SBJ!P@(|{n$yCh@EI`38rqNh`JOu})?953UllQVT8%1b
z)1nwSZHbR>kCyyZ3VATl!}=t<01*;sk!e|#Mjm(A?c=L?D;c0*&0BijCt(}*d{%?m
zN}JX))nYt2pSoqD{LsrbroCbc5+xOUvT`?d&9M}u=V9yQwyn6YvfU
zV;iT?W*kJDe2I+@p8S=OYGILj-L099f@)w%QD3RSWna`tX*;j+cg9J74+i)E=2CaU
zR&v_QRQu;O_DY0@9F{~UqKHxk1{k#V;R`Ya)&${nOHRU%!>pz-2#g>y3lT_ZL*D!r{Lf$c=h(s4;88Laf`R^u-3^&aY26%adc|eTzZY
z6iwmvh-HK2sjxZB_q
z((+a~5mroi;CHq+$159Opil^4ZIEB#`1hMbej?L3$@gcs(U5T&O)ddn5a1LG^%uI_
zCNpc6(Ou4_81Y3^h0`^4U)xRD{fZ5yqkOK}8}Ww~nojd!z+L&oK6&L}=Tr#9SIgKF
zG|jDpaW6OJo?v?n=khd1u>%@Ed{6!NGYe;nuprH<2WV|vik3V8pgqP3&Y^$Wnv+x%
zGD-IIKEi$s6l$x=hxP)9FCf1}F(49fyxfkRaOtI%)R9|B&@4A?0%#~U9_tw%YP+@p
zoLj7Tp^OFvDF5Vl&dKl^=@>)e{+H33+AV?aF7~4uili1^%2^b9bIA-zd{RlB&0ySc
zThc7?E%qyG-KtK`1AL@ps65xh_MaKbrKL&Hztp?uG+%bP@rs~~YmG~5%iJ)4FY<~Y
zHx3b&(-Se{M)xnfejOc7tknbPa(nIHN_0No5vUlQ)m
z1!KFT%4#x(HP@{azU`DQ5=Lj3DB*!u72CWbjfLuP6F+f(;)f;6h#I);`0!3rnJx8T
za3*FA!dORh6SIfQy_9@T|I!Wqa2#Fs?<$*4WW=K2fF=kioIP6D_mG=x3oq@6U}fTv
zHQpzPbQ_I7#Vv*5bn_`kJXg83*g3itSDFR3=BZ6@#*hOwv?4tHj|nq_C8OzIdq=U$
zf^1~rtmX6Q3c8heX=co_gfvrVyEx*8A5ODK<20d1_+-3MzoGx22*tCur&x6ydhK
z@bM{H{cSsk~o4+ZVm>3Qx`}WX!;<
z`C*?b{`7adRHn#;$R!r*ZY{5b3jssrkNMrRv*iT*wjpCr|1)HYgyh*B5E}2`T|knE
ze|G<}{v|V!dk$3E^%EMjS!_{0z9glj7MpLY7LN5TB
zV{WUew{kD4{v5BK5MwF9Gwykg0QtJx1O$tEvXj~P5SP2V9O=O3dG2aaPBui*Mf#1M
zB*W%fpZtR}!6O2RS@;7Yt4SiY%Vom?aZgGGen=rA$Q+DpO+Y!$Mg(oGm-`-TCVU^I
zNR;*;y3d)c!tgPD8R1+FZ{tu*nzWL+Ad)G#Udk&iW`4DgZt$saDEw@dH^}Z(i9oPX
zY-p6&wE^uNkvTj$JTWzYy!?CZhiQ5e+`XL4J-X>+@qt-bk-*U^om%re-wK&`Tu)i1
zOC_6`UrKyB0+~O0Ci13k3CPH|r%H9(d~%&`E}eU@XIq!_0=C&UpKbHQ&NvIC|!k-LgDkh!%IRwDwy0kI476bxQVEo&I-H1~DJlbjwB9UcwzCtlg{1|JUGXc4D*3G+?9QGc
zPX4m@Lo=CsPRgp<@~fPTZjPnc&fi@Cy>r8S8`KcnTG|ZO%pOYE{8!}hm;=Kl>)LDb
zO)V0wcaK(|4e*(q2|j*-S@RXkq$;w3ue0V43zQaCQjSE;$LF56@?d=l>}hhhN(Mo4Vht?bTUO7
z4C>d5)e4Yp>{Med64$c;+s*IYeKd)6
zFP6k%%uo^jSRG*qpFO22d~^Y*o&n+XkFVwreo_V6pVlP}rlO=y
zXRSP=(@X-t6Oz(yh9dJpLJWr})HExmfwm^8HY`IOM+vpmVN_nJPe*@Lo0mPUX(eFu*w
zGx(Qn-ODooyr_L-_P)~%trXis1xe(~-E(sn+QFMnh(&`R9ln>hw}A4sHX#q#@?@mH
z@c_x0Rl8+fwCE(MlT1#aq_H3>_{BSYV5`k(RP-6k0WQ0|lQWtAtwXP%G|DsF
z%!f>I(-`0=sxJZD&dN3g(u`VQon^Mi+}8iS!DXHQ56R2dIQ7UrIU+l;6u_3jus+y*
zxAzF7adV2rln}GU(@YeDgsX{}060h&&`GD(n1;c?zN&a|OZzWQ
z==8az+_y8R#>{Xks;*5ugF$LDy`vVwE;Sw?k7^lAt7vmm8AbSNR-6HSNW!0KkJ|th
z_3!twkzHc0wd_Ho3g-g)%scEf)qJMT#>-t29Pk3=%Qedg=r!-w&~Ln9+|pPa#6zH
zs^d8|WRJevxt@kNAWEm7jsudG3~YQ(!*2f0qrIfW)2AZ7+R2b-bfu)DJ5u^u2+F*^
zL*vxzxLT&?_vO^siA>IGxkhK6Lo|?rGwxv>)-hFK6YdzL6wQY7+N&tuFInI-GDrSX
z+6H!H0v)G<-}*!^HNjiP-}vkG{ULjORWW`?Pep<&oBlK&ba9leKB+b3!O~{mqw4dp
zyQztARr=ubHE23JfuW#aQdMlr@G{l*eP`J*JM!&dTweN~h_8|NJgZARgrSl|TtPXv
z`2Be2F@PQL0y%=Njc*+D9}6J3_X8yB
z*89BiiYUO%1#}~^FzN?-w~d^W@gAtFglGNU@@y-3j_!(8GhfyK4|z2qR~l;vL_pY=
z`W{`q0;UD=ak3&}S2JyRpG)Wpaw510g3UQ2uxQ)w4OJdp4Uiruvz>)C!#ix}jBMS%
z*RsjCp(l!zhPtw6eAtfs-MZxINL42leoDF#`W5u#$0%b@CKw0iPw}#NoS~i71$5Oq
zYF(!40R%ZJw6PT7t+B4cdpIl4T6W4~cKy7o<*2BgMq8
zDAXLsnP2>ESDc0MFT=)t9YUl{x+dmwv!8f3lfYYPv5^phUA`+PU=#DSXOKWiz8}
znyqrwRqrYNcAYK8(XYE8eBzVf4=Zzx@vsN^^&f>#mtEtD3ZFiunn3Qq$e6+W);--9
zf-gTn?77*B6j8E7?8i;b;Wg>*#0zP^5{EY0sjhtf;oHg4(%p#4D!k`nt{XMB
zm%zRksGM8=6Nz|?m
z6RDc+EJ7*BVS4l9ZN{{eL0$CTsp4V+6V^U+x
zoEprU!rGAJSgZl_O}O;+2{NSuLAZ{ryh`~~jKat~MPaMVK#;X(&QzoF!01$pYCiiO
z3r+X-bvT=kh%QcTsPoq@Wa6SQl^p4JYlAx3ibjhW>;~gDOW1FF%qaEWw*gBDMGL4?
z0^9VDF91;}v8(Sr^1ryX`x6eRS)alHMH%S6_dIpaesCgKvgG#aJe7Q$`DTA00C>)?
z0m&qFPtUG;NW|OiI7QmSN#B>e@Q&^B*)Q@;px7RnTAx4*j3Hv_n3vwasU-;|Q&K9X
z_CX*C9idbC!pKABl;o(oZ5%>c4S7g
zCRopU_J;%Zitg;rkQxba>jb!M#*b-D+z%ueESooCBdY0R8pWZ6q^zZrdO=qJR|f{J
zO<+ZN>k;{@l}}+50(q|e>#+5xYN}7=52KY7skWGM8ECDcSeYvVoHNOH1CVE+
zT~i&->abQ?2I<6}S#cAM{Bp(%X4+P;YlM3;-7BP3&~RB33ntZXT21K$`5hkuu2acm
z66Kl4V^jJtp9#pAE)h$S@9@x`z)ooWXgz1zNcD1kq~eM)Gzz}#dU*QaYOI0ftC^wgHCbD
z0(dY^lW+te5cmQJ2(%W4d67%3m~A3@$WLZ4&)L2NwhlTKQaP=D=EsGJv8yXPzo9Un61glpZHDF&GxOHFa
z(D`uh>kW^F=DQoslEvHX@Cy944Zha}0Egh@cW=3=?zuOo;HbNfaV4|He7ukOId=0p
zS4;>Yi>qMm0bjPJFPq(X0D9B|xDJ70p;zcx$n|d-;1=io{aBw!`+$q@NRM2jI^;WD
z`9g<#0(~OA3p#W5AtJfJrRzglFUFT?)l`5EgT&KhPdjbF^x2Ty4!)bl_kMkZAQCk2
zx&O-icS$nC!4#Cph3|G2AS58r9RN43+l!bG0%SLhK&2Oxnb9Xt;I&DTFNDZ@(K*Ih
zDb&+v>9479;NxCxS`}r`&B3W=SlmdfMb#xE8uwaW4on5~ISsMUP`K~hfd2FNY7iYxh!is1>ZaS(KTuK%P&o-RH#W>utXW7Ov0aOK*C5hloufV&_DBa(Bmir*7Tr{nxW-b!iCMQh3<&&K0O-C43+b0cLi-m=y_&C3!Jx2#c#Mbir48r2`FSHHX^x#V5I
zXT}-g1FO5>4+G6ZzjA1hBK=7m@Q9cC63)K0O`_tZV4R;rSz8Ui+@FKRXG5NFDopR8Xh46)HK2UEb2zewx(K)1gK_ks
z3Kz56sf-=h8RWvsR#LOphwQU45ugP?U;6w10$>0%b)NfWm6T^J
zn?lsBZamX;%EFIw^NyEZfw-=%<+zv#;NFL+bDpf7>VCK#`rGO(Mg#N~Jup!(qj3Ms
zHV5+31l30M(#kRhOAr|bZRlume%IAJ!R=kx;?AVX2<7H2O2!?|)MFkWlZdBNMAVG-
z)brxhY?;(eNLKHlBvd7I9pzJ%)Y}Oy1uAb-1JYX0*^|hUCCCS99oAqE4v!I%^9p+l
z$&XQ2|KO{{n=U<-u#PEFhA?mvc5%V+rdii@^aUFtqaIQ`C>MK(5S`{vO<(+Bl0gUp
z?Uq^NfVMAD!&4XCW5D(q?w7AXSx}q0hzy&&`F3IWJM5h;7yxCR+GNbu(wPGlM@&G*
zL8^Yo8!x(1zCKZP)Rzyl_@0k!TRWh?ZK{v(-5tQUR#^YE;pfWWa(6H$jR$UJ%#}
zM!QR&DoX8x=}NjgpL0igl7D?IUz0`YC7ry0$Tm;aJ>Qo$VXbB3a#_}$M9;#%axqep
zLz17@bnD*!`A6kO^Qw%y;o1kQ+L&aMoke=O8S6{v!q;=X!+6!q=XcJkPTM?ZNjzb~
z;n#!xbEb2K^+lGK2jz`*%g9Pyc@+pyUsYfF*?J7@Rl+rgifdR)%n!>az$C|w7)Ki)lS%9&9x898C-#@Pv->@Zmf@J0*aJ1o-~u_)Pfp1OQ}VAdSktQJ+l;f
zv3#68AynAm?NMn0(cf7fo|@4|{hi%a&l?TE9h6h5>=H%5omBX7Kq+wDBz+}{W`$eM
zvRnvYY_*5QoA-YoN8Dd3^8zFSK<`fN+y4$c^v<`ilxa$I3CqhEfpqnLifzpooB%fe
z5_6P%7vB?89M~91E*PG=-<88w=2B@s+sQ6dgyO;FsBazj@aHCf1*&PfyOJyX2N<|i
z5T2nJrnU3}KS)%se9|S=-?dRRXOlr|*bUk(lmIRdFg(F?C1q5rMX;?k!@{$JjX2)q
zNpcGpEgd)@M}gkp{sIRDt5ESxOA}0zTW?@*U=KXX=`zhA6%^A&%2-F@R!(;!i|aC*
zZblo>1e`dRu=L=Bgx&gew{X(%zJgKr+L_3!hFw-mS@`A0%oGX6M@6wxN9}b3dwu=8
zif_D3;)su_6Jod?UydMre$F+q$B2|w`-JAGZp-ppz84vr;zU+T?^|Z@S%|mP;dATV
z?a_4$KQZEn0`CdU=<5B)u{S`90WP=mAkKMrY9~FYt(;Z8A`n+uHr@iq>BTFFhzsFA
zq%Db(=N?_nXpdh+Qtc08QVn_}Y>LGzT)P#QSBvJt6QIKar=Z
z>pCMNjdF}@{57(VLymEV{nqWb3wnkT`>aO9pMifjtf^s7n_~br9OS2?Pxyfd1(=2r
zX$eJFl-;)^xr@q3FxmO>nt|kOUnag$jj7ZO2!e(N`l5^6LYU-R-#j(;O;_}{g8>4O
z_itel?hNW(;9v{KUt90y59rHz`Y=kcT+|8AD|MNQTT!g)SN$Y@xoW1CYeHb#;#qt%=MOT9#Q_cXo}%MFYeA
z!cyRU&x_g${blE-?~Z-EuPn6{y3G|bI}P5OI^o8r|BMQs7ftGXy4eSGI*zBSpUXO@
GgeCw~I|U~I
literal 0
HcmV?d00001
diff --git a/include/components/dialog_holder.h b/include/components/dialog_holder.h
index bf050ae..0984130 100644
--- a/include/components/dialog_holder.h
+++ b/include/components/dialog_holder.h
@@ -29,6 +29,7 @@ struct dialog_holder {
bool single_usage;
bool has_seen;
struct tile *tile;
+ void (*close_callback)(gc_engine *engine);
};
const struct dialog_holder dialog_holder;
diff --git a/include/setup.h b/include/setup.h
index 323cba9..3fe696b 100644
--- a/include/setup.h
+++ b/include/setup.h
@@ -87,4 +87,7 @@ gc_vector2 pos, enum gc_mousekeys key);
void mage_give(gc_engine *engine);
void load_data(gc_scene *scene, const gc_data *datas);
-extern const struct gc_data game_data[];
\ No newline at end of file
+extern const struct gc_data game_data[];
+
+void check_for_boss(gc_engine *engine);
+void boss_start(gc_engine *engine);
\ No newline at end of file
diff --git a/prefabs/boss.gcprefab b/prefabs/boss.gcprefab
new file mode 100644
index 0000000..fff04b7
--- /dev/null
+++ b/prefabs/boss.gcprefab
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab
index b476e46..a6188e7 100644
--- a/prefabs/combat.gcprefab
+++ b/prefabs/combat.gcprefab
@@ -22,6 +22,7 @@
+
diff --git a/prefabs/enemies/t-rex.gcprefab b/prefabs/enemies/t-rex.gcprefab
new file mode 100644
index 0000000..e0b8164
--- /dev/null
+++ b/prefabs/enemies/t-rex.gcprefab
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/prefabs/game.gcprefab b/prefabs/game.gcprefab
index 17664b5..6595355 100644
--- a/prefabs/game.gcprefab
+++ b/prefabs/game.gcprefab
@@ -156,8 +156,10 @@
+
+
diff --git a/src/combat/boss.c b/src/combat/boss.c
new file mode 100644
index 0000000..642f79b
--- /dev/null
+++ b/src/combat/boss.c
@@ -0,0 +1,55 @@
+/*
+** EPITECH PROJECT, 2020
+** my_rpg
+** File description:
+** boss.c
+*/
+
+#include
+#include
+#include "engine.h"
+#include "prefab.h"
+#include "components/dialog_holder.h"
+#include "my.h"
+
+void spawn_boss(gc_engine *engine)
+{
+ struct dialog_holder *dialog = dialog_get_current(engine);
+
+ if (prefab_load(engine, "prefabs/boss.gcprefab") < 0) {
+ my_printf("Couldn't load the boss prefab.\n");
+ return;
+ }
+ if (!dialog)
+ return;
+ dialog_add_line(dialog, NULL, "...", NULL);
+ dialog_add_line(dialog, NULL, "Wait...", NULL);
+ dialog_add_line(dialog, NULL, "...", NULL);
+ dialog_add_line(dialog, NULL, "HELP US!!", NULL);
+ dialog_add_line(dialog, NULL, "A T-REX APPEARED IN THE\n\
+CENTER OF THE VILLAGE", NULL);
+ dialog_add_line(dialog, NULL, "AHHHHHHHHHHHHHhh", NULL);
+ dialog_add_line(dialog, NULL, "AHHHHHHHHhhhh", NULL);
+ dialog_add_line(dialog, NULL, "HELPPPP", NULL);
+}
+
+void check_for_boss(gc_engine *engine)
+{
+ gc_entity *player = engine->scene->get_entity(engine->scene, 50);
+ struct player_component *inv;
+
+ if (!player)
+ return;
+ inv = GETCMP(player, player_component);
+ if (!inv->inventory_upgrades[0]
+ || !inv->inventory_upgrades[1]
+ || !inv->inventory_upgrades[2]
+ || !inv->inventory_upgrades[3])
+ return;
+ spawn_boss(engine);
+}
+
+void boss_start(gc_engine *engine)
+{
+ combat_start(engine, "t-rex");
+}
diff --git a/src/components/dialog_holder.c b/src/components/dialog_holder.c
index a3b20c1..380357a 100644
--- a/src/components/dialog_holder.c
+++ b/src/components/dialog_holder.c
@@ -107,6 +107,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
int x = xml_getintprop(n, "x");
int y = xml_getintprop(n, "y");
char *texture = xml_gettmpstring(n, "tile_texture", NULL);
+ char *cbk = xml_gettempprop(n, "close_callback");
cmp->single_usage = xml_getbool(n, "single_usage", false);
cmp->text = malloc(sizeof(struct dialog_line *) * (count + 1));
@@ -116,6 +117,10 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
for (int i = 0; n; n = n->next, i++)
cmp->text[i] = dialog_parse_text(scene, n);
cmp->text[count] = NULL;
+ if (cbk)
+ cmp->close_callback = scene->get_data(scene, "close_callback", cbk);
+ else
+ cmp->close_callback = NULL;
setup_tile_interactions(cmp, scene, (gc_vector2i){x, y}, texture);
}
diff --git a/src/game_loader.c b/src/game_loader.c
index 14b7bcb..f8fc95b 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -64,6 +64,7 @@ const struct gc_data game_data[] = {
{"input", "lumberjack_yes", &lumberjack_yes, NULL},
{"dialog_callback", "smith_chest", &smith_chest, NULL},
{"dialog_callback", "mage_give", &mage_give, NULL},
+ {"close_callback", "boss_start", &boss_start, NULL},
{NULL, NULL, NULL, NULL}
};
@@ -91,7 +92,7 @@ const struct gc_data attacks[] = {
{"attack", "Spinning roots", &enemy_attack, NULL},
{"attack", "Hypnosis", &enemy_attack, NULL},
{"attack", "Water gun", &enemy_attack, NULL},
- {NULL, NULL, NULL, NULL}
+ {NULL, NULL, NULL, NULL}
};
void load_data(gc_scene *scene, const gc_data *datas)
diff --git a/src/npc/fisherman.c b/src/npc/fisherman.c
index ebf3805..4e17381 100644
--- a/src/npc/fisherman.c
+++ b/src/npc/fisherman.c
@@ -9,7 +9,7 @@
#include "systems/game_manager_system.h"
#include "components/player_component.h"
#include "engine.h"
-
+#include "setup.h"
void fisherman_setup(gc_engine *engine)
{
@@ -58,5 +58,6 @@ gc_vector2 pos, enum gc_mousekeys key)
else
dialog_add_line(dialog, "", "You found the water jet upgrade!", NULL);
inv->inventory_upgrades[1] = true;
+ check_for_boss(engine);
return (true);
}
\ No newline at end of file
diff --git a/src/npc/lumberjack.c b/src/npc/lumberjack.c
index 8105dfb..28ae0f0 100644
--- a/src/npc/lumberjack.c
+++ b/src/npc/lumberjack.c
@@ -8,6 +8,7 @@
#include
#include
#include "engine.h"
+#include "setup.h"
void lumberjack_delete(gc_engine *engine)
{
@@ -30,5 +31,6 @@ gc_vector2 pos, enum gc_mousekeys key)
inv->inventory_upgrades[2] = true;
di = dialog_add_line(dialog, "", "You gained the uppercut upgrade!", NULL);
di->callback = &lumberjack_delete;
+ check_for_boss(engine);
return (true);
}
\ No newline at end of file
diff --git a/src/npc/mage.c b/src/npc/mage.c
index 6c42ec9..c8d0c35 100644
--- a/src/npc/mage.c
+++ b/src/npc/mage.c
@@ -8,6 +8,7 @@
#include "components/dialog_holder.h"
#include "components/player_component.h"
#include "engine.h"
+#include "setup.h"
void mage_give(gc_engine *engine)
{
@@ -22,6 +23,7 @@ void mage_give(gc_engine *engine)
return;
if (!inv->inventory_upgrades[1])
dialog_add_line(dialog, "", "You got the fireball upgrade!", NULL);
+ inv->inventory_upgrades[0] = true;
+ check_for_boss(engine);
dialog->text[4] = NULL;
- inv->inventory_upgrades[1] = true;
}
\ No newline at end of file
diff --git a/src/npc/smith.c b/src/npc/smith.c
index 1ae9c2e..f2dbe61 100644
--- a/src/npc/smith.c
+++ b/src/npc/smith.c
@@ -8,6 +8,7 @@
#include "components/player_component.h"
#include "components/dialog_holder.h"
#include "engine.h"
+#include "setup.h"
bool smith_chest(gc_engine *engine, gc_entity *entity, \
gc_vector2 pos, enum gc_mousekeys key)
@@ -27,5 +28,6 @@ gc_vector2 pos, enum gc_mousekeys key)
else
dialog_add_line(dialog, NULL, "You found the shield upgrade!", NULL);
inv->inventory_upgrades[3] = true;
+ check_for_boss(engine);
return (true);
}
\ No newline at end of file
diff --git a/src/systems/dialog_methods.c b/src/systems/dialog_methods.c
index 94d3121..8650713 100644
--- a/src/systems/dialog_methods.c
+++ b/src/systems/dialog_methods.c
@@ -108,9 +108,7 @@ void dialog_next(gc_engine *engine)
gc_entity *entity = scene->get_entity(scene, 50);
gc_entity *holder_name;
- if (!entity)
- return;
- if (this->dialog_id == -1 && !load_dialog(this, engine, entity))
+ if (!entity || this->dialog_id == -1 && !load_dialog(this, engine, entity))
return;
if (this->input_id >= 0)
run_input_func(this, engine);
@@ -124,4 +122,6 @@ holder_name, engine) && handle_input(engine, this)))
this->dialog_id = -1;
controllable_set_can_move(scene, true);
engine->trigger_event(engine, "dialog_ended");
+ if (this->current_dialog->close_callback)
+ this->current_dialog->close_callback(engine);
}
From 57c2c3eb452e209f4ab3f574098b85152b2258ac Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Sat, 2 May 2020 17:44:47 +0200
Subject: [PATCH 3/5] Using real enemies name
---
CMakeLists.txt | 1 -
include/components/attack_component.h | 1 +
prefabs/enemies/bee.gcprefab | 3 +-
prefabs/enemies/evil_seed.gcprefab | 3 +-
prefabs/enemies/flower.gcprefab | 3 +-
prefabs/enemies/mushroom.gcprefab | 3 +-
prefabs/enemies/shrump.gcprefab | 3 +-
prefabs/enemies/t-rex.gcprefab | 5 ++-
prefabs/enemies/turnipor.gcprefab | 3 +-
src/components/attack_component.c | 2 ++
src/components/combat_holder.c | 50 ---------------------------
src/game_loader.c | 1 -
src/systems/combat_manager.c | 2 +-
src/systems/combat_methods.c | 2 +-
14 files changed, 13 insertions(+), 69 deletions(-)
delete mode 100644 src/components/combat_holder.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7447c49..a662ddd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -291,7 +291,6 @@ add_executable(my_rpg
include/components/player_component.h
src/enemy_dataloader.c
include/enemy.h
- src/components/combat_holder.c
include/components/combat_holder.h
src/components/dialog_methods.c
src/components/attack_component.c
diff --git a/include/components/attack_component.h b/include/components/attack_component.h
index c44bb9a..de3ee16 100644
--- a/include/components/attack_component.h
+++ b/include/components/attack_component.h
@@ -21,6 +21,7 @@ typedef struct attack_holder {
struct attack_component {
gc_component base;
attack_holder *attacks;
+ char *name;
};
extern const struct attack_component attack_component;
diff --git a/prefabs/enemies/bee.gcprefab b/prefabs/enemies/bee.gcprefab
index 4eaacb2..44e8ea1 100644
--- a/prefabs/enemies/bee.gcprefab
+++ b/prefabs/enemies/bee.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/prefabs/enemies/evil_seed.gcprefab b/prefabs/enemies/evil_seed.gcprefab
index eb2621d..f4d015b 100644
--- a/prefabs/enemies/evil_seed.gcprefab
+++ b/prefabs/enemies/evil_seed.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/prefabs/enemies/flower.gcprefab b/prefabs/enemies/flower.gcprefab
index 6c69b74..5db8f34 100644
--- a/prefabs/enemies/flower.gcprefab
+++ b/prefabs/enemies/flower.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/prefabs/enemies/mushroom.gcprefab b/prefabs/enemies/mushroom.gcprefab
index 1983f17..dced40a 100644
--- a/prefabs/enemies/mushroom.gcprefab
+++ b/prefabs/enemies/mushroom.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/prefabs/enemies/shrump.gcprefab b/prefabs/enemies/shrump.gcprefab
index e25ea1d..a54e1e4 100644
--- a/prefabs/enemies/shrump.gcprefab
+++ b/prefabs/enemies/shrump.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/prefabs/enemies/t-rex.gcprefab b/prefabs/enemies/t-rex.gcprefab
index e0b8164..30357a3 100644
--- a/prefabs/enemies/t-rex.gcprefab
+++ b/prefabs/enemies/t-rex.gcprefab
@@ -2,14 +2,13 @@
-
+
-
-
+
diff --git a/prefabs/enemies/turnipor.gcprefab b/prefabs/enemies/turnipor.gcprefab
index 97e487c..7f36f45 100644
--- a/prefabs/enemies/turnipor.gcprefab
+++ b/prefabs/enemies/turnipor.gcprefab
@@ -8,8 +8,7 @@
-
-
+
diff --git a/src/components/attack_component.c b/src/components/attack_component.c
index 75cba7f..c2dda3d 100644
--- a/src/components/attack_component.c
+++ b/src/components/attack_component.c
@@ -14,6 +14,7 @@ static void ctr(void *component, va_list args)
struct attack_component *cmp = (struct attack_component *)component;
cmp->attacks = va_arg(args, attack_holder *);
+ cmp->name = va_arg(args, char *);
}
static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
@@ -22,6 +23,7 @@ static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
int i = 0;
char *name;
+ cmp->name = xml_getproperty(n, "name");
cmp->attacks = malloc(sizeof(attack_holder) * xml_getchildcount(n));
if (!cmp->attacks)
return;
diff --git a/src/components/combat_holder.c b/src/components/combat_holder.c
deleted file mode 100644
index 70aecd6..0000000
--- a/src/components/combat_holder.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-** EPITECH PROJECT, 2020
-** my_rpg
-** File description:
-** combat_holder.c
-*/
-
-#include "engine.h"
-#include "components/combat_holder.h"
-
-static void ctr(void *component, va_list args)
-{
- struct combat_holder *cmp = component;
-
- cmp->name = va_arg(args, char *);
-}
-
-static void fdctr(gc_entity *entity, gc_scene *scene, \
-void *component, node *n)
-{
- struct combat_holder *cmp = component;
-
- cmp->name = xml_getproperty(n, "name");
-}
-
-static void dtr(void *component)
-{
- (void)component;
-}
-
-static char *serialize(void *component)
-{
- (void)component;
- return (NULL);
-}
-
-const struct combat_holder combat_holder = {
- base: {
- name: "combat_holder",
- size: sizeof(struct combat_holder),
- dependencies: (char *[]){
- NULL
- },
- ctr: &ctr,
- fdctr: &fdctr,
- dtr: &dtr,
- serialize: &serialize,
- destroy: &component_destroy
- }
-};
\ No newline at end of file
diff --git a/src/game_loader.c b/src/game_loader.c
index f8fc95b..9819b12 100644
--- a/src/game_loader.c
+++ b/src/game_loader.c
@@ -143,7 +143,6 @@ int register_customcmps(gc_engine *engine, bool map_editor)
engine->add_component(engine, &xp_component);
engine->add_component(engine, &player_component);
engine->add_component(engine, &attack_component);
- engine->add_component(engine, &combat_holder);
engine->add_system(engine, new_system(&combat_manager, engine));
engine->add_component(engine, &health_component);
engine->finish_physics(engine);
diff --git a/src/systems/combat_manager.c b/src/systems/combat_manager.c
index 4a2e172..161a2e5 100644
--- a/src/systems/combat_manager.c
+++ b/src/systems/combat_manager.c
@@ -101,7 +101,7 @@ static void dtr(void *system, gc_engine *engine)
const struct combat_manager combat_manager = {
base: {
name: "combat_manager",
- component_name: "combat_holder",
+ component_name: "attack_component",
size: sizeof(struct combat_manager),
ctr: &ctr,
dtr: &dtr,
diff --git a/src/systems/combat_methods.c b/src/systems/combat_methods.c
index b031ccc..649a49c 100644
--- a/src/systems/combat_methods.c
+++ b/src/systems/combat_methods.c
@@ -156,7 +156,7 @@ gc_scene *scene, gc_engine *engine)
return;
}
this->next_enemy_attack = &enemy_attack->attacks[random() % count];
- snprintf(str, 150, "%s uses attack %s.", "The bee", \
+ snprintf(str, 150, "%s uses %s.", enemy_attack->name, \
this->next_enemy_attack->name);
if ((line = dialog_add_line(dialog, NULL, str, NULL)))
line->callback = &defend_callback;
From 3e4688f9a208886c6d5971310e23e8bdd16166de Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Sat, 2 May 2020 20:56:24 +0200
Subject: [PATCH 4/5] Fixing the random segfault and adding attacks to the boss
---
CMakeLists.txt | 16 ++++++++++-
include/components/combat_holder.h | 1 -
prefabs/combat.gcprefab | 1 +
src/components/attack_component.c | 2 +-
src/components/combat_holder.c | 44 ++++++++++++++++++++++++++++++
src/game_loader.c | 2 ++
src/systems/combat_manager.c | 6 ++--
7 files changed, 67 insertions(+), 5 deletions(-)
create mode 100644 src/components/combat_holder.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a662ddd..2f38807 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -297,7 +297,21 @@ add_executable(my_rpg
include/components/attack_component.h
src/systems/combat_methods.c
src/combat/attacks.c
- src/player_utilities.c include/player_utilities.h src/systems/inventory.c include/systems/inventory.h src/systems/game_over.c include/systems/game_over.h src/npc/mia.c lib/gamacon/src/scene/scene_constructor.c src/npc/fisherman.c src/npc/lumberjack.c src/npc/smith.c src/npc/mage.c src/combat/boss.c)
+ src/player_utilities.c
+ include/player_utilities.h
+ src/systems/inventory.c
+ include/systems/inventory.h
+ src/systems/game_over.c
+ include/systems/game_over.h
+ src/npc/mia.c
+ lib/gamacon/src/scene/scene_constructor.c
+ src/npc/fisherman.c
+ src/npc/lumberjack.c
+ src/npc/smith.c
+ src/npc/mage.c
+ src/combat/boss.c
+ src/components/combat_holder.c
+)
add_compile_options(-W -Wall -Wextra -Wshadow)
diff --git a/include/components/combat_holder.h b/include/components/combat_holder.h
index 4c50978..9d4f5f7 100644
--- a/include/components/combat_holder.h
+++ b/include/components/combat_holder.h
@@ -14,7 +14,6 @@
struct combat_holder
{
gc_component base;
- char *name;
};
extern const struct combat_holder combat_holder;
diff --git a/prefabs/combat.gcprefab b/prefabs/combat.gcprefab
index a6188e7..5d0c1e6 100644
--- a/prefabs/combat.gcprefab
+++ b/prefabs/combat.gcprefab
@@ -58,6 +58,7 @@