X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmapgen.h;h=47a7204bc24b9697fa0370a88b74b04b7ce3160b;hb=0a903e69fbd9b19d8d8da0593f31dec5807af566;hp=2287445ee542290706bc5dc8d1dba8c728f8a1f2;hpb=55ecde665d62d3de152c17fa9b463735bee7d0a9;p=minetest.git diff --git a/src/mapgen.h b/src/mapgen.h index 2287445ee..47a7204bc 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -20,13 +20,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MAPGEN_HEADER #define MAPGEN_HEADER -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "util/container.h" // UniqueQueue #include "gamedef.h" +#include "nodedef.h" #include "mapnode.h" #include "noise.h" #include "settings.h" -#include /////////////////// Mapgen flags #define MG_TREES 0x01 @@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc., /////////////////// Ore generation flags // Use absolute value of height to determine ore placement -#define OREFLAG_ABSHEIGHT 0x01 +#define OREFLAG_ABSHEIGHT 0x01 // Use 3d noise to get density of ore placement, instead of just the position #define OREFLAG_DENSITY 0x02 // not yet implemented // For claylike ore types, place ore if the number of surrounding @@ -63,7 +63,6 @@ class EmergeManager; class MapBlock; class ManualMapVoxelManipulator; class VoxelManipulator; -class INodeDefManager; struct BlockMakeData; class VoxelArea; class Map; @@ -82,7 +81,7 @@ struct MapgenParams { chunksize = 5; flags = MG_TREES | MG_CAVES | MGV6_BIOME_BLEND; } - + virtual bool readParams(Settings *settings) { return true; } virtual void writeParams(Settings *settings) {} virtual ~MapgenParams() {} @@ -96,7 +95,7 @@ class Mapgen { int id; ManualMapVoxelManipulator *vm; INodeDefManager *ndef; - + s16 *heightmap; u8 *biomemap; v3s16 csize; @@ -115,11 +114,6 @@ class Mapgen { virtual void makeChunk(BlockMakeData *data) {} virtual int getGroundLevelAtPoint(v2s16 p) { return 0; } - - //Legacy functions for Farmesh (pending removal) - static bool get_have_beach(u64 seed, v2s16 p2d); - static double tree_amount_2d(u64 seed, v2s16 p); - static s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision); }; struct MapgenFactory { @@ -149,9 +143,9 @@ enum OreType { class Ore { public: std::string ore_name; - std::string wherein_name; + std::vector wherein_names; content_t ore; - content_t wherein; // the node to be replaced + std::vector wherein; // the node to be replaced u32 clust_scarcity; // ore cluster has a 1-in-clust_scarcity chance of appearing at a node s16 clust_num_ores; // how many ore nodes are in a chunk s16 clust_size; // how large (in nodes) a chunk of ore is @@ -159,19 +153,18 @@ class Ore { s16 height_max; u8 ore_param2; // to set node-specific attributes u32 flags; // attributes for this ore - float nthresh; // threshhold for noise at which an ore is placed + float nthresh; // threshhold for noise at which an ore is placed NoiseParams *np; // noise for distribution of clusters (NULL for uniform scattering) Noise *noise; - + Ore() { ore = CONTENT_IGNORE; - wherein = CONTENT_IGNORE; np = NULL; noise = NULL; } - + virtual ~Ore(); - + void resolveNodeNames(INodeDefManager *ndef); void placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); virtual void generate(ManualMapVoxelManipulator *vm, int seed, @@ -206,7 +199,7 @@ struct CutoffData { //v3s16 p; //v3s16 size; //s16 height; - + CutoffData(s16 x, s16 y, s16 z, s16 h) { p = v3s16(x, y, z); height = h; @@ -216,24 +209,26 @@ struct CutoffData { class Decoration { public: + INodeDefManager *ndef; + int mapseed; std::string place_on_name; content_t c_place_on; s16 sidelen; float fill_ratio; NoiseParams *np; - + std::set biomes; //std::list cutoffs; //JMutex cutoff_mutex; Decoration(); virtual ~Decoration(); - + virtual void resolveNodeNames(INodeDefManager *ndef); void placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); void placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax); - + virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p) = 0; virtual int getHeight() = 0; virtual std::string getName() = 0; @@ -248,12 +243,12 @@ class DecoSimple : public Decoration { s16 deco_height; s16 deco_height_max; s16 nspawnby; - + std::vector decolist_names; std::vector c_decolist; ~DecoSimple() {} - + void resolveNodeNames(INodeDefManager *ndef); virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p); virtual int getHeight(); @@ -261,44 +256,45 @@ class DecoSimple : public Decoration { }; #define MTSCHEM_FILE_SIGNATURE 0x4d54534d // 'MTSM' +#define MTSCHEM_FILE_VER_HIGHEST_READ 3 +#define MTSCHEM_FILE_VER_HIGHEST_WRITE 3 -enum Rotation { - ROTATE_0, - ROTATE_90, - ROTATE_180, - ROTATE_270, - ROTATE_RAND, -}; +#define MTSCHEM_PROB_NEVER 0x00 +#define MTSCHEM_PROB_ALWAYS 0xFF class DecoSchematic : public Decoration { public: std::string filename; - + std::vector *node_names; std::vector c_nodes; + std::map replacements; u32 flags; Rotation rotation; v3s16 size; MapNode *schematic; + u8 *slice_probs; DecoSchematic(); ~DecoSchematic(); - + void resolveNodeNames(INodeDefManager *ndef); virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p); virtual int getHeight(); virtual std::string getName(); - + void blitToVManip(v3s16 p, ManualMapVoxelManipulator *vm, - int rot, bool force_placement); - + Rotation rot, bool force_placement); + bool loadSchematicFile(); void saveSchematicFile(INodeDefManager *ndef); - + bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2); void placeStructure(Map *map, v3s16 p); - void applyProbabilities(std::vector > *plist, v3s16 p0); + void applyProbabilities(v3s16 p0, + std::vector > *plist, + std::vector > *splist); }; void build_nnlist_and_update_ids(MapNode *nodes, u32 nodecount,