mirror of
https://github.com/osmarks/random-stuff
synced 2025-10-24 18:37:39 +00:00
declassify some projects
This commit is contained in:
93
heavbiome/main.lua
Normal file
93
heavbiome/main.lua
Normal file
@@ -0,0 +1,93 @@
|
||||
local map = {}
|
||||
local w = 300
|
||||
local h = 300
|
||||
local seed = 349259
|
||||
require("perlin") -- not mine.
|
||||
-- it uses globals. spiteful, but i do not care enough about code quality for this.
|
||||
|
||||
|
||||
local biomecols = {
|
||||
empty = {0.5, 0.5, 0.5},
|
||||
forest = { 0, 0.5, 0},
|
||||
rainforest = { 0, 0.5, 0.5},
|
||||
ocean = { 0, 0, 1},
|
||||
plains = { 0, 1, 0},
|
||||
desert = { 1, 1, 0},
|
||||
}
|
||||
|
||||
local PERSISTENCE = 0.3
|
||||
local ITERS = 4
|
||||
local function oct_noise(x, y, seed, gen)
|
||||
local total = 0
|
||||
local frequency = 1
|
||||
local amplitude = 1
|
||||
local norm = 0
|
||||
for i = 1, ITERS do
|
||||
total = total + gen:noise(x * frequency, y * frequency, seed + i) * amplitude
|
||||
norm = norm + amplitude
|
||||
frequency = frequency * 2
|
||||
amplitude = amplitude * PERSISTENCE
|
||||
end
|
||||
return total
|
||||
end
|
||||
|
||||
local sf = 1/20 -- scaling factor.
|
||||
local function pick_biome(x, y, gen)
|
||||
local islandicity = gen:noise(x*sf/10, y*sf/10, 302382359)/2+1/2
|
||||
islandicity = math.min(math.max(0,islandicity*3),1)
|
||||
local mainland_modifier = gen:noise(x*sf/20, y*sf/20, 302382359)/2
|
||||
local is_ocean = gen:noise(x*sf/4, y*sf/4, 555575)/2+1/2 + gen:noise(x*sf, y*sf, 555575)/(25-islandicity*10) + mainland_modifier
|
||||
local humidity = oct_noise(x*sf/2, y*sf/2, 10000, gen)/2+1/2
|
||||
local temp = oct_noise(x*sf/6, y*sf/6, 20000, gen)/2+1/2
|
||||
--return { is_ocean, humidity, temp }
|
||||
--
|
||||
if is_ocean > 0.45 then return "ocean" end
|
||||
if is_ocean > 0.43 and humidity < 0.6 then return "desert" end -- coast?
|
||||
if temp > 0.75 then return "desert" end
|
||||
if humidity < 0.5 then
|
||||
if temp > 0.5 then
|
||||
return "desert"
|
||||
else
|
||||
return "plains"
|
||||
end
|
||||
else
|
||||
if humidity > 0.75 then
|
||||
return "rainforest"
|
||||
else
|
||||
if temp < 0.6 then
|
||||
return "forest"
|
||||
else
|
||||
return "plains"
|
||||
end
|
||||
end
|
||||
end
|
||||
return "empty"
|
||||
--]]
|
||||
end
|
||||
|
||||
function love.load()
|
||||
local noise = perlin(seed)
|
||||
local gen = noise
|
||||
for x=1, w do
|
||||
map[x] = {}
|
||||
for y=1, h do
|
||||
map[x][y] = 0
|
||||
end
|
||||
end
|
||||
for x=1, w do
|
||||
for y=1, h do
|
||||
local biome = pick_biome(x, y, noise)
|
||||
--map[x][y] = biome
|
||||
map[x][y] = biomecols[biome]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function love.draw()
|
||||
for x=1, w do
|
||||
for y=1, h do
|
||||
love.graphics.setColor(unpack(map[x][y]))
|
||||
love.graphics.rectangle("fill",x*2, y*2, 2, 2)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user