1
0
mirror of git://repo.or.cz/rocks.git synced 2024-11-18 00:08:35 +01:00

patch other mod's biomes with our sedimentary rocks.

using a overriden minetest.register_biome func.
This commit is contained in:
Tomáš Brada 2015-04-18 16:26:45 +02:00
parent 091f2e0b57
commit 59c5eaf5b4

61
sed.lua
View File

@ -10,24 +10,70 @@ minetest.register_node( "rocks:mudstone", {
is_ground_content = true, sounds = default.node_sound_dirt_defaults(), is_ground_content = true, sounds = default.node_sound_dirt_defaults(),
}) })
do -- Modify default grassland biome local beach_max=4
local lowland_max=21
local highland_max=60
local beach_min=-7
local lowland_min=5
local highland_min=22
do
-- Modify default grassland biome
local grassland=minetest.registered_biomes["default:grassland"] or local grassland=minetest.registered_biomes["default:grassland"] or
{ { -- default biome, if no biome mod is installed
name = "rocks:grassland", name = "rocks:grassland",
node_top = "default:dirt_with_grass", node_top = "default:dirt_with_grass",
depth_top = 1, depth_top = 1,
y_min = 5, y_min = lowland_min,
y_max = 31000, y_max = lowland_max,
heat_point = 50, heat_point = 50,
humidity_point = 50, humidity_point = 50,
} }
grassland.node_filler="rocks:mudstone" -- The biome layers are: dust, top, filler, stone
grassland.depth_filler=11 -- On beach: dust, shore_top, shore_filler, underwater
-- coastside: dust, top, filler, shore_filler, underwater, stone
if #minetest.registered_biomes > 1 then
minetest.log("error","Biomes registered before [rocks] discarded, please depend the mod on 'rocks' to fix this.")
-- can't just re-register them here, cause clear_biomes also clears decorations
end
minetest.clear_registered_biomes() minetest.clear_registered_biomes()
-- hook to inject our sedimentary stone to new biomes
local old_register_biome=minetest.register_biome
minetest.register_biome=function(def)
print("[rocks] register_biome .name="..def.name)
for n,v in pairs(def) do
--if type(v)~="table" then print(" "..n.."="..v) end
end
local cor=false -- was the biomeheight patched?
local tl=3 -- tolerance in determining biome type based on y_min/max values
local btype -- biome type (:string)
if (def.y_max>3000) and (def.y_min<=highland_min) then
-- correct upper boundary of registered bimes
if (def.y_min<10) and (def.y_min>0) then def.y_max=lowland_max cor=true end
if (def.y_min<30) and (def.y_min>10) then def.y_max=highland_max cor=true end
minetest.log("action","/rocks correcting upper bound on biome "..def.name.." to "..def.y_max)
end
-- actual detection code
if def.node_stone=="default:desert_stone" then btype="desert"
elseif (def.y_min>beach_min-tl) and (def.y_max<beach_max+tl) then btype="beach"
elseif (def.y_min>0) and (def.y_max<lowland_max+tl) then btype="lowland"
elseif (def.y_min>highland_min-tl) and (def.y_max<highland_max+tl) then btype="highland"
elseif (def.y_min<-3000) and (def.y_max<lowland_min+tl) then btype="ocean"
else minetest.log("error", "/rocks could not guess elevation type for biome "..def.name) end
-- patch the new biomes with our rocks
if btype=="lowland" then
def.node_filler="rocks:mudstone"
def.depth_filler=11
end
-- and call the saved method to actually do the registration
old_register_biome(def)
end
--now register the default grassland
minetest.register_biome(grassland) minetest.register_biome(grassland)
end end
-- more biomes -- more biomes
-- todo: mountains, alps, volcanos
-- more rock defs -- more rock defs
@ -60,8 +106,11 @@ local reg=function(name,param)
}) })
end end
-- this does register a new sedimentary vein.
rocks.register_sedimentary=reg rocks.register_sedimentary=reg
-- follows the only thing remaining from old ver :)
-- Sedimentary rock hardness and distribution -- Sedimentary rock hardness and distribution
-- Rock Hard Distribution -- Rock Hard Distribution
--Breccia Weak Localized continental, folded --Breccia Weak Localized continental, folded