Spikes and variable jump height
This commit is contained in:
parent
7488170b9d
commit
6968705367
Binary file not shown.
After Width: | Height: | Size: 119 B |
30
levels.lua
30
levels.lua
|
@ -1,19 +1,19 @@
|
|||
levels = {[[
|
||||
..........................
|
||||
.000000000000000000000000.
|
||||
.0......................0.
|
||||
.0......................0.
|
||||
.0......................0.
|
||||
.0......................0.
|
||||
.0.........00...........0.
|
||||
.0.........00...........0.
|
||||
.0......................0.
|
||||
.0...............0......0.
|
||||
.0......................0.
|
||||
.0.........00...........0.
|
||||
.0.s.......00...........0.
|
||||
.000000000000000000000000.
|
||||
..........................
|
||||
00000000000000000000000000
|
||||
00000000000000000000000000
|
||||
00......................00
|
||||
00......................00
|
||||
00......................00
|
||||
00.........v............00
|
||||
00.........00...........00
|
||||
00.........00...........00
|
||||
00................v.....00
|
||||
00...............0v.....00
|
||||
00......................00
|
||||
00........v00...........00
|
||||
00.s.....vv00...........00
|
||||
00000000000000000000000000
|
||||
00000000000000000000000000
|
||||
]]
|
||||
}
|
||||
|
||||
|
|
BIN
platform.g3a
BIN
platform.g3a
Binary file not shown.
|
@ -22,16 +22,20 @@ void draw_player(int old_x, int old_y, int x, int y)
|
|||
void draw_level(char level[], int *player_x, int *player_y)
|
||||
{
|
||||
extern image_t img_ground; //ground texture, 16x16
|
||||
extern image_t img_spike; //spike texture, 16x16
|
||||
unsigned int i = 0;
|
||||
unsigned int x = 0;
|
||||
unsigned int y = 0;
|
||||
while (i != LEVEL_WIDTH*14)
|
||||
while (i != LEVEL_WIDTH*15)
|
||||
{
|
||||
switch (level[i])
|
||||
{
|
||||
case '0':
|
||||
dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_ground);
|
||||
break;
|
||||
case 'v':
|
||||
dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike);
|
||||
break;
|
||||
case 's':
|
||||
*player_x = x + 1;
|
||||
*player_y = y + 2;
|
||||
|
|
|
@ -4,7 +4,7 @@ void set_level(unsigned char level_id, char *level) {
|
|||
switch (level_id)
|
||||
{
|
||||
case 0:
|
||||
memcpy(level, "...........................000000000000000000000000..0......................0..0......................0..0......................0..0......................0..0.........00...........0..0.........00...........0..0......................0..0...............0......0..0......................0..0.........00...........0..0.s.......00...........0..000000000000000000000000...........................", 390);
|
||||
memcpy(level, "000000000000000000000000000000000000000000000000000000......................0000......................0000......................0000.........v............0000.........00...........0000.........00...........0000................v.....0000...............0v.....0000......................0000........v00...........0000.s.....vv00...........000000000000000000000000000000000000000000000000000000", 390);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
29
src/main.c
29
src/main.c
|
@ -6,8 +6,8 @@
|
|||
#include "levels.h"
|
||||
|
||||
#define WALK_SPD 1
|
||||
#define MIN_VSPD -8
|
||||
#define JUMP_SPD -4
|
||||
#define MIN_VSPD -8.0
|
||||
#define JUMP_SPD -3.4
|
||||
#define GRAV 0.2
|
||||
|
||||
void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold); //test if jump pressed
|
||||
|
@ -23,7 +23,7 @@ int callback(volatile void *arg)
|
|||
int main(void)
|
||||
{
|
||||
volatile int has_ticked = 1; //fps cap
|
||||
char level[14*25];
|
||||
char level[390];
|
||||
unsigned char level_id = 0;
|
||||
char jump_pressed = 0; //avoid holding jump
|
||||
char jump_buffer = 0; //jump buffer, last 3 frames
|
||||
|
@ -33,10 +33,14 @@ int main(void)
|
|||
char on_ground = 6; //remember if player is on solid
|
||||
int player_x = 0;
|
||||
int player_y = 0;
|
||||
int start_x = 0;
|
||||
int start_y = 0;
|
||||
int old_x, old_y;
|
||||
dclear(0); //0 -> black
|
||||
dclear(0); //black
|
||||
set_level(level_id, level);
|
||||
draw_level(level, &player_x, &player_y);
|
||||
draw_level(level, &start_x, &start_y);
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
old_x = player_x + 1; //offset to draw it on first cycle
|
||||
old_y = player_y;
|
||||
//fps cap timer
|
||||
|
@ -63,6 +67,7 @@ int main(void)
|
|||
else
|
||||
{
|
||||
if (vspd > MIN_VSPD) vspd += GRAV;
|
||||
if (jump_hold)
|
||||
if (on_ground) on_ground--;
|
||||
}
|
||||
//vertical movement
|
||||
|
@ -71,7 +76,14 @@ int main(void)
|
|||
if (jump_buffer && on_ground) {
|
||||
vspd = JUMP_SPD;
|
||||
on_ground = 0;
|
||||
jump_hold = 10;
|
||||
}
|
||||
else if (jump_hold && keydown(KEY_SHIFT))
|
||||
{
|
||||
jump_hold--;
|
||||
vspd -= GRAV / 2;
|
||||
}
|
||||
else jump_hold = 0;
|
||||
//vertical collision
|
||||
{
|
||||
int trunc_vspd = vspd; //truncate vspd
|
||||
|
@ -89,6 +101,12 @@ int main(void)
|
|||
vspd = 0;
|
||||
}
|
||||
}
|
||||
//spike collision and death
|
||||
if (collide(player_x, player_y, level, 'v'))
|
||||
{
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
}
|
||||
//exit
|
||||
if (keydown(KEY_EXIT)) return 0;
|
||||
}
|
||||
|
@ -98,7 +116,6 @@ void jump_test(char *jump_pressed, char *jump_buffer, unsigned int *jump_hold)
|
|||
{
|
||||
if (keydown(KEY_SHIFT))
|
||||
{
|
||||
*jump_hold += 1;
|
||||
if (!*jump_pressed)
|
||||
{
|
||||
*jump_pressed = 1;
|
||||
|
|
Loading…
Reference in New Issue