diff --git a/platform.g3a b/platform.g3a index 45d3e1d..b80a10f 100644 Binary files a/platform.g3a and b/platform.g3a differ diff --git a/src/main.c b/src/main.c index 2c479f3..873b66e 100644 --- a/src/main.c +++ b/src/main.c @@ -7,11 +7,15 @@ #include "player.h" #define WALK_SPD 1 -#define MIN_VSPD -8.0 -#define JUMP_SPD -3.4 +#define MIN_VSPD -6.0 +#define MAX_VSPD 6 +#define JUMP_SPD -3.2 #define GRAV 0.2 +#define JUMP_SCALE 12 +#define JUMP_REDUCTION -0.1 #define UG_CAN_JUMP upgrades[0] +void dupdate(); //gint function void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold); //test if jump pressed int sgn(int number); //return the sign of input double @@ -72,7 +76,7 @@ int main(void) if (vspd >= 0 && collide_solid(player_x, player_y + 1, level)) on_ground = 6; else { - if (vspd > MIN_VSPD) vspd += GRAV; + if (on_ground != 6 && vspd < MAX_VSPD) vspd += GRAV; if (on_ground) on_ground--; } //vertical movement @@ -81,30 +85,43 @@ int main(void) if (jump_buffer && on_ground) { vspd = JUMP_SPD; on_ground = 0; - jump_hold = 10; + jump_hold = JUMP_SCALE; } else if (jump_hold && keydown(KEY_SHIFT)) { jump_hold--; - vspd -= GRAV / 2; + vspd += JUMP_REDUCTION; } else jump_hold = 0; + //elevator collision and raise + if ((collide(player_x - 1, player_y, level, '^') || + collide(player_x + 1, player_y, level, '^')) && vspd > MIN_VSPD) + { + if (vspd > -1) + { + vspd -= GRAV; + } + vspd -= GRAV; + } //vertical collision { int trunc_vspd = vspd; //truncate vspd - if (!collide_solid(player_x, player_y + trunc_vspd, level)) - { - player_y += trunc_vspd; - } - else - { - int sign_vspd = sgn(trunc_vspd); - while (!collide_solid(player_x, player_y + sign_vspd, level)) - { - player_y += sign_vspd; - } - vspd = 0; - } + if (trunc_vspd) + { + if (!collide_solid(player_x, player_y + trunc_vspd, level)) + { + player_y += trunc_vspd; + } + else + { + int sign_vspd = sgn(trunc_vspd); + while (!collide_solid(player_x, player_y + sign_vspd, level)) + { + player_y += sign_vspd; + } + vspd = 0; + } + } } //spike collision and death if (collide(player_x, player_y, level, 'v')) @@ -113,12 +130,6 @@ int main(void) player_y = start_y; vspd = 0; } - //elevator collision and raise - if (collide(player_x - 1, player_y, level, '^') || - collide(player_x + 1, player_y, level, '^')) - { - if (vspd < 8) vspd -= GRAV; - } //borders collision if (player_x <= 11) {