#include "level.h" #include "conf.h" #include "hook.h" #include "player.h" #include #include #include static struct Level level; static void level_free(void); static void level_load(void); extern bopti_image_t img_tileset; void level_init(void) { level = (struct Level){ .w = 50, .h = 28, }; level.s = level.w * level.h; level_free(); level_load(); hook_table_init(); player_init(); } void level_draw(void) { for (int m = 0; m < level.h; ++m) { for (int n = 0; n < level.w; ++n) { tile_t tile = level_get_tile(n, m); dsubimage(n * TILE_S, m * TILE_S, &img_tileset, ((tile - 1) % TILESET_W) * TILE_S, ((tile - 1) / TILESET_W) * TILE_S, TILE_S, TILE_S, 0); /* dprint(n * TILE_S - camera.x, m * TILE_S - camera.y, * C_BLACK, "%d", tile); */ } } } tile_t level_get_px(int x, int y) { return level.data[x / TILE_S + y / TILE_S * level.w]; } tile_t level_get_tile(int x, int y) { return level.data[x + y * level.w]; } int level_count(tile_t tile) { int i = 0; for (int t = 0; t < level.h * level.w - 1; ++t) { if (level.data[t] == tile) { ++i; } } return i; } int level_search_i(tile_t tile, int occ) { for (int t = 0; t < level.h * level.w - 1; ++t) { if (level.data[t] == tile) { if (!(occ - 1)) { return t; } else { --occ; } } } return 0; } struct Vec2 level_search_s(tile_t tile, int occ) { for (int m = 0; m < level.h; ++m) { for (int n = 0; n < level.w; ++n) { if (level.data[n + m * level.w] == tile) { if (!(occ - 1)) { return (struct Vec2){n, m}; } else { --occ; } } } } return (struct Vec2){0, 0}; } struct Vec2 level_get_dim(void) { return (struct Vec2){level.w, level.h}; } static void level_free(void) { level.data = (tile_t *)malloc(level.s * sizeof(tile_t)); } static void level_load(void) { /* TODO : LEVEL LOADING */ tile_t data[] = { 19, 21, 22, 22, 21, 20, 20, 21, 22, 19, 22, 20, 21, 21, 20, 22, 19, 20, 21, 21, 22, 21, 19, 21, 22, 20, 20, 21, 19, 19, 20, 19, 22, 21, 19, 22, 22, 19, 19, 20, 20, 22, 20, 20, 19, 20, 19, 22, 21, 20, 22, 19, 20, 20, 22, 22, 19, 19, 21, 21, 22, 22, 22, 20, 20, 22, 22, 21, 22, 21, 22, 22, 19, 20, 22, 21, 22, 22, 20, 21, 19, 19, 20, 22, 21, 19, 20, 22, 20, 19, 19, 20, 19, 20, 21, 22, 20, 21, 22, 21, 20, 21, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 19, 19, 19, 22, 17, 25, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 58, 58, 57, 58, 57, 58, 57, 58, 57, 58, 57, 58, 58, 0, 42, 42, 42, 42, 41, 42, 42, 26, 18, 19, 20, 20, 22, 17, 25, 42, 42, 42, 42, 58, 57, 58, 57, 58, 42, 42, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 58, 58, 57, 58, 57, 58, 57, 58, 57, 58, 57, 58, 58, 0, 0, 0, 0, 0, 57, 0, 0, 26, 18, 22, 19, 20, 21, 17, 25, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 58, 57, 58, 57, 58, 57, 58, 57, 58, 57, 58, 0, 0, 0, 0, 42, 42, 41, 42, 42, 26, 18, 20, 20, 21, 22, 17, 25, 42, 42, 0, 41, 42, 41, 42, 41, 42, 41, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 41, 42, 41, 42, 42, 41, 42, 41, 42, 42, 41, 42, 41, 0, 0, 0, 0, 0, 57, 0, 0, 26, 18, 21, 21, 19, 22, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 58, 0, 57, 58, 57, 58, 57, 58, 57, 0, 58, 0, 0, 0, 0, 0, 0, 57, 0, 0, 26, 18, 21, 20, 20, 19, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 58, 58, 57, 58, 57, 58, 57, 58, 57, 58, 58, 0, 0, 0, 0, 0, 0, 57, 0, 0, 26, 18, 20, 20, 19, 22, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 22, 19, 22, 21, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 41, 42, 41, 42, 41, 42, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 22, 21, 19, 21, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 21, 22, 22, 21, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 57, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 21, 19, 19, 19, 17, 25, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 21, 21, 20, 20, 35, 44, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 57, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 22, 20, 20, 22, 51, 60, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 57, 58, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 18, 22, 21, 22, 21, 51, 60, 58, 58, 0, 41, 42, 41, 42, 41, 42, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 41, 42, 41, 42, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 36, 22, 22, 21, 21, 3, 3, 3, 3, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 52, 22, 20, 22, 19, 19, 4, 4, 4, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 59, 52, 20, 19, 22, 21, 17, 25, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 33, 34, 34, 34, 34, 33, 34, 34, 33, 0, 1, 1, 2, 0, 58, 57, 58, 57, 58, 0, 2, 1, 1, 0, 33, 34, 34, 33, 34, 34, 34, 34, 34, 19, 20, 20, 20, 35, 44, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 49, 50, 50, 50, 50, 49, 58, 58, 57, 0, 41, 27, 17, 2, 3, 3, 3, 3, 3, 2, 18, 27, 41, 0, 57, 58, 58, 49, 50, 50, 50, 50, 18, 19, 21, 20, 21, 51, 60, 0, 0, 0, 0, 58, 57, 58, 57, 58, 0, 0, 49, 50, 50, 50, 50, 49, 58, 58, 57, 0, 41, 2, 2, 19, 19, 3, 2, 3, 19, 19, 2, 2, 41, 0, 57, 58, 58, 49, 50, 50, 50, 50, 18, 20, 20, 22, 19, 51, 60, 58, 58, 0, 0, 58, 57, 58, 57, 33, 34, 34, 33, 34, 34, 34, 34, 33, 42, 42, 42, 0, 0, 26, 19, 19, 19, 19, 4, 19, 19, 19, 19, 25, 0, 0, 41, 41, 42, 33, 34, 34, 34, 34, 34, 22, 21, 20, 20, 3, 3, 3, 3, 3, 3, 58, 57, 58, 57, 49, 50, 50, 49, 50, 50, 50, 50, 49, 58, 58, 57, 0, 0, 0, 18, 4, 4, 4, 4, 4, 4, 4, 17, 0, 0, 0, 57, 58, 58, 49, 50, 50, 50, 50, 18, 20, 19, 19, 19, 19, 20, 19, 19, 19, 17, 58, 57, 58, 57, 49, 50, 50, 49, 50, 50, 50, 50, 49, 58, 58, 57, 0, 0, 0, 0, 49, 50, 58, 57, 58, 50, 49, 0, 0, 0, 0, 57, 57, 58, 49, 50, 50, 50, 50, 18, 20, 21, 19, 21, 21, 22, 20, 20, 19, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 20, 20, 20, 20, 19, 20, 21, 21, 22, 19, 20, 22, 20, 22, 22, 19, 19, 22, 21, 19, 22, 20, 21, 21, 20, 21, 19, 19, 19, 20, 20, 22, 22, 21, 22, 21, 20, 22, 21, 19, 19, 19, 21, 19, 19, 22, 20, 21, 19, 22, 22, 22, 21, 20, 19, 22, 20, 22, 19, 22, 20, 20, 19, 21, 21, 22, 19, 19, 22, 21, 19, 22, 20, 22, 20, 22, 20, 22, 20, 19, 20, 21, 20, 19, 20, 22, 22, 22, 19, 19, 20, 21, 21, 19, 20, 19, 21, 19, 21, 21, 22, 19}; memcpy(level.data, data, sizeof(data)); }