diff --git a/mapgen.lua b/mapgen.lua index aadef7a..056d421 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -74,31 +74,29 @@ local function generate_stratus(data, area, name, c_wherein, ca_ceilin, minp, ma if x then -- search for the node to replace --print(" Searching nodes to replace from "..dump(y0-1).." to "..dump(y_min)) + local vi = area:index(x0, y0-1, z0) for y1 = y0-1,y_min,-1 do - if data[area:index(x0, y1, z0)] == c_wherein then - y0 = y1-deep - if y0 < y_min then - y0 = y_min - end + if data[vi] == c_wherein then + y0 = math.max(y1-deep, y_min) break end + vi = vi - area.ystride end local rx=pr:next(radius/2,radius)+1 local rz=pr:next(radius/2,radius)+1 local ry=pr:next(radius_y/2,radius_y)+1 --print(" area of generation ("..dump(rx)..","..dump(rz)..","..dump(ry)..")") + vi = area:index(x0, y0, z0) for x1=0,rx do - rz = rz + 3 - pr:next(1,6) - if rz < 1 then - rz = 1 - end + local vi = vi + x1 + rz = math.max(rz + 3 - pr:next(1,6), 1) for z1=pr:next(1,3),rz do - local ry0 = ry + pr:next(1,3) - for y1 = pr:next(1,3),ry0 do - local p2 = area:index(x0+x1, y0+y1, z0+z1) - if data[p2] == c_wherein then - data[p2] = c_node - i = i +1 + local vi = vi + z1 * area.zstride + for y1 = pr:next(1,3), ry + pr:next(1,3) do + local vi = vi + y1 * area.ystride + if data[vi] == c_wherein then + data[vi] = c_node + i = i + 1 end end end