33
README.md
Normal file
@ -0,0 +1,33 @@
|
||||
Inspired by the world of Dwarf Fortress, this mod adds a series of vast cavern layers to the depths of Minetest with a variety of biomes that are populated with the flora of Dwarf Fortress.
|
||||
|
||||
## Cavern Layers
|
||||
|
||||
The underworld is divided into a number of cavern "layers" with a variety of biomes and other features distributed throughout. As one goes deeper one will find increasingly bizzare flora and exotic environments that provide new challenges and opportunities for players.
|
||||
|
||||
The uppermost layer has "flooded" and "dry" caverns, as well as caverns containing the massive tree-like fungal growths of Fungiwood and Tower-Cap mushrooms. These provide a source of underground wood. Also found in this region are plump helmets (an edible farmable mushroom), pig tails (a fibrous fungus that can be grown and harvested for thread), and cave wheat (a pale grass-like growth whose seeds can be ground for flour).
|
||||
|
||||
Fungiwood and Tower Caps can still be found the next layer down, though in smaller ranges as they are crowded by several new types of giant fungi. Here you can find Goblin Cap mushrooms, the squatter cousins of the Tower Caps. Spore Trees sprout in the warmer and wetter corners of the caverns, raising a climbable three-dimensional mesh or hyphyae above the ground that emits a gentle rain of spore powder. Tunnel Tubes grow in the hottest regions - tall, curved stalks with fruiting bodies at the tips that burst violently when ripe. And in the dryest regions are the pitch-black caverns of the Black Cap forests, rich with carbonaceous deposits that have accumulated over millions of years. Smaller plants that can be found here include quarry bushes (farmable for their spicy leaves) and dimple cups (whose eponymous parts can be ground to produce a brilliant blue dye).
|
||||
|
||||
The third cavern layer no longer supports Fungiwood or Tower Caps, with strange new growths crowding them out. The frigid Nethercap caverns can be found here, the blue-tinted mushrooms leaching heat out of their environment in ways that shouldn't be thermodynamically possible. In the hotter areas the vicious Bloodthorn grows, with wicked spines that suck moisture from anything they can pierce. In caves too dry to support biological life enormous glowing crystals grow instead. Sweet pods can be found down here, a fungus whose fruiting bodies are rich in sugary substances.
|
||||
|
||||
The third layer stops on the shores of the Sunless Sea, the ultimate destination of all water that flows downward through the twisty caves of Minetest. The caverns of the Sunless Sea are vast in extent but are flooded with water, and below the surface grows treacherous Snareweed and the rare hanging forests of softly-glowing Cave Coral.
|
||||
|
||||
Below the Sunless Sea is a sea of a more dangerous sort: the Magma Ocean. These caverns are filled with dangerous molten rock, though there are riches to be had as well; mineral growths fed by the heat and pressure.
|
||||
|
||||
By default, caverns belonging to the first cavern layer can be found between -300 and -900, the second cavern layer between -900 and -1500, and the third cavern layer between -1500 and -2100. The surface level of the Sunless Sea is at -2300 and the magma sea's surface is at -3150.
|
||||
|
||||
## Other features
|
||||
|
||||
The giant caverns generated by this mod differ slightly from the default giant caverns found in some mapgens, they use an additional source of noise to generate more ledges and horizontal floors. They also contain stalactites and stalagmites of various sizes - from single-node spikes decorating the default twisty tunnels to mountainous behemoths in the main caverns that can reach tens of meters in diameter and hundreds of meters in height.
|
||||
|
||||
The trees and plants mentioned above are all farmable, but in contrast to the usual farmable plants and trees they only grow in the *absence* of bright light; attempting to plant them in sunlight will kill them. A set of recipes is added for cooking the edible ones into a variety of biscuits, stews, and roasts, and sweet pods can be refined into syrup.
|
||||
|
||||
Some of the other cave decorations provide dim bioluminescent lighting in some caverns. Cave moss and hanging glow-worms are most common. There is also non-glowing floor fungus found coating the stone in less hospitable biomes, capable of spreading to adjacent cobblestone structures like a slow-creeping infection.
|
||||
|
||||
## Dependencies and synergies with other mods
|
||||
|
||||
This mod depends on the utility mod "subterrane", which was derived from Caverealms code which in turn was derived from Paramat's subterrain.
|
||||
|
||||
"dynamic liquid" is also recommended to provide Dwarf Fortress-like fluid dynamics. "magma conduits" is recommended for a Dwarf Fortress like magmatic landscape.
|
||||
|
||||
The "doc" mod is supported to provide in-game documentation for all of the new items and nodes this mod adds.
|
58
biomes.lua
@ -5,6 +5,7 @@ local c_sand = minetest.get_content_id("default:sand")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_coal_ore = minetest.get_content_id("default:stone_with_coal")
|
||||
local c_gravel = minetest.get_content_id("default:gravel")
|
||||
local c_obsidian = minetest.get_content_id("default:obsidian")
|
||||
|
||||
local c_sweet_pod = minetest.get_content_id("dfcaverns:sweet_pod_6") -- param2 = 0
|
||||
local c_quarry_bush = minetest.get_content_id("dfcaverns:quarry_bush_5") -- param2 = 4
|
||||
@ -18,6 +19,7 @@ local c_cavern_fungi = minetest.get_content_id("dfcaverns:cavern_fungi") -- para
|
||||
local c_dirt_moss = minetest.get_content_id("dfcaverns:dirt_with_cave_moss")
|
||||
local c_cobble_fungus = minetest.get_content_id("dfcaverns:cobble_with_floor_fungus")
|
||||
|
||||
local c_wet_flowstone = minetest.get_content_id("dfcaverns:wet_flowstone")
|
||||
|
||||
local shallow_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
@ -28,7 +30,7 @@ local shallow_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.025 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.025 * 4)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -41,7 +43,7 @@ local shallow_cave_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.025 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.025 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -83,6 +85,14 @@ subterrane:register_cave_layer({
|
||||
cave_threshold = dfcaverns.config.cavern_threshold,
|
||||
perlin_cave = perlin_cave,
|
||||
perlin_wave = perlin_wave,
|
||||
columns = {
|
||||
maximum_radius = 10,
|
||||
minimum_radius = 4,
|
||||
node = c_wet_flowstone,
|
||||
weight = 0.25,
|
||||
maximum_count = 20,
|
||||
minimum_count = 0,
|
||||
},
|
||||
})
|
||||
|
||||
subterrane:register_cave_layer({
|
||||
@ -91,6 +101,14 @@ subterrane:register_cave_layer({
|
||||
cave_threshold = dfcaverns.config.cavern_threshold,
|
||||
perlin_cave = perlin_cave,
|
||||
perlin_wave = perlin_wave,
|
||||
columns = {
|
||||
maximum_radius = 15,
|
||||
minimum_radius = 4,
|
||||
node = c_wet_flowstone,
|
||||
weight = 0.25,
|
||||
maximum_count = 30,
|
||||
minimum_count = 5,
|
||||
},
|
||||
})
|
||||
|
||||
subterrane:register_cave_layer({
|
||||
@ -99,6 +117,14 @@ subterrane:register_cave_layer({
|
||||
cave_threshold = dfcaverns.config.cavern_threshold,
|
||||
perlin_cave = perlin_cave,
|
||||
perlin_wave = perlin_wave,
|
||||
columns = {
|
||||
maximum_radius = 20,
|
||||
minimum_radius = 5,
|
||||
node = c_wet_flowstone,
|
||||
weight = 0.25,
|
||||
maximum_count = 50,
|
||||
minimum_count = 10,
|
||||
},
|
||||
})
|
||||
|
||||
local perlin_cave_lava = {
|
||||
@ -121,12 +147,38 @@ local perlin_wave_lava = {
|
||||
|
||||
subterrane:register_cave_layer({
|
||||
minimum_depth = dfcaverns.config.level3_min,
|
||||
maximum_depth = dfcaverns.config.lava_sea_min,
|
||||
maximum_depth = dfcaverns.config.sunless_sea_min,
|
||||
cave_threshold = dfcaverns.config.lava_sea_threshold,
|
||||
perlin_cave = perlin_cave_lava,
|
||||
perlin_wave = perlin_wave_lava,
|
||||
columns = {
|
||||
maximum_radius = 25,
|
||||
minimum_radius = 5,
|
||||
node = c_stone,
|
||||
weight = 0.25,
|
||||
maximum_count = 100,
|
||||
minimum_count = 25,
|
||||
},
|
||||
})
|
||||
|
||||
if dfcaverns.config.enable_lava_sea then
|
||||
subterrane:register_cave_layer({
|
||||
minimum_depth = dfcaverns.config.lava_sea_max,
|
||||
maximum_depth = dfcaverns.config.lava_sea_min,
|
||||
cave_threshold = dfcaverns.config.lava_sea_threshold,
|
||||
perlin_cave = perlin_cave_lava,
|
||||
perlin_wave = perlin_wave_lava,
|
||||
columns = {
|
||||
maximum_radius = 30,
|
||||
minimum_radius = 5,
|
||||
node = c_obsidian,
|
||||
weight = 0.5,
|
||||
maximum_count = 100,
|
||||
minimum_count = 25,
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
dfcaverns.can_support_vegetation = {[c_sand] = true, [c_dirt] = true, [c_coal_ore] = true, [c_gravel] = true}
|
||||
|
||||
dfcaverns.place_shrub = function(data, vi, param2_data, shrub_list)
|
||||
|
@ -5,66 +5,117 @@ local c_cobble = minetest.get_content_id("default:cobble")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_sand = minetest.get_content_id("default:sand")
|
||||
local c_lava = minetest.get_content_id("default:lava_source")
|
||||
|
||||
local c_dirt_moss = minetest.get_content_id("dfcaverns:dirt_with_cave_moss")
|
||||
local c_cobble_fungus = minetest.get_content_id("dfcaverns:cobble_with_floor_fungus")
|
||||
local c_dead_fungus = minetest.get_content_id("dfcaverns:dead_fungus") -- param2 = 0
|
||||
local c_cavern_fungi = minetest.get_content_id("dfcaverns:cavern_fungi") -- param2 = 0
|
||||
local c_meseore = minetest.get_content_id("default:stone_with_mese")
|
||||
local c_mesecry = minetest.get_content_id("dfcaverns:glow_mese")
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
local lava_sea_biome_def = {
|
||||
local mese_crystal_ceiling = function(area, data, ai, vi, bi)
|
||||
if math.random() < 0.025 then
|
||||
if math.random() < 0.25 then
|
||||
subterrane:giant_stalactite(ai, area, data, 6, 13, c_meseore, c_meseore, c_mesecry)
|
||||
else
|
||||
data[vi] = c_meseore
|
||||
if math.random() < 0.25 then
|
||||
data[bi] = c_mesecry
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local mese_ore_ceiling = function(area, data, ai, vi, bi)
|
||||
if math.random() < 0.025 then
|
||||
data[vi] = c_meseore
|
||||
if math.random() < 0.25 then
|
||||
data[bi] = c_mesecry
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local mese_ore_floor = function(area, data, ai, vi, bi)
|
||||
if math.random() < 0.01 then
|
||||
data[vi] = c_meseore
|
||||
if math.random() < 0.25 then
|
||||
data[ai] = c_mesecry
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local lava_sea_crystal_biome_def = {
|
||||
name = "dfcaverns_lava_sea_with_mese_crystal",
|
||||
y_min = dfcaverns.config.lava_sea_min,
|
||||
y_max = dfcaverns.config.lava_sea_max,
|
||||
heat_point = 60,
|
||||
humidity_point = 30,
|
||||
_subterrane_ceiling_decor = mese_crystal_ceiling,
|
||||
_subterrane_floor_decor = mese_ore_floor,
|
||||
}
|
||||
|
||||
local lava_sea_mese_biome_def = {
|
||||
name = "dfcaverns_lava_sea_with_mese",
|
||||
y_min = dfcaverns.config.lava_sea_min,
|
||||
y_max = dfcaverns.config.lava_sea_max,
|
||||
heat_point = 50,
|
||||
humidity_point = 40,
|
||||
_subterrane_ceiling_decor = mese_ore_ceiling,
|
||||
}
|
||||
|
||||
local lava_sea_barren_biome_def = {
|
||||
name = "dfcaverns_lava_sea",
|
||||
y_min = dfcaverns.config.lava_sea_min,
|
||||
y_max = dfcaverns.config.level3_min,
|
||||
heat_point = 50,
|
||||
y_max = dfcaverns.config.lava_sea_max,
|
||||
heat_point = 30,
|
||||
humidity_point = 50,
|
||||
}
|
||||
|
||||
if not dfcaverns.config.bottom_sea_contains_lava then
|
||||
lava_sea_biome_def._subterrane_mitigate_lava = true
|
||||
end
|
||||
|
||||
minetest.register_biome(lava_sea_biome_def)
|
||||
minetest.register_biome(lava_sea_crystal_biome_def)
|
||||
minetest.register_biome(lava_sea_mese_biome_def)
|
||||
minetest.register_biome(lava_sea_barren_biome_def)
|
||||
|
||||
local c_sea
|
||||
if dfcaverns.config.bottom_sea_contains_lava then
|
||||
c_sea = c_lava
|
||||
else
|
||||
c_sea = c_water
|
||||
end
|
||||
|
||||
local airspace = 256
|
||||
local airspace = (dfcaverns.config.lava_sea_max - dfcaverns.config.lava_sea_min) / 2.75
|
||||
local lava_sea_level = dfcaverns.config.lava_sea_max - airspace
|
||||
|
||||
local data = {}
|
||||
local lavasurface_buffer = {}
|
||||
|
||||
local lavasurface_noise
|
||||
|
||||
local lavasurface_noise_params = {
|
||||
offset = 0,
|
||||
scale = 2,
|
||||
spread = {x=20, y=20, z=20},
|
||||
seed = 5033,
|
||||
octaves = 3,
|
||||
persist = 0.6
|
||||
}
|
||||
|
||||
minetest.register_on_generated(function(minp, maxp, seed)
|
||||
--if out of range of cave definition limits, abort
|
||||
if minp.y > dfcaverns.config.level3_min - airspace or maxp.y < dfcaverns.config.lava_sea_min then
|
||||
if minp.y > lava_sea_level or maxp.y < dfcaverns.config.lava_sea_min then
|
||||
return
|
||||
end
|
||||
|
||||
--easy reference to commonly used values
|
||||
local t_start = os.clock()
|
||||
local x_max = maxp.x
|
||||
local y_max = maxp.y
|
||||
local z_max = maxp.z
|
||||
local x_min = minp.x
|
||||
local y_min = minp.y
|
||||
local z_min = minp.z
|
||||
|
||||
|
||||
if not lavasurface_noise then
|
||||
local sidelen = maxp.x - minp.x + 1 --length of a mapblock
|
||||
local chunk_lengths = {x = sidelen, y = sidelen, z = sidelen} --table of chunk edges
|
||||
lavasurface_noise = minetest.get_perlin_map(lavasurface_noise_params, chunk_lengths)
|
||||
end
|
||||
local nvals_lavasurface = lavasurface_noise:get2dMap({x=minp.x, y=minp.z}, lavasurface_buffer)
|
||||
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
||||
vm:get_data(data)
|
||||
|
||||
for z = z_min, z_max do -- for each xy plane progressing northwards
|
||||
for y = y_min, y_max do -- for each x row progressing upwards
|
||||
local vi = area:index(x_min, y, z) --current node index
|
||||
for x = x_min, x_max do -- for each node do
|
||||
if data[vi] == c_air or data[vi] == c_water then
|
||||
data[vi] = c_sea
|
||||
end
|
||||
vi = vi + 1
|
||||
|
||||
local minx = minp.x-1
|
||||
local minz = minp.z-1
|
||||
|
||||
for vi, x, y, z in area:iterp_xyz(minp, maxp) do
|
||||
local lavaheight = nvals_lavasurface[x-minx][z-minz]
|
||||
if y < lava_sea_level + lavaheight then
|
||||
if data[vi] == c_air or data[vi] == c_water then
|
||||
data[vi] = c_lava
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -74,6 +125,8 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||
--calc lighting
|
||||
vm:set_lighting({day = 0, night = 0})
|
||||
vm:calc_lighting()
|
||||
|
||||
vm:update_liquids()
|
||||
--write it to world
|
||||
vm:write_to_map()
|
||||
end)
|
@ -8,10 +8,8 @@ local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_dirt_moss = minetest.get_content_id("dfcaverns:dirt_with_cave_moss")
|
||||
local c_cobble_fungus = minetest.get_content_id("dfcaverns:cobble_with_floor_fungus")
|
||||
|
||||
local c_wet_flowstone = minetest.get_content_id("subterrane:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("subterrane:dry_flowstone")
|
||||
|
||||
local subsea_level = (dfcaverns.config.level1_min - dfcaverns.config.ymax) * 0.3 + dfcaverns.config.level1_min
|
||||
local c_wet_flowstone = minetest.get_content_id("dfcaverns:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("dfcaverns:dry_flowstone")
|
||||
|
||||
local c_sweet_pod = minetest.get_content_id("dfcaverns:sweet_pod_6") -- param2 = 0
|
||||
local c_quarry_bush = minetest.get_content_id("dfcaverns:quarry_bush_5") -- param2 = 4
|
||||
@ -22,6 +20,9 @@ local c_cave_wheat = minetest.get_content_id("dfcaverns:cave_wheat_8") -- param2
|
||||
local c_dead_fungus = minetest.get_content_id("dfcaverns:dead_fungus") -- param2 = 0
|
||||
local c_cavern_fungi = minetest.get_content_id("dfcaverns:cavern_fungi") -- param2 = 0
|
||||
|
||||
local subsea_level = (dfcaverns.config.ymax - dfcaverns.config.level1_min) * 0.3 + dfcaverns.config.level1_min
|
||||
local flooded_biomes = dfcaverns.config.flooded_biomes
|
||||
|
||||
local level_1_tower_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
@ -41,7 +42,7 @@ local level_1_tower_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.005 then
|
||||
dfcaverns.spawn_tower_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -67,7 +68,7 @@ local level_1_fungiwood_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.005 then
|
||||
dfcaverns.spawn_fungiwood_vm(vi, area, data)
|
||||
end
|
||||
@ -83,7 +84,7 @@ local level_1_moist_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.03 then
|
||||
dfcaverns.glow_worm_ceiling(area, data, ai, vi, bi)
|
||||
end
|
||||
@ -110,7 +111,7 @@ local level_1_wet_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.025 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.025 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -134,7 +135,7 @@ local level_1_dry_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -148,7 +149,7 @@ local level_1_dry_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -161,11 +162,17 @@ local level_1_underwater_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
else
|
||||
data[bi] = c_dirt
|
||||
end
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
if data[ai] == c_air then
|
||||
data[ai] = c_water
|
||||
if flooded_biomes then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
if data[ai] == c_air then
|
||||
data[ai] = c_water
|
||||
end
|
||||
elseif math.random() < 0.001 then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -189,7 +196,7 @@ local level_1_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 4)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -203,12 +210,18 @@ local level_1_cave_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
local c_flood_fill
|
||||
if flooded_biomes then
|
||||
c_flood_fill = c_water
|
||||
else
|
||||
c_flood_fill = c_air
|
||||
end
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level1_flooded_biome_lower",
|
||||
@ -216,10 +229,10 @@ minetest.register_biome({
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 100,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_floor_decor = level_1_underwater_floor,
|
||||
_subterrane_mitigate_lava = false, -- no need to mitigate lava in a flooded cave, problem is self-solving
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
@ -231,7 +244,7 @@ minetest.register_biome({
|
||||
_subterrane_ceiling_decor = level_1_moist_ceiling,
|
||||
_subterrane_floor_decor = level_1_wet_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -298,9 +311,9 @@ minetest.register_biome({
|
||||
heat_point = 20,
|
||||
humidity_point = 80,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_floor_decor = level_1_underwater_floor,
|
||||
_subterrane_mitigate_lava = false, -- no need to mitigate lava in a flooded cave, problem is self-solving
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
|
||||
@ -325,9 +338,9 @@ minetest.register_biome({
|
||||
heat_point = 80,
|
||||
humidity_point = 80,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_floor_decor = level_1_underwater_floor,
|
||||
_subterrane_mitigate_lava = false, -- no need to mitigate lava in a flooded cave, problem is self-solving
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
|
@ -10,13 +10,13 @@ local c_stone = minetest.get_content_id("default:stone")
|
||||
local c_cobble = minetest.get_content_id("default:cobble")
|
||||
local c_mossycobble = minetest.get_content_id("default:mossycobble")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_stone_with_coal = minetest.get_content_id("default:stone_with_coal")
|
||||
|
||||
local c_dirt_moss = minetest.get_content_id("dfcaverns:dirt_with_cave_moss")
|
||||
local c_cobble_fungus = minetest.get_content_id("dfcaverns:cobble_with_floor_fungus")
|
||||
|
||||
local c_wet_flowstone = minetest.get_content_id("subterrane:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("subterrane:dry_flowstone")
|
||||
|
||||
local c_wet_flowstone = minetest.get_content_id("dfcaverns:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("dfcaverns:dry_flowstone")
|
||||
|
||||
local c_sweet_pod = minetest.get_content_id("dfcaverns:sweet_pod_6") -- param2 = 0
|
||||
local c_quarry_bush = minetest.get_content_id("dfcaverns:quarry_bush_5") -- param2 = 4
|
||||
@ -27,8 +27,8 @@ local c_cave_wheat = minetest.get_content_id("dfcaverns:cave_wheat_8") -- param2
|
||||
local c_dead_fungus = minetest.get_content_id("dfcaverns:dead_fungus") -- param2 = 0
|
||||
local c_cavern_fungi = minetest.get_content_id("dfcaverns:cavern_fungi") -- param2 = 0
|
||||
|
||||
local subsea_level = (dfcaverns.config.level2_min - dfcaverns.config.level1_min) * 0.3 + dfcaverns.config.level2_min
|
||||
|
||||
local subsea_level = (dfcaverns.config.level1_min - dfcaverns.config.level2_min) * 0.3 + dfcaverns.config.level2_min
|
||||
local flooded_biomes = dfcaverns.config.flooded_biomes
|
||||
|
||||
local level_2_tower_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
@ -49,7 +49,7 @@ local level_2_tower_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.005 then
|
||||
dfcaverns.spawn_tower_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -73,7 +73,7 @@ local level_2_fungiwood_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.005 then
|
||||
dfcaverns.spawn_fungiwood_vm(vi, area, data)
|
||||
end
|
||||
@ -97,7 +97,7 @@ local level_2_tunnel_tube_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.05 then
|
||||
dfcaverns.spawn_tunnel_tube_vm(vi, area, data, param2_data)
|
||||
end
|
||||
@ -109,7 +109,7 @@ local level_2_black_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
end
|
||||
|
||||
if math.random() < 0.25 then
|
||||
data[bi] = c_dirt
|
||||
data[bi] = c_stone_with_coal
|
||||
else
|
||||
data[bi] = c_cobble_fungus
|
||||
end
|
||||
@ -123,7 +123,7 @@ local level_2_black_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.025 then
|
||||
dfcaverns.spawn_black_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -149,7 +149,7 @@ local level_2_spore_tree_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.05 then
|
||||
dfcaverns.spawn_spore_tree_vm(vi, area, data)
|
||||
end
|
||||
@ -175,7 +175,7 @@ local level_2_goblin_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.025 then
|
||||
dfcaverns.spawn_goblin_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -192,7 +192,7 @@ local level_2_moist_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.07 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.07 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.025 then
|
||||
dfcaverns.glow_worm_ceiling(area, data, ai, vi, bi)
|
||||
end
|
||||
@ -219,7 +219,7 @@ local level_2_wet_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -243,7 +243,7 @@ local level_2_dry_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -255,7 +255,38 @@ local level_2_dry_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
local level_2_black_cap_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
return
|
||||
end
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
elseif math.random() < 0.25 then
|
||||
data[ai] = c_stone_with_coal
|
||||
end
|
||||
end
|
||||
|
||||
local level_2_crystal_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
return
|
||||
end
|
||||
|
||||
if math.random() < 0.0025 then
|
||||
dfcaverns.place_big_crystal_cluster(area, data, param2_data, vi, math.random(0,1), true)
|
||||
end
|
||||
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -264,6 +295,19 @@ local level_2_underwater_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
return
|
||||
end
|
||||
data[bi] = c_dirt
|
||||
|
||||
if flooded_biomes then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
if data[ai] == c_air then
|
||||
data[ai] = c_water
|
||||
end
|
||||
elseif math.random() < 0.001 then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local level_2_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
@ -285,7 +329,7 @@ local level_2_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 4)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -299,12 +343,18 @@ local level_2_cave_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
local c_flood_fill
|
||||
if flooded_biomes then
|
||||
c_flood_fill = c_water
|
||||
else
|
||||
c_flood_fill = c_air
|
||||
end
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level2_flooded_biome_lower",
|
||||
@ -312,8 +362,8 @@ minetest.register_biome({
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 90,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_floor_decor = level_2_underwater_floor,
|
||||
_subterrane_mitigate_lava = false,
|
||||
})
|
||||
@ -327,7 +377,7 @@ minetest.register_biome({
|
||||
_subterrane_ceiling_decor = level_2_moist_ceiling,
|
||||
_subterrane_floor_decor = level_2_wet_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -479,9 +529,10 @@ minetest.register_biome({
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 20,
|
||||
_subterrane_ceiling_decor = level_2_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_2_black_cap_ceiling,
|
||||
_subterrane_floor_decor = level_2_black_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_cave_floor_decor = level_2_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_2_cave_ceiling,
|
||||
_subterrane_mitigate_lava = true,
|
||||
@ -493,9 +544,10 @@ minetest.register_biome({
|
||||
y_max = dfcaverns.config.level1_min,
|
||||
heat_point = 50,
|
||||
humidity_point = 20,
|
||||
_subterrane_ceiling_decor = level_2_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_2_black_cap_ceiling,
|
||||
_subterrane_floor_decor = level_2_black_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_cave_floor_decor = level_2_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_2_cave_ceiling,
|
||||
_subterrane_mitigate_lava = true,
|
||||
@ -507,9 +559,10 @@ minetest.register_biome({
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 15,
|
||||
_subterrane_ceiling_decor = level_2_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_2_crystal_ceiling,
|
||||
_subterrane_floor_decor = level_2_dry_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_mitigate_lava = false,
|
||||
})
|
||||
|
||||
@ -522,5 +575,6 @@ minetest.register_biome({
|
||||
_subterrane_ceiling_decor = level_2_dry_ceiling,
|
||||
_subterrane_floor_decor = level_2_dry_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_mitigate_lava = false,
|
||||
})
|
@ -12,6 +12,7 @@ local c_cobble = minetest.get_content_id("default:cobble")
|
||||
local c_mossycobble = minetest.get_content_id("default:mossycobble")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_sand = minetest.get_content_id("default:sand")
|
||||
local c_stone_with_coal = minetest.get_content_id("default:stone_with_coal")
|
||||
|
||||
local c_silver_sand = minetest.get_content_id("default:silver_sand")
|
||||
local c_snow = minetest.get_content_id("default:snow")
|
||||
@ -20,8 +21,8 @@ local c_ice = minetest.get_content_id("default:ice")
|
||||
local c_dirt_moss = minetest.get_content_id("dfcaverns:dirt_with_cave_moss")
|
||||
local c_cobble_fungus = minetest.get_content_id("dfcaverns:cobble_with_floor_fungus")
|
||||
|
||||
local c_wet_flowstone = minetest.get_content_id("subterrane:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("subterrane:dry_flowstone")
|
||||
local c_wet_flowstone = minetest.get_content_id("dfcaverns:wet_flowstone")
|
||||
local c_dry_flowstone = minetest.get_content_id("dfcaverns:dry_flowstone")
|
||||
|
||||
local c_sweet_pod = minetest.get_content_id("dfcaverns:sweet_pod_6") -- param2 = 0
|
||||
local c_quarry_bush = minetest.get_content_id("dfcaverns:quarry_bush_5") -- param2 = 4
|
||||
@ -32,7 +33,8 @@ local c_cave_wheat = minetest.get_content_id("dfcaverns:cave_wheat_8") -- param2
|
||||
local c_dead_fungus = minetest.get_content_id("dfcaverns:dead_fungus") -- param2 = 0
|
||||
local c_cavern_fungi = minetest.get_content_id("dfcaverns:cavern_fungi") -- param2 = 0
|
||||
|
||||
local subsea_level = (dfcaverns.config.level3_min - dfcaverns.config.level2_min) * 0.3 + dfcaverns.config.level3_min
|
||||
local subsea_level = (dfcaverns.config.level2_min - dfcaverns.config.level3_min) * 0.3 + dfcaverns.config.level3_min
|
||||
local flooded_biomes = dfcaverns.config.flooded_biomes
|
||||
|
||||
local level_3_moist_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
@ -44,7 +46,7 @@ local level_3_moist_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.03 then
|
||||
dfcaverns.glow_worm_ceiling(area, data, ai, vi, bi)
|
||||
end
|
||||
@ -70,10 +72,33 @@ local level_3_dry_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
local level_3_crystal_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
end
|
||||
|
||||
floor_item = math.random()
|
||||
if floor_item < 0.005 then
|
||||
dfcaverns.place_big_crystal_cluster(area, data, param2_data, vi, math.random(0,2), false)
|
||||
elseif floor_item < 0.5 then
|
||||
data[bi] = c_cobble
|
||||
end
|
||||
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if drip_rand < 0.001 then
|
||||
subterrane:giant_stalagmite(bi, area, data, 6, 20, c_dry_flowstone, c_dry_flowstone, c_dry_flowstone)
|
||||
elseif drip_rand < 0.025 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.025 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local level_3_wet_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
@ -95,16 +120,28 @@ local level_3_wet_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local level_3_underwater_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
end
|
||||
data[bi] = c_dirt
|
||||
|
||||
if flooded_biomes then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
if data[ai] == c_air then
|
||||
data[ai] = c_water
|
||||
end
|
||||
elseif math.random() < 0.001 then
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local level_3_dry_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
@ -115,7 +152,39 @@ local level_3_dry_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
local level_3_black_cap_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
return
|
||||
end
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
elseif math.random() < 0.25 then
|
||||
data[ai] = c_stone_with_coal
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local level_3_crystal_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
return
|
||||
end
|
||||
|
||||
if math.random() < 0.005 then
|
||||
dfcaverns.place_big_crystal_cluster(area, data, param2_data, vi, math.random(0,3), true)
|
||||
end
|
||||
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if drip_rand < 0.025 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.025 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.dry_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -132,11 +201,11 @@ local level_3_blood_thorn_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if math.random() < 0.1 then
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_sweet_pod, c_sweet_pod, c_plump_helmet, c_dead_fungus, c_dead_fungus, c_dead_fungus, c_cavern_fungi})
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_sweet_pod, c_sweet_pod, c_dead_fungus, c_dead_fungus, c_dead_fungus, c_cavern_fungi})
|
||||
elseif drip_rand < 0.05 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.05 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
elseif math.random() < 0.05 then
|
||||
dfcaverns.spawn_blood_thorn_vm(vi, area, data, param2_data)
|
||||
end
|
||||
@ -160,12 +229,12 @@ local level_3_nether_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
|
||||
if math.random() < 0.01 and data[bi] ~= c_ice then
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_dimple_cup, c_plump_helmet, c_dead_fungus, c_dead_fungus, c_dead_fungus, c_cavern_fungi})
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_dimple_cup, c_dead_fungus, c_dead_fungus, c_dead_fungus, c_cavern_fungi})
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
data[vi] = c_air
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, false)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.icicle_ids)
|
||||
elseif math.random() < 0.005 then
|
||||
dfcaverns.spawn_nether_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -190,7 +259,7 @@ local level_3_tunnel_tube_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.05 then
|
||||
dfcaverns.spawn_tunnel_tube_vm(vi, area, data, param2_data)
|
||||
end
|
||||
@ -216,7 +285,7 @@ local level_3_spore_tree_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.05 then
|
||||
dfcaverns.spawn_spore_tree_vm(vi, area, data)
|
||||
end
|
||||
@ -228,7 +297,7 @@ local level_3_black_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
end
|
||||
|
||||
if math.random() < 0.25 then
|
||||
data[bi] = c_dirt
|
||||
data[bi] = c_stone_with_coal
|
||||
else
|
||||
data[bi] = c_cobble_fungus
|
||||
end
|
||||
@ -241,8 +310,8 @@ local level_3_black_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
subterrane:giant_stalagmite(bi, area, data, 6, 15, c_dry_flowstone, c_dry_flowstone, c_dry_flowstone)
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.dry_stalagmite_ids)
|
||||
elseif math.random() < 0.025 then
|
||||
dfcaverns.spawn_black_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -262,11 +331,11 @@ local level_3_goblin_cap_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
local drip_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
|
||||
if math.random() < 0.1 then
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_plump_helmet, c_sweet_pod, c_sweet_pod, c_quarry_bush, c_dead_fungus, c_cavern_fungi})
|
||||
dfcaverns.place_shrub(data, vi, param2_data, {c_plump_helmet, c_plump_helmet, c_sweet_pod, c_dead_fungus, c_cavern_fungi})
|
||||
elseif drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
elseif math.random() < 0.025 then
|
||||
dfcaverns.spawn_goblin_cap_vm(vi, area, data)
|
||||
end
|
||||
@ -296,7 +365,7 @@ local level_3_cave_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.075 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.075 * 4)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
@ -310,20 +379,26 @@ local level_3_cave_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if drip_rand < 0.1 then
|
||||
local param2 = drip_rand*1000000 - math.floor(drip_rand*1000000/4)*4
|
||||
local height = math.floor(drip_rand/0.1 * 5)
|
||||
subterrane:stalagmite(vi, area, data, param2_data, param2, -height, true)
|
||||
subterrane:small_stalagmite(vi, area, data, param2_data, param2, -height, dfcaverns.wet_stalagmite_ids)
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
local c_flood_fill
|
||||
if flooded_biomes then
|
||||
c_flood_fill = c_water
|
||||
else
|
||||
c_flood_fill = c_air
|
||||
end
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_flooded_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 90,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_floor_decor = level_3_underwater_floor,
|
||||
})
|
||||
@ -337,22 +412,25 @@ minetest.register_biome({
|
||||
_subterrane_ceiling_decor = level_3_moist_ceiling,
|
||||
_subterrane_floor_decor = level_3_wet_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_flood_fill,
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_blood_thorn_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 10,
|
||||
humidity_point = 30,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_3_crystal_ceiling,
|
||||
_subterrane_floor_decor = level_3_blood_thorn_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_coral",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -362,8 +440,9 @@ minetest.register_biome({
|
||||
y_max = dfcaverns.config.level2_min,
|
||||
heat_point = 10,
|
||||
humidity_point = 30,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_3_crystal_ceiling,
|
||||
_subterrane_floor_decor = level_3_blood_thorn_floor,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
@ -372,15 +451,18 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_nether_cap_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 90,
|
||||
humidity_point = 50,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_floor_decor = level_3_nether_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_ice,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_snareweed",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -393,6 +475,7 @@ minetest.register_biome({
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_floor_decor = level_3_nether_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_ice,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_mitigate_lava = true,
|
||||
@ -400,7 +483,7 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_goblin_cap_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 20,
|
||||
humidity_point = 60,
|
||||
@ -409,6 +492,8 @@ minetest.register_biome({
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_coral",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -428,7 +513,7 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_spore_tree_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 60,
|
||||
humidity_point = 60,
|
||||
@ -437,6 +522,8 @@ minetest.register_biome({
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_snareweed",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -456,7 +543,7 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_tunnel_tube_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 60,
|
||||
humidity_point = 40,
|
||||
@ -465,6 +552,8 @@ minetest.register_biome({
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_snareweed",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
@ -484,27 +573,31 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_black_cap_biome_lower",
|
||||
y_min = dfcaverns.config.level2_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 15,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_3_black_cap_ceiling,
|
||||
_subterrane_floor_decor = level_3_black_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_barren",
|
||||
_subterrane_mitigate_lava = true,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_black_cap_biome_upper",
|
||||
y_min = subsea_level,
|
||||
y_max = dfcaverns.config.level3_min,
|
||||
y_max = dfcaverns.config.level2_min,
|
||||
heat_point = 50,
|
||||
humidity_point = 15,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_ceiling_decor = level_3_black_cap_ceiling,
|
||||
_subterrane_floor_decor = level_3_black_cap_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_cave_floor_decor = level_3_cave_floor,
|
||||
_subterrane_cave_ceiling_decor = level_3_cave_ceiling,
|
||||
_subterrane_mitigate_lava = true,
|
||||
@ -512,13 +605,16 @@ minetest.register_biome({
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_level3_dry_biome_lower",
|
||||
y_min = dfcaverns.config.level3_min,
|
||||
y_min = dfcaverns.config.sunless_sea_level,
|
||||
y_max = subsea_level,
|
||||
heat_point = 50,
|
||||
humidity_point = 10,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_floor_decor = level_3_dry_floor,
|
||||
_subterrane_ceiling_decor = level_3_crystal_ceiling,
|
||||
_subterrane_floor_decor = level_3_crystal_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_override_sea_level = dfcaverns.config.sunless_sea_level,
|
||||
_subterrane_override_under_sea_biome = "dfcaverns_sunless_sea_barren",
|
||||
_subterrane_mitigate_lava = false,
|
||||
})
|
||||
|
||||
@ -528,8 +624,9 @@ minetest.register_biome({
|
||||
y_max = dfcaverns.config.level2_min,
|
||||
heat_point = 50,
|
||||
humidity_point = 10,
|
||||
_subterrane_ceiling_decor = level_3_dry_ceiling,
|
||||
_subterrane_floor_decor = level_3_dry_floor,
|
||||
_subterrane_ceiling_decor = level_3_crystal_ceiling,
|
||||
_subterrane_floor_decor = level_3_crystal_floor,
|
||||
_subterrane_fill_node = c_air,
|
||||
_subterrane_column_node = c_dry_flowstone,
|
||||
_subterrane_mitigate_lava = false,
|
||||
})
|
129
biomes/sunless_sea.lua
Normal file
@ -0,0 +1,129 @@
|
||||
local c_water = minetest.get_content_id("default:water_source")
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_sand = minetest.get_content_id("default:sand")
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
|
||||
local sea_level = dfcaverns.config.sunless_sea_level
|
||||
|
||||
local sunless_sea_barren_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
end
|
||||
data[bi] = c_sand
|
||||
end
|
||||
|
||||
local sunless_sea_snareweed_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
end
|
||||
if math.random() < 0.005 then
|
||||
dfcaverns.place_snareweed_patch(area, data, bi, param2_data, 6)
|
||||
else
|
||||
data[bi] = c_dirt
|
||||
end
|
||||
end
|
||||
|
||||
local sunless_sea_coral_ceiling = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[ai] ~= c_stone then
|
||||
return
|
||||
end
|
||||
local coral_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if coral_rand < 0.01 then
|
||||
local iterations = math.ceil(coral_rand / 0.01 * 6)
|
||||
dfcaverns.spawn_cave_coral(area, data, vi, iterations)
|
||||
end
|
||||
end
|
||||
|
||||
local sunless_sea_coral_floor = function(area, data, ai, vi, bi, param2_data)
|
||||
if data[bi] ~= c_stone then
|
||||
return
|
||||
end
|
||||
local coral_rand = subterrane:vertically_consistent_random(vi, area)
|
||||
if coral_rand < 0.01 then
|
||||
local iterations = math.ceil(coral_rand / 0.01 * 6)
|
||||
dfcaverns.spawn_coral_pile(area, data, vi, iterations)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_sunless_sea_barren",
|
||||
y_min = dfcaverns.config.sunless_sea_min,
|
||||
y_max = dfcaverns.config.sunless_sea_level,
|
||||
heat_point = 80,
|
||||
humidity_point = 10,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_air,
|
||||
_subterrane_mitigate_lava = true,
|
||||
_subterrane_floor_decor = sunless_sea_barren_floor,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_sunless_sea_snareweed",
|
||||
y_min = dfcaverns.config.sunless_sea_min,
|
||||
y_max = dfcaverns.config.sunless_sea_level,
|
||||
heat_point = 80,
|
||||
humidity_point = 90,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_mitigate_lava = true,
|
||||
_subterrane_floor_decor = sunless_sea_snareweed_floor,
|
||||
})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "dfcaverns_sunless_sea_coral",
|
||||
y_min = dfcaverns.config.sunless_sea_min,
|
||||
y_max = dfcaverns.config.sunless_sea_level,
|
||||
heat_point = 0,
|
||||
humidity_point = 50,
|
||||
_subterrane_fill_node = c_water,
|
||||
_subterrane_cave_fill_node = c_water,
|
||||
_subterrane_mitigate_lava = true,
|
||||
_subterrane_floor_decor = sunless_sea_coral_floor,
|
||||
_subterrane_ceiling_decor = sunless_sea_coral_ceiling,
|
||||
})
|
||||
|
||||
local data = {}
|
||||
minetest.register_on_generated(function(minp, maxp, seed)
|
||||
--if out of range of cave definition limits, abort
|
||||
if minp.y > dfcaverns.config.sunless_sea_level or maxp.y < dfcaverns.config.sunless_sea_min then
|
||||
return
|
||||
end
|
||||
|
||||
--easy reference to commonly used values
|
||||
local t_start = os.clock()
|
||||
local x_max = maxp.x
|
||||
local y_max = maxp.y
|
||||
local z_max = maxp.z
|
||||
local x_min = minp.x
|
||||
local y_min = minp.y
|
||||
local z_min = minp.z
|
||||
|
||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
||||
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
||||
vm:get_data(data)
|
||||
|
||||
for z = z_min, z_max do -- for each xy plane progressing northwards
|
||||
for y = y_min, y_max do -- for each x row progressing upwards
|
||||
if y <= dfcaverns.config.sunless_sea_level then
|
||||
local vi = area:index(x_min, y, z) --current node index
|
||||
for x = x_min, x_max do -- for each node do
|
||||
if data[vi] == c_air then
|
||||
data[vi] = c_water
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--send data back to voxelmanip
|
||||
vm:set_data(data)
|
||||
--calc lighting
|
||||
vm:set_lighting({day = 0, night = 0})
|
||||
vm:calc_lighting()
|
||||
--write it to world
|
||||
vm:write_to_map()
|
||||
end)
|
18
config.lua
@ -65,19 +65,27 @@ end
|
||||
setting("float", "glow_worm_delay_multiplier", 10.0, "glow worm growth delay multiplier")
|
||||
setting("bool", "light_kills_fungus", true, "Light kills fungus")
|
||||
|
||||
setting("bool", "snareweed_damage", true, "Snareweed causes damage to players")
|
||||
|
||||
--Caverns
|
||||
|
||||
setting("float", "vertical_cavern_scale", 256, "Vertical cavern dimension scale")
|
||||
setting("float", "horizontal_cavern_scale", 256, "Horizontal cavern dimension scale")
|
||||
setting("float", "cavern_threshold", 0.5, "Cavern threshold")
|
||||
|
||||
setting("int", "ymax", -300, "Upper limit of level 1")
|
||||
setting("int", "level1_min", -900, "Upper limit of level 2")
|
||||
setting("int", "level2_min", -1500, "Upper limit of level 3")
|
||||
setting("int", "level3_min", -2100, "Upper limit of lava sea")
|
||||
setting("int", "lava_sea_min", -2700, "Lower limit of the lava sea")
|
||||
setting("int", "level3_min", -2100, "Upper limit of the sunless sea")
|
||||
setting("int", "sunless_sea_min", -2500, "Lower limit of the sunless sea")
|
||||
|
||||
setting("float", "lava_sea_threshold", 0.2, "Cavern threshold for magma sea (higher number means sparser magma)")
|
||||
setting("bool", "bottom_sea_contains_lava", true, "Lower sea contains lava")
|
||||
setting("int", "lava_sea_max", -3000, "Upper limit of the lava sea")
|
||||
setting("int", "lava_sea_min", -3500, "Lower limit of the lava sea")
|
||||
|
||||
setting("float", "lava_sea_threshold", 0.2, "Cavern threshold for sunless and magma seas (higher number means sparser magma)")
|
||||
setting("bool", "enable_lava_sea", true, "Enable magma sea level")
|
||||
|
||||
setting("bool", "flooded_biomes", true, "Add a lot of water to the most humid cavern biomes")
|
||||
|
||||
if minetest.get_modpath("tnt") then
|
||||
dfcaverns.config.enable_tnt = minetest.settings:get_bool("enable_tnt")
|
||||
@ -86,3 +94,5 @@ if minetest.get_modpath("tnt") then
|
||||
dfcaverns.config.enable_tnt = minetest.is_singleplayer()
|
||||
end
|
||||
end
|
||||
|
||||
dfcaverns.config.sunless_sea_level = dfcaverns.config.level3_min - (dfcaverns.config.level3_min - dfcaverns.config.sunless_sea_min) * 0.5
|
||||
|
27
doc.lua
@ -16,13 +16,36 @@ dfcaverns.doc.roast_desc = S("Four finely minced ingredients combine into a roas
|
||||
dfcaverns.doc.roast_usage = nil
|
||||
|
||||
dfcaverns.doc.cave_moss_desc = S("Cave moss is technically a form of mold, but fortunately a relatively benign one given its ubiquity. Its fibers form a tough but springy mat over the surface of any organic-rich soil that accumulates deep underground.")
|
||||
dfcaverns.doc.cave_moss_usage = S("Cave moss has no known uses. It dies when exposed to bright light sources.")
|
||||
dfcaverns.doc.cave_moss_usage = S("Cave moss has no known uses aside from the faint glow it emits. It dies when exposed to bright light sources such as the Sun.")
|
||||
dfcaverns.doc.floor_fungus_desc = S("Floor fungus produces a thin, slick film that spreads through the cracks of broken rock. Its ability to subsist on the tiniest traces of nutrients means it's found in relatively harsh underground environments.")
|
||||
dfcaverns.doc.floor_fungus_usage = S("Floor fungus has no known uses. It can penetrate deeply into cobblestone constructions if an infestation gets hold, but it is difficult to transport and is inhibited by light so it hasn't spread beyond the deep caverns.")
|
||||
|
||||
dfcaverns.doc.glow_worms_desc = S("Glistening strings of silk hang from the ceilings of some of the larger caverns, lit by the millions of tiny bioluminescent worms that spun them. Glow worms prey on the insects they lure and entangle with their faux starry sky - and sometimes the occasional bat or other larger flying beast.")
|
||||
dfcaverns.doc.glow_worms_usage = S("Glow worms can be harvested and used as a source of light but they die when exposed to light significantly brighter than themselves or when immersed in water. A colony of glow worms hung in a hospitable environment will undergo a modest amount of growth, allowing it to be divided and propagated.")
|
||||
|
||||
dfcaverns.doc.snareweed_desc = S("A nasty kelp-like plant that grows in patches on the floor of the Sunless Sea. Its reflective patches draw in the unwary and then its prickly barbs catch and hold small creatures.")
|
||||
dfcaverns.doc.snareweed_usage = S("Snareweed has no practical use, its fibers disintegrate when they dry.")
|
||||
|
||||
dfcaverns.doc.cave_coral_desc = S("A rare form of coral found only deep underground in the Sunless Sea, cave coral grows hanging from the ceilings of flooded caverns.")
|
||||
dfcaverns.doc.cave_coral_usage = S("Aside from their aesthetic beauty, cave corals can be harvested for simple building materials.")
|
||||
|
||||
dfcaverns.doc.flowstone_desc = S("Flowstone is a carbonate-rich rock formation deposited by flowing water. It consists of minerals that the water dissolved earlier as it widens cracks and fissures into caves.")
|
||||
dfcaverns.doc.flowstone_usage = S("Aside from the aesthetic beauty of its formations flowstone has no special properties or uses.")
|
||||
dfcaverns.doc.dripstone_desc = S("The iconic stalactites and stalagmites found in caverns are composed of flowstone (or 'dripstone' in the case of these formations). Moist dripstone is still undergoing growth, whereas dry dripstone is found in 'dead' caverns once the source of water that created them ceases.")
|
||||
dfcaverns.doc.dripstone_usage = S("Although stalagmites are blunter than the stalactites above them, they can cause extra damage to the unwary caver who falls on them.")
|
||||
dfcaverns.doc.icicle_desc = S("Ice formed by water dripping slowly into a cold environment, icicles tend to be exceptionally pure and clear.")
|
||||
dfcaverns.doc.icicle_usage = S("Falling onto an icicle is particularly damaging.")
|
||||
|
||||
|
||||
dfcaverns.doc.glow_mese_desc = S("Deep in the infernal conditions of the magma sea, over the course of millions of years, mese crystals grow into flawless blocks that glow bright with strange energies.")
|
||||
dfcaverns.doc.glow_mese_usage = S("These blocks can be broken down into a large number of mese crystals, but cannot be artificially reassembled.")
|
||||
|
||||
dfcaverns.doc.glow_ruby_ore_desc = S("Large, dry caverns deep underground are well suited to aeons-long processes that concentrate crystalline substances in their walls. This rock is riddled with veins of the stuff.")
|
||||
dfcaverns.doc.glow_ruby_ore_usage = S("Aside from its aesthetic value this rock has no particular use.")
|
||||
|
||||
dfcaverns.doc.big_crystal_desc = S("Monolithic crystals of this size form only over extremely long periods deep underground, in large long-lived cavities that allow them room to grow. Water and the life it hosts tend to disrupt the formation process of these crystals so they're only found in dry environments.")
|
||||
dfcaverns.doc.big_crystal_usage = S("Aside from its aesthetic value this crystal has no particular use.")
|
||||
|
||||
-- Plants
|
||||
|
||||
dfcaverns.doc.dead_fungus_desc = S("Whatever this fungus was in life, it is now dead.")
|
||||
@ -70,7 +93,7 @@ dfcaverns.doc.sweet_pod_syrup_usage = S("Too strong and thick to drink straight,
|
||||
|
||||
-- Trees
|
||||
dfcaverns.doc.black_cap_desc = S("The dense black wood of these mushrooms is heavy and hard to work with, and has few remarkable properties.")
|
||||
dfcaverns.doc.black_cap_usage = S("Aside from the artistic applications of its particularly dark color, black cap wood is a long-burning fuel source that's as good as coal for some applications.")
|
||||
dfcaverns.doc.black_cap_usage = S("Aside from the artistic applications of its particularly dark color, black cap wood is a long-burning fuel source that's as good as coal for some applications. Black cap gills are oily and make for excellent torch fuel.")
|
||||
|
||||
dfcaverns.doc.blood_thorn_desc = S("Blood thorns are the most vicious of underground flora, as befits their harsh environments. Found only in hot, dry caverns with sandy soil far from the surface world's organic bounty, blood thorns seek to supplement their nutrient supply with wickedly barbed hollow spines that actively drain fluids from whatever stray plant or creature they might impale.")
|
||||
dfcaverns.doc.blood_thorn_usage = S("When harvested, the central stalk of a blood thorn can be cut into planks and used as wood. It has a purple-red hue that may or may not appeal, depending on one's artistic tastes.")
|
||||
|
113
features/cave_coral.lua
Normal file
@ -0,0 +1,113 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
minetest.register_node("dfcaverns:cave_coral_3", {
|
||||
description = S("Cave Coral"),
|
||||
_doc_items_longdesc = dfcaverns.doc.cave_coral_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.cave_coral_usage,
|
||||
tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"},
|
||||
is_ground_content = true,
|
||||
drop = "default:coral_skeleton",
|
||||
light_source = 3,
|
||||
groups = {cracky = 3, dfcaverns_cave_coral = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:cave_coral_2", {
|
||||
description = S("Cave Coral"),
|
||||
_doc_items_longdesc = dfcaverns.doc.cave_coral_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.cave_coral_usage,
|
||||
tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"},
|
||||
is_ground_content = true,
|
||||
drop = "default:coral_skeleton",
|
||||
light_source = 2,
|
||||
groups = {cracky = 3, dfcaverns_cave_coral = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:cave_coral_1", {
|
||||
description = S("Cave Coral"),
|
||||
_doc_items_longdesc = dfcaverns.doc.cave_coral_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.cave_coral_usage,
|
||||
tiles = {"dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral_end.png", "dfcaverns_cave_coral.png"},
|
||||
is_ground_content = true,
|
||||
drop = "default:coral_skeleton",
|
||||
light_source = 1,
|
||||
groups = {cracky = 3, dfcaverns_cave_coral = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
local coral_names = {"dfcaverns:cave_coral_1", "dfcaverns:cave_coral_2", "dfcaverns:cave_coral_3"}
|
||||
minetest.register_abm{
|
||||
label = "dfcaverns:shifting_coral",
|
||||
nodenames = {"group:dfcaverns_cave_coral"},
|
||||
interval = 2,
|
||||
chance = 10,
|
||||
action = function(pos)
|
||||
minetest.swap_node(pos, {name=coral_names[math.random(1,3)]})
|
||||
end,
|
||||
}
|
||||
|
||||
local c_coral_1 = minetest.get_content_id("dfcaverns:cave_coral_1")
|
||||
local c_coral_2 = minetest.get_content_id("dfcaverns:cave_coral_2")
|
||||
local c_coral_3 = minetest.get_content_id("dfcaverns:cave_coral_3")
|
||||
local c_coral_skeleton = minetest.get_content_id("default:coral_skeleton")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
|
||||
local corals = {c_coral_1, c_coral_2, c_coral_3}
|
||||
local get_coral = function()
|
||||
return corals[math.random(1,3)]
|
||||
end
|
||||
|
||||
dfcaverns.spawn_cave_coral = function(area, data, vi, iterations)
|
||||
local run = math.random(2,4)
|
||||
local index = vi
|
||||
local zstride = area.zstride
|
||||
local ystride = area.ystride
|
||||
while run > 0 do
|
||||
if math.random() > 0.95 or data[index] == c_stone or not area:containsi(index) then return end
|
||||
data[index] = get_coral()
|
||||
if iterations > 2 then
|
||||
data[index + 1] = get_coral()
|
||||
data[index - 1] = get_coral()
|
||||
data[index + zstride] = get_coral()
|
||||
data[index - zstride] = get_coral()
|
||||
end
|
||||
if iterations > 3 then
|
||||
data[index + 2] = get_coral()
|
||||
data[index - 2] = get_coral()
|
||||
data[index + zstride * 2] = get_coral()
|
||||
data[index - zstride * 2] = get_coral()
|
||||
data[index + 1 + zstride] = get_coral()
|
||||
data[index - 1 + zstride] = get_coral()
|
||||
data[index + 1 - zstride] = get_coral()
|
||||
data[index - 1 - zstride] = get_coral()
|
||||
end
|
||||
index = index - ystride
|
||||
run = run - 1
|
||||
end
|
||||
|
||||
local newiterations = iterations - 1
|
||||
if newiterations == 0 then return end
|
||||
|
||||
if math.random() > 0.5 then
|
||||
dfcaverns.spawn_cave_coral(area, data, index + 1 + ystride, newiterations)
|
||||
dfcaverns.spawn_cave_coral(area, data, index - 1 + ystride, newiterations)
|
||||
else
|
||||
dfcaverns.spawn_cave_coral(area, data, index + zstride + ystride, newiterations)
|
||||
dfcaverns.spawn_cave_coral(area, data, index - zstride + ystride, newiterations)
|
||||
end
|
||||
end
|
||||
|
||||
dfcaverns.spawn_coral_pile = function(area, data, vi, radius)
|
||||
local pos = area:position(vi)
|
||||
for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do
|
||||
local adjacent = li + area.ystride
|
||||
local node_type = data[li]
|
||||
if math.random() < 0.2 and (node_type == c_stone or node_type == c_dirt) and data[adjacent] == c_water then
|
||||
data[adjacent] = c_coral_skeleton
|
||||
end
|
||||
end
|
||||
end
|
77
features/flowstone_nodes.lua
Normal file
@ -0,0 +1,77 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
minetest.register_alias("subterrane:dry_stal_1", "dfcaverns:dry_stal_1")
|
||||
minetest.register_alias("subterrane:dry_stal_1", "dfcaverns:dry_stal_1")
|
||||
minetest.register_alias("subterrane:dry_stal_1", "dfcaverns:dry_stal_1")
|
||||
minetest.register_alias("subterrane:dry_stal_1", "dfcaverns:dry_stal_1")
|
||||
minetest.register_alias("subterrane:wet_stal_1", "dfcaverns:wet_stal_1")
|
||||
minetest.register_alias("subterrane:wet_stal_1", "dfcaverns:wet_stal_1")
|
||||
minetest.register_alias("subterrane:wet_stal_1", "dfcaverns:wet_stal_1")
|
||||
minetest.register_alias("subterrane:wet_stal_1", "dfcaverns:wet_stal_1")
|
||||
minetest.register_alias("subterrane:wet_flowstone", "dfcaverns:wet_flowstone")
|
||||
minetest.register_alias("subterrane:dry_flowstone", "dfcaverns:dry_flowstone")
|
||||
|
||||
-----------------------------------------------
|
||||
|
||||
dfcaverns.dry_stalagmite_ids = subterrane.register_stalagmite_nodes("dfcaverns:dry_stal", {
|
||||
description = S("Dry Dripstone"),
|
||||
_doc_items_longdesc = dfcaverns.doc.dripstone_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.dripstone_usage,
|
||||
tiles = {
|
||||
"default_stone.png^[brighten",
|
||||
},
|
||||
groups = {cracky = 3, stone = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:dry_flowstone", {
|
||||
description = S("Dry Flowstone"),
|
||||
_doc_items_longdesc = dfcaverns.doc.flowstone_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.flowstone_usage,
|
||||
tiles = {"default_stone.png^[brighten"},
|
||||
groups = {cracky = 3, stone = 1},
|
||||
is_ground_content = true,
|
||||
drop = 'default:cobble',
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
-----------------------------------------------
|
||||
|
||||
dfcaverns.wet_stalagmite_ids = subterrane.register_stalagmite_nodes("dfcaverns:wet_stal", {
|
||||
description = S("Wet Dripstone"),
|
||||
_doc_items_longdesc = dfcaverns.doc.dripstone_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.dripstone_usage,
|
||||
tiles = {
|
||||
"default_stone.png^[brighten^dfcaverns_dripstone_streaks.png",
|
||||
},
|
||||
groups = {cracky = 3, stone = 2, subterrane_wet_dripstone = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
}, "dfcaverns:dry_stal")
|
||||
|
||||
|
||||
minetest.register_node("dfcaverns:wet_flowstone", {
|
||||
description = S("Wet Flowstone"),
|
||||
_doc_items_longdesc = dfcaverns.doc.flowstone_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.flowstone_usage,
|
||||
tiles = {"default_stone.png^[brighten^dfcaverns_dripstone_streaks.png"},
|
||||
groups = {cracky = 3, stone = 1, subterrane_wet_dripstone = 1},
|
||||
is_ground_content = true,
|
||||
drop = 'default:cobble',
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
-----------------------------------------------
|
||||
|
||||
dfcaverns.icicle_ids = subterrane.register_stalagmite_nodes("dfcaverns:icicle", {
|
||||
description = S("Icicle"),
|
||||
_doc_items_longdesc = dfcaverns.doc.icicle_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.icicle_usage,
|
||||
tiles = {
|
||||
"default_ice.png",
|
||||
},
|
||||
groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
335
features/glow_crystals.lua
Normal file
@ -0,0 +1,335 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
--glowing mese crystal blocks
|
||||
minetest.register_node("dfcaverns:glow_mese", {
|
||||
description = S("Flawless Mese Block"),
|
||||
_doc_items_longdesc = dfcaverns.doc.glow_mese_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.glow_mese_usage,
|
||||
tiles = {"dfcaverns_glow_mese.png"},
|
||||
is_ground_content = true,
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
light_source = 13,
|
||||
paramtype = "light",
|
||||
use_texture_alpha = true,
|
||||
drawtype = "glasslike",
|
||||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:mese_crystal 12',
|
||||
recipe = {
|
||||
{'dfcaverns:glow_mese'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:glow_ruby_ore", {
|
||||
description = S("Crystal Vein"),
|
||||
_doc_items_longdesc = dfcaverns.doc.glow_ruby_ore_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.glow_ruby_ore_usage,
|
||||
tiles = {"dfcaverns_glow_ruby_ore.png"},
|
||||
is_ground_content = true,
|
||||
groups = {cracky=2},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("dfcaverns:big_crystal", {
|
||||
description = S("Giant Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_big.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby4x.png",
|
||||
"dfcaverns_glow_ruby.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 3, 0.5},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 3, 0.5},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:med_crystal", {
|
||||
description = S("Big Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_med.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby.png",
|
||||
"dfcaverns_glow_ruby_quarter.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.5, -0.25, 0.25, 1.25, 0.25},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.25, -0.5, -0.25, 0.25, 1.25, 0.25},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("dfcaverns:big_crystal_30", {
|
||||
description = S("Giant Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_30_big.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby4x.png",
|
||||
"dfcaverns_glow_ruby.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
drop = "dfcaverns:big_crystal",
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.625, 0.5, 0.5, 0.375},
|
||||
{-0.5, 0.5, -1.25, 0.5, 1.5, -0.25},
|
||||
{-0.5, 1.5, -1.875, 0.5, 2.5, -0.875},
|
||||
--The following is a more accurate set of collision boxes that theoretically
|
||||
--allows the crystal to be climbed like stairs, but in practice the physics
|
||||
--don't seem to work quite right so I'm leaving it "simple" for now.
|
||||
-- {-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
|
||||
-- {-0.5, 0.0, -0.9375, 0.5, 0.5, 0.0625},
|
||||
-- {-0.5, 0.5, -1.25, 0.5, 1.0, -0.25},
|
||||
-- {-0.5, 1.0, -1.5625, 0.5, 1.5, -0.5625},
|
||||
-- {-0.5, 1.5, -1.875, 0.5, 2.0, -0.875},
|
||||
-- {-0.25, 2.0, -1.625, 0.25, 2.5, -1.125},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.625, 0.5, 0.5, 0.375},
|
||||
{-0.5, 0.5, -1.25, 0.5, 1.5, -0.25},
|
||||
{-0.5, 1.5, -1.875, 0.5, 2.5, -0.875},
|
||||
-- {-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
|
||||
-- {-0.5, 0.0, -0.9375, 0.5, 0.5, 0.0625},
|
||||
-- {-0.5, 0.5, -1.25, 0.5, 1.0, -0.25},
|
||||
-- {-0.5, 1.0, -1.5625, 0.5, 1.5, -0.5625},
|
||||
-- {-0.5, 1.5, -1.875, 0.5, 2.0, -0.875},
|
||||
-- {-0.25, 2.0, -1.625, 0.25, 2.5, -1.125},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:med_crystal_30", {
|
||||
description = S("Big Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_30_med.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby.png",
|
||||
"dfcaverns_glow_ruby_quarter.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
drop = "dfcaverns:med_crystal",
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.3125, 0.25, 0.0, 0.1875},
|
||||
{-0.25, 0.0, -0.625, 0.25, 0.5, -0.125},
|
||||
{-0.25, 0.5, -0.9375, 0.25, 1.0, -0.4375},
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.25, -0.5, -0.3125, 0.25, 0.0, 0.1875},
|
||||
{-0.25, 0.0, -0.625, 0.25, 0.5, -0.125},
|
||||
{-0.25, 0.5, -0.9375, 0.25, 1.0, -0.4375},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:big_crystal_30_45", {
|
||||
description = S("Giant Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_30_45_big.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby4x.png",
|
||||
"dfcaverns_glow_ruby.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
drop = "dfcaverns:big_crystal",
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, -0.5, -0.625, 0.625, 0.5, 0.375},
|
||||
{0.0625, 0.5, -1.0625, 1.0625, 1.5, -0.0625},
|
||||
{0.5, 1.5, -1.5, 1.5, 2.5, -0.5},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.375, -0.5, -0.625, 0.625, 0.5, 0.375},
|
||||
{0.0625, 0.5, -1.0625, 1.0625, 1.5, -0.0625},
|
||||
{0.5, 1.5, -1.5, 1.5, 2.5, -0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_node("dfcaverns:med_crystal_30_45", {
|
||||
description = S("Big Crystal"),
|
||||
_doc_items_longdesc = dfcaverns.doc.big_crystal_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.big_crystal_usage,
|
||||
drawtype = "mesh",
|
||||
mesh = "hex_crystal_30_45_med.obj",
|
||||
tiles = {
|
||||
"dfcaverns_glow_ruby4x.png",
|
||||
"dfcaverns_glow_ruby.png",
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
light_source = 12,
|
||||
drop = "dfcaverns:med_crystal",
|
||||
groups = {cracky=2, dfcaverns_big_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.1875, -0.5, -0.3125, 0.3125, 0.0, 0.1875},
|
||||
{0.03125, 0.0, -0.53125, 0.53125, 0.5, -0.03125},
|
||||
{0.25, 0.5, -0.75, 0.75, 1.0, -0.25},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.1875, -0.5, -0.3125, 0.3125, 0.0, 0.1875},
|
||||
{0.03125, 0.0, -0.53125, 0.53125, 0.5, -0.03125},
|
||||
{0.25, 0.5, -0.75, 0.75, 1.0, -0.25},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:big_crystal_30',
|
||||
recipe = {'dfcaverns:big_crystal'},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:big_crystal_30_45',
|
||||
recipe = {'dfcaverns:big_crystal_30'},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:big_crystal',
|
||||
recipe = {'dfcaverns:big_crystal_30_45'},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:med_crystal_30',
|
||||
recipe = {'dfcaverns:med_crystal'},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:med_crystal_30_45',
|
||||
recipe = {'dfcaverns:med_crystal_30'},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'dfcaverns:med_crystal',
|
||||
recipe = {'dfcaverns:med_crystal_30_45'},
|
||||
})
|
||||
|
||||
local c_stone = minetest.get_content_id("default:stone")
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_big_crystal = minetest.get_content_id("dfcaverns:big_crystal")
|
||||
local c_med_crystal = minetest.get_content_id("dfcaverns:med_crystal")
|
||||
local c_big_crystal_30 = minetest.get_content_id("dfcaverns:big_crystal_30")
|
||||
local c_med_crystal_30 = minetest.get_content_id("dfcaverns:med_crystal_30")
|
||||
local c_big_crystal_30_45 = minetest.get_content_id("dfcaverns:big_crystal_30_45")
|
||||
local c_med_crystal_30_45 = minetest.get_content_id("dfcaverns:med_crystal_30_45")
|
||||
local c_glow_ore = minetest.get_content_id("dfcaverns:glow_ruby_ore")
|
||||
|
||||
local place_big_crystal = function(data, data_param2, i, ceiling)
|
||||
local orientation = math.random()
|
||||
if orientation < 0.33 then
|
||||
if math.random() > 0.5 then
|
||||
data[i] = c_big_crystal
|
||||
else
|
||||
data[i] = c_med_crystal
|
||||
end
|
||||
elseif orientation < 0.66 then
|
||||
if math.random() > 0.5 then
|
||||
data[i] = c_big_crystal_30
|
||||
else
|
||||
data[i] = c_med_crystal_30
|
||||
end
|
||||
else
|
||||
if math.random() > 0.5 then
|
||||
data[i] = c_big_crystal_30_45
|
||||
else
|
||||
data[i] = c_med_crystal_30_45
|
||||
end
|
||||
end
|
||||
if ceiling then
|
||||
data_param2[i] = math.random(20,23)
|
||||
else
|
||||
data_param2[i] = math.random(0,3)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
dfcaverns.place_big_crystal_cluster = function(area, data, data_param2, i, radius, ceiling)
|
||||
local y
|
||||
if ceiling then y = -1 else y = 1 end
|
||||
local pos = area:position(i)
|
||||
for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do
|
||||
local adjacent = li + y*area.ystride
|
||||
if math.random() > 0.5 and data[li] == c_stone and data[adjacent] == c_air then
|
||||
place_big_crystal(data, data_param2, adjacent, ceiling)
|
||||
data[li] = c_glow_ore
|
||||
end
|
||||
end
|
||||
end
|
@ -6,7 +6,17 @@ minetest.register_node("dfcaverns:glow_worm", {
|
||||
description = S("Glow Worms"),
|
||||
_doc_items_longdesc = dfcaverns.doc.glow_worms_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.glow_worms_usage,
|
||||
tiles = {"dfcaverns_glow_worm.png"},
|
||||
tiles = {
|
||||
{
|
||||
name = "dfcaverns_glow_worm_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 4.0,
|
||||
},
|
||||
},
|
||||
},
|
||||
inventory_image = "dfcaverns_glow_worm.png",
|
||||
wield_image = "dfcaverns_glow_worm.png",
|
||||
is_ground_content = true,
|
@ -16,6 +16,7 @@ minetest.register_node("dfcaverns:dirt_with_cave_moss", {
|
||||
tileable_vertical = false}},
|
||||
drop = "default:dirt",
|
||||
is_ground_content = true,
|
||||
light_source = 2,
|
||||
groups = {crumbly = 3, soil = 1, light_sensitive_fungus = 11},
|
||||
sounds = default.node_sound_dirt_defaults({
|
||||
footstep = {name = "default_grass_footstep", gain = 0.25},
|
||||
@ -52,7 +53,21 @@ minetest.register_node("dfcaverns:cobble_with_floor_fungus", {
|
||||
description = S("Cobblestone With Floor Fungus"),
|
||||
_doc_items_longdesc = dfcaverns.doc.floor_fungus_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.floor_fungus_usage,
|
||||
tiles = {"default_cobble.png^dfcaverns_floor_fungus.png", "default_cobble.png", "default_cobble.png^dfcaverns_floor_fungus_side.png"},
|
||||
tiles = {"default_cobble.png^dfcaverns_floor_fungus.png"},
|
||||
drops = "default:cobble",
|
||||
is_ground_content = true,
|
||||
groups = {cracky = 3, stone = 2, slippery = 1, light_sensitive_fungus = 11},
|
||||
_dfcaverns_dead_node = "default:cobble",
|
||||
sounds = default.node_sound_stone_defaults({
|
||||
footstep = {name = "dfcaverns_squish", gain = 0.25},
|
||||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:cobble_with_floor_fungus_fine", {
|
||||
description = S("Cobblestone With Floor Fungus"),
|
||||
_doc_items_longdesc = dfcaverns.doc.floor_fungus_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.floor_fungus_usage,
|
||||
tiles = {"default_cobble.png^dfcaverns_floor_fungus_fine.png"},
|
||||
drops = "default:cobble",
|
||||
is_ground_content = true,
|
||||
groups = {cracky = 3, stone = 2, slippery = 1, light_sensitive_fungus = 11},
|
||||
@ -67,6 +82,16 @@ minetest.register_abm{
|
||||
nodenames = {"default:cobble"},
|
||||
neighbors = {"dfcaverns:cobble_with_floor_fungus"},
|
||||
interval = 60,
|
||||
chance = 5,
|
||||
catch_up = true,
|
||||
action = function(pos)
|
||||
minetest.swap_node(pos, {name="dfcaverns:cobble_with_floor_fungus_fine"})
|
||||
end,
|
||||
}
|
||||
minetest.register_abm{
|
||||
label = "dfcaverns:floor_fungus_thickening",
|
||||
nodenames = {"default:cobble_with_floor_fungus_fine"},
|
||||
interval = 59,
|
||||
chance = 30,
|
||||
catch_up = true,
|
||||
action = function(pos)
|
74
features/snareweed.lua
Normal file
@ -0,0 +1,74 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
minetest.register_node("dfcaverns:snareweed", {
|
||||
description = S("Snareweed"),
|
||||
_doc_items_longdesc = dfcaverns.doc.snareweed_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.snareweed_usage,
|
||||
tiles = {"default_dirt.png^dfcaverns_snareweed_roots.png", "default_dirt.png"},
|
||||
drawtype="plantlike_rooted",
|
||||
paramtype2 = "leveled",
|
||||
special_tiles = {{name = "dfcaverns_snareweed.png", tileable_vertical = true}},
|
||||
is_ground_content = true,
|
||||
drop = 'default:dirt',
|
||||
light_source = 6,
|
||||
groups = {crumbly = 3, soil = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
if dfcaverns.config.snareweed_damage then
|
||||
local timer = 0
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
timer = timer + dtime
|
||||
if timer >= 1 then
|
||||
timer = timer - 1
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local player_pos = player:getpos() -- node player's feet are in this location.
|
||||
local rounded_pos = vector.round(player_pos)
|
||||
local nearby_nodes = minetest.find_nodes_in_area(vector.add(rounded_pos, {x=0, y= -8, z=0}), rounded_pos, {"dfcaverns:snareweed"})
|
||||
for _, node_pos in ipairs(nearby_nodes) do
|
||||
local node = minetest.get_node(node_pos)
|
||||
local distance = player_pos.y - node_pos.y
|
||||
if distance <= node.param2/16 then
|
||||
minetest.log("action", player:get_player_name() .. " takes 2 damage from snareweed at " .. minetest.pos_to_string(node_pos))
|
||||
player:set_hp(player:get_hp() - 2)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
local c_water = minetest.get_content_id("default:water_source")
|
||||
local c_dirt = minetest.get_content_id("default:dirt")
|
||||
local c_snareweed = minetest.get_content_id("dfcaverns:snareweed")
|
||||
|
||||
dfcaverns.place_snareweed = function(area, data, bi, param2_data)
|
||||
local max_height = 0
|
||||
local index = bi + area.ystride
|
||||
while area:containsi(index) and data[index] == c_water and max_height <= 8*16 do
|
||||
index = index + area.ystride
|
||||
max_height = max_height + 16
|
||||
end
|
||||
if max_height > 0 then
|
||||
data[bi] = c_snareweed
|
||||
param2_data[bi] = math.min(math.random(3*16, 8*16), max_height)
|
||||
else
|
||||
data[bi] = c_dirt
|
||||
end
|
||||
end
|
||||
|
||||
dfcaverns.place_snareweed_patch = function(area, data, bi, param2_data, radius)
|
||||
local pos = area:position(bi)
|
||||
for li in area:iterp(vector.add(pos, -radius), vector.add(pos, radius)) do
|
||||
local adjacent = li + area.ystride
|
||||
local node_type = data[li]
|
||||
if math.random() < 0.1 and (node_type == c_stone or node_type == c_dirt) and data[adjacent] == c_water then
|
||||
dfcaverns.place_snareweed(area, data, li, param2_data)
|
||||
end
|
||||
end
|
||||
end
|
12
init.lua
@ -6,11 +6,16 @@ local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
--load companion lua files
|
||||
dofile(modpath.."/config.lua")
|
||||
dofile(modpath.."/doc.lua")
|
||||
dofile(modpath.."/voxelarea_iterator.lua")
|
||||
|
||||
dofile(modpath.."/ground_cover.lua")
|
||||
dofile(modpath.."/glow_worms.lua")
|
||||
dofile(modpath.."/features/ground_cover.lua")
|
||||
dofile(modpath.."/features/glow_worms.lua")
|
||||
dofile(modpath.."/features/flowstone_nodes.lua")
|
||||
dofile(modpath.."/features/glow_crystals.lua")
|
||||
dofile(modpath.."/features/snareweed.lua")
|
||||
dofile(modpath.."/features/cave_coral.lua")
|
||||
|
||||
-- Plants
|
||||
-- Farmable Plants
|
||||
dofile(modpath.."/plants.lua") -- general functions
|
||||
dofile(modpath.."/plants/cave_wheat.lua")
|
||||
dofile(modpath.."/plants/dimple_cup.lua")
|
||||
@ -35,4 +40,5 @@ dofile(modpath.."/biomes.lua")
|
||||
dofile(modpath.."/biomes/level1.lua")
|
||||
dofile(modpath.."/biomes/level2.lua")
|
||||
dofile(modpath.."/biomes/level3.lua")
|
||||
dofile(modpath.."/biomes/sunless_sea.lua")
|
||||
dofile(modpath.."/biomes/lava_sea.lua")
|
||||
|
293
locale/it.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dfcaverns module's Italian locale\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-19 19:58-0600\n"
|
||||
"POT-Creation-Date: 2018-05-23 02:30-0600\n"
|
||||
"PO-Revision-Date: 2017-08-17 23:01+0100\n"
|
||||
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
|
||||
"Language-Team: ITALIANO\n"
|
||||
@ -45,7 +45,8 @@ msgstr ""
|
||||
|
||||
#: doc.lua:19
|
||||
msgid ""
|
||||
"Cave moss has no known uses. It dies when exposed to bright light sources."
|
||||
"Cave moss has no known uses aside from the faint glow it emits. It dies when "
|
||||
"exposed to bright light sources such as the Sun."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:20
|
||||
@ -78,106 +79,202 @@ msgid ""
|
||||
"a modest amount of growth, allowing it to be divided and propagated."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:28
|
||||
msgid "Whatever this fungus was in life, it is now dead."
|
||||
#: doc.lua:26
|
||||
msgid ""
|
||||
"A nasty kelp-like plant that grows in patches on the floor of the Sunless "
|
||||
"Sea. Its reflective patches draw in the unwary and then its prickly barbs "
|
||||
"catch and hold small creatures."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:27
|
||||
msgid "Snareweed has no practical use, its fibers disintegrate when they dry."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:29
|
||||
msgid ""
|
||||
"A rare form of coral found only deep underground in the Sunless Sea, cave "
|
||||
"coral grows hanging from the ceilings of flooded caverns."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:30
|
||||
msgid ""
|
||||
"Aside from their aesthetic beauty, cave corals can be harvested for simple "
|
||||
"building materials."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:32
|
||||
msgid ""
|
||||
"Flowstone is a carbonate-rich rock formation deposited by flowing water. It "
|
||||
"consists of minerals that the water dissolved earlier as it widens cracks "
|
||||
"and fissures into caves."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:33
|
||||
msgid ""
|
||||
"Aside from the aesthetic beauty of its formations flowstone has no special "
|
||||
"properties or uses."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:34
|
||||
msgid ""
|
||||
"The iconic stalactites and stalagmites found in caverns are composed of "
|
||||
"flowstone (or 'dripstone' in the case of these formations). Moist dripstone "
|
||||
"is still undergoing growth, whereas dry dripstone is found in 'dead' caverns "
|
||||
"once the source of water that created them ceases."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:35
|
||||
msgid ""
|
||||
"Although stalagmites are blunter than the stalactites above them, they can "
|
||||
"cause extra damage to the unwary caver who falls on them."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:36
|
||||
msgid ""
|
||||
"Ice formed by water dripping slowly into a cold environment, icicles tend to "
|
||||
"be exceptionally pure and clear."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:37
|
||||
msgid "Falling onto an icicle is particularly damaging."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:40
|
||||
msgid ""
|
||||
"Deep in the infernal conditions of the magma sea, over the course of "
|
||||
"millions of years, mese crystals grow into flawless blocks that glow bright "
|
||||
"with strange energies."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:41
|
||||
msgid ""
|
||||
"These blocks can be broken down into a large number of mese crystals, but "
|
||||
"cannot be artificially reassembled."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:43
|
||||
msgid ""
|
||||
"Large, dry caverns deep underground are well suited to aeons-long processes "
|
||||
"that concentrate crystalline substances in their walls. This rock is riddled "
|
||||
"with veins of the stuff."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:44
|
||||
msgid "Aside from its aesthetic value this rock has no particular use."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:46
|
||||
msgid ""
|
||||
"Monolithic crystals of this size form only over extremely long periods deep "
|
||||
"underground, in large long-lived cavities that allow them room to grow. "
|
||||
"Water and the life it hosts tend to disrupt the formation process of these "
|
||||
"crystals so they're only found in dry environments."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:47
|
||||
msgid "Aside from its aesthetic value this crystal has no particular use."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:51
|
||||
msgid "Whatever this fungus was in life, it is now dead."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:52
|
||||
msgid ""
|
||||
"Dead fungus quickly decays into an unrecognizable mess. It can be used as "
|
||||
"weak fuel or terrible decor."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:31
|
||||
#: doc.lua:54
|
||||
msgid ""
|
||||
"A species of lavender mushroom ubiquitous in caves that is most notable for "
|
||||
"the soft bioluminescence it produces."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:32
|
||||
#: doc.lua:55
|
||||
msgid ""
|
||||
"This mushroom is inedible but continues producing modest levels of light "
|
||||
"long after it's picked."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:34
|
||||
#: doc.lua:57
|
||||
msgid ""
|
||||
"Cave wheat is literally a breed of grain-producing grass that somehow lost "
|
||||
"its ability to photosynthesize and adapted to a more fungal style of life."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:35
|
||||
#: doc.lua:58
|
||||
msgid ""
|
||||
"Like its surface cousin, cave wheat produces grain that can be ground into a "
|
||||
"form of flour."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:36
|
||||
#: doc.lua:59
|
||||
msgid "Cave wheat seed ground into a powder suitable for cooking."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:37
|
||||
#: doc.lua:60
|
||||
msgid ""
|
||||
"When baked alone it forms an edible bread, but it combines well with other "
|
||||
"more flavorful ingredients."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:38
|
||||
#: doc.lua:61
|
||||
msgid ""
|
||||
"Bread baked from cave wheat flour is tough and durable. A useful ration for "
|
||||
"long expeditions."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:39
|
||||
#: doc.lua:62
|
||||
msgid "It's not tasty, but it keeps you going."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:41
|
||||
#: doc.lua:64
|
||||
msgid ""
|
||||
"The distinctive midnight-blue caps of these mushrooms are inverted, exposing "
|
||||
"their gills to any breeze that might pass, and have dimpled edges that give "
|
||||
"them their name."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:42
|
||||
#: doc.lua:65
|
||||
msgid ""
|
||||
"Dimple cups can be dried, ground, and processed to extract a deep blue dye."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:44
|
||||
#: doc.lua:67
|
||||
msgid ""
|
||||
"Pig tails are a fibrous fungal growth that's most notable for its twisting "
|
||||
"stalks. In a mature stand of pig tails the helical stalks intertwine into a "
|
||||
"dense mesh."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:45
|
||||
#: doc.lua:68
|
||||
msgid "Pig tail stalks can be processed to extract fibers useful as thread."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:46
|
||||
#: doc.lua:69
|
||||
msgid "Threads of pig tail fiber."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:47
|
||||
#: doc.lua:70
|
||||
msgid ""
|
||||
"A crafting item that can be woven into textiles and other similar items."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:49
|
||||
#: doc.lua:72
|
||||
msgid ""
|
||||
"Plump helmets are a thick, fleshy mushroom that's edible picked straight "
|
||||
"from the ground. They form a staple diet for both lost cave explorers and "
|
||||
"the fauna that preys on them."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:50
|
||||
#: doc.lua:73
|
||||
msgid ""
|
||||
"While they can be eaten fresh, they can be monotonous fare and are perhaps "
|
||||
"better appreciated as part of a more complex prepared dish."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:52
|
||||
#: doc.lua:75
|
||||
msgid ""
|
||||
"A rare breed of fungus from deep underground that produces a bushy cluster "
|
||||
"of rumpled gray 'blades'. The biological function of these blades is not "
|
||||
@ -185,24 +282,24 @@ msgid ""
|
||||
"the blade's base."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:53
|
||||
#: doc.lua:76
|
||||
msgid ""
|
||||
"Quarry bush leaves and nodules (called 'rock nuts') can be harvested and are "
|
||||
"edible with processing."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:54
|
||||
#: doc.lua:77
|
||||
msgid ""
|
||||
"The dried blades of a quarry bush add a welcome zing to recipes containing "
|
||||
"otherwise-bland subterranean foodstuffs, but they're too spicy to be eaten "
|
||||
"on their own."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:55
|
||||
#: doc.lua:78
|
||||
msgid "Quarry bush leaves can be used as an ingredient in foodstuffs."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:57
|
||||
#: doc.lua:80
|
||||
msgid ""
|
||||
"Sweet pods grow in rich soil, and once they reach maturity they draw that "
|
||||
"supply of nutrients up to concentrate it in their fruiting bodies. They turn "
|
||||
@ -210,52 +307,52 @@ msgid ""
|
||||
"the sugars they contain."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:60
|
||||
#: doc.lua:83
|
||||
msgid "When milled, sweet pods produce a granular sugary substance."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:62
|
||||
#: doc.lua:85
|
||||
msgid "When dried in an oven, sweet pods produce a granular sugary substance."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:64
|
||||
#: doc.lua:87
|
||||
msgid "Crushing them in a bucket squeezes out a flavorful syrup."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:66
|
||||
#: doc.lua:89
|
||||
msgid "Sweet pod sugar has a pink tint to it."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:67
|
||||
#: doc.lua:90
|
||||
msgid ""
|
||||
"Too sweet to be eaten directly, it makes an excellent ingredient in food "
|
||||
"recipes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:68
|
||||
#: doc.lua:91
|
||||
msgid "Sweet pod syrup is thick and flavorful."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:69
|
||||
#: doc.lua:92
|
||||
msgid ""
|
||||
"Too strong and thick to drink straight, sweet pod syrup is useful in food "
|
||||
"recipes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:72
|
||||
#: doc.lua:95
|
||||
msgid ""
|
||||
"The dense black wood of these mushrooms is heavy and hard to work with, and "
|
||||
"has few remarkable properties."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:73
|
||||
#: doc.lua:96
|
||||
msgid ""
|
||||
"Aside from the artistic applications of its particularly dark color, black "
|
||||
"cap wood is a long-burning fuel source that's as good as coal for some "
|
||||
"applications."
|
||||
"applications. Black cap gills are oily and make for excellent torch fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:75
|
||||
#: doc.lua:98
|
||||
msgid ""
|
||||
"Blood thorns are the most vicious of underground flora, as befits their "
|
||||
"harsh environments. Found only in hot, dry caverns with sandy soil far from "
|
||||
@ -264,14 +361,14 @@ msgid ""
|
||||
"fluids from whatever stray plant or creature they might impale."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:76
|
||||
#: doc.lua:99
|
||||
msgid ""
|
||||
"When harvested, the central stalk of a blood thorn can be cut into planks "
|
||||
"and used as wood. It has a purple-red hue that may or may not appeal, "
|
||||
"depending on one's artistic tastes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:77
|
||||
#: doc.lua:100
|
||||
msgid ""
|
||||
"The spikes of a blood thorn can actually remain living long after they're "
|
||||
"severed from their parent stalk, a testament to their tenacity. As long as "
|
||||
@ -279,39 +376,39 @@ msgid ""
|
||||
"puncture, though they don't grow."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:78
|
||||
#: doc.lua:101
|
||||
msgid ""
|
||||
"Living blood thorn spikes remain harmful to creatures that touch them. If "
|
||||
"killed by bright light, they cause only passive damage to creatures that "
|
||||
"fall on them (as one would expect from an enormous spike)."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:80
|
||||
#: doc.lua:103
|
||||
msgid ""
|
||||
"Thin, irregular layers of spore-producing 'shelves' surround the strong "
|
||||
"central stalk of the mighty Fungiwood."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:81
|
||||
#: doc.lua:104
|
||||
msgid ""
|
||||
"Fungiwood stalk is strong and very fine-grained, making smooth yellow-tinted "
|
||||
"lumber when cut. Fungiwood shelf is too fragile to be much use as anything "
|
||||
"other than fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:83
|
||||
#: doc.lua:106
|
||||
msgid ""
|
||||
"Massive but squat, mature goblin cap mushrooms are the size of small "
|
||||
"cottages."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:84
|
||||
#: doc.lua:107
|
||||
msgid ""
|
||||
"Goblin cap stem and cap material can be cut into wood of two different hues, "
|
||||
"a subdued cream and a bright orange-red."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:86
|
||||
#: doc.lua:109
|
||||
msgid ""
|
||||
"Nether caps have an unusual biochemistry that allows them to somehow subsist "
|
||||
"on ambient heat, in violation of all known laws of thermodynamics. They grow "
|
||||
@ -319,40 +416,40 @@ msgid ""
|
||||
"volcanic."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:87
|
||||
#: doc.lua:110
|
||||
msgid ""
|
||||
"Nether cap wood, in addition to being a beautiful blue hue, retains the odd "
|
||||
"heat-draining ability of living nether caps and is able to quickly freeze "
|
||||
"nearby water solid."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:89
|
||||
#: doc.lua:112
|
||||
msgid ""
|
||||
"Spore trees have a sturdy 'trunk' that supports a large spongy mesh of "
|
||||
"branching fibers, with embedded fruiting bodies that produce a copious "
|
||||
"amount of spores that gently rain down around the spore tree's base."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:90
|
||||
#: doc.lua:113
|
||||
msgid ""
|
||||
"Spore tree trunks can be cut into pale woody planks. The branching fibers "
|
||||
"and fruiting bodies are only useful as fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:92
|
||||
#: doc.lua:115
|
||||
msgid "The king of the fungi, tower cap mushrooms grow to immense proportions."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:93
|
||||
#: doc.lua:116
|
||||
msgid "Tower caps are an excellent source of wood."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:95
|
||||
#: doc.lua:118
|
||||
msgid ""
|
||||
"Tunnel tubes are hollow, curved fungal growths that support a fruiting body."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:97
|
||||
#: doc.lua:120
|
||||
msgid ""
|
||||
"The trunk of a tunnel tube can be cut and processed to produce plywood-like "
|
||||
"material. The fruiting body accumulates high-energy compounds that, when "
|
||||
@ -360,24 +457,12 @@ msgid ""
|
||||
"tunnel tube spawn through the still cavern air."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:99
|
||||
#: doc.lua:122
|
||||
msgid ""
|
||||
"The trunk of a tunnel tube can be cut and processed to produce plywood-like "
|
||||
"material."
|
||||
msgstr ""
|
||||
|
||||
#: glow_worms.lua:6
|
||||
msgid "Glow Worms"
|
||||
msgstr "Vermi luminosi"
|
||||
|
||||
#: ground_cover.lua:11
|
||||
msgid "Dirt With Cave Moss"
|
||||
msgstr "Terra con muschio di caverna"
|
||||
|
||||
#: ground_cover.lua:52
|
||||
msgid "Cobblestone With Floor Fungus"
|
||||
msgstr "Ciottoli con funghi del terreno"
|
||||
|
||||
#: plants.lua:10
|
||||
msgid "Dead Fungus"
|
||||
msgstr "Fungo morto"
|
||||
@ -386,6 +471,69 @@ msgstr "Fungo morto"
|
||||
msgid "Cavern Fungi"
|
||||
msgstr "Funghi di caverna"
|
||||
|
||||
#: features\cave_coral.lua:6
|
||||
#: features\cave_coral.lua:18
|
||||
#: features\cave_coral.lua:30
|
||||
#, fuzzy
|
||||
msgid "Cave Coral"
|
||||
msgstr "Grano di caverna"
|
||||
|
||||
#: features\flowstone_nodes.lua:19
|
||||
msgid "Dry Dripstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:30
|
||||
msgid "Dry Flowstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:43
|
||||
msgid "Wet Dripstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:55
|
||||
msgid "Wet Flowstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:68
|
||||
msgid "Icicle"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:7
|
||||
msgid "Flawless Mese Block"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:29
|
||||
msgid "Crystal Vein"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:40
|
||||
#: features\glow_crystals.lua:95
|
||||
#: features\glow_crystals.lua:182
|
||||
msgid "Giant Crystal"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:67
|
||||
#: features\glow_crystals.lua:146
|
||||
#: features\glow_crystals.lua:219
|
||||
msgid "Big Crystal"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_worms.lua:6
|
||||
msgid "Glow Worms"
|
||||
msgstr "Vermi luminosi"
|
||||
|
||||
#: features\ground_cover.lua:11
|
||||
msgid "Dirt With Cave Moss"
|
||||
msgstr "Terra con muschio di caverna"
|
||||
|
||||
#: features\ground_cover.lua:53
|
||||
msgid "Cobblestone With Floor Fungus"
|
||||
msgstr "Ciottoli con funghi del terreno"
|
||||
|
||||
#: features\snareweed.lua:6
|
||||
msgid "Snareweed"
|
||||
msgstr ""
|
||||
|
||||
#: plants\cave_wheat.lua:10
|
||||
#: plants\cave_wheat.lua:69
|
||||
msgid "Cave Wheat"
|
||||
@ -525,11 +673,11 @@ msgstr "Cappello nero"
|
||||
msgid "Black Cap Gills"
|
||||
msgstr "Lamelle di cappello nero"
|
||||
|
||||
#: trees\black_cap.lua:77
|
||||
#: trees\black_cap.lua:85
|
||||
msgid "Black Cap Planks"
|
||||
msgstr "Assi di cappello nero"
|
||||
|
||||
#: trees\black_cap.lua:116
|
||||
#: trees\black_cap.lua:124
|
||||
msgid "Black Cap Spawn"
|
||||
msgstr "Prole di cappello nero"
|
||||
|
||||
@ -654,19 +802,22 @@ msgid "Tower Cap Spawn"
|
||||
msgstr "Prole di cappello a torre"
|
||||
|
||||
#: trees\tunnel_tube.lua:16
|
||||
#: trees\tunnel_tube.lua:39
|
||||
#: trees\tunnel_tube.lua:69
|
||||
#: trees\tunnel_tube.lua:98
|
||||
msgid "Tunnel Tube"
|
||||
msgstr "Tubo di galleria"
|
||||
|
||||
#: trees\tunnel_tube.lua:47
|
||||
#: trees\tunnel_tube.lua:135
|
||||
msgid "Tunnel Tube Plies"
|
||||
msgstr "Strati di tubo di galleria"
|
||||
|
||||
#: trees\tunnel_tube.lua:79
|
||||
#: trees\tunnel_tube.lua:135
|
||||
#: trees\tunnel_tube.lua:157
|
||||
#: trees\tunnel_tube.lua:170
|
||||
#: trees\tunnel_tube.lua:226
|
||||
#: trees\tunnel_tube.lua:246
|
||||
msgid "Tunnel Tube Fruiting Body"
|
||||
msgstr "Corpo fruttifero del tubo di galleria"
|
||||
|
||||
#: trees\tunnel_tube.lua:187
|
||||
#: trees\tunnel_tube.lua:277
|
||||
msgid "Tunnel Tube Spawn"
|
||||
msgstr "Prole di tubo di galleria"
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-19 19:58-0600\n"
|
||||
"POT-Creation-Date: 2018-05-23 02:30-0600\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -44,7 +44,8 @@ msgstr ""
|
||||
|
||||
#: doc.lua:19
|
||||
msgid ""
|
||||
"Cave moss has no known uses. It dies when exposed to bright light sources."
|
||||
"Cave moss has no known uses aside from the faint glow it emits. It dies when "
|
||||
"exposed to bright light sources such as the Sun."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:20
|
||||
@ -77,106 +78,202 @@ msgid ""
|
||||
"a modest amount of growth, allowing it to be divided and propagated."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:28
|
||||
msgid "Whatever this fungus was in life, it is now dead."
|
||||
#: doc.lua:26
|
||||
msgid ""
|
||||
"A nasty kelp-like plant that grows in patches on the floor of the Sunless "
|
||||
"Sea. Its reflective patches draw in the unwary and then its prickly barbs "
|
||||
"catch and hold small creatures."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:27
|
||||
msgid "Snareweed has no practical use, its fibers disintegrate when they dry."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:29
|
||||
msgid ""
|
||||
"A rare form of coral found only deep underground in the Sunless Sea, cave "
|
||||
"coral grows hanging from the ceilings of flooded caverns."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:30
|
||||
msgid ""
|
||||
"Aside from their aesthetic beauty, cave corals can be harvested for simple "
|
||||
"building materials."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:32
|
||||
msgid ""
|
||||
"Flowstone is a carbonate-rich rock formation deposited by flowing water. It "
|
||||
"consists of minerals that the water dissolved earlier as it widens cracks "
|
||||
"and fissures into caves."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:33
|
||||
msgid ""
|
||||
"Aside from the aesthetic beauty of its formations flowstone has no special "
|
||||
"properties or uses."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:34
|
||||
msgid ""
|
||||
"The iconic stalactites and stalagmites found in caverns are composed of "
|
||||
"flowstone (or 'dripstone' in the case of these formations). Moist dripstone "
|
||||
"is still undergoing growth, whereas dry dripstone is found in 'dead' caverns "
|
||||
"once the source of water that created them ceases."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:35
|
||||
msgid ""
|
||||
"Although stalagmites are blunter than the stalactites above them, they can "
|
||||
"cause extra damage to the unwary caver who falls on them."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:36
|
||||
msgid ""
|
||||
"Ice formed by water dripping slowly into a cold environment, icicles tend to "
|
||||
"be exceptionally pure and clear."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:37
|
||||
msgid "Falling onto an icicle is particularly damaging."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:40
|
||||
msgid ""
|
||||
"Deep in the infernal conditions of the magma sea, over the course of "
|
||||
"millions of years, mese crystals grow into flawless blocks that glow bright "
|
||||
"with strange energies."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:41
|
||||
msgid ""
|
||||
"These blocks can be broken down into a large number of mese crystals, but "
|
||||
"cannot be artificially reassembled."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:43
|
||||
msgid ""
|
||||
"Large, dry caverns deep underground are well suited to aeons-long processes "
|
||||
"that concentrate crystalline substances in their walls. This rock is riddled "
|
||||
"with veins of the stuff."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:44
|
||||
msgid "Aside from its aesthetic value this rock has no particular use."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:46
|
||||
msgid ""
|
||||
"Monolithic crystals of this size form only over extremely long periods deep "
|
||||
"underground, in large long-lived cavities that allow them room to grow. "
|
||||
"Water and the life it hosts tend to disrupt the formation process of these "
|
||||
"crystals so they're only found in dry environments."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:47
|
||||
msgid "Aside from its aesthetic value this crystal has no particular use."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:51
|
||||
msgid "Whatever this fungus was in life, it is now dead."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:52
|
||||
msgid ""
|
||||
"Dead fungus quickly decays into an unrecognizable mess. It can be used as "
|
||||
"weak fuel or terrible decor."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:31
|
||||
#: doc.lua:54
|
||||
msgid ""
|
||||
"A species of lavender mushroom ubiquitous in caves that is most notable for "
|
||||
"the soft bioluminescence it produces."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:32
|
||||
#: doc.lua:55
|
||||
msgid ""
|
||||
"This mushroom is inedible but continues producing modest levels of light "
|
||||
"long after it's picked."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:34
|
||||
#: doc.lua:57
|
||||
msgid ""
|
||||
"Cave wheat is literally a breed of grain-producing grass that somehow lost "
|
||||
"its ability to photosynthesize and adapted to a more fungal style of life."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:35
|
||||
#: doc.lua:58
|
||||
msgid ""
|
||||
"Like its surface cousin, cave wheat produces grain that can be ground into a "
|
||||
"form of flour."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:36
|
||||
#: doc.lua:59
|
||||
msgid "Cave wheat seed ground into a powder suitable for cooking."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:37
|
||||
#: doc.lua:60
|
||||
msgid ""
|
||||
"When baked alone it forms an edible bread, but it combines well with other "
|
||||
"more flavorful ingredients."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:38
|
||||
#: doc.lua:61
|
||||
msgid ""
|
||||
"Bread baked from cave wheat flour is tough and durable. A useful ration for "
|
||||
"long expeditions."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:39
|
||||
#: doc.lua:62
|
||||
msgid "It's not tasty, but it keeps you going."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:41
|
||||
#: doc.lua:64
|
||||
msgid ""
|
||||
"The distinctive midnight-blue caps of these mushrooms are inverted, exposing "
|
||||
"their gills to any breeze that might pass, and have dimpled edges that give "
|
||||
"them their name."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:42
|
||||
#: doc.lua:65
|
||||
msgid ""
|
||||
"Dimple cups can be dried, ground, and processed to extract a deep blue dye."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:44
|
||||
#: doc.lua:67
|
||||
msgid ""
|
||||
"Pig tails are a fibrous fungal growth that's most notable for its twisting "
|
||||
"stalks. In a mature stand of pig tails the helical stalks intertwine into a "
|
||||
"dense mesh."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:45
|
||||
#: doc.lua:68
|
||||
msgid "Pig tail stalks can be processed to extract fibers useful as thread."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:46
|
||||
#: doc.lua:69
|
||||
msgid "Threads of pig tail fiber."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:47
|
||||
#: doc.lua:70
|
||||
msgid ""
|
||||
"A crafting item that can be woven into textiles and other similar items."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:49
|
||||
#: doc.lua:72
|
||||
msgid ""
|
||||
"Plump helmets are a thick, fleshy mushroom that's edible picked straight "
|
||||
"from the ground. They form a staple diet for both lost cave explorers and "
|
||||
"the fauna that preys on them."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:50
|
||||
#: doc.lua:73
|
||||
msgid ""
|
||||
"While they can be eaten fresh, they can be monotonous fare and are perhaps "
|
||||
"better appreciated as part of a more complex prepared dish."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:52
|
||||
#: doc.lua:75
|
||||
msgid ""
|
||||
"A rare breed of fungus from deep underground that produces a bushy cluster "
|
||||
"of rumpled gray 'blades'. The biological function of these blades is not "
|
||||
@ -184,24 +281,24 @@ msgid ""
|
||||
"the blade's base."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:53
|
||||
#: doc.lua:76
|
||||
msgid ""
|
||||
"Quarry bush leaves and nodules (called 'rock nuts') can be harvested and are "
|
||||
"edible with processing."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:54
|
||||
#: doc.lua:77
|
||||
msgid ""
|
||||
"The dried blades of a quarry bush add a welcome zing to recipes containing "
|
||||
"otherwise-bland subterranean foodstuffs, but they're too spicy to be eaten "
|
||||
"on their own."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:55
|
||||
#: doc.lua:78
|
||||
msgid "Quarry bush leaves can be used as an ingredient in foodstuffs."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:57
|
||||
#: doc.lua:80
|
||||
msgid ""
|
||||
"Sweet pods grow in rich soil, and once they reach maturity they draw that "
|
||||
"supply of nutrients up to concentrate it in their fruiting bodies. They turn "
|
||||
@ -209,52 +306,52 @@ msgid ""
|
||||
"the sugars they contain."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:60
|
||||
#: doc.lua:83
|
||||
msgid "When milled, sweet pods produce a granular sugary substance."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:62
|
||||
#: doc.lua:85
|
||||
msgid "When dried in an oven, sweet pods produce a granular sugary substance."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:64
|
||||
#: doc.lua:87
|
||||
msgid "Crushing them in a bucket squeezes out a flavorful syrup."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:66
|
||||
#: doc.lua:89
|
||||
msgid "Sweet pod sugar has a pink tint to it."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:67
|
||||
#: doc.lua:90
|
||||
msgid ""
|
||||
"Too sweet to be eaten directly, it makes an excellent ingredient in food "
|
||||
"recipes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:68
|
||||
#: doc.lua:91
|
||||
msgid "Sweet pod syrup is thick and flavorful."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:69
|
||||
#: doc.lua:92
|
||||
msgid ""
|
||||
"Too strong and thick to drink straight, sweet pod syrup is useful in food "
|
||||
"recipes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:72
|
||||
#: doc.lua:95
|
||||
msgid ""
|
||||
"The dense black wood of these mushrooms is heavy and hard to work with, and "
|
||||
"has few remarkable properties."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:73
|
||||
#: doc.lua:96
|
||||
msgid ""
|
||||
"Aside from the artistic applications of its particularly dark color, black "
|
||||
"cap wood is a long-burning fuel source that's as good as coal for some "
|
||||
"applications."
|
||||
"applications. Black cap gills are oily and make for excellent torch fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:75
|
||||
#: doc.lua:98
|
||||
msgid ""
|
||||
"Blood thorns are the most vicious of underground flora, as befits their "
|
||||
"harsh environments. Found only in hot, dry caverns with sandy soil far from "
|
||||
@ -263,14 +360,14 @@ msgid ""
|
||||
"fluids from whatever stray plant or creature they might impale."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:76
|
||||
#: doc.lua:99
|
||||
msgid ""
|
||||
"When harvested, the central stalk of a blood thorn can be cut into planks "
|
||||
"and used as wood. It has a purple-red hue that may or may not appeal, "
|
||||
"depending on one's artistic tastes."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:77
|
||||
#: doc.lua:100
|
||||
msgid ""
|
||||
"The spikes of a blood thorn can actually remain living long after they're "
|
||||
"severed from their parent stalk, a testament to their tenacity. As long as "
|
||||
@ -278,39 +375,39 @@ msgid ""
|
||||
"puncture, though they don't grow."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:78
|
||||
#: doc.lua:101
|
||||
msgid ""
|
||||
"Living blood thorn spikes remain harmful to creatures that touch them. If "
|
||||
"killed by bright light, they cause only passive damage to creatures that "
|
||||
"fall on them (as one would expect from an enormous spike)."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:80
|
||||
#: doc.lua:103
|
||||
msgid ""
|
||||
"Thin, irregular layers of spore-producing 'shelves' surround the strong "
|
||||
"central stalk of the mighty Fungiwood."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:81
|
||||
#: doc.lua:104
|
||||
msgid ""
|
||||
"Fungiwood stalk is strong and very fine-grained, making smooth yellow-tinted "
|
||||
"lumber when cut. Fungiwood shelf is too fragile to be much use as anything "
|
||||
"other than fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:83
|
||||
#: doc.lua:106
|
||||
msgid ""
|
||||
"Massive but squat, mature goblin cap mushrooms are the size of small "
|
||||
"cottages."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:84
|
||||
#: doc.lua:107
|
||||
msgid ""
|
||||
"Goblin cap stem and cap material can be cut into wood of two different hues, "
|
||||
"a subdued cream and a bright orange-red."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:86
|
||||
#: doc.lua:109
|
||||
msgid ""
|
||||
"Nether caps have an unusual biochemistry that allows them to somehow subsist "
|
||||
"on ambient heat, in violation of all known laws of thermodynamics. They grow "
|
||||
@ -318,40 +415,40 @@ msgid ""
|
||||
"volcanic."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:87
|
||||
#: doc.lua:110
|
||||
msgid ""
|
||||
"Nether cap wood, in addition to being a beautiful blue hue, retains the odd "
|
||||
"heat-draining ability of living nether caps and is able to quickly freeze "
|
||||
"nearby water solid."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:89
|
||||
#: doc.lua:112
|
||||
msgid ""
|
||||
"Spore trees have a sturdy 'trunk' that supports a large spongy mesh of "
|
||||
"branching fibers, with embedded fruiting bodies that produce a copious "
|
||||
"amount of spores that gently rain down around the spore tree's base."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:90
|
||||
#: doc.lua:113
|
||||
msgid ""
|
||||
"Spore tree trunks can be cut into pale woody planks. The branching fibers "
|
||||
"and fruiting bodies are only useful as fuel."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:92
|
||||
#: doc.lua:115
|
||||
msgid "The king of the fungi, tower cap mushrooms grow to immense proportions."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:93
|
||||
#: doc.lua:116
|
||||
msgid "Tower caps are an excellent source of wood."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:95
|
||||
#: doc.lua:118
|
||||
msgid ""
|
||||
"Tunnel tubes are hollow, curved fungal growths that support a fruiting body."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:97
|
||||
#: doc.lua:120
|
||||
msgid ""
|
||||
"The trunk of a tunnel tube can be cut and processed to produce plywood-like "
|
||||
"material. The fruiting body accumulates high-energy compounds that, when "
|
||||
@ -359,24 +456,12 @@ msgid ""
|
||||
"tunnel tube spawn through the still cavern air."
|
||||
msgstr ""
|
||||
|
||||
#: doc.lua:99
|
||||
#: doc.lua:122
|
||||
msgid ""
|
||||
"The trunk of a tunnel tube can be cut and processed to produce plywood-like "
|
||||
"material."
|
||||
msgstr ""
|
||||
|
||||
#: glow_worms.lua:6
|
||||
msgid "Glow Worms"
|
||||
msgstr ""
|
||||
|
||||
#: ground_cover.lua:11
|
||||
msgid "Dirt With Cave Moss"
|
||||
msgstr ""
|
||||
|
||||
#: ground_cover.lua:52
|
||||
msgid "Cobblestone With Floor Fungus"
|
||||
msgstr ""
|
||||
|
||||
#: plants.lua:10
|
||||
msgid "Dead Fungus"
|
||||
msgstr ""
|
||||
@ -385,6 +470,68 @@ msgstr ""
|
||||
msgid "Cavern Fungi"
|
||||
msgstr ""
|
||||
|
||||
#: features\cave_coral.lua:6
|
||||
#: features\cave_coral.lua:18
|
||||
#: features\cave_coral.lua:30
|
||||
msgid "Cave Coral"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:19
|
||||
msgid "Dry Dripstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:30
|
||||
msgid "Dry Flowstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:43
|
||||
msgid "Wet Dripstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:55
|
||||
msgid "Wet Flowstone"
|
||||
msgstr ""
|
||||
|
||||
#: features\flowstone_nodes.lua:68
|
||||
msgid "Icicle"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:7
|
||||
msgid "Flawless Mese Block"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:29
|
||||
msgid "Crystal Vein"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:40
|
||||
#: features\glow_crystals.lua:95
|
||||
#: features\glow_crystals.lua:182
|
||||
msgid "Giant Crystal"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_crystals.lua:67
|
||||
#: features\glow_crystals.lua:146
|
||||
#: features\glow_crystals.lua:219
|
||||
msgid "Big Crystal"
|
||||
msgstr ""
|
||||
|
||||
#: features\glow_worms.lua:6
|
||||
msgid "Glow Worms"
|
||||
msgstr ""
|
||||
|
||||
#: features\ground_cover.lua:11
|
||||
msgid "Dirt With Cave Moss"
|
||||
msgstr ""
|
||||
|
||||
#: features\ground_cover.lua:53
|
||||
msgid "Cobblestone With Floor Fungus"
|
||||
msgstr ""
|
||||
|
||||
#: features\snareweed.lua:6
|
||||
msgid "Snareweed"
|
||||
msgstr ""
|
||||
|
||||
#: plants\cave_wheat.lua:10
|
||||
#: plants\cave_wheat.lua:69
|
||||
msgid "Cave Wheat"
|
||||
@ -524,11 +671,11 @@ msgstr ""
|
||||
msgid "Black Cap Gills"
|
||||
msgstr ""
|
||||
|
||||
#: trees\black_cap.lua:77
|
||||
#: trees\black_cap.lua:85
|
||||
msgid "Black Cap Planks"
|
||||
msgstr ""
|
||||
|
||||
#: trees\black_cap.lua:116
|
||||
#: trees\black_cap.lua:124
|
||||
msgid "Black Cap Spawn"
|
||||
msgstr ""
|
||||
|
||||
@ -653,19 +800,22 @@ msgid "Tower Cap Spawn"
|
||||
msgstr ""
|
||||
|
||||
#: trees\tunnel_tube.lua:16
|
||||
#: trees\tunnel_tube.lua:39
|
||||
#: trees\tunnel_tube.lua:69
|
||||
#: trees\tunnel_tube.lua:98
|
||||
msgid "Tunnel Tube"
|
||||
msgstr ""
|
||||
|
||||
#: trees\tunnel_tube.lua:47
|
||||
#: trees\tunnel_tube.lua:135
|
||||
msgid "Tunnel Tube Plies"
|
||||
msgstr ""
|
||||
|
||||
#: trees\tunnel_tube.lua:79
|
||||
#: trees\tunnel_tube.lua:135
|
||||
#: trees\tunnel_tube.lua:157
|
||||
#: trees\tunnel_tube.lua:170
|
||||
#: trees\tunnel_tube.lua:226
|
||||
#: trees\tunnel_tube.lua:246
|
||||
msgid "Tunnel Tube Fruiting Body"
|
||||
msgstr ""
|
||||
|
||||
#: trees\tunnel_tube.lua:187
|
||||
#: trees\tunnel_tube.lua:277
|
||||
msgid "Tunnel Tube Spawn"
|
||||
msgstr ""
|
||||
|
22
models/hex_crystal_30_45_big.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal 30.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_30_45_big.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal 30.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal_30_45.mtl
|
||||
o Cylinder
|
||||
v 0.135341 -0.831516 0.135341
|
||||
v -1.192872 2.421927 -1.192872
|
||||
v -0.353661 -0.499737 0.353446
|
||||
v -1.410977 2.090148 -0.703870
|
||||
v -0.442049 -0.716243 -0.088496
|
||||
v -1.499365 1.873641 -1.145812
|
||||
v -0.088496 -0.716243 -0.442049
|
||||
v -1.145812 1.873641 -1.499365
|
||||
v 0.353446 -0.499737 -0.353661
|
||||
v -0.703870 2.090148 -1.410977
|
||||
v 0.441834 -0.283230 0.088281
|
||||
v -0.615482 2.306654 -0.969035
|
||||
v 0.088281 -0.283230 0.441834
|
||||
v -0.969035 2.306654 -0.615482
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn -0.9186 -0.2500 0.3062
|
||||
vn -0.6124 -0.5000 -0.6124
|
||||
vn 0.3062 -0.2500 -0.9186
|
||||
vn 0.9186 0.2500 -0.3062
|
||||
vn 0.6124 0.5000 0.6124
|
||||
vn -0.3062 0.2500 0.9186
|
||||
vn -0.3536 0.8660 -0.3536
|
||||
vn 0.3990 0.4733 -0.7854
|
||||
vn 0.7854 -0.4733 -0.3990
|
||||
vn -0.3439 -0.8143 0.4677
|
||||
vn -0.8735 0.4830 -0.0619
|
||||
vn -0.1410 -0.9799 -0.1410
|
||||
vn -0.6706 0.3173 -0.6706
|
||||
vn 0.4677 -0.8143 -0.3439
|
||||
vn -0.0619 0.4830 -0.8735
|
||||
vn 0.8735 -0.4830 0.0619
|
||||
vn 0.3439 0.8143 -0.4677
|
||||
vn 0.6706 -0.3173 0.6706
|
||||
vn 0.1410 0.9799 0.1410
|
||||
vn 0.0619 -0.4830 0.8735
|
||||
vn -0.4677 0.8143 0.3439
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
22
models/hex_crystal_30_45_med.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal 30 45.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_30_45_med.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal 30 45.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal_30_45_med.mtl
|
||||
o Cylinder
|
||||
v 0.067670 -0.665758 0.067670
|
||||
v -0.596436 0.960964 -0.596436
|
||||
v -0.176830 -0.499868 0.176723
|
||||
v -0.705489 0.795074 -0.351935
|
||||
v -0.221025 -0.608121 -0.044248
|
||||
v -0.749683 0.686821 -0.572906
|
||||
v -0.044248 -0.608121 -0.221025
|
||||
v -0.572906 0.686821 -0.749683
|
||||
v 0.176723 -0.499868 -0.176830
|
||||
v -0.351935 0.795074 -0.705489
|
||||
v 0.220917 -0.391615 0.044140
|
||||
v -0.307741 0.903327 -0.484518
|
||||
v 0.044140 -0.391615 0.220917
|
||||
v -0.484518 0.903327 -0.307741
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn -0.9186 -0.2500 0.3062
|
||||
vn -0.6124 -0.5000 -0.6124
|
||||
vn 0.3062 -0.2500 -0.9186
|
||||
vn 0.9186 0.2500 -0.3062
|
||||
vn 0.6124 0.5000 0.6124
|
||||
vn -0.3062 0.2500 0.9186
|
||||
vn -0.3536 0.8660 -0.3536
|
||||
vn 0.3990 0.4733 -0.7854
|
||||
vn 0.7854 -0.4733 -0.3990
|
||||
vn -0.3439 -0.8143 0.4677
|
||||
vn -0.8735 0.4830 -0.0619
|
||||
vn -0.1410 -0.9799 -0.1410
|
||||
vn -0.6706 0.3173 -0.6706
|
||||
vn 0.4677 -0.8143 -0.3439
|
||||
vn -0.0619 0.4830 -0.8735
|
||||
vn 0.8735 -0.4830 0.0619
|
||||
vn 0.3439 0.8143 -0.4677
|
||||
vn 0.6706 -0.3173 0.6706
|
||||
vn 0.1410 0.9799 0.1410
|
||||
vn 0.0619 -0.4830 0.8735
|
||||
vn -0.4677 0.8143 0.3439
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
22
models/hex_crystal_30_big.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal 30.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_30_big.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal 30.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal_30.mtl
|
||||
o Cylinder
|
||||
v -0.000000 -0.831516 0.191401
|
||||
v 0.000000 2.421927 -1.686976
|
||||
v -0.500000 -0.499737 -0.000152
|
||||
v -0.500000 2.090148 -1.495423
|
||||
v -0.250000 -0.716243 -0.375152
|
||||
v -0.250000 1.873641 -1.870423
|
||||
v 0.250000 -0.716243 -0.375152
|
||||
v 0.250000 1.873641 -1.870423
|
||||
v 0.500000 -0.499737 -0.000152
|
||||
v 0.500000 2.090148 -1.495423
|
||||
v 0.250000 -0.283230 0.374848
|
||||
v 0.250000 2.306654 -1.120423
|
||||
v -0.250000 -0.283230 0.374848
|
||||
v -0.250000 2.306654 -1.120423
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn -0.8660 -0.2500 -0.4330
|
||||
vn 0.0000 -0.5000 -0.8660
|
||||
vn 0.8660 -0.2500 -0.4330
|
||||
vn 0.8660 0.2500 0.4330
|
||||
vn 0.0000 0.5000 0.8660
|
||||
vn -0.8660 0.2500 0.4330
|
||||
vn 0.0000 0.8660 -0.5000
|
||||
vn 0.8375 0.4733 -0.2732
|
||||
vn 0.8375 -0.4733 0.2732
|
||||
vn -0.5739 -0.8143 0.0875
|
||||
vn -0.5739 0.4830 -0.6614
|
||||
vn 0.0000 -0.9799 -0.1994
|
||||
vn -0.0000 0.3173 -0.9483
|
||||
vn 0.5739 -0.8143 0.0875
|
||||
vn 0.5739 0.4830 -0.6614
|
||||
vn 0.5739 -0.4830 0.6614
|
||||
vn 0.5739 0.8143 -0.0875
|
||||
vn 0.0000 -0.3173 0.9483
|
||||
vn 0.0000 0.9799 0.1994
|
||||
vn -0.5739 -0.4830 0.6614
|
||||
vn -0.5739 0.8143 -0.0875
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
22
models/hex_crystal_30_med.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal 30.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_30_med.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal 30.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal_30_med.mtl
|
||||
o Cylinder
|
||||
v -0.000000 -0.665758 0.095701
|
||||
v 0.000000 0.960964 -0.843488
|
||||
v -0.250000 -0.499868 -0.000076
|
||||
v -0.250000 0.795074 -0.747711
|
||||
v -0.125000 -0.608121 -0.187576
|
||||
v -0.125000 0.686821 -0.935211
|
||||
v 0.125000 -0.608121 -0.187576
|
||||
v 0.125000 0.686821 -0.935212
|
||||
v 0.250000 -0.499868 -0.000076
|
||||
v 0.250000 0.795074 -0.747711
|
||||
v 0.125000 -0.391615 0.187424
|
||||
v 0.125000 0.903327 -0.560211
|
||||
v -0.125000 -0.391615 0.187424
|
||||
v -0.125000 0.903327 -0.560211
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn -0.8660 -0.2500 -0.4330
|
||||
vn 0.0000 -0.5000 -0.8660
|
||||
vn 0.8660 -0.2500 -0.4330
|
||||
vn 0.8660 0.2500 0.4330
|
||||
vn 0.0000 0.5000 0.8660
|
||||
vn -0.8660 0.2500 0.4330
|
||||
vn 0.0000 0.8660 -0.5000
|
||||
vn 0.8375 0.4733 -0.2732
|
||||
vn 0.8375 -0.4733 0.2732
|
||||
vn -0.5739 -0.8143 0.0875
|
||||
vn -0.5739 0.4830 -0.6614
|
||||
vn 0.0000 -0.9799 -0.1994
|
||||
vn -0.0000 0.3173 -0.9483
|
||||
vn 0.5739 -0.8143 0.0875
|
||||
vn 0.5739 0.4830 -0.6614
|
||||
vn 0.5739 -0.4830 0.6614
|
||||
vn 0.5739 0.8143 -0.0875
|
||||
vn 0.0000 -0.3173 0.9483
|
||||
vn 0.0000 0.9799 0.1994
|
||||
vn -0.5739 -0.4830 0.6614
|
||||
vn -0.5739 0.8143 -0.0875
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
22
models/hex_crystal_big.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_big.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal.mtl
|
||||
o Cylinder
|
||||
v 0.000000 -0.882802 0.000000
|
||||
v 0.000000 2.873951 0.000000
|
||||
v 0.000000 -0.499696 -0.500000
|
||||
v 0.000000 2.490845 -0.500000
|
||||
v 0.433013 -0.499696 -0.250000
|
||||
v 0.433013 2.490845 -0.250000
|
||||
v 0.433013 -0.499696 0.250000
|
||||
v 0.433013 2.490845 0.250000
|
||||
v -0.000000 -0.499696 0.500000
|
||||
v -0.000000 2.490845 0.500000
|
||||
v -0.433013 -0.499696 0.250000
|
||||
v -0.433013 2.490845 0.250000
|
||||
v -0.433013 -0.499696 -0.250000
|
||||
v -0.433013 2.490845 -0.250000
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn 0.5000 0.0000 -0.8660
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.5000 0.0000 0.8660
|
||||
vn -0.5000 0.0000 0.8660
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn -0.5000 0.0000 -0.8660
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn -0.0000 0.5465 0.8375
|
||||
vn 0.0000 -0.5465 0.8375
|
||||
vn 0.3313 -0.7489 -0.5739
|
||||
vn 0.3313 0.7489 -0.5739
|
||||
vn 0.6626 -0.7489 0.0000
|
||||
vn 0.6626 0.7489 0.0000
|
||||
vn 0.3313 -0.7489 0.5739
|
||||
vn 0.3313 0.7489 0.5739
|
||||
vn -0.3313 -0.7489 0.5739
|
||||
vn -0.3313 0.7489 0.5739
|
||||
vn -0.6626 -0.7489 0.0000
|
||||
vn -0.6626 0.7489 0.0000
|
||||
vn -0.3313 -0.7489 -0.5739
|
||||
vn -0.3313 0.7489 -0.5739
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
22
models/hex_crystal_med.mtl
Normal file
@ -0,0 +1,22 @@
|
||||
# Blender MTL File: 'hex crystal.blend'
|
||||
# Material Count: 2
|
||||
|
||||
newmtl End_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Side_Mat
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.371605 0.494084
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
114
models/hex_crystal_med.obj
Normal file
@ -0,0 +1,114 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'hex crystal.blend'
|
||||
# www.blender.org
|
||||
mtllib hex_crystal_med.mtl
|
||||
o Cylinder
|
||||
v 0.000000 -0.691401 0.000000
|
||||
v 0.000000 1.186976 0.000000
|
||||
v 0.000000 -0.499848 -0.250000
|
||||
v 0.000000 0.995423 -0.250000
|
||||
v 0.216506 -0.499848 -0.125000
|
||||
v 0.216506 0.995423 -0.125000
|
||||
v 0.216506 -0.499848 0.125000
|
||||
v 0.216506 0.995423 0.125000
|
||||
v -0.000000 -0.499848 0.250000
|
||||
v -0.000000 0.995423 0.250000
|
||||
v -0.216506 -0.499848 0.125000
|
||||
v -0.216506 0.995423 0.125000
|
||||
v -0.216506 -0.499848 -0.125000
|
||||
v -0.216506 0.995423 -0.125000
|
||||
vt 0.4999 0.0000
|
||||
vt 0.4999 1.0000
|
||||
vt 0.3332 1.0000
|
||||
vt 0.3332 0.0000
|
||||
vt 0.1665 1.0000
|
||||
vt 0.1665 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 -0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.8333 1.0000
|
||||
vt 0.8333 -0.0000
|
||||
vt 0.6666 1.0000
|
||||
vt 0.6666 -0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.5000 0.5000
|
||||
vt 0.9313 0.7490
|
||||
vt 0.5000 0.9980
|
||||
vt 0.5000 0.5000
|
||||
vt 0.5000 0.0020
|
||||
vt 0.9313 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.2510
|
||||
vt 0.0687 0.7490
|
||||
vt 0.5000 0.0020
|
||||
vt 0.5000 0.9980
|
||||
vt 0.9313 0.2510
|
||||
vt 0.9313 0.7490
|
||||
vn 0.5000 0.0000 -0.8660
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.5000 0.0000 0.8660
|
||||
vn -0.5000 0.0000 0.8660
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn -0.5000 0.0000 -0.8660
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn -0.0000 0.5465 0.8375
|
||||
vn 0.0000 -0.5465 0.8375
|
||||
vn 0.3313 -0.7489 -0.5739
|
||||
vn 0.3313 0.7489 -0.5739
|
||||
vn 0.6626 -0.7489 0.0000
|
||||
vn 0.6626 0.7489 0.0000
|
||||
vn 0.3313 -0.7489 0.5739
|
||||
vn 0.3313 0.7489 0.5739
|
||||
vn -0.3313 -0.7489 0.5739
|
||||
vn -0.3313 0.7489 0.5739
|
||||
vn -0.6626 -0.7489 0.0000
|
||||
vn -0.6626 0.7489 0.0000
|
||||
vn -0.3313 -0.7489 -0.5739
|
||||
vn -0.3313 0.7489 -0.5739
|
||||
g Cylinder_Cylinder_Side_Mat
|
||||
usemtl Side_Mat
|
||||
s off
|
||||
f 3/1/1 4/2/1 6/3/1 5/4/1
|
||||
f 5/4/2 6/3/2 8/5/2 7/6/2
|
||||
f 7/6/3 8/5/3 10/7/3 9/8/3
|
||||
f 9/9/4 10/10/4 12/11/4 11/12/4
|
||||
f 11/12/5 12/11/5 14/13/5 13/14/5
|
||||
f 13/14/6 14/13/6 4/2/6 3/1/6
|
||||
f 10/15/7 8/16/7 12/17/7
|
||||
f 12/17/8 8/16/8 2/18/8
|
||||
f 2/18/1 8/16/1 14/19/1
|
||||
f 14/19/7 8/16/7 6/20/7
|
||||
f 14/19/9 6/20/9 2/18/9
|
||||
f 11/21/9 1/22/9 7/23/9
|
||||
f 7/23/1 1/22/1 13/24/1
|
||||
f 13/24/8 1/22/8 5/25/8
|
||||
f 9/8/7 7/23/7 11/21/7
|
||||
f 11/21/7 7/23/7 13/24/7
|
||||
f 13/24/7 7/23/7 5/25/7
|
||||
f 13/24/7 5/25/7 3/26/7
|
||||
g Cylinder_Cylinder_End_Mat
|
||||
usemtl End_Mat
|
||||
f 1/27/10 3/28/10 5/29/10
|
||||
f 2/30/11 6/31/11 4/32/11
|
||||
f 1/27/12 5/29/12 7/33/12
|
||||
f 2/30/13 8/34/13 6/31/13
|
||||
f 1/27/14 7/33/14 9/35/14
|
||||
f 2/30/15 10/36/15 8/34/15
|
||||
f 1/27/16 9/35/16 11/37/16
|
||||
f 2/30/17 12/38/17 10/36/17
|
||||
f 1/27/18 11/37/18 13/39/18
|
||||
f 2/30/19 14/40/19 12/38/19
|
||||
f 1/27/20 13/39/20 3/28/20
|
||||
f 2/30/21 4/32/21 14/40/21
|
62
models/tunnel_tube_slant.mtl
Normal file
@ -0,0 +1,62 @@
|
||||
# Blender MTL File: 'tunnel tube base.blend'
|
||||
# Material Count: 6
|
||||
|
||||
newmtl Back
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Bottom
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Front
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Left
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Right
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Top
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
94
models/tunnel_tube_slant.obj
Normal file
@ -0,0 +1,94 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'tunnel tube base.blend'
|
||||
# www.blender.org
|
||||
mtllib tunnel_tube_slant.mtl
|
||||
o tunnel_tube_slant_Cube.002
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.250000 -0.500000 0.250000
|
||||
v 0.250000 -0.500000 0.250000
|
||||
v 0.250000 -0.500000 -0.250000
|
||||
v -0.250000 -0.500000 -0.250000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 0.500000 -1.000000
|
||||
v -0.500000 0.500000 -1.000000
|
||||
v 0.500000 0.500000 0.000000
|
||||
v -0.500000 0.500000 -0.000000
|
||||
v -0.250000 0.500000 -0.250000
|
||||
v -0.250000 0.500000 -0.750000
|
||||
v 0.250000 0.500000 -0.750000
|
||||
v 0.250000 0.500000 -0.250000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.7500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.7500 0.2500
|
||||
vt 1.0000 -0.0000
|
||||
vt -0.0000 0.0000
|
||||
vt 0.2500 0.2500
|
||||
vt 1.0000 1.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 0.7500 0.2500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.2500 0.7500
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.2500
|
||||
vt -0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 1.5000 1.0000
|
||||
vt 0.5000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.2500 1.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 0.2500 0.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 0.5000 1.0000
|
||||
vt 1.5000 1.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 1.2500 1.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 0.2500 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt -0.0000 1.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 0.2500 1.0000
|
||||
vt 0.2500 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.2500 1.0000
|
||||
vt 0.7500 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 0.4472 0.8944
|
||||
vn 0.0000 -0.4472 -0.8944
|
||||
g tunnel_tube_slant_Cube.002_Top
|
||||
usemtl Top
|
||||
s off
|
||||
f 9/1/1 10/2/1 14/3/1 15/4/1
|
||||
f 9/1/1 15/4/1 16/5/1 11/6/1
|
||||
f 14/3/1 10/2/1 12/7/1 13/8/1
|
||||
f 11/6/1 16/5/1 13/8/1 12/7/1
|
||||
g tunnel_tube_slant_Cube.002_Bottom
|
||||
usemtl Bottom
|
||||
f 1/9/2 2/10/2 5/11/2 6/12/2
|
||||
f 1/9/2 6/12/2 7/13/2 8/14/2
|
||||
f 8/14/2 7/13/2 4/15/2 3/16/2
|
||||
f 5/11/2 2/10/2 3/16/2 4/15/2
|
||||
g tunnel_tube_slant_Cube.002_Right
|
||||
usemtl Right
|
||||
f 1/17/3 9/18/3 11/19/3 2/20/3
|
||||
f 14/21/3 13/22/3 4/23/3 7/24/3
|
||||
g tunnel_tube_slant_Cube.002_Left
|
||||
usemtl Left
|
||||
f 3/16/4 12/25/4 10/26/4 8/27/4
|
||||
f 16/28/4 15/29/4 6/30/4 5/31/4
|
||||
g tunnel_tube_slant_Cube.002_Front
|
||||
usemtl Front
|
||||
f 2/10/5 11/32/5 12/33/5 3/16/5
|
||||
f 15/34/5 14/35/5 7/36/5 6/30/5
|
||||
g tunnel_tube_slant_Cube.002_Back
|
||||
usemtl Back
|
||||
f 9/1/6 1/17/6 8/37/6 10/2/6
|
||||
f 13/38/6 16/28/6 5/39/6 4/23/6
|
62
models/tunnel_tube_slant_2.mtl
Normal file
@ -0,0 +1,62 @@
|
||||
# Blender MTL File: 'tunnel tube base.blend'
|
||||
# Material Count: 6
|
||||
|
||||
newmtl Back
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Bottom
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Front
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Left
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Right
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Top
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
94
models/tunnel_tube_slant_2.obj
Normal file
@ -0,0 +1,94 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'tunnel tube base.blend'
|
||||
# www.blender.org
|
||||
mtllib tunnel_tube_slant_2.mtl
|
||||
o tunnel_tube_slant_Cube.002
|
||||
v 0.500000 -0.500000 0.000000
|
||||
v 0.500000 -0.500000 1.000000
|
||||
v -0.500000 -0.500000 1.000000
|
||||
v -0.250000 -0.500000 0.750000
|
||||
v 0.250000 -0.500000 0.750000
|
||||
v 0.250000 -0.500000 0.250000
|
||||
v -0.250000 -0.500000 0.250000
|
||||
v -0.500000 -0.500000 -0.000000
|
||||
v 0.500000 0.500000 -0.500000
|
||||
v -0.500000 0.500000 -0.500000
|
||||
v 0.500000 0.500000 0.500000
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.250000 0.500000 0.250000
|
||||
v -0.250000 0.500000 -0.250000
|
||||
v 0.250000 0.500000 -0.250000
|
||||
v 0.250000 0.500000 0.250000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.7500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.7500 0.2500
|
||||
vt 1.0000 -0.0000
|
||||
vt -0.0000 0.0000
|
||||
vt 0.2500 0.2500
|
||||
vt 1.0000 1.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 0.7500 0.2500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.2500 0.7500
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.2500
|
||||
vt -0.0000 0.0000
|
||||
vt 0.5000 0.0000
|
||||
vt -0.0000 1.0000
|
||||
vt -0.5000 0.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 0.2500 1.0000
|
||||
vt -0.2500 0.0000
|
||||
vt 0.2500 0.0000
|
||||
vt -0.5000 0.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.5000 0.0000
|
||||
vt 0.2500 1.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 0.2500 0.0000
|
||||
vt -0.2500 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.2500 1.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 0.7500 1.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 0.2500 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 0.4472 0.8944
|
||||
vn 0.0000 -0.4472 -0.8944
|
||||
g tunnel_tube_slant_Cube.002_Top
|
||||
usemtl Top
|
||||
s off
|
||||
f 9/1/1 10/2/1 14/3/1 15/4/1
|
||||
f 9/1/1 15/4/1 16/5/1 11/6/1
|
||||
f 14/3/1 10/2/1 12/7/1 13/8/1
|
||||
f 11/6/1 16/5/1 13/8/1 12/7/1
|
||||
g tunnel_tube_slant_Cube.002_Bottom
|
||||
usemtl Bottom
|
||||
f 1/9/2 2/10/2 5/11/2 6/12/2
|
||||
f 1/9/2 6/12/2 7/13/2 8/14/2
|
||||
f 8/14/2 7/13/2 4/15/2 3/16/2
|
||||
f 5/11/2 2/10/2 3/16/2 4/15/2
|
||||
g tunnel_tube_slant_Cube.002_Right
|
||||
usemtl Right
|
||||
f 1/17/3 9/1/3 11/18/3 2/19/3
|
||||
f 14/20/3 13/21/3 4/22/3 7/23/3
|
||||
g tunnel_tube_slant_Cube.002_Left
|
||||
usemtl Left
|
||||
f 3/24/4 12/25/4 10/26/4 8/27/4
|
||||
f 16/28/4 15/29/4 6/30/4 5/31/4
|
||||
g tunnel_tube_slant_Cube.002_Front
|
||||
usemtl Front
|
||||
f 2/10/5 11/32/5 12/25/5 3/16/5
|
||||
f 15/29/5 14/33/5 7/23/5 6/34/5
|
||||
g tunnel_tube_slant_Cube.002_Back
|
||||
usemtl Back
|
||||
f 9/1/6 1/35/6 8/36/6 10/2/6
|
||||
f 13/21/6 16/37/6 5/38/6 4/39/6
|
62
models/tunnel_tube_slant_full.mtl
Normal file
@ -0,0 +1,62 @@
|
||||
# Blender MTL File: 'tunnel tube base.blend'
|
||||
# Material Count: 6
|
||||
|
||||
newmtl Back
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Bottom
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Front
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Left
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Right
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
||||
|
||||
newmtl Top
|
||||
Ns 96.078431
|
||||
Ka 1.000000 1.000000 1.000000
|
||||
Kd 0.640000 0.640000 0.640000
|
||||
Ks 0.500000 0.500000 0.500000
|
||||
Ke 0.000000 0.000000 0.000000
|
||||
Ni 1.000000
|
||||
d 1.000000
|
||||
illum 2
|
94
models/tunnel_tube_slant_full.obj
Normal file
@ -0,0 +1,94 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'tunnel tube base.blend'
|
||||
# www.blender.org
|
||||
mtllib tunnel_tube_slant_full.mtl
|
||||
o tunnel_tube_slant_Cube.002
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.250000 -0.500000 0.250000
|
||||
v 0.250000 -0.500000 0.250000
|
||||
v 0.250000 -0.500000 -0.250000
|
||||
v -0.250000 -0.500000 -0.250000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 0.500000 -1.500000
|
||||
v -0.500000 0.500000 -1.500000
|
||||
v 0.500000 0.500000 -0.500000
|
||||
v -0.500000 0.500000 -0.500000
|
||||
v -0.250000 0.500000 -0.750000
|
||||
v -0.250000 0.500000 -1.250000
|
||||
v 0.250000 0.500000 -1.250000
|
||||
v 0.250000 0.500000 -0.750000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.7500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.7500 0.2500
|
||||
vt 1.0000 -0.0000
|
||||
vt -0.0000 0.0000
|
||||
vt 0.2500 0.2500
|
||||
vt 1.0000 1.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 0.7500 0.2500
|
||||
vt 0.7500 0.7500
|
||||
vt 0.2500 0.7500
|
||||
vt 0.0000 1.0000
|
||||
vt 0.2500 0.2500
|
||||
vt -0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 2.0000 1.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.7500 1.0000
|
||||
vt 1.2500 1.0000
|
||||
vt 0.2500 0.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 2.0000 1.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 1.2500 1.0000
|
||||
vt 1.7500 1.0000
|
||||
vt 0.7500 0.0000
|
||||
vt 0.2500 0.0000
|
||||
vt -0.0000 1.0000
|
||||
vt 0.7500 1.2500
|
||||
vt 0.2500 1.2500
|
||||
vt 0.2500 0.2500
|
||||
vt 0.7500 0.2500
|
||||
vt 0.0000 0.0000
|
||||
vt 0.2500 1.2500
|
||||
vt 0.7500 1.2500
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 0.7071 0.7071
|
||||
vn 0.0000 -0.7071 -0.7071
|
||||
g tunnel_tube_slant_Cube.002_Top
|
||||
usemtl Top
|
||||
s off
|
||||
f 9/1/1 10/2/1 14/3/1 15/4/1
|
||||
f 9/1/1 15/4/1 16/5/1 11/6/1
|
||||
f 14/3/1 10/2/1 12/7/1 13/8/1
|
||||
f 11/6/1 16/5/1 13/8/1 12/7/1
|
||||
g tunnel_tube_slant_Cube.002_Bottom
|
||||
usemtl Bottom
|
||||
f 1/9/2 2/10/2 5/11/2 6/12/2
|
||||
f 1/9/2 6/12/2 7/13/2 8/14/2
|
||||
f 8/14/2 7/13/2 4/15/2 3/16/2
|
||||
f 5/11/2 2/10/2 3/16/2 4/15/2
|
||||
g tunnel_tube_slant_Cube.002_Right
|
||||
usemtl Right
|
||||
f 1/17/3 9/18/3 11/19/3 2/20/3
|
||||
f 14/21/3 13/22/3 4/23/3 7/24/3
|
||||
g tunnel_tube_slant_Cube.002_Left
|
||||
usemtl Left
|
||||
f 3/16/4 12/25/4 10/26/4 8/27/4
|
||||
f 16/28/4 15/29/4 6/30/4 5/31/4
|
||||
g tunnel_tube_slant_Cube.002_Front
|
||||
usemtl Front
|
||||
f 2/10/5 11/19/5 12/32/5 3/16/5
|
||||
f 15/33/5 14/34/5 7/35/5 6/36/5
|
||||
g tunnel_tube_slant_Cube.002_Back
|
||||
usemtl Back
|
||||
f 9/1/6 1/17/6 8/37/6 10/2/6
|
||||
f 13/38/6 16/39/6 5/11/6 4/15/6
|
@ -22,6 +22,7 @@ dfcaverns_sweet_pod_delay_multiplier (sweet_pod growth delay multiplier) float 2
|
||||
#To disable glow worm growth, set this to 0.
|
||||
dfcaverns_glow_worm_delay_multiplier (glow worm growth delay multiplier) float 10
|
||||
dfcaverns_light_kills_fungus (Light kills fungus) bool true
|
||||
dfcaverns_snareweed_damage (Snareweed causes damage to player) bool true
|
||||
|
||||
[Cavern dimensions]
|
||||
#Note that this doesn't guarantee caverns of this setting's size. This setting
|
||||
@ -39,11 +40,16 @@ dfcaverns_cavern_threshold (Cavern threshold) float 0.5 0.0 1.0
|
||||
dfcaverns_ymax (Upper limit of level 1) int -300
|
||||
dfcaverns_level1_min (Upper limit of level 2) int -900
|
||||
dfcaverns_level2_min (Upper limit of level 3) int -1500
|
||||
dfcaverns_level3_min (Upper limit of lava sea) int -2100
|
||||
dfcaverns_lava_sea_min (Lower limit of lava sea) int -2700
|
||||
dfcaverns_level3_min (Upper limit of the sunless sea) int -2100
|
||||
dfcaverns_sunless_sea_min (Lower limit of the sunless sea) int -2500
|
||||
dfcaverns_lava_sea_max (Upper limit of the lava sea) int -3000
|
||||
dfcaverns_lava_sea_min (Lower limit of the lava sea) int -3500
|
||||
|
||||
[Lower Sea]
|
||||
[Lower Seas]
|
||||
#Determines threshold for lower sea cave generation. Higher number means sparser cavern
|
||||
dfcaverns_lava_sea_threshold (Cavern threshold for magma sea) float 0.2 0.0 1.0
|
||||
#When true, the lower sea contains magma. When false, it's water instead.
|
||||
dfcaverns_bottom_sea_contains_lava (Lower sea is lava) bool true
|
||||
#When true, the lava sea level is generated
|
||||
dfcaverns_enable_lava_sea (Generate magma sea) bool true
|
||||
#When true cavern biomes at the most extreme humidity range will be flooded
|
||||
#with water, providing significant challenges in those areas.
|
||||
dfcaverns_flooded_biomes (Add a lot of water to the most humid cavern biomes) bool true
|
BIN
textures/dfcaverns_cave_coral.png
Normal file
After Width: | Height: | Size: 848 B |
BIN
textures/dfcaverns_cave_coral_end.png
Normal file
After Width: | Height: | Size: 858 B |
BIN
textures/dfcaverns_dripstone_streaks.png
Normal file
After Width: | Height: | Size: 465 B |
Before Width: | Height: | Size: 888 B After Width: | Height: | Size: 909 B |
BIN
textures/dfcaverns_floor_fungus_fine.png
Normal file
After Width: | Height: | Size: 945 B |
Before Width: | Height: | Size: 542 B |
BIN
textures/dfcaverns_glow_mese.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
textures/dfcaverns_glow_ruby.png
Normal file
After Width: | Height: | Size: 330 B |
BIN
textures/dfcaverns_glow_ruby4x.png
Normal file
After Width: | Height: | Size: 980 B |
BIN
textures/dfcaverns_glow_ruby_ore.png
Normal file
After Width: | Height: | Size: 691 B |
BIN
textures/dfcaverns_glow_ruby_quarter.png
Normal file
After Width: | Height: | Size: 364 B |
BIN
textures/dfcaverns_glow_worm_animated.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
textures/dfcaverns_snareweed.png
Normal file
After Width: | Height: | Size: 288 B |
BIN
textures/dfcaverns_snareweed_roots.png
Normal file
After Width: | Height: | Size: 710 B |
@ -14,6 +14,7 @@ dftrees_tower_cap_gills - from caverealms mushroom gills
|
||||
dftrees_cave_moss and floor_fungus - derived from caverealms algae
|
||||
dfcaverns_fungi - copied from caverealms
|
||||
dfcaverns_glow_worm - copied from caverealms
|
||||
dfcaverns_glow_worm_animated - glow worm texture overlaid with rippling animation derived from default mod's water texture
|
||||
|
||||
dftrees_cave_wheat - derived from farming wheat
|
||||
dfcaverns_flour - derived from farming
|
||||
@ -21,3 +22,8 @@ dfcaverns_bread - derived from farming
|
||||
dfcaverns_pig_tail_thread - copied from farming
|
||||
dfcaverns_sugar - derived from farming
|
||||
dfcaverns_spore_tree_spores, dfcaverns_cave_wheat_seed, dfcaverns_pig_tail_seed - all derived from farming wheat seed
|
||||
|
||||
|
||||
dfcaverns_glow_mese - from caverealms glow_mese
|
||||
dfcaverns_glow_ruby, dfcaverns_glow_ruby4x, dfcaverns_glow_ruby_quarter - from caverealms glow_ruby
|
||||
dfcaverns_glow_ruby_ore - from caverealms glow_ruby_ore
|
@ -39,7 +39,7 @@ minetest.register_node("dfcaverns:black_cap_gills", {
|
||||
max_items = 1,
|
||||
items = {
|
||||
{
|
||||
items = {'dfcaverns:black_cap_sapling'},
|
||||
items = {'dfcaverns:black_cap_sapling', 'dfcaverns:black_cap_gills'},
|
||||
rarity = 5,
|
||||
},
|
||||
{
|
||||
@ -73,6 +73,14 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'default:torch 8',
|
||||
recipe = {
|
||||
{'dfcaverns:black_cap_gills'},
|
||||
{'group:stick'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:black_cap_wood", {
|
||||
description = S("Black Cap Planks"),
|
||||
_doc_items_longdesc = dfcaverns.doc.black_cap_desc,
|
||||
|
@ -31,7 +31,7 @@ minetest.register_node("dfcaverns:nether_cap_gills", {
|
||||
_doc_items_usagehelp = dfcaverns.doc.nether_cap_usage,
|
||||
tiles = {"dfcaverns_nether_cap_gills.png"},
|
||||
is_ground_content = true,
|
||||
light_source = 4,
|
||||
light_source = 6,
|
||||
groups = {snappy = 3, leafdecay = 3, leaves = 1, puts_out_fire = 1, cools_lava = 1},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
drawtype = "plantlike",
|
||||
|
@ -35,6 +35,94 @@ minetest.register_node("dfcaverns:tunnel_tube", {
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:tunnel_tube_slant_bottom", {
|
||||
description = S("Tunnel Tube"),
|
||||
_doc_items_longdesc = dfcaverns.doc.tunnel_tube_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.tunnel_tube_usage,
|
||||
tiles = {"dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png"},
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
mesh = "tunnel_tube_slant.obj",
|
||||
paramtype = "light",
|
||||
drop = "dfcaverns:tunnel_tube",
|
||||
groups = {choppy = 3, tree = 1, oddly_breakable_by_hand=1, flammable = 2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
|
||||
{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
|
||||
{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
|
||||
},
|
||||
},
|
||||
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:tunnel_tube_slant_top", {
|
||||
description = S("Tunnel Tube"),
|
||||
_doc_items_longdesc = dfcaverns.doc.tunnel_tube_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.tunnel_tube_usage,
|
||||
tiles = {"dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png"},
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
mesh = "tunnel_tube_slant_2.obj",
|
||||
paramtype = "light",
|
||||
drop = "dfcaverns:tunnel_tube",
|
||||
groups = {choppy = 3, tree = 1, oddly_breakable_by_hand=1, flammable = 2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
|
||||
{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
|
||||
{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("dfcaverns:tunnel_tube_slant_full", {
|
||||
description = S("Tunnel Tube"),
|
||||
_doc_items_longdesc = dfcaverns.doc.tunnel_tube_desc,
|
||||
_doc_items_usagehelp = dfcaverns.doc.tunnel_tube_usage,
|
||||
tiles = {"dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png", "dfcaverns_tunnel_tube.png"},
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
mesh = "tunnel_tube_slant_full.obj",
|
||||
paramtype = "light",
|
||||
drop = "dfcaverns:tunnel_tube",
|
||||
groups = {choppy = 3, tree = 1, oddly_breakable_by_hand=1, flammable = 2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_place = minetest.rotate_node,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
|
||||
{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
|
||||
},
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
|
||||
{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
--Wood
|
||||
minetest.register_craft({
|
||||
output = 'dfcaverns:tunnel_tube_wood 4',
|
||||
@ -218,23 +306,27 @@ minetest.register_node("dfcaverns:tunnel_tube_sapling", {
|
||||
})
|
||||
|
||||
local tunnel_tube_directions = {
|
||||
{x=1,y=0,z=0},
|
||||
{x=-1,y=0,z=0},
|
||||
{x=0,y=0,z=1},
|
||||
{x=0,y=0,z=-1},
|
||||
-- {x=1,y=0,z=1}, -- diagonals work, but they don't look as nice as orthogonals
|
||||
-- {x=-1,y=0,z=1},
|
||||
-- {x=1,y=0,z=-1},
|
||||
-- {x=-1,y=0,z=-1},
|
||||
[0] = {x=0,y=0,z=-1},
|
||||
[1] = {x=-1,y=0,z=0},
|
||||
[2] = {x=0,y=0,z=1},
|
||||
[3] = {x=1,y=0,z=0},
|
||||
}
|
||||
|
||||
local tunnel_tube_curvature = {0,0,0,0,1,1,1,2,2,3,4}
|
||||
local tunnel_tube_displacement =
|
||||
{
|
||||
[4] = 1,
|
||||
[5] = 1,
|
||||
[6] = 2,
|
||||
[7] = 2,
|
||||
[8] = 3,
|
||||
[9] = 3,
|
||||
}
|
||||
|
||||
dfcaverns.spawn_tunnel_tube = function(pos)
|
||||
local direction = tunnel_tube_directions[math.random(1,4)]
|
||||
local height = math.random(6,10)
|
||||
local direction = math.random(0,3) -- serves as both the facedir and the lookup in the direction table
|
||||
local height = math.random(4,9)
|
||||
local x, y, z = pos.x, pos.y, pos.z
|
||||
local top_pos = vector.add(pos, vector.multiply(direction, tunnel_tube_curvature[height]))
|
||||
local top_pos = vector.add(pos, vector.multiply(tunnel_tube_directions[direction], tunnel_tube_displacement[height]))
|
||||
top_pos.y = y + height - 1
|
||||
|
||||
local vm = minetest.get_voxel_manip()
|
||||
@ -254,28 +346,41 @@ end
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_ignore = minetest.get_content_id("ignore")
|
||||
local c_tunnel_tube = minetest.get_content_id("dfcaverns:tunnel_tube")
|
||||
local c_tunnel_tube_bottom = minetest.get_content_id("dfcaverns:tunnel_tube_slant_bottom")
|
||||
local c_tunnel_tube_top = minetest.get_content_id("dfcaverns:tunnel_tube_slant_top")
|
||||
local c_tunnel_tube_full = minetest.get_content_id("dfcaverns:tunnel_tube_slant_full")
|
||||
local c_tunnel_tube_fruiting_body = minetest.get_content_id("dfcaverns:tunnel_tube_fruiting_body")
|
||||
|
||||
-- was simplest to just hardcode these patterns for each height from 4 to 9
|
||||
-- pattern is displacement, node
|
||||
local tunnel_tube_patterns =
|
||||
{
|
||||
[4] = {{0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_fruiting_body}},
|
||||
[5] = {{0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_fruiting_body}},
|
||||
[6] = {{0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_full}, {2, c_tunnel_tube_fruiting_body}},
|
||||
[7] = {{0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_full}, {2, c_tunnel_tube_fruiting_body}},
|
||||
[8] = {{0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_full}, {2, c_tunnel_tube_full}, {3, c_tunnel_tube_fruiting_body}},
|
||||
[9] = {{0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube}, {0, c_tunnel_tube_bottom}, {1, c_tunnel_tube_top}, {1, c_tunnel_tube_full}, {2, c_tunnel_tube_full}, {3, c_tunnel_tube_fruiting_body}},
|
||||
}
|
||||
|
||||
dfcaverns.spawn_tunnel_tube_vm = function(vi, area, data, param2_data, height, direction)
|
||||
if not height then height = math.random(6, 10) end
|
||||
if not direction then direction = tunnel_tube_directions[math.random(1,4)] end
|
||||
if not height then height = math.random(4, 9) end
|
||||
if direction == nil then direction = math.random(0,3) end
|
||||
|
||||
local pos = area:position(vi)
|
||||
local y = pos.y
|
||||
local previous_vi = vi
|
||||
for i = 1, height do
|
||||
local pattern = tunnel_tube_patterns[height]
|
||||
for i, nodepattern in ipairs(pattern) do
|
||||
pos.y = y + i - 1
|
||||
vi = area:indexp(vector.add(pos, vector.multiply(direction, tunnel_tube_curvature[i])))
|
||||
vi = area:indexp(vector.add(pos, vector.multiply(tunnel_tube_directions[direction], nodepattern[1])))
|
||||
if data[vi] == c_air or data[vi] == c_ignore then
|
||||
previous_vi = vi
|
||||
if i ~= height then
|
||||
data[vi] = c_tunnel_tube
|
||||
param2_data[vi] = 0
|
||||
else
|
||||
data[vi] = c_tunnel_tube_fruiting_body
|
||||
end
|
||||
data[vi] = nodepattern[2]
|
||||
param2_data[vi] = direction
|
||||
else
|
||||
data[previous_vi] = c_tunnel_tube_fruiting_body
|
||||
param2_data[vi] = direction
|
||||
break
|
||||
end
|
||||
end
|
||||
|
75
voxelarea_iterator.lua
Normal file
@ -0,0 +1,75 @@
|
||||
-- These functions are a minor modification of the voxel area iterator defined in the built in voxelarea.lua lua code.
|
||||
-- As such, this file is separately licened under the LGPL as follows:
|
||||
|
||||
-- License of Minetest source code
|
||||
-------------------------------
|
||||
|
||||
--Minetest
|
||||
--Copyright (C) 2010-2018 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
|
||||
--This program is free software; you can redistribute it and/or modify
|
||||
--it under the terms of the GNU Lesser General Public License as published by
|
||||
--the Free Software Foundation; either version 2.1 of the License, or
|
||||
--(at your option) any later version.
|
||||
|
||||
--This program is distributed in the hope that it will be useful,
|
||||
--but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
--GNU Lesser General Public License for more details.
|
||||
|
||||
--You should have received a copy of the GNU Lesser General Public License along
|
||||
--with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
function VoxelArea:iter_xyz(minx, miny, minz, maxx, maxy, maxz)
|
||||
local i = self:index(minx, miny, minz) - 1
|
||||
|
||||
local x = minx - 1 -- subtracting one because x gets incremented before it gets returned the first time.
|
||||
local xrange = maxx - minx + 1
|
||||
local nextaction = i + 1 + xrange
|
||||
|
||||
local y = 0
|
||||
local yrange = maxy - miny + 1
|
||||
local yreqstride = self.ystride - xrange
|
||||
|
||||
local z = 0
|
||||
local zrange = maxz - minz + 1
|
||||
local multistride = self.zstride - ((yrange - 1) * self.ystride + xrange)
|
||||
|
||||
return function()
|
||||
-- continue i until it needs to jump
|
||||
i = i + 1
|
||||
x = x + 1
|
||||
if i ~= nextaction then
|
||||
return i, x, y+miny, z+minz
|
||||
end
|
||||
|
||||
-- continue y until maxy is exceeded
|
||||
y = y + 1
|
||||
x = minx -- new line
|
||||
if y ~= yrange then
|
||||
-- set i to index(minx, miny + y, minz + z) - 1
|
||||
i = i + yreqstride
|
||||
nextaction = i + xrange
|
||||
return i, x, y+miny, z+minz
|
||||
end
|
||||
|
||||
-- continue z until maxz is exceeded
|
||||
z = z + 1
|
||||
if z == zrange then
|
||||
-- cuboid finished, return nil
|
||||
return
|
||||
end
|
||||
|
||||
-- set i to index(minx, miny, minz + z) - 1
|
||||
i = i + multistride
|
||||
|
||||
y = 0
|
||||
nextaction = i + xrange
|
||||
return i, x, y+miny, z+minz
|
||||
end
|
||||
end
|
||||
|
||||
function VoxelArea:iterp_xyz(minp, maxp)
|
||||
return self:iter_xyz(minp.x, minp.y, minp.z, maxp.x, maxp.y, maxp.z)
|
||||
end
|