From 4a8127146eafd4fef5b478c1bf9f5a152c8c4cd5 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Thu, 22 Jun 2023 22:10:28 +0100 Subject: Import entities from the map and spawn them --- src/game.c | 1 - src/map.c | 15 +++++++++++++++ src/map.h | 5 +++++ src/player.c | 4 ++-- src/player.h | 2 +- 5 files changed, 23 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/game.c b/src/game.c index 9878871..ddd9e63 100644 --- a/src/game.c +++ b/src/game.c @@ -82,7 +82,6 @@ void run_game() map_init(binary_stage_start); map_render(); - player_init(16, 128); player_draw(); timer_start(GAME_TIME_MAX, &clock_updated); diff --git a/src/map.c b/src/map.c index 9908384..4c5390f 100644 --- a/src/map.c +++ b/src/map.c @@ -4,6 +4,8 @@ #include "vga.h" #include "data.h" +#include "player.h" + #include "map.h" /* current map; set via map_init */ @@ -24,6 +26,19 @@ void map_init(const uint8_t map[]) /* gold is not 0xff */ if (gold[i] != 0xff) total_gold++; + + /* spawn entities, 0xff is the list terminator */ + for ( + const uint8_t *ent = map + MAP_W * MAP_H * 2; + *ent != 0xff; + ent += 4 + ) + switch (*ent) + { + case Player: + player_init(ent[1] * MAP_TILE_W, ent[2] * MAP_TILE_H, ent[3] & 1); + break; + } } void map_render() diff --git a/src/map.h b/src/map.h index 42f8da7..992c982 100644 --- a/src/map.h +++ b/src/map.h @@ -14,6 +14,11 @@ #define MAP_FIRST_BLOCKED 40 #define MAP_FIRST_DEADLY 100 +typedef enum +{ + Player = 0, +} EntityType; + void map_init(const uint8_t map[]); void map_render(); diff --git a/src/player.c b/src/player.c index 52595f4..a0b840f 100644 --- a/src/player.c +++ b/src/player.c @@ -69,9 +69,9 @@ static const Rect frames[2][6] = }, }; -void player_init(uint16_t start_x, uint8_t start_y) +void player_init(uint16_t start_x, uint8_t start_y, uint8_t start_dir) { - dir = DIR_RIGHT; + dir = start_dir; frame = FRAME_STANDING; delay = 0; jump = 0; diff --git a/src/player.h b/src/player.h index 56bbd22..a2a946c 100644 --- a/src/player.h +++ b/src/player.h @@ -1,7 +1,7 @@ #ifndef _PLAYER_H #define _PLAYER_H -void player_init(uint16_t start_x, uint8_t start_y); +void player_init(uint16_t start_x, uint8_t start_y, uint8_t start_dir); void player_update(); void player_erase(); -- cgit v1.2.3