From 692beeca172b03787cd94a7bdff6c70fb8196afd Mon Sep 17 00:00:00 2001 From: KikooDX Date: Fri, 1 Apr 2022 18:31:34 +0200 Subject: [PATCH] commit twrice a week --- CMakeLists.txt | 3 +++ Makefile | 16 ++++++++----- inc/conf.h | 2 ++ inc/input.h | 10 +++++++++ inc/level.h | 5 +++++ inc/player.h | 1 + res/0.kble | Bin 0 -> 356 bytes res/font.png | Bin 1836 -> 3702 bytes res/tset.png | Bin 2560 -> 2836 bytes sle.sh | 6 +++++ src/input.c | 38 +++++++++++++++++++++++++++++++ src/level.c | 48 +++++++++++++++++++++++++++++++++++++++ src/lzy.c | 1 + src/main.c | 60 ++++++++++++++++++++++--------------------------- src/player.c | 15 ++++++++++++- 15 files changed, 165 insertions(+), 40 deletions(-) create mode 100644 inc/input.h create mode 100644 inc/level.h create mode 100644 res/0.kble create mode 100755 sle.sh create mode 100644 src/input.c create mode 100644 src/level.c diff --git a/CMakeLists.txt b/CMakeLists.txt index fce70ab..f7b2911 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,9 @@ include_directories(inc) set(SOURCES src/main.c src/lzy.c + src/input.c + src/player.c + src/level.c ) set(ASSETS diff --git a/Makefile b/Makefile index e371044..e46d005 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,27 @@ CC ?= gcc -CFLAGS = -std=c99 -Wall -Wextra -O3 -I./inc -MMD $(shell sdl2-config --cflags) +CFLAGS = -std=c99 -Wall -Wextra -Os -I./inc -MMD $(shell sdl2-config --cflags) LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_mixer $(shell sdl2-config --libs) OBJ_NAME = wehfou OBJS := $(patsubst %.c,%.o,$(wildcard src/*.c)) +LVLS_BIN = inc/levels_bin.h +LVLS := $(wildcard res/*.kble) -all: $(OBJ_NAME) +all: $(LVLS_BIN) $(OBJ_NAME) $(OBJ_NAME): $(OBJS) $(CC) $(LDFLAGS) $(LIBRARIES) -o $(OBJ_NAME) $(OBJS) - strip $(OBJ_NAME) %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< -cg: +$(LVLS_BIN): $(LVLS) + cembed -o $(LVLS_BIN) -t levels $(LVLS) + +cg: $(LVLS_BIN) fxsdk build-cg -run: $(OBJ_NAME) +run: all ./$(OBJ_NAME) format: @@ -26,7 +30,7 @@ format: clean: rm -f $(OBJ_NAME).g3a $(OBJ_NAME) - rm -f $(OBJS) src/*.d + rm -f $(LVLS_BIN) $(OBJS) src/*.d rm -Rf build-cg .PHONY: cg run run-txt format clean diff --git a/inc/conf.h b/inc/conf.h index 30fceb0..759a9b1 100644 --- a/inc/conf.h +++ b/inc/conf.h @@ -4,3 +4,5 @@ #define CHR_HEIGHT 16 #define DISPLAY_WIDTH 400 #define DISPLAY_HEIGHT 224 +#define TSET_LINE 13 +#define TILE_SIZE 16 diff --git a/inc/input.h b/inc/input.h new file mode 100644 index 0000000..73452a4 --- /dev/null +++ b/inc/input.h @@ -0,0 +1,10 @@ +#pragma once + +enum Key { K_LEFT, K_RIGHT, K_UP, K_DOWN, K_O, K_X }; + +enum KeyState { KS_UP, KS_DOWN, KS_PRESSED }; + +void input_update(void); +int input_up(unsigned int); +int input_down(unsigned int); +int input_pressed(unsigned int); diff --git a/inc/level.h b/inc/level.h new file mode 100644 index 0000000..8b4e542 --- /dev/null +++ b/inc/level.h @@ -0,0 +1,5 @@ +#pragma once + +void level_deinit(void); +void level_load(int id); +void level_find(int tile, int *x, int *y); diff --git a/inc/player.h b/inc/player.h index c1d6d7a..d0fa202 100644 --- a/inc/player.h +++ b/inc/player.h @@ -1,6 +1,7 @@ #pragma once void player_init(float x, float y); +void player_update(void); void player_draw(void); #define PLAYER_WIDTH 12 diff --git a/res/0.kble b/res/0.kble new file mode 100644 index 0000000000000000000000000000000000000000..d1ba8be3cd65969ec2f064abd1d01515e0d042fe GIT binary patch literal 356 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 XDa1?=N7im+aHRuHlDFm`1n1CylN;;P& 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 0) + if (LZY_KeyDown(keys[i])) + states[i] = + (states[i] == KS_UP) ? (KS_PRESSED) : (KS_DOWN); + else + states[i] = KS_UP; +} + +int input_up(unsigned int k) +{ + if (k >= 6) + return 0; + return states[k] == KS_UP; +} + +int input_down(unsigned int k) +{ + if (k >= 6) + return 0; + return states[k] == KS_DOWN; +} + +int input_pressed(unsigned int k) +{ + if (k >= 6) + return 0; + return states[k] == KS_PRESSED; +} diff --git a/src/level.c b/src/level.c new file mode 100644 index 0000000..72e60d1 --- /dev/null +++ b/src/level.c @@ -0,0 +1,48 @@ +#include "level.h" +#include "conf.h" +#include "levels_bin.h" +#include "lzy.h" +#include "player.h" +#include +#include + +static int width, height, id; +static uint8_t *data = NULL; + +void level_deinit(void) +{ + if (data != NULL) { + free(data); + data = NULL; + } +} + +void level_load(int nid) +{ + const uint8_t *const s = levels[nid].data; + + width = s[3]; + height = s[5]; + data = calloc(width * height, sizeof(uint8_t)); + id = nid; + + for (int i = 0; i < width * height; i++) + data[i] = s[6 + i]; + + int px = 0, py = 0; + level_find(2, &px, &py); + player_init(px, py); +} + +void level_find(int tile, int *x, int *y) +{ + for (int i = 0; i < width * height; i++) { + if (data[i] == tile) { + if (x != NULL) + *x = i % width * TILE_SIZE; + if (y != NULL) + *y = i % height * TILE_SIZE; + return; + } + } +} diff --git a/src/lzy.c b/src/lzy.c index c4e903b..a05166d 100644 --- a/src/lzy.c +++ b/src/lzy.c @@ -7,4 +7,5 @@ #define LZY_DISPLAY_WIDTH DISPLAY_WIDTH #define LZY_DISPLAY_HEIGHT DISPLAY_HEIGHT #define LZY_FIRST_CHR ' ' +#define LZY_TILE_SIZE TILE_SIZE #include "lzy.h" diff --git a/src/main.c b/src/main.c index acd2aba..7cb99e3 100644 --- a/src/main.c +++ b/src/main.c @@ -1,50 +1,44 @@ #include "conf.h" +#include "input.h" +#include "level.h" #include "lzy.h" +#include "player.h" -int main(int argc, const char **argv) +static void deinit(void); + +int main(int argc, char **argv) { - int x = 0; - int y = 0; - - if (LZY_Init(argc, argv, "wehfou official goty", 30, "res/tset.png", - "res/font.png")) { + if (LZY_Init(argc, (const char **)argv, "wehfou official goty", 30, + "res/tset.png", "res/font.png")) { LZY_Log(LZY_GetError()); - LZY_Quit(); + deinit(); return 1; } + level_load(0); + player_init(0, 0); + while (!LZY_ShouldQuit()) { - /* update */ LZY_CycleEvents(); + input_update(); + player_update(); - if (LZY_KeyDown(LZYK_LEFT)) - x -= 2; - if (LZY_KeyDown(LZYK_RIGHT)) - x += 2; - if (LZY_KeyDown(LZYK_UP)) - y -= 2; - if (LZY_KeyDown(LZYK_DOWN)) - y += 2; - - /* draw */ LZY_DrawBegin(); - { - /* draw background */ - LZY_DrawTileEx(0, 0, 0, 13, 7); - LZY_DrawTileEx(0, DISPLAY_WIDTH / 2, 0, 13, 7); - LZY_DrawTileEx(0, 0, DISPLAY_HEIGHT / 2, 13, 7); - LZY_DrawTileEx(0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, - 13, 7); - - /* draw player */ - if (LZY_DrawChar('s', x, y)) - LZY_Log(LZY_GetError()); - } + LZY_DrawTileEx(TSET_LINE, 0, 0, 13, 7); + LZY_DrawTileEx(TSET_LINE, DISPLAY_WIDTH / 2, 0, 13, 7); + LZY_DrawTileEx(TSET_LINE, 0, DISPLAY_HEIGHT / 2, 13, 7); + LZY_DrawTileEx(TSET_LINE, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, + 13, 7); + player_draw(); LZY_DrawEnd(); } - LZY_Log("cya"); - LZY_Quit(); - + deinit(); return 0; } + +static void deinit(void) +{ + level_deinit(); + LZY_Quit(); +} diff --git a/src/player.c b/src/player.c index 85bf2a7..0bff092 100644 --- a/src/player.c +++ b/src/player.c @@ -1,4 +1,5 @@ #include "player.h" +#include "input.h" #include "lzy.h" static float x, y, spd_x, spd_y; @@ -11,8 +12,20 @@ void player_init(float nx, float ny) spd_y = 0.0f; } +void player_update(void) +{ + if (input_down(K_LEFT)) + x -= 2; + if (input_down(K_RIGHT)) + x += 2; + if (input_down(K_UP)) + y -= 2; + if (input_down(K_DOWN)) + y += 2; +} + void player_draw(void) { LZY_DrawSetColor(255, 0, 255); - LZY_DrawFillRect(x, y, PLAYER_WIDTH, PLAYER_HEIGHT); + LZY_DrawTile(2, x, y); }