Semi solids
This commit is contained in:
parent
9e54400031
commit
2d9c826839
|
@ -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);
|
||||
|
|
|
@ -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') ||
|
||||
|
|
10
src/main.c
10
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue