diff --git a/CMakeLists.txt b/CMakeLists.txt index 380d150..f5b9016 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,9 +38,9 @@ target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) target_link_libraries(myaddin Gint::Gint) if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) - generate_g1a(TARGET myaddin OUTPUT "ZkuwL.g1a" - NAME "ZkuwL" ICON assets-fx/icon.png) + generate_g1a(TARGET myaddin OUTPUT "ZkwuL.g1a" + NAME "ZkwuL" ICON assets-fx/icon.png) elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) - generate_g3a(TARGET myaddin OUTPUT "ZkuwL.g3a" - NAME "ZkuwL" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) + generate_g3a(TARGET myaddin OUTPUT "ZkwuL.g3a" + NAME "ZkwuL" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) endif() diff --git a/README.md b/README.md index 48a3009..e43de89 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,7 @@ ZkwuL is a game made with [gint](https://gitea.planet-casio.com/Lephenixnoir/gint) It's a remake of my [first game](https://massena.itch.io/zkwul-the-game) made with GameMaker Studio 2 + +# Softwares used + +I use [SLE](https://sr.ht/~kikoodx/sle/) and [kble2lua](https://gitea.planet-casio.com/KikooDX/kble2lua) \ No newline at end of file diff --git a/assets-cg/img/end.png b/assets-cg/img/end.png index 6af4e86..44fcf16 100644 Binary files a/assets-cg/img/end.png and b/assets-cg/img/end.png differ diff --git a/assets-cg/img/spike.png b/assets-cg/img/spike.png index 93a56dd..022eacb 100644 Binary files a/assets-cg/img/spike.png and b/assets-cg/img/spike.png differ diff --git a/include/main.h b/include/main.h index 3999155..b1da36a 100644 --- a/include/main.h +++ b/include/main.h @@ -1,5 +1,6 @@ #pragma once +#define LEVEL_NB 2 #define LEVEL_SIZE 16 #define TILE_SIZE 12 @@ -17,7 +18,7 @@ typedef struct Player { /* used for tiles */ typedef int tile_t; -Vec2 search(tile_t x, tile_t level[16][16]); -int collide_pixel(Vec2 pos, tile_t obj, tile_t level[16][16]); -int collide(Vec2 pos, int h, tile_t obj, tile_t level[16][16]); -Player level_reset(Player player); +Vec2 search(tile_t x, tile_t level[LEVEL_SIZE][LEVEL_SIZE]); +int collide_pixel(Vec2 pos, tile_t obj, tile_t level[LEVEL_SIZE][LEVEL_SIZE]); +int collide(Vec2 pos, int h, tile_t obj, tile_t level[LEVEL_SIZE][LEVEL_SIZE]); +Player level_reset(Player player, tile_t level[LEVEL_SIZE][LEVEL_SIZE]); diff --git a/levels/level1.kble b/levels/level1.kble new file mode 100644 index 0000000..f4a5317 Binary files /dev/null and b/levels/level1.kble differ diff --git a/levels/level2.kble b/levels/level2.kble new file mode 100644 index 0000000..dbe7d27 Binary files /dev/null and b/levels/level2.kble differ diff --git a/levels/tileset.png b/levels/tileset.png new file mode 100644 index 0000000..e2e4558 Binary files /dev/null and b/levels/tileset.png differ diff --git a/src/levels.c b/src/levels.c index 040adee..57fc33d 100644 --- a/src/levels.c +++ b/src/levels.c @@ -1,20 +1,41 @@ #include "main.h" -const tile_t level[16][16] = { - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {1, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 1}, - {1, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1}, - {1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1}, - {1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 1}, - {1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1}, - {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 1}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} -}; +const tile_t level[LEVEL_NB][LEVEL_SIZE][LEVEL_SIZE] = { + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 4, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 2, + 2, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, + 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, + 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 2, + 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + }, + + { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 2, 2, 2, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 2, + 2, 0, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 0, 2, + 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 2, + 2, 0, 2, 2, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, + 2, 0, 4, 0, 4, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 2, + 2, 0, 0, 4, 0, 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, + 2, 0, 4, 0, 4, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, + 2, 0, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 2, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, + 2, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 4, 0, 0, 0, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 2, 2, 2 + } +}; \ No newline at end of file diff --git a/src/main.c b/src/main.c index d2f596f..e5ee7c1 100644 --- a/src/main.c +++ b/src/main.c @@ -50,7 +50,8 @@ int collide(Vec2 pos, int h, tile_t obj, tile_t level[LEVEL_SIZE][LEVEL_SIZE]) { return 0; } -Player level_reset(Player player) { +Player level_reset(Player player, tile_t level[LEVEL_SIZE][LEVEL_SIZE]) { + player.spawn = search(1, level); player.pos = player.spawn; return player; } @@ -61,18 +62,19 @@ int main(void) { extern bopti_image_t img_spike; extern bopti_image_t img_end; - extern tile_t level[LEVEL_SIZE][LEVEL_SIZE]; + extern tile_t level[LEVEL_NB][LEVEL_SIZE][LEVEL_SIZE]; int running = 1; int timer = 0; /* lol */ + int lvl = 0; /* player */ Player player = { .pos = {0, 0}, .spawn = {0, 0} }; - player.spawn = search(2, level); - player = level_reset(player); + + player = level_reset(player, level[lvl]); /* main loop */ while(running) { @@ -82,20 +84,21 @@ int main(void) { /* drawing the level */ for(int m = 0; m < LEVEL_SIZE; ++m) { for(int n = 0; n < LEVEL_SIZE; ++n) { - switch(level[n][m]) { - case 1: + switch(level[lvl][n][m]) { + case 2: /* walls */ dimage(m * TILE_SIZE, n * TILE_SIZE, &img_wall); break; case 3: - /* spikes */ - dimage(m * TILE_SIZE, n * TILE_SIZE, &img_spike); - break; - case 4: /* end ring */ dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_end, ((timer / 30) % 4) * 12, 0, 12, 12, 0); break; + case 4: + /* spikes */ + dimage(m * TILE_SIZE, n * TILE_SIZE, &img_spike); + break; + } } } @@ -112,23 +115,33 @@ int main(void) { clearevents(); /* trying to move the player >w< */ - if(!collide((Vec2){player.pos.x + mov.x, player.pos.y}, 0, 1, level)) { + if(!collide((Vec2){player.pos.x + mov.x, player.pos.y}, 1, 2, level[lvl])) { player.pos.x += mov.x; } - if(!collide((Vec2){player.pos.x, player.pos.y + mov.y}, 0, 1, level)) { + if(!collide((Vec2){player.pos.x, player.pos.y + mov.y}, 1, 2, level[lvl])) { player.pos.y += mov.y; } /* d i e */ - if(collide(player.pos, 2, 3, level)) { - player = level_reset(player); + if(collide(player.pos, 2, 4, level[lvl])) { + player = level_reset(player, level[lvl]); } - if(keydown(KEY_EXIT) || collide(player.pos, 0, 4, level)) { + if(keydown(KEY_EXIT)) { running = 0; } + if(collide(player.pos, 0, 3, level[lvl])) { + if(lvl != LEVEL_NB - 1) { + player = level_reset(player, level[lvl]); + ++lvl; + } + else { + running = 0; + } + } + ++timer; /* lol^2 */ }