Early semi solid and alt solid.
After Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 221 B |
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 221 B |
|
@ -1,5 +1,5 @@
|
|||
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);
|
||||
char collide_solid(int x, int y, char level[], char polarity, int rvspd);
|
||||
char collide_point(int x, int y, char level[], char tile);
|
||||
char collide_and_erase(int x, int y, char level[], char tile);
|
||||
|
|
|
@ -27,13 +27,19 @@ 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)
|
||||
char collide_solid(int x, int y, char level[], char polarity, int rvspd)
|
||||
{
|
||||
char collided;
|
||||
if (polarity) collided = collide(x, y, level, 'b');
|
||||
else collided = collide(x, y, level, 'r');
|
||||
return (collided ||
|
||||
if (!collided && rvspd > 0)
|
||||
{
|
||||
collided = (collide_point(x, y + PLAYER_H, level, 's') ||
|
||||
collide_point(x + PLAYER_W, y + PLAYER_H, level, 's'));
|
||||
}
|
||||
return (collided ||
|
||||
collide(x, y, level, '0') ||
|
||||
collide(x, y, level, '1') ||
|
||||
collide(x, y, level, '^') ||
|
||||
collide(x, y, level, '~'));
|
||||
}
|
||||
|
|
12
src/draw.c
|
@ -8,7 +8,8 @@
|
|||
#define DRAW_OFFSET_X -27
|
||||
|
||||
extern image_t img_player; //player texture, 16x12
|
||||
extern image_t img_ground; //ground texture, 16x16
|
||||
extern image_t img_solid_0; //solid texture, 16x16
|
||||
extern image_t img_solid_1; //solid texture, 16x16
|
||||
extern image_t img_spike; //spike texture, 16x16
|
||||
extern image_t img_bouncer; //bouncer texture, 16x16
|
||||
extern image_t img_ice; //ice texture, 16x8
|
||||
|
@ -46,8 +47,11 @@ int *start_y)
|
|||
switch (level[i])
|
||||
{
|
||||
case '0':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0);
|
||||
break;
|
||||
case '1':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_1);
|
||||
break;
|
||||
case 'r':
|
||||
if (!polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red);
|
||||
else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red_dot);
|
||||
|
@ -63,11 +67,11 @@ int *start_y)
|
|||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_bouncer);
|
||||
break;
|
||||
case '~':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0);
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice);
|
||||
break;
|
||||
case 's':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0);
|
||||
break;
|
||||
case '^':
|
||||
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, ani_elevator[(step/2)%16]);
|
||||
|
|
10
src/main.c
|
@ -110,14 +110,14 @@ int main(void)
|
|||
trunc_hspd = hspd * direction;
|
||||
if (1) //glue was here
|
||||
{
|
||||
if (!collide_solid(player_x + trunc_hspd, player_y, level, polarity))
|
||||
if (!collide_solid(player_x + trunc_hspd, player_y, level, polarity, vspd))
|
||||
{
|
||||
player_x += trunc_hspd;
|
||||
}
|
||||
else
|
||||
{
|
||||
int sign_hspd = sgn(trunc_hspd);
|
||||
while (!collide_solid(player_x + sign_hspd, player_y, level, polarity))
|
||||
while (!collide_solid(player_x + sign_hspd, player_y, level, polarity, vspd))
|
||||
{
|
||||
player_x += sign_hspd;
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ int main(void)
|
|||
}
|
||||
}
|
||||
//ground detection
|
||||
if (vspd >= 0 && collide_solid(player_x, player_y + 1, level, polarity))
|
||||
if (vspd >= 0 && collide_solid(player_x, player_y + 1, level, polarity, vspd))
|
||||
{
|
||||
on_ground = 6;
|
||||
vspd = 0;
|
||||
|
@ -181,14 +181,14 @@ int main(void)
|
|||
}
|
||||
if (trunc_vspd)
|
||||
{
|
||||
if (!collide_solid(player_x, player_y + trunc_vspd, level, polarity))
|
||||
if (!collide_solid(player_x, player_y + trunc_vspd, level, polarity, vspd))
|
||||
{
|
||||
player_y += trunc_vspd;
|
||||
}
|
||||
else
|
||||
{
|
||||
int sign_vspd = sgn(trunc_vspd);
|
||||
while (!collide_solid(player_x, player_y + sign_vspd, level, polarity))
|
||||
while (!collide_solid(player_x, player_y + sign_vspd, level, polarity, vspd))
|
||||
{
|
||||
player_y += sign_vspd;
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 221 B After Width: | Height: | Size: 221 B |
After Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 99 B |
After Width: | Height: | Size: 117 B |
After Width: | Height: | Size: 221 B |
After Width: | Height: | Size: 221 B |
|
@ -1,16 +1,18 @@
|
|||
local img_path = "img/"
|
||||
|
||||
tiles = {
|
||||
love.graphics.newImage(img_path.."ground.png"),
|
||||
love.graphics.newImage(img_path.."solid_0.png"),
|
||||
love.graphics.newImage(img_path.."solid_1.png"),
|
||||
love.graphics.newImage(img_path.."red_dot.png"),
|
||||
love.graphics.newImage(img_path.."blue_dot.png"),
|
||||
love.graphics.newImage(img_path.."spike.png"),
|
||||
love.graphics.newImage(img_path.."elevator1.png"),
|
||||
love.graphics.newImage(img_path.."water.png"),
|
||||
love.graphics.newImage(img_path.."bouncer.png"),
|
||||
love.graphics.newImage(img_path.."semi_solid.png"),
|
||||
love.graphics.newImage(img_path.."spawn.png"),
|
||||
love.graphics.newImage(img_path.."exit.png"),
|
||||
}
|
||||
tiles_char = { '0', 'r', 'b', 'v', '^', 'w', '*', 'S', 'E'}
|
||||
tiles_char = { '0', '1', 'r', 'b', 'v', '^', 'w', '*', 's', 'S', 'E' }
|
||||
|
||||
selected_tile = 1
|
||||
|
|