diff --git a/platform.g3a b/platform.g3a index 8cf8ee8..2dd2eae 100644 Binary files a/platform.g3a and b/platform.g3a differ diff --git a/src/collide.c b/src/collide.c index 1cffad3..c3c503b 100644 --- a/src/collide.c +++ b/src/collide.c @@ -1,16 +1,16 @@ -#define PLAYER_SIDES 5 +#define PLAYER_SIDES 11 #define LEVEL_WIDTH 28 char collide(int x, int y, char level[], char tile) { - if ((level[(int)(x/8) + (int)(y/8) * LEVEL_WIDTH] == tile) || - (level[(int)(x/8) + (int)((y+PLAYER_SIDES)/8) * LEVEL_WIDTH] == tile) || - (level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES)/8) * LEVEL_WIDTH] == tile) || - (level[(int)((x+PLAYER_SIDES)/8) + (int)(y/8) * LEVEL_WIDTH] == tile) /*|| - (level[(int)(x/8) + (int)((y+PLAYER_SIDES/2)/8) * LEVEL_WIDTH] == tile) || - (level[(int)((x+PLAYER_SIDES/2)/8) + (int)(y/8) * LEVEL_WIDTH] == tile) || - (level[(int)((x+PLAYER_SIDES/2)/8) + (int)((y+PLAYER_SIDES)/8) * LEVEL_WIDTH] == tile) || - (level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES/2)/8) * LEVEL_WIDTH] == tile)*/) return 1; + if ((level[(int)(x/16) + (int)(y/16) * LEVEL_WIDTH] == tile) || + (level[(int)(x/16) + (int)((y+PLAYER_SIDES)/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_SIDES)/16) + (int)((y+PLAYER_SIDES)/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_SIDES)/16) + (int)(y/16) * LEVEL_WIDTH] == tile) /*|| + (level[(int)(x/16) + (int)((y+PLAYER_SIDES/2)/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_SIDES/2)/16) + (int)(y/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_SIDES/2)/16) + (int)((y+PLAYER_SIDES)/16) * LEVEL_WIDTH] == tile) || + (level[(int)((x+PLAYER_SIDES)/16) + (int)((y+PLAYER_SIDES/2)/16) * LEVEL_WIDTH] == tile)*/) return 1; return 0; } diff --git a/src/draw.c b/src/draw.c index 656d21f..190a06d 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1,6 +1,6 @@ #include -#define PLAYER_SIDES 5 +#define PLAYER_SIDES 11 #define BG_COLOR 0 #define LEVEL_WIDTH 28 #define DRAW_OFFSET_Y -24 @@ -12,10 +12,10 @@ void draw_player(int old_x, int old_y, int x, int y) { if (old_x != x || old_y != y) { - drect(old_x * 2 + DRAW_OFFSET_X, old_y * 2 + DRAW_OFFSET_Y, - (old_x + PLAYER_SIDES) * 2 + 1 + DRAW_OFFSET_X, - (old_y + PLAYER_SIDES) * 2 + 1 + DRAW_OFFSET_Y, BG_COLOR); - dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_player); + drect(old_x + DRAW_OFFSET_X, old_y + DRAW_OFFSET_Y, + (old_x + PLAYER_SIDES) + DRAW_OFFSET_X, + (old_y + PLAYER_SIDES) + DRAW_OFFSET_Y, BG_COLOR); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_player); } } @@ -34,24 +34,24 @@ void draw_level(char level[], char upgrades[]) switch (level[i]) { case '0': - dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_ground); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground); break; case 'v': - dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_spike); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike); break; case '^': - dimage(x * 2 + DRAW_OFFSET_X, y * 2 + DRAW_OFFSET_Y, &img_elevator); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_elevator); break; case 'j': if (!upgrades[0]) - dimage(x*2 + DRAW_OFFSET_X, y*2 + DRAW_OFFSET_Y, &img_jitem); + dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_jitem); else level[i] = '.'; } - x += 8; - if (x == 8*LEVEL_WIDTH) + x += 16; + if (x == 16*LEVEL_WIDTH) { x = 0; - y += 8; + y += 16; } i++; } @@ -59,8 +59,8 @@ void draw_level(char level[], char upgrades[]) void erase_tile(int x, int y, char level[]) { - x = (int)(x/8); - y = (int)(y/8); + x = (int)(x/16); + y = (int)(y/16); level[x + y * 28] = '.'; x *= 16; y *= 16; diff --git a/src/main.c b/src/main.c index 9ef2507..3960698 100644 --- a/src/main.c +++ b/src/main.c @@ -6,13 +6,13 @@ #include "levels.h" #include "player.h" -#define WALK_SPD 1 -#define MIN_VSPD -6.0 -#define MAX_VSPD 6 -#define JUMP_SPD -3.2 -#define GRAV 0.2 +#define WALK_SPD 2 +#define MIN_VSPD -12.0 +#define MAX_VSPD 12 +#define JUMP_SPD -6.4 +#define GRAV 0.4 #define JUMP_SCALE 12 -#define JUMP_REDUCTION -0.1 +#define JUMP_REDUCTION -0.2 #define UG_CAN_JUMP upgrades[0] void dupdate(); //gint function @@ -44,8 +44,8 @@ int main(void) int on_ground = 6; //remember if player is on solid int player_x = 0; int player_y = 0; - int start_x = 18*8 + 1; - int start_y = 9*8 + 2; + int start_x = 18*16 + 2; + int start_y = 9*16 + 4; int old_x, old_y; char spawn_buffer = 0; set_level(level_id, level); @@ -77,6 +77,7 @@ int main(void) if (vspd >= 0 && collide_solid(player_x, player_y + 1, level)) { on_ground = 6; + vspd = 0; if (spawn_buffer) { spawn_buffer = 0; @@ -106,7 +107,7 @@ int main(void) if ((collide(player_x - 1, player_y, level, '^') || collide(player_x + 1, player_y, level, '^')) && vspd > MIN_VSPD) { - if (vspd > -1) + if (vspd > -2) { vspd -= GRAV; } @@ -141,37 +142,37 @@ int main(void) vspd = 0; } //borders collision - if (player_x <= 11) + if (player_x <= 22) { level_id -= 1; - player_x = 207; + player_x = 414; set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level, upgrades); reset_old_pos(&old_x, &old_y); } - else if (player_x >= 208) + else if (player_x >= 416) { level_id += 1; - player_x = 12; + player_x = 24; set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level, upgrades); reset_old_pos(&old_x, &old_y); } - else if (player_y <= 4) + else if (player_y <= 8) { level_id -= 100; - player_y = 123; + player_y = 246; spawn_buffer = 1; set_level(level_id, level); draw_level(level, upgrades); reset_old_pos(&old_x, &old_y); } - else if (player_y >= 124) + else if (player_y >= 248) { level_id += 100; - player_y = 5; + player_y = 10; set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level, upgrades); diff --git a/src/player.c b/src/player.c index f87c90f..cd672ac 100644 --- a/src/player.c +++ b/src/player.c @@ -25,6 +25,6 @@ void set_start_pos(int *start_x, int *start_y, int x, int y) void reset_old_pos(int *old_x, int *old_y) { - *old_x = -8; - *old_y = -8; + *old_x = -16; + *old_y = -16; }