This commit is contained in:
rubenwardy 2016-02-27 04:20:45 +00:00
parent 61510d0f7a
commit 192ddf052b
52 changed files with 800 additions and 153 deletions

View file

@ -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

693
mods/default/mapgen.lua Normal file → Executable file
View 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({
ore_type = "blob",
ore = "default:clay",
wherein = {"default:sand"},
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_min = -15,
y_max = 0,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = {x = 5, y = 5, z = 5},
seed = -316,
octaves = 1,
persist = 0.0
},
})
-- Sand
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
ore = "default:sand", ore = "default:sand",
wherein = {"default:stone"}, wherein = {"default:stone", "default:sandstone",
clust_scarcity = 24 * 24 * 24, "default:desert_stone"},
clust_size = 7, clust_scarcity = 16 * 16 * 16,
y_min = -63, clust_size = 5,
y_min = -31,
y_max = 4, y_max = 4,
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 = 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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

161
mods/tsm_chests/init.lua Normal file → Executable file
View file

@ -78,42 +78,21 @@ 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
--[[ here comes the generation code local r_max = tonumber(minetest.setting_get("barrier"))
the interesting part which involes treasurer comes way below local water_level = tonumber(minetest.setting_get("water_level"))
]] local get_node = minetest.get_node
minetest.register_on_generated(function(minp, maxp, seed) local env = minetest.env
-- get the water level and convert it to a number
local water_level = minetest.setting_get("water_level")
if water_level == nil or type(water_level) ~= "number" then
water_level = 1
else
water_level = tonumber(water_level)
end
-- chests minimum and maximum spawn height local function findGroundLevel(pos, y_min, y_max)
local height_min = water_level + h_min
local height_max = water_level + h_max
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 get_node = minetest.get_node
local env = minetest.env
for i=1, chests_per_chunk do
local pos = {x=math.random(minp.x,maxp.x),z=math.random(minp.z,maxp.z), y=minp.y}
-- Find ground level
local ground = nil local ground = nil
local top = y_max local top = y_max
for y=y_max,y_min,-1 do for y = y_max, y_min, -1 do
local p = {x=pos.x,y=y,z=pos.z} local p = {x=pos.x,y=y,z=pos.z}
local name = get_node(p).name local name = get_node(p).name
if name == "air" or name == "default:water_source" or name == "default:lava_source" then if name == "air" or name == "default:water_source" or name == "default:lava_source" then
@ -129,79 +108,125 @@ minetest.register_on_generated(function(minp, maxp, seed)
break break
end end
end end
return ground
end
if ground~=nil then local function getFacedirs(pos, ground)
local chest_pos = {x=pos.x,y=ground+1, z=pos.z}
if chest_pos.z == 0 then
chest_pos.z = -1
end
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
-->>>> chest spawning starts here <<<<--
-- first: spawn the chest
local chest = {name = "tsm_chests:chest"}
-- secondly: rotate the chest -- secondly: rotate the chest
-- find possible faces -- find possible faces
local xp, xm, zp, zm local xp, xm, zp, zm
xp = minetest.get_node({x=pos.x+1,y=ground+1, z=pos.z}) 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}) 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}) 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}) zm = minetest.get_node({x=pos.x, y=ground+1, z=pos.z-1})
-- Set Facedirs
local facedirs = {} local facedirs = {}
if(xp.name=="air" or xp.name=="default:water_source") then if xp.name=="air" or xp.name=="default:water_source" then
table.insert(facedirs, minetest.dir_to_facedir({x=-1,y=0,z=0})) table.insert(facedirs, minetest.dir_to_facedir({x=-1,y=0,z=0}))
end end
if(xm.name=="air" or xm.name=="default:water_source") then if xm.name=="air" or xm.name=="default:water_source" then
table.insert(facedirs, minetest.dir_to_facedir({x=1,y=0,z=0})) table.insert(facedirs, minetest.dir_to_facedir({x=1,y=0,z=0}))
end end
if(zp.name=="air" or zp.name=="default:water_source") then if zp.name=="air" or zp.name=="default:water_source" then
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=-1})) table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=-1}))
end end
if(zm.name=="air" or zm.name=="default:water_source") then if zm.name=="air" or zm.name=="default:water_source" then
table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=1})) table.insert(facedirs, minetest.dir_to_facedir({x=0,y=0,z=1}))
end 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) -- choose a random face (if possible)
if(#facedirs == 0) then if #facedirs == 0 then
minetest.set_node({x=pos.x,y=ground+1, z=pos.z+1},{name=nn}) 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}) chest.param2 = minetest.dir_to_facedir({x=0,y=0,z=1})
else else
chest.param2 = facedirs[math.floor(math.random(#facedirs))] chest.param2 = facedirs[math.floor(math.random(#facedirs))]
end end
-- Lastly: place the chest -- Lastly: place the chest
minetest.set_node(chest_pos,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. <<<<<<<<<<<<<<-- -- Get treasure
-- determine a random amount of treasures
local treasure_amount = math.ceil(math.random(t_min, t_max)) 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 height = math.abs(h_min) - math.abs(h_max)
local y_norm = (ground+1) - h_min local y_norm = (ground+1) - h_min
local scale = 1 - (y_norm/height) local scale = 1 - (y_norm/height)
local minp = 0 --scale*4 -- minimal preciousness: 0..4 local minp = 0 --scale*4 -- minimal preciousness: 0..4
local maxp = 10 --scale*4+2.1 -- maximum preciousness: 2.1..6.1 local maxp = 10 --scale*4+2.1 -- maximum preciousness: 2.1..6.1
local treasures = treasurer.select_random_treasures(treasure_amount, minp, maxp)
-- now use these values to finally request the treasure(s) -- Add Treasure to Chst
local treasures = treasurer.select_random_treasures(treasure_amount,minp,maxp)
-- Thats it!
-- Get the inventory of the chest to place the treasures in
local meta = minetest.get_meta(chest_pos) local meta = minetest.get_meta(chest_pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
for i=1, #treasures do
inv:set_stack("main", i, treasures[i])
end
end
--[[ Now that we got both our treasures and the chests inventory, --[[ here comes the generation code
lets place the treasures one for one into it. ]] the interesting part which involes treasurer comes way below
for i=1,#treasures do ]]
inv:set_stack("main",i,treasures[i]) minetest.register_on_generated(function(minp, maxp, seed)
end minp = {x=minp.x, y=minp.y, z=minp.z}
maxp = {x=maxp.x, y=maxp.y, z=maxp.z}
if minp.x <= -r_max then
minp.x = -r_max + 1
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
-- chests minimum and maximum spawn height
local height_min = water_level + h_min
local height_max = water_level + h_max
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 attempts = 0
local chests_placed = 0
while chests_placed < chests_per_chunk and attempts < chests_per_chunk + 6 do
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
local ground = findGroundLevel(pos, y_min, y_max)
if ground ~= nil then
local chest_pos = {x = pos.x, y = ground + 1, z = pos.z}
-- Don't spawn at barrier
if chest_pos.z == 0 then
chest_pos.z = -1
end
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
placeChest(pos, chest_pos, ground, nn)
chests_placed = chests_placed + 1
end end
end end
end end
print("Spawned " .. chests_placed .. " chests after " .. attempts .. " attempts!")
end) end)