void World_SetBlock(int x, int y, int z, BlockID block) { int i = World_Pack(x, y, z); World.Blocks[i] = (BlockRaw)block; /* defer allocation of second map array if possible */ if (World.Blocks == World.Blocks2) { if (block < 256) return; World_SetMapUpper(Mem_AllocCleared(World.Volume, 1, "blocks array upper")); } World.Blocks2[i] = (BlockRaw)(block >> 8); }
static void Builder_ReadChunkData(Int32 x1, Int32 y1, Int32 z1, bool* outAllAir, bool* outAllSolid) { bool allAir = true, allSolid = true; Int32 xx, yy, zz; for (yy = -1; yy < 17; ++yy) { Int32 y = yy + y1; if (y < 0) continue; if (y >= World_Height) break; for (zz = -1; zz < 17; ++zz) { Int32 z = zz + z1; if (z < 0) continue; if (z >= World_Length) break; /* need to subtract 1 as index is pre incremented in for loop. */ Int32 index = World_Pack(x1 - 1, y, z) - 1; Int32 chunkIndex = (yy + 1) * EXTCHUNK_SIZE_2 + (zz + 1) * EXTCHUNK_SIZE + (-1 + 1) - 1; for (xx = -1; xx < 17; ++xx) { Int32 x = xx + x1; ++index; ++chunkIndex; if (x < 0) continue; if (x >= World_Width) break; BlockID rawBlock = World_Blocks[index]; allAir = allAir && Block_Draw[rawBlock] == DRAW_GAS; allSolid = allSolid && Block_FullOpaque[rawBlock]; Builder_Chunk[chunkIndex] = rawBlock; } } } *outAllAir = allAir; *outAllSolid = allSolid; }
void World_SetBlock(int x, int y, int z, BlockID block) { World.Blocks[World_Pack(x, y, z)] = block; }