#ifndef WORLDGEN_H #define WORLDGEN_H #include #include #include "noise.h" #define CHUNK_SIZE 16 #define CHUNK_HEIGHT 256 enum BlockId { BLOCK_BEDROCK = 0, BLOCK_STONE = 1, BLOCK_DIRT = 2, BLOCK_GRASS = 3, BLOCK_WATER = 4, BLOCK_AIR = 5, BLOCK_OAK_LOG = 6, BLOCK_OAK_LEAVES = 7, BLOCK_BIRCH_LOG = 8, BLOCK_BIRCH_LEAVES = 9, BLOCK_COAL = 10, BLOCK_SAND = 11, BLOCK_GRAVEL = 12, BLOCK_SNOW = 13, BLOCK_TALL_GRASS = 14, BLOCK_WILDFLOWER = 15, BLOCK_COPPER_ORE = 16, BLOCK_IRON_ORE = 17, BLOCK_GOLD_ORE = 18, BLOCK_REDSTONE_ORE = 19, BLOCK_LAPIS_ORE = 20, BLOCK_DIAMOND_ORE = 21, BLOCK_OAK_PLANKS = 22, BLOCK_SPRUCE_PLANKS = 23, BLOCK_OAK_LOG_X = 24, BLOCK_OAK_LOG_Z = 25, BLOCK_SPRUCE_LOG_X = 26, BLOCK_SPRUCE_LOG_Z = 27, BLOCK_GLASS_PANE = 28, BLOCK_SPRUCE_DOOR_S_LOWER = 29, BLOCK_SPRUCE_DOOR_S_UPPER = 30, BLOCK_SPRUCE_DOOR_N_LOWER = 31, BLOCK_SPRUCE_DOOR_N_UPPER = 32, BLOCK_SPRUCE_DOOR_W_LOWER = 33, BLOCK_SPRUCE_DOOR_W_UPPER = 34, BLOCK_SPRUCE_DOOR_E_LOWER = 35, BLOCK_SPRUCE_DOOR_E_UPPER = 36, BLOCK_SPRUCE_STAIRS_E = 37, BLOCK_SPRUCE_STAIRS_W = 38 }; struct trail_segment; typedef struct { int chunk_x; int chunk_z; uint16_t heightmap[CHUNK_SIZE][CHUNK_SIZE]; uint16_t blocks[CHUNK_HEIGHT][CHUNK_SIZE][CHUNK_SIZE]; } chunk_data; typedef struct { simplex_noise noise; int sea_level; int world_seed; int enable_trails; int snow_line; struct trail_segment *trail_segments; size_t trail_segment_count; size_t trail_segment_cap; } worldgen_ctx; void worldgen_init(worldgen_ctx *ctx, int world_seed, int sea_level, int snow_line); void worldgen_generate_chunk(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *out); #endif