Created the jump item level, added elevator tile & solid collision.
This commit is contained in:
parent
734f0867cd
commit
2caf479d42
Binary file not shown.
After Width: | Height: | Size: 134 B |
27
levels.lua
27
levels.lua
|
@ -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-
|
||||
----------------------------
|
||||
]],
|
||||
|
|
BIN
platform.g3a
BIN
platform.g3a
Binary file not shown.
|
@ -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, '^'));
|
||||
}
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
char collide(int x, int y, char level[], char tile);
|
||||
char collide_solid(int x, int y, char level[]);
|
||||
|
|
|
@ -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)
|
||||
|
|
20
src/main.c
20
src/main.c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue