From 2caf479d424dc381945fb21cf49894747873652f Mon Sep 17 00:00:00 2001 From: KikooDX Date: Thu, 13 Feb 2020 10:12:04 +0100 Subject: [PATCH] Created the jump item level, added elevator tile & solid collision. --- assets-cg/img/elevator.png | Bin 0 -> 134 bytes levels.lua | 27 ++++++++++++++------------- platform.g3a | Bin 51396 -> 52156 bytes src/collide.c | 5 +++++ src/collide.h | 1 + src/draw.c | 4 ++++ src/main.c | 20 +++++++++++++------- 7 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 assets-cg/img/elevator.png diff --git a/assets-cg/img/elevator.png b/assets-cg/img/elevator.png new file mode 100644 index 0000000000000000000000000000000000000000..2df08a3c4a22a1bab4f596b5c487cbca2041b523 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|96VhdLo9le zw`|w{dES9BVUf${2L=tS(~rzM+aB;kZ(mtS5#z42FCM+nTR4xq;HJ+BRc86#E8NU6 gAAO3&dG;_esMHF0_3eH56KEELr>mdKI;Vst0C3qY=>Px# literal 0 HcmV?d00001 diff --git a/levels.lua b/levels.lua index e37e30b..9551d5f 100644 --- a/levels.lua +++ b/levels.lua @@ -2,23 +2,24 @@ -- 0 solid -- - placeholder tile -- v spike +-- ^ elevator levels = {[[ ---------------------------- -00000000000000000000000000- --0........................0- --0........................0- --0........................0- --0........................0- --0........................0- --0........................0- --0........................0- --0........................00 --0.........................- --0.........................- --0.........................- --0.......................000 --0.......................00- +-00000000000000000000000000- +-00......................00- +-00..00000000000000..00^.00- +-00..000000000000v...00^.00- +-00..000000000000..0000^.00- +-00.00000000000v...0000^.00- +-00..0000000000..000000^.00- +-00..00000000v...000000^.000 +-00..00000000..00000000^...- +-000.000000v...00000000^...- +-000.........0000000000^...- +-000....j....000000000000000 +-00000000000000000000000000- -00000000000000000000000000- ---------------------------- ]], diff --git a/platform.g3a b/platform.g3a index f8983998e77251edbb4e1cab10fffd62d22d6bd6..ecdfe91e7ff6f4d0036aba2ba650e4d5f6847e3c 100644 GIT binary patch delta 3346 zcmc&14NR2h`T4%%=ioaK4>%CeJAOo>6kZD`R;G6dwh`w2fc8W~P)}5}4H%@_(VR|2 z79y zqxZPL9)L5*qnKc24nRdN5Zsc;Dj>7RfJA%(q_`i*Y73B%Gzr3@BpjKsxvXxMF6^r( zy0E-dJ6Fez)8E#01or?bdnB6owDR0z>Z;$vr)(0AG1gFDLUb6IG1rp_2Gg7Th-y_O8dO#277!n zX$`%l9Er~BvC!PoyiFxS{k{G2Wsc)~{?NPfhtT>^pZ?a=?x}#+TcIQJz6W_dw}MAP z`&@ZF++7%hFd(XE2Xk)qcqW0Y!K##I0?}`xhxet2vqCAbcyAQZfqj*c8;@+JbzJ*z z;#FE9{xa3<&#-UCWHtB@&CWlcgK$z1Q->yTklRsO7Cym_I@an=X z3pQt|lh+7prABUiYUfQ)HmBBcH(y_TPOY>=tCOqU+r&blfoSBWC&s6(urr!b8i<7! z3VS(?+|ExxXY4m2j)IYba<^7kN3ZQKuzqShbd!vSe?h*1_-J*iI@gg^BYN4BH&b6z zsQGHQI=O*t>nap1l$o~2mOWiHd)(6s<6MonJV~vbmO$rB0z-3~o{Ym+ppI6j-AS5g zz%aTR2sRYCE!>8~6-PR=CMx+TIH60l!Vw_y8wgq;bDM!AJ;VKT+&=&k>H;zcc`-P4 zb8wbI*8*AbY=})LSy8_7PiNRVi*(zNkmFrIR^ph3G)gWlI7Rgy%v?WF>CjEUh)zmO zJG<35E-Z_)zq#Go<@`~5-8Q$yy*KU5TRNd$)9As|=WB(%#JSYsMhbB*@$xfqpW(>W z3a)xI88HT@)~{^Tr@uWlb5tO)M(lO(>Pn8cE63qvvD84jVjPTz9O-qQa`(E)k@;WF z$0>+b%dCBGsAKw8$Fp8xk-QOOua18*F7)*;i*qEDyGN3~Ou%kUs%3o_)G;R#m&F|) zysvQ1+TJCF?G2jq2OVy4*At!aP~i*?;AyoHXz0Ugu6(SBVeG5w0SPA~2c92zcX6I4ETbgaU-!FW`U%@jir31hi2$jI=7mW6}^AF&mXB2^9%~ z!O8Uj)&=je$wG?`9^(~N;_$&lj_an6f4XR~!{Bzxu5+#6?Wu%>A4TYeMjHt`1mBMXh~s+v}|Y3U(0gthB(|( z!KWxovCNoTQ5#~+x7dIfYg&w+lre}2HQ2rlS=2+FUzt7Jrpqa<^Fn68DR);Lf z1hQne_~=+D$Boj-Og#16v`TKhEfVW+ac2cdzHFpZ`I{o?!D`rt)%7V*a_+93PQF4}AD}*s%0a zW2mJaCO#{Pc6OvDPXc~%^(l^E>+|d_)n&JWw8D0`HAtTh_#y+znxw9d)VY%=5rh(Z zzRP9h5;ebAB4Z6RpHJZzH`B)RTiGYk{D`{FPle~0rQysuOkG{oe2$rxcE8QgVE4!D zwNsV?$uR@j5QGh^oo-|sZM;wt+|4-j#)UOZJpSTBe#vfHbaAUh7ke(Q=R-E+1JUM- z@?Y})eblcycz#0~?f>|BZPue^q=ALdC`{CY20l(fFbCi?d~ z_bd8?@u^9QWJaKYkSj4H7ATq43urMtiHB%<1)^fSNGZdttQs$y_Fq{@TQAQO^DZw9 zwR#H|1yRes{lEOI-|N=XB>jFUq<_cv@qGBZHhgpmTRlxL3(RB&PCl6cW#;a`=3DaFO8v delta 2670 zcmb_eeN0=|6+iEp4}*d5X+9ES$IvVt1fPLvn&JkVxXs#TvCa5!lc*vKfi$oRB0{r@ z)^rd`z$76zBPorDHBv&isz!T+v5i)AK^v`*YIl^W5}Hg3flXu@n6YSz;+^MLAf1%` zvF)Ls&$;LG-gC}vO7VzJ3B|Pa#fM6j0+V;qF(!fz0@m@-ew`EM!-_ToI2pHCVq4d zYNS|L>Yd{@cmU2Kj}{FNJbR7A9?IvT` z?ImMaZdwOd%gwNxwLQV)Vp$PvC);_hh|SiW?LPDNAFfufR;`{`eR&lW$5+1yp9;^NF2AMQpL_T@Mctfhp+Wvd@KlKF@43_5 zG(UXSmaB^M?901a;Zw!TV?7@0H7d#lwcNVY4lfJySm8U?TaTwWk}}a} z9-IkxL)`i)eUZyhu8MPKRrLncE1tBxhWnno2ic|FC}t&d8maFE;bh z&}rOkhckfkWkzTmGH^0HW{gu^kjstA2>U9O55Vj?C#La*^_0o65c9BQK3|O1o zDYgD0U-8OR@*h*E$8jo|>qS+(t28ODbL;NJ^Pk-b^F&n&(uM-t;g0!CU+*WZ+*d~h z{&ScobYnxVA)2pGs8DahXLQOdQk6n`q-yL5%Kw#A0imp+fC~}l%{0pTUoX+n*a6t6 zVCYZ+IFvFf*xp8mGMH%0Bw&P-sozKm39!S0;SGh%t^*8?2k`p=%@+bU9uHgsJTO9- zB^kBAJV=9nmFO^mZm^k#+dM(=5=5JOg!^<=sg;&^f{9S~02LeR~Yfn^mgEWrH9pX3&@vRp*KCzMYpVf$D;%sFYYU^hrv=v^s z*cQ($Z7L3hnznc_g#x(=lY`V@G71<1K4D^qFP;!z zi{lsfa=~&jt`L1`D;FEl0;thbLy@2ZOsivtpZsM*tP@qDSkQNMb4t-XjRFT;Hgt=Z z&3r0}*Q2eg0ETVPbMI<+_OLW?*|V(qdIg_7%oeY|B9g=J-bg01m;u1-VZajN zO^si-$jP?!y$~EEYFKsO^P>51-?#bP2{zkzRFVt(ZS$UD@m8AZk(n? zP5g0(GLh~;&LW_$NYYs&B$}8Bm?*|hP+@Uk&;YkC26O;&@-qRdXw&K|tZZnHJ?jw< z?%auwP-Xoeb^F$H{BJ?oZ-$cXkKAz9e>lv4sYAqnFAy6a+QgcMQiR8bcZD*?#~PvK z<6*hongmE#doYa}`teufSpYN2)&-b;J;00dwdY};noMHDnhMy5 SpKjx$t}^eZU&`oT$bSK?O9-L> diff --git a/src/collide.c b/src/collide.c index 3dfae82..2357da2 100644 --- a/src/collide.c +++ b/src/collide.c @@ -13,3 +13,8 @@ char collide(int x, int y, char level[], char tile) (level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES/2)/8) * LEVEL_WIDTH] == tile)) return 1; return 0; } + +char collide_solid(int x, int y, char level[]) +{ + return (collide(x, y, level, '0') || collide(x, y, level, '^')); +} diff --git a/src/collide.h b/src/collide.h index 67642f4..f243bab 100644 --- a/src/collide.h +++ b/src/collide.h @@ -1 +1,2 @@ char collide(int x, int y, char level[], char tile); +char collide_solid(int x, int y, char level[]); diff --git a/src/draw.c b/src/draw.c index d20c294..34b7a08 100644 --- a/src/draw.c +++ b/src/draw.c @@ -24,6 +24,7 @@ void draw_level(char level[]) dclear(BG_COLOR); extern image_t img_ground; //ground texture, 16x16 extern image_t img_spike; //spike texture, 16x16 + extern image_t img_elevator; //elevator texture, 16x16 unsigned int i = 0; unsigned int x = 0; unsigned int y = 0; @@ -37,6 +38,9 @@ void draw_level(char level[]) case 'v': dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike); break; + case '^': + dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_elevator); + break; } x += 8; if (x == 8*LEVEL_WIDTH) diff --git a/src/main.c b/src/main.c index f8c8a65..1f7618a 100644 --- a/src/main.c +++ b/src/main.c @@ -64,12 +64,12 @@ int main(void) hspd = 0; if (keydown(KEY_LEFT)) hspd -= WALK_SPD; if (keydown(KEY_RIGHT)) hspd += WALK_SPD; - if (!collide(player_x + hspd, player_y, level, '0')) + if (!collide_solid(player_x + hspd, player_y, level)) { player_x += hspd; } //ground detection - if (collide(player_x, player_y + 1, level, '0')) on_ground = 6; + if (collide_solid(player_x, player_y + 1, level)) on_ground = 6; else { if (vspd > MIN_VSPD) vspd += GRAV; @@ -93,14 +93,14 @@ int main(void) //vertical collision { int trunc_vspd = vspd; //truncate vspd - if (!collide(player_x, player_y + trunc_vspd, level, '0')) + if (!collide_solid(player_x, player_y + trunc_vspd, level)) { player_y += trunc_vspd; } else { int sign_vspd = sgn(trunc_vspd); - while (!collide(player_x, player_y + sign_vspd, level, '0')) + while (!collide_solid(player_x, player_y + sign_vspd, level)) { player_y += sign_vspd; } @@ -113,11 +113,17 @@ int main(void) player_x = start_x; player_y = start_y; } + //elevator collision and raise + if (collide(player_x - 1, player_y, level, '^') || + collide(player_x + 1, player_y, level, '^')) + { + if (vspd < 8) vspd -= GRAV; + } //borders collision - if (player_x <= 8) + if (player_x <= 11) { level_id -= 1; - player_x = 201; + player_x = 207; set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level); @@ -126,7 +132,7 @@ int main(void) else if (player_x >= 208) { level_id += 1; - player_x = 9; + player_x = 12; set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level);