EnrichedString: Fix substr segfault caused by non-formatted text
[oweals/minetest.git] / src / mapgen / mapgen.h
index abac79016ab9f8084ecfbf3fd864dabc84cefd17..1473d41a685647945685412d6544b17e6bda9854 100644 (file)
@@ -30,12 +30,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define MAPGEN_DEFAULT_NAME "v7"
 
 /////////////////// Mapgen flags
-#define MG_TREES       0x01  // Deprecated. Moved into mgv6 flags
+#define MG_TREES       0x01  // Obsolete. Moved into mgv6 flags
 #define MG_CAVES       0x02
 #define MG_DUNGEONS    0x04
-#define MG_FLAT        0x08  // Deprecated. Moved into mgv6 flags
+#define MG_FLAT        0x08  // Obsolete. Moved into mgv6 flags
 #define MG_LIGHT       0x10
 #define MG_DECORATIONS 0x20
+#define MG_BIOMES      0x40
 
 typedef u8 biome_t;  // copy from mg_biome.h to avoid an unnecessary include
 
@@ -101,15 +102,16 @@ private:
        std::list<GenNotifyEvent> m_notify_events;
 };
 
+// Order must match the order of 'static MapgenDesc g_reg_mapgens[]' in mapgen.cpp
 enum MapgenType {
-       MAPGEN_V5,
-       MAPGEN_V6,
        MAPGEN_V7,
+       MAPGEN_VALLEYS,
+       MAPGEN_CARPATHIAN,
+       MAPGEN_V5,
        MAPGEN_FLAT,
        MAPGEN_FRACTAL,
-       MAPGEN_VALLEYS,
        MAPGEN_SINGLENODE,
-       MAPGEN_CARPATHIAN,
+       MAPGEN_V6,
        MAPGEN_INVALID,
 };
 
@@ -122,7 +124,7 @@ struct MapgenParams {
        u64 seed = 0;
        s16 water_level = 1;
        s16 mapgen_limit = MAX_MAP_GENERATION_LIMIT;
-       u32 flags = MG_CAVES | MG_LIGHT | MG_DECORATIONS;
+       u32 flags = MG_CAVES | MG_LIGHT | MG_DECORATIONS | MG_BIOMES;
 
        BiomeParams *bparams = nullptr;
 
@@ -188,11 +190,12 @@ public:
        void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
 
        void setLighting(u8 light, v3s16 nmin, v3s16 nmax);
-       void lightSpread(VoxelArea &a, v3s16 p, u8 light);
+       void lightSpread(VoxelArea &a, std::queue<std::pair<v3s16, u8>> &queue,
+               const v3s16 &p, u8 light);
        void calcLighting(v3s16 nmin, v3s16 nmax, v3s16 full_nmin, v3s16 full_nmax,
                bool propagate_shadow = true);
        void propagateSunlight(v3s16 nmin, v3s16 nmax, bool propagate_shadow);
-       void spreadLight(v3s16 nmin, v3s16 nmax);
+       void spreadLight(const v3s16 &nmin, const v3s16 &nmax);
 
        virtual void makeChunk(BlockMakeData *data) {}
        virtual int getGroundLevelAtPoint(v2s16 p) { return 0; }
@@ -207,8 +210,8 @@ public:
        // Mapgen management functions
        static MapgenType getMapgenType(const std::string &mgname);
        static const char *getMapgenName(MapgenType mgtype);
-       static Mapgen *createMapgen(MapgenType mgtype, int mgid,
-               MapgenParams *params, EmergeManager *emerge);
+       static Mapgen *createMapgen(MapgenType mgtype, MapgenParams *params,
+               EmergeManager *emerge);
        static MapgenParams *createMapgenParams(MapgenType mgtype);
        static void getMapgenNames(std::vector<const char *> *mgnames, bool include_hidden);
 
@@ -241,7 +244,7 @@ public:
        virtual void generateBiomes();
        virtual void dustTopNodes();
        virtual void generateCavesNoiseIntersection(s16 max_stone_y);
-       virtual void generateCavesRandomWalk(s16 max_stone_y, s16 large_cave_depth);
+       virtual void generateCavesRandomWalk(s16 max_stone_y, s16 large_cave_ymax);
        virtual bool generateCavernsNoise(s16 max_stone_y);
        virtual void generateDungeons(s16 max_stone_y);
 
@@ -256,21 +259,11 @@ protected:
        v3s16 full_node_min;
        v3s16 full_node_max;
 
-       // Content required for generateBiomes
        content_t c_stone;
-       content_t c_desert_stone;
-       content_t c_sandstone;
        content_t c_water_source;
        content_t c_river_water_source;
        content_t c_lava_source;
-
-       // Content required for generateDungeons
        content_t c_cobble;
-       content_t c_stair_cobble;
-       content_t c_mossycobble;
-       content_t c_stair_desert_stone;
-       content_t c_sandstonebrick;
-       content_t c_stair_sandstone_block;
 
        int ystride;
        int zstride;
@@ -282,9 +275,17 @@ protected:
        NoiseParams np_cave1;
        NoiseParams np_cave2;
        NoiseParams np_cavern;
+       NoiseParams np_dungeons;
        float cave_width;
        float cavern_limit;
        float cavern_taper;
        float cavern_threshold;
-       int lava_depth;
+       int small_cave_num_min;
+       int small_cave_num_max;
+       int large_cave_num_min;
+       int large_cave_num_max;
+       float large_cave_flooded;
+       s16 large_cave_depth;
+       s16 dungeon_ymin;
+       s16 dungeon_ymax;
 };