Created the jump item level, added elevator tile & solid collision.

This commit is contained in:
KikooDX 2020-02-13 10:12:04 +01:00
parent 734f0867cd
commit 2caf479d42
7 changed files with 37 additions and 20 deletions

BIN
assets-cg/img/elevator.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

View File

@ -2,23 +2,24 @@
-- 0 solid
-- - placeholder tile
-- v spike
-- ^ elevator
levels = {[[
----------------------------
-00000000000000000000000000-
-0........................0-
-0........................0-
-0........................0-
-0........................0-
-0........................0-
-0........................0-
-0........................0-
-0........................00
-0.........................-
-0.........................-
-0.........................-
-0.......................000
-0.......................00-
-00000000000000000000000000-
-00......................00-
-00..00000000000000..00^.00-
-00..000000000000v...00^.00-
-00..000000000000..0000^.00-
-00.00000000000v...0000^.00-
-00..0000000000..000000^.00-
-00..00000000v...000000^.000
-00..00000000..00000000^...-
-000.000000v...00000000^...-
-000.........0000000000^...-
-000....j....000000000000000
-00000000000000000000000000-
-00000000000000000000000000-
----------------------------
]],

Binary file not shown.

View File

@ -13,3 +13,8 @@ char collide(int x, int y, char level[], char tile)
(level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES/2)/8) * LEVEL_WIDTH] == tile)) return 1;
return 0;
}
char collide_solid(int x, int y, char level[])
{
return (collide(x, y, level, '0') || collide(x, y, level, '^'));
}

View File

@ -1 +1,2 @@
char collide(int x, int y, char level[], char tile);
char collide_solid(int x, int y, char level[]);

View File

@ -24,6 +24,7 @@ void draw_level(char level[])
dclear(BG_COLOR);
extern image_t img_ground; //ground texture, 16x16
extern image_t img_spike; //spike texture, 16x16
extern image_t img_elevator; //elevator texture, 16x16
unsigned int i = 0;
unsigned int x = 0;
unsigned int y = 0;
@ -37,6 +38,9 @@ void draw_level(char level[])
case 'v':
dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike);
break;
case '^':
dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_elevator);
break;
}
x += 8;
if (x == 8*LEVEL_WIDTH)

View File

@ -64,12 +64,12 @@ int main(void)
hspd = 0;
if (keydown(KEY_LEFT)) hspd -= WALK_SPD;
if (keydown(KEY_RIGHT)) hspd += WALK_SPD;
if (!collide(player_x + hspd, player_y, level, '0'))
if (!collide_solid(player_x + hspd, player_y, level))
{
player_x += hspd;
}
//ground detection
if (collide(player_x, player_y + 1, level, '0')) on_ground = 6;
if (collide_solid(player_x, player_y + 1, level)) on_ground = 6;
else
{
if (vspd > MIN_VSPD) vspd += GRAV;
@ -93,14 +93,14 @@ int main(void)
//vertical collision
{
int trunc_vspd = vspd; //truncate vspd
if (!collide(player_x, player_y + trunc_vspd, level, '0'))
if (!collide_solid(player_x, player_y + trunc_vspd, level))
{
player_y += trunc_vspd;
}
else
{
int sign_vspd = sgn(trunc_vspd);
while (!collide(player_x, player_y + sign_vspd, level, '0'))
while (!collide_solid(player_x, player_y + sign_vspd, level))
{
player_y += sign_vspd;
}
@ -113,11 +113,17 @@ int main(void)
player_x = start_x;
player_y = start_y;
}
//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 <= 8)
if (player_x <= 11)
{
level_id -= 1;
player_x = 201;
player_x = 207;
set_start_pos(&start_x, &start_y, player_x, player_y);
set_level(level_id, level);
draw_level(level);
@ -126,7 +132,7 @@ int main(void)
else if (player_x >= 208)
{
level_id += 1;
player_x = 9;
player_x = 12;
set_start_pos(&start_x, &start_y, player_x, player_y);
set_level(level_id, level);
draw_level(level);