#include "ok_map.h" #include static uint32_t rng_u32(uint32_t *s) { *s = *s * 1664525u + 1013904223u; return *s; } void ok_map_init(OkWorld *w, uint32_t seed) { memset(w, 0, sizeof(*w)); uint32_t s = seed ? seed : 1u; for (int y = 0; y < OK_WORLD_H; y++) { for (int x = 0; x < OK_WORLD_W; x++) { uint32_t r = rng_u32(&s); if ((r % 17u) == 0u) w->tiles[y][x] = OK_TILE_BLOCK; else if ((r % 11u) == 0u) w->tiles[y][x] = OK_TILE_RES; else w->tiles[y][x] = OK_TILE_EMPTY; } } w->tiles[1][1] = OK_TILE_EMPTY; w->tiles[OK_WORLD_H - 2][OK_WORLD_W - 2] = OK_TILE_EMPTY; w->resources_a = 100; w->resources_b = 100; } bool ok_map_walkable(const OkWorld *w, int x, int y) { if (x < 0 || y < 0 || x >= OK_WORLD_W || y >= OK_WORLD_H) return false; return w->tiles[y][x] != OK_TILE_BLOCK; }