From 14caa99616439931cf155ca378ebde17ec8a7a6a Mon Sep 17 00:00:00 2001 From: Milang Date: Fri, 3 Apr 2020 14:43:45 +0200 Subject: [PATCH] updated coyote time code (cleaning some code to add functionnalities later) --- SuperCbr.g1a | Bin 64176 -> 68068 bytes assets-fx/bin/lvl_1_4.png | Bin 0 -> 4098 bytes include/base.h | 4 +- include/bonus.h | 2 +- include/box.h | 4 +- include/constants.h | 6 --- levelconverter/1_4.png | Bin 0 -> 868 bytes src/base.c | 2 +- src/bonus.c | 104 ++++++++++++++++++++------------------ src/box.c | 24 ++++----- src/bullet.c | 11 ++-- src/level.c | 6 +++ src/mario.c | 47 +++++++++-------- 13 files changed, 107 insertions(+), 103 deletions(-) create mode 100644 assets-fx/bin/lvl_1_4.png create mode 100644 levelconverter/1_4.png diff --git a/SuperCbr.g1a b/SuperCbr.g1a index b617e6dab439ecdc09ed8786984ba999b156a593..fcab2bef6ecb4d5e55536337d16e56947ca750ca 100644 GIT binary patch delta 6000 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 delta 5117 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 diff --git a/assets-fx/bin/lvl_1_4.png b/assets-fx/bin/lvl_1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbbe1b89740fabecb7e3fffac8744ac73e0b88e GIT binary patch literal 4098 zcmeH}U5>*b41~)f6=~6Kl^gZ`r>cQ6nGl*{vsE9uJR}bGH{&Ga=X!PSl!rGC=YER- zZ9T;g!dxO7U;Vl6#e9;V@lWhI^(%p;|Li@(|0GyO@ek#IwlJVM3X#6^I{_3BL?P0Z zZv{|55QRvCZv;?4P%kWeFEcjxXZ+gm8V$4n|CRD_fU6}vzUD^u;8Stw!RAl=h;Oag z_@jlIeZKdnug&vUPT@IMD_XwJkM29Xs)ZNuqpjzrvKrQsWSKhy@v4mB?$V0%&R{=AB7qIh1 zV1myAGkg+w3y+m#^#A8^1x)u3^qa1K_{MN9(A$6-I|%vx -//extern bool dark_theme_enable; -//extern bool is_in_water; - #endif // CONSTANTS_H diff --git a/levelconverter/1_4.png b/levelconverter/1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..12d1668e469dd90faa4d30800931a952a2d7f4f6 GIT binary patch literal 868 zcmV-q1DpJbP)0004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ>7x6g6$yUkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HIN3n$%ovd`>)S(glehxvqHp#<}FOz%yfJHZw;YBNj^?taLCdn;P*Xaa`4O$`^7T ztDLtuYtq2l^-JVZ$W;L& z$2>NmL3aJ%fAG6ot2i<4C54kf_lx6v3q6AUIUQXd8y0004VNkl*NDfrQLZ16D{RBFUKXGZZe-SSkcA`Mc*;hkE zE^l1g6eo%@OUv>Z^jctR*_wpB_e9k9{k9TXvqUQ-q~5QxhRj%k_l5w{yte|7?EL`1 ztgmmb%=>8&A8Yge!4gXFzVjb*=fHIu6=unpST&9Qn~>k~=ye1zo3QUEi2&qU9hd!i ztFSdxxw%63ndmd$Zes^Z{gipy9RL6T0000000000000000000000000z&-&S(XC3T z?SHMEeHRe}PXiz=U#@m+rpOl=7^zTfS^`_()#Ca<%*971fZYbMb|+Xl2NKN8(Xm4b z*$|KRS@^DNQp96JKYAiHRX+&rAO`+gdWNp9ngFgEl2rNz^fqaeatp_qGHLl`yaVs& u*NVKKX7%l+4ujr!E^_o+zB{O@&qBXPs%&;haH4Yn0000 -#include -#include +#include +#include +#include +#include static bonus_t bonus ={BONUS_NONE, {0,0,TILE_W,TILE_H,0,0,0,1}, 0}; void bonusSet(bonus_id t, int x, int y) { - bonus.type=t; - if (mario.p.h==M_BIG && t==BONUS_CHAMPI) - bonus.type=BONUS_FLEUR; - bonus.b.x=x; - bonus.b.y=y; - bonus.b.vx=0; - bonus.b.vy=0; - bonus.p1=0; + // champignon ou fleur + if (mario.p.h == M_BIG && t == BONUS_CHAMPI) bonus.type = BONUS_FLEUR; + else bonus.type=t; + + // coordonnees spawn + bonus.b.x = x; bonus.b.y = y; + bonus.b.vx = bonus.b.vy = bonus.p1=0; } +#include // bonus en cas de prise + void bonusMove() //+collision { - if (bonus.type==BONUS_NONE) - return; + if (bonus.type == BONUS_NONE) return; - if (bonus.type==BONUS_STAR) - { - boxJump(&bonus.b,4); - } + // animation de l'objet boxMove(&bonus.b); - if (bonus.type==BONUS_CHAMPI || bonus.type==BONUS_1UP || bonus.type==BONUS_STAR) - { + switch (bonus.type) + { + case BONUS_STAR: + // bounce + boxJump(&bonus.b, 4, true); + + // fall through + case BONUS_CHAMPI: + case BONUS_1UP: + // bounce against walls if (bonus.b.vx==0) { - if (bonus.p1==0) - { - bonus.b.vx=2; - bonus.p1=1; - } - else - { - bonus.p1*=-1; - bonus.b.vx=2*bonus.p1; - } + if (bonus.p1==0) bonus.p1=1; + else bonus.p1*=-1; + + bonus.b.vx=2*bonus.p1; } if (bonus.b.y<0) bonusSet(BONUS_NONE,0,0); } - int collide=boxContact(&mario.p, &bonus.b); - if (collide && bonus.type!=BONUS_NONE) + if (bonus.type!=BONUS_NONE && boxContact(&mario.p, &bonus.b)) { switch (bonus.type) { @@ -78,17 +69,30 @@ void bonusMove() //+collision } } +#include +#include + void bonusDraw() { - //bonusMove(); - if (bonus.type==BONUS_NONE) - return; - if (bonus.type==BONUS_CHAMPI) - tileDraw(bonus.b.x-cameraX(), bonus.b.y-cameraY(), &champi, 0,0); - if (bonus.type==BONUS_FLEUR) - tileDraw(bonus.b.x-cameraX(), bonus.b.y-cameraY(), &fleur, 0,0); - if (bonus.type==BONUS_1UP) - tileDraw(bonus.b.x-cameraX(), bonus.b.y-cameraY(), &life_1up, 0,0); - if (bonus.type==BONUS_STAR) - tileDraw(bonus.b.x-cameraX(), bonus.b.y-cameraY(), &mario_starman, 0,0); + if (bonus.type==BONUS_NONE) return; + tileset_t const * t=0; + switch (bonus.type) + { + case BONUS_CHAMPI: + t=&champi; + break; + + case BONUS_FLEUR: + t=&fleur; + break; + + case BONUS_1UP: + t=&life_1up; + break; + + case BONUS_STAR: + t=&mario_starman; + break; + } + if (t) tileDraw(bonus.b.x-cameraX(), bonus.b.y-cameraY(), t, 0,0); } diff --git a/src/box.c b/src/box.c index c57871d..8ebf7a8 100755 --- a/src/box.c +++ b/src/box.c @@ -151,23 +151,21 @@ void boxMove(box_t * b) move_y(b); } -void boxJump(box_t * b, int height) +void boxJump(box_t * b, int height, bool floor_needed) { - int sgn_vy=-1*sgn(height); + if (!floor_needed) + { + b->vy=height; + return; + } + + const int sgn_vy=-1*sgn(height); if (sgn_vy) { - int sol=0, eau=0; - for (int j=0; jw; j++) + for (int j = 0; j < b->w; j++) if (worldGetCellCategory( b->x + j, b->y + sgn_vy) == CTG_SOIL) { - int typetemp=worldGetCellCategory(b->x+j ,b->y+sgn_vy); - if (typetemp==CTG_SOIL) - sol++; - if (typetemp==CTG_WATER) - eau++; + b->vy=height; + return; } - if (sol) - b->vy=height; - else if (eau) - b->vy+=height/2; } } diff --git a/src/bullet.c b/src/bullet.c index bab3cc5..69804c7 100644 --- a/src/bullet.c +++ b/src/bullet.c @@ -24,12 +24,13 @@ void bulletThrow() bullets[i].type=1; bullets[i].b.x=mario.p.x; bullets[i].b.y=mario.p.y+8; - if (mario.last_vx_sgn==0) - bullets[i].b.vx=-9; //speed = 9 - else - bullets[i].b.vx=9; + + if (mario.last_vx_sgn==0) bullets[i].b.vx=-9; //speed = 9 + else bullets[i].b.vx=9; + bullets[i].b.vy=0; bullets[i].p1=mario.last_vx_sgn; + return; } } @@ -44,7 +45,7 @@ void bulletsMove() { for (int i=0; i<2; i++) if (bullets[i].type) // bullet active { - boxJump(&bullets[i].b,4); + boxJump( &bullets[i].b, 4, true); boxMove(&bullets[i].b); if (bullets[i].b.vx==0) bullets[i].type=0; // delete a bullet if it is stopped diff --git a/src/level.c b/src/level.c index bbcdb01..59a93ce 100644 --- a/src/level.c +++ b/src/level.c @@ -391,6 +391,12 @@ void setLevel(int w, int l) extern packed_level_t bin_lvl_1_3; unpackLevel(&bin_lvl_1_3); } + + if (w+1==1 && l+1==4) // 1-2 + { + extern packed_level_t bin_lvl_1_4; + unpackLevel(&bin_lvl_1_4); + } } void getLevelID(int w, int l, char * str) diff --git a/src/mario.c b/src/mario.c index e378d55..1f0c2c0 100755 --- a/src/mario.c +++ b/src/mario.c @@ -53,13 +53,12 @@ void marioDraw() } } -static int jump_buffering=0; -static int coyote_time=5; +#define COYOTE_INTERVAL 3 +static int jump_input=0; void marioResetJump() { // disables jump buffering & coyote time until the next time mario hits the ground - jump_buffering=0; - coyote_time=5; + jump_input = 0; } int global_quit=0; @@ -76,31 +75,31 @@ void marioMove() if (mario.bullets==1 && MKB_getKeyState(MK_RUN)==2) bulletThrow(); { // Jump (with coyote time & jump buffering) - if (MKB_getKeyState(MK_JUMP)==2 || jump_buffering) //|| keys[MK_JUMP2]==2) - { - if (mario.p.vx*sgn(mario.p.vx)>=6) boxJump(&mario.p, 9); - else boxJump(&mario.p, 8); + bool jump=0; // will he jump ? - if (mario.p.vy<=0 && MKB_getKeyState(MK_JUMP)==2 && coyote_time<4) // n'a pas sauté alors que la touche était enfoncée et coyote time =4 frames = 0.2 sec - { - if (mario.p.vx*sgn(mario.p.vx)>=6) mario.p.vy=9; - else mario.p.vy=8; - } - // n'a pas sauté alors que la touche était enfoncée - else if (mario.p.vy<=0 && MKB_getKeyState(MK_JUMP)==2) jump_buffering=5; // Jump buffering during 5-1 frames = 0.2 sec + // coyote time + for (int i = 0; i < mario.p.w; i++) if (worldGetCellCategory(mario.p.x + i, mario.p.y - 1)==CTG_SOIL) + { + if (jump_input>0) jump=1; + else jump_input=-COYOTE_INTERVAL; + break; } - if (jump_buffering) jump_buffering--; - - for (int i=0; i=6) boxJump(&mario.p, 9, 0); + else boxJump(&mario.p, 8, 0); } - coyote_time++; if (mario.p.vy>=2 && MKB_getKeyState(MK_JUMP)==0) mario.p.vy-=2; // Custom jump height }