From 6d29add2dadce367fab270237e7bbc8ee490725d Mon Sep 17 00:00:00 2001 From: Milang Date: Sun, 16 Feb 2020 12:51:27 +0100 Subject: [PATCH] new mario hit box => reduced width --- SuperCbr.g1a | Bin 64084 -> 64004 bytes include/box.h | 4 +-- src/bonus.c | 11 ++++---- src/box.c | 69 ++++++++++++++++++++++++++------------------------ src/ennemi.c | 20 +++++---------- src/mario.c | 4 +-- 6 files changed, 52 insertions(+), 56 deletions(-) diff --git a/SuperCbr.g1a b/SuperCbr.g1a index 8e78af9398b8c126578f9d23fde377a4175657e0..4fa9e3b6b4ff5cd2fbe1022d7d8d3eeaff935a88 100644 GIT binary patch delta 4514 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 delta 4636 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 diff --git a/include/box.h b/include/box.h index 70526d0..c628880 100755 --- a/include/box.h +++ b/include/box.h @@ -21,7 +21,7 @@ typedef struct } box_t; void box_move(box_t * b); - +int BoxContact(box_t const * b1, box_t const * b2); void box_jump(box_t * b, int height); -#endif \ No newline at end of file +#endif diff --git a/src/bonus.c b/src/bonus.c index b64d0f0..948c261 100644 --- a/src/bonus.c +++ b/src/bonus.c @@ -36,7 +36,7 @@ void bonus_move() //+collision box_move(&bonus.b); if (bonus.type==BONUS_CHAMPI || bonus.type==BONUS_1UP || bonus.type==BONUS_STAR) { - + if (bonus.b.vx==0) { if (bonus.p1==0) @@ -44,7 +44,7 @@ void bonus_move() //+collision bonus.b.vx=2; bonus.p1=1; } - else + else { bonus.p1*=-1; bonus.b.vx=2*bonus.p1; @@ -54,9 +54,8 @@ void bonus_move() //+collision bonus_set(BONUS_NONE,0,0); } - bool x_collide= (mario.p.x<=bonus.b.x && bonus.b.xx<=b->x && b->xx+t->w) || (t->x<=b->x+b->w-1 && b->x+b->wx+t->w); - int y_collide= (t->y<=b->y && b->yy+t->h) || (t->y<=b->y+b->h-1 && b->y+b->hy+t->h); - if (x_collide&&y_collide) - return 1; - } - } + for (int i=0; ib.x && e->b.x<=mario.p.x+mario.p.w-1) || (mario.p.x<=e->b.x+e->b.w-1 && e->b.x+e->b.w-1<=mario.p.x+mario.p.w-1); + bool y_collide= (mario.p.y<=e->b.y && e->b.y<=mario.p.y+mario.p.h-1) || (mario.p.y<=e->b.y+e->b.h-1 && e->b.y+e->b.h-1<=mario.p.y+mario.p.h-1);*/ + + + int x_collide= (b2->x >= b1->x && b2->x < b1->x+b1->w) || (b1->x >= b2->x && b1->x < b2->x + b2->w); + int y_collide= (b2->y >= b1->y && b2->y < b1->y+b1->h) || (b1->y >= b2->y && b1->y < b2->y + b2->h); + if (x_collide&&y_collide) return 1; return 0; } @@ -32,9 +35,9 @@ static void move_x(box_t * b) int coef=1;//1; if (world_get_ctg(b->x, b->y)==CTG_WATER || world_get_ctg(b->x+b->w-1, b->y)==CTG_WATER) - coef=2;//ralentir dans l'eau + coef=2;//ralentir dans l'eau if (frame_id%coef) - return; + return; if (sgn_vx) { @@ -44,9 +47,9 @@ static void move_x(box_t * b) { int typetemp; if (sgn_vx>0) - typetemp=world_get_ctg(b->x+b->w-1+i*sgn_vx,b->y+j); + typetemp=world_get_ctg(b->x+b->w-1+i*sgn_vx,b->y+j); else - typetemp=world_get_ctg(b->x+i*sgn_vx,b->y+j); + typetemp=world_get_ctg(b->x+i*sgn_vx,b->y+j); if (typetemp==CTG_SOIL) { b->x+=(i-1)*sgn_vx; @@ -66,12 +69,12 @@ static void move_y(box_t * b) { b->last_vy=b->vy; int sgn_vy=sgn(b->vy); - + int coef=1;//1; if (world_get_ctg(b->x, b->y)==CTG_WATER || world_get_ctg(b->x+b->w-1, b->y)==CTG_WATER) - coef=2;// 0.5 + coef=2;// 0.5 if (frame_id%coef) - return; + return; if (sgn_vy) { @@ -81,27 +84,27 @@ static void move_y(box_t * b) { int typetemp; if (sgn_vy>0) - typetemp=world_get_ctg(b->x+j ,b->y+b->h-1+i); + typetemp=world_get_ctg(b->x+j ,b->y+b->h-1+i); else - typetemp=world_get_ctg(b->x+j ,b->y-i); + typetemp=world_get_ctg(b->x+j ,b->y-i); if (typetemp==CTG_SOIL) { if (b->vy>0) { int old=b->x; if (world_get_ctg(b->x+2, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+3, b->y+b->h-1+i)==CTG_EMPTY) - b->x++; + b->x++; if (world_get_ctg(b->x+1, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+2, b->y+b->h-1+i)==CTG_EMPTY) - b->x++; + b->x++; if (world_get_ctg(b->x, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+1, b->y+b->h-1+i)==CTG_EMPTY) - b->x++; + b->x++; if (world_get_ctg(b->x+b->w-3, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+b->w-4, b->y+b->h-1+i)==CTG_EMPTY) - b->x--; + b->x--; if (world_get_ctg(b->x+b->w-2, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+b->w-3, b->y+b->h-1+i)==CTG_EMPTY) - b->x--; + b->x--; if (world_get_ctg(b->x+b->w-1, b->y+b->h-1+i)==CTG_SOIL && world_get_ctg(b->x+b->w-2, b->y+b->h-1+i)==CTG_EMPTY) - b->x--; + b->x--; if (old==b->x) { b->y+=(i-1)*sgn_vy; @@ -121,14 +124,14 @@ static void move_y(box_t * b) } b->y+=b->vy; } - //if (b->vy>=-6) + //if (b->vy>=-6) b->vy-=b->gravity; } void box_move(box_t * b) { - //velx + //velx move_x(b); move_y(b); } @@ -143,13 +146,13 @@ void box_jump(box_t * b, int height) { int typetemp=world_get_ctg(b->x+j ,b->y+sgn_vy); if (typetemp==CTG_SOIL) - sol++; + sol++; if (typetemp==CTG_WATER) - eau++; + eau++; } if (sol) - b->vy=height; + b->vy=height; else if (eau) - b->vy+=height/2; + b->vy+=height/2; } -} \ No newline at end of file +} diff --git a/src/ennemi.c b/src/ennemi.c index 3de369d..96866e1 100644 --- a/src/ennemi.c +++ b/src/ennemi.c @@ -75,11 +75,7 @@ void display_ennemi(ennemi_t * e) } -bool ennemi_check_collision(ennemi_t *e) -{ bool x_collide= (mario.p.x<=e->b.x && e->b.x<=mario.p.x+mario.p.w-1) || (mario.p.x<=e->b.x+e->b.w-1 && e->b.x+e->b.w-1<=mario.p.x+mario.p.w-1); - bool y_collide= (mario.p.y<=e->b.y && e->b.y<=mario.p.y+mario.p.h-1) || (mario.p.y<=e->b.y+e->b.h-1 && e->b.y+e->b.h-1<=mario.p.y+mario.p.h-1); - return (x_collide&&y_collide); -} +bool ennemi_check_collision(ennemi_t *e) { return (BoxContact(&e->b, &mario.p)); } void hurt_mario() { if (mario.size==M_SMALL && mario_immunity==0) @@ -114,14 +110,13 @@ void move_ennemi(ennemi_t *e) for (int i=0; idiscovered && t->type!=NONE) + if (t->type!=NONE) { - - bool x_collide= (t->b.x<=e->b.x+e->b.vx && e->b.x+e->b.vxb.x+t->b.w) || (t->b.x<=e->b.x+e->b.w-1+e->b.vx && e->b.x+e->b.w+e->b.vxb.x+t->b.w); - bool y_collide= (t->b.y<=e->b.y+e->b.vy && e->b.y+e->b.vyb.y+t->b.h) || (t->b.y<=e->b.y+e->b.h-1+e->b.vy && e->b.y+e->b.h+e->b.vyb.y+t->b.h); - if (x_collide&&y_collide && t->life!=DEAD) + e->b.x+=sgn(e->b.vx)*(abs(e->b.vx)+(time_id%2))/2; + const int contact=BoxContact(&e->b, &t->b); + e->b.x-=sgn(e->b.vx)*(abs(e->b.vx)+(time_id%2))/2; + if (contact && t->life!=DEAD) { if (e->type!=CARAPACE_VERTE && e->type!=CARAPACE_ROUGE) { @@ -141,7 +136,6 @@ void move_ennemi(ennemi_t *e) t->p1=0; score_add(200); } - } } } @@ -385,4 +379,4 @@ void init_ennemi(ennemi_t * table, int s) malloc_error(); ennemis_global_size=s; memcpy(ennemis_global, table, size); -} \ No newline at end of file +} diff --git a/src/mario.c b/src/mario.c index 9c011ea..f0cc121 100755 --- a/src/mario.c +++ b/src/mario.c @@ -14,7 +14,7 @@ int id_frame=0; pnj mario= { - {26,17,8,8,0,0,0,1}, + {26,17,6,8,0,0,0,1}, M_SMALL, M_RIGHT1, M_WALK, 0 @@ -52,7 +52,7 @@ void mario_draw() { if ( (mario_immunity==0 || (mario_immunity/7)%2==0) && (mario_star_mode/2)%2==0) { - const int mx=mario.p.x-camera_x(mario.p.x); + const int mx=mario.p.x-camera_x(mario.p.x)-1; const int my=mario.p.y-camera_y(mario.p.y); if (mario.size==M_SMALL) {