New map
|
@ -1,14 +1,15 @@
|
||||||
give_initial_stuff = true
|
give_initial_stuff = true
|
||||||
enable_pvp = true
|
enable_pvp = true
|
||||||
fixed_map_seed = 16790241579520694642
|
fixed_map_seed = 13389864206935783704
|
||||||
mg_name = v6
|
mg_name = v7
|
||||||
mgv6_spflags = nojungles, biomeblend, mudflow, nosnowbiomes, noflat
|
mg_flags = nocaves,nodungeons,light,decorations
|
||||||
map_generation_limit = 160
|
map_generation_limit = 160
|
||||||
vote.kick_vote = false
|
vote.kick_vote = false
|
||||||
barrier = 102
|
barrier = 106
|
||||||
regen_interval = 10
|
regen_interval = 10
|
||||||
regen_amount = 1
|
regen_amount = 1
|
||||||
random_messages_interval = 60
|
random_messages_interval = 60
|
||||||
|
water_level = 43
|
||||||
|
|
||||||
#
|
#
|
||||||
# CTF_PVP_ENGINE
|
# CTF_PVP_ENGINE
|
||||||
|
@ -30,7 +31,7 @@ ctf.friendly_fire = false
|
||||||
ctf.autoalloc_on_joinplayer = true
|
ctf.autoalloc_on_joinplayer = true
|
||||||
|
|
||||||
ctf.match = true
|
ctf.match = true
|
||||||
ctf.match.teams = red, red, -64, 16, 85; blue, blue, 23, 14, -77
|
ctf.match.teams = red, red, 7, 65, 93; blue, blue, -22, 66, -78
|
||||||
ctf.match.build_time = 240
|
ctf.match.build_time = 240
|
||||||
ctf.match.clear_inv = true
|
ctf.match.clear_inv = true
|
||||||
ctf.match.destroy_team = true
|
ctf.match.destroy_team = true
|
||||||
|
|
721
mods/default/mapgen.lua
Normal file → Executable file
|
@ -2,7 +2,6 @@
|
||||||
-- Aliases for map generator outputs
|
-- Aliases for map generator outputs
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
minetest.register_alias("mapgen_stone", "default:stone")
|
minetest.register_alias("mapgen_stone", "default:stone")
|
||||||
minetest.register_alias("mapgen_dirt", "default:dirt")
|
minetest.register_alias("mapgen_dirt", "default:dirt")
|
||||||
minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
|
minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
|
||||||
|
@ -19,15 +18,19 @@ minetest.register_alias("mapgen_snow", "default:snow")
|
||||||
minetest.register_alias("mapgen_ice", "default:ice")
|
minetest.register_alias("mapgen_ice", "default:ice")
|
||||||
minetest.register_alias("mapgen_sandstone", "default:sandstone")
|
minetest.register_alias("mapgen_sandstone", "default:sandstone")
|
||||||
|
|
||||||
|
-- Flora
|
||||||
|
|
||||||
minetest.register_alias("mapgen_tree", "default:tree")
|
minetest.register_alias("mapgen_tree", "default:tree")
|
||||||
minetest.register_alias("mapgen_leaves", "default:leaves")
|
minetest.register_alias("mapgen_leaves", "default:leaves")
|
||||||
minetest.register_alias("mapgen_apple", "default:apple")
|
minetest.register_alias("mapgen_apple", "default:apple")
|
||||||
minetest.register_alias("mapgen_jungletree", "default:jungletree")
|
minetest.register_alias("mapgen_jungletree", "default:jungletree")
|
||||||
minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves")
|
minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves")
|
||||||
minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
|
minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
|
||||||
minetest.register_alias("mapgen_pinetree", "default:pinetree")
|
minetest.register_alias("mapgen_pine_tree", "default:pine_tree")
|
||||||
minetest.register_alias("mapgen_pine_needles", "default:pine_needles")
|
minetest.register_alias("mapgen_pine_needles", "default:pine_needles")
|
||||||
|
|
||||||
|
-- Dungeons
|
||||||
|
|
||||||
minetest.register_alias("mapgen_cobble", "default:cobble")
|
minetest.register_alias("mapgen_cobble", "default:cobble")
|
||||||
minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
|
minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
|
||||||
minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
|
minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
|
||||||
|
@ -39,67 +42,98 @@ minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebr
|
||||||
-- Register ores
|
-- Register ores
|
||||||
--
|
--
|
||||||
|
|
||||||
|
-- All mapgens except singlenode
|
||||||
-- Blob ore first to avoid other ores inside blobs
|
-- Blob ore first to avoid other ores inside blobs
|
||||||
|
|
||||||
function default.register_ores()
|
function default.register_ores()
|
||||||
|
|
||||||
|
-- Clay
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "blob",
|
ore_type = "blob",
|
||||||
ore = "default:sand",
|
ore = "default:clay",
|
||||||
wherein = {"default:stone"},
|
wherein = {"default:sand"},
|
||||||
clust_scarcity = 24 * 24 * 24,
|
clust_scarcity = 16 * 16 * 16,
|
||||||
clust_size = 7,
|
clust_size = 5,
|
||||||
y_min = -63,
|
y_min = -15,
|
||||||
y_max = 4,
|
y_max = 0,
|
||||||
noise_threshhold = 0,
|
noise_threshold = 0.0,
|
||||||
noise_params = {
|
noise_params = {
|
||||||
offset = 0.35,
|
offset = 0.5,
|
||||||
|
scale = 0.2,
|
||||||
|
spread = {x = 5, y = 5, z = 5},
|
||||||
|
seed = -316,
|
||||||
|
octaves = 1,
|
||||||
|
persist = 0.0
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Sand
|
||||||
|
|
||||||
|
minetest.register_ore({
|
||||||
|
ore_type = "blob",
|
||||||
|
ore = "default:sand",
|
||||||
|
wherein = {"default:stone", "default:sandstone",
|
||||||
|
"default:desert_stone"},
|
||||||
|
clust_scarcity = 16 * 16 * 16,
|
||||||
|
clust_size = 5,
|
||||||
|
y_min = -31,
|
||||||
|
y_max = 4,
|
||||||
|
noise_threshold = 0.0,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.5,
|
||||||
scale = 0.2,
|
scale = 0.2,
|
||||||
spread = {x = 5, y = 5, z = 5},
|
spread = {x = 5, y = 5, z = 5},
|
||||||
seed = 2316,
|
seed = 2316,
|
||||||
octaves = 1,
|
octaves = 1,
|
||||||
persist = 0.5
|
persist = 0.0
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Dirt
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "blob",
|
ore_type = "blob",
|
||||||
ore = "default:dirt",
|
ore = "default:dirt",
|
||||||
wherein = {"default:stone"},
|
wherein = {"default:stone", "default:sandstone"},
|
||||||
clust_scarcity = 24 * 24 * 24,
|
clust_scarcity = 16 * 16 * 16,
|
||||||
clust_size = 7,
|
clust_size = 5,
|
||||||
y_min = -63,
|
y_min = -31,
|
||||||
y_max = 31000,
|
y_max = 31000,
|
||||||
noise_threshhold = 0,
|
noise_threshold = 0.0,
|
||||||
noise_params = {
|
noise_params = {
|
||||||
offset = 0.35,
|
offset = 0.5,
|
||||||
scale = 0.2,
|
scale = 0.2,
|
||||||
spread = {x = 5, y = 5, z = 5},
|
spread = {x = 5, y = 5, z = 5},
|
||||||
seed = 17676,
|
seed = 17676,
|
||||||
octaves = 1,
|
octaves = 1,
|
||||||
persist = 0.5
|
persist = 0.0
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Gravel
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "blob",
|
ore_type = "blob",
|
||||||
ore = "default:gravel",
|
ore = "default:gravel",
|
||||||
wherein = {"default:stone"},
|
wherein = {"default:stone"},
|
||||||
clust_scarcity = 24 * 24 * 24,
|
clust_scarcity = 16 * 16 * 16,
|
||||||
clust_size = 7,
|
clust_size = 5,
|
||||||
y_min = -31000,
|
y_min = -31000,
|
||||||
y_max = 31000,
|
y_max = 31000,
|
||||||
noise_threshhold = 0,
|
noise_threshold = 0.0,
|
||||||
noise_params = {
|
noise_params = {
|
||||||
offset = 0.35,
|
offset = 0.5,
|
||||||
scale = 0.2,
|
scale = 0.2,
|
||||||
spread = {x = 5, y = 5, z = 5},
|
spread = {x = 5, y = 5, z = 5},
|
||||||
seed = 766,
|
seed = 766,
|
||||||
octaves = 1,
|
octaves = 1,
|
||||||
persist = 0.5
|
persist = 0.0
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Coal
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_coal",
|
ore = "default:stone_with_coal",
|
||||||
|
@ -122,6 +156,8 @@ function default.register_ores()
|
||||||
y_max = 0,
|
y_max = 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Iron
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_iron",
|
ore = "default:stone_with_iron",
|
||||||
|
@ -166,6 +202,8 @@ function default.register_ores()
|
||||||
y_max = -64,
|
y_max = -64,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
--Mese
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_mese",
|
ore = "default:stone_with_mese",
|
||||||
|
@ -199,6 +237,8 @@ function default.register_ores()
|
||||||
y_max = -1024,
|
y_max = -1024,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Gold
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_gold",
|
ore = "default:stone_with_gold",
|
||||||
|
@ -221,6 +261,8 @@ function default.register_ores()
|
||||||
y_max = -256,
|
y_max = -256,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Diamond
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_diamond",
|
ore = "default:stone_with_diamond",
|
||||||
|
@ -243,6 +285,8 @@ function default.register_ores()
|
||||||
y_max = -256,
|
y_max = -256,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Copper
|
||||||
|
|
||||||
minetest.register_ore({
|
minetest.register_ore({
|
||||||
ore_type = "scatter",
|
ore_type = "scatter",
|
||||||
ore = "default:stone_with_copper",
|
ore = "default:stone_with_copper",
|
||||||
|
@ -271,12 +315,15 @@ end
|
||||||
-- Register biomes
|
-- Register biomes
|
||||||
--
|
--
|
||||||
|
|
||||||
|
-- All mapgens except mgv6 and singlenode
|
||||||
|
|
||||||
function default.register_biomes()
|
function default.register_biomes()
|
||||||
minetest.clear_registered_biomes()
|
minetest.clear_registered_biomes()
|
||||||
|
|
||||||
|
-- Temperate
|
||||||
|
|
||||||
minetest.register_biome({
|
minetest.register_biome({
|
||||||
name = "default:grassland",
|
name = "stone_grassland",
|
||||||
--node_dust = "",
|
--node_dust = "",
|
||||||
node_top = "default:dirt_with_grass",
|
node_top = "default:dirt_with_grass",
|
||||||
depth_top = 1,
|
depth_top = 1,
|
||||||
|
@ -286,25 +333,101 @@ function default.register_biomes()
|
||||||
--node_water_top = "",
|
--node_water_top = "",
|
||||||
--depth_water_top = ,
|
--depth_water_top = ,
|
||||||
--node_water = "",
|
--node_water = "",
|
||||||
y_min = 5,
|
--node_river_water = "",
|
||||||
|
y_min = 50,
|
||||||
y_max = 31000,
|
y_max = 31000,
|
||||||
heat_point = 50,
|
heat_point = 40,
|
||||||
humidity_point = 50,
|
humidity_point = 35,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_biome({
|
minetest.register_biome({
|
||||||
name = "default:grassland_ocean",
|
name = "coniferous_forest",
|
||||||
--node_dust = "",
|
--node_dust = "",
|
||||||
node_top = "default:sand",
|
node_top = "default:dirt_with_grass",
|
||||||
depth_top = 1,
|
depth_top = 1,
|
||||||
node_filler = "default:sand",
|
node_filler = "default:dirt",
|
||||||
depth_filler = 2,
|
depth_filler = 3,
|
||||||
--node_stone = "",
|
--node_stone = "",
|
||||||
--node_water_top = "",
|
--node_water_top = "",
|
||||||
--depth_water_top = ,
|
--depth_water_top = ,
|
||||||
--node_water = "",
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
|
y_min = 44,
|
||||||
|
y_max = 55,
|
||||||
|
heat_point = 40,
|
||||||
|
humidity_point = 65,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "coniferous_forest_ocean",
|
||||||
|
--node_dust = "",
|
||||||
|
node_top = "default:sand",
|
||||||
|
depth_top = 1,
|
||||||
|
node_filler = "default:sand",
|
||||||
|
depth_filler = 3,
|
||||||
|
--node_stone = "",
|
||||||
|
--node_water_top = "",
|
||||||
|
--depth_water_top = ,
|
||||||
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
|
y_min = -112,
|
||||||
|
y_max = 44,
|
||||||
|
heat_point = 40,
|
||||||
|
humidity_point = 65,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "deciduous_forest",
|
||||||
|
--node_dust = "",
|
||||||
|
node_top = "default:dirt_with_grass",
|
||||||
|
depth_top = 1,
|
||||||
|
node_filler = "default:dirt",
|
||||||
|
depth_filler = 3,
|
||||||
|
--node_stone = "",
|
||||||
|
--node_water_top = "",
|
||||||
|
--depth_water_top = ,
|
||||||
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
|
y_min = 44,
|
||||||
|
y_max = 55,
|
||||||
|
heat_point = 60,
|
||||||
|
humidity_point = 65,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "deciduous_forest_ocean",
|
||||||
|
--node_dust = "",
|
||||||
|
node_top = "default:sand",
|
||||||
|
depth_top = 1,
|
||||||
|
node_filler = "default:sand",
|
||||||
|
depth_filler = 3,
|
||||||
|
--node_stone = "",
|
||||||
|
--node_water_top = "",
|
||||||
|
--depth_water_top = ,
|
||||||
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
|
y_min = -112,
|
||||||
|
y_max = 43,
|
||||||
|
heat_point = 60,
|
||||||
|
humidity_point = 65,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Underground
|
||||||
|
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "underground",
|
||||||
|
--node_dust = "",
|
||||||
|
--node_top = "",
|
||||||
|
--depth_top = ,
|
||||||
|
--node_filler = "",
|
||||||
|
--depth_filler = ,
|
||||||
|
--node_stone = "",
|
||||||
|
--node_water_top = "",
|
||||||
|
--depth_water_top = ,
|
||||||
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
y_min = -31000,
|
y_min = -31000,
|
||||||
y_max = 4,
|
y_max = -113,
|
||||||
heat_point = 50,
|
heat_point = 50,
|
||||||
humidity_point = 50,
|
humidity_point = 50,
|
||||||
})
|
})
|
||||||
|
@ -312,11 +435,39 @@ end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Register mgv6 decorations
|
-- Register decorations
|
||||||
--
|
--
|
||||||
|
|
||||||
|
-- Mgv6
|
||||||
|
|
||||||
function default.register_mgv6_decorations()
|
function default.register_mgv6_decorations()
|
||||||
|
minetest.clear_registered_decorations()
|
||||||
|
|
||||||
|
-- Papyrus
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = -0.3,
|
||||||
|
scale = 0.7,
|
||||||
|
spread = {x = 100, y = 100, z = 100},
|
||||||
|
seed = 354,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.7
|
||||||
|
},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = 1,
|
||||||
|
decoration = "default:papyrus",
|
||||||
|
height = 2,
|
||||||
|
height_max = 4,
|
||||||
|
spawn_by = "default:water_source",
|
||||||
|
num_spawn_by = 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Cacti
|
||||||
|
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
place_on = {"default:desert_sand"},
|
place_on = {"default:desert_sand"},
|
||||||
|
@ -335,16 +486,485 @@ function default.register_mgv6_decorations()
|
||||||
height = 3,
|
height = 3,
|
||||||
height_max = 4,
|
height_max = 4,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Long grasses
|
||||||
|
|
||||||
|
for length = 1, 5 do
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0,
|
||||||
|
scale = 0.007,
|
||||||
|
spread = {x = 100, y = 100, z = 100},
|
||||||
|
seed = 329,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = 30,
|
||||||
|
decoration = "default:grass_"..length,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Dry shrubs
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:desert_sand", "default:dirt_with_snow"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0,
|
||||||
|
scale = 0.035,
|
||||||
|
spread = {x = 100, y = 100, z = 100},
|
||||||
|
seed = 329,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = 30,
|
||||||
|
decoration = "default:dry_shrub",
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- All mapgens except mgv6 and singlenode
|
||||||
|
|
||||||
|
local function register_grass_decoration(offset, scale, length)
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dirt_with_grass", "default:sand"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = offset,
|
||||||
|
scale = scale,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 329,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
biomes = {"stone_grassland", "sandstone_grassland",
|
||||||
|
"deciduous_forest", "coniferous_forest",
|
||||||
|
"stone_grassland_dunes", "sandstone_grassland_dunes",
|
||||||
|
"coniferous_forest_dunes"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = 31000,
|
||||||
|
decoration = "default:grass_"..length,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local MAX_TREE_H = 60
|
||||||
|
local MAX_GRASS_H = 63
|
||||||
|
|
||||||
|
local function register_dry_grass_decoration(offset, scale, length)
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dirt_with_dry_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = offset,
|
||||||
|
scale = scale,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 329,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
biomes = {"savanna"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_GRASS_H,
|
||||||
|
decoration = "default:dry_grass_"..length,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function default.register_decorations()
|
||||||
|
minetest.clear_registered_decorations()
|
||||||
|
|
||||||
|
-- Apple tree and log
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.04,
|
||||||
|
scale = 0.02,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"deciduous_forest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
|
||||||
|
flags = "place_center_x, place_center_z",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.002,
|
||||||
|
scale = 0.001,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"deciduous_forest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = {
|
||||||
|
size = { x = 3, y = 3, z = 1},
|
||||||
|
data = {
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "default:tree", param2 = 12, prob = 191 },
|
||||||
|
{ name = "default:tree", param2 = 12 },
|
||||||
|
{ name = "default:tree", param2 = 12, prob = 127 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "flowers:mushroom_brown", prob = 63 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flags = "place_center_x",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Jungle tree and log
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_grass", "default:dirt"},
|
||||||
|
sidelen = 40,
|
||||||
|
fill_ratio = 0.035,
|
||||||
|
biomes = {"rainforest", "rainforest_swamp"},
|
||||||
|
y_min = 0,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
|
||||||
|
flags = "place_center_x, place_center_z",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Taiga and temperate coniferous forest pine tree and log
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.04,
|
||||||
|
scale = 0.02,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"taiga", "coniferous_forest"},
|
||||||
|
y_min = 2,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
|
||||||
|
flags = "place_center_x, place_center_z",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
|
||||||
|
sidelen = 80,
|
||||||
|
fill_ratio = 0.003,
|
||||||
|
biomes = {"taiga", "coniferous_forest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = {
|
||||||
|
size = { x = 3, y = 3, z = 1},
|
||||||
|
data = {
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "default:pine_tree", param2 = 12, prob = 191 },
|
||||||
|
{ name = "default:pine_tree", param2 = 12 },
|
||||||
|
{ name = "default:pine_tree", param2 = 12, prob = 127 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "flowers:mushroom_red", prob = 63 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flags = "place_center_x",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Acacia tree and log
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_dry_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0,
|
||||||
|
scale = 0.002,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"savanna"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
|
||||||
|
flags = "place_center_x, place_center_z",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_dry_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0,
|
||||||
|
scale = 0.001,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"savanna"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = {
|
||||||
|
size = { x = 3, y = 2, z = 1},
|
||||||
|
data = {
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "default:acacia_tree", param2 = 12, prob = 191 },
|
||||||
|
{ name = "default:acacia_tree", param2 = 12 },
|
||||||
|
{ name = "default:acacia_tree", param2 = 12, prob = 127 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flags = "place_center_x",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Aspen tree and log
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.0,
|
||||||
|
scale = -0.03,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"deciduous_forest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
|
||||||
|
flags = "place_center_x, place_center_z",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.0,
|
||||||
|
scale = -0.0015,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"deciduous_forest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = {
|
||||||
|
size = { x = 3, y = 3, z = 1},
|
||||||
|
data = {
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
{ name = "default:aspen_tree", param2 = 12 },
|
||||||
|
{ name = "default:aspen_tree", param2 = 12 },
|
||||||
|
{ name = "default:aspen_tree", param2 = 12, prob = 127 },
|
||||||
|
{ name = "flowers:mushroom_red", prob = 63 },
|
||||||
|
{ name = "flowers:mushroom_brown", prob = 63 },
|
||||||
|
{ name = "air", prob = 0 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
flags = "place_center_x",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
-- Large cactus
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:desert_sand"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = -0.0003,
|
||||||
|
scale = 0.0009,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 230,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
biomes = {"desert"},
|
||||||
|
y_min = 5,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
|
||||||
|
flags = "place_center_x",
|
||||||
|
rotation = "random",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Cactus
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:desert_sand"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = -0.0003,
|
||||||
|
scale = 0.0009,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 230,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
biomes = {"desert"},
|
||||||
|
y_min = 5,
|
||||||
|
y_max = MAX_TREE_H,
|
||||||
|
decoration = "default:cactus",
|
||||||
|
height = 2,
|
||||||
|
height_max = 5,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Papyrus
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "schematic",
|
||||||
|
place_on = {"default:dirt"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = -0.3,
|
||||||
|
scale = 0.7,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 354,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.7
|
||||||
|
},
|
||||||
|
biomes = {"savanna_swamp"},
|
||||||
|
y_min = 0,
|
||||||
|
y_max = 0,
|
||||||
|
schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Grasses
|
||||||
|
|
||||||
|
register_grass_decoration(-0.03, 0.09, 5)
|
||||||
|
register_grass_decoration(-0.015, 0.075, 4)
|
||||||
|
register_grass_decoration(0, 0.06, 3)
|
||||||
|
register_grass_decoration(0.015, 0.045, 2)
|
||||||
|
register_grass_decoration(0.03, 0.03, 1)
|
||||||
|
|
||||||
|
-- Dry grasses
|
||||||
|
|
||||||
|
register_dry_grass_decoration(0.01, 0.05, 5)
|
||||||
|
register_dry_grass_decoration(0.03, 0.03, 4)
|
||||||
|
register_dry_grass_decoration(0.05, 0.01, 3)
|
||||||
|
register_dry_grass_decoration(0.07, -0.01, 2)
|
||||||
|
register_dry_grass_decoration(0.09, -0.03, 1)
|
||||||
|
|
||||||
|
-- Junglegrass
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:dirt_with_grass"},
|
||||||
|
sidelen = 80,
|
||||||
|
fill_ratio = 0.1,
|
||||||
|
biomes = {"rainforest"},
|
||||||
|
y_min = 1,
|
||||||
|
y_max = MAX_GRASS_H,
|
||||||
|
decoration = "default:junglegrass",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Dry shrub
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"default:desert_sand", "default:dirt_with_snow"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0,
|
||||||
|
scale = 0.02,
|
||||||
|
spread = {x = 200, y = 200, z = 200},
|
||||||
|
seed = 329,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.6
|
||||||
|
},
|
||||||
|
biomes = {"desert", "tundra"},
|
||||||
|
y_min = 2,
|
||||||
|
y_max = MAX_GRASS_H,
|
||||||
|
decoration = "default:dry_shrub",
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Register decorations
|
-- Generate nyan cats
|
||||||
--
|
--
|
||||||
|
|
||||||
|
-- All mapgens except singlenode
|
||||||
|
|
||||||
function default.register_decorations()
|
function default.make_nyancat(pos, facedir, length)
|
||||||
|
local tailvec = {x = 0, y = 0, z = 0}
|
||||||
|
if facedir == 0 then
|
||||||
|
tailvec.z = 1
|
||||||
|
elseif facedir == 1 then
|
||||||
|
tailvec.x = 1
|
||||||
|
elseif facedir == 2 then
|
||||||
|
tailvec.z = -1
|
||||||
|
elseif facedir == 3 then
|
||||||
|
tailvec.x = -1
|
||||||
|
else
|
||||||
|
facedir = 0
|
||||||
|
tailvec.z = 1
|
||||||
|
end
|
||||||
|
local p = {x = pos.x, y = pos.y, z = pos.z}
|
||||||
|
minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
|
||||||
|
for i = 1, length do
|
||||||
|
p.x = p.x + tailvec.x
|
||||||
|
p.z = p.z + tailvec.z
|
||||||
|
minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function default.generate_nyancats(minp, maxp, seed)
|
||||||
|
local height_min = -31000
|
||||||
|
local height_max = -32
|
||||||
|
if maxp.y < height_min or minp.y > height_max then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local y_min = math.max(minp.y, height_min)
|
||||||
|
local y_max = math.min(maxp.y, height_max)
|
||||||
|
local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
|
||||||
|
local pr = PseudoRandom(seed + 9324342)
|
||||||
|
local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
|
||||||
|
for i = 1, max_num_nyancats do
|
||||||
|
if pr:next(0, 1000) == 0 then
|
||||||
|
local x0 = pr:next(minp.x, maxp.x)
|
||||||
|
local y0 = pr:next(minp.y, maxp.y)
|
||||||
|
local z0 = pr:next(minp.z, maxp.z)
|
||||||
|
local p0 = {x = x0, y = y0, z = z0}
|
||||||
|
default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -352,7 +972,6 @@ end
|
||||||
-- Detect mapgen to select functions
|
-- Detect mapgen to select functions
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
-- Mods using singlenode mapgen can call these functions to enable
|
-- Mods using singlenode mapgen can call these functions to enable
|
||||||
-- the use of minetest.generate_ores or minetest.generate_decorations
|
-- the use of minetest.generate_ores or minetest.generate_decorations
|
||||||
|
|
||||||
|
@ -360,8 +979,10 @@ local mg_params = minetest.get_mapgen_params()
|
||||||
if mg_params.mgname == "v6" then
|
if mg_params.mgname == "v6" then
|
||||||
default.register_ores()
|
default.register_ores()
|
||||||
default.register_mgv6_decorations()
|
default.register_mgv6_decorations()
|
||||||
|
minetest.register_on_generated(default.generate_nyancats)
|
||||||
elseif mg_params.mgname ~= "singlenode" then
|
elseif mg_params.mgname ~= "singlenode" then
|
||||||
default.register_ores()
|
|
||||||
default.register_biomes()
|
default.register_biomes()
|
||||||
|
default.register_ores()
|
||||||
default.register_decorations()
|
default.register_decorations()
|
||||||
|
minetest.register_on_generated(default.generate_nyancats)
|
||||||
end
|
end
|
||||||
|
|
BIN
mods/default/schematics/acacia_tree.mts
Executable file
BIN
mods/default/schematics/acacia_tree_from_sapling.mts
Executable file
BIN
mods/default/schematics/apple_tree.mts
Executable file
BIN
mods/default/schematics/apple_tree_from_sapling.mts
Executable file
BIN
mods/default/schematics/aspen_tree.mts
Executable file
BIN
mods/default/schematics/aspen_tree_from_sapling.mts
Executable file
BIN
mods/default/schematics/jungle_tree.mts
Executable file
BIN
mods/default/schematics/jungle_tree_from_sapling.mts
Executable file
BIN
mods/default/schematics/large_cactus.mts
Executable file
BIN
mods/default/schematics/papyrus.mts
Executable file
BIN
mods/default/schematics/pine_tree.mts
Executable file
BIN
mods/default/schematics/pine_tree_from_sapling.mts
Executable file
BIN
mods/default/textures/character.png
Executable file
After Width: | Height: | Size: 2.7 KiB |
BIN
mods/default/textures/default_acacia_leaves.png
Executable file
After Width: | Height: | Size: 444 B |
BIN
mods/default/textures/default_acacia_sapling.png
Executable file
After Width: | Height: | Size: 359 B |
BIN
mods/default/textures/default_acacia_tree.png
Executable file
After Width: | Height: | Size: 682 B |
BIN
mods/default/textures/default_acacia_tree_top.png
Executable file
After Width: | Height: | Size: 731 B |
BIN
mods/default/textures/default_acacia_wood.png
Executable file
After Width: | Height: | Size: 261 B |
BIN
mods/default/textures/default_aspen_leaves.png
Executable file
After Width: | Height: | Size: 761 B |
BIN
mods/default/textures/default_aspen_sapling.png
Executable file
After Width: | Height: | Size: 320 B |
BIN
mods/default/textures/default_aspen_tree.png
Executable file
After Width: | Height: | Size: 695 B |
BIN
mods/default/textures/default_aspen_tree_top.png
Executable file
After Width: | Height: | Size: 656 B |
BIN
mods/default/textures/default_aspen_wood.png
Executable file
After Width: | Height: | Size: 373 B |
BIN
mods/default/textures/default_book_written.png
Executable file
After Width: | Height: | Size: 228 B |
BIN
mods/default/textures/default_chest_front.png
Executable file
After Width: | Height: | Size: 423 B |
BIN
mods/default/textures/default_chest_lock.png
Executable file
After Width: | Height: | Size: 469 B |
BIN
mods/default/textures/default_chest_side.png
Executable file
After Width: | Height: | Size: 375 B |
BIN
mods/default/textures/default_chest_top.png
Executable file
After Width: | Height: | Size: 422 B |
BIN
mods/default/textures/default_dry_grass.png
Executable file
After Width: | Height: | Size: 303 B |
BIN
mods/default/textures/default_dry_grass_1.png
Executable file
After Width: | Height: | Size: 219 B |
BIN
mods/default/textures/default_dry_grass_2.png
Executable file
After Width: | Height: | Size: 265 B |
BIN
mods/default/textures/default_dry_grass_3.png
Executable file
After Width: | Height: | Size: 295 B |
BIN
mods/default/textures/default_dry_grass_4.png
Executable file
After Width: | Height: | Size: 316 B |
BIN
mods/default/textures/default_dry_grass_5.png
Executable file
After Width: | Height: | Size: 339 B |
BIN
mods/default/textures/default_dry_grass_side.png
Executable file
After Width: | Height: | Size: 285 B |
BIN
mods/default/textures/default_dry_shrub.png
Executable file
After Width: | Height: | Size: 148 B |
BIN
mods/default/textures/default_footprint.png
Executable file
After Width: | Height: | Size: 466 B |
BIN
mods/default/textures/default_grass_1.png
Executable file
After Width: | Height: | Size: 2.9 KiB |
BIN
mods/default/textures/default_grass_2.png
Executable file
After Width: | Height: | Size: 2.9 KiB |
BIN
mods/default/textures/default_grass_3.png
Executable file
After Width: | Height: | Size: 3 KiB |
BIN
mods/default/textures/default_grass_4.png
Executable file
After Width: | Height: | Size: 3.1 KiB |
BIN
mods/default/textures/default_grass_5.png
Executable file
After Width: | Height: | Size: 3.2 KiB |
BIN
mods/default/textures/default_junglegrass.png
Executable file
After Width: | Height: | Size: 197 B |
BIN
mods/default/textures/default_jungleleaves_simple.png
Executable file
After Width: | Height: | Size: 430 B |
BIN
mods/default/textures/default_leaves_simple.png
Executable file
After Width: | Height: | Size: 817 B |
BIN
mods/default/textures/default_obsidian_glass_detail.png
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
mods/default/textures/default_pine_tree.png
Executable file
After Width: | Height: | Size: 280 B |
BIN
mods/default/textures/default_pine_tree_top.png
Executable file
After Width: | Height: | Size: 574 B |
BIN
mods/default/textures/default_pine_wood.png
Executable file
After Width: | Height: | Size: 223 B |
215
mods/tsm_chests/init.lua
Normal file → Executable file
|
@ -78,22 +78,116 @@ minetest.register_node("tsm_chests:chest", {
|
||||||
|
|
||||||
--[[ here are some configuration variables ]]
|
--[[ here are some configuration variables ]]
|
||||||
|
|
||||||
local chests_per_chunk = 5 -- number of chests per chunk. 15 is a bit high, an actual mod might have a lower number
|
local chests_per_chunk = 6 -- number of chests per chunk. 15 is a bit high, an actual mod might have a lower number
|
||||||
local h_min = -1 -- minimum chest spawning height, relative to water_level
|
local h_min = -1 -- minimum chest spawning height, relative to water_level
|
||||||
local h_max = 15 -- maximum chest spawning height, relative to water_level
|
local h_max = 64-43 -- maximum chest spawning height, relative to water_level
|
||||||
local t_min = 3 -- minimum amount of treasures found in a chest
|
local t_min = 3 -- minimum amount of treasures found in a chest
|
||||||
local t_max = 6 -- maximum amount of treasures found in a chest
|
local t_max = 6 -- maximum amount of treasures found in a chest
|
||||||
|
|
||||||
|
local r_max = tonumber(minetest.setting_get("barrier"))
|
||||||
|
local water_level = tonumber(minetest.setting_get("water_level"))
|
||||||
|
local get_node = minetest.get_node
|
||||||
|
local env = minetest.env
|
||||||
|
|
||||||
|
local function findGroundLevel(pos, y_min, y_max)
|
||||||
|
local ground = nil
|
||||||
|
local top = y_max
|
||||||
|
for y = y_max, y_min, -1 do
|
||||||
|
local p = {x=pos.x,y=y,z=pos.z}
|
||||||
|
local name = get_node(p).name
|
||||||
|
if name == "air" or name == "default:water_source" or name == "default:lava_source" then
|
||||||
|
top = y
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for y=top,y_min,-1 do
|
||||||
|
local p = {x=pos.x,y=y,z=pos.z}
|
||||||
|
local name = get_node(p).name
|
||||||
|
if name ~= "air" and name ~= "default:water_source" and name ~= "default:lava_source" then
|
||||||
|
ground = y
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ground
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getFacedirs(pos, ground)
|
||||||
|
-- secondly: rotate the chest
|
||||||
|
-- find possible faces
|
||||||
|
local xp, xm, zp, zm
|
||||||
|
xp = minetest.get_node({x=pos.x+1, y=ground+1, z=pos.z})
|
||||||
|
xm = minetest.get_node({x=pos.x-1, y=ground+1, z=pos.z})
|
||||||
|
zp = minetest.get_node({x=pos.x, y=ground+1, z=pos.z+1})
|
||||||
|
zm = minetest.get_node({x=pos.x, y=ground+1, z=pos.z-1})
|
||||||
|
|
||||||
|
-- Set Facedirs
|
||||||
|
local facedirs = {}
|
||||||
|
if xp.name=="air" or xp.name=="default:water_source" then
|
||||||
|
table.insert(facedirs, minetest.dir_to_facedir({x=-1,y=0,z=0}))
|
||||||
|
end
|
||||||
|
if xm.name=="air" or xm.name=="default:water_source" then
|
||||||
|
table.insert(facedirs, minetest.dir_to_facedir({x=1,y=0,z=0}))
|
||||||
|
end
|
||||||
|
if zp.name=="air" or zp.name=="default:water_source" then
|
||||||
|
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=-1}))
|
||||||
|
end
|
||||||
|
if zm.name=="air" or zm.name=="default:water_source" then
|
||||||
|
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=1}))
|
||||||
|
end
|
||||||
|
|
||||||
|
return facedirs
|
||||||
|
end
|
||||||
|
|
||||||
|
local function placeChest(pos, chest_pos, ground, nn)
|
||||||
|
local chest = {name = "tsm_chests:chest"}
|
||||||
|
local facedirs = getFacedirs(pos, ground)
|
||||||
|
|
||||||
|
-- choose a random face (if possible)
|
||||||
|
if #facedirs == 0 then
|
||||||
|
minetest.set_node({x=pos.x,y=ground+1, z=pos.z+1}, {name=nn})
|
||||||
|
chest.param2 = minetest.dir_to_facedir({x=0,y=0,z=1})
|
||||||
|
else
|
||||||
|
chest.param2 = facedirs[math.floor(math.random(#facedirs))]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Lastly: place the chest
|
||||||
|
minetest.set_node(chest_pos, chest)
|
||||||
|
|
||||||
|
-- Get treasure
|
||||||
|
local treasure_amount = math.ceil(math.random(t_min, t_max))
|
||||||
|
local height = math.abs(h_min) - math.abs(h_max)
|
||||||
|
local y_norm = (ground+1) - h_min
|
||||||
|
local scale = 1 - (y_norm/height)
|
||||||
|
local minp = 0 --scale*4 -- minimal preciousness: 0..4
|
||||||
|
local maxp = 10 --scale*4+2.1 -- maximum preciousness: 2.1..6.1
|
||||||
|
local treasures = treasurer.select_random_treasures(treasure_amount, minp, maxp)
|
||||||
|
|
||||||
|
-- Add Treasure to Chst
|
||||||
|
local meta = minetest.get_meta(chest_pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
for i=1, #treasures do
|
||||||
|
inv:set_stack("main", i, treasures[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--[[ here comes the generation code
|
--[[ here comes the generation code
|
||||||
the interesting part which involes treasurer comes way below
|
the interesting part which involes treasurer comes way below
|
||||||
]]
|
]]
|
||||||
minetest.register_on_generated(function(minp, maxp, seed)
|
minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
-- get the water level and convert it to a number
|
minp = {x=minp.x, y=minp.y, z=minp.z}
|
||||||
local water_level = minetest.setting_get("water_level")
|
maxp = {x=maxp.x, y=maxp.y, z=maxp.z}
|
||||||
if water_level == nil or type(water_level) ~= "number" then
|
|
||||||
water_level = 1
|
if minp.x <= -r_max then
|
||||||
else
|
minp.x = -r_max + 1
|
||||||
water_level = tonumber(water_level)
|
end
|
||||||
|
if minp.z <= -r_max then
|
||||||
|
minp.z = -r_max + 1
|
||||||
|
end
|
||||||
|
if minp.x >= r_max then
|
||||||
|
minp.x = r_max - 1
|
||||||
|
end
|
||||||
|
if minp.z >= r_max then
|
||||||
|
minp.z = r_max - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
-- chests minimum and maximum spawn height
|
-- chests minimum and maximum spawn height
|
||||||
|
@ -105,103 +199,34 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
end
|
end
|
||||||
local y_min = math.max(minp.y, height_min)
|
local y_min = math.max(minp.y, height_min)
|
||||||
local y_max = math.min(maxp.y, height_max)
|
local y_max = math.min(maxp.y, height_max)
|
||||||
local get_node = minetest.get_node
|
local attempts = 0
|
||||||
local env = minetest.env
|
local chests_placed = 0
|
||||||
for i=1, chests_per_chunk do
|
while chests_placed < chests_per_chunk and attempts < chests_per_chunk + 6 do
|
||||||
local pos = {x=math.random(minp.x,maxp.x),z=math.random(minp.z,maxp.z), y=minp.y}
|
attempts = attempts + 1
|
||||||
|
local pos = {
|
||||||
|
x = math.random(minp.x, maxp.x),
|
||||||
|
y = minp.y,
|
||||||
|
z = math.random(minp.z, maxp.z)
|
||||||
|
}
|
||||||
|
|
||||||
-- Find ground level
|
-- Find ground level
|
||||||
local ground = nil
|
local ground = findGroundLevel(pos, y_min, y_max)
|
||||||
local top = y_max
|
if ground ~= nil then
|
||||||
for y=y_max,y_min,-1 do
|
local chest_pos = {x = pos.x, y = ground + 1, z = pos.z}
|
||||||
local p = {x=pos.x,y=y,z=pos.z}
|
|
||||||
local name = get_node(p).name
|
|
||||||
if name == "air" or name == "default:water_source" or name == "default:lava_source" then
|
|
||||||
top = y
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for y=top,y_min,-1 do
|
|
||||||
local p = {x=pos.x,y=y,z=pos.z}
|
|
||||||
local name = get_node(p).name
|
|
||||||
if name ~= "air" and name ~= "default:water_source" and name ~= "default:lava_source" then
|
|
||||||
ground = y
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if ground~=nil then
|
-- Don't spawn at barrier
|
||||||
local chest_pos = {x=pos.x,y=ground+1, z=pos.z}
|
|
||||||
if chest_pos.z == 0 then
|
if chest_pos.z == 0 then
|
||||||
chest_pos.z = -1
|
chest_pos.z = -1
|
||||||
end
|
end
|
||||||
|
|
||||||
local nn = minetest.get_node(chest_pos).name -- chest node name (before it becomes a chest)
|
local nn = minetest.get_node(chest_pos).name -- chest node name (before it becomes a chest)
|
||||||
if nn == "air" or nn == "default:water_source" then
|
if nn == "air" or nn == "default:water_source" then
|
||||||
-->>>> chest spawning starts here <<<<--
|
placeChest(pos, chest_pos, ground, nn)
|
||||||
|
|
||||||
-- first: spawn the chest
|
chests_placed = chests_placed + 1
|
||||||
local chest = {name = "tsm_chests:chest"}
|
|
||||||
|
|
||||||
-- secondly: rotate the chest
|
|
||||||
-- find possible faces
|
|
||||||
local xp, xm, zp, zm
|
|
||||||
xp = minetest.get_node({x=pos.x+1,y=ground+1, z=pos.z})
|
|
||||||
xm = minetest.get_node({x=pos.x-1,y=ground+1, z=pos.z})
|
|
||||||
zp = minetest.get_node({x=pos.x,y=ground+1, z=pos.z+1})
|
|
||||||
zm = minetest.get_node({x=pos.x,y=ground+1, z=pos.z-1})
|
|
||||||
|
|
||||||
local facedirs = {}
|
|
||||||
if(xp.name=="air" or xp.name=="default:water_source") then
|
|
||||||
table.insert(facedirs, minetest.dir_to_facedir({x=-1,y=0,z=0}))
|
|
||||||
end
|
|
||||||
if(xm.name=="air" or xm.name=="default:water_source") then
|
|
||||||
|
|
||||||
table.insert(facedirs, minetest.dir_to_facedir({x=1,y=0,z=0}))
|
|
||||||
end
|
|
||||||
if(zp.name=="air" or zp.name=="default:water_source") then
|
|
||||||
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=-1}))
|
|
||||||
end
|
|
||||||
if(zm.name=="air" or zm.name=="default:water_source") then
|
|
||||||
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=1}))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- choose a random face (if possible)
|
|
||||||
if(#facedirs == 0) then
|
|
||||||
minetest.set_node({x=pos.x,y=ground+1, z=pos.z+1},{name=nn})
|
|
||||||
chest.param2 = minetest.dir_to_facedir({x=0,y=0,z=1})
|
|
||||||
else
|
|
||||||
chest.param2 = facedirs[math.floor(math.random(#facedirs))]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Lastly: place the chest
|
|
||||||
minetest.set_node(chest_pos,chest)
|
|
||||||
--minetest.chat_send_all("Placed chest! " .. dump(chest_pos))
|
|
||||||
|
|
||||||
--->>>>>>>>>> At this point we are finally going to involve Treasurer. <<<<<<<<<<<<<<--
|
|
||||||
-- determine a random amount of treasures
|
|
||||||
local treasure_amount = math.ceil(math.random(t_min, t_max))
|
|
||||||
|
|
||||||
-- calculate preciousness of treasures based on height. higher = more precious
|
|
||||||
local height = math.abs(h_min) - math.abs(h_max)
|
|
||||||
local y_norm = (ground+1) - h_min
|
|
||||||
local scale = 1 - (y_norm/height)
|
|
||||||
local minp = 0 --scale*4 -- minimal preciousness: 0..4
|
|
||||||
local maxp = 10 --scale*4+2.1 -- maximum preciousness: 2.1..6.1
|
|
||||||
|
|
||||||
-- now use these values to finally request the treasure(s)
|
|
||||||
local treasures = treasurer.select_random_treasures(treasure_amount,minp,maxp)
|
|
||||||
-- That’s it!
|
|
||||||
|
|
||||||
-- Get the inventory of the chest to place the treasures in
|
|
||||||
local meta = minetest.get_meta(chest_pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
|
|
||||||
--[[ Now that we got both our treasures and the chest’s inventory,
|
|
||||||
let’s place the treasures one for one into it. ]]
|
|
||||||
for i=1,#treasures do
|
|
||||||
inv:set_stack("main",i,treasures[i])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
print("Spawned " .. chests_placed .. " chests after " .. attempts .. " attempts!")
|
||||||
end)
|
end)
|
||||||
|
|