From 63ebdee01f8b1d8f540ed72226814746a5748561 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Tue, 23 Feb 2021 11:44:11 +0100 Subject: [PATCH] Framing out level loading and specify KBLE file format --- kbleformat.md | 12 ++++++++++++ src/level.zig | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 kbleformat.md diff --git a/kbleformat.md b/kbleformat.md new file mode 100644 index 0000000..0103c1a --- /dev/null +++ b/kbleformat.md @@ -0,0 +1,12 @@ +# .kble file format +Recommanded extension: `.kble` + +Data stored: level size, level content. + +Encoding: +* first byte indicates how big is a chunk of data (in bytes) +* second and third bytes indicates level width +* fourth and fifth bytes indicates level height +* 7th => (7 + data_size * width * height) contains level data + +If the encoding is incorrect, return an error or crash the program. diff --git a/src/level.zig b/src/level.zig index 2f676e5..6a5416e 100644 --- a/src/level.zig +++ b/src/level.zig @@ -48,6 +48,19 @@ pub fn init(allocator: *std.mem.Allocator, width: u16, height: u16) !Self { return self; } +/// Load level content from given absolute path. Expect the KBLE file format (see +/// `kbleformat.md` for more details. +pub fn init_load(allocator: *std.mem.Allocator, kble_file_path: []const u8) !Self { + var self = Self{ + .width = undefined, + .height = undefined, + .content = undefined, + .selection = undefined, + }; + + return self; +} + /// Free the level content. pub fn deinit(self: *Self, allocator: *std.mem.Allocator) void { allocator.free(self.selection);