diff options
Diffstat (limited to 'src/mapgen/mapgen_v6.h')
-rw-r--r-- | src/mapgen/mapgen_v6.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h new file mode 100644 index 000000000..9c8794217 --- /dev/null +++ b/src/mapgen/mapgen_v6.h @@ -0,0 +1,169 @@ +/* +Minetest +Copyright (C) 2010-2015 celeron55, Perttu Ahola <celeron55@gmail.com> +Copyright (C) 2013-2016 kwolekr, Ryan Kwolek <kwolekr@minetest.net> +Copyright (C) 2014-2017 paramat + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "mapgen.h" +#include "noise.h" + +#define MGV6_AVERAGE_MUD_AMOUNT 4 +#define MGV6_DESERT_STONE_BASE -32 +#define MGV6_ICE_BASE 0 +#define MGV6_FREQ_HOT 0.4 +#define MGV6_FREQ_SNOW -0.4 +#define MGV6_FREQ_TAIGA 0.5 +#define MGV6_FREQ_JUNGLE 0.5 + +//////////// Mapgen V6 flags +#define MGV6_JUNGLES 0x01 +#define MGV6_BIOMEBLEND 0x02 +#define MGV6_MUDFLOW 0x04 +#define MGV6_SNOWBIOMES 0x08 +#define MGV6_FLAT 0x10 +#define MGV6_TREES 0x20 + + +extern FlagDesc flagdesc_mapgen_v6[]; + + +enum BiomeV6Type +{ + BT_NORMAL, + BT_DESERT, + BT_JUNGLE, + BT_TUNDRA, + BT_TAIGA, +}; + + +struct MapgenV6Params : public MapgenParams { + u32 spflags = MGV6_JUNGLES | MGV6_SNOWBIOMES | MGV6_TREES | + MGV6_BIOMEBLEND | MGV6_MUDFLOW; + float freq_desert = 0.45f; + float freq_beach = 0.15f; + NoiseParams np_terrain_base; + NoiseParams np_terrain_higher; + NoiseParams np_steepness; + NoiseParams np_height_select; + NoiseParams np_mud; + NoiseParams np_beach; + NoiseParams np_biome; + NoiseParams np_cave; + NoiseParams np_humidity; + NoiseParams np_trees; + NoiseParams np_apple_trees; + + MapgenV6Params(); + ~MapgenV6Params() = default; + + void readParams(const Settings *settings); + void writeParams(Settings *settings) const; +}; + + +class MapgenV6 : public Mapgen { +public: + EmergeManager *m_emerge; + + int ystride; + u32 spflags; + + v3s16 node_min; + v3s16 node_max; + v3s16 full_node_min; + v3s16 full_node_max; + v3s16 central_area_size; + + Noise *noise_terrain_base; + Noise *noise_terrain_higher; + Noise *noise_steepness; + Noise *noise_height_select; + Noise *noise_mud; + Noise *noise_beach; + Noise *noise_biome; + Noise *noise_humidity; + NoiseParams *np_cave; + NoiseParams *np_humidity; + NoiseParams *np_trees; + NoiseParams *np_apple_trees; + float freq_desert; + float freq_beach; + + content_t c_stone; + content_t c_dirt; + content_t c_dirt_with_grass; + content_t c_sand; + content_t c_water_source; + content_t c_lava_source; + content_t c_gravel; + content_t c_desert_stone; + content_t c_desert_sand; + content_t c_dirt_with_snow; + content_t c_snow; + content_t c_snowblock; + content_t c_ice; + + content_t c_cobble; + content_t c_mossycobble; + content_t c_stair_cobble; + content_t c_stair_desert_stone; + + MapgenV6(int mapgenid, MapgenV6Params *params, EmergeManager *emerge); + ~MapgenV6(); + + virtual MapgenType getType() const { return MAPGEN_V6; } + + void makeChunk(BlockMakeData *data); + int getGroundLevelAtPoint(v2s16 p); + int getSpawnLevelAtPoint(v2s16 p); + + float baseTerrainLevel(float terrain_base, float terrain_higher, + float steepness, float height_select); + virtual float baseTerrainLevelFromNoise(v2s16 p); + virtual float baseTerrainLevelFromMap(v2s16 p); + virtual float baseTerrainLevelFromMap(int index); + + s16 find_stone_level(v2s16 p2d); + bool block_is_underground(u64 seed, v3s16 blockpos); + s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision); + + float getHumidity(v2s16 p); + float getTreeAmount(v2s16 p); + bool getHaveAppleTree(v2s16 p); + float getMudAmount(v2s16 p); + virtual float getMudAmount(int index); + bool getHaveBeach(v2s16 p); + bool getHaveBeach(int index); + BiomeV6Type getBiome(v2s16 p); + BiomeV6Type getBiome(int index, v2s16 p); + + u32 get_blockseed(u64 seed, v3s16 p); + + virtual void calculateNoise(); + int generateGround(); + void addMud(); + void flowMud(s16 &mudflow_minpos, s16 &mudflow_maxpos); + void moveMud(u32 remove_index, u32 place_index, + u32 above_remove_index, v2s16 pos, v3s16 em); + void growGrass(); + void placeTreesAndJungleGrass(); + virtual void generateCaves(int max_stone_y); +}; |