mirror of
				git://repo.or.cz/rocks.git
				synced 2025-10-31 16:15:26 +01:00 
			
		
		
		
	Fixed wrong noisemap indexing.
This commit is contained in:
		| @@ -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" }, | ||||
|   | ||||
							
								
								
									
										62
									
								
								mapgen.lua
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								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 y<ld.nmap[noise2d_ix] then | ||||
|      if (y<ld.nmap[noise2d_ix])and(ld.nmap[noise2d_ix]<ld.limit) then | ||||
|       layer=ld | ||||
|       rock=layer.rock | ||||
|       break | ||||
|      end | ||||
|     end | ||||
|      | ||||
|     if layer then | ||||
|      --* select vein | ||||
|      for veinname,vd in pairs(layer.veins) do | ||||
|       if vd.nmap[noise3d_ix]>vd.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) | ||||
|  | ||||
|   | ||||
							
								
								
									
										11
									
								
								register.lua
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user