X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmapgen.h;h=3c897e02315a58c58b3ea5d42d2e4d826070fb22;hb=58e6d25e033c76dc91aaac18fdeda92ac23fe0e1;hp=47a7204bc24b9697fa0370a88b74b04b7ce3160b;hpb=83cc8823354c1c476498ddf35052f403ea247e80;p=oweals%2Fminetest.git diff --git a/src/mapgen.h b/src/mapgen.h index 47a7204bc..3c897e023 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -28,16 +28,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "noise.h" #include "settings.h" +#define DEFAULT_MAPGEN "v6" + /////////////////// Mapgen flags #define MG_TREES 0x01 #define MG_CAVES 0x02 #define MG_DUNGEONS 0x04 -#define MGV6_JUNGLES 0x08 -#define MGV6_BIOME_BLEND 0x10 -#define MG_FLAT 0x20 -#define MG_NOLIGHT 0x40 -#define MGV7_MOUNTAINS 0x80 -#define MGV7_RIDGES 0x100 +#define MG_FLAT 0x08 +#define MG_LIGHT 0x10 /////////////////// Ore generation flags // Use absolute value of height to determine ore placement @@ -53,9 +51,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #define DECO_PLACE_CENTER_Y 2 #define DECO_PLACE_CENTER_Z 4 +#define ORE_RANGE_ACTUAL 1 +#define ORE_RANGE_MIRROR 2 + +#define NUM_GEN_NOTIFY 6 + + extern FlagDesc flagdesc_mapgen[]; extern FlagDesc flagdesc_ore[]; extern FlagDesc flagdesc_deco_schematic[]; +extern FlagDesc flagdesc_gennotify[]; class BiomeDefManager; class Biome; @@ -67,6 +72,38 @@ struct BlockMakeData; class VoxelArea; class Map; + +enum MapgenObject { + MGOBJ_VMANIP, + MGOBJ_HEIGHTMAP, + MGOBJ_BIOMEMAP, + MGOBJ_HEATMAP, + MGOBJ_HUMIDMAP, + MGOBJ_GENNOTIFY +}; + +enum GenNotify { + GENNOTIFY_DUNGEON, + GENNOTIFY_TEMPLE, + GENNOTIFY_CAVE_BEGIN, + GENNOTIFY_CAVE_END, + GENNOTIFY_LARGECAVE_BEGIN, + GENNOTIFY_LARGECAVE_END +}; + +enum OreType { + ORE_SCATTER, + ORE_SHEET, + ORE_CLAYLIKE +}; + + +struct MapgenSpecificParams { + virtual void readParams(Settings *settings) = 0; + virtual void writeParams(Settings *settings) = 0; + virtual ~MapgenSpecificParams() {} +}; + struct MapgenParams { std::string mg_name; int chunksize; @@ -74,17 +111,16 @@ struct MapgenParams { int water_level; u32 flags; + MapgenSpecificParams *sparams; + MapgenParams() { - mg_name = "v6"; + mg_name = DEFAULT_MAPGEN; seed = 0; water_level = 1; chunksize = 5; - flags = MG_TREES | MG_CAVES | MGV6_BIOME_BLEND; + flags = MG_TREES | MG_CAVES | MG_LIGHT; + sparams = NULL; } - - virtual bool readParams(Settings *settings) { return true; } - virtual void writeParams(Settings *settings) {} - virtual ~MapgenParams() {} }; class Mapgen { @@ -100,8 +136,11 @@ public: u8 *biomemap; v3s16 csize; + u32 gennotify; + std::vector *gen_notifications[NUM_GEN_NOTIFY]; + Mapgen(); - virtual ~Mapgen() {} + virtual ~Mapgen(); s16 findGroundLevelFull(v2s16 p2d); s16 findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax); @@ -119,27 +158,10 @@ public: struct MapgenFactory { virtual Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge) = 0; - virtual MapgenParams *createMapgenParams() = 0; + virtual MapgenSpecificParams *createMapgenParams() = 0; virtual ~MapgenFactory() {} }; -enum MapgenObject { - MGOBJ_VMANIP, - MGOBJ_HEIGHTMAP, - MGOBJ_BIOMEMAP, - MGOBJ_HEATMAP, - MGOBJ_HUMIDMAP -}; - -enum OreType { - ORE_SCATTER, - ORE_SHEET, - ORE_CLAYLIKE -}; - -#define ORE_RANGE_ACTUAL 1 -#define ORE_RANGE_MIRROR 2 - class Ore { public: std::string ore_name; @@ -187,7 +209,7 @@ Ore *createOre(OreType type); enum DecorationType { - DECO_SIMPLE, + DECO_SIMPLE = 1, DECO_SCHEMATIC, DECO_LSYSTEM }; @@ -291,7 +313,7 @@ public: void saveSchematicFile(INodeDefManager *ndef); bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); - void placeStructure(Map *map, v3s16 p); + void placeStructure(Map *map, v3s16 p, bool force_placement); void applyProbabilities(v3s16 p0, std::vector > *plist, std::vector > *splist);