From 2d9c826839a67673bd18f8e80534d5af83503c97 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Wed, 13 May 2020 18:19:11 +0200 Subject: [PATCH] Semi solids --- include/collide.h | 3 ++- src/collide.c | 9 +++++---- src/main.c | 10 ++++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/include/collide.h b/include/collide.h index 688df39..1eafab2 100644 --- a/include/collide.h +++ b/include/collide.h @@ -1,5 +1,6 @@ char collide(int x, int y, char level[], char tile); char collide_spike(int x, int y, char level[]); -char collide_solid(int x, int y, char level[], char polarity, int rvspd); +char collide_solid(int x, int y, char level[], char polarity, + char test_semi_solid); char collide_point(int x, int y, char level[], char tile); char collide_and_erase(int x, int y, char level[], char tile); diff --git a/src/collide.c b/src/collide.c index 8202ba9..e25039d 100644 --- a/src/collide.c +++ b/src/collide.c @@ -27,15 +27,16 @@ char collide_point(int x, int y, char level[], char tile) return (level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile); } -char collide_solid(int x, int y, char level[], char polarity, int rvspd) +char collide_solid(int x, int y, char level[], char polarity, + char test_semi_solid) { char collided; if (polarity) collided = collide(x, y, level, 'b'); else collided = collide(x, y, level, 'r'); - if (!collided && rvspd > 0) + if (!collided && test_semi_solid && ((y + PLAYER_H) % 16) <= 5) { - collided = (collide_point(x, y + PLAYER_H, level, 's') || - collide_point(x + PLAYER_W, y + PLAYER_H, level, 's')); + collided = (collide_point(x, y + PLAYER_H, level, '/') || + collide_point(x + PLAYER_W, y + PLAYER_H, level, '/')); } return (collided || collide(x, y, level, '0') || diff --git a/src/main.c b/src/main.c index d308c41..3c19c76 100644 --- a/src/main.c +++ b/src/main.c @@ -110,14 +110,15 @@ int main(void) trunc_hspd = hspd * direction; if (1) //glue was here { - if (!collide_solid(player_x + trunc_hspd, player_y, level, polarity, vspd)) + if (!collide_solid(player_x + trunc_hspd, player_y, level, polarity, 0)) { player_x += trunc_hspd; } else { int sign_hspd = sgn(trunc_hspd); - while (!collide_solid(player_x + sign_hspd, player_y, level, polarity, vspd)) + while (!collide_solid(player_x + sign_hspd, player_y, level, polarity, + 0)) { player_x += sign_hspd; } @@ -126,7 +127,7 @@ int main(void) } } //ground detection - if (vspd >= 0 && collide_solid(player_x, player_y + 1, level, polarity, vspd)) + if (vspd >= 0 && collide_solid(player_x, player_y + 1, level, polarity, 1)) { on_ground = 6; vspd = 0; @@ -181,7 +182,8 @@ int main(void) } if (trunc_vspd) { - if (!collide_solid(player_x, player_y + trunc_vspd, level, polarity, vspd)) + if (!collide_solid(player_x, player_y + trunc_vspd, level, polarity, + trunc_vspd > 0)) { player_y += trunc_vspd; }