diff --git a/geologica_nv.lua b/geologica_nv.lua index b86f184..c04516b 100644 --- a/geologica_nv.lua +++ b/geologica_nv.lua @@ -9,8 +9,8 @@ local CcSoft=3 -- Claystone Sed soft in mudstone rocks.register_vein("clay",{ - spread = {x=10, y=10, z=10}, - treshold=0.75, + spread = {x=30, y=10, z=30}, + treshold=0.2, -- clay should be plenty seed = 9, hmin=-8, hmax=nil, layers={ "mudstone" }, diff --git a/mapgen.lua b/mapgen.lua index 5424f5a..d55ec6a 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -27,7 +27,26 @@ minetest.register_on_generated(function(minp, maxp, seed) d.nmap=minetest.get_perlin_map(np,map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z}) -- contene_id kamenov d.rock.ctx=d.rock.ctx or minetest.get_content_id(d.rock.node) - table.insert(avl,d) -- pridame ju + -- veiny + local veinstodo={} + for veinname,vd in pairs(d.veins) do + -- todo: do not generate noise for blocks outside the layer + veinstodo[veinname]=vd + end + for veinname,vd in pairs(veinstodo) do + -- noise pre vein + np=vd.np + vd.nmap=minetest.get_perlin_map(np,map_lengths_xyz):get3dMap_flat(minp) + vd.prng=nil + vd.sum=0 + for i,ore in pairs(vd.ores) do + -- contntid pre rudu + ore.ctx=ore.ctx or minetest.get_content_id(ore.node) + -- sum sanci pre vein + vd.sum=vd.sum+ore.chance + end + end + table.insert(avl,d) -- pridame vrstvu if (d.height-d.gain)>maxp.y then break end -- ak je mimo zhora tak uz dalsie nehladaj else --print(" no higher "..d.height.." than "..minp.y) @@ -35,43 +54,66 @@ minetest.register_on_generated(function(minp, maxp, seed) end -- - print("[rocks] afterinit "..os.clock()-timebefore.." #layers="..#avl) + print("[rocks] gen2 "..os.clock()-timebefore.." #layers="..#avl.." minp.y="..minp.y.." maxp.y"..maxp.y) for lh,ld in ipairs(avl) do - print(" "..lh.."->"..ld.name) + print(" "..lh.."->"..ld.name.." top="..ld.height) + for vn,vd in pairs(ld.veins) do + print(" "..vn.."->"..#vd.ores) + end end local noise2d_ix = 1 local noise3d_ix = 1 - for x=minp.x,maxp.x,1 do - for z=minp.z,maxp.z,1 do - for y=minp.y,maxp.y,1 do + for z=minp.z,maxp.z,1 do + for y=minp.y,maxp.y,1 do + for x=minp.x,maxp.x,1 do local p_pos = area:index(x, y, z) - local layer,rock + local layer,vein + local rock --* select layer for lh,ld in ipairs(avl) do - if yvd.treshold then + vein=vd + --rock not changed + end + end + end + + if vein then + --* select ore + for i,ore in pairs(vein.ores) do + rock=ore + break + end + end + --* place rocks if (rock) and(nodes[p_pos]==stone_ctx) then nodes[p_pos] = rock.ctx end noise3d_ix =noise3d_ix+1 + noise2d_ix = noise2d_ix+1 end - noise2d_ix = noise2d_ix+1 + noise2d_ix = noise2d_ix-side_length end end manipulator:set_data(nodes) manipulator:calc_lighting() manipulator:update_liquids() manipulator:write_to_map() - print("[rocks] gen "..os.clock()-timebefore) + print("[rocks] gen0 "..os.clock()-timebefore) end) diff --git a/register.lua b/register.lua index e8e022c..b6b5860 100644 --- a/register.lua +++ b/register.lua @@ -10,6 +10,7 @@ rocks.ores = {} rocks.register_layer=function(name,params,rock) assert(name) assert(params) + assert(rock) assert(params.gain) assert(params.height) local maxheight @@ -18,8 +19,8 @@ rocks.register_layer=function(name,params,rock) gain=params.gain, height=params.height, maxheight=maxheight, - limit=params.limit, - seed=params.seed, + limit=((params.limit or 2)*params.gain)+params.height, + seed=params.seed or 0, rock={ node=rock }, veins={}, name=name @@ -35,7 +36,7 @@ rocks.register_vein=function(name,params) rocks.veins[name]={ np={ offset=0, scale=1, octaves=1, presist=0.8, - spread={x=params.spread.y, y=params.spread.z, z=params.spread.x}, + spread={x=params.spread.x, y=params.spread.y, z=params.spread.z}, -- swapped, becouse we generate by horizontal layers seed=params.seed }, @@ -44,8 +45,8 @@ rocks.register_vein=function(name,params) layers=params.layers, ores={} } - for ln,ld in pairs(rocks.layers_name) do - ld.veins[name]=rocks.veins[name] + for i,layername in pairs(params.layers) do + rocks.layers_name[layername].veins[name]=rocks.veins[name] end print("[rocks] vein "..name) end