Early semi solid and alt solid.

This commit is contained in:
KikooDX 2020-05-13 13:07:01 +02:00
parent ff08f5b4ef
commit 78d222df40
15 changed files with 26 additions and 14 deletions

BIN
JTMM.g3a

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

View File

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 221 B

View File

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 221 B

View File

@ -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);

View File

@ -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, '~'));
}

View File

@ -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]);

View File

@ -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;
}

View File

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

View File

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 99 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

BIN
up-editor/img/solid_0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

BIN
up-editor/img/solid_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

View File

@ -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