1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2024-12-25 02:00:37 +01:00

Various adaptations on watershed

This commit is contained in:
Gael-de-Sailly 2015-07-05 09:25:41 +02:00
parent 1135ac90c9
commit be83517bb3
2 changed files with 20 additions and 348 deletions

View File

@ -221,137 +221,7 @@ if SINGLENODE then
minetest.set_mapgen_params({mgname="singlenode", flags="nolight"}) minetest.set_mapgen_params({mgname="singlenode", flags="nolight"})
end) end)
-- Spawn player function. Requires chunksize = 80 nodes (the default) -- Spawn player function is useless in minetestforfun
function spawnplayer(player)
local TERCEN = -128
local TERSCA = 512
local XLSAMP = 0.1
local BASAMP = 0.3
local MIDAMP = 0.1
local CANAMP = 0.4
local ATANAMP = 1.1
local BLENEXP = 2
local xsp
local ysp
local zsp
local np_terrain = {
offset = 0,
scale = 1,
spread = {x=384, y=192, z=384},
seed = 593,
octaves = 5,
persist = 0.67
}
local np_mid = {
offset = 0,
scale = 1,
spread = {x=768, y=768, z=1},
seed = 85546,
octaves = 5,
persist = 0.5
}
local np_base = {
offset = 0,
scale = 1,
spread = {x=4096, y=4096, z=1},
seed = 8890,
octaves = 3,
persist = 0.33
}
local np_xlscale = {
offset = 0,
scale = 1,
spread = {x=8192, y=8192, z=1},
seed = -72,
octaves = 3,
persist = 0.33
}
local nobj_terrain = nil
local nobj_mid = nil
local nobj_base = nil
local nobj_xlscale = nil
for chunk = 1, 64 do
print ("[watershed] searching for spawn "..chunk)
local x0 = 80 * math.random(-32, 32) - 32
local z0 = 80 * math.random(-32, 32) - 32
local y0 = -32
local x1 = x0 + 79
local z1 = z0 + 79
local y1 = 47
local sidelen = 80
local chulensxyz = {x=sidelen, y=sidelen+2, z=sidelen}
local chulensxz = {x=sidelen, y=sidelen, z=1}
local minposxyz = {x=x0, y=y0-1, z=z0}
local minposxz = {x=x0, y=z0}
nobj_terrain = nobj_terrain or minetest.get_perlin_map(np_terrain, chulensxyz)
nobj_mid = nobj_mid or minetest.get_perlin_map(np_mid, chulensxz)
nobj_base = nobj_base or minetest.get_perlin_map(np_base, chulensxz)
nobj_xlscale = nobj_xlscale or minetest.get_perlin_map(np_xlscale, chulensxz)
local nvals_terrain = nobj_terrain:get3dMap_flat(minposxyz)
local nvals_mid = nobj_mid:get2dMap_flat(minposxz)
local nvals_base = nobj_base:get2dMap_flat(minposxz)
local nvals_xlscale = nobj_xlscale:get2dMap_flat(minposxz)
local nixz = 1
local nixyz = 1
for z = z0, z1 do
for y = y0, y1 do
for x = x0, x1 do
local n_absterrain = math.abs(nvals_terrain[nixyz])
local n_absmid = math.abs(nvals_mid[nixz])
local n_absbase = math.abs(nvals_base[nixz])
local n_xlscale = nvals_xlscale[nixz]
local n_invbase = (1 - n_absbase)
local terblen = (math.max(n_invbase, 0)) ^ BLENEXP
local grad = math.atan((TERCEN - y) / TERSCA) * ATANAMP
local densitybase = n_invbase * BASAMP + n_xlscale * XLSAMP + grad
local densitymid = n_absmid * MIDAMP + densitybase
local canexp = 0.5 + terblen * 0.5
local canamp = terblen * CANAMP
local density = n_absterrain ^ canexp * canamp * n_absmid + densitymid
if y >= 1 and density > -0.005 and density < 0 then
ysp = y + 1
xsp = x
zsp = z
break
end
nixz = nixz + 1
nixyz = nixyz + 1
end
if ysp then
break
end
nixz = nixz - 80
end
if ysp then
break
end
nixz = nixz + 80
end
if ysp then
break
end
end
print ("[watershed] spawn player ("..xsp.." "..ysp.." "..zsp..")")
player:setpos({x=xsp, y=ysp, z=zsp})
end
minetest.register_on_newplayer(function(player)
spawnplayer(player)
end)
minetest.register_on_respawnplayer(function(player)
spawnplayer(player)
return true
end)
end end
-- ABM -- ABM
@ -371,11 +241,7 @@ minetest.register_abm({
-- Appletree sapling -- Appletree sapling
minetest.register_abm({ function default.grow_tree(pos)
nodenames = {"watershed:appling"},
interval = 57,
chance = 3,
action = function(pos, node)
local x = pos.x local x = pos.x
local y = pos.y local y = pos.y
local z = pos.z local z = pos.z
@ -389,16 +255,11 @@ minetest.register_abm({
vm:set_data(data) vm:set_data(data)
vm:write_to_map() vm:write_to_map()
vm:update_map() vm:update_map()
end, end
})
-- Pine sapling -- Pine sapling
minetest.register_abm({ function default.grow_pine_tree(pos)
nodenames = {"watershed:pineling"},
interval = 59,
chance = 3,
action = function(pos, node)
local x = pos.x local x = pos.x
local y = pos.y local y = pos.y
local z = pos.z local z = pos.z
@ -412,39 +273,13 @@ minetest.register_abm({
vm:set_data(data) vm:set_data(data)
vm:write_to_map() vm:write_to_map()
vm:update_map() vm:update_map()
end, end
})
-- Acacia sapling -- Acacia sapling is already defined in Moretrees
minetest.register_abm({
nodenames = {"watershed:acacialing"},
interval = 61,
chance = 3,
action = function(pos, node)
local x = pos.x
local y = pos.y
local z = pos.z
local vm = minetest.get_voxel_manip()
local pos1 = {x=x-4, y=y-3, z=z-4}
local pos2 = {x=x+4, y=y+6, z=z+4}
local emin, emax = vm:read_from_map(pos1, pos2)
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
local data = vm:get_data()
watershed_acaciatree(x, y, z, area, data)
vm:set_data(data)
vm:write_to_map()
vm:update_map()
end,
})
-- Jungletree sapling -- Jungletree sapling
minetest.register_abm({ function default.grow_jungle_tree(pos)
nodenames = {"watershed:jungling"},
interval = 63,
chance = 3,
action = function(pos, node)
local x = pos.x local x = pos.x
local y = pos.y local y = pos.y
local z = pos.z local z = pos.z
@ -458,5 +293,4 @@ minetest.register_abm({
vm:set_data(data) vm:set_data(data)
vm:write_to_map() vm:write_to_map()
vm:update_map() vm:update_map()
end, end
})

View File

@ -4,7 +4,7 @@ minetest.register_alias("watershed:appling", "default:sapling")
minetest.register_alias("watershed:acaciatree", "moretrees:acacia_tree") minetest.register_alias("watershed:acaciatree", "moretrees:acacia_tree")
minetest.register_alias("watershed:acacialeaf", "moretrees:acacia_sapling") minetest.register_alias("watershed:acacialeaf", "moretrees:acacia_leaves")
minetest.register_alias("watershed:acacialing", "moretrees:acacia_sapling") minetest.register_alias("watershed:acacialing", "moretrees:acacia_sapling")
@ -43,7 +43,7 @@ minetest.register_alias("watershed:stone", "default:stone")
minetest.register_alias("watershed:cactus", "default:cactus") minetest.register_alias("watershed:cactus", "default:cactus")
minetest.register_node("watershed:goldengrass", { minetest.register_node("watershed:goldengrass", {
description = "Golden grass", description = "Golden Grass",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"watershed_goldengrass.png"}, tiles = {"watershed_goldengrass.png"},
inventory_image = "watershed_goldengrass.png", inventory_image = "watershed_goldengrass.png",
@ -61,7 +61,7 @@ minetest.register_node("watershed:goldengrass", {
}) })
minetest.register_node("watershed:drygrass", { minetest.register_node("watershed:drygrass", {
description = "Dry grass", description = "Dry Dirt",
tiles = {"watershed_drygrass.png"}, tiles = {"watershed_drygrass.png"},
is_ground_content = false, is_ground_content = false,
groups = {crumbly=1,soil=1}, groups = {crumbly=1,soil=1},
@ -102,7 +102,9 @@ minetest.register_node("watershed:freshice", {
sounds = default.node_sound_glass_defaults(), sounds = default.node_sound_glass_defaults(),
}) })
minetest.register_node("watershed:cloud", { minetest.register_alias("watershed:cloud", "default:cloud")
minetest.override_item("default:cloud", {
description = "Cloud", description = "Cloud",
drawtype = "glasslike", drawtype = "glasslike",
tiles = {"watershed_cloud.png"}, tiles = {"watershed_cloud.png"},
@ -141,159 +143,17 @@ minetest.register_alias("watershed:pinewood", "default:pinewood")
minetest.register_node("watershed:freshwater", { minetest.register_alias("watershed:freshwater", "default:river_water_source")
description = "Freshwater source",
inventory_image = minetest.inventorycube("watershed_freshwater.png"),
drawtype = "liquid",
tiles = {
{
name="watershed_freshwateranim.png",
animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=2.0}
}
},
special_tiles = {
{
name="watershed_freshwateranim.png",
animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=2.0},
backface_culling = false,
}
},
alpha = WATER_ALPHA,
paramtype = "light",
is_ground_content = false,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_flowing = "watershed:freshwaterflow",
liquid_alternative_source = "watershed:freshwater",
liquid_viscosity = WATER_VISC,
liquid_renewable = false,
liquid_range = 2,
post_effect_color = {a=64, r=100, g=150, b=200},
groups = {water=3, liquid=3, puts_out_fire=1},
})
minetest.register_node("watershed:freshwaterflow", { minetest.register_alias("watershed:freshwaterflow", "default:river_water_flowing")
description = "Flowing freshwater",
inventory_image = minetest.inventorycube("watershed_freshwater.png"),
drawtype = "flowingliquid",
tiles = {"watershed_freshwater.png"},
special_tiles = {
{
image="watershed_freshwaterflowanim.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
},
{
image="watershed_freshwaterflowanim.png",
backface_culling=true,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
},
},
alpha = WATER_ALPHA,
paramtype = "light",
paramtype2 = "flowingliquid",
is_ground_content = false,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "watershed:freshwaterflow",
liquid_alternative_source = "watershed:freshwater",
liquid_viscosity = WATER_VISC,
liquid_renewable = false,
liquid_range = 2,
post_effect_color = {a=64, r=100, g=150, b=200},
groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
})
minetest.register_alias("watershed:lava", "default:lava_source") minetest.register_alias("watershed:lava", "default:lava_source")
minetest.register_alias("watershed:lavaflow", "default:lava_flowing") minetest.register_alias("watershed:lavaflow", "default:lava_flowing")
minetest.register_node("watershed:mixwater", { minetest.register_alias("watershed:mixwater", "default:river_water_source")
description = "Mixed water source",
inventory_image = minetest.inventorycube("watershed_mixwater.png"),
drawtype = "liquid",
tiles = {
{
name="watershed_mixwateranim.png",
animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=2.0}
}
},
special_tiles = {
{
name="watershed_mixwateranim.png",
animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=2.0},
backface_culling = false,
}
},
alpha = WATER_ALPHA,
paramtype = "light",
is_ground_content = false,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_flowing = "watershed:mixwaterflow",
liquid_alternative_source = "watershed:mixwater",
liquid_viscosity = WATER_VISC,
liquid_renewable = false,
liquid_range = 2,
post_effect_color = {a=64, r=100, g=120, b=200},
groups = {water=3, liquid=3, puts_out_fire=1},
})
minetest.register_node("watershed:mixwaterflow", { minetest.register_alias("watershed:mixwaterflow", "default:river_water_flowing")
description = "Flowing mixed water",
inventory_image = minetest.inventorycube("watershed_mixwater.png"),
drawtype = "flowingliquid",
tiles = {"watershed_mixwater.png"},
special_tiles = {
{
image="watershed_mixwaterflowanim.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
},
{
image="watershed_mixwaterflowanim.png",
backface_culling=true,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.8}
},
},
alpha = WATER_ALPHA,
paramtype = "light",
paramtype2 = "flowingliquid",
is_ground_content = false,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "watershed:mixwaterflow",
liquid_alternative_source = "watershed:mixwater",
liquid_viscosity = WATER_VISC,
liquid_renewable = false,
liquid_range = 2,
post_effect_color = {a=64, r=100, g=120, b=200},
groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
})
-- Items -- Items
@ -340,16 +200,10 @@ bucket.register_liquid(
"watershed:freshwaterflow", "watershed:freshwaterflow",
"watershed:bucket_freshwater", "watershed:bucket_freshwater",
"watershed_bucketfreshwater.png", "watershed_bucketfreshwater.png",
"WS Fresh Water Bucket" "River Water Bucket"
) )
bucket.register_liquid( minetest.register_alias("watershed:bucket_lava", "bucket:bucket_lava")
"watershed:lava",
"watershed:lavaflow",
"watershed:bucket_lava",
"bucket_lava.png",
"WS Lava Bucket"
)
-- Fuel -- Fuel
@ -359,19 +213,3 @@ minetest.register_craft({
burntime = 60, burntime = 60,
replacements = {{"watershed:bucket_lava", "bucket:bucket_empty"}}, replacements = {{"watershed:bucket_lava", "bucket:bucket_empty"}},
}) })
-- Register stairs and slabs
stairs.register_stair_and_slab("acaciawood", "watershed:acaciawood",
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"watershed_acaciawood.png"},
"Acaciawood stair",
"Acaciawood slab",
default.node_sound_wood_defaults())
stairs.register_stair_and_slab("pinewood", "watershed:pinewood",
{snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"watershed_pinewood.png"},
"Pinewood stair",
"Pinewood slab",
default.node_sound_wood_defaults())