]> git.lizzy.rs Git - dragonfireclient.git/blob - src/mapgen_v6.h
RemotePlayer/LocalPlayer Player base class proper separation (code cleanup) (patch...
[dragonfireclient.git] / src / mapgen_v6.h
1 /*
2 Minetest
3 Copyright (C) 2010-2015 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MAPGENV6_HEADER
21 #define MAPGENV6_HEADER
22
23 #include "mapgen.h"
24 #include "noise.h"
25
26 #define MGV6_AVERAGE_MUD_AMOUNT 4
27 #define MGV6_DESERT_STONE_BASE -32
28 #define MGV6_ICE_BASE 0
29 #define MGV6_FREQ_HOT 0.4
30 #define MGV6_FREQ_SNOW -0.4
31 #define MGV6_FREQ_TAIGA 0.5
32 #define MGV6_FREQ_JUNGLE 0.5
33
34 //////////// Mapgen V6 flags
35 #define MGV6_JUNGLES    0x01
36 #define MGV6_BIOMEBLEND 0x02
37 #define MGV6_MUDFLOW    0x04
38 #define MGV6_SNOWBIOMES 0x08
39 #define MGV6_FLAT       0x10
40 #define MGV6_TREES      0x20
41
42
43 extern FlagDesc flagdesc_mapgen_v6[];
44
45
46 enum BiomeV6Type
47 {
48         BT_NORMAL,
49         BT_DESERT,
50         BT_JUNGLE,
51         BT_TUNDRA,
52         BT_TAIGA,
53 };
54
55
56 struct MapgenV6Params : public MapgenParams {
57         u32 spflags;
58         float freq_desert;
59         float freq_beach;
60         NoiseParams np_terrain_base;
61         NoiseParams np_terrain_higher;
62         NoiseParams np_steepness;
63         NoiseParams np_height_select;
64         NoiseParams np_mud;
65         NoiseParams np_beach;
66         NoiseParams np_biome;
67         NoiseParams np_cave;
68         NoiseParams np_humidity;
69         NoiseParams np_trees;
70         NoiseParams np_apple_trees;
71
72         MapgenV6Params();
73         ~MapgenV6Params() {}
74
75         void readParams(const Settings *settings);
76         void writeParams(Settings *settings) const;
77 };
78
79
80 class MapgenV6 : public Mapgen {
81 public:
82         EmergeManager *m_emerge;
83
84         int ystride;
85         u32 spflags;
86
87         v3s16 node_min;
88         v3s16 node_max;
89         v3s16 full_node_min;
90         v3s16 full_node_max;
91         v3s16 central_area_size;
92         int volume_nodes;
93
94         Noise *noise_terrain_base;
95         Noise *noise_terrain_higher;
96         Noise *noise_steepness;
97         Noise *noise_height_select;
98         Noise *noise_mud;
99         Noise *noise_beach;
100         Noise *noise_biome;
101         Noise *noise_humidity;
102         NoiseParams *np_cave;
103         NoiseParams *np_humidity;
104         NoiseParams *np_trees;
105         NoiseParams *np_apple_trees;
106         float freq_desert;
107         float freq_beach;
108
109         content_t c_stone;
110         content_t c_dirt;
111         content_t c_dirt_with_grass;
112         content_t c_sand;
113         content_t c_water_source;
114         content_t c_lava_source;
115         content_t c_gravel;
116         content_t c_desert_stone;
117         content_t c_desert_sand;
118         content_t c_dirt_with_snow;
119         content_t c_snow;
120         content_t c_snowblock;
121         content_t c_ice;
122
123         content_t c_cobble;
124         content_t c_mossycobble;
125         content_t c_stair_cobble;
126
127         MapgenV6(int mapgenid, MapgenV6Params *params, EmergeManager *emerge);
128         ~MapgenV6();
129
130         virtual MapgenType getType() const { return MAPGEN_V6; }
131
132         void makeChunk(BlockMakeData *data);
133         int getGroundLevelAtPoint(v2s16 p);
134         int getSpawnLevelAtPoint(v2s16 p);
135
136         float baseTerrainLevel(float terrain_base, float terrain_higher,
137                 float steepness, float height_select);
138         virtual float baseTerrainLevelFromNoise(v2s16 p);
139         virtual float baseTerrainLevelFromMap(v2s16 p);
140         virtual float baseTerrainLevelFromMap(int index);
141
142         s16 find_stone_level(v2s16 p2d);
143         bool block_is_underground(u64 seed, v3s16 blockpos);
144         s16 find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision);
145
146         float getHumidity(v2s16 p);
147         float getTreeAmount(v2s16 p);
148         bool getHaveAppleTree(v2s16 p);
149         float getMudAmount(v2s16 p);
150         virtual float getMudAmount(int index);
151         bool getHaveBeach(v2s16 p);
152         bool getHaveBeach(int index);
153         BiomeV6Type getBiome(v2s16 p);
154         BiomeV6Type getBiome(int index, v2s16 p);
155
156         u32 get_blockseed(u64 seed, v3s16 p);
157
158         virtual void calculateNoise();
159         int generateGround();
160         void addMud();
161         void flowMud(s16 &mudflow_minpos, s16 &mudflow_maxpos);
162         void growGrass();
163         void placeTreesAndJungleGrass();
164         virtual void generateCaves(int max_stone_y);
165 };
166
167 #endif