mirror of
https://github.com/minetest-mods/nether.git
synced 2024-11-15 23:10:37 +01:00
Compare commits
No commits in common. "master" and "v3.3" have entirely different histories.
|
@ -27,11 +27,8 @@ read_globals = {
|
|||
"stairsplus",
|
||||
"string.split",
|
||||
table = { fields = { "copy", "getn" } },
|
||||
"toolranks",
|
||||
"vector",
|
||||
"VoxelArea",
|
||||
"VoxelManip",
|
||||
"walls",
|
||||
xpanes = { fields = { "register_pane" } },
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ the nether first, or basalt might be a crafting ingredient required to reach
|
|||
a particular branch of the tech-tree.
|
||||
|
||||
Netherbrick tools are provided (pick, shovel, axe, & sword), see tools.lua
|
||||
The Nether pickaxe has a 10x bonus against wear when mining netherrack.
|
||||
The Nether pickaxe has a 10x bonus again wear when mining netherrack.
|
||||
|
||||
|
||||
## License of source code:
|
||||
|
@ -65,8 +65,6 @@ SOFTWARE.
|
|||
* `nether_book_`* (files starting with "nether_book"): Treer, 2019-2020
|
||||
* `nether_brick_deep.png`: Treer, 2021
|
||||
* `nether_fumarole.ogg`: Treer, 2020
|
||||
* `nether_geode.png`: Treer, 2021
|
||||
* `nether_geode_glass.png`: Treer, 2021
|
||||
* `nether_lava_bubble`* (files starting with "nether_lava_bubble"): Treer, 2020
|
||||
* `nether_lava_crust_animated.png`: Treer, 2019-2020
|
||||
* `nether_lightstaff.png`: Treer, 2021
|
||||
|
|
|
@ -7,4 +7,3 @@ loot?
|
|||
mesecons?
|
||||
moreblocks?
|
||||
climate_api?
|
||||
xpanes?
|
2
init.lua
2
init.lua
|
@ -312,7 +312,7 @@ The expedition parties have found no diamonds or gold, and after an experienced
|
|||
geodeSky.sky_data.base_color = nether.fogColor.geodes
|
||||
|
||||
climate_api.register_weather(
|
||||
"nether:caverns",
|
||||
"nether:nether",
|
||||
{ nether_biome = "nether" },
|
||||
{ ["climate_api:skybox"] = netherSky }
|
||||
)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# textdomain: nether
|
||||
|
||||
# Translation FR by Louis Royer and JoeEnderman
|
||||
# Translation FR by Louis Royer
|
||||
|
||||
|
||||
### init.lua ###
|
||||
|
@ -15,76 +15,57 @@ Nether Portal=Portail du Nether
|
|||
|
||||
### mapgen_mantle.lua ###
|
||||
|
||||
, @1m above lava-sea level=, @1m au-dessus du niveau de la mer de lave
|
||||
, @1m below lava-sea level=, @1m en-dessous du niveau de la mer de lave
|
||||
, approaching y boundary of Nether=, approchant de la limite y du Nether
|
||||
, @1m above lava-sea level=
|
||||
, @1m below lava-sea level=
|
||||
, approaching y boundary of Nether=
|
||||
@1@2@3@4=
|
||||
Center/Mantle, but outside the caverns=Centre/Manteau, mais à l'extérieur des cavernes
|
||||
Center/Mantle, inside cavern=Centre/Manteau, à l'intérieur d'une caverne
|
||||
Describes which region of the nether the player is in=Indique dans quelle région du Nether se trouve le joueur
|
||||
Negative nether=Nether négatif
|
||||
Positive nether=Nether positif
|
||||
Shell between negative nether and center region=Coquille entre le Nether négatif et la région centrale
|
||||
Shell between positive nether and center region=Coquille entre le Nether positif et la région centrale
|
||||
The Overworld=L'Overworld
|
||||
Unknown player position=Position du joueur inconnue
|
||||
Center/Mantle, but outside the caverns=
|
||||
Center/Mantle, inside cavern=
|
||||
Describes which region of the nether the player is in=
|
||||
Negative nether=
|
||||
Positive nether=
|
||||
Shell between negative nether and center region=
|
||||
Shell between positive nether and center region=
|
||||
The Overworld=
|
||||
Unknown player position=
|
||||
[Perlin @1] =
|
||||
|
||||
### nodes.lua ###
|
||||
|
||||
A Deep Netherrack Wall=Un mur profond en Netherrack
|
||||
A Netherrack Wall=Un mur en Netherrack
|
||||
A finely finished block of solid Nether Basalt.=Un bloc fini de basalte du Nether solide.
|
||||
A rough cut solid block of Nether Basalt.=Un bloc solide de basalte du Nether taillé à la hache.
|
||||
A thin crust of cooled lava with liquid lava beneath=Une croûte fine de lave refroidie avec de la lave liquide en dessous
|
||||
A vent in the earth emitting steam and gas=Une fissure dans la terre émettant de la vapeur et du gaz
|
||||
Can be repurposed to provide puffs of smoke in a chimney=Peut être réutilisé pour produire des bouffées de fumée dans une cheminée
|
||||
Chiselled Basalt=Basalte sculpté
|
||||
A finely finished block of solid Nether Basalt.=
|
||||
A rough cut solid block of Nether Basalt.=
|
||||
A thin crust of cooled lava with liquid lava beneath=
|
||||
A vent in the earth emitting steam and gas=
|
||||
Can be repurposed to provide puffs of smoke in a chimney=
|
||||
Chiselled Basalt=
|
||||
|
||||
Columns of dark basalt found only in magma oceans deep within the Nether.=Colonnes de basalte noir que l'on trouve uniquement dans les océans de magma profonds du Nether.
|
||||
Columns of dark basalt found only in magma oceans deep within the Nether.=
|
||||
|
||||
Compressed Netherbrick=Briques du Nether compressées
|
||||
Cracked Nether Brick=Briques du Nether craquelées
|
||||
Deep Glowstone=Pierre lumineuse profonde
|
||||
Deep Nether Brick=Briques du Nether profondes
|
||||
Deep Nether Slab=Dalle du Nether profonde
|
||||
Deep Nether Stair=Escalier du Nether profond
|
||||
Deep Netherrack=Netherrack profond
|
||||
Deep Netherrack Slab=Dalle de Netherrack profonde
|
||||
Deep Netherrack Stair=Escalier de Netherrack profond
|
||||
Fumarolic Chimney=Cheminée fumarolique
|
||||
Fumarolic Chimney Corner=Coin de cheminée fumarolique
|
||||
Fumarolic Chimney Slab=Dalle de cheminée fumarolique
|
||||
Compressed Netherbrick=
|
||||
Cracked Nether Brick=
|
||||
Deep Glowstone=
|
||||
Deep Netherrack=
|
||||
Fumarolic Chimney=
|
||||
Fumarolic Chimney Corner=
|
||||
Fumarolic Chimney Slab=
|
||||
Glowstone=Pierre lumineuse
|
||||
Hewn Basalt=Basalte taillé
|
||||
Inner Deep Nether Stair=Escalier intérieur du Nether profond
|
||||
Hewn Basalt=
|
||||
Inner Nether Stair=Escalier intérieur du Nether
|
||||
Lava Crust=Croûte de lave
|
||||
Lava Crust=
|
||||
|
||||
Lava crust is strong enough to walk on, but still hot enough to inflict burns.=La croûte de lave est assez solide pour marcher dessus, mais encore assez chaude pour causer des brûlures
|
||||
Lava crust is strong enough to walk on, but still hot enough to inflict burns.=
|
||||
|
||||
Nether Basalt=Basalte du Nether
|
||||
Nether Beryl=Béryl du Nether
|
||||
Nether Berylite=Bérylite du Nether
|
||||
Nether Basalt=
|
||||
Nether Brick=Brique du Nether
|
||||
Nether Brick Fence=Barrière en briques du Nether
|
||||
Nether Brick Fence Rail=Rail de barrière en briques du Nether
|
||||
Nether Crystal Pane=Panneau de cristal du Nether
|
||||
Nether Slab=Dalle du Nether
|
||||
Nether Stair=Escalier du Nether
|
||||
|
||||
Nether geode crystal, found lining the interior walls of Nether geodes=Cristal de géode du Nether, trouvé le long des parois intérieures des géodes du Nether
|
||||
|
||||
Nether geode crystal. A crystalline structure with faint glow found inside large Nether geodes=Cristal de géode du Nether. Une structure cristalline avec une faible lueur trouvée à l'intérieur des grandes géodes du Nether.
|
||||
|
||||
Netherrack=Roche du Nether
|
||||
Netherrack from deep in the mantle=Roche du Nether provenant des profondeurs du manteau
|
||||
Netherrack Slab=Dalle du Nether
|
||||
Netherrack Stair=Escalier du Nether
|
||||
Netherrack from deep in the mantle=
|
||||
Netherrack stair=
|
||||
Nethersand=Sable du Nether
|
||||
Outer Deep Nether Stair=Escalier extérieur profond du Nether
|
||||
Outer Nether Stair=Escalier extérieur du Nether
|
||||
Portal=Portail
|
||||
Portal=
|
||||
|
||||
### portal_api.lua ###
|
||||
|
||||
|
@ -101,7 +82,7 @@ In all my travels, and time spent in the Great Libraries, I have encountered no
|
|||
|
||||
In all my travels, and time spent in the Great Libraries, I have encountered no shortage of legends surrounding preternatural doorways said to open into other worlds, yet only one can I confirm as being more than merely a story.=Après tous mes voyages, et le temps passé dans les Grandes Bibliothèques, je ne manque pas de légendes sur les portes surnaturelles qui, dit-on s’ouvrent vers d’autres mondes, mais seul une personne peut confirmer que ce sont plus que de simples histoires.
|
||||
|
||||
Mysterious forces prevented you from opening that portal. Please try another location=Des forces mystérieuses vous empêchent d'ouvrir ce portail. Veuillez essayer un autre emplacement.
|
||||
Mysterious forces prevented you from opening that portal. Please try another location=
|
||||
|
||||
Portal wormhole=Vortex du portail
|
||||
|
||||
|
@ -126,16 +107,9 @@ There is a floating land of hills and forests up there, over the edges of which
|
|||
|
||||
### tools.lua ###
|
||||
|
||||
Nether Axe=Hache du Nether
|
||||
Nether Ingot=Lingot du Nether
|
||||
Nether Lump=Morceau du Nether
|
||||
Nether Pickaxe@nWell suited for mining netherrack=Pioche du Nether@nBien adaptée pour miner la roche du Nether
|
||||
Nether Shovel=Pelle du Nether
|
||||
Nether Sword=Épée du Nether
|
||||
|
||||
Nether staff of Eternal Light@nCreates glowstone from netherrack=Bâton du Nether de lumière éternelle@nCrée des blocs de pierre lumineuse à partir de roche du Nether
|
||||
|
||||
Nether staff of Light@nTemporarily transforms the netherrack into glowstone=Bâton du Nether de lumière@nTransforme temporairement la roche du Nether en blocs de pierre lumineuse
|
||||
|
||||
Uniquely suited for mining netherrack, with minimal wear when doing so. Blunts quickly on other materials.=Convient parfaitement pour miner la roche du Nether avec une usure minimale. S'émousse rapidement sur les autres matériaux.
|
||||
|
||||
Nether Axe=
|
||||
Nether Ingot=
|
||||
Nether Lump=
|
||||
Nether Pickaxe=
|
||||
Nether Shovel=
|
||||
Nether Sword=
|
||||
|
|
|
@ -31,8 +31,6 @@ Unknown player position=
|
|||
|
||||
### nodes.lua ###
|
||||
|
||||
A Deep Netherrack Wall=
|
||||
A Netherrack Wall=
|
||||
A finely finished block of solid Nether Basalt.=
|
||||
A rough cut solid block of Nether Basalt.=
|
||||
A thin crust of cooled lava with liquid lava beneath=
|
||||
|
@ -45,43 +43,26 @@ Columns of dark basalt found only in magma oceans deep within the Nether.=
|
|||
Compressed Netherbrick=
|
||||
Cracked Nether Brick=
|
||||
Deep Glowstone=
|
||||
Deep Nether Brick=
|
||||
Deep Nether Slab=
|
||||
Deep Nether Stair=
|
||||
Deep Netherrack=
|
||||
Deep Netherrack Slab=
|
||||
Deep Netherrack Stair=
|
||||
Fumarolic Chimney=
|
||||
Fumarolic Chimney Corner=
|
||||
Fumarolic Chimney Slab=
|
||||
Glowstone=
|
||||
Hewn Basalt=
|
||||
Inner Deep Nether Stair=
|
||||
Inner Nether Stair=
|
||||
Lava Crust=
|
||||
|
||||
Lava crust is strong enough to walk on, but still hot enough to inflict burns.=
|
||||
|
||||
Nether Basalt=
|
||||
Nether Beryl=
|
||||
Nether Berylite=
|
||||
Nether Brick=
|
||||
Nether Brick Fence=
|
||||
Nether Brick Fence Rail=
|
||||
Nether Crystal Pane=
|
||||
Nether Slab=
|
||||
Nether Stair=
|
||||
|
||||
Nether geode crystal, found lining the interior walls of Nether geodes=
|
||||
|
||||
Nether geode crystal. A crystalline structure with faint glow found inside large Nether geodes=
|
||||
|
||||
Netherrack=
|
||||
Netherrack from deep in the mantle=
|
||||
Netherrack Slab=
|
||||
Netherrack Stair=
|
||||
Netherrack stair=
|
||||
Nethersand=
|
||||
Outer Deep Nether Stair=
|
||||
Outer Nether Stair=
|
||||
Portal=
|
||||
|
||||
|
@ -128,13 +109,6 @@ There is a floating land of hills and forests up there, over the edges of which
|
|||
Nether Axe=
|
||||
Nether Ingot=
|
||||
Nether Lump=
|
||||
Nether Pickaxe@nWell suited for mining netherrack=
|
||||
Nether Pickaxe=
|
||||
Nether Shovel=
|
||||
Nether Sword=
|
||||
|
||||
Nether staff of Eternal Light@nCreates glowstone from netherrack=
|
||||
|
||||
Nether staff of Light@nTemporarily transforms the netherrack into glowstone=
|
||||
|
||||
Uniquely suited for mining netherrack, with minimal wear when doing so. Blunts quickly on other materials.=
|
||||
|
||||
|
|
20
mapgen.lua
20
mapgen.lua
|
@ -71,7 +71,6 @@ end
|
|||
-- Load specialty helper functions
|
||||
dofile(nether.path .. "/mapgen_dungeons.lua")
|
||||
dofile(nether.path .. "/mapgen_mantle.lua")
|
||||
dofile(nether.path .. "/mapgen_geodes.lua")
|
||||
|
||||
|
||||
-- Misc math functions
|
||||
|
@ -171,11 +170,7 @@ mapgen.shift_existing_biomes(NETHER_FLOOR, NETHER_CEILING)
|
|||
-- Ores and decorations can be registered against "nether:rack" instead, and the lua
|
||||
-- on_generate() callback will carve the Nether with nether:rack before invoking
|
||||
-- generate_decorations and generate_ores.
|
||||
-- It is disguised as stone to hide any bug where it leaks out of the nether, such as
|
||||
-- https://github.com/minetest/minetest/issues/13440 or if on_generated() somehow was aborted.
|
||||
local stone_copy_def = table.copy(minetest.registered_nodes["default:stone"] or {})
|
||||
stone_copy_def.drop = stone_copy_def.drop or "default:stone" -- probably already defined as cobblestone
|
||||
minetest.register_node("nether:native_mapgen", stone_copy_def)
|
||||
minetest.register_node("nether:native_mapgen", {})
|
||||
|
||||
minetest.register_biome({
|
||||
name = "nether_caverns",
|
||||
|
@ -288,7 +283,6 @@ local dbuf = {}
|
|||
local c_air = minetest.get_content_id("air")
|
||||
local c_netherrack = minetest.get_content_id("nether:rack")
|
||||
local c_netherrack_deep = minetest.get_content_id("nether:rack_deep")
|
||||
local c_crystaldark = minetest.get_content_id("nether:geode")
|
||||
local c_lavasea_source = minetest.get_content_id("nether:lava_source") -- same as lava but with staggered animation to look better as an ocean
|
||||
local c_lava_crust = minetest.get_content_id("nether:lava_crust")
|
||||
local c_native_mapgen = minetest.get_content_id("nether:native_mapgen")
|
||||
|
@ -388,8 +382,7 @@ local function on_generated(minp, maxp, seed)
|
|||
if cave_noise > tcave then
|
||||
-- Prime region
|
||||
-- This was the only region in initial versions of the Nether mod.
|
||||
-- It is the only region which portals from the surface will open into,
|
||||
-- getting to any other regions in the Nether will require Shanks' Pony.
|
||||
-- It is the only region which portals from the surface will open into.
|
||||
data[vi] = c_air
|
||||
contains_nether = true
|
||||
|
||||
|
@ -399,11 +392,12 @@ local function on_generated(minp, maxp, seed)
|
|||
-- Reaching here would require the player to first find and journey through the central region,
|
||||
-- as it's always separated from the Prime region by the central region.
|
||||
|
||||
data[vi] = mapgen.getGeodeInteriorNodeId(x, y, z)-- function from mapgen_geodes.lua
|
||||
data[vi] = c_netherrack -- For now I've just left this region as solid netherrack instead of air.
|
||||
|
||||
-- Only set contains_nether to true here if you want tunnels created between the secondary region
|
||||
-- and the central region.
|
||||
contains_nether = true
|
||||
--contains_nether = true
|
||||
--data[vi] = c_air
|
||||
else
|
||||
-- netherrack walls and/or center region/mantle
|
||||
abs_cave_noise = math_abs(cave_noise)
|
||||
|
@ -420,11 +414,7 @@ local function on_generated(minp, maxp, seed)
|
|||
data[vi] = c_netherrack_deep
|
||||
else
|
||||
-- the shell seperating the mantle from the rest of the nether...
|
||||
if cave_noise > 0 then
|
||||
data[vi] = c_netherrack -- excavate_dungeons() will mostly reverse this inside dungeons
|
||||
else
|
||||
data[vi] = c_crystaldark
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@ minetest.set_gen_notify({dungeon = true})
|
|||
local c_air = minetest.get_content_id("air")
|
||||
local c_netherrack = minetest.get_content_id("nether:rack")
|
||||
local c_netherrack_deep = minetest.get_content_id("nether:rack_deep")
|
||||
local c_crystaldark = minetest.get_content_id("nether:geode")
|
||||
local c_dungeonbrick = minetest.get_content_id("nether:brick")
|
||||
local c_dungeonbrick_alt = minetest.get_content_id("nether:brick_cracked")
|
||||
local c_netherbrick_slab = minetest.get_content_id("stairs:slab_nether_brick")
|
||||
|
@ -165,7 +164,7 @@ nether.mapgen.excavate_dungeons = function(data, area, rooms)
|
|||
vi = area:index(room_min.x, y, z)
|
||||
for x = room_min.x, room_max.x do
|
||||
node_id = data[vi]
|
||||
if node_id == c_netherrack or node_id == c_netherrack_deep or node_id == c_crystaldark then data[vi] = c_air end
|
||||
if node_id == c_netherrack or node_id == c_netherrack_deep then data[vi] = c_air end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
|
@ -182,7 +181,7 @@ nether.mapgen.excavate_dungeons = function(data, area, rooms)
|
|||
vi = vi + area.ystride
|
||||
node_id = data[vi]
|
||||
-- searching forward of the stairs could also be done
|
||||
if node_id == c_netherrack or node_id == c_netherrack_deep or node_id == c_crystaldark then data[vi] = c_air end
|
||||
if node_id == c_netherrack or node_id == c_netherrack_deep then data[vi] = c_air end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -232,11 +231,11 @@ nether.mapgen.decorate_dungeons = function(data, area, rooms)
|
|||
and room_min.z > minEdge.z and room_max.z < maxEdge.z then
|
||||
--data[area:indexp(roomInfo)] = minetest.get_content_id("default:mese_post_light") -- debug
|
||||
|
||||
-- Glass panes can't go in the windows because we aren't setting param data.
|
||||
-- Until a Nether glass is added, every window will be made of netherbrick fence rather
|
||||
-- than material depending on room_seed.
|
||||
-- Can't use glass panes because they need the param data set.
|
||||
-- Until whisper glass is added, every window will be made of netherbrick fence (rather
|
||||
-- than material depending on room_seed)
|
||||
local window_node = c_netherfence
|
||||
--if c_netherglass ~= nil and room_seed % 20 >= 12 then window_node = c_netherglass end
|
||||
--if c_netherglass ~= nil and room_seed % 20 >= 12 then window_node = c_crystallight end
|
||||
|
||||
local function placeWindow(vi, viOutsideOffset, windowNo)
|
||||
if is_dungeon_brick(data[vi]) and is_dungeon_brick(data[vi + yStride]) then
|
||||
|
|
|
@ -1,221 +0,0 @@
|
|||
--[[
|
||||
|
||||
Nether mod for minetest
|
||||
|
||||
This file contains helper functions for generating geode interiors,
|
||||
a proof-of-concept to demonstrate how the secondary/spare region
|
||||
in the nether might be put to use by someone.
|
||||
|
||||
|
||||
Copyright (C) 2021 Treer
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for
|
||||
any purpose with or without fee is hereby granted, provided that the
|
||||
above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
|
||||
BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
|
||||
]]--
|
||||
|
||||
|
||||
local debugf = nether.debug
|
||||
local mapgen = nether.mapgen
|
||||
|
||||
|
||||
-- Content ids
|
||||
|
||||
local c_air = minetest.get_content_id("air")
|
||||
local c_crystal = minetest.get_content_id("nether:geodelite") -- geodelite has a faint glow
|
||||
local c_netherrack = minetest.get_content_id("nether:rack")
|
||||
local c_glowstone = minetest.get_content_id("nether:glowstone")
|
||||
|
||||
-- Math funcs
|
||||
local math_max, math_min, math_abs, math_floor, math_pi = math.max, math.min, math.abs, math.floor, math.pi -- avoid needing table lookups each time a common math function is invoked
|
||||
|
||||
|
||||
-- Create a tiling space of close-packed spheres, using Hexagonal close packing
|
||||
-- of spheres with radius 0.5.
|
||||
-- With a layer of spheres on a flat surface, if the pack-z distance is 1 due to 0.5
|
||||
-- radius then the pack-x distance will be the height of an equilateral triangle: sqrt(3) / 2,
|
||||
-- and the pack-y distance between each layer will be sqrt(6) / 3,
|
||||
-- The tessellating space will be a rectangular box of 2*pack-x by 1*pack-z by 3*pack-y
|
||||
|
||||
local xPack = math.sqrt(3)/2 -- 0.866, height of an equalateral triangle
|
||||
local xPack2 = xPack * 2 -- 1.732
|
||||
local yPack = math.sqrt(6) / 3 -- 0.816, y height of each layer
|
||||
local yPack2 = yPack * 2
|
||||
local yPack3 = yPack * 3
|
||||
local layer2offsetx = xPack / 3 -- 0.289, height to center of equalateral triangle
|
||||
local layer3offsetx = xPack2 / 3 -- 0.577
|
||||
local structureSize = 50 -- magic numbers may need retuning if this changes too much
|
||||
|
||||
local layer1 = {
|
||||
{0, 0, 0},
|
||||
{0, 0, 1},
|
||||
{xPack, 0, -0.5},
|
||||
{xPack, 0, 0.5},
|
||||
{xPack, 0, 1.5},
|
||||
{xPack2, 0, 0},
|
||||
{xPack2, 0, 1},
|
||||
}
|
||||
local layer2 = {
|
||||
{layer2offsetx - xPack, yPack, 0},
|
||||
{layer2offsetx - xPack, yPack, 1},
|
||||
{layer2offsetx, yPack, -0.5},
|
||||
{layer2offsetx, yPack, 0.5},
|
||||
{layer2offsetx, yPack, 1.5},
|
||||
{layer2offsetx + xPack, yPack, 0},
|
||||
{layer2offsetx + xPack, yPack, 1},
|
||||
{layer2offsetx + xPack2, yPack, -0.5},
|
||||
{layer2offsetx + xPack2, yPack, 0.5},
|
||||
{layer2offsetx + xPack2, yPack, 1.5},
|
||||
}
|
||||
local layer3 = {
|
||||
{layer3offsetx - xPack, yPack2, -0.5},
|
||||
{layer3offsetx - xPack, yPack2, 0.5},
|
||||
{layer3offsetx - xPack, yPack2, 1.5},
|
||||
{layer3offsetx, yPack2, 0},
|
||||
{layer3offsetx, yPack2, 1},
|
||||
{layer3offsetx + xPack, yPack2, -0.5},
|
||||
{layer3offsetx + xPack, yPack2, 0.5},
|
||||
{layer3offsetx + xPack, yPack2, 1.5},
|
||||
{layer3offsetx + xPack2, yPack2, 0},
|
||||
{layer3offsetx + xPack2, yPack2, 1},
|
||||
}
|
||||
local layer4 = {
|
||||
{0, yPack3, 0},
|
||||
{0, yPack3, 1},
|
||||
{xPack, yPack3, -0.5},
|
||||
{xPack, yPack3, 0.5},
|
||||
{xPack, yPack3, 1.5},
|
||||
{xPack2, yPack3, 0},
|
||||
{xPack2, yPack3, 1},
|
||||
}
|
||||
local layers = {
|
||||
{y = layer1[1][2], points = layer1}, -- layer1[1][2] is the y value of the first point in layer1, and all spheres in a layer have the same y
|
||||
{y = layer2[1][2], points = layer2},
|
||||
{y = layer3[1][2], points = layer3},
|
||||
{y = layer4[1][2], points = layer4},
|
||||
}
|
||||
|
||||
|
||||
-- Geode mapgen functions (AKA proof of secondary/spare region concept)
|
||||
|
||||
|
||||
-- fast for small lists
|
||||
function insertionSort(array)
|
||||
local i
|
||||
for i = 2, #array do
|
||||
local key = array[i]
|
||||
local j = i - 1
|
||||
while j > 0 and array[j] > key do
|
||||
array[j + 1] = array[j]
|
||||
j = j - 1
|
||||
end
|
||||
array[j + 1] = key
|
||||
end
|
||||
return array
|
||||
end
|
||||
|
||||
|
||||
local distSquaredList = {}
|
||||
local adj_x = 0
|
||||
local adj_y = 0
|
||||
local adj_z = 0
|
||||
local lasty, lastz
|
||||
local warpx, warpz
|
||||
|
||||
|
||||
-- It's quite a lot to calculate for each air node, but its not terribly slow and
|
||||
-- it'll be pretty darn rare for chunks in the secondary region to ever get emerged.
|
||||
mapgen.getGeodeInteriorNodeId = function(x, y, z)
|
||||
|
||||
if z ~= lastz then
|
||||
lastz = z
|
||||
-- Calculate structure warping
|
||||
-- To avoid calculating this for each node there's no warping as you look along the x axis :(
|
||||
adj_y = math.sin(math_pi / 222 * y) * 30
|
||||
|
||||
if y ~= lasty then
|
||||
lasty = y
|
||||
warpx = math.sin(math_pi / 100 * y) * 10
|
||||
warpz = math.sin(math_pi / 43 * y) * 15
|
||||
end
|
||||
local twistRadians = math_pi / 73 * y
|
||||
local sinTwist, cosTwist = math.sin(twistRadians), math.cos(twistRadians)
|
||||
adj_x = cosTwist * warpx - sinTwist * warpz
|
||||
adj_z = sinTwist * warpx + cosTwist * warpz
|
||||
end
|
||||
|
||||
-- convert x, y, z into a position in the tessellating space
|
||||
local cell_x = (((x + adj_x) / xPack2 + 0.5) % structureSize) / structureSize * xPack2
|
||||
local cell_y = (((y + adj_y) / yPack3 + 0.5) % structureSize) / structureSize * yPack3
|
||||
local cell_z = (((z + adj_z) + 0.5) % structureSize) / structureSize -- zPack = 1, so can be omitted
|
||||
|
||||
local iOut = 1
|
||||
local i, j
|
||||
local canSkip = false
|
||||
|
||||
for i = 1, #layers do
|
||||
|
||||
local layer = layers[i]
|
||||
local dy = cell_y - layer.y
|
||||
|
||||
if dy > -0.71 and dy < 0.71 then -- optimization - don't include points to far away to make a difference. (0.71 comes from sin(45°))
|
||||
local points = layer.points
|
||||
|
||||
for j = 1, #points do
|
||||
|
||||
local point = points[j]
|
||||
local dx = cell_x - point[1]
|
||||
local dz = cell_z - point[3]
|
||||
local distSquared = dx*dx + dy*dy + dz*dz
|
||||
|
||||
if distSquared < 0.25 then
|
||||
-- optimization - point is inside a sphere, so cannot be a wall edge. (0.25 comes from radius of 0.5 squared)
|
||||
return c_air
|
||||
end
|
||||
|
||||
distSquaredList[iOut] = distSquared
|
||||
iOut = iOut + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- clear the rest of the array instead of creating a new one to hopefully reduce luajit mem leaks.
|
||||
while distSquaredList[iOut] ~= nil do
|
||||
rawset(distSquaredList, iOut, nil)
|
||||
iOut = iOut + 1
|
||||
end
|
||||
|
||||
insertionSort(distSquaredList)
|
||||
|
||||
local d3_1 = distSquaredList[3] - distSquaredList[1]
|
||||
local d3_2 = distSquaredList[3] - distSquaredList[2]
|
||||
--local d4_1 = distSquaredList[4] - distSquaredList[1]
|
||||
--local d4_3 = distSquaredList[4] - distSquaredList[3]
|
||||
|
||||
-- Some shape formulas (tuned for a structureSize of 50)
|
||||
-- (d3_1 < 0.05) gives connective lines
|
||||
-- (d3_1 < 0.05 or d3_2 < .02) give fancy elven bridges - prob doesn't need the d3_1 part
|
||||
-- ((d3_1 < 0.05 or d3_2 < .02) and distSquaredList[1] > .3) tapers the fancy connections in the middle
|
||||
-- (d4_3 < 0.03 and d3_2 < 0.03) produces caltrops at intersections
|
||||
-- (d4_1 < 0.1) produces spherish balls at intersections
|
||||
-- The idea is voronoi based - edges in a voronoi diagram are where each nearby point is at equal distance.
|
||||
-- In this case we use squared distances to avoid calculating square roots.
|
||||
|
||||
if (d3_1 < 0.05 or d3_2 < .02) and distSquaredList[1] > .3 then
|
||||
return c_crystal
|
||||
elseif (distSquaredList[4] - distSquaredList[1]) < 0.08 then
|
||||
return c_glowstone
|
||||
else
|
||||
return c_air
|
||||
end
|
||||
end
|
2
mod.conf
2
mod.conf
|
@ -1,4 +1,4 @@
|
|||
name = nether
|
||||
description = Adds a deep underground realm with different mapgen that you can reach with obsidian portals.
|
||||
depends = stairs, default
|
||||
optional_depends = toolranks, moreblocks, mesecons, loot, dungeon_loot, doc_basics, fire, climate_api, ethereal, xpanes, walls
|
||||
optional_depends = moreblocks, mesecons, loot, dungeon_loot, doc_basics, fire, climate_api, ethereal, walls
|
||||
|
|
120
nodes.lua
120
nodes.lua
|
@ -180,63 +180,6 @@ minetest.register_node("nether:rack", {
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
-- Geode crystals can only be introduced by the biomes-based mapgen, since it requires the
|
||||
-- MT 5.0 world-align texture features.
|
||||
minetest.register_node("nether:geode", {
|
||||
description = S("Nether Beryl"),
|
||||
_doc_items_longdesc = S("Nether geode crystal, found lining the interior walls of Nether geodes"),
|
||||
tiles = {{
|
||||
name = "nether_geode.png",
|
||||
align_style = "world",
|
||||
scale = 4
|
||||
}},
|
||||
is_ground_content = true,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 3, nether_crystal = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
-- Nether Berylite is a Beryl that can seen in the dark, used to light up the internal structure
|
||||
-- of the geode, so to avoid player confusion we'll just have it drop plain Beryl, and have only
|
||||
-- plain Beryl in the creative inventory.
|
||||
minetest.register_node("nether:geodelite", {
|
||||
description = S("Nether Berylite"),
|
||||
_doc_items_longdesc = S("Nether geode crystal. A crystalline structure with faint glow found inside large Nether geodes"),
|
||||
tiles = {{
|
||||
name = "nether_geode.png",
|
||||
align_style = "world",
|
||||
scale = 4
|
||||
}},
|
||||
light_source = 2,
|
||||
drop = "nether:geode",
|
||||
is_ground_content = true,
|
||||
groups = {cracky = 3, oddly_breakable_by_hand = 3, nether_crystal = 1, not_in_creative_inventory = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
if minetest.get_modpath("xpanes") and minetest.global_exists("xpanes") and xpanes.register_pane ~= nil then
|
||||
xpanes.register_pane("nether_crystal_pane", {
|
||||
description = S("Nether Crystal Pane"),
|
||||
textures = {
|
||||
{
|
||||
name = "nether_geode_glass.png",
|
||||
align_style = "world",
|
||||
scale = 2
|
||||
},
|
||||
"",
|
||||
"xpanes_edge_obsidian.png"
|
||||
},
|
||||
inventory_image = "([combine:32x32:-8,-8=nether_geode_glass.png:24,-8=nether_geode_glass.png:-8,24=nether_geode_glass.png:24,24=nether_geode_glass.png)^[resize:16x16^[multiply:#922^default_obsidian_glass.png",
|
||||
wield_image = "([combine:32x32:-8,-8=nether_geode_glass.png:24,-8=nether_geode_glass.png:-8,24=nether_geode_glass.png:24,24=nether_geode_glass.png)^[resize:16x16^[multiply:#922^default_obsidian_glass.png", use_texture_alpha = true,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3},
|
||||
recipe = {
|
||||
{"group:nether_crystal", "group:nether_crystal", "group:nether_crystal"},
|
||||
{"group:nether_crystal", "group:nether_crystal", "group:nether_crystal"}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- Deep Netherrack, found in the mantle / central magma layers
|
||||
minetest.register_node("nether:rack_deep", {
|
||||
description = S("Deep Netherrack"),
|
||||
|
@ -306,6 +249,26 @@ minetest.register_node("nether:brick_cracked", {
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
local fence_texture =
|
||||
"default_fence_overlay.png^nether_brick.png^default_fence_overlay.png^[makealpha:255,126,126"
|
||||
|
||||
minetest.register_node("nether:fence_nether_brick", {
|
||||
description = S("Nether Brick Fence"),
|
||||
drawtype = "fencelike",
|
||||
tiles = {"nether_brick.png"},
|
||||
inventory_image = fence_texture,
|
||||
wield_image = fence_texture,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
|
||||
},
|
||||
groups = {cracky = 2, level = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("nether:brick_deep", {
|
||||
description = S("Deep Nether Brick"),
|
||||
tiles = {{
|
||||
|
@ -318,34 +281,6 @@ minetest.register_node("nether:brick_deep", {
|
|||
sounds = default.node_sound_stone_defaults()
|
||||
})
|
||||
|
||||
-- Register fence and rails
|
||||
|
||||
local fence_texture =
|
||||
"default_fence_overlay.png^nether_brick.png^default_fence_overlay.png^[makealpha:255,126,126"
|
||||
|
||||
local rail_texture =
|
||||
"default_fence_rail_overlay.png^nether_brick.png^default_fence_rail_overlay.png^[makealpha:255,126,126"
|
||||
|
||||
default.register_fence("nether:fence_nether_brick", {
|
||||
description = S("Nether Brick Fence"),
|
||||
texture = "nether_brick.png",
|
||||
inventory_image = fence_texture,
|
||||
wield_image = fence_texture,
|
||||
material = "nether:brick",
|
||||
groups = {cracky = 2, level = 2},
|
||||
sounds = default.node_sound_stone_defaults()
|
||||
})
|
||||
|
||||
default.register_fence_rail("nether:fence_rail_nether_brick", {
|
||||
description = S("Nether Brick Fence Rail"),
|
||||
texture = "nether_brick.png",
|
||||
inventory_image = rail_texture,
|
||||
wield_image = rail_texture,
|
||||
material = "nether:brick",
|
||||
groups = {cracky = 2, level = 2},
|
||||
sounds = default.node_sound_stone_defaults()
|
||||
})
|
||||
|
||||
-- Register stair and slab
|
||||
|
||||
-- Nether bricks can be made into stairs, slabs, inner stairs, and outer stairs
|
||||
|
@ -383,7 +318,7 @@ stairs.register_stair(
|
|||
"nether:rack",
|
||||
{cracky = 2, level = 2},
|
||||
{"nether_rack.png"},
|
||||
S("Netherrack Stair"),
|
||||
S("Netherrack stair"),
|
||||
minetest.registered_nodes["nether:rack"].sounds
|
||||
)
|
||||
stairs.register_slab( -- register a slab without adding inner and outer stairs
|
||||
|
@ -391,7 +326,7 @@ stairs.register_slab( -- register a slab without adding inner and outer stairs
|
|||
"nether:rack",
|
||||
{cracky = 2, level = 2},
|
||||
{"nether_rack.png"},
|
||||
S("Netherrack Slab"),
|
||||
S("Deep Netherrack slab"),
|
||||
minetest.registered_nodes["nether:rack"].sounds
|
||||
)
|
||||
|
||||
|
@ -400,7 +335,7 @@ stairs.register_stair(
|
|||
"nether:rack_deep",
|
||||
{cracky = 2, level = 2},
|
||||
{"nether_rack_deep.png"},
|
||||
S("Deep Netherrack Stair"),
|
||||
S("Deep Netherrack stair"),
|
||||
minetest.registered_nodes["nether:rack_deep"].sounds
|
||||
)
|
||||
stairs.register_slab( -- register a slab without adding inner and outer stairs
|
||||
|
@ -408,14 +343,14 @@ stairs.register_slab( -- register a slab without adding inner and outer stairs
|
|||
"nether:rack_deep",
|
||||
{cracky = 2, level = 2},
|
||||
{"nether_rack_deep.png"},
|
||||
S("Deep Netherrack Slab"),
|
||||
S("Deep Netherrack slab"),
|
||||
minetest.registered_nodes["nether:rack_deep"].sounds
|
||||
)
|
||||
|
||||
-- Connecting walls
|
||||
if minetest.get_modpath("walls") and minetest.global_exists("walls") and walls.register ~= nil then
|
||||
walls.register("nether:rack_wall", S("A Netherrack Wall"), "nether_rack.png", "nether:rack", minetest.registered_nodes["nether:rack"].sounds)
|
||||
walls.register("nether:rack_deep_wall", S("A Deep Netherrack Wall"), "nether_rack_deep.png", "nether:rack_deep", minetest.registered_nodes["nether:rack_deep"].sounds)
|
||||
walls.register("nether:rack_wall", "A Netherrack wall", "nether_rack.png", "nether:rack", minetest.registered_nodes["nether:rack"].sounds)
|
||||
walls.register("nether:rack_deep_wall", "A Deep Netherrack wall", "nether_rack_deep.png", "nether:rack_deep", minetest.registered_nodes["nether:rack_deep"].sounds)
|
||||
end
|
||||
|
||||
-- StairsPlus
|
||||
|
@ -778,7 +713,6 @@ minetest.register_node("nether:lava_crust", {
|
|||
--liquid_viscosity = 7,
|
||||
damage_per_second = 2,
|
||||
groups = {oddly_breakable_by_hand = 3, cracky = 3, explody = 1, igniter = 1},
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
})
|
||||
|
||||
|
||||
|
@ -841,7 +775,7 @@ local function fumarole_onTimer(pos, elapsed)
|
|||
local smoke_time_adj = 1
|
||||
|
||||
local posAbove = {x = pos.x, y = pos.y + 1, z = pos.z}
|
||||
local extinguish = inNether and minetest.get_node(posAbove).name ~= "air"
|
||||
local extinguish = minetest.get_node(posAbove).name ~= "air"
|
||||
|
||||
if extinguish or (canCatchFire and math.floor(elapsed) % 7 == 0) then
|
||||
|
||||
|
|
|
@ -2166,20 +2166,22 @@ function nether.unregister_portal(name)
|
|||
end
|
||||
|
||||
function nether.register_portal_ignition_item(item_name, ignition_failure_sound)
|
||||
local old_on_place = minetest.registered_items[item_name].on_place or minetest.item_place
|
||||
|
||||
minetest.override_item(item_name, {
|
||||
on_place = function(stack, placer, pt, ...)
|
||||
on_place = function(stack, placer, pt)
|
||||
local done = false
|
||||
if pt.under and nether.is_frame_node[minetest.get_node(pt.under).name] then
|
||||
local done = ignite_portal(pt.under, placer:get_player_name())
|
||||
done = ignite_portal(pt.under, placer:get_player_name())
|
||||
if done and not minetest.settings:get_bool("creative_mode") then
|
||||
stack:take_item()
|
||||
end
|
||||
end
|
||||
if not done and ignition_failure_sound ~= nil then
|
||||
minetest.sound_play(ignition_failure_sound, {pos = pt.under, max_hear_distance = 10})
|
||||
end
|
||||
|
||||
|
||||
return stack
|
||||
end
|
||||
return old_on_place(stack, placer, pt, ...)
|
||||
end,
|
||||
})
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 568 B |
37
tools.lua
37
tools.lua
|
@ -153,38 +153,6 @@ minetest.register_craft({
|
|||
})
|
||||
|
||||
|
||||
if minetest.get_modpath("toolranks") then
|
||||
|
||||
local function add_toolranks(name)
|
||||
local nethertool_after_use = ItemStack(name):get_definition().after_use
|
||||
toolranks.add_tool(name)
|
||||
local toolranks_after_use = ItemStack(name):get_definition().after_use
|
||||
|
||||
if nethertool_after_use == nil or nethertool_after_use == toolranks_after_use then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.override_item(name, {
|
||||
after_use = function(itemstack, user, node, digparams)
|
||||
-- combine nethertool_after_use and toolranks_after_use by allowing
|
||||
-- nethertool_after_use() to calculate the wear...
|
||||
local initial_wear = itemstack:get_wear()
|
||||
itemstack = nethertool_after_use(itemstack, user, node, digparams)
|
||||
local wear = itemstack:get_wear() - initial_wear
|
||||
itemstack:set_wear(initial_wear) -- restore/undo the wear
|
||||
|
||||
-- ...and have toolranks_after_use() apply the wear.
|
||||
digparams.wear = wear
|
||||
return toolranks_after_use(itemstack, user, node, digparams)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
add_toolranks("nether:pick_nether")
|
||||
add_toolranks("nether:shovel_nether")
|
||||
add_toolranks("nether:axe_nether")
|
||||
add_toolranks("nether:sword_nether")
|
||||
end
|
||||
|
||||
|
||||
--===========================--
|
||||
|
@ -384,11 +352,10 @@ minetest.register_tool("nether:lightstaff_eternal", {
|
|||
sound = {breaks = "default_tool_breaks"},
|
||||
stack_max = 1,
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if lightstaff_on_use(user, "#23F", 0) -- was "#8088FF" or "#13F"
|
||||
and not minetest.is_creative_enabled(user) then
|
||||
if lightstaff_on_use(user, "#23F", 0) then -- was "#8088FF" or "#13F"
|
||||
-- The staff of Eternal Light wears out, to limit how much
|
||||
-- a player can alter the nether with it.
|
||||
itemstack:add_wear_by_uses(nether.lightstaff_uses)
|
||||
itemstack:add_wear(65535 / (nether.lightstaff_uses - 1))
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user