Tweak generation, update README

Higher spread for mountains
Implement heightmap and heatmap glue for mods depending on it on generation
Clean up noise tables to free memory
master
SmallJoker 2017-09-23 11:51:41 +02:00
parent 1e99bef696
commit aba820d766
4 changed files with 43 additions and 23 deletions

View File

@ -1,23 +1,17 @@
yappy
=====
LuaLandMG
===========
A mapgen for Minetest.
A simple Lua mapgen for Minetest.
Features:
Normal, pine and oak trees
Trees: Normal, pine and oak
Ores
Caves (also with lava)
Mudflow
Requires Minetest 0.4.9 or newer
License: BSD 3-Clause
All moretrees_*.png textures:
© 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
(C) 2013, Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
Published under the terms and conditions of CC-BY-SA-3.0 Unported.
Edit the file
yappy_settings.txt.example
and save it to
minetest_folder/worlds/your_world/yappy_settings.txt
if you wish to configure the terrain of your world.
See settingtypes.txt and the Advanced Settings menu for configuration possiblities.

View File

@ -1,2 +1 @@
default
flowers?

View File

@ -14,7 +14,7 @@ lualandmg.np_base = {
lualandmg.np_mountains = {
offset = 0,
scale = 1,
spread = {x=192, y=192, z=192},
spread = {x=256, y=256, z=256},
octaves = 5,
seed = 3853,
persist = 0.5
@ -32,7 +32,7 @@ lualandmg.np_trees = {
lualandmg.np_caves = {
offset = 0,
scale = 1,
spread = {x=48, y=32, z=48},
spread = {x=32, y=16, z=32},
octaves = 4,
seed = -11842,
persist = 0.4,
@ -94,6 +94,19 @@ local c_lava = minetest.get_content_id("default:lava_source")
local c_stone = minetest.get_content_id("default:stone")
local c_ice = minetest.get_content_id("default:ice")
local c_cactus = minetest.get_content_id("default:cactus")
local heightmap = {}
local heatmap = {}
local old_funct = minetest.get_mapgen_object
function minetest.get_mapgen_object(what)
if what == "heightmap" then
return heightmap
end
if what == "heatmap" then
return heatmap
end
return old_funct(what)
end
function lualandmg.generate(minp, maxp, seed, regen)
local is_surface = maxp.y > -80
@ -101,6 +114,8 @@ function lualandmg.generate(minp, maxp, seed, regen)
local t1 = os.clock()
local sidelen1d = maxp.x - minp.x + 1
local sidelen3d = {x=sidelen1d, y=sidelen1d, z=sidelen1d}
heightmap = {}
heatmap = {}
local terrain_scale = lualandmg.terrain_scale
local trees = lualandmg.registered_trees
@ -132,7 +147,7 @@ function lualandmg.generate(minp, maxp, seed, regen)
for z = minp.z, maxp.z do
for x = minp.x, maxp.x do
local surf = nvals_base[nixz] * 20 + 16
local mountain_y = nvals_mountains[nixz] * 70 - 20
local mountain_y = nvals_mountains[nixz] * 80 - 30
local tree_factor = nvals_trees[nixz] * 5 + 4
local temperature = nvals_temp[nixz] * 43 + 17
local tree_index = nil
@ -188,8 +203,8 @@ function lualandmg.generate(minp, maxp, seed, regen)
end
for i, v in pairs(trees) do
if temperature >= v.temperature_min and
temperature <= v.temperature_max and
if j_temperature >= v.temperature_min and
j_temperature <= v.temperature_max and
math.random(math.ceil(v.chance * tree_factor)) == 1 then
if lualandmg.is_valid_ground(v.node_under, g_top) then
@ -205,9 +220,12 @@ function lualandmg.generate(minp, maxp, seed, regen)
nixz = nixz + 1
end
end
nixz = 1
nvals_base = nil
nvals_mountains = nil
nvals_trees = nil
end
local vm, emin, emax
if regen then
vm = minetest.get_voxel_manip()
@ -234,6 +252,7 @@ function lualandmg.generate(minp, maxp, seed, regen)
local nvals_caves = minetest.get_perlin_map(lualandmg.np_caves, sidelen3d):get3dMap_flat(minp)
local nixyz = 1
nixz = 1
for z = minp.z, maxp.z do
for y = minp.y, maxp.y do
@ -302,6 +321,7 @@ function lualandmg.generate(minp, maxp, seed, regen)
end
nixz = nixz + sidelen1d
end
nvals_caves = nil
local t2 = os.clock()
local log_message = (minetest.pos_to_string(minp).." generated in "..
@ -347,6 +367,7 @@ function lualandmg.generate(minp, maxp, seed, regen)
if is_air then
if water then
-- Fill up caves to prevent massive flood
data[vi] = c_water
elseif depth > 0 then
covered = true
@ -362,6 +383,8 @@ function lualandmg.generate(minp, maxp, seed, regen)
vi = area:index(x, ground, z)
if ground >= 0 and not covered then
data[vi] = g_top
-- Update terrain height for heightmap
cache[1] = ground
else
data[vi] = g_middle
end
@ -369,6 +392,8 @@ function lualandmg.generate(minp, maxp, seed, regen)
data[vi] = g_middle
end
end
heightmap[nixz] = surface[nixz][1]
heatmap[nixz] = nvals_temp[nixz] * 50 + 50
nixz = nixz + 1
end
end
@ -379,8 +404,6 @@ function lualandmg.generate(minp, maxp, seed, regen)
end
end
minetest.generate_ores(vm, minp, maxp)
vm:set_data(data)
if regen then
vm:set_param2_data({})
@ -388,9 +411,12 @@ function lualandmg.generate(minp, maxp, seed, regen)
vm:set_lighting({day=0, night=0})
end
vm:calc_lighting()
vm:write_to_map(data)
vm:write_to_map()
vm:update_liquids()
minetest.generate_ores(vm, minp, maxp)
minetest.generate_decorations(vm, minp, maxp)
minetest.log("action", log_message)
end
table.insert(minetest.registered_on_generateds, 1, lualandmg.generate)
minetest.after(0, table.insert,
minetest.registered_on_generateds, 1, lualandmg.generate)

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = lualandmg