diff --git a/assets-cg/img/glue.png b/assets-cg/img/glue.png new file mode 100644 index 0000000..7490a8b Binary files /dev/null and b/assets-cg/img/glue.png differ diff --git a/assets-cg/img/ice.png b/assets-cg/img/ice.png index cfaf2e1..4910965 100644 Binary files a/assets-cg/img/ice.png and b/assets-cg/img/ice.png differ diff --git a/levels.lua b/levels.lua index 42389c6..c20eed3 100644 --- a/levels.lua +++ b/levels.lua @@ -4,6 +4,7 @@ -- v spike -- ^ elevator -- ~ ice +-- # glue -- j jump upgrade -- -- level id format : YYXX with YY and XX being the Y and X position on the map @@ -78,9 +79,9 @@ levels = {[5049] = [[ -00......................00- -00......................00- -00......................00- --00......................00- +-00...........000000000vv00- -00v.....................00- --0000000....000000000000000- +-0000000....000#######00000- -0000000....000000000000000- ---------------------------- ]], diff --git a/platform.g3a b/platform.g3a index 8beb18a..55be0df 100644 Binary files a/platform.g3a and b/platform.g3a differ diff --git a/src/collide.c b/src/collide.c index 99ccb95..056a14a 100644 --- a/src/collide.c +++ b/src/collide.c @@ -18,5 +18,6 @@ char collide_solid(int x, int y, char level[]) { return (collide(x, y, level, '0') || collide(x, y, level, '^') || - collide(x, y, level, '~')); + collide(x, y, level, '~') || + collide(x, y, level, '#')); } diff --git a/src/draw.c b/src/draw.c index 1423103..59d8128 100644 --- a/src/draw.c +++ b/src/draw.c @@ -25,7 +25,8 @@ void draw_level(char level[], char upgrades[]) extern image_t img_ground; //ground texture, 16x16 extern image_t img_spike; //spike texture, 16x16 extern image_t img_elevator; //elevator texture, 16x16 - extern image_t img_ice; //ice texture, 16x4 + extern image_t img_ice; //ice texture, 16x8 + extern image_t img_glue; //glue texture, 16x8 extern image_t img_jitem; //jump item texture, 16x16 unsigned int i = 0; unsigned int x = 0; @@ -47,6 +48,10 @@ void draw_level(char level[], char upgrades[]) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice); break; + case '#': + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_glue); + break; case 'j': if (!upgrades[0]) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_jitem); diff --git a/src/main.c b/src/main.c index bd8d2e1..7cb1a6d 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ #include "levels.h" #include "player.h" -#define MAX_HSPD 2.0 +#define MAX_HSPD 2.5 #define ACCELERATION 1 #define DECELERATION 0.5 #define MIN_VSPD -12.0 @@ -93,18 +93,21 @@ int main(void) if (hspd < 0) hspd = 0; } trunc_hspd = hspd * direction; - if (!collide_solid(player_x + trunc_hspd, player_y, level)) + if (!collide(player_x, player_y + 1, level, '#')) { - player_x += trunc_hspd; - } - else - { - int sign_hspd = sgn(trunc_hspd); - while (!collide_solid(player_x + sign_hspd, player_y, level)) + if (!collide_solid(player_x + trunc_hspd, player_y, level)) { - player_x += sign_hspd; + player_x += trunc_hspd; + } + else + { + int sign_hspd = sgn(trunc_hspd); + while (!collide_solid(player_x + sign_hspd, player_y, level)) + { + player_x += sign_hspd; + } + hspd = 0; } - hspd = 0; } } //ground detection