Make biome locations deterministic.
This commit is contained in:
parent
4288bb194e
commit
36ae373f71
24
mapgen.lua
24
mapgen.lua
|
@ -36,6 +36,12 @@ function init_mapgen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Why is this hard-coded separately from the biome_data? glad you asked.
|
||||||
|
-- Lua's pairs() function appears not to guarantee a consistent return order,
|
||||||
|
-- and we want our world to be deterministically generated,
|
||||||
|
-- so the biome_metadata array needs to have its entries appear consistently.
|
||||||
|
biome_list = {"grassland", "forest", "desert"}
|
||||||
|
|
||||||
init_biomes()
|
init_biomes()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -43,13 +49,15 @@ function init_biomes()
|
||||||
-- this is the frequency list for the biomes themselves
|
-- this is the frequency list for the biomes themselves
|
||||||
biome_metadata = {}
|
biome_metadata = {}
|
||||||
|
|
||||||
for k,v in pairs(biome_data) do
|
for i=1,#biome_list do
|
||||||
|
local biome = biome_list[i]
|
||||||
|
|
||||||
-- add the biome's name N times to the biome metadata 'hat'
|
-- add the biome's name N times to the biome metadata 'hat'
|
||||||
for i=1,v["biome_frequency"] do
|
for i=1,biome_data[biome]["biome_frequency"] do
|
||||||
add(biome_metadata, k)
|
add(biome_metadata, biome)
|
||||||
end
|
end
|
||||||
|
|
||||||
build_biome(k, v)
|
build_biome(biome, biome_data[biome])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,10 +84,16 @@ function generate_uid(pos)
|
||||||
return flr(rnd(-1))
|
return flr(rnd(-1))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- given an {x,y} position, calculates the aligned starting position for the
|
||||||
|
-- biome that position is in.
|
||||||
|
function calculate_biome_pos(pos)
|
||||||
|
return {flr(pos[1] / biome_size), flr(pos[2] / biome_size)}
|
||||||
|
end
|
||||||
|
|
||||||
-- determines which biome a given world map position should be,
|
-- determines which biome a given world map position should be,
|
||||||
-- returns the object out of the biome_data table
|
-- returns the object out of the biome_data table
|
||||||
function get_biome(pos)
|
function get_biome(pos)
|
||||||
local biome_pos = {flr(pos[1] / biome_size), flr(pos[2] / biome_size)}
|
local biome_pos = calculate_biome_pos(pos)
|
||||||
local uid = generate_uid(biome_pos)
|
local uid = generate_uid(biome_pos)
|
||||||
local biome_name = biome_metadata[(uid % #biome_metadata) + 1]
|
local biome_name = biome_metadata[(uid % #biome_metadata) + 1]
|
||||||
return biome_data[biome_name]
|
return biome_data[biome_name]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user