Improved jump system & elevator.
This commit is contained in:
parent
85564f45d0
commit
88a548372d
BIN
platform.g3a
BIN
platform.g3a
Binary file not shown.
59
src/main.c
59
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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue