Bugfixes + bugfixes that do not fix the bugs.

This commit is contained in:
KikooDX 2021-03-04 16:54:05 +01:00
parent acd1e8d961
commit d40d6a5fb4
6 changed files with 31 additions and 34 deletions

View File

@ -40,7 +40,7 @@ typedef struct Player{
#include "level.h"
Player player_init();
void player_init(Player *player);
void player_update(Player *player, Level *level, Input input, u8 *level_id);
void player_draw(Player player);
/* Helper functions. */

View File

@ -103,7 +103,7 @@ if __name__ == "__main__":
start_x, start_y = x, y
c_file.write("},\n")
c_file.write("\t\t.start_pos = (Vec2){")
c_file.write(f"{start_x} * TILE_SIZE, {start_y} * TILE_SIZE")
c_file.write(f"{start_x} * TILE_SIZE + 2, {start_y} * TILE_SIZE + 4")
c_file.write("}\n\t},\n")
c_file.write("};")

View File

@ -38,6 +38,7 @@ void level_load(Level *level, Player *player, u8 id) {
extern Level levels[LEVEL_SIZE];
memcpy(level->content, levels[id].content, LEVEL_SIZE);
level->start_pos = levels[id].start_pos;
player_init(player);
player->pos = levels[id].start_pos;
}

View File

@ -22,7 +22,8 @@ int callback(volatile void *arg) {
int main(void) {
/* Initialize player. */
Player player = player_init();
Player player;
player_init(&player);
/* Initialize level. */
Level level = (Level){};
u8 level_id = 0;

View File

@ -14,18 +14,16 @@
#include "input.h"
#include "tiles.h"
Player player_init() {
return (Player){
.pos = (Vec2){0, 0},
.spd_x = 0.0,
.spd_y = 0.0,
.facing = 1,
.stun = false,
.knocked = false,
.keys_left = 0,
.jump_buffer = 0,
.coyot = 0,
};
void player_init(Player *player) {
player->pos = (Vec2){0, 0};
player->spd_x = 0.0;
player->spd_y = 0.0;
player->facing = 1;
player->stun = false;
player->knocked = false;
player->keys_left = 0;
player->jump_buffer = 0;
player->coyot = 0;
}
void player_update(Player *player, Level *level, Input input, u8 *level_id) {
@ -35,9 +33,9 @@ void player_update(Player *player, Level *level, Input input, u8 *level_id) {
player_collide(*level, one_px_down, SEMI_SOLID_TILE, 0);
if (!player->stun) {
/* Get input. */
const i8 move_x =
const i8 move_x = sign(
input_is_down(input, K_RIGHT) -
input_is_down(input, K_LEFT);
input_is_down(input, K_LEFT));
const bool fastfall = input_is_down(input, K_DOWN);
const bool jump_pressed = input_is_pressed(input, K_JUMP);
const bool jump_held = input_is_down(input, K_JUMP);
@ -51,9 +49,9 @@ void player_update(Player *player, Level *level, Input input, u8 *level_id) {
player->spd_x *= 1 - AIR_FRICTION;
/* Acceleration. */
if (on_ground)
player->spd_x += (f32)(move_x) * GROUND_ACCELERATION;
player->spd_x += move_x * GROUND_ACCELERATION;
else
player->spd_x += (f32)(move_x) * AIR_ACCELERATION;
player->spd_x += move_x * AIR_ACCELERATION;
/* Gravity. */
player->spd_y += GRAVITY;
/* Vertical friction. */
@ -78,9 +76,6 @@ void player_update(Player *player, Level *level, Input input, u8 *level_id) {
player->jump_buffer = 0;
player->coyot = 0;
}
/* Move the player. */
player_move(player, *level, round(player->spd_x), 0);
player_move(player, *level, 0, round(player->spd_y));
}
else {
/* Gravity. */
@ -97,7 +92,7 @@ void player_update(Player *player, Level *level, Input input, u8 *level_id) {
/* If player hit a wall in stun mode, turn back. */
if (hit_wall_x && player->stun) {
player->facing *= -1;
player->spd_x = KNOCKBACK_X;
player->spd_x = KNOCKBACK_X * -player->facing;
}
/* Damageboost a.k.a. stun mode. */
if (player_collide(*level, player->pos, PAIN_TILE, 5)) {
@ -133,9 +128,9 @@ void player_draw(Player player) {
/* Draw colored rectangle depending on player state. */
u32 color = 0;
if (player.stun)
color = C_RGB(230/4, 41/4, 55/4); /* Red. */
color = C_RGB((230/4), (41/4), (55/4)); /* Red. */
else
color = C_RGB(0/4, 121/4, 241/4); /* Blue. */
color = C_RGB((0/4), (121/4), (241/4)); /* Blue. */
const vec2_int_t x = player.pos.x + DRAW_OFFSET_X;
const vec2_int_t y = player.pos.y + DRAW_OFFSET_Y;
drect(x, y, x + PLAYER_WIDTH - 1, y + PLAYER_HEIGHT - 1, color);
@ -145,9 +140,9 @@ void player_draw(Player player) {
bool player_collide(Level level, Vec2 pos, tile_t tile, u8 margin) {
const vec2_int_t left = pos.x + margin;
const vec2_int_t right = pos.x + PLAYER_WIDTH - 1 - margin * 2;
const vec2_int_t right = pos.x + PLAYER_WIDTH - 1 - margin;
const vec2_int_t up = pos.y + margin;
const vec2_int_t down = pos.y + PLAYER_HEIGHT - 1 - margin * 2;
const vec2_int_t down = pos.y + PLAYER_HEIGHT - 1 - margin;
return ((tile == level_get_tile_at_px(level, (Vec2){left, up})) ||
(tile == level_get_tile_at_px(level, (Vec2){right, up})) ||
(tile == level_get_tile_at_px(level, (Vec2){left, down})) ||

View File

@ -11,13 +11,13 @@
u32 tile_color(tile_t tile) {
int color = 0;
switch (tile) {
case AIR_TILE: color = C_RGB(0/4, 0/4, 0/4); break;
case SOLID_TILE: color = C_RGB(10/4, 210/4, 180/4); break;
case PAIN_TILE: color = C_RGB(210/4, 10/4, 180/4); break;
case SPAWN_TILE: color = C_RGB(20/4, 220/4, 20/4); break;
case EXIT_TILE: color = C_RGB(250/4, 220/4, 10/4); break;
case KEY_TILE: color = C_RGB(210/4, 210/4, 210/4); break;
case SEMI_SOLID_TILE: color = C_RGB(5/4, 105/4, 90/4); break;
case AIR_TILE: color = C_RGB((0/4), (0/4), (0/4)); break;
case SOLID_TILE: color = C_RGB((10/4), (210/4), (180/4)); break;
case PAIN_TILE: color = C_RGB((210/4), (10/4), (180/4)); break;
case SPAWN_TILE: color = C_RGB((20/4), (220/4), (20/4)); break;
case EXIT_TILE: color = C_RGB((250/4), (220/4), (10/4)); break;
case KEY_TILE: color = C_RGB((210/4), (210/4), (210/4)); break;
case SEMI_SOLID_TILE: color = C_RGB((5/4), (105/4), (90/4)); break;
}
return color;
}