2021-12-23 15:13:06 +01:00
|
|
|
#include "level.h"
|
|
|
|
#include "conf.h"
|
2022-01-08 19:19:02 +01:00
|
|
|
#include "hook.h"
|
2021-12-23 17:43:44 +01:00
|
|
|
#include "player.h"
|
2021-12-23 15:13:06 +01:00
|
|
|
#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();
|
2021-12-23 17:43:44 +01:00
|
|
|
|
2022-01-08 19:19:02 +01:00
|
|
|
hook_table_init();
|
2021-12-23 17:43:44 +01:00
|
|
|
player_init();
|
2021-12-23 15:13:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
level_draw(void)
|
|
|
|
{
|
|
|
|
for (int m = 0; m < level.h; ++m) {
|
|
|
|
for (int n = 0; n < level.w; ++n) {
|
2021-12-23 17:43:44 +01:00
|
|
|
tile_t tile = level_get_tile(n, m);
|
2021-12-23 15:13:06 +01:00
|
|
|
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); */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-23 17:43:44 +01:00
|
|
|
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];
|
|
|
|
}
|
|
|
|
|
2022-01-08 19:19:02 +01:00
|
|
|
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};
|
|
|
|
}
|
|
|
|
|
2022-01-08 23:37:11 +01:00
|
|
|
struct Vec2
|
|
|
|
level_get_dim(void)
|
|
|
|
{
|
|
|
|
return (struct Vec2){level.w, level.h};
|
|
|
|
}
|
|
|
|
|
2021-12-23 15:13:06 +01:00
|
|
|
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[] = {
|
2022-01-08 15:24:23 +01:00
|
|
|
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, 41, 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};
|
2021-12-23 15:13:06 +01:00
|
|
|
|
|
|
|
memcpy(level.data, data, sizeof(data));
|
|
|
|
}
|