diff --git a/minetest.conf b/minetest.conf index 8a24057..4f7e502 100644 --- a/minetest.conf +++ b/minetest.conf @@ -1,14 +1,15 @@ give_initial_stuff = true enable_pvp = true -fixed_map_seed = 16790241579520694642 -mg_name = v6 -mgv6_spflags = nojungles, biomeblend, mudflow, nosnowbiomes, noflat +fixed_map_seed = 13389864206935783704 +mg_name = v7 +mg_flags = nocaves,nodungeons,light,decorations map_generation_limit = 160 vote.kick_vote = false -barrier = 102 +barrier = 106 regen_interval = 10 regen_amount = 1 random_messages_interval = 60 +water_level = 43 # # CTF_PVP_ENGINE @@ -30,7 +31,7 @@ ctf.friendly_fire = false ctf.autoalloc_on_joinplayer = 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.clear_inv = true ctf.match.destroy_team = true diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua old mode 100644 new mode 100755 index 5d26273..9cbf169 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -2,7 +2,6 @@ -- Aliases for map generator outputs -- - minetest.register_alias("mapgen_stone", "default:stone") minetest.register_alias("mapgen_dirt", "default:dirt") 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_sandstone", "default:sandstone") +-- Flora + minetest.register_alias("mapgen_tree", "default:tree") minetest.register_alias("mapgen_leaves", "default:leaves") minetest.register_alias("mapgen_apple", "default:apple") minetest.register_alias("mapgen_jungletree", "default:jungletree") minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves") 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") +-- Dungeons + minetest.register_alias("mapgen_cobble", "default:cobble") minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") minetest.register_alias("mapgen_mossycobble", "default:mossycobble") @@ -39,67 +42,98 @@ minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebr -- Register ores -- - +-- All mapgens except singlenode -- Blob ore first to avoid other ores inside blobs function default.register_ores() + + -- Clay + minetest.register_ore({ - ore_type = "blob", - ore = "default:sand", - wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, - y_min = -63, - y_max = 4, - noise_threshhold = 0, - noise_params = { - offset = 0.35, + 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({ + 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, spread = {x = 5, y = 5, z = 5}, seed = 2316, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) + -- Dirt + minetest.register_ore({ - ore_type = "blob", - ore = "default:dirt", - wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, - y_min = -63, - y_max = 31000, - noise_threshhold = 0, - noise_params = { - offset = 0.35, + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone", "default:sandstone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = 17676, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) + -- Gravel + minetest.register_ore({ - ore_type = "blob", - ore = "default:gravel", - wherein = {"default:stone"}, - clust_scarcity = 24 * 24 * 24, - clust_size = 7, - y_min = -31000, - y_max = 31000, - noise_threshhold = 0, - noise_params = { - offset = 0.35, + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, scale = 0.2, spread = {x = 5, y = 5, z = 5}, seed = 766, octaves = 1, - persist = 0.5 + persist = 0.0 }, }) + -- Coal + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_coal", @@ -122,6 +156,8 @@ function default.register_ores() y_max = 0, }) + -- Iron + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_iron", @@ -166,6 +202,8 @@ function default.register_ores() y_max = -64, }) + --Mese + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_mese", @@ -199,6 +237,8 @@ function default.register_ores() y_max = -1024, }) + -- Gold + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_gold", @@ -221,6 +261,8 @@ function default.register_ores() y_max = -256, }) + -- Diamond + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_diamond", @@ -243,6 +285,8 @@ function default.register_ores() y_max = -256, }) + -- Copper + minetest.register_ore({ ore_type = "scatter", ore = "default:stone_with_copper", @@ -271,12 +315,15 @@ end -- Register biomes -- +-- All mapgens except mgv6 and singlenode function default.register_biomes() minetest.clear_registered_biomes() + -- Temperate + minetest.register_biome({ - name = "default:grassland", + name = "stone_grassland", --node_dust = "", node_top = "default:dirt_with_grass", depth_top = 1, @@ -286,25 +333,101 @@ function default.register_biomes() --node_water_top = "", --depth_water_top = , --node_water = "", - y_min = 5, + --node_river_water = "", + y_min = 50, y_max = 31000, - heat_point = 50, - humidity_point = 50, + heat_point = 40, + humidity_point = 35, }) minetest.register_biome({ - name = "default:grassland_ocean", + name = "coniferous_forest", --node_dust = "", - node_top = "default:sand", + node_top = "default:dirt_with_grass", depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, + 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 = 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_max = 4, + y_max = -113, heat_point = 50, humidity_point = 50, }) @@ -312,11 +435,39 @@ end -- --- Register mgv6 decorations +-- Register decorations -- +-- Mgv6 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({ deco_type = "simple", place_on = {"default:desert_sand"}, @@ -335,16 +486,485 @@ function default.register_mgv6_decorations() height = 3, 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 -- --- 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 @@ -352,7 +972,6 @@ end -- Detect mapgen to select functions -- - -- Mods using singlenode mapgen can call these functions to enable -- 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 default.register_ores() default.register_mgv6_decorations() + minetest.register_on_generated(default.generate_nyancats) elseif mg_params.mgname ~= "singlenode" then - default.register_ores() default.register_biomes() + default.register_ores() default.register_decorations() + minetest.register_on_generated(default.generate_nyancats) end diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts new file mode 100755 index 0000000..4732ade Binary files /dev/null and b/mods/default/schematics/acacia_tree.mts differ diff --git a/mods/default/schematics/acacia_tree_from_sapling.mts b/mods/default/schematics/acacia_tree_from_sapling.mts new file mode 100755 index 0000000..23e8e4b Binary files /dev/null and b/mods/default/schematics/acacia_tree_from_sapling.mts differ diff --git a/mods/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts new file mode 100755 index 0000000..ac09b46 Binary files /dev/null and b/mods/default/schematics/apple_tree.mts differ diff --git a/mods/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts new file mode 100755 index 0000000..5d35a15 Binary files /dev/null and b/mods/default/schematics/apple_tree_from_sapling.mts differ diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts new file mode 100755 index 0000000..3bccd4b Binary files /dev/null and b/mods/default/schematics/aspen_tree.mts differ diff --git a/mods/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts new file mode 100755 index 0000000..6bf0f18 Binary files /dev/null and b/mods/default/schematics/aspen_tree_from_sapling.mts differ diff --git a/mods/default/schematics/jungle_tree.mts b/mods/default/schematics/jungle_tree.mts new file mode 100755 index 0000000..329364a Binary files /dev/null and b/mods/default/schematics/jungle_tree.mts differ diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts new file mode 100755 index 0000000..babaa45 Binary files /dev/null and b/mods/default/schematics/jungle_tree_from_sapling.mts differ diff --git a/mods/default/schematics/large_cactus.mts b/mods/default/schematics/large_cactus.mts new file mode 100755 index 0000000..b71077b Binary files /dev/null and b/mods/default/schematics/large_cactus.mts differ diff --git a/mods/default/schematics/papyrus.mts b/mods/default/schematics/papyrus.mts new file mode 100755 index 0000000..a3b6777 Binary files /dev/null and b/mods/default/schematics/papyrus.mts differ diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts new file mode 100755 index 0000000..3a3fa7a Binary files /dev/null and b/mods/default/schematics/pine_tree.mts differ diff --git a/mods/default/schematics/pine_tree_from_sapling.mts b/mods/default/schematics/pine_tree_from_sapling.mts new file mode 100755 index 0000000..629c5da Binary files /dev/null and b/mods/default/schematics/pine_tree_from_sapling.mts differ diff --git a/mods/default/textures/character.png b/mods/default/textures/character.png new file mode 100755 index 0000000..0502178 Binary files /dev/null and b/mods/default/textures/character.png differ diff --git a/mods/default/textures/default_acacia_leaves.png b/mods/default/textures/default_acacia_leaves.png new file mode 100755 index 0000000..626e1b3 Binary files /dev/null and b/mods/default/textures/default_acacia_leaves.png differ diff --git a/mods/default/textures/default_acacia_sapling.png b/mods/default/textures/default_acacia_sapling.png new file mode 100755 index 0000000..07170a0 Binary files /dev/null and b/mods/default/textures/default_acacia_sapling.png differ diff --git a/mods/default/textures/default_acacia_tree.png b/mods/default/textures/default_acacia_tree.png new file mode 100755 index 0000000..169823d Binary files /dev/null and b/mods/default/textures/default_acacia_tree.png differ diff --git a/mods/default/textures/default_acacia_tree_top.png b/mods/default/textures/default_acacia_tree_top.png new file mode 100755 index 0000000..2cf5ef0 Binary files /dev/null and b/mods/default/textures/default_acacia_tree_top.png differ diff --git a/mods/default/textures/default_acacia_wood.png b/mods/default/textures/default_acacia_wood.png new file mode 100755 index 0000000..b5abf1e Binary files /dev/null and b/mods/default/textures/default_acacia_wood.png differ diff --git a/mods/default/textures/default_aspen_leaves.png b/mods/default/textures/default_aspen_leaves.png new file mode 100755 index 0000000..17a708d Binary files /dev/null and b/mods/default/textures/default_aspen_leaves.png differ diff --git a/mods/default/textures/default_aspen_sapling.png b/mods/default/textures/default_aspen_sapling.png new file mode 100755 index 0000000..f8d9136 Binary files /dev/null and b/mods/default/textures/default_aspen_sapling.png differ diff --git a/mods/default/textures/default_aspen_tree.png b/mods/default/textures/default_aspen_tree.png new file mode 100755 index 0000000..933b9ca Binary files /dev/null and b/mods/default/textures/default_aspen_tree.png differ diff --git a/mods/default/textures/default_aspen_tree_top.png b/mods/default/textures/default_aspen_tree_top.png new file mode 100755 index 0000000..fcca038 Binary files /dev/null and b/mods/default/textures/default_aspen_tree_top.png differ diff --git a/mods/default/textures/default_aspen_wood.png b/mods/default/textures/default_aspen_wood.png new file mode 100755 index 0000000..d16fdc9 Binary files /dev/null and b/mods/default/textures/default_aspen_wood.png differ diff --git a/mods/default/textures/default_book_written.png b/mods/default/textures/default_book_written.png new file mode 100755 index 0000000..d843e5f Binary files /dev/null and b/mods/default/textures/default_book_written.png differ diff --git a/mods/default/textures/default_chest_front.png b/mods/default/textures/default_chest_front.png new file mode 100755 index 0000000..85227d8 Binary files /dev/null and b/mods/default/textures/default_chest_front.png differ diff --git a/mods/default/textures/default_chest_lock.png b/mods/default/textures/default_chest_lock.png new file mode 100755 index 0000000..73f46c7 Binary files /dev/null and b/mods/default/textures/default_chest_lock.png differ diff --git a/mods/default/textures/default_chest_side.png b/mods/default/textures/default_chest_side.png new file mode 100755 index 0000000..44a65a4 Binary files /dev/null and b/mods/default/textures/default_chest_side.png differ diff --git a/mods/default/textures/default_chest_top.png b/mods/default/textures/default_chest_top.png new file mode 100755 index 0000000..f1a5cb5 Binary files /dev/null and b/mods/default/textures/default_chest_top.png differ diff --git a/mods/default/textures/default_dry_grass.png b/mods/default/textures/default_dry_grass.png new file mode 100755 index 0000000..03455c3 Binary files /dev/null and b/mods/default/textures/default_dry_grass.png differ diff --git a/mods/default/textures/default_dry_grass_1.png b/mods/default/textures/default_dry_grass_1.png new file mode 100755 index 0000000..5cf68a3 Binary files /dev/null and b/mods/default/textures/default_dry_grass_1.png differ diff --git a/mods/default/textures/default_dry_grass_2.png b/mods/default/textures/default_dry_grass_2.png new file mode 100755 index 0000000..c925ace Binary files /dev/null and b/mods/default/textures/default_dry_grass_2.png differ diff --git a/mods/default/textures/default_dry_grass_3.png b/mods/default/textures/default_dry_grass_3.png new file mode 100755 index 0000000..4e4d84e Binary files /dev/null and b/mods/default/textures/default_dry_grass_3.png differ diff --git a/mods/default/textures/default_dry_grass_4.png b/mods/default/textures/default_dry_grass_4.png new file mode 100755 index 0000000..d315849 Binary files /dev/null and b/mods/default/textures/default_dry_grass_4.png differ diff --git a/mods/default/textures/default_dry_grass_5.png b/mods/default/textures/default_dry_grass_5.png new file mode 100755 index 0000000..871d04c Binary files /dev/null and b/mods/default/textures/default_dry_grass_5.png differ diff --git a/mods/default/textures/default_dry_grass_side.png b/mods/default/textures/default_dry_grass_side.png new file mode 100755 index 0000000..27f4d96 Binary files /dev/null and b/mods/default/textures/default_dry_grass_side.png differ diff --git a/mods/default/textures/default_dry_shrub.png b/mods/default/textures/default_dry_shrub.png new file mode 100755 index 0000000..e8a7f27 Binary files /dev/null and b/mods/default/textures/default_dry_shrub.png differ diff --git a/mods/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png new file mode 100755 index 0000000..41d9546 Binary files /dev/null and b/mods/default/textures/default_footprint.png differ diff --git a/mods/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png new file mode 100755 index 0000000..5ed8388 Binary files /dev/null and b/mods/default/textures/default_grass_1.png differ diff --git a/mods/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png new file mode 100755 index 0000000..0ffa8fc Binary files /dev/null and b/mods/default/textures/default_grass_2.png differ diff --git a/mods/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png new file mode 100755 index 0000000..101fefa Binary files /dev/null and b/mods/default/textures/default_grass_3.png differ diff --git a/mods/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png new file mode 100755 index 0000000..72c721a Binary files /dev/null and b/mods/default/textures/default_grass_4.png differ diff --git a/mods/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png new file mode 100755 index 0000000..7fd6838 Binary files /dev/null and b/mods/default/textures/default_grass_5.png differ diff --git a/mods/default/textures/default_junglegrass.png b/mods/default/textures/default_junglegrass.png new file mode 100755 index 0000000..25abb71 Binary files /dev/null and b/mods/default/textures/default_junglegrass.png differ diff --git a/mods/default/textures/default_jungleleaves_simple.png b/mods/default/textures/default_jungleleaves_simple.png new file mode 100755 index 0000000..689195f Binary files /dev/null and b/mods/default/textures/default_jungleleaves_simple.png differ diff --git a/mods/default/textures/default_leaves_simple.png b/mods/default/textures/default_leaves_simple.png new file mode 100755 index 0000000..e492a32 Binary files /dev/null and b/mods/default/textures/default_leaves_simple.png differ diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png new file mode 100755 index 0000000..a8bbec9 Binary files /dev/null and b/mods/default/textures/default_obsidian_glass_detail.png differ diff --git a/mods/default/textures/default_pine_tree.png b/mods/default/textures/default_pine_tree.png new file mode 100755 index 0000000..4a5328f Binary files /dev/null and b/mods/default/textures/default_pine_tree.png differ diff --git a/mods/default/textures/default_pine_tree_top.png b/mods/default/textures/default_pine_tree_top.png new file mode 100755 index 0000000..8705710 Binary files /dev/null and b/mods/default/textures/default_pine_tree_top.png differ diff --git a/mods/default/textures/default_pine_wood.png b/mods/default/textures/default_pine_wood.png new file mode 100755 index 0000000..6844ceb Binary files /dev/null and b/mods/default/textures/default_pine_wood.png differ diff --git a/mods/tsm_chests/init.lua b/mods/tsm_chests/init.lua old mode 100644 new mode 100755 index bde97b8..0aa3d69 --- a/mods/tsm_chests/init.lua +++ b/mods/tsm_chests/init.lua @@ -78,22 +78,116 @@ minetest.register_node("tsm_chests:chest", { --[[ 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_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_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 the interesting part which involes treasurer comes way below ]] -minetest.register_on_generated(function(minp, maxp, seed) - -- 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) +minetest.register_on_generated(function(minp, maxp, seed) + 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 @@ -105,103 +199,34 @@ minetest.register_on_generated(function(minp, maxp, seed) 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} + 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 = 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 - - if ground~=nil then - local chest_pos = {x=pos.x,y=ground+1, z=pos.z} + 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 - -->>>> chest spawning starts here <<<<-- - - -- first: spawn the chest - 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 + placeChest(pos, chest_pos, ground, nn) + + chests_placed = chests_placed + 1 end end end + + print("Spawned " .. chests_placed .. " chests after " .. attempts .. " attempts!") end)