From 69687053672b81a87f6ca7536646e3a327b5c81f Mon Sep 17 00:00:00 2001 From: KikooDX Date: Wed, 12 Feb 2020 13:33:41 +0100 Subject: [PATCH] Spikes and variable jump height --- assets-cg/img/spike.png | Bin 0 -> 119 bytes levels.lua | 30 +++++++++++++++--------------- platform.g3a | Bin 50052 -> 50716 bytes src/draw.c | 6 +++++- src/levels.c | 2 +- src/main.c | 29 +++++++++++++++++++++++------ 6 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 assets-cg/img/spike.png diff --git a/assets-cg/img/spike.png b/assets-cg/img/spike.png new file mode 100644 index 0000000000000000000000000000000000000000..3b65ea44b21ff480e0ea77a9df9298cc0d06d90f GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|3_V>OLo9le z|D1pDdwwI+0hi7+HXsm_SR6OCSEaXidwt+>*2Qc+QU(@02{Iqy>IobZ zkD~iCo{(i4faFURf?`nzz&;01BG4idN2b_~x{Ln3K=Vv|QGEwTCYYz8o{P=liyHTE_6eZ7Q5b5|watL8`*61I zv#&w-MNPTxj&5A{bZ^`RYJWMQy0~e(Nmp3X)qdQmX}3C~+G$7NgYfb2^Z`ptnkl{5 zBy0G#Nt!WvhTGygDV>3iS-aof4M)94ytUpMZ?*TZ7i3l52Z7^3gHO{3N}rdt)RWk_ zvi_)gZt!tZ9BBiW5QKeU;U&;rm~c)PqfJp8WSH}Nep5sn3bIMiwN;s2Ys4tKRD0v} zvg&e;^pt{Go09B7Kvl!WkjaG(m?R*BAYB_;bbCPe8D{pyEa>jc1&BGFy|+VEHeWAq z-Y`X)f20mj2dbqmi#lE%p+`G+nFlK74YEe9yR>q?V&1B0jJDvuLHqu9Pr&uQ2MS-5 zj~yr71L|14Or268as9M(-d-2}u;?l1LiI8axDOieZGK+(tR}wT+gQ~ZZVLJyKu`s` zu%x>4Kj6R0H^?f-T=_nSdkyHet1S=T8mY&+IjS_WEJhugCsW62qy^8NT;a2_uzKR& zRUN-|qH^I^b7J+P(3znrx+`5)ix55?c}DRFLExxwRL=(rA05RVETwN zK?Pn{hNWdZm@nf{^L*>O8mW^c-|ZlM z_5$ytjZ>?>+&Bknr7PLef@jK(@@0}Nxl3c8rs`NUer(n1eQ`O%3!m)_nZDFgL{{{3?-YPAU%^<*UbP;*X@3@#SMRj|bNs>Bp-Hor10~u`*8i6cl(ZEiP#V zt6LZkd?>~8E2|`fb%(cKl9s&ySqkNdkmnHRdxv+krUjX&h{f zmO7LG4y6R6%~m*+{)j^`HF*NF*`fk`q@M4!$t3m>p#I?i3kyI^Grq40-7|-DI6@{u z70_HcUKV~0auog+c_oPT z;>GT{4OD5ep_5L8AvYNW%n`FR-Da81r#YF4A8lSoNGF^5FlqBh{=8dqmvn%eGbD+6 z5v@SON8FN%T$jX{@Xnrbi9X2^Dkc$=z>L5ADoT^-mP~_7@&vkxAcRR#tjT1VEss|Z z0o7r2I*L%jl3V{oM%g#5No17Qe8drMeKFIvWd)~T@IrS)pnCLu{#e^N!bM7%UwfQ@ z652l?!>qG?8yV(D+YfPZAsG&3xCL(>s}PR)X8!}R12LM1pto!n%jx)g0L82N$uP@w zJmuCWFs-v*aM$D96_6ecG`*PjI0Ff}&E`)3fm7Sqz?tV!Y8xKpLb!h&>x@c1Ma1{n zaA&pf;nkkaCjLFbxqR)p7!oQE1{!-CQ>F-MK;vGrUiS4eJ53M?Y`&-KJW&ejaqX{7 zmSs8Jd0dRZUpj6{2Goq5Vou<%_ncm|7hQ>NeJ+d6-%<*nTXUwMx-uG`{$>~9FQyH^>G0o~dMbO&XA z*WTC`T`LR_q&qX&(6u(saE#CR{GOjsaVdY0ykI5#&q784@RymIbA;kzLk_V5vi2a& zs}=WAMjr-fcPN!3K-U%{xI~%RCgQXr?1mwvs~pNmbeC#F@QAWJi-?uiaqO<(*%9&7 zEEjn(4L%GYMLQ!q^#lJ@DVakNx$A(vRX|Q!9w|0%z0WvMv$=7F0uS zs5lY5yHfA9nyCK938I89O9XFeD^;v3{P~>FO~-v!);A^pDG&aiH`Z`=1t?ww{r}I2 z#P5F=PyT-CiA4L`6nLTr?hs@12Cj?GhGv^v8>Xy2J*$;StcpnI#6*Ci`fCzqpWQwYRo% O!CH3Z)|V3eJMb?L#@Mz1 delta 2403 zcmai0eN0=|6+ibqFox%(<|D=d2aLli7c6`oOtfVru?tJWM~i`c&?TxMfs7=iD%3ER zklJfVN{R`jmr+U+L_UWq8qgj@Xv!wEw2*CRvo%ICDXU;L2|;Kop+ozFg`MXY6ZY4x z_47IReBASK&wKV|58wD9zvc73-}JXNb+!Cuk`wD#DG3wru0M6yRn((YCppl^4YUYm^Z{=@^6nXUS3Zgs z^~{i$JOFVh)so@9MS#NZfFes(cY&%ik%j=x8UdQ^1gc1up&XE@ss zgI5afT3J~J`lDr*Ss!PLz&f*?(n^tX4fJcnsz!o8SlE zn|Ayz{4z<~%1uL$8^SBT(Z!UDzMTE8QM+(p%)2KLV)sGZy*>6|S9{%VA+h?vf?jEf zD~mmukQljJ@Ym^;EnMNk$>=l0xAO_zJ9>0+-&mb4G14wrAL*5?eBnazX!;}F)_r5L zwwBn1Ivr~Ao`5%f(prAjCR8xnhSuAgTstsKAYOAAz| zt`!2+MKt~y!-k-id-&QMJO!_@{OsQoC9hzZ3{@g|Lk^T(xZoJGsC2Pj4c6^MPt_EB zvYt(y(zyD63gP`@a|+U6kB4(Wqf9`R6lho<(0D&$FYX;cb=fFG8ja(pRU(Wyr42y0 zmyAfmO*02~{{B;Gb)kL9h+2|uAFxNxt~A3eSxw3#r_{ndh5r6oC=463c>2H9#ftf- zUndIbF~}NW?G5`4I5_|%7=wB=03HpG=e_RsXhM;y$AJo+Om!ws5nu;I(;0zxVdkMR z04pm%bMcwO=alAP_Bohk&JBbYPq7s2;&&*tq*57jaiS^z(Rp+pzi% zQY|LOqL05%n!(4}Q)RoD?|{abe0;?lUOwCSy}U`@mRcSq7qO|6O?>cmTw#@KP2D#W~w*6qi3vAW_2mK$EOkF-2H`8mgG7eeR_= zppwL*@fTf06EMfS2)Mk|J?wasOGrZb>T#<&pbqSfqfN~I^kUFo4kd>Tgq-dAokn`6 zIc`X%YqJqYKHEh&;eDpOaxa_$m8>wwi7Q2%sh%0THxmcT?@q+;ssP{C9ZMWyZ}$#f z>iq0g181IPs%uB2*SlkoIj=26Scc^xv-p|w`ccj@%pP5TM6WZk6x(yqn`3 z^UU@|ZiH!}sK4!app0iDf_iz6xM7r`$@c^l0---t#GXd~7 zk2(gV+XZUYvqG}*0L`0__ZtJZj(n3xqrpaLv4V{@S?BP}H2pq~gC6-xk0uspZOc5+ z^u4k!Z(OFDWPI$jc=m?P)Zvt6n`D0gCHiFpO?U`2u}#vk>Y-@n9tuGyS;?IkJ}r$( zvamE{{tvH^ZP?WzEti%ik)U_d3vVQA7al0B;JIu3b&~WwS)E2-*aeMQTf*$Z~8A1&d3q~ diff --git a/src/draw.c b/src/draw.c index e047a03..1075be7 100644 --- a/src/draw.c +++ b/src/draw.c @@ -22,16 +22,20 @@ void draw_player(int old_x, int old_y, int x, int y) void draw_level(char level[], int *player_x, int *player_y) { extern image_t img_ground; //ground texture, 16x16 + extern image_t img_spike; //spike texture, 16x16 unsigned int i = 0; unsigned int x = 0; unsigned int y = 0; - while (i != LEVEL_WIDTH*14) + while (i != LEVEL_WIDTH*15) { switch (level[i]) { case '0': dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_ground); break; + case 'v': + dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike); + break; case 's': *player_x = x + 1; *player_y = y + 2; diff --git a/src/levels.c b/src/levels.c index 6878045..9ac8f56 100644 --- a/src/levels.c +++ b/src/levels.c @@ -4,7 +4,7 @@ void set_level(unsigned char level_id, char *level) { switch (level_id) { case 0: - memcpy(level, "...........................000000000000000000000000..0......................0..0......................0..0......................0..0......................0..0.........00...........0..0.........00...........0..0......................0..0...............0......0..0......................0..0.........00...........0..0.s.......00...........0..000000000000000000000000...........................", 390); + memcpy(level, "000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000.........v............0000.........00...........0000.........00...........0000................v.....0000...............0v.....0000......................0000........v00...........0000.s.....vv00...........000000000000000000000000000000000000000000000000000000", 390); break; } } diff --git a/src/main.c b/src/main.c index a8e87b2..e1df8ae 100644 --- a/src/main.c +++ b/src/main.c @@ -6,8 +6,8 @@ #include "levels.h" #define WALK_SPD 1 -#define MIN_VSPD -8 -#define JUMP_SPD -4 +#define MIN_VSPD -8.0 +#define JUMP_SPD -3.4 #define GRAV 0.2 void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold); //test if jump pressed @@ -23,7 +23,7 @@ int callback(volatile void *arg) int main(void) { volatile int has_ticked = 1; //fps cap - char level[14*25]; + char level[390]; unsigned char level_id = 0; char jump_pressed = 0; //avoid holding jump char jump_buffer = 0; //jump buffer, last 3 frames @@ -33,10 +33,14 @@ int main(void) char on_ground = 6; //remember if player is on solid int player_x = 0; int player_y = 0; + int start_x = 0; + int start_y = 0; int old_x, old_y; - dclear(0); //0 -> black + dclear(0); //black set_level(level_id, level); - draw_level(level, &player_x, &player_y); + draw_level(level, &start_x, &start_y); + player_x = start_x; + player_y = start_y; old_x = player_x + 1; //offset to draw it on first cycle old_y = player_y; //fps cap timer @@ -63,6 +67,7 @@ int main(void) else { if (vspd > MIN_VSPD) vspd += GRAV; + if (jump_hold) if (on_ground) on_ground--; } //vertical movement @@ -71,7 +76,14 @@ int main(void) if (jump_buffer && on_ground) { vspd = JUMP_SPD; on_ground = 0; + jump_hold = 10; } + else if (jump_hold && keydown(KEY_SHIFT)) + { + jump_hold--; + vspd -= GRAV / 2; + } + else jump_hold = 0; //vertical collision { int trunc_vspd = vspd; //truncate vspd @@ -89,6 +101,12 @@ int main(void) vspd = 0; } } + //spike collision and death + if (collide(player_x, player_y, level, 'v')) + { + player_x = start_x; + player_y = start_y; + } //exit if (keydown(KEY_EXIT)) return 0; } @@ -98,7 +116,6 @@ void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold) { if (keydown(KEY_SHIFT)) { - *jump_hold += 1; if (!*jump_pressed) { *jump_pressed = 1;