interference/src/level.c

206 lines
7.8 KiB
C

#include "level.h"
#include "conf.h"
#include "hook.h"
#include "player.h"
#include <gint/display.h>
#include <stdlib.h>
#include <string.h>
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));
}