From 542c8474e6aa335ad7c505401dfe31ad0026859b Mon Sep 17 00:00:00 2001 From: Tituya Date: Thu, 13 Aug 2020 20:34:26 +0200 Subject: [PATCH] correction clip collision --- AST3.g3a | Bin 158980 -> 159028 bytes src/collide.c | 8 ++++---- src/main.c | 14 +++++++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/AST3.g3a b/AST3.g3a index 648ae6e7bbf3b6542c527fc2b7923a5348f63c07..dbae8c1b4a660a837b91a52056575149ef0bdd62 100644 GIT binary patch delta 4275 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 RxsAB`KzS+mF}G;fe*w_UJ#hd4 diff --git a/src/collide.c b/src/collide.c index 055f303..9ff31a6 100644 --- a/src/collide.c +++ b/src/collide.c @@ -5,10 +5,10 @@ char collide(int x, int y, char level[], char gravity, char block) //detect if player is in a block { - if(((level[(int)(x/16) + (int)((y/16) * 25)] == block || - level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y/16) * 25)] == block) && gravity) || - ((level[(int)(x/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block || - level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block) && !gravity)) return 1; + if((level[(int)(x/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block || + level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block || + level[(int)(x/16) + (int)((y/16) * 25)] == block || + level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y/16) * 25)] == block)) return 1; return 0; } diff --git a/src/main.c b/src/main.c index e934541..046e38e 100644 --- a/src/main.c +++ b/src/main.c @@ -93,6 +93,7 @@ void game(int *id_level, char mode) } pollevent(); + //Right collision if(keydown(KEY_RIGHT)) { if(!collide_solid(player_x+PLAYER_SPEED, player_y, level, gravity)) player_x+=PLAYER_SPEED; @@ -100,19 +101,22 @@ void game(int *id_level, char mode) if(player_x>=388) player_x=-4; } + //Left collision else if(keydown(KEY_LEFT)) { if(!collide_solid(player_x-PLAYER_SPEED, player_y, level, gravity)) player_x-=PLAYER_SPEED; else if(!collide_solid(player_x-1, player_y, level, gravity)) player_x-=1; if(player_x<-9) player_x=384; } - if(keydown(KEY_SHIFT) && !check && (collide_solid(player_x, player_y-1, level, gravity) || collide_solid(player_x, player_y+1, level, gravity))) + //Action key + if(keydown(KEY_SHIFT) && !check && ((collide_solid(player_x, player_y-1, level, gravity) && gravity) || (collide_solid(player_x, player_y+1, level, gravity) && !gravity))) { if(!gravity) gravity=1; else gravity=0; check=1; } else if(!keydown(KEY_SHIFT) && check) check=0; + //Gravity if(!gravity) { if(!collide_solid(player_x, player_y+vert_spd+1, level, gravity)) @@ -155,6 +159,7 @@ void game(int *id_level, char mode) } else vspd = 1; } + //Collide with red block if(collide_dead(player_x, player_y, level)) { vspd = 1; @@ -166,6 +171,7 @@ void game(int *id_level, char mode) blackout = 0; framelevel = 0; } + //Collide with the end if(collide_end(player_x, player_y, level, gravity)) { if(!mode) *id_level+=1; @@ -259,7 +265,7 @@ void game(int *id_level, char mode) else gravity=0; } - if(collide(player_x, player_y+vert_spd+2, level, gravity, 'B') && vspd>=5.0) //Damaged block + if(collide(player_x, player_y+vert_spd+2, level, gravity, 'B') && vspd>=5.0) //Damaged block { if(level[((player_x)/16)+((player_y+25)/16)*25]=='B') level[((player_x)/16)+((player_y+25)/16)*25]='0'; if(level[((player_x+17)/16)+((player_y+25)/16)*25]=='B' && collide_point(player_x+15, player_y+22, level, 'B')) level[((player_x+17)/16)+((player_y+25)/16)*25]='0'; @@ -278,6 +284,7 @@ void game(int *id_level, char mode) if(player_y>=212) player_y=-4; if(player_y<-6) player_y=212; + //Menu if(keydown_any(KEY_EXIT, KEY_MENU, 0)) { char menu_loop = 1; @@ -318,6 +325,7 @@ void game(int *id_level, char mode) } } timer_stop(timer); + //when a level is quit if(mode) { if(game_loop) @@ -342,7 +350,7 @@ int main(void) { char mode = 0; int valeur = start_menu(); - if(!valeur) //normal game + if(!valeur) //normal game (level selection) { int id_level = 1; if(!speed_menu(&id_level))