From b86f6605bfa624a24988ce5b76b6c8bc9c6198d8 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Sat, 16 May 2020 11:58:59 +0200 Subject: [PATCH] Clean animation code, could be slow AF --- JTMM.g3a | Bin 76560 -> 76436 bytes include/draw.h | 3 +++ src/draw.c | 55 ++++++++++++++++++++++++------------------------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/JTMM.g3a b/JTMM.g3a index ddf132e47a58bcb5af8a26ddbcaeaf8ec723aa3a..c543f4ebddcf8da0d05b81dce7530bde1b4ee653 100644 GIT binary patch delta 3408 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 delta 3516 zcmZt}3s79u_1w1~c3DU^8@d5RcG)Zh1j7w%!m4PNfDIiJS@}c~Q5Rf3%|}W2hz$ys zpo>5tUKC7dqysh4BEJ_0v{*^X#3YlMvPyTbLubG&4Yth4G!e1V&~tYo$=JR(=iPJ9 z@1Aq+dFS2N@)v2dOB(k<_ouzhj+2dFF5kkt2Os0#Ccs@+%{D^Fo%tX9PBca^8<9y! zwEBe2E#JC%i`leQe1aVCN3xGNyyie&RTogHyFnYk^`?M+5~EOuSrKmr`f=rqo|8e3 zbiWxW_Ds0U47q~?5UWD1N8YDL0Y0t-iYVQRpt}TgTME#9#Xz4j1C<-Su&%;8ZX1n# zO?>b0Iiiup0F`9}rE@r5M2|w*!4iX9f(}WuSxdUk?DD(21gAjokH2HOGt_?odG4#5Dco$#vCu1s}3Z` zUUWmO>l=vu`}3V?hOy$RtIpzsVy&R7wE64yTa0v)NJ ztum!WJilT z?=tAL$tqoV#!c6ztnZRlnG3yTs8JQ(+nLXHtL)d{$---2t9cwG*rhI;)fq}>5(0H$ z)1X_wQxU6ih9s$WDte#7y$sH0Nh*6y`qEUUNPLYQ>iexUv#nI$#QzbYr8AF&t zm`7N`41srvH3t!wveK6qf{j}2E7*U0Ujw=+6=(#mu+EP7S@GB_F0zNyeUa{O@v5RX zp5=T@+vfqcUw(&QCxK=dEmGdY(u#qmm*O04S_6P)A}BJEb`>FH`;IHiBwtuy1%f|#%IX<%XpS7VwPt0+9BavLj8sOFEHq%C`kz_%@cJf!0$9(%A8!!V}!VW;Fej7etTZDNVGYwqwEJ+770 z4iG*9mfaK)9M^8W;gnn=_29(5hBbm!5|5dVYZuS;tP!eY7}d%qdg`Ko+`CHO1kiqr zvOf|5GuFT8t$}{r&;coe0zr*nL_nE=L<9>0?%F^$f&*db7F6qT97Vv44xkNDk2H)z zjPdO3leDi7jTa%{*7dhLNiTSv?C*05X@*=4?=6X(Z63>kD zjiy~>hbbiGaX<}Ld1AXV2C0sNA#Sh24aVS#-iiY#1`M# zuQ5#6QuK;OAvcq%>wW+g4P+tjOfqZB3o9719>FGPkzvk#Ab^ zu)5nGS|QH0MayudNXkY}4X(3Q14za&ci!A?pse&{x{yNIrIV**R{n(-r43Ca+>OVD zNCe#EU=tQbHbM@zkL58k1D0sF4(NSDY^X6omczMhqTTZ)A6#P6-+Zq;>)q;@aV9-o zNY1i@r(eM5m_q(*3iCFhT9N3%-W8Ru(qbJ*Thc&HBkgir>U7anlB1lx|#LFeSFw; zd>3yU&^gvYSo^@YVSGLEJ+>C7^cv)8ru__ClGII0N2EMM+$Yx8ztbOgV#BcaII^#p zNe9xRRw#H#0m#OdhW>NEC4jM58?-VU6EN#rCs^e`u-t>rv!YW8csA-dWe_%IvKBE$ z9Q$oNk>NX%>J}B9p+v*GV}czMnuuTlYHnxdu7BJiTR4l8Mbqz25-k@uN3N*c<}vI0 z8^j;qOAtai@3zU?e9Syn+)%1$egF8X4exT^r9I2u{NRF?pTLH4xai#;iC2IBb0QeE zEa1ZnzDby5E{2XyeV8unILk~u1|hkcW%q>gp`ynSoLr5kCTZ1D>=BEq@J5vs8yc@Z znp`c8h%d_d_GNa6iJwS>6*Oh|v>*%>G4~%IQ?>xzg>5e@lbJueYbG{)c7t$c7Wc7; zInF;T!&$bC&7IHqAFTbtD(&WlH{@I;3)rzgHK|%~_W^=vL7krIM?+cSXg#SEFO5z~ zSl^{W?BIcypCngV@nt>hyZoRW56hs|v*ycsKkQ>ETo+%gCH4fl_gN}hyz_AWec_h_ z%lNDZqeiSpW0w~nit&z{@olDR#EY=Fcp0Is`zL{JUa{M^q8l^?G-w>x2--wNvsX?p z^^5=tT%%)!wusHDkK=6mN&uU`B14dh-(5)#WJ6c<%zQ0-aA_SOLhHRD#Ah%d5YfT^ ztS1Vg)jyEN5;jE8T#E*z?&G-w05g|k_9qd*TrGP&r(!uk7B$|lL z*QA0J|7Fyj9pC5&-TtV0MjAi_*<+9H%}5^14JY-&+VpK(w#JzNGIwV|vUO+cc0CCi z%+V8tjAfCZogtBgtfeAW5dwyTU};rH5$zuH63_=R-#@uHjXvW32^CY9SOL`HxJ{=I cT=n3bzIq{!X?$9OUy#=EDAMo48Tdo?U$y8hxc~qF diff --git a/include/draw.h b/include/draw.h index 19f85dc..1f6ce7b 100644 --- a/include/draw.h +++ b/include/draw.h @@ -1,3 +1,6 @@ +#include + +void draw_anim(int x, int y, image_t *image, int step); void draw_player(int x, int y); void draw_level(char level[], unsigned int step, char polarity, int *start_x, int *start_y, int tp_positions[]); diff --git a/src/draw.c b/src/draw.c index 2966a64..48e3502 100644 --- a/src/draw.c +++ b/src/draw.c @@ -7,7 +7,7 @@ #define DRAW_OFFSET_Y -24 #define DRAW_OFFSET_X -27 -extern image_t img_player; //player texture, 12x12 +extern image_t img_player; //player texture, 12x12 (NOT ANIMATED) extern image_t img_solid_0; //solid texture, 16x16 extern image_t img_solid_1; //solid texture, 16x16 extern image_t img_spike; //spike texture, 16x16 @@ -20,10 +20,15 @@ extern image_t img_red_dot; //off red bloc texture, 16x16 extern image_t img_exit; //exit texture, 16x16 extern image_t img_water; //water texture, 16x16 extern image_t img_semi_solid; //semi solid texture, 16x16 -//animated textures (elevator) extern image_t img_teleporter_0; //teleporter 0 texture, 16x16 extern image_t img_teleporter_1; //teleporter 1 texture, 16x16 -extern image_t img_elevator; +extern image_t img_elevator; //elevator texture, 16x16 + +void draw_anim(int x, int y, image_t *image, int step) +{ + dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, image, + ((step / 2) % (image->width / 16)) * 16, 0, 16, 16, DIMAGE_NONE); +} void draw_player(int x, int y) { @@ -33,9 +38,6 @@ void draw_player(int x, int y) void draw_level(char level[], unsigned int step, char polarity, int *start_x, int *start_y, int tp_positions[]) { - int const img_elevator_frame_count = img_elevator.width / 16; - int const img_teleporter_0_frame_count = img_teleporter_0.width / 16; - int const img_teleporter_1_frame_count = img_teleporter_1.width / 16; dclear(BG_COLOR); unsigned int i = 0; unsigned int x = 0; @@ -45,57 +47,54 @@ int *start_y, int tp_positions[]) switch (level[i]) { case '0': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0); + draw_anim(x, y, &img_solid_0, step); break; case '1': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_1); + draw_anim(x, y, &img_solid_1, step); break; case 'r': - if (!polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red); - else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red_dot); + if (!polarity) draw_anim(x, y, &img_red, step); + else draw_anim(x, y, &img_red_dot, step); break; case 'b': - if (polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue); - else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue_dot); + if (polarity) draw_anim(x, y, &img_blue, step); + else draw_anim(x, y, &img_blue_dot, step); break; case 'v': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike); + draw_anim(x, y, &img_spike, step); break; case '*': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_bouncer); + draw_anim(x, y, &img_bouncer, step); break; case '~': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0); - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice); + draw_anim(x, y, &img_solid_0, step); + draw_anim(x, y, &img_ice, step); break; case '/': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_semi_solid); + draw_anim(x, y, &img_semi_solid, step); break; case '^': - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_elevator, - ((step / 2) % img_elevator_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - break; + draw_anim(x, y, &img_elevator, step); + break; case 'S': erase_tile(x, y, level); *start_x = x + 2; *start_y = y + 4; break; case 'E': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_exit); + draw_anim(x, y, &img_exit, step); break; case 'w': //water - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_water); + draw_anim(x, y, &img_water, step); break; case 't': //teleporter 0 - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_0, - (step % img_teleporter_0_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - tp_positions[0] = x + 2; + draw_anim(x, y, &img_teleporter_0, step); + tp_positions[0] = x + 2; tp_positions[1] = y + 2; break; case 'T': //teleporter 1 - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_1, - (step % img_teleporter_1_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - tp_positions[2] = x + 2; + draw_anim(x, y, &img_teleporter_1, step); + tp_positions[2] = x + 2; tp_positions[3] = y + 2; break; }