diff --git a/CMakeLists.txt b/CMakeLists.txt index 47b8bdb..48d49ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,10 +13,12 @@ set(SOURCES src/main.c src/draw.c src/input.c + src/level.c src/player.c ) set(ASSETS + res/test.kble ) set(FLAGS -std=c99 -Os -Wall -Wextra -Wshadow) diff --git a/inc/level.h b/inc/level.h new file mode 100644 index 0000000..da10d1b --- /dev/null +++ b/inc/level.h @@ -0,0 +1,20 @@ +#pragma once +#include + +struct LevelBin { + uint8_t format, chunk_size; + uint16_t width, height; + uint8_t data[]; +} __attribute__((__packed__)); + +struct Level { + int width, height, size; + const struct LevelBin *bin; + uint8_t *data; +}; + +void level_init(void); +void level_deinit(void); + +void level_load(const struct LevelBin *); +void level_reload(void); diff --git a/jle.ini b/jle.ini new file mode 100644 index 0000000..dd20334 --- /dev/null +++ b/jle.ini @@ -0,0 +1,5 @@ +# https://git.sr.ht/~kikoodx/jle +tileset = res/tileset.png +tile_size = 16 +new_level_width = 25 +new_level_height = 14 diff --git a/res/fxconv-metadata.txt b/res/fxconv-metadata.txt new file mode 100644 index 0000000..1e3fa88 --- /dev/null +++ b/res/fxconv-metadata.txt @@ -0,0 +1,3 @@ +*.kble: + type: binary + name_regex: (.*)\.kble kble_\1 diff --git a/res/test.kble b/res/test.kble new file mode 100644 index 0000000..01129de Binary files /dev/null and b/res/test.kble differ diff --git a/res/tileset.png b/res/tileset.png new file mode 100644 index 0000000..a630e7e Binary files /dev/null and b/res/tileset.png differ diff --git a/sle.sh b/sle.sh new file mode 100755 index 0000000..0574047 --- /dev/null +++ b/sle.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# https://sr.ht/~kikoodx/sle +sle -tile-width 16 -tile-height 16 -level-width 25 -level-height 14 \ +-editor-width 396 -editor-height 224 -editor-off-x -2 -editor-off-y 0 \ +-editor-bg-color '#000000' -picker-bg-color '#000005' \ +-tileset res/tileset.png $@ diff --git a/src/level.c b/src/level.c new file mode 100644 index 0000000..9ee3742 --- /dev/null +++ b/src/level.c @@ -0,0 +1,47 @@ +#include "level.h" +#include + +static struct Level level; + +static void level_free(void); + +void +level_init(void) +{ + level.data = NULL; +} + +void +level_deinit(void) +{ + level_free(); +} + +void +level_load(const struct LevelBin *b) +{ + int i = b->width * b->height; + level_free(); + level.width = b->width; + level.height = b->height; + level.size = i; + level.data = malloc(i); + level.bin = b; + while (i-- > 0) + level.data[i] = b->data[i]; +} + +void +level_reload(void) +{ + level_load(level.bin); +} + +static void +level_free(void) +{ + if (level.data != NULL) { + free(level.data); + level.data = NULL; + } +} diff --git a/src/main.c b/src/main.c index bdd3598..6dfd704 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,5 @@ #include "input.h" +#include "level.h" #include "player.h" #include @@ -12,7 +13,10 @@ static void update(void); int main(void) { + extern const struct LevelBin kble_test; + init(); + level_load(&kble_test); draw(); do { @@ -28,12 +32,14 @@ static void init(void) { input_init(); + level_init(); player_init(&player); } static void deinit(void) { + level_deinit(); } static void