]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapgen/dungeongen.h
Don't let HTTP API pass through untrusted function
[dragonfireclient.git] / src / mapgen / dungeongen.h
index e72516de118dcaf1ecfa484f2958f0752fe5b7de..35e6beef5d0fba89f528eb180fa116dc4bcc98ec 100644 (file)
@@ -30,46 +30,62 @@ with this program; if not, write to the Free Software Foundation, Inc.,
                VMANIP_FLAG_DUNGEON_INSIDE|VMANIP_FLAG_DUNGEON_PRESERVE)
 
 class MMVManip;
-class INodeDefManager;
+class NodeDefManager;
 
 v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs);
 v3s16 turn_xz(v3s16 olddir, int t);
-v3s16 random_turn(PseudoRandom &random, v3s16 olddir);
+void random_turn(PseudoRandom &random, v3s16 &dir);
 int dir_to_facedir(v3s16 d);
 
 
 struct DungeonParams {
        s32 seed;
 
-       content_t c_water;
-       content_t c_river_water;
        content_t c_wall;
+       // Randomly scattered alternative wall nodes
        content_t c_alt_wall;
        content_t c_stair;
 
-       bool diagonal_dirs;
+       // 3D noise that determines which c_wall nodes are converted to c_alt_wall
+       NoiseParams np_alt_wall;
+
+       // Number of dungeons generated in mapchunk. All will use the same set of
+       // dungeonparams.
+       u16 num_dungeons;
+       // Dungeons only generate in ground
        bool only_in_ground;
-       v3s16 holesize;
-       u16 corridor_len_min;
-       u16 corridor_len_max;
+       // Number of rooms
+       u16 num_rooms;
+       // Room size random range. Includes walls / floor / ceilng
        v3s16 room_size_min;
        v3s16 room_size_max;
+       // Large room size random range. Includes walls / floor / ceilng
        v3s16 room_size_large_min;
        v3s16 room_size_large_max;
-       u16 rooms_min;
-       u16 rooms_max;
-       s16 y_min;
-       s16 y_max;
+       // Value 0 disables large rooms.
+       // Value 1 results in 1 large room, the first generated room.
+       // Value > 1 makes the first generated room large, all other rooms have a
+       // '1 in value' chance of being large.
+       u16 large_room_chance;
+       // Dimensions of 3D 'brush' that creates corridors.
+       // Dimensions are of the empty space, not including walls / floor / ceilng.
+       // Diagonal corridors must have hole width >=2 to be passable.
+       // Currently, hole width >= 3 causes stair corridor bugs.
+       v3s16 holesize;
+       // Corridor length random range
+       u16 corridor_len_min;
+       u16 corridor_len_max;
+       // Diagonal corridors are possible, 1 in 4 corridors will be diagonal
+       bool diagonal_dirs;
+       // Usually 'GENNOTIFY_DUNGEON', but mapgen v6 uses 'GENNOTIFY_TEMPLE' for
+       // desert dungeons.
        GenNotifyType notifytype;
-
-       NoiseParams np_density;
-       NoiseParams np_alt_wall;
 };
 
 class DungeonGen {
 public:
-       MMVManip *vm;
-       INodeDefManager *ndef;
+       MMVManip *vm = nullptr;
+       const NodeDefManager *ndef;
        GenerateNotifier *gennotify;
 
        u32 blockseed;
@@ -83,11 +99,10 @@ class DungeonGen {
        v3s16 m_pos;
        v3s16 m_dir;
 
-       DungeonGen(INodeDefManager *ndef,
+       DungeonGen(const NodeDefManager *ndef,
                GenerateNotifier *gennotify, DungeonParams *dparams);
 
-       void generate(MMVManip *vm, u32 bseed,
-               v3s16 full_node_min, v3s16 full_node_max);
+       void generate(MMVManip *vm, u32 bseed, v3s16 full_node_min, v3s16 full_node_max);
 
        void makeDungeon(v3s16 start_padding);
        void makeRoom(v3s16 roomsize, v3s16 roomplace);