diff --git a/include/worldgen.h b/include/worldgen.h index b062d47..2aa8c26 100644 --- a/include/worldgen.h +++ b/include/worldgen.h @@ -28,6 +28,6 @@ uint8_t getTerrainAt (int x, int y, int z, ChunkAnchor anchor); uint8_t getBlockAt (int x, int y, int z); extern uint8_t chunk_section[4096]; -void buildChunkSection (int x, int y, int z); +uint8_t buildChunkSection (int cx, int cy, int cz); #endif diff --git a/src/packets.c b/src/packets.c index c45ca83..ad7764f 100644 --- a/src/packets.c +++ b/src/packets.c @@ -320,11 +320,11 @@ int sc_chunkDataAndUpdateLight (int client_fd, int _x, int _z) { // block palette as varint buffer send_all(client_fd, network_block_palette, sizeof(network_block_palette)); // chunk section buffer - buildChunkSection(x, y, z); + uint8_t biome = buildChunkSection(x, y, z); send_all(client_fd, chunk_section, 4096); // biome data writeByte(client_fd, 0); // bits per entry - writeByte(client_fd, W_plains); // biome palette + writeByte(client_fd, biome); // biome palette // yield to idle task task_yield(); } diff --git a/src/worldgen.c b/src/worldgen.c index fd362fe..3a66901 100644 --- a/src/worldgen.c +++ b/src/worldgen.c @@ -326,7 +326,9 @@ uint8_t getBlockAt (int x, int y, int z) { uint8_t chunk_section[4096]; ChunkAnchor chunk_anchors[256 / (CHUNK_SIZE * CHUNK_SIZE)]; -void buildChunkSection (int cx, int cy, int cz) { +// Builds a 16x16x16 chunk of blocks and writes it to `chunk_section` +// Returns the biome at the origin corner of the chunk +uint8_t buildChunkSection (int cx, int cy, int cz) { // Precompute the hashes and anchors for each minichunk int anchor_index = 0; @@ -383,4 +385,6 @@ void buildChunkSection (int cx, int cy, int cz) { } } + return chunk_anchors[0].biome; + }