From 4f5c24c13e5ed9f7af19535831eb708320c35ba2 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 16 Jul 2021 11:06:28 +0200 Subject: [PATCH] rogue font and bidirectional enemy animations --- CMakeLists.txt | 13 +++++++---- assets-cg/enemies/bat_death.aseprite | Bin 1677 -> 0 bytes assets-cg/enemies/bat_death.png | Bin 730 -> 0 bytes assets-cg/enemies/bat_death_left.aseprite | Bin 0 -> 1289 bytes assets-cg/enemies/bat_death_left.png | Bin 0 -> 629 bytes assets-cg/enemies/bat_death_right.aseprite | Bin 0 -> 1287 bytes assets-cg/enemies/bat_death_right.png | Bin 0 -> 609 bytes assets-cg/enemies/bat_idle_down.aseprite | Bin 2004 -> 0 bytes assets-cg/enemies/bat_idle_down.png | Bin 979 -> 0 bytes assets-cg/enemies/bat_idle_left.aseprite | Bin 0 -> 1557 bytes assets-cg/enemies/bat_idle_left.png | Bin 0 -> 802 bytes assets-cg/enemies/bat_idle_right.aseprite | Bin 0 -> 1538 bytes assets-cg/enemies/bat_idle_right.png | Bin 0 -> 800 bytes assets-cg/enemies/fxconv-metadata.txt | 22 +++++++++++++----- assets-cg/enemies/slime_death.aseprite | Bin 1356 -> 0 bytes assets-cg/enemies/slime_death.png | Bin 604 -> 0 bytes assets-cg/enemies/slime_death_left.aseprite | Bin 0 -> 1096 bytes assets-cg/enemies/slime_death_left.png | Bin 0 -> 526 bytes assets-cg/enemies/slime_death_right.aseprite | Bin 0 -> 1096 bytes assets-cg/enemies/slime_death_right.png | Bin 0 -> 531 bytes assets-cg/enemies/slime_idle_down.png | Bin 393 -> 0 bytes assets-cg/enemies/slime_idle_left.aseprite | Bin 0 -> 944 bytes assets-cg/enemies/slime_idle_left.png | Bin 0 -> 346 bytes ...own.aseprite => slime_idle_right.aseprite} | Bin 1096 -> 939 bytes assets-cg/enemies/slime_idle_right.png | Bin 0 -> 355 bytes assets-cg/font_rogue.png | Bin 0 -> 17959 bytes assets-cg/fxconv-metadata.txt | 10 ++++++++ src/anim.h | 16 +++++++++---- src/enemies.c | 14 +++++------ src/enemies.h | 2 +- src/entities.c | 3 ++- src/game.c | 2 ++ src/game.h | 2 ++ src/main.c | 14 ++++++++--- src/render.c | 17 ++++++++++++++ 35 files changed, 88 insertions(+), 27 deletions(-) delete mode 100644 assets-cg/enemies/bat_death.aseprite delete mode 100644 assets-cg/enemies/bat_death.png create mode 100644 assets-cg/enemies/bat_death_left.aseprite create mode 100644 assets-cg/enemies/bat_death_left.png create mode 100644 assets-cg/enemies/bat_death_right.aseprite create mode 100644 assets-cg/enemies/bat_death_right.png delete mode 100644 assets-cg/enemies/bat_idle_down.aseprite delete mode 100644 assets-cg/enemies/bat_idle_down.png create mode 100644 assets-cg/enemies/bat_idle_left.aseprite create mode 100644 assets-cg/enemies/bat_idle_left.png create mode 100644 assets-cg/enemies/bat_idle_right.aseprite create mode 100644 assets-cg/enemies/bat_idle_right.png delete mode 100644 assets-cg/enemies/slime_death.aseprite delete mode 100644 assets-cg/enemies/slime_death.png create mode 100644 assets-cg/enemies/slime_death_left.aseprite create mode 100644 assets-cg/enemies/slime_death_left.png create mode 100644 assets-cg/enemies/slime_death_right.aseprite create mode 100644 assets-cg/enemies/slime_death_right.png delete mode 100644 assets-cg/enemies/slime_idle_down.png create mode 100644 assets-cg/enemies/slime_idle_left.aseprite create mode 100644 assets-cg/enemies/slime_idle_left.png rename assets-cg/enemies/{slime_idle_down.aseprite => slime_idle_right.aseprite} (62%) create mode 100644 assets-cg/enemies/slime_idle_right.png create mode 100644 assets-cg/font_rogue.png diff --git a/CMakeLists.txt b/CMakeLists.txt index f85c045..18a8899 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,14 +51,19 @@ set(ASSETS assets-cg/skills/swing_left.png assets-cg/skills/hit.png # Enemies: Slime - assets-cg/enemies/slime_idle_down.png - assets-cg/enemies/slime_death.png + assets-cg/enemies/slime_idle_left.png + assets-cg/enemies/slime_idle_right.png + assets-cg/enemies/slime_death_left.png + assets-cg/enemies/slime_death_right.png # Enemies: Bat - assets-cg/enemies/bat_idle_down.png - assets-cg/enemies/bat_death.png + assets-cg/enemies/bat_idle_left.png + assets-cg/enemies/bat_idle_right.png + assets-cg/enemies/bat_death_left.png + assets-cg/enemies/bat_death_right.png # Misc assets-cg/font_damage_red.png assets-cg/font_damage_white.png + assets-cg/font_rogue.png ) fxconv_declare_assets(${ASSETS} ${ASSETS} WITH_METADATA) diff --git a/assets-cg/enemies/bat_death.aseprite b/assets-cg/enemies/bat_death.aseprite deleted file mode 100644 index 251c57e0bcc22d4d95b7efa99832f71848cd4e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 zcmcJOdrVtp7{)(ZpkQGZD1?iY5`kSndVo=cF*yu3m_T5VjhHaXrQ(Fyu>t}LQr1lb zSpfHk5J)HiXOv6{Fl0F8(k)ggsW@grCUJPF-9ivl2qWV0IcJ?~%o6|6@8tZ_zUSn9 zpXd3$bKa4V+wa;FZ(LGhM+i~kez+ou9a|(KT>r<);S;j8Cg7$DFu)79K+27@8FvT; zA8Dku5@GX%`^j*eItm;(LV>2rP;m8fBFL<0 zLBsrUuxKCw+*g+Y%5t*7UC}h?7Z3=Bh8_gt67s;b6X(E;{xR@v%OtqYSitXYv+R3s z8a#2T6QmE9gJIF>px8ScO!dzKUkXx!-FwPFqwF=1$*N*G-OI9xRck&N3tp13bF2MX zRT=(i;BJ3b|Nh-_Fe{4H+?t*PE@?}^jjOGUju2wc?(u^l@gH4n7P3JwNClA~4>pVy zEn+|h2mtP39ll{2j$s#GVH7T55&mEf&R`3kUXYI?{JkKY2uNB%%?oO2#J@Z)#JdhsLU{1V@E)}AB#)Eo?xK9!j%lZ&C+pvs zIu#OZF1XRClDuy&ypi0}+5hEIZKmj7^$|S zc17yhq#Xerv17(F3ym{j$~tPe?22p9icZyhGd@?PY0^_^GQ$(fmJcP1t_GF1K)J1> z91BE#i!QYVt{0N!KX(rN#F+e!X%{TTqQ_EC7B^7Funt98XQCngxnI52n{Is)61mV> z!NV?Zt?{_eip}B(C!IjL;1SX_S|+8#eYK|{uDG`=sj2h#NZ~v8#+IMF8Ft`x-NhR1 z+{+`B(8p!u`LpD3F(I*0Jq5kiEbNJsO+z;#-!2B#iTFQ@cLo&j4qSBKeTSaj$Pch*Ai90{D zqmT+Le=}Oxlb2g~?QBd0QM{Ve&L`rx4t&;ZjpNbXX$J)}v1y`%a0sS882#i^{=k_1 zglMi=_=a!;!QU`0K@}c;a^j+PFX3hMx zF-b05h%cNLUz8k|1=1z8?fkFwzGBtbvVhDarng-Ehwo!n-+bb3^0PHGrXkz@(58`X3TX_vfQN6EK=)+yJdG0t9Hiqc#*|=?851BJMzU3zWMjN KvY*0#+4V0lnHTl| diff --git a/assets-cg/enemies/bat_death.png b/assets-cg/enemies/bat_death.png deleted file mode 100644 index abe8a3d13914ca49953804f9d9981ae2c6684209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)Px%lu1NERA_3uN<>E=7m_DjPM@t(~%F4hq9d z*6u|{57`0)n%vrjJN7z+q)rs|kyfbOm=6#voXDg69`Er4czAetcpNH%ia50xA^$0&d4UzU1rY#95yFnO1+%TXdEVj} z3TJ>6A>>e9MIkf@HM@5ZNX)0Ry7dSE=F=GlfwXfTJO}`#QA|>V+=e(gBt=MR6g!`x z*}h7-S+0WwuYf|kX;pzCNe)Adj*gK=ars#b`_dJr=ilDn*?DYnpY?fBYC~`D?~rZQ z$hK<$%9cb<*y!lk{7#awnWxFGv9CP;HqT$0&(?w>-6i&Ofh|A)Rf!)T zKbU(>xE77&alypXC@u;7^;LqC(MuyPvmZzi;$rr`@|~mz>FU#^xmRH_6`hNqW4+s% zvjRBuZvFoA8vx+V>05}KYlxd`3<7Bgw}@}tQKrIJwdkGCq4RQEtjQTT@3(7HUEJpW z7nt@kjbgh6?P3R++>>NXJId@9xX>O~t?Tk}7BjgY&d*4Skam<6T3|iaadzwls#?TO zb8~?o&d*HTA;^>RPm*y-U@ZU_f!UT5O^3BT-zDb03JkbK?m~1!azzFI6(N&kT$;~? z=(EG>1r@v4{;2D0ElzM1*-e#o5U_WuvN!cym)(y-%Z1WZ2_n_5&!@I M07*qoM6N<$f)0~WGynhq diff --git a/assets-cg/enemies/bat_death_left.aseprite b/assets-cg/enemies/bat_death_left.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..fb93137962527be92c5a94e56e2924222ec511d9 GIT binary patch literal 1289 zcmcJNVN6?97>2*D6lhqzY-L@yTDi+6+hh?6t|%z&g>`IM8-&GdD9S38pe}QxbATIJ zZFS0MM$zbKMiv$(CTq4OTTpQRsO^~iD4Cj(Fr^NZV5fwD*Hvad!IZt}O zoAf;IcaBm)H2z5vY4PwRBO(XZzm-Qa)}(Yi|3{51A&So_q+Ovx8mtsv+A?9gt!S*` z^ZxD_623@3MTtR)E{SF$5hXDw5q&h!U!&EbU&OBmTb|4Z0~NX8^*6J@***ajXFTB0 zjTgb%fC(&WDF<_Q?F2V$HiNp%HDGqO1uQhZ1X}Cg1mR3!L!02F`!kE_M@95 z0W-h=kRH*I8=;XHagh~4krEM+58;puv5*OYkOom$4un90)_k}_9M({VFJxf~O*ld@ zllk#-$!ZZ0rxdc*Mi$9qZ-y6)0hf_u( zAC9jK<+fEXxFaRT_UcA=B-i(xthTdxbWAB9`gQ++@@(?SqK@GM&lXrJ+GesGmwki2 zVY&ZpZ%6cf@0_38DgTZ;&ZTcPsx`&2eI=aQvD$I%7gazsIs3L4xSD%sPAPkYxG?2= zT~laYSUWJ)edVOqNouYC;036~=Va2QW>@(%7BiPqYJ&MPN?SDNBy<1s70kS9N;`Be zcz643+Wi!JLzME;jvcru`#C%b=p9pP_(mw=xm{|^e4*bpX^snZ;Zfc@ zeaKPJeMQ;(P_O6@JbHZ9(7uv|{D$4#r(`dOBf%BdVs(7m+TYe^J<>7anl78y6}Qm0 z8O}*&muP$9fvqaRR!vID)=cuMkHn>0+!w`~^z$11w%IiM$PdvUg>S5m0(V4aKWOMI ztey|LJYU>C>TsHm?0w5O{N5kBs-;(xTRnG*oqb7{?R7l?%gWNvxOK<&Y9bH&w3nJE zsq<$4SgFmGJ=QTOOuVzH%qvn;y3JevAG_TT?3O3kEytZ`>iRP-4jxT@Vs?ei>aIyG vRpsH#zw(u7!o9bIXvRhVy=jY4cQtFWxIuPlAa>|!oaBW1caE-qyn4@H@F}E= literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/bat_death_left.png b/assets-cg/enemies/bat_death_left.png new file mode 100644 index 0000000000000000000000000000000000000000..9af1412042ad2ce6242317525d1f695ec7998a2a GIT binary patch literal 629 zcmV-*0*d{KP)Px%FG)l}RA_Zo0)2mV%hPP>GF&E~o>46%mMT?Zny{RZ$k! z?iFJOHY9YDX^hgb#{lp8e6ds8ICY5cw>Yw$d*}DP_dOf%csw4D$Mb%f8*SR&L+80T z8+j4hLR3cG9Ba3_aB&jJhdX& z|GZXZ+3L?5@?2y9*i*aU0#ls4{VikJe%ubDJ+(3DGaW$51hRrWefiu-u*=bT=HbcP zC(|)@2mAQ>VVJpJr%9zsF2Wt=Md!YKz54IpGr1N-)pL7)CwfAO;N}{^%{5N;J^=uJ z{eG-fm9AaoRVnW>>a419T)4dfFI}e7Boim^_u3JMky-XST85(6RTW4xH`*Kx4{FCC zFX!vWVPxh;8x=_NaC~TE@ayh6O}|dBB|O0o$A>m?Z+&>z;(Y>zyZQ|E^De^3iXtOdqD@c>LNn9s^Jr#Kd8`3_#G^82~ P00000NkvXXu0mjfgzhF% literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/bat_death_right.aseprite b/assets-cg/enemies/bat_death_right.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..c8cd4f2d8928206080942f508c62f94add7c8e7d GIT binary patch literal 1287 zcmcJNZ%h+s9LImJ?_gQu`#qQElisgM zpU?N(N24Zs^i?7m@UWyJA}98LtAJGUkaT$dkM$sdXmM7poC+06!`86Mk#WcEz#yG1 zSefLw!w(`R(2iO`mP!D@8Q63V=nmeh82`%yr4LF z0Ic;FgIilGKvQ)UxPB848nd#&+}!Qpmg0k;?Qk1daXtWk5gP;Nq!{?{k<7u1> zdO?2IaWHRFIjA?h1D0h}f=6PeaL0Zcu@m7 zKmkaP=*W%GNQ}71il9h|h{%U-NwOL+oQVKQq*E)FNs$~EBkS`(T{@vG6$g+1# z@2?r=qun2;)dz$S*S%L&TYtagjjW!+K z_?ENtN@gTQbbD)@OFk~CMrVv9x74J3xzqAnum4vmY~1Iain(;JmmPJT;zD^nc2BQW zEc)ONL;b?)!AvTc>TS3Vx5ZhNa;xRLJb*2$C(^1o_0^`mLZ8?`lk(21@*ocb0f3nu`4|1ZQf&c&j literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/bat_death_right.png b/assets-cg/enemies/bat_death_right.png new file mode 100644 index 0000000000000000000000000000000000000000..846cf866931e2e20f859f75687df10aa6537bf7b GIT binary patch literal 609 zcmV-n0-pVeP)Px%8%ab#RA_O-5s0HJFh$ekssxv^XP_ zhY7$4<=sXrl;k+!{IR2Al>vbgga~s1Gbz+6btQ30T!Rk7_4DPT)J_NpFkdbVckLPO z#sh#|#v)<0N*(Zb(C!Jsk^H#wHD4|acjE!Z53E->>_59i=>U9S(GPyI9tpP{3v9;% zfSo|hq^UN>|I6!91i!fGlB}A1o&qZcKo?-P%CH>^*5_C7`Sc97V}XizckM-%l|6?^ z0(V$b>;VugX-S$qUiUZoI9Eo+%o3qJAP(<$w_=Qhqi9KEbQ>-17x?9@4b9rA5LeDl zMkv1-Ux&tHg!0Gx2QilS37g9su>xSWzJ0s`0Ki4(63A={WHyDW!35!Hvq(5hatmg@ z42&z6#i*Fd@x~MGlFQtm0yf7iG6!Q1+C9GIuJQ vX9*))f82y%rXEt_G?4{Hl)wO5yu#uOqa8lItiohv00000NkvXXu0mjf6jctv literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/bat_idle_down.aseprite b/assets-cg/enemies/bat_idle_down.aseprite deleted file mode 100644 index 318044b6f158cb6952891bd95cf2220be017b68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2004 zcmcJOdrXs87>7?OSS~`VkW%E*BBCH_i?v1MVu3Lx7SUp48g8{+r^wU@PC;v+^-O;AoyfDi_Ypqe1;!v^fTGn`>RfVBj8cr_Q;w21@k-tPk(X$b*hZ*zfN zx_F?ZX)Q3|a5Rt|8w2#>34qQ_cc70?IB?C{1fX!o5nyzEE3j-x4IIOUfKLZ-)}3z$ z?%1OQ3f83pm+_*24vZDR^{yh|&P7t-sik{?8ulR|COUw#y%whePpc322VP|3&pqgh zr;2tJ0=-@F{6XG)pooiSE{=)?4(28UfBU`|t3e2v<7YfmBz%XdCJVZOVxSeM1p2_s zc$*6~KnG9&*n>KFgESa}F1UgySb`$>fgG5D7C372dBKYEN(GDteEuKQTYmN*wukm5#G~B5bG8 z-ubDHUwmI*mP~1rZ_z*FI^i8g!L({I` zUEx$SN^0i>t1_g9y-FJ{Rr(V*_BK}S*PLIa=ys7BdbHtuYF?=}?0%T#fPw8huJE-F z3ik3n`Eb+<&24TQFhW$k8T{(w&BPGV@!K-TBsv}05XZ@~oP4e>M{%;UU3_;#0k3*< zYC+3Ux?c21bE9zG82i%ThRBH;^1geu$4hNCY7ipFH+=dvF%rKa6qAt-$ch-LrY-_^ z!nq(y;J-;m9KJ}K(`M1v43|glTSzVIIM3{NVdN{vH1~eRUfMPd$`&?-^U3`#G~13L zeGW$xDCKqO7Y;|*?a7=Br%KWaecl!nQKekfqkxf4NAFh_GI|%&sGCPlk|DGNJB2L& zaU-@(dy|ocNyzz#HWkteyz9Z6CZW4uyIHxe(f`G3=B;u`=3sR4;{mf5=WMoXZ+J!= z^RMqZxt-alA0XeX%r!%v&$Zms)B5HgG)hBuQR%w8>3>Gl zbPwo*vF~&uG&&`i0-ntuhQ_j!D83eXQ@282SSh%J<&<%iBbn zurJw~I9k5)c(YyA9}hL5evUydBdPx&jY&j7RA_ zDkMspl!ug5X|{6WAg5$0$gXGSW>m*;xy-_27n^V0RU>b;Nvl*=sPk*F6KiEI$dJ3z6ETfU$FBk zMo;s9SoDoE=tDr%_H*-v1_(HbOmdK-&y&yvf^Cho>7Of;k9N2L~0wd3XhulyBS(}kn z-zpAcD?|WEe#-gjjMd}P*;(ez49hp~@bmLm>w}S-QcO+^DFqaY+Yl@+^CHWm4g#ym zv1v#(#nZWf=nmj1Ad^g5BryVveX1J*D?qX6eti1a`i=VVz$KN<*%v>R<#qtJMPJ=s zJIO0X2@crVcy)U%1#ii=JH#kYE+8Y%lG$qD%!H}07y)#g6>D_c=C&u*6xrnkvdarh zswosv`IC!#WSggFZO zTRIHM4JePlQ8!KwrAAb2vOKG>RiQLNJ{^KR(3MQid=9?Fv1B`TD5NdioZa`2cXkex z1Y?UHA*rx)AU^IN@6f0lo10KSVsL(X<`e)gAYc5vZ=&DNPtT%$?ZI7Sxvs~hJ~=ve zK8QCZLA#Rel~#JCm1IBI`~)sT96$BA^j*kEmoQ@NMV9jmp-`+`p4+vzb@jM({z`cg z;um#|%}t*pfz2M|#ZJ-SX%!^LxY7zQ_6kWS^`bx%8{#;9Vo1n=Ge4pu_78#hV)1)z z^m$vxG?8>XXKUqNAhIB0(B$&vBWC!dJ_*v~euY10o z8?Xa#ni*+)7hZJ^+r?%Go!Q&y2?h)pFkry{i(lQA;~MTFP5%G@002ovPDHLkV1i}S B#l!#r diff --git a/assets-cg/enemies/bat_idle_left.aseprite b/assets-cg/enemies/bat_idle_left.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..608ca8d8f1b27d391f9a9c3db85d5fa2b51e1ced GIT binary patch literal 1557 zcmcJNe@q)?7{}kPl!8!N9UDc~a*Tx^{U2+56GFZP2DK{#HrNU`6Qj1=u-!oz zL}F`Zf(^e=UkQpzq&|v ze_;bwo-_g_hiiemQ}Th~+yvkYyh7mHJLJI5=iUY4iD!UBVFO897s*!A)}5OU{5p}` z_cV{RD&R?hyLhC3#;#Ogp^$Xe<{t&lsH%VuzSk0$5JCauJ6pI$Q%#?60{1z9mK&J zl))Ed!4x#X5d@=2Ka5UU`2pgHiKG>cZ`NRfFX4fKA+!n65dp`>zrqm#HOv02prh`=YGQpDjWy?9nC``{=}H>wr< zfpjmPBZ@G8*eYQ1I3KZVQ19$!#Hb$BjewYMfrjMpNgm|OaQnRj{=?fEP)3Y+wYdg) z3N{Af7xrdXJ>ykB8cq7vJ#&NpTa^7PrJ&c{H5WUzyX3gdJB)AtQG7}`=Fs%k`t=e)e~*DCJn9BL!&NCeiVh_k#eU;M@xBAi=1H%XYUzGicrHMTgn$rsD_;QMvO9(RmM z<=lTt=^VM%(W2o0;Ki7_4l(W4*i~2Wsy=y0NPXi!`pn1lgQ?oB>>VIWNuJM_q?fub zDSXk9?eE0pMdNMoMw9}J5qsL)%w-ilX7i9YT_Ru9-;wMIS}jz{8sHlm?KPeXm2)I1 z#pBcefr-RAhevVW8dcWQ6JaRE2v^aeP^FQEmSQ{6;Hv0a&poT60Vr^TC3dW0TvzTTrtTGVI42 ph8kQiYqv3P+V~g6IwRJoGnGHE;;QT3Wle%MKha)|!lU~Pe*<&%B-H=_ literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/bat_idle_left.png b/assets-cg/enemies/bat_idle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5711837fa5859b2834535b545557655d2d526e GIT binary patch literal 802 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 diff --git a/assets-cg/enemies/slime_death.png b/assets-cg/enemies/slime_death.png deleted file mode 100644 index 0de7c00c031ca49b507eb270acd5f25f3cf32b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)Px%7D+@wR9J=Wm$7TxKpcfXcPPem2rZNhrZGhgojVm=D5#qj(qlXZlKP;(y~SU>CD>E69NA+T61 z7K_DVu~;p8J{zVeD*p=pifpMLFgIxd&q^*8YKAG+U8*YOq#Q^wJZMox*VO8;S|NLn@>(LFmz_xA=WMqfu|E#sky_k)P?d zvavw|VN?>Qw4Ej*ZELi&53K6z%m=u-xZ%r(7p4mUtZXg0AW%%`yX~hy^)@a&qg(ZhH9?#jJFUudfB>f(m?ub!L80?_Hb$pF-Zb^9(q zF0VNrPD$bvfYE5gd^zFk;uqg1WA#O&W!=OwWl}OJ;##d$=#*;b_3|kC_cDfwzR|f+ q!F?Q_|4QFvjE(;quvjerFMk1>SP7Xn_DnPY0000 diff --git a/assets-cg/enemies/slime_death_left.aseprite b/assets-cg/enemies/slime_death_left.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a74e078da1a3ffaec94db3114aa3f5ab2d209d5b GIT binary patch literal 1096 zcmcJNUr1A79EQI&=QJHH5L@WlF-tT5Y`Qdc#U|;rQbtNzk|X~lDv?%NY8YEXb7*Pa zl&NTF7MM_qVJKu<7b}g(gw{p1N@PQkEZ2plr}rF*H0pb8e-WvC@cB!4NUyzc(ZXOqVmx zO=(%+M?(qteYA=0B80dx|MBl4@s3}0S?C7EpcPbtKA1A*4X6Pfpa7&tbmT^8Bt~3h zMNp(fMC3y_BttA@LLj6;6eb5kAc0X1cZkCp%J79OOrZ%!2uc_~ipyH90^)>EQgf?L zoS`DG;e|(Gll6qgwOL&oh$pFR&p)ox9rhbsF&7E7_a|qSExWk&O%Zk8s_LJLD>hND zZ(?`DlQ~nbw6xGIbJ>2*yr`ctFWLqq@A_r(2M%s-TY0q4kLM#DD}l4TXP+neW=nN5 zC&mA$a$rl|Vs?+C>#m{ovPLp+QKa6qFUyNOOc)$$fx*%OhrPSZjlG1;2)Yq37r~9h zgB8@Vf^wm!@4dyX+2PyCbdbpXt#Mp?>=RY9(xIlm6{>ZS^#YTM&OL7eNdX=ogDvNQF=?PYeqaG z_{+$hHKGJzM;y-1#PCEtx|2=tjQTmltDc*DQPx$$Vo&&R9J=WmA`AkKorNn=^&+a5DKk>ptPxfKv#!?ql>uc>d+~B@ox}!>EPhv zU>3>ZRwoNCb*+e%C>_!v;t)hi;X0I;o|@?S3!&TxLc-ng-n-AcBY;FAkw_#Gi9{kf z0J@ClCC;Quis;&0wjsQB->ghbaw5SP0AM)j&CREyA>^_R zg=B481mBS9%mm;qW!F4@tctrb8C{`BFt#KI0PKN-hlJ{GCSOdj!eeuz4fr*IPA0{s zTBs?Ti7{)AI;dHv!Li%C&8L;P3jjtT6!p6H4_gid*{^ z1AuQ9fIVnJ3>w=-j#vCe4jF$Ru_Y3TL~=xa0BgY&mfi<7 Q(f|Me07*qoM6N<$g6}Nx%m4rY literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/slime_death_right.aseprite b/assets-cg/enemies/slime_death_right.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a03878e6e63148a72699ce954e4900277fa03f9e GIT binary patch literal 1096 zcmcJNT}V@57{^~X=Q2@eh^}<)_#^YlMQqt$)S;r+4m4EFr~&)$MSLKYu! zi4YG(0tg{GoIjOL0+=Qd;Q1eA=Mduc@Ytz542Z(vQ|w5;artQMq|&!KGQV%wk2FgM zOCw7aAvB7mgC+WCpdTlUK|hB|23xb_p!K8_d~-ztu8ycddc_3J%$0*$s}js<)qrWG zr@%d#DlkSI2TCM)V7BrsSXgrt)C`V+y-N;oon8VL78wpao&;+y^nt3Qm%-G`A}~_8 zA3QE925S>_VE^8WpeyYvNEbIVoP5Zzld=7rcMyD%#>{OIF;*H;A($d!{12xnz+yS$ zY%VGVKbY#kZ{ueA0U;!i`Hz1u67Tp`zrt>?7;FVA!9JK}teCI{>;MZudPGNVghpb- zMOFkwN<>6HghMjKLM8-48bo1oAOsS0%Ha-iSVI}UkcBBU;Rr!7<418>t4%X2uJTVj^rOG_K8Ng_B^?(yy&B8hMh54U?3+gLq0CTpX=HoIhaoe9ho!@3rY< z0_RY8naKWPye}eaJ;ByE&zEzn!k*nPt9=7Xok=6*Ks@*Pp|hoTe1CiU_Jhj7|i9cJ&7PPDt!-*fe& zv)3(6nbKR!d9R{sv+3dG+^PhN>5kf~UYnj4yHe|g76Xaz?JT+Wk5T=W5r>5SWfZh& z#0x1g_^O5NXP)Px$%}GQ-R9J=Wm9cBWKorJ5I~0))(n4{NR!Svd3Xme_s%Iksuy zW%F0D%R+b>MBHUkC>B~VGUqgzwcn9RG!DCnVxbk-+$e>Jif>|7lbF*SCuG!U+Q-Ai zRj37!u2&oY67h^3i`t=Kir|M!KvqOnDYs*kq}m?f=~-*IkG)JXbqkN85Nf+PE9>k|GMt_Pw@FdDLe(Ueh-dIUGmwa9 zT*mvIseuh5$S6~{kQ36NZVQW3-^+Xem<;E5x;@#r05k^N9eSNQ1h9S^`ySGjayyn2 z()Ktfq>&TSFm(&2ZsCXR2mNLnSrHcwa?&SF=QSD5adUngSUX?2WWeI#FDoK@|CpiL z9>CNs06@3f#c0~c%lHd#{odN2%i7A&qNr1xi`=w(y!5@;hW@G?+tTN7I2_K7_ysry V36{_(fqwu1002ovPDHLkV1ge)^ZWn+ literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/slime_idle_down.png b/assets-cg/enemies/slime_idle_down.png deleted file mode 100644 index 6c9301dad3836aef5973abeb3a57f9ba85089947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Px$LrFwIR9J;$U>F6XU=)mkQ81DLBN1x;Q>dS&fRF?JGcYhPELiCU7vSPhU|?Wi zUmR(pkc`%_pwts^hZ6`OyyoNeKzX+l!_hlW7=)F0;DYi3 zY77rQ++tv0K=A~r9zcm%Tmi(uKsctE@L7Njz#K0xphlE>TxOSdJ2A}JcL&4qFmspQ zIKi;=#tDX18?*4*fy)C7*g_v29C`5$*#e>gKC_VnNM1k<-4hsqg=E{&EHV<1AlC?@ z!M7g|aLVC~0T_6D?+adeSf(Qf;4}N-hg$be8TTWERP0!^~%3U?6A*!Fr&)+X<%vG8|8|*~HpGR833( nkXsXzQuGdZlVuc)g24&^=IDvpS9UHy00000NkvXXu0mjfUvr>m diff --git a/assets-cg/enemies/slime_idle_left.aseprite b/assets-cg/enemies/slime_idle_left.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..357ea0880bc3793ed1dcee46187c63928ad11e22 GIT binary patch literal 944 zcmb`FU1(Ba7{?ziCpKcch~Z}95u&!N*=9;@*zCf=NRjMA7Hnx-W0NSeWOHS+BuEH^ zB3Nt}TOX_;MHteGKFn^sSdEw$UX{BE8EnnasP%FBzo%t&-+MT}bKd9TJiq^Q-utVF zvbV(~$HkF|hzbm))kq>?UrCjv+W&l+5ECuuB|=vTK3s)c%Kf8&N-GN0T;odPhLvaO z!3%E*fkA;LA|6X%LLllWpstoHP;cfofq@-5FuHdeIOEfROYz+xzZe2j=?<_f+5$EQ zY@pV$53JRjK!r*TYBXlBsihON^j-vQx2C`=xdd3`bKtuyy?G~iSIhbiD4CT_X#wk$%->jN0PQ;F z9I-mUxsV(D^d!QM5z%V)kADvmdwlh;h1p;*mLo&odCImtnL}57)0tv!8xI-M)P=+sLVG2z+LQuv0I2_2*f;dUZ;_@H$ zat&v(k#MXaBOb@**D9wqG%(ubGzAYR9{dO`UAWfinGQ;V>CgQ&F6ZfDYW`zS>)4%m zo8#-@w+jVT`_{)b$K0-Y&!qWag}0(!pL3u5B5PO19&v_UzSQxuH&uO2wcbqn1zn1i zzf2Q_0?%_{G+WM#gk#DMrynXxJaUgp6}8*iRNi`SR@Tj7C&rHCNhN^ z(N`nY=f`I@b}S6}AI=VS7dc-hePmV|ySm>v^(|;M#*Can9ZwCK&WV|a^YXp2kwH1- NWv<~vwBGjm*-y1mBYgk> literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/slime_idle_left.png b/assets-cg/enemies/slime_idle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a7d0d47532028705a145a8701d2f491c1664a5 GIT binary patch literal 346 zcmV-g0j2(lP)Px$6iGxuR9J=WlsyWB8oOhc_1I&Y*~md`^R1qT+#1!FrD~?i{QaU4Fcqa)OAeEmIVM$ z;j4f*C*Pnv%P_{=Kf;*}m`Fp~IoGq@w z4AKIcjV=Ij0ZDKzY|OP)W2y3x{sU0fJpcdz literal 0 HcmV?d00001 diff --git a/assets-cg/enemies/slime_idle_down.aseprite b/assets-cg/enemies/slime_idle_right.aseprite similarity index 62% rename from assets-cg/enemies/slime_idle_down.aseprite rename to assets-cg/enemies/slime_idle_right.aseprite index 36e19012a3ca00c20b358c2776a57d3bfdf24d50..e1fa33c41525cc5615a67588764d3627f0aad3e8 100644 GIT binary patch delta 68 zcmX@Xv6`J}HS&WH(k^SH5M|4t@~geF5~!Y4fpPLC zrlQcJK=!YXOkf*8M%jVo7#LU>IFZceXW#~#eSiUIb_~OOxtg>Ii})k$Eq}Qg{yiim UIbjVy!|q8F3d*4-TQe5`0N1NEN&o-= diff --git a/assets-cg/enemies/slime_idle_right.png b/assets-cg/enemies/slime_idle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..705b4b8ddaae1d81a2482397beb498ea4e35d138 GIT binary patch literal 355 zcmV-p0i6DcP)Px$9Z5t%R9J;$U>F6XU=)mkQ7{UIFkmD`(Sns;|6yz{4h04V1_p*O|7k?&r8OYv zhy^RX{;z-V0z*7n!-8s_pd^6sDk|@G`hWD!69!==9=MpifEvTY54RW?7%2Ay%;C5K zh=GByN0>;p6y|t&0X0&!qJZ*lr~h;I-NA4?%-p3nPB1LJae`sh#;pI?^uqv7-(d@V zY!=x_2$38Mgv>@Z|KW#Qcw?G{6pN7oEGCQuB*-;_Xz=aF1DtXMlhE6HU+~JqG95Vp zpV<#T+=2%ZK0AoY1Gp@Dd+!V0&>_}rd>$cW2T`REHt^>^8-u;77(-|2KC((7d}hPU zXJB9;Xa_;d%e$R$mICBDo*1*KWydHO1*2e)0{|ywfd+3}g&P0>002ovPDHLkV1k3O Bj@JMH literal 0 HcmV?d00001 diff --git a/assets-cg/font_rogue.png b/assets-cg/font_rogue.png new file mode 100644 index 0000000000000000000000000000000000000000..0b499997b9a30d11845dd9edc1f0f9512319376b GIT binary patch literal 17959 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 imovement.y = 0; e->movement.vx = 0; e->movement.vy = 0; - e->movement.facing = DOWN; + e->movement.facing = LEFT; e->movement.dash = 0; - e->movement.dash_facing = DOWN; + e->movement.dash_facing = LEFT; e->movement_params = &data->movement_params; - entity_set_anim(e, data->anim_idle); + entity_set_anim(e, data->anim_idle[0]); e->hitbox = data->hitbox; e->sprite = data->sprite; diff --git a/src/enemies.h b/src/enemies.h index 733b638..e3131d7 100644 --- a/src/enemies.h +++ b/src/enemies.h @@ -28,7 +28,7 @@ typedef struct { /* Sprite hitbox (interacts with attacks and effect areas) */ frect_t sprite; /* Idle animation, death animation */ - anim_frame_t *anim_idle, *anim_death; + anim_frame_t *anim_idle[2], *anim_death[2]; /* Movement parameters */ entity_movement_params_t movement_params; /* Statistics model */ diff --git a/src/entities.c b/src/entities.c index ba97266..92940d1 100644 --- a/src/entities.c +++ b/src/entities.c @@ -148,7 +148,8 @@ int entity_damage(entity_t *e, int base_damage) else e->HP -= damage; if(e->HP == 0 && e->identity > 0) { - entity_set_anim(e, enemies[e->identity]->anim_death); + entity_set_anim(e, + enemies[e->identity]->anim_death[e->movement.facing == RIGHT]); } return damage; diff --git a/src/game.c b/src/game.c index b78df5a..0ba557d 100644 --- a/src/game.c +++ b/src/game.c @@ -36,6 +36,8 @@ bool game_load(game_t *g, level_t *level) g->effect_area_count = 0; g->particles = NULL; g->particle_count = 0; + + g->wave = 1; return true; } diff --git a/src/game.h b/src/game.h index ee374b1..70a954b 100644 --- a/src/game.h +++ b/src/game.h @@ -35,6 +35,8 @@ typedef struct game { int particle_count; /* Field of movement to reach the player (used by most enemy AIs) */ pfg_all2one_t paths_to_player; + /* Current wave */ + int wave; } game_t; diff --git a/src/main.c b/src/main.c index d0aadc8..e2faf2c 100644 --- a/src/main.c +++ b/src/main.c @@ -70,7 +70,7 @@ int main(void) .propulsion = fix(12), .dash_speed = fix(55), .dash_duration = fix(1) / 32, - .dash_cooldown = fix(1) / 2, + .dash_cooldown = fix(1), }; for(int i = 0; i < 10; i++) { @@ -132,11 +132,11 @@ int main(void) dclear(C_BLACK); render_game(&game, debug.show_hitboxes); - if(game.time_victory != 0) dprint(1, 1, C_WHITE, "Victory in %.1f s!", +/* if(game.time_victory != 0) dprint(1, 1, C_WHITE, "Victory in %.1f s!", f2double(game.time_victory)); else if(game.time_defeat != 0) dprint(1, 1, C_WHITE, "Defeat! :("); else dprint(1, 1, C_WHITE, "HP:%d ATK:%d DEF:%d", - player->HP, player->ATK, player->DEF); + player->HP, player->ATK, player->DEF); */ /* Developer/tweaking menu */ if(debug.show_vars) { @@ -386,7 +386,15 @@ int main(void) } entity_movement_t next = entity_move(e, direction, dt); + if(direction.x > 0) next.facing = RIGHT; + else if(direction.x < 0) next.facing = LEFT; + else if(e->movement.x < player->movement.x) next.facing = RIGHT; + else next.facing = LEFT; + bool set_anim = (e->movement.facing != next.facing); + game_try_move_entity(&game, e, &next); + if(set_anim) entity_set_anim(e, + enemies[e->identity]->anim_idle[e->movement.facing == RIGHT]); if(in_range && !e->current_attack) { /* Attack */ diff --git a/src/render.c b/src/render.c index 495c9a7..7dde6c6 100644 --- a/src/render.c +++ b/src/render.c @@ -197,6 +197,23 @@ void render_game(game_t const *g, bool show_hitboxes) particle_render(center.x, center.y, p); } + + extern font_t font_rogue; + font_t const *old_font = dfont(&font_rogue); + + /* Render wave progress bar */ + int enemies_left = 0; + for(int i = 0; i < g->entity_count; i++) + enemies_left += (g->entities[i]->identity != 0); + + if(enemies_left > 0) + dprint_opt(DWIDTH / 2, 2, C_WHITE, C_NONE, DTEXT_CENTER, DTEXT_TOP, + "Wave %d: %d enemies left", g->wave, enemies_left); + else + dprint_opt(DWIDTH / 2, 2, C_WHITE, C_NONE, DTEXT_CENTER, DTEXT_TOP, + "Wave %d: Victory!", g->wave); + + dfont(old_font); } void render_pfg_all2one(pfg_all2one_t const *paths, camera_t const *c)