first commit

This commit is contained in:
MisterE
2023-09-29 16:18:56 -04:00
commit 831ce94e24
3 changed files with 306 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
(C) 2023 MisterE
Zero-Clause BSD
=============
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+289
View File
@@ -0,0 +1,289 @@
-- forces the map into singlenode mode, don't do this if this is just a "realm".
luamap.set_singlenode()
-- creates a terrain noise
luamap.register_noise("terrain",{
type = "3d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=1000, y=1000, z=1000},
seed = 5900033,
octaves = 10,
persist = 0.8,
lacunarity = 1.6,
flags = ""
},
})
luamap.register_noise("mountains",{
type = "2d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=150, y=130, z=130},
seed = 3452345,
octaves = 5,
persist = 0.6,
lacunarity = 2,
flags = "absvalue"
},
})
luamap.register_noise("dunes",{
type = "2d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=40, y=20, z=300},
seed = 22345234,
octaves = 2,
persist = 0.6,
lacunarity = 2,
flags = "absvalue"
},
})
luamap.register_noise("hills",{
type = "2d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=100, y=50, z=100},
seed = 1345123,
octaves = 3,
persist = 0.5,
lacunarity = 1.8,
flags = "absvalue"
},
})
luamap.register_noise("canyons",{
type = "3d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=30, y=100, z=30},
seed = 48545,
octaves = 4,
persist = 0.5,
lacunarity = 1.8,
flags = "absvalue"
},
})
luamap.register_noise("canyon_top",{
type = "2d",
np_vals = {
offset = 0,
scale = 1,
spread = {x=100, y=100, z=100},
seed = 134512,
octaves = 3,
persist = 0.5,
lacunarity = 1.8,
flags = "absvalue"
},
})
local function cid(nodename)
return minetest.get_content_id(nodename)
end
local stone = cid("default:stone")
local water = cid("default:water_source")
local desert_sand = cid("default:desert_sand")
local air = cid("air")
local dirt = cid("default:dirt")
local sand = cid("default:sand")
local dirt_with_grass = cid("default:dirt_with_grass")
local desert_sandstone = cid("default:desert_sandstone")
local dry_dirt_with_dry_grass = cid("default:dry_dirt_with_dry_grass")
local dry_dirt = cid("default:dry_dirt")
local desert_sandstone = cid("default:desert_sandstone")
local dirt_with_snow = cid("default:dirt_with_snow")
local dirt_with_coniferous_litter = cid("default:dirt_with_coniferous_litter")
local old_logic = luamap.logic
function luamap.logic(noise_vals,x,y,z,seed,original_content)
-- get any terrain defined in another mod
local content = old_logic(noise_vals,x,y,z,seed,original_content)
local o_y = y -- original y before modification
local r = 500
local biomeoffset = 250
local e = 2.71828
local lake_water_level = 37
local mountains = noise_vals.mountains
local desertdunes = noise_vals.dunes
local hills = noise_vals.hills
local canyons = noise_vals.canyons
local canyon_top = noise_vals.canyon_top
local biome_depth = math.abs(noise_vals.terrain*6) + 1
local mtnareaspread = 100
local dsrtareaspread = 140
local lkareaspread = 110
local hillareaspread = 140
local islandspread = 30
local canyspread = 120
local canyon_top_level = 12
-- gausian bumps in a quadrant
local mountain_mix = (e^(-((((x-biomeoffset)^2)+((z-biomeoffset)^2))/(2*mtnareaspread^2))))
local desert_mix = (e^(-(((((-x)-biomeoffset)^2)+((z-biomeoffset)^2))/(2*dsrtareaspread^2))))
local not_desert = -(desert_mix-1)
--gausian bump in the center
local lakes_mix = (e^(-((((x)^2)+((z)^2))/(2*lkareaspread^2))))
local isle_mix = (e^(-((((x)^2)+((z)^2))/(2*islandspread^2))))
local hills_mix = (e^(-(((((-x)-biomeoffset)^2)+(((-z)-biomeoffset)^2))/(2*hillareaspread^2))))
local canyon_mix = (e^(-(((((x)-biomeoffset)^2)+(((-z)-biomeoffset)^2))/(2*canyspread^2))))
-- add to y to lower the level, subtract to raise the level
-- fill the lake first before modifying the land coords
-- mix in the mountians
y=y-mountain_mix*mountains*100
-- make the lake by subtracting height in the center
y = y + lakes_mix * 25
-- add the island in the center
y = y - isle_mix * 12
-- mix in the dunes
y=y-desert_mix*desertdunes*10
-- mix in the hills
y=y-hills_mix*hills*20
-- mix in the small detail terrain but not in the desert
y=y-noise_vals.terrain*not_desert*5
local biome = "grass"
if canyon_mix + biome_depth * canyon_mix > .15 then
biome = "canyon"
elseif mountain_mix + biome_depth * mountain_mix > .15 then
if o_y - biome_depth > 80 then
biome = "pine_and_snow"
else
biome = "pine"
end
elseif hills_mix + biome_depth * hills_mix > .15 then
biome = "deciduous"
-- elseif desert_mix + biome_depth * desert_mix > .15 then
-- biome = "desert"
end
if desert_mix > .2*desertdunes and desert_mix>.08 and y > desertdunes*5 then
biome = "desert"
end
-- add water using original y for flat water surface
if o_y>0 and (10*o_y)^2 < (r^2-x^2-z^2) then
-- fill the lake
if lakes_mix > .1 and o_y < lake_water_level then
content = water
biome = "lake"
end
end
-- canyons
c_y = o_y - (canyon_top*10 + canyon_top_level)
if c_y>0 and (10*c_y)^2 < (r^2-x^2-z^2) or
c_y<=0 and (c_y>((x^2)/(2*r))+((z^2)/(2*r))-(r/2)) then
if canyon_mix > .6* canyon_top and -- keep it from overflowing
canyons > 0 and canyons < .3 then
content = desert_sandstone
end
end
-- stone and biomes
if y>0 and (10*y)^2 < (r^2-x^2-z^2) or
y<=0 and (y>((x^2)/(2*r))+((z^2)/(2*r))-(r/2)) then
content = stone
if y > 0 then
-- lake
if biome == "lake" and (10*(y+biome_depth))^2 > (r^2-x^2-z^2) then
content = sand
end
-- desert
if desert_mix > .2*desertdunes and desert_mix>.08 and y > desertdunes*5 then
content = desert_sand
-- other biomes
elseif (10*(y+biome_depth))^2 > (r^2-x^2-z^2) then
-- top nodes
if (10*(y+1))^2 > (r^2-x^2-z^2) then
if biome == "grass" then
content = dirt_with_grass
end
if biome == "canyon" then
content = dry_dirt_with_dry_grass
end
if biome == "pine_and_snow" then
content = dirt_with_snow
end
if biome == "pine" then
content = dirt_with_coniferous_litter
end
if biome == "deciduous" then
content = dirt_with_grass
end
if biome == "desert" then
content = desert_sand
end
else
-- under nodes
content = dirt
if biome == "canyon" then
content = dry_dirt
end
if biome == "desert" then
content = desert_sand
end
end
end
end
end
return content
end
minetest.register_on_joinplayer(function(player)
minetest.chat_send_player(player:get_player_name(),"MisterE's Adventure Map Creator mod is overriding mapgen. Use /emerge_map to load the entire map (it will take a while)")
end)
minetest.register_chatcommand("emerge_map", {
description = "Emerge the entire adventure map island",
privs = {server=true},
func = function(name, param)
local minp = vector.new(-500,-30,-500)
local maxp = vector.new(500, 50, 500)
minetest.emerge_area(minp, maxp)
minetest.chat_send_player(name, "Adventure map emerged! Have fun creating!")
end
})
+2
View File
@@ -0,0 +1,2 @@
name = storm_map_island_creator
depends = luamap, default