From 2d39739cf49c73998f64f7802a24b5a0bca5b989 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Thu, 13 Feb 2020 09:12:34 +0100 Subject: [PATCH] Improved levels.lua, implemented screen transition system --- levels.lua | 64 +++++++++++++++++++++++++++++++++++--------------- platform.g3a | Bin 50716 -> 51156 bytes src/collide.c | 4 ++-- src/draw.c | 15 +++++------- src/draw.h | 2 +- src/levels.c | 7 ++++-- src/levels.h | 2 +- src/main.c | 56 +++++++++++++++++++++++-------------------- src/player.c | 24 +++++++++++++++++++ src/player.h | 2 ++ 10 files changed, 117 insertions(+), 59 deletions(-) create mode 100644 src/player.c create mode 100644 src/player.h diff --git a/levels.lua b/levels.lua index 553ca6b..3fd4003 100644 --- a/levels.lua +++ b/levels.lua @@ -1,20 +1,46 @@ +-- . air +-- 0 solid +-- - placeholder tile +-- v spike + levels = {[[ -00000000000000000000000000 -00000000000000000000000000 -00......................00 -00......................00 -00......................00 -00.........v............00 -00.........00...........00 -00.........00...........00 -00................v.....00 -00...............0v.....00 -00......................00 -00........v00...........00 -00.s.....vv00...........00 -00000000000000000000000000 -00000000000000000000000000 -]] +---------------------------- +-00000000000000000000000000- +-0........................0- +-0........................0- +-0........................0- +-0........................0- +-0........................0- +-0........................0- +-0........................0- +-0........................00 +-0.........................- +-0.........................- +-0.........................- +-0........................00 +-0........................0- +-00000000000000000000000000- +---------------------------- +]], +[[ +---------------------------- +-00000000000000000000000000- +-00000000000000000000000000- +-000000000000000000000000000 +-00000000000...............- +-0000000000................- +-0000000000....0000000000000 +-0000000000.....00000000000- +-00000000..........00000000- +000000.............00000000- +-..........-.00000000000000- +-..........0000000000000000- +-.......0000000000000000000- +000000000000000000000000000- +-00000000000000000000000000- +-00000000000000000000000000- +---------------------------- +]], } to_write = "" @@ -22,14 +48,14 @@ to_write = "" --remove all "\n" from level strings for i, v in ipairs(levels) do v = string.gsub(v, "\n", "") - to_write = to_write.." case "..(i-1)..":\n memcpy(level, \""..v.."\", "..#v..");\n break;" + to_write = to_write.." case "..(i-1)..":\n memcpy(level, \""..v.."\", "..#v..");\n break;\n" end --finish and write to_write = [[#include "levels.h" #include -void set_level(unsigned char level_id, char *level) { +void set_level(int level_id, char *level) { switch (level_id) { -]]..to_write.."\n }\n}\n" +]]..to_write.." }\n}\n" io.write(to_write) diff --git a/platform.g3a b/platform.g3a index bbfa2ee6b65a54b20310e86a103442c453cb3344..7def09a217987f279be5cb9bd0aef2c986ee0396 100644 GIT binary patch delta 2865 zcmcH*ZA@F&_1tFzCXXaG2FC#s6GJ0Z0=^_rIUP%EOrw+-Fa!uo_(6#QL((ZBz)(kI z){qQ_`RZjfr7dD5=}^@M)CW<1&?y?}N+mSe3ZdzQDp>ha2NMK}G6{v9=T|O)e}=ywo~^GNqp!fWb+%}fkgfe0H@mY- z!$L{0489s|&7bl;5=)QL1R;Z5*vayVpD?)VtpaDxqC$DVhGsQDb8OS$UI*bwyQkrj za^TZnOX2 zm(2bN5slt@gGu&`k4DC~3_}FmQqcQwt9t>mYdNaQO z&JO*z>h}-4>dLRJi)qx>(FVUq$}v^KxP2(znvnN82CG&i_BC_HuB(c9X!u9^!8cbg zu3lIzT`gG^!#wgC^X;8W7$@T}0sa^?Q4Hu@Uta-w5?h#J&9{Ur8s+xWb)?=Gc<^uc zdn9+uP0>hkkDRjJe}O+5d;7Wrdws$_Ng@M*pMYf5#Ciiv5YfnRV~QBs#r&o07r-!+ zu5bPNyQ1UTNm971Q&(tPhjc-cDQUbe*i&F%#y)A!txSVEe+n{wED*{_d%sR);&u8$ znLF?N@|A#Z&dq?+aM;98!Nao_d}cn$SSnSYUXCy}bA{@zA@KKPe-HKu-I3yMGhZaQ zGfkL^C(|rGGuoQWyiS#|6s|bhVdkeQOWwsgIY+01RgrH`83$)+(Q;vTrS^5+el1*4 z4-R32Q$ZwN^X^$ExXoip_8}8r_|O#G;O92khsI3bn8f`>*_&$jar+QT_>ykVD@Oxn zsgBdB&@HRfn!Ro_mKxQWPm)v%*r^3_vAbj_aa^bJ1{&JXX=IkEzjD32&m|>;sZZ-C- z9IG`>z`Ooz;;kS%c?zxOP`D0MQ3cd*4QMD1K&Tz}JwU^73jMl(s>6V4wFpMMH`PFY z?zk^rH=6k1_}A}=s{?uWQTHZm~0ChpzH6XChFaAb|CCplMy+7X(ec z1vC{0FBKC`3rBc>6O6pHVFbMJX`=|}Eo~72bXs!(y>x0!W{S24N=5AJVWV$<7or>V$Y#MUn}&8G3SmML z>jv4#weNRQps_UweFzh5u=XorWwqC%iB;&k&Jiwbob}&0wkyshom?=ghh=^K+jj`3 zsbg(*dJ)~LD<(!3UjH*<6!PlNa(d-GmnO)LjqgK@|ii z=qpAx;+o;YdRTvBnHVjq>4b0m2SDS;h4LmpLXuf^^Pjl=Yb>$lNyz>+bmT@D?Z;zA zC9fjTge-QlwN!kS_P1Jyk5=?6ti7|J1oBNl4dhbpjjgb6GHNPO&jJ?Bq^#l;#|j{HR5|LYeiJuo{Vt+ z{S$=ao0#ImA%7E4Q43QX{Vr9`ZoJ}>cw#E)}0-)tMuV>aPt54TBoebUKs*@?{bS;`L6 zBG6aEQKgTyJ-?m%EYnw%ng^Nb&JE7AC=B2Et6V(so5C4V#TJEgDk}hfYiYK4ws^V* z$}-5_Gt?F-?e{+LVt_iAMl*=7jB%iQ#m_nFX2(nT$YY!a@gwbUY4%(KdUy@!5xXR_ zg-KY0bD)Vr-@zuDCHbWLR=hF*1==M8-9HCZ*Cp~|UbL8MAVd}uL)qm4HLDqr`^3`! z|Bh~t7yDei7wzaaJGq#rnEbI9RTuL=)z3+uBos*}UXJfmGMIMdX7}-rW(1W=^Uv_LVXvC*pTI6r6?KF-gvP~Nz TVEev2!0o)nOke(uD;oVbP*_Xs delta 2728 zcma(Se@v6x_1v#eT8peeDHV_w=yOceUZHHLsI8zOTKQE}=6DM~3Kmf&2z@W6NqIv_ z4XxjTA z_ndRj?|XZ;Fx5M z?#p>Z-qHZ1SfLgb%R2$ed_a+;D{Vm4V?ZOjf#w$j-5CZ{Zj?YVBH@*qDtprptjd2r zvnsRG{G^FYv#*=_!h3-h+W7M3PL52nnU-cQrGPJQ-APCS>vIiz%$24dXH8LR{qZi& zvygr4bo?}!Vp?na+6Zd1n`n0o5-OkaEprt1wgrdy^7)8nGli`26)sq5RY)n+QK^mKcV z`wd=~Kfy~oBkpM?G}(iWcC#(J!iG*iR^&`|ahrq_iaF?fB06de9t|D|HUtj`>w}`p zdl3`Lp~u;SRnM#2n@LJ)^*}Q>^e`ipbbufR;aOZ<0J;n7SkUdT84J3?tL%cTC+wcg zlHrI2RV*k`m8!77JHw`lF$PpqtmvZx&q#js)M6)05m15B)G>vr%z)_&OzHX)Fx`48 zmy$VmXS=R?zB#gO%`|EIpip0^!3MD1B8kew_3S>QgK#eP*pp_-WOAljeT8=P`D{qMCug0V{s(&r6>*q?No( z(RFdt(0>nkR};DhzkEB?OzDd@GrI!8O&R5kL|vTc!qVV3GsJb3t_%V-J3<=2!x z+Y$W)+wp|_P3Pnr+jDyLDWN#qUB(@f&WqA#bMOQN^{ngd+5Ytg1sSv^!YLevQJ{)k zpb>*WlUjf#&fvZR>AT3oOQpk$6x)mVJYFb|8|c=#8{$QzTl2U7_1EIMfCn5mR9T?~ zberWgIr!brUkM4=s20pkJq5p7yWRc$DTTyF{_uE1+R?0PzGl4P;ZWky0jyQbG<3&G zt@1}sLrKulE+}eQ)8a(Ln)?bI2(42#)Knik^b5U~48kYk{Su?x+P(dEQb7FJi5)~P zJ_q^5Oyl04ii3<#2PQy$S^%F`hVkdAecEuu(U@#xI`g>``U6=O$3C&5cgZB3uiQA;26lOWRFmYdgcKZ2V+fA|Yqlt4}gE zjuy`cWVcBt1UPGkq!)J*sAe=EtKBQe^3y-qGa+8<7%7S5bXNAuZxRf-0og1FvPaNE zL?KK`VnZ&owLe^W4X6pDGf{*}mV5FqWQ>KK${=GrJ;f1jbpUdo;Kg}~L-nM) zd|St-go{@&jW<<9Io?BLg!Oy3kP&{;dyq?w&hcqA4y-(OL4*0`{Ts0lF&>XbZ+QYM z@BEjXVyS*S!fd|B-0E~@_BV^}uK0J!vy*^kSMV?V5ro`i3upew>D_F!>v@9SjfMn- zyTjOLR0=5~zRPZ(JuE)$=5u)@{JdzFcYm5pVj`n}rrgAoDS{bj>H-^N-@av=MUlwn zuXJA^T2VdK`{u}7S$R(pw;I{Y)|N#;?Kmj*bpGb~GfT%MPmg=8bvfV@Y_|W7L7xjS%B);pnSE| zkbKH~pYI9p7A0)*^WCC)`sKA;b_FZDTqE)M(aZZexgBe}P2hD`xMkY#Wgo}cPqG_> zyH{9`0o~jWbUS65tM6@{S4-uhbVn|`akYc99^(tXx)UaLT*n_Euh=pEXVGH-_}@?M z1!8k?Ag{3!vg!aWJR(gpSfv&1R5G0x1En#yxPQx{%ojz?my32AS%t*3A zhlI7mcTtRXaBjbX2Ng;M=6W` zI$lO4>_JR7EG^d(A>#KW?k~hXAqwiUhBorlb$&nb6`CS#)_Z=P&opQY|`QJ2G zys3v8)O_*C0%4USVZ814D6^4K1g5ME@P2Lf3(!HWj4??4}h+nTV_z> Zx)3e$mlo1&^wwrB%E(^b`UjW1<-g| -void set_level(unsigned char level_id, char *level) { +void set_level(int level_id, char *level) { switch (level_id) { case 0: - memcpy(level, "000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000.........v............0000.........00...........0000.........00...........0000................v.....0000...............0v.....0000......................0000........v00...........0000.s.....vv00...........000000000000000000000000000000000000000000000000000000", 390); + memcpy(level, "-----------------------------00000000000000000000000000--0........................0--0........................0--0........................0--0........................0--0........................0--0........................0--0........................0--0........................00-0.........................--0.........................--0.........................--0........................00-0........................0--00000000000000000000000000-----------------------------", 476); + break; + case 1: + memcpy(level, "-----------------------------00000000000000000000000000--00000000000000000000000000--000000000000000000000000000-00000000000...............--0000000000................--0000000000....0000000000000-0000000000.....00000000000--00000000..........00000000-000000.............00000000--..........-.00000000000000--..........0000000000000000--.......0000000000000000000-000000000000000000000000000--00000000000000000000000000--00000000000000000000000000-----------------------------", 476); break; } } diff --git a/src/levels.h b/src/levels.h index 9beff74..04d8536 100644 --- a/src/levels.h +++ b/src/levels.h @@ -1 +1 @@ -void set_level(unsigned char level_id, char level[]); +void set_level(int level_id, char level[]); diff --git a/src/main.c b/src/main.c index 2a6ddcb..22b47d9 100644 --- a/src/main.c +++ b/src/main.c @@ -4,11 +4,13 @@ #include "draw.h" #include "collide.h" #include "levels.h" +#include "player.h" #define WALK_SPD 1 #define MIN_VSPD -8.0 #define JUMP_SPD -3.4 #define GRAV 0.2 +#define UG_CAN_JUMP upgrades[0] void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold); //test if jump pressed int sgn(int number); //return the sign of input double @@ -23,8 +25,13 @@ int callback(volatile void *arg) int main(void) { volatile int has_ticked = 1; //fps cap - char level[390]; - unsigned char level_id = 0; + char level[477]; + int level_id = 1; + //start upgrades (mostly bools) + char upgrades[] = { + 0 //can jump + }; + //end upgrades char jump_pressed = 0; //avoid holding jump char jump_buffer = 0; //jump buffer, last 3 frames unsigned int jump_hold = 0; //number of consecutive frames jump has been held @@ -33,12 +40,11 @@ int main(void) int 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 start_x = 18*8 + 1; + int start_y = 9*8 + 2; int old_x, old_y; - dclear(0); //black set_level(level_id, level); - draw_level(level, &start_x, &start_y); + draw_level(level); player_x = start_x; player_y = start_y; old_x = player_x + 1; //offset to draw it on first cycle @@ -60,7 +66,7 @@ int main(void) if (keydown(KEY_RIGHT)) hspd += WALK_SPD; if (!collide(player_x + hspd, player_y, level, '0')) { - player_x += hspd; + player_x += hspd; } //ground detection if (collide(player_x, player_y + 1, level, '0')) on_ground = 6; @@ -71,7 +77,7 @@ int main(void) if (on_ground) on_ground--; } //vertical movement - jump_test(&jump_pressed, &jump_buffer, &jump_hold); + if (UG_CAN_JUMP) jump_test(&jump_pressed, &jump_buffer, &jump_hold); //if jump is pressed and on ground if (jump_buffer && on_ground) { vspd = JUMP_SPD; @@ -106,29 +112,29 @@ int main(void) { player_x = start_x; player_y = start_y; + } + //borders collision + else if (player_x <= 2) + { + level_id--; + player_x = 229; + set_start_pos(&start_x, &start_y, player_x, player_y); + set_level(level_id, level); + draw_level(level); + } + else if (player_x >= 222) + { + level_id++; + player_x = 9; + set_start_pos(&start_x, &start_y, player_x, player_y); + set_level(level_id, level); + draw_level(level); } //exit if (keydown(KEY_EXIT)) return 0; } } -void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold) -{ - if (keydown(KEY_SHIFT)) - { - if (!*jump_pressed) - { - *jump_pressed = 1; - *jump_buffer = 3; - } - } - else { - *jump_hold = 0; - *jump_pressed = 0; - } - if (*jump_buffer) *jump_buffer -= 1; -} - int sgn(int number) { if (number < 0) return -1; diff --git a/src/player.c b/src/player.c new file mode 100644 index 0000000..a6e5987 --- /dev/null +++ b/src/player.c @@ -0,0 +1,24 @@ +#include + +void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold) +{ + if (keydown(KEY_SHIFT)) + { + if (!*jump_pressed) + { + *jump_pressed = 1; + *jump_buffer = 3; + } + } + else { + *jump_hold = 0; + *jump_pressed = 0; + } + if (*jump_buffer) *jump_buffer -= 1; +} + +void set_start_pos(int *start_x, int *start_y, int x, int y) +{ + *start_x = x; + *start_y = y; +} diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..8163e0b --- /dev/null +++ b/src/player.h @@ -0,0 +1,2 @@ +void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold); +void set_start_pos(int *start_x, int *start_y, int x, int y);