local function shuffle(tbl) local size = #tbl for i = size, 1, -1 do local rand = math.random(size) tbl[i], tbl[rand] = tbl[rand], tbl[i] end return tbl end local function create_tile_chain(surface, tile, count, straightness) if not surface then return end if not tile then return end if not count then return end local position = {x = tile.position.x, y = tile.position.y} local modifiers = { {x = 0, y = -1}, {x = -1, y = 0}, {x = 1, y = 0}, {x = 0, y = 1}, {x = -1, y = 1}, {x = 1, y = -1}, {x = 1, y = 1}, {x = -1, y = -1} } modifiers = shuffle(modifiers) for _ = 1, count, 1 do local tile_placed = false if math.random(0, 100) > straightness then modifiers = shuffle(modifiers) end for b = 1, 4, 1 do local pos = {x = position.x + modifiers[b].x, y = position.y + modifiers[b].y} if surface.get_tile(pos).name ~= tile.name then surface.set_tiles({{name = tile.name, position = pos}}, true) position = {x = pos.x, y = pos.y} tile_placed = true break end end if not tile_placed then position = {x = position.x + modifiers[1].x, y = position.y + modifiers[1].y} end end end return create_tile_chain