From 7157b827c54cbb20c143e93e76c8c7f05d3e1ccf Mon Sep 17 00:00:00 2001 From: KikooDX Date: Thu, 16 Dec 2021 13:56:02 +0100 Subject: [PATCH] level module --- CMakeLists.txt | 2 ++ inc/level.h | 20 +++++++++++++++++ jle.ini | 5 +++++ res/fxconv-metadata.txt | 3 +++ res/test.kble | Bin 0 -> 356 bytes res/tileset.png | Bin 0 -> 119 bytes sle.sh | 6 +++++ src/level.c | 47 ++++++++++++++++++++++++++++++++++++++++ src/main.c | 6 +++++ 9 files changed, 89 insertions(+) create mode 100644 inc/level.h create mode 100644 jle.ini create mode 100644 res/fxconv-metadata.txt create mode 100644 res/test.kble create mode 100644 res/tileset.png create mode 100755 sle.sh create mode 100644 src/level.c 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 0000000000000000000000000000000000000000..01129de1cf81ec0274fcd21de992bdcca90c585c GIT binary patch literal 356 zcmZ{eQ5FCY2n4qa_;>${vWeD{K6+}H1w%)(Z=o);dJhNFCU_0(Oi2*a3*w4^>z!m! cL1XZ=3s`)|7J#db&mTjZ`!_=vk8Up80F*HRwEzGB literal 0 HcmV?d00001 diff --git a/res/tileset.png b/res/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..a630e7e88ab117d504ff4eb64c6dc982b57c523f GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!2~3KB)#GTQg)s$jv*GOlT#D~|NQ?yU*)UM zk=Ke>GdL2KwDWVkQaS&&7-zht48)_KLTZ^_o-rUfYU^2YGeO=9qL^>bP0l+XkKeOoDq literal 0 HcmV?d00001 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