- Make buckets use special raycast function
- Fix clientside global counters to after statements
- Made snow and grass floodable
+- Made lava spawn in blobs underground
---
--- /dev/null
+minetest.register_biome({
+ name = "Nether",
+ node_top = "air",
+ depth_top = 0,
+ node_filler = "air",
+ depth_filler = 0,
+ node_riverbed = "air",
+ depth_riverbed= 0,
+ node_stone = "air",
+ node_water = "air",
+ node_dungeon = "air",
+ node_dungeon_alt = "air",
+ node_dungeon_stair = "air",
+ vertical_blend = 0,
+ y_max = -10000,
+ y_min = -20000,
+ heat_point = -100,
+ humidity_point = -100,
+})
+
+
+--this is from https://github.com/paramat/lvm_example/blob/master/init.lua
+--hi paramat :D
+
+-- Set the 3D noise parameters for the terrain.
+local perlin= minetest.get_mapgen_params()
+local np_terrain = {
+ offset = 0,
+ scale = 1,
+ spread = {x = 384, y = 192, z = 384},
+ seed = 5900033, --perlin.seed
+ octaves = 5,
+ persist = 0.63,
+ lacunarity = 2.0,
+ --flags = ""
+}
+
+
+-- Set singlenode mapgen (air nodes only).
+-- Disable the engine lighting calculation since that will be done for a
+-- mapchunk of air nodes and will be incorrect after we place nodes.
+
+--minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"})
+
+
+-- Get the content IDs for the nodes used.
+
+local c_sandstone = minetest.get_content_id("nether:netherrack")
+local c_bedrock = minetest.get_content_id("nether:bedrock")
+local c_air = minetest.get_content_id("air")
+local c_lava = minetest.get_content_id("nether:lava")
+
+
+-- Initialize noise object to nil. It will be created once only during the
+-- generation of the first mapchunk, to minimise memory use.
+
+local nobj_terrain = nil
+
+
+-- Localise noise buffer table outside the loop, to be re-used for all
+-- mapchunks, therefore minimising memory use.
+
+local nvals_terrain = {}
+
+
+-- Localise data buffer table outside the loop, to be re-used for all
+-- mapchunks, therefore minimising memory use.
+
+local data = {}
+
+
+-- On generated function.
+
+-- 'minp' and 'maxp' are the minimum and maximum positions of the mapchunk that
+-- define the 3D volume.
+minetest.register_on_generated(function(minp, maxp, seed)
+ --nether starts at -10033 y
+ if maxp.y > -10033 then
+ return
+ end
+ -- Start time of mapchunk generation.
+ --local t0 = os.clock()
+
+ -- Noise stuff.
+
+ -- Side length of mapchunk.
+ local sidelen = maxp.x - minp.x + 1
+ -- Required dimensions of the 3D noise perlin map.
+ local permapdims3d = {x = sidelen, y = sidelen, z = sidelen}
+ -- Create the perlin map noise object once only, during the generation of
+ -- the first mapchunk when 'nobj_terrain' is 'nil'.
+ nobj_terrain = minetest.get_perlin_map(np_terrain, permapdims3d) --nobj_terrain or
+ -- Create a flat array of noise values from the perlin map, with the
+ -- minimum point being 'minp'.
+ -- Set the buffer parameter to use and reuse 'nvals_terrain' for this.
+ nobj_terrain:get3dMap_flat(minp, nvals_terrain)
+
+ -- Voxelmanip stuff.
+
+ -- Load the voxelmanip with the result of engine mapgen. Since 'singlenode'
+ -- mapgen is used this will be a mapchunk of air nodes.
+ local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
+ -- 'area' is used later to get the voxelmanip indexes for positions.
+ local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax}
+ -- Get the content ID data from the voxelmanip in the form of a flat array.
+ -- Set the buffer parameter to use and reuse 'data' for this.
+ vm:get_data(data)
+
+ -- Generation loop.
+
+ -- Noise index for the flat array of noise values.
+ local ni = 1
+ -- Process the content IDs in 'data'.
+ -- The most useful order is a ZYX loop because:
+ -- 1. This matches the order of the 3D noise flat array.
+ -- 2. This allows a simple +1 incrementing of the voxelmanip index along x
+ -- rows.
+ -- rows.
+ for z = minp.z, maxp.z do
+ for y = minp.y, maxp.y do
+ -- Voxelmanip index for the flat array of content IDs.
+ -- Initialise to first node in this x row.
+ local vi = area:index(minp.x, y, z)
+ for x = minp.x, maxp.x do
+ -- Consider a 'solidness' value for each node,
+ -- let's call it 'density', where
+ -- density = density noise + density gradient.
+ local density_noise = nvals_terrain[ni]
+ -- Density gradient is a value that is 0 at water level (y = 1)
+ -- and falls in value with increasing y. This is necessary to
+ -- create a 'world surface' with only solid nodes deep underground
+ -- and only air high above water level.
+ -- Here '128' determines the typical maximum height of the terrain.
+ local density_gradient = (1 - y) / 128
+
+ --print(density_noise, density_gradient)
+ -- Place solid nodes when 'density' > 0.
+ --if density_noise + density_gradient > 0 then
+ if density_noise > 0 and y ~= -10033 then
+ data[vi] = c_sandstone
+ -- Otherwise if at or below water level place water.
+ elseif y == -10033 then
+ data[vi] = c_bedrock
+ --elseif y <= 1 then
+ -- data[vi] = c_water
+ elseif y > -15000 then
+ data[vi] = c_air
+ else
+ data[vi] = c_lava
+ end
+
+ -- Increment noise index.
+ ni = ni + 1
+ -- Increment voxelmanip index along x row.
+ -- The voxelmanip index increases by 1 when
+ -- moving by 1 node in the +x direction.
+ vi = vi + 1
+ end
+ end
+ end
+
+ -- After processing, write content ID data back to the voxelmanip.
+ vm:set_data(data)
+ -- Calculate lighting for what has been created.
+ --vm:calc_lighting()
+
+ vm:set_lighting({day=7,night=7}, minp, maxp)
+
+ -- Write what has been created to the world.
+ vm:write_to_map()
+ -- Liquid nodes were placed so set them flowing.
+ --vm:update_liquids()
+
+ -- Print generation time of this mapchunk.
+ --local chugent = math.ceil((os.clock() - t0) * 1000)
+ --print ("[lvm_example] Mapchunk generation time " .. chugent .. " ms")
+end)
local path = minetest.get_modpath("nether")
dofile(path.."/schem.lua")
-
-minetest.register_biome({
- name = "Nether",
- node_top = "air",
- depth_top = 0,
- node_filler = "air",
- depth_filler = 0,
- node_riverbed = "air",
- depth_riverbed= 0,
- node_stone = "air",
- node_water = "air",
- node_dungeon = "air",
- node_dungeon_alt = "air",
- node_dungeon_stair = "air",
- vertical_blend = 0,
- y_max = -10000,
- y_min = -20000,
- heat_point = -100,
- humidity_point = -100,
-})
-
-minetest.register_node("nether:bedrock", {
- description = "Bedrock",
- tiles = {"bedrock.png"},
- groups = {unbreakable = 1, pathable = 1},
- sounds = main.stoneSound(),
- is_ground_content = false,
- --light_source = 14, --debugging
-})
-
-
-minetest.register_node("nether:netherrack", {
- description = "Netherrack",
- tiles = {"netherrack.png"},
- groups = {netherrack = 1, pathable = 1},
- sounds = main.stoneSound(),
- is_ground_content = false,
- light_source = 7,
- drop = {
- max_items = 1,
- items= {
- {
- rarity = 0,
- tools = {"main:woodpick","main:stonepick","main:ironpick","main:goldpick","main:diamondpick"},
- items = {"nether:netherrack"},
- },
- },
- },
-})
-
-
-minetest.register_node("nether:obsidian", {
- description = "Obsidian",
- tiles = {"obsidian.png"},
- groups = {stone = 5, pathable = 1},
- --groups = {stone = 1, pathable = 1}, --leave this here for debug
- sounds = main.stoneSound(),
- is_ground_content = false,
- after_destruct = function(pos, oldnode)
- destroy_nether_portal(pos)
- end,
- --light_source = 7,
-})
-
---this is from https://github.com/paramat/lvm_example/blob/master/init.lua
---hi paramat :D
-
--- Set the 3D noise parameters for the terrain.
-local perlin= minetest.get_mapgen_params()
-local np_terrain = {
- offset = 0,
- scale = 1,
- spread = {x = 384, y = 192, z = 384},
- seed = 5900033, --perlin.seed
- octaves = 5,
- persist = 0.63,
- lacunarity = 2.0,
- --flags = ""
-}
-
-
--- Set singlenode mapgen (air nodes only).
--- Disable the engine lighting calculation since that will be done for a
--- mapchunk of air nodes and will be incorrect after we place nodes.
-
---minetest.set_mapgen_params({mgname = "singlenode", flags = "nolight"})
-
-
--- Get the content IDs for the nodes used.
-
-local c_sandstone = minetest.get_content_id("nether:netherrack")
-local c_bedrock = minetest.get_content_id("nether:bedrock")
-local c_air = minetest.get_content_id("air")
-local c_lava = minetest.get_content_id("main:lava")
-
-
--- Initialize noise object to nil. It will be created once only during the
--- generation of the first mapchunk, to minimise memory use.
-
-local nobj_terrain = nil
-
-
--- Localise noise buffer table outside the loop, to be re-used for all
--- mapchunks, therefore minimising memory use.
-
-local nvals_terrain = {}
-
-
--- Localise data buffer table outside the loop, to be re-used for all
--- mapchunks, therefore minimising memory use.
-
-local data = {}
-
-
--- On generated function.
-
--- 'minp' and 'maxp' are the minimum and maximum positions of the mapchunk that
--- define the 3D volume.
-minetest.register_on_generated(function(minp, maxp, seed)
- --nether starts at -10033 y
- if maxp.y > -10033 then
- return
- end
- -- Start time of mapchunk generation.
- --local t0 = os.clock()
-
- -- Noise stuff.
-
- -- Side length of mapchunk.
- local sidelen = maxp.x - minp.x + 1
- -- Required dimensions of the 3D noise perlin map.
- local permapdims3d = {x = sidelen, y = sidelen, z = sidelen}
- -- Create the perlin map noise object once only, during the generation of
- -- the first mapchunk when 'nobj_terrain' is 'nil'.
- nobj_terrain = minetest.get_perlin_map(np_terrain, permapdims3d) --nobj_terrain or
- -- Create a flat array of noise values from the perlin map, with the
- -- minimum point being 'minp'.
- -- Set the buffer parameter to use and reuse 'nvals_terrain' for this.
- nobj_terrain:get3dMap_flat(minp, nvals_terrain)
-
- -- Voxelmanip stuff.
-
- -- Load the voxelmanip with the result of engine mapgen. Since 'singlenode'
- -- mapgen is used this will be a mapchunk of air nodes.
- local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
- -- 'area' is used later to get the voxelmanip indexes for positions.
- local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax}
- -- Get the content ID data from the voxelmanip in the form of a flat array.
- -- Set the buffer parameter to use and reuse 'data' for this.
- vm:get_data(data)
-
- -- Generation loop.
-
- -- Noise index for the flat array of noise values.
- local ni = 1
- -- Process the content IDs in 'data'.
- -- The most useful order is a ZYX loop because:
- -- 1. This matches the order of the 3D noise flat array.
- -- 2. This allows a simple +1 incrementing of the voxelmanip index along x
- -- rows.
- -- rows.
- for z = minp.z, maxp.z do
- for y = minp.y, maxp.y do
- -- Voxelmanip index for the flat array of content IDs.
- -- Initialise to first node in this x row.
- local vi = area:index(minp.x, y, z)
- for x = minp.x, maxp.x do
- -- Consider a 'solidness' value for each node,
- -- let's call it 'density', where
- -- density = density noise + density gradient.
- local density_noise = nvals_terrain[ni]
- -- Density gradient is a value that is 0 at water level (y = 1)
- -- and falls in value with increasing y. This is necessary to
- -- create a 'world surface' with only solid nodes deep underground
- -- and only air high above water level.
- -- Here '128' determines the typical maximum height of the terrain.
- local density_gradient = (1 - y) / 128
-
- --print(density_noise, density_gradient)
- -- Place solid nodes when 'density' > 0.
- --if density_noise + density_gradient > 0 then
- if density_noise > 0 and y ~= -10033 then
- data[vi] = c_sandstone
- -- Otherwise if at or below water level place water.
- elseif y == -10033 then
- data[vi] = c_bedrock
- --elseif y <= 1 then
- -- data[vi] = c_water
- elseif y > -15000 then
- data[vi] = c_air
- else
- data[vi] = c_lava
- end
-
- -- Increment noise index.
- ni = ni + 1
- -- Increment voxelmanip index along x row.
- -- The voxelmanip index increases by 1 when
- -- moving by 1 node in the +x direction.
- vi = vi + 1
- end
- end
- end
-
- -- After processing, write content ID data back to the voxelmanip.
- vm:set_data(data)
- -- Calculate lighting for what has been created.
- --vm:calc_lighting()
-
- vm:set_lighting({day=7,night=7}, minp, maxp)
-
- -- Write what has been created to the world.
- vm:write_to_map()
- -- Liquid nodes were placed so set them flowing.
- --vm:update_liquids()
-
- -- Print generation time of this mapchunk.
- --local chugent = math.ceil((os.clock() - t0) * 1000)
- --print ("[lvm_example] Mapchunk generation time " .. chugent .. " ms")
-end)
+dofile(path.."/nodes.lua")
+dofile(path.."/biomes.lua")
minetest.register_node("nether:portal", {
--- /dev/null
+
+minetest.register_node("nether:bedrock", {
+ description = "Bedrock",
+ tiles = {"bedrock.png"},
+ groups = {unbreakable = 1, pathable = 1},
+ sounds = main.stoneSound(),
+ is_ground_content = false,
+ --light_source = 14, --debugging
+})
+
+
+minetest.register_node("nether:netherrack", {
+ description = "Netherrack",
+ tiles = {"netherrack.png"},
+ groups = {netherrack = 1, pathable = 1},
+ sounds = main.stoneSound(),
+ is_ground_content = false,
+ light_source = 7,
+ drop = {
+ max_items = 1,
+ items= {
+ {
+ rarity = 0,
+ tools = {"main:woodpick","main:stonepick","main:ironpick","main:goldpick","main:diamondpick"},
+ items = {"nether:netherrack"},
+ },
+ },
+ },
+})
+
+
+minetest.register_node("nether:obsidian", {
+ description = "Obsidian",
+ tiles = {"obsidian.png"},
+ groups = {stone = 5, pathable = 1},
+ --groups = {stone = 1, pathable = 1}, --leave this here for debug
+ sounds = main.stoneSound(),
+ is_ground_content = false,
+ after_destruct = function(pos, oldnode)
+ destroy_nether_portal(pos)
+ end,
+ --light_source = 7,
+})
+
+
+minetest.register_node("nether:lava", {
+ description = "Lava",
+ drawtype = "liquid",
+ tiles = {
+ {
+ name = "lava_source.png",
+ backface_culling = false,
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16,
+ aspect_h = 16,
+ length = 2.0,
+ },
+ },
+ {
+ name = "lava_source.png",
+ backface_culling = true,
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16,
+ aspect_h = 16,
+ length = 2.0,
+ },
+ },
+ },
+ paramtype = "light",
+ light_source = 13,
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drop = "",
+ drowning = 1,
+ liquidtype = "source",
+ liquid_alternative_flowing = "nether:lavaflow",
+ liquid_alternative_source = "nether:lava",
+ liquid_viscosity = 1,
+ liquid_renewable = false,
+ damage_per_second = 4 * 2,
+ post_effect_color = {a = 191, r = 255, g = 64, b = 0},
+ groups = {lava = 3, liquid = 2, igniter = 1},
+})
+
+minetest.register_node("nether:lavaflow", {
+ description = "Flowing Lava",
+ drawtype = "flowingliquid",
+ tiles = {"lava_flow.png"},
+ special_tiles = {
+ {
+ name = "lava_flow.png",
+ backface_culling = false,
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16,
+ aspect_h = 16,
+ length = 3.3,
+ },
+ },
+ {
+ name = "lava_flow.png",
+ backface_culling = true,
+ animation = {
+ type = "vertical_frames",
+ aspect_w = 16,
+ aspect_h = 16,
+ length = 3.3,
+ },
+ },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {0, 0, 0, 0, 0, 0},
+ },
+ },
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ light_source = 13,
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ drop = "",
+ drowning = 1,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "nether:lavaflow",
+ liquid_alternative_source = "nether:lava",
+ liquid_viscosity = 1,
+ liquid_renewable = false,
+ damage_per_second = 2,
+ post_effect_color = {a = 191, r = 255, g = 64, b = 0},
+ groups = {lava = 3, liquid = 2, igniter = 1},
+})