-DungeonGen::DungeonGen(INodeDefManager *ndef, u64 seed, s16 waterlevel) {
- this->ndef = ndef;
- this->mapseed = seed;
- this->water_level = waterlevel;
-
- np_rarity = &nparams_dungeon_rarity;
- np_wetness = &nparams_dungeon_wetness;
- np_density = &nparams_dungeon_density;
- /*
- cid_water_source = ndef->getId("mapgen_water_source");
- cid_cobble = ndef->getId("mapgen_cobble");
- cid_mossycobble = ndef->getId("mapgen_mossycobble");
- cid_torch = ndef->getId("default:torch");
- */
+DungeonGen::DungeonGen(INodeDefManager *ndef,
+ GenerateNotifier *gennotify, DungeonParams *dparams)
+{
+ assert(ndef);
+
+ this->ndef = ndef;
+ this->gennotify = gennotify;
+
+#ifdef DGEN_USE_TORCHES
+ c_torch = ndef->getId("default:torch");
+#endif
+
+ if (dparams) {
+ memcpy(&dp, dparams, sizeof(dp));
+ } else {
+ // Default dungeon parameters
+ dp.seed = 0;
+
+ dp.c_water = ndef->getId("mapgen_water_source");
+ dp.c_river_water = ndef->getId("mapgen_river_water_source");
+ dp.c_wall = ndef->getId("mapgen_cobble");
+ dp.c_alt_wall = ndef->getId("mapgen_mossycobble");
+ dp.c_stair = ndef->getId("mapgen_stair_cobble");
+
+ if (dp.c_river_water == CONTENT_IGNORE)
+ dp.c_river_water = ndef->getId("mapgen_water_source");
+
+ dp.diagonal_dirs = false;
+ dp.only_in_ground = true;
+ dp.holesize = v3s16(1, 2, 1);
+ dp.corridor_len_min = 1;
+ dp.corridor_len_max = 13;
+ dp.room_size_min = v3s16(4, 4, 4);
+ dp.room_size_max = v3s16(8, 6, 8);
+ dp.room_size_large_min = v3s16(8, 8, 8);
+ dp.room_size_large_max = v3s16(16, 16, 16);
+ dp.rooms_min = 2;
+ dp.rooms_max = 16;
+ dp.y_min = -MAX_MAP_GENERATION_LIMIT;
+ dp.y_max = MAX_MAP_GENERATION_LIMIT;
+ dp.notifytype = GENNOTIFY_DUNGEON;
+
+ dp.np_density = nparams_dungeon_density;
+ dp.np_alt_wall = nparams_dungeon_alt_wall;
+ }