-void Biome::genColumn(Mapgen *mg, int x, int z, int y1, int y2) {
- //printf("(%d, %d): %f\n", x, z, mg->map_terrain[z * mg->ystride + x]);
-
- //int surfaceh = 4;
- int surfaceh = np->offset + np->scale * mg->map_terrain[(z - mg->node_min.Z) * 80 /*THIS IS TEMPORARY mg->ystride*/ + (x - mg->node_min.X)];
- //printf("gen column %f\n", );
- int y = y1;
- int i = mg->vmanip->m_area.index(x, y, z); //z * mg->zstride + x + (y - mg->vmanip->m_area.MinEdge.Y) * mg->ystride;
- for (; y <= surfaceh - ntopnodes && y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = n_filler;
- for (; y <= surfaceh && y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = n_top;
- for (; y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = mg->n_air;
-}
-
-
-
-///////////////////////////// [ Ocean biome ] /////////////////////////////////
-
-
-
-void BiomeOcean::genColumn(Mapgen *mg, int x, int z, int y1, int y2) {
- int y, i = 0;
-
- int surfaceh = np->offset + np->scale * mg->map_terrain[z * mg->ystride + x];
-
- i = z * mg->zstride + x;
- for (y = y1; y <= surfaceh - ntopnodes && y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = n_filler;
- for (; y <= surfaceh && y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = n_top;
- for (; y <= y2; y++, i += mg->ystride)
- mg->vmanip->m_data[i] = mg->n_air;
-}
-
-
-///////////////////////////// [ Nether biome ] /////////////////////////////////
-
-
-int BiomeHell::getSurfaceHeight(float noise_terrain) {
- return np->offset + np->scale * noise_terrain;
-}
-
-
-void BiomeHell::genColumn(Mapgen *mg, int x, int z, int y1, int y2) {
- int y, i = 0;
-
- int surfaceh = np->offset + np->scale * mg->map_terrain[z * mg->ystride + x];
+void BiomeDefManager::addBiome(Biome *b) {
+ if (biome_registration_finished) {
+ errorstream << "BIomeDefManager: biome registration already finished, dropping " << b->name <<std::endl;
+ delete b;
+ return;
+ }
+
+ size_t nbiomes = biomes.size();
+ if (nbiomes >= 0xFF) {
+ errorstream << "BiomeDefManager: too many biomes, dropping " << b->name << std::endl;
+ delete b;
+ return;
+ }