Primordial cavern layer (#12)

* bring in the art assets from ClockGen's "better_caves_modpack" under CC BY 4.0,, code written from scratch.

* update mapgen_helper

* import ClockGen's giant mushroom schematics, make them and giant ferns growable

* add giant jungle mushroom, rough out actual cavern layer code framework

* fungal ceiling decorations

* decorate fungal floor a bit

* update mapgen_helper

* update primordial mushroom schematic placement to ensure it fits

* add giant mycelium fungoidal structure

* add giant mycelium to mapgen

* fix settings for giant mycelium

* make mycelium grow when players aren't present

* allow mycelium growth to pause when it hits unloaded areas

* add a use for giant mycelium

* make giant mushrooms edible, make jungle trees growable

* rough out the jungle biome

* Make a spectrum of jungle growth

* optimize pngs, add is_ground_content to everything

* use custom is_ground_content method

* fix a crash with veinstone, and simplify nvals_cave lookup now that overgen covers the same area

* more fixes for overgen support

* remove unintentional airspace from underside of slade

* fix for overgen crash in level 2

* primordial column material, add sealed shafts to underworld

* add seal block

* Set up puzzle seals to be able to dig a staircase shaft through the slade layer. TODO: the puzzle to guard the trigger.

* puzzle seals now fully functional. Need to add clues for decoding the keys next.

* add a small bit of anti-griefing - the seal breach bell only tolls globally 13 times per activation

* add flowers to the underworld warrior bones

* switch to a different key bell

* fancy up the puzzle seal temples with some custom blocks, add sub-slade grid passages

* add a clue to the seal formspec

* tweak background of inscription 2 so it's less obviously a copy of the background for inscription 1

* switch to compositing to save a few bytes

* fancy up the seal's upper surface with inscriptions to make the formspec feel consistent

* puzzle particle, bones were only spawning on top of structures

* fix ice/oil on level 3, tweak some loot probabilities

* add trail mod support

* remove deprecated files

* boost default plant growth delay, add growing selection boxes

* update map colours

* add named waypoints to the underworld

* try a more efficient way of changing the interiors of columns

* polishing up the Primordial layer

* update guide with some Primordial teasers

* updated magma sea screenshot

* update mapgen_helper and subterrane

* reduce density of megaflora a bit - was too hard to walk through

* spreading_dirt_type depends on light, create my own ABM instead

* add names to the glowing pits and some of the ruins

* separate setting for ruin markers

* record identity of slade-breachers

* make mycelia climbable

* update subterrane

* change surface tunnel detection to allow above-ground stalactites and stalagmites

* add rare thicker Goblin Caps, suitable for use as huts.

* better goblin cap schematics

* update colours

* make it slightly harder to dig down through amethyst sheathing of pits

* fixing up fungus light sensitivity, tree growth code

* fix a few minor bugs

* update deprecated functions

* add various eating sounds

* make mapping kit requirement more flexible

* update spindlestem growth code, remove deprecated functions

* fix leftover undefined variable

* add fireflies to primordial, spread out the post-mapgen node timer for plant matter a bit more.

* fix bones formspec

* add lbm to upgrade old bones

* fix slade undiggability

* make torchspines smokey and manually lightable

* fix drop definitions

* generate dry stalactites in near-surface caverns.

* caverns become far too smokey, alas

* add pitter patter of spore tree spores, alternate paper recipe

* new mapgen_helper metrics

* add smokey back to torchspine now that it can be dialed down a bit

* replace glowstone texture with a new animated one

* switch from ABM to node timer for mapgen mycelium growth

* make mapgen mycelium timer delay configurable

* improve the efficiency of giant mycelium growth using flat node array, fewer dereferences

* remove the smoke from torchspines again - it doesn't dissipate that deep underground

* give slade a more muted, gloomy hue to differentiate it from nether stone

* update screenshots with new slade colors

* update mapgen_helper
This commit is contained in:
FaceDeer
2020-02-12 23:49:17 -07:00
committed by GitHub
parent 12919e9a16
commit 98fb313eb1
221 changed files with 7159 additions and 445 deletions

View File

@ -7,11 +7,11 @@ local print_settingtypes = false
local function setting(stype, name, default, description)
local value
if stype == "bool" then
value = minetest.setting_getbool(CONFIG_FILE_PREFIX..name)
value = minetest.settings:get_bool(CONFIG_FILE_PREFIX..name, default)
elseif stype == "string" then
value = minetest.setting_get(CONFIG_FILE_PREFIX..name)
value = minetest.settings:get(CONFIG_FILE_PREFIX..name)
elseif stype == "int" or stype == "float" then
value = tonumber(minetest.setting_get(CONFIG_FILE_PREFIX..name))
value = tonumber(minetest.setting:get(CONFIG_FILE_PREFIX..name))
end
if value == nil then
value = default

View File

@ -7,7 +7,7 @@ minetest.register_node("df_underworld_items:glow_amethyst", {
_doc_items_longdesc = df_underworld_items.doc.glow_amethyst_desc,
_doc_items_usagehelp = df_underworld_items.doc.glow_amethyst_usage,
tiles = {"dfcaverns_glow_amethyst.png"},
is_ground_content = true,
is_ground_content = false,
groups = {cracky=3, pit_plasma_resistant=1},
sounds = default.node_sound_glass_defaults(),
light_source = 6,

View File

@ -1,7 +0,0 @@
default
intllib?
doc?
radiant_damage?
mesecons_mvps?
tnt?
stairs

View File

@ -1 +0,0 @@
Various node types used by the dfcaverns mapgen mod for its underworld layer.

View File

@ -7,8 +7,19 @@ local glowstone_def = {
_doc_items_usagehelp = df_underworld_items.doc.glowstone_usage,
light_source = minetest.LIGHT_MAX,
description = S("Lightseam"),
tiles = {"dfcaverns_glowstone.png"},
is_ground_content = true,
tiles = {
{
name = "dfcaverns_glowstone_anim.png",
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 8,
},
},
},
is_ground_content = false,
groups = {cracky=3},
sounds = default.node_sound_glass_defaults(),
paramtype = "light",

View File

@ -35,7 +35,7 @@ minetest.register_node("df_underworld_items:pit_plasma", {
liquid_alternative_flowing = "df_underworld_items:pit_plasma_flowing",
liquid_alternative_source = "df_underworld_items:pit_plasma",
liquid_renewable = false,
is_ground_content = true,
is_ground_content = false,
light_source = minetest.LIGHT_MAX,
paramtype = "light",
})
@ -84,7 +84,7 @@ minetest.register_node("df_underworld_items:pit_plasma_flowing", {
liquid_alternative_flowing = "df_underworld_items:pit_plasma_flowing",
liquid_alternative_source = "df_underworld_items:pit_plasma",
liquid_renewable = false,
is_ground_content = true,
is_ground_content = false,
light_source = minetest.LIGHT_MAX,
paramtype = "light",
})
@ -101,7 +101,7 @@ end
local sparkle = function(sparkle_pos)
minetest.add_particlespawner({
amount = 10,
time = 1,
time = 2,
minpos = {x=sparkle_pos.x-5, y=sparkle_pos.y-0.5, z=sparkle_pos.z-5},
maxpos = {x=sparkle_pos.x+5, y=sparkle_pos.y+0.5, z=sparkle_pos.z+5},
minvel = {x=-0.1, y=2, z=-0.1},
@ -129,7 +129,7 @@ if df_underworld_items.config.destructive_pit_plasma then
minetest.register_abm({
label = "glowing pit matter degradation",
nodenames = {"group:pit_plasma"},
interval = 1,
interval = 2,
chance = 30,
catch_up = false,
action = function(pos)
@ -164,7 +164,7 @@ else
label = "glowing pit sparkle",
nodenames = {"group:pit_plasma"},
neighbors = {"air"},
interval = 1,
interval = 2,
chance = 30,
catch_up = false,
action = function(pos)

View File

@ -9,3 +9,5 @@ dofile(modpath.."/crystals_amethyst.lua")
dofile(modpath.."/glow_stone.lua")
dofile(modpath.."/slade.lua")
dofile(modpath.."/glowing_pit_plasma.lua")
dofile(modpath.."/puzzle_seal.lua")

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dfcaverns module's Italian locale\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-12-24 21:26-0700\n"
"POT-Creation-Date: 2020-01-26 21:11-0700\n"
"PO-Revision-Date: 2017-08-17 23:01+0100\n"
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
"Language-Team: ITALIANO\n"
@ -85,6 +85,38 @@ msgstr ""
msgid "Lightseam"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:108
msgid "Turn"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:178
msgid "Slade Puzzle Seal"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:238
msgid "Active Slade Breacher"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:340
msgid "Breach in the Slade"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:351
msgid "Inscribed Slade Block"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:374
msgid "Slade Capstone"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:443
msgid "Slade Block Stair"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:444
msgid "Slade Block Slab"
msgstr ""
#: df_underworld_items\slade.lua:18
msgid "Slade"
msgstr ""
@ -97,23 +129,23 @@ msgstr ""
msgid "Slade Wall"
msgstr ""
#: df_underworld_items\slade.lua:77
#: df_underworld_items\slade.lua:78
msgid "Slade Sand"
msgstr ""
#: df_underworld_items\slade.lua:89
#: df_underworld_items\slade.lua:90
msgid "Slade Block"
msgstr ""
#: df_underworld_items\slade.lua:105
#: df_underworld_items\slade.lua:106
msgid "Slade Seal"
msgstr ""
#: df_underworld_items\slade.lua:154
#: df_underworld_items\slade.lua:155
msgid "Slade Stair"
msgstr ""
#: df_underworld_items\slade.lua:155
#: df_underworld_items\slade.lua:156
msgid "Slade Slab"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-12-24 21:26-0700\n"
"POT-Creation-Date: 2020-01-26 21:11-0700\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"
@ -84,6 +84,38 @@ msgstr ""
msgid "Lightseam"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:108
msgid "Turn"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:178
msgid "Slade Puzzle Seal"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:238
msgid "Active Slade Breacher"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:340
msgid "Breach in the Slade"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:351
msgid "Inscribed Slade Block"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:374
msgid "Slade Capstone"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:443
msgid "Slade Block Stair"
msgstr ""
#: df_underworld_items\puzzle_seal.lua:444
msgid "Slade Block Slab"
msgstr ""
#: df_underworld_items\slade.lua:18
msgid "Slade"
msgstr ""
@ -96,22 +128,22 @@ msgstr ""
msgid "Slade Wall"
msgstr ""
#: df_underworld_items\slade.lua:77
#: df_underworld_items\slade.lua:78
msgid "Slade Sand"
msgstr ""
#: df_underworld_items\slade.lua:89
#: df_underworld_items\slade.lua:90
msgid "Slade Block"
msgstr ""
#: df_underworld_items\slade.lua:105
#: df_underworld_items\slade.lua:106
msgid "Slade Seal"
msgstr ""
#: df_underworld_items\slade.lua:154
#: df_underworld_items\slade.lua:155
msgid "Slade Stair"
msgstr ""
#: df_underworld_items\slade.lua:155
#: df_underworld_items\slade.lua:156
msgid "Slade Slab"
msgstr ""

View File

@ -1,4 +1,4 @@
name = df_underworld_items
description = Various node types used by the dfcaverns mapgen mod for its underworld layer.
depends = default, stairs
optional_depends = intllib, doc, radiant_damage, mesecons_mvps, tnt
depends = default
optional_depends = intllib, doc, radiant_damage, mesecons_mvps, tnt, stairs

View File

@ -0,0 +1,34 @@
# Blender v2.81 (sub 16) OBJ File: 'capstone.blend'
# www.blender.org
mtllib underworld_capstone.mtl
o Cube
v 0.000000 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
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 0.000000
vt 0.500000 1.000000
vt 1.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.4472 0.8944
vn -0.8944 0.4472 0.0000
vn 0.8944 0.4472 0.0000
vn 0.0000 0.4472 -0.8944
g Cube_Cube_Material
usemtl Material
s off
f 2/1/1 5/2/1 4/3/1
f 2/1/1 3/4/1 5/2/1
g Cube_Cube_side
usemtl side
f 3/4/2 1/5/2 5/2/2
f 5/2/3 1/5/3 4/6/3
f 2/7/4 1/5/4 3/8/4
f 4/9/5 1/5/5 2/7/5

View File

@ -0,0 +1,386 @@
# Blender v2.81 (sub 16) OBJ File: 'seal.blend'
# www.blender.org
mtllib underworld_seal.mtl
o Cylinder
v -0.292175 -0.501653 -0.705374
v -0.292175 0.501653 -0.705374
v 0.292175 -0.501653 -0.705374
v 0.292175 0.501653 -0.705374
v 0.705374 -0.501653 -0.292175
v 0.705374 0.501653 -0.292175
v 0.705374 -0.501653 0.292175
v 0.705374 0.501653 0.292175
v 0.292175 -0.501653 0.705374
v 0.292175 0.501653 0.705374
v -0.292175 -0.501653 0.705374
v -0.292175 0.501653 0.705374
v -0.705374 -0.501653 0.292175
v -0.705374 0.501653 0.292175
v -0.705374 -0.501653 -0.292175
v -0.705374 0.501653 -0.292175
v -0.146088 -0.752480 -0.352687
v 0.146088 -0.752480 -0.352687
v 0.146088 0.752480 -0.352687
v -0.146088 0.752480 -0.352687
v 0.352687 -0.752480 -0.146088
v 0.352687 0.752480 -0.146088
v 0.352687 -0.752480 0.146088
v 0.352687 0.752480 0.146088
v 0.146088 -0.752480 0.352687
v 0.146088 0.752480 0.352687
v -0.146088 -0.752480 0.352687
v -0.146088 0.752480 0.352687
v -0.352687 -0.752480 0.146088
v -0.352687 0.752480 0.146088
v -0.352687 -0.752480 -0.146088
v -0.352687 0.752480 -0.146088
v -0.000000 0.501653 -0.705374
v 0.498774 0.501653 -0.498774
v 0.705374 0.501653 0.000000
v 0.498774 0.501653 0.498774
v -0.000000 0.501653 0.705374
v -0.498775 0.501653 0.498775
v -0.705374 0.501653 0.000000
v -0.498775 0.501653 -0.498774
v -0.093326 0.852022 -0.690234
v -0.000000 -0.501653 -0.705374
v 0.498774 -0.501653 -0.498774
v 0.705374 -0.501653 0.000000
v 0.498774 -0.501653 0.498774
v -0.000000 -0.501653 0.705374
v -0.498775 -0.501653 0.498775
v -0.705374 -0.501653 0.000000
v -0.498775 -0.501653 -0.498774
v -0.000000 -0.501653 -0.705374
v 0.292175 -0.501653 -0.705374
v 0.292175 -0.501653 -0.705374
v -0.000000 0.501653 -0.705374
v -0.292175 0.501653 -0.705374
v -0.292175 0.501653 -0.705374
v -0.292175 -0.501653 -0.705374
v -0.292175 -0.501653 -0.705374
v 0.292175 0.501653 -0.705374
v 0.292175 0.501653 -0.705374
v 0.498774 -0.501653 -0.498774
v 0.705374 -0.501653 -0.292175
v 0.705374 -0.501653 -0.292175
v 0.498774 0.501653 -0.498774
v 0.705374 0.501653 -0.292175
v 0.705374 0.501653 -0.292175
v 0.705374 -0.501653 0.000000
v 0.705374 -0.501653 0.292175
v 0.705374 -0.501653 0.292175
v 0.705374 0.501653 0.000000
v 0.705374 0.501653 0.292175
v 0.705374 0.501653 0.292175
v 0.498774 -0.501653 0.498774
v 0.292175 -0.501653 0.705374
v 0.292175 -0.501653 0.705374
v 0.498774 0.501653 0.498774
v 0.292175 0.501653 0.705374
v 0.292175 0.501653 0.705374
v -0.000000 -0.501653 0.705374
v -0.292175 -0.501653 0.705374
v -0.292175 -0.501653 0.705374
v -0.000000 0.501653 0.705374
v -0.292175 0.501653 0.705374
v -0.292175 0.501653 0.705374
v -0.498775 -0.501653 0.498775
v -0.705374 -0.501653 0.292175
v -0.705374 -0.501653 0.292175
v -0.498775 0.501653 0.498775
v -0.705374 0.501653 0.292175
v -0.705374 0.501653 0.292175
v -0.705374 -0.501653 0.000000
v -0.705374 -0.501653 -0.292175
v -0.705374 -0.501653 -0.292175
v -0.705374 0.501653 0.000000
v -0.705374 0.501653 -0.292175
v -0.705374 0.501653 -0.292175
v -0.498775 -0.501653 -0.498774
v -0.498775 0.501653 -0.498774
v -0.146088 -0.752480 -0.352687
v 0.146088 -0.752480 -0.352687
v 0.146088 0.752480 -0.352687
v -0.146088 0.752480 -0.352687
v 0.352687 -0.752480 -0.146088
v 0.352687 0.752480 -0.146088
v 0.352687 -0.752480 0.146088
v 0.352687 0.752480 0.146088
v 0.146088 -0.752480 0.352687
v 0.146088 0.752480 0.352687
v -0.146088 -0.752480 0.352687
v -0.146088 0.752480 0.352687
v -0.352687 -0.752480 0.146088
v -0.352687 0.752480 0.146088
v -0.352687 -0.752480 -0.146088
v -0.352687 0.752480 -0.146088
vt 0.500000 1.000000
vt 0.250000 0.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt 0.750000 0.000000
vt 1.000000 0.000000
vt 0.250000 1.000000
vt 0.250000 0.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt 0.750000 0.000000
vt 1.000000 0.000000
vt 0.500000 1.000000
vt 0.250000 0.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt 0.750000 0.000000
vt 1.000000 0.000000
vt 0.500000 1.000000
vt 0.250000 0.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt 0.750000 0.000000
vt 1.000000 0.000000
vt 0.750000 0.000000
vt 0.750000 1.000000
vt 0.250000 1.000000
vt 1.250000 0.000000
vt 1.250000 1.000000
vt 0.750000 1.000000
vt 0.750000 0.000000
vt 0.500000 1.000000
vt 0.750000 1.000000
vt 1.250000 0.000000
vt 1.250000 1.000000
vt 0.750000 1.000000
vt 0.750000 0.000000
vt 0.750000 1.000000
vt 0.250000 1.000000
vt 1.250000 0.000000
vt 1.250000 1.000000
vt 0.750000 1.000000
vt 0.750000 0.000000
vt 0.750000 1.000000
vt 0.250000 1.000000
vt 1.250000 0.000000
vt 1.250000 1.000000
vt 0.750000 1.000000
vt 0.000000 0.292893
vt 0.707106 0.000000
vt 1.000000 0.707107
vt 1.000000 0.292893
vt 0.292893 0.000000
vt 0.000000 0.707106
vt 0.707107 1.000000
vt 0.292893 1.000000
vt 0.000000 0.707106
vt 0.292893 0.000000
vt 1.000000 0.292893
vt 0.292893 1.000000
vt 0.707107 1.000000
vt 1.000000 0.707107
vt 0.707106 0.000000
vt 0.000000 0.292893
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vt 0.000000 -0.000000
vt 1.000000 0.000000
vn 0.0000 0.0000 -1.0000
vn 0.7071 0.0000 -0.7071
vn 1.0000 0.0000 0.0000
vn 0.7071 0.0000 0.7071
vn 0.0000 0.0000 1.0000
vn -0.7071 0.0000 0.7071
vn -1.0000 0.0000 0.0000
vn -0.7071 0.0000 -0.7071
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.4098 -0.8149 -0.4098
vn 0.4098 0.8149 0.4098
vn -0.5796 -0.8149 0.0000
vn 0.4098 0.8149 -0.4098
vn -0.5796 0.8149 0.0000
vn 0.0000 -0.8149 0.5796
vn 0.0000 0.8149 0.5796
vn 0.5796 -0.8149 0.0000
vn -0.4098 -0.8149 -0.4098
vn 0.0000 -0.8149 -0.5796
vn 0.5796 0.8149 0.0000
vn -0.4098 0.8149 -0.4098
vn 0.0000 0.8149 -0.5796
vn -0.4098 -0.8149 0.4098
vn -0.4098 0.8149 0.4098
vn 0.4098 -0.8149 0.4098
g Cylinder_Cylinder_Sides
usemtl Sides
s off
f 53/1/1 51/2/1 50/3/1
f 63/4/2 61/5/2 60/6/2
f 70/7/3 67/8/3 66/9/3
f 75/10/4 73/11/4 72/12/4
f 81/13/5 79/14/5 78/15/5
f 87/16/6 85/17/6 84/18/6
f 93/19/7 91/20/7 90/21/7
f 97/22/8 57/23/8 96/24/8
f 50/3/1 56/25/1 54/26/1
f 53/1/1 58/27/1 51/2/1
f 50/3/1 54/26/1 53/1/1
f 60/6/2 3/28/2 59/29/2
f 63/4/2 64/30/2 61/5/2
f 60/6/2 59/29/2 63/4/2
f 66/9/3 5/31/3 69/32/3
f 5/31/3 65/33/3 69/32/3
f 69/32/3 70/7/3 66/9/3
f 72/12/4 7/34/4 71/35/4
f 75/10/4 76/36/4 73/11/4
f 72/12/4 71/35/4 75/10/4
f 78/15/5 9/37/5 77/38/5
f 81/13/5 82/39/5 79/14/5
f 78/15/5 77/38/5 81/13/5
f 84/18/6 11/40/6 83/41/6
f 87/16/6 88/42/6 85/17/6
f 84/18/6 83/41/6 87/16/6
f 90/21/7 13/43/7 89/44/7
f 93/19/7 94/45/7 91/20/7
f 90/21/7 89/44/7 93/19/7
f 96/24/8 15/46/8 95/47/8
f 97/22/8 2/48/8 57/23/8
f 96/24/8 95/47/8 97/22/8
g Cylinder_Cylinder_Caps
usemtl Caps
f 111/49/9 26/50/9 103/51/9
f 104/52/10 108/53/10 112/54/10
f 103/51/9 100/55/9 111/49/9
f 100/55/9 101/56/9 111/49/9
f 101/56/9 113/57/9 111/49/9
f 111/49/9 109/58/9 26/50/9
f 26/50/9 105/59/9 103/51/9
f 112/54/10 98/60/10 99/61/10
f 99/61/10 21/62/10 104/52/10
f 104/52/10 106/63/10 108/53/10
f 108/53/10 110/64/10 112/54/10
f 112/54/10 99/61/10 104/52/10
g Cylinder_Cylinder_Edges
usemtl Edges
f 43/65/11 102/66/11 18/67/11
f 36/68/12 24/69/12 107/70/12
f 48/71/13 31/72/13 29/73/13
f 34/74/14 19/75/14 22/76/14
f 39/77/15 30/78/15 32/79/15
f 46/80/16 27/81/16 25/82/16
f 37/83/17 107/84/17 28/85/17
f 44/86/18 23/87/18 102/88/18
f 49/89/19 17/90/19 31/91/19
f 42/92/20 18/93/20 17/94/20
f 35/95/21 22/96/21 24/97/21
f 40/98/22 32/99/22 20/100/22
f 33/101/23 20/102/23 19/103/23
f 47/104/24 29/105/24 27/106/24
f 38/107/25 28/108/25 30/109/25
f 45/110/26 25/111/26 23/112/26
f 107/70/12 10/113/12 36/68/12
f 36/68/12 8/114/12 24/69/12
f 22/76/14 6/115/14 34/74/14
f 34/74/14 4/116/14 19/75/14
f 32/79/15 16/117/15 39/77/15
f 39/77/15 14/118/15 30/78/15
f 28/85/17 12/119/17 37/83/17
f 37/83/17 10/120/17 107/84/17
f 24/97/21 8/121/21 35/95/21
f 35/95/21 6/122/21 22/96/21
f 20/100/22 55/123/22 40/98/22
f 40/98/22 16/124/22 32/99/22
f 19/103/23 4/125/23 33/101/23
f 33/101/23 55/126/23 20/102/23
f 30/109/25 14/127/25 38/107/25
f 38/107/25 12/128/25 28/108/25
f 18/67/11 52/129/11 43/65/11
f 43/65/11 62/130/11 102/66/11
f 29/73/13 86/131/13 48/71/13
f 48/71/13 92/132/13 31/72/13
f 25/82/16 74/133/16 46/80/16
f 46/80/16 80/134/16 27/81/16
f 102/88/18 62/135/18 44/86/18
f 44/86/18 68/136/18 23/87/18
f 31/91/19 92/137/19 49/89/19
f 49/89/19 1/138/19 17/90/19
f 17/94/20 1/139/20 42/92/20
f 42/92/20 52/140/20 18/93/20
f 27/106/24 80/141/24 47/104/24
f 47/104/24 86/142/24 29/105/24
f 23/112/26 68/143/26 45/110/26
f 45/110/26 74/144/26 25/111/26

View File

@ -0,0 +1,506 @@
-- internationalization boilerplate
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local named_waypoints_path = minetest.get_modpath("named_waypoints")
local invulnerable = df_underworld_items.config.invulnerable_slade and not minetest.settings:get_bool("creative_mode")
local can_dig
if invulnerable then
can_dig = function(pos, player)
return minetest.check_player_privs(player, "server")
end
end
local slade_groups = {stone=1, level=3, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1, cracky = 3, not_in_creative_inventory=1}
if invulnerable then
slade_groups.immortal = 1
end
-- Ensures that the node is functioning correctly
local ensure_meta = function(pos)
local meta = minetest.get_meta(pos)
if not meta:contains("key") then
local inv = meta:get_inventory()
inv:set_size("main", 8)
local next_seed = math.random() * 2^21
math.randomseed(pos.x + pos.z^16)
-- Key is consistent with location
local key = {math.random(0,7), math.random(0,7), math.random(0,7), math.random(0,7), math.random(0,7), math.random(0,7),math.random(0,7), math.random(0,7)}
math.randomseed(next_seed)
meta:set_string("key", minetest.serialize(key))
meta:mark_as_private("key")
end
local timer = minetest.get_node_timer(pos)
if not timer:is_started() then
timer:start(4)
end
end
local colour_groups = {
"color_black", -- 0
"color_red", -- 1
"color_orange", -- 2
"color_yellow", -- 3
"color_green", -- 4
"color_blue", -- 5
"color_violet", -- 6
"color_white"} -- 7
local test_key = function(pos)
local meta = minetest.get_meta(pos)
if not meta:contains("key") then
return false
end
local keystring = meta:get_string("key")
local key = minetest.deserialize(keystring)
local inv = meta:get_inventory()
for offset = 0, 7 do
local valid
for i = 0, 7 do
valid = true
local keyval = (i + offset) % 8 + 1
local key_group = colour_groups[key[keyval]+1]
local item = inv:get_stack("main", i+1)
if minetest.get_item_group(item:get_name(), key_group) == 0 then
valid = false
break
end
end
if valid then
local unlocked = meta:get_int("unlocked")
if unlocked == 0 then
meta:set_int("unlocked", 1)
end
return true
end
end
meta:set_int("unlocked", 0)
return false
end
--We were a powerful culture.
--This place is not a place of honor.
--No esteemed deed is commemorated here.
--What is here is dangerous and repulsive.
--This message is a warning about danger.
--The danger is still present.
--The danger is unleashed if you disturb this place.
--This place is best shunned and left uninhabited.
local formspec_prefix = "df_underworld_items_puzzle_seal:"
local get_formspec = function(pos, unlocked)
local formspec =
"size[8,8]"
.."image[0,0;2.5,4;dfcaverns_puzzle_inscription_background.png^dfcaverns_puzzle_inscription_1.png]"
.."image[5.8,0;2.5,4;dfcaverns_puzzle_inscription_background.png^[transformR180^dfcaverns_puzzle_inscription_2.png]"
.."container[2.25,0]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0.25,0.25;1,1;0]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;1.25,0;1,1;1]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;2.25,0.25;1,1;2]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;2.5,1.25;1,1;3]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;2.25,2.25;1,1;4]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;1.25,2.5;1,1;5]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0.25,2.25;1,1;6]"
.."list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,1.25;1,1;7]"
if unlocked then
formspec = formspec .. "image_button[1.25,1.25;1,1;dfcaverns_seal.png;open;"..S("Turn").."]"
else
formspec = formspec .. "image[1.25,1.25;1,1;dfcaverns_seal.png]"
end
formspec = formspec
.."container_end[]"
-- .."container[5,0.5]"
-- .."box[0,0;1,5;#0A0000]box[0.1,0.1;0.8,4.8;#000000]box[0.1," .. 0.1 + 4.8*completion ..";0.8,".. 4.8*completion ..";#FFCC22]"
-- .."container_end[]"
.."container[0,4]list[current_player;main;0,0;8,1;]listring[]"
.."list[current_player;main;0,1.25;8,3;8]container_end[]"
return formspec
end
local refresh_formspec = function(pos, player)
local player_name = player:get_player_name()
local unlocked = test_key(pos)
local formspec = get_formspec(pos, unlocked)
minetest.show_formspec(player_name, formspec_prefix..minetest.pos_to_string(pos), formspec)
end
local show_key = function(pos, index)
minetest.sound_play("dfcaverns_seal_key", {
pos = pos,
gain = 0.125,
max_hear_distance = 32,
})
local meta = minetest.get_meta(pos)
local keystring = meta:get_string("key")
local key = minetest.deserialize(keystring)
--minetest.chat_send_all(keystring)
local minpos = vector.add(pos, {x=-1, y=1, z=-1})
local maxpos = vector.add(pos, {x=1, y=3, z=1})
minetest.add_particlespawner({
amount = key[index+1],
time = 0.5,
minpos = minpos,
maxpos = maxpos,
minvel = {x=-0.25, y=0, z=-0.25},
maxvel = {x=0.25, y=0.25, z=0.25},
minacc = {x=0, y=0, z=0},
maxacc = {x=0, y=0, z=0},
minexptime = 3,
maxexptime = 3,
minsize = 1,
maxsize = 1,
texture = "dfcaverns_puzzle_particle.png",
glow = 8,
})
end
local show_unlocked = function(pos, global)
-- Plays globally. This is deliberate.
if global then
minetest.sound_play("dfcaverns_seal_unlocked", {})
else
minetest.sound_play("dfcaverns_seal_unlocked", {pos = pos, max_hear_distance = 128,})
end
minetest.add_particle({
pos = pos,
velocity = {x=0, y=1, z=0},
expirationtime = 30,
size = 20,
texture = "dfcaverns_seal.png^[invert:rgb^[brighten",
glow = 15,
-- vertical = true,
})
end
local puzzle_seal_def = {
description = S("Slade Puzzle Seal"),
_doc_items_longdesc = nil,
_doc_items_usagehelp = nil,
drawtype = "mesh",
mesh = "underworld_seal.obj",
tiles = {"dfcaverns_slade_block.png", "dfcaverns_slade_block.png^dfcaverns_seal.png", "dfcaverns_slade_block.png^(dfcaverns_inscription_1.png^[opacity:128)"},
paramtype = "light",
paramtype2 = "facedir",
light_source = 8,
groups = slade_groups,
sounds = default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } }),
selection_box = {
type = "fixed",
fixed = {-0.625, -0.625, -0.625, 0.625, 0.625, 0.625},
},
collision_box = {
type = "fixed",
fixed = {-0.625, -0.625, -0.625, 0.625, 0.625, 0.625},
},
is_ground_content = false,
can_dig = can_dig,
on_blast = function() end,
on_rotate = function() return false end,
on_construct = function(pos)
ensure_meta(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
ensure_meta(pos)
refresh_formspec(pos, clicker)
end,
on_timer = function(pos, elapsed)
local meta = minetest.get_meta(pos)
local unlocked = meta:get_int("unlocked")
if unlocked > 0 then
meta:set_int("unlocked", unlocked + 1)
show_unlocked(pos, unlocked <= 13)
else
local index = meta:get_int("key_index")
show_key(pos, index)
meta:set_int("key_index", (index+1) % 8)
end
minetest.get_node_timer(pos):start(4)
end,
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
refresh_formspec(pos, player)
end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
refresh_formspec(pos, player)
end,
on_metadata_inventory_take = function(pos, listname, index, stack, player)
refresh_formspec(pos, player)
end,
}
minetest.register_node("df_underworld_items:puzzle_seal", puzzle_seal_def)
--------------------------------------------------------------------------------
-- Once the seal is opened, it turns into this and digs its way down through the slade.
local digging_seal_def = {
description = S("Active Slade Breacher"),
_doc_items_longdesc = nil,
_doc_items_usagehelp = nil,
drawtype = "mesh",
mesh = "underworld_seal.obj",
tiles = {"dfcaverns_pit_plasma_static.png", "dfcaverns_pit_plasma_static.png^dfcaverns_seal.png", "dfcaverns_pit_plasma_static.png"},
paramtype = "light",
paramtype2 = "facedir",
light_source = default.LIGHT_MAX,
groups = {immortal=1, stone=1, level=3, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } }),
selection_box = {
type = "fixed",
fixed = {-0.625, -0.625, -0.625, 0.625, 0.625, 0.625},
},
collision_box = {
type = "fixed",
fixed = {-0.625, -0.625, -0.625, 0.625, 0.625, 0.625},
},
is_ground_content = false,
can_dig = can_dig,
on_blast = function() end,
on_rotate = function() return false end,
on_construct = function(pos)
minetest.get_node_timer(pos):start(0)
end,
on_timer = function(pos, elapsed)
local node = minetest.get_node(pos)
local below_node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
if below_node.name == "ignore" then
-- map's not loaded below, try again later
minetest.get_node_timer(pos):start(4)
return
end
minetest.sound_play("dfcaverns_massive_digging", {
pos = pos,
gain = 1.0,
max_hear_distance = 32,
})
local minpos = vector.add(pos, {x=0, y=-1, z=0})
minetest.add_particlespawner({
amount = 100,
time = 4,
minpos = minpos,
maxpos = minpos,
minvel = {x=-5, y=0, z=-5},
maxvel = {x=5, y=20, z=5},
minacc = {x=0, y=-10, z=0},
maxacc = {x=0, y=-10, z=0},
minexptime = 5,
maxexptime = 15,
minsize = 1,
maxsize = 5,
texture = "dfcaverns_glowpit_particle.png",
collisiondetection = true,
collision_removal = true,
glow = 15,
})
if minetest.get_item_group(below_node.name, "slade") == 0 then
tnt.boom({x=pos.x, y=pos.y-2, z=pos.z}, {radius=3})
minetest.set_node(pos, {name="default:lava_source"})
return
end
local rot = node.param2
if rot == 0 then
minetest.place_schematic({x=pos.x-3, y=pos.y-2, z=pos.z-3}, df_underworld_items.seal_stair_schem, 0, {}, true)
node.param2 = 1
elseif rot == 1 then
minetest.place_schematic({x=pos.x-3, y=pos.y-2, z=pos.z-3}, df_underworld_items.seal_stair_schem, 90, {}, true)
node.param2 = 2
elseif rot == 2 then
minetest.place_schematic({x=pos.x-3, y=pos.y-2, z=pos.z-3}, df_underworld_items.seal_stair_schem, 180, {}, true)
node.param2 = 3
elseif rot == 3 then
minetest.place_schematic({x=pos.x-3, y=pos.y-2, z=pos.z-3}, df_underworld_items.seal_stair_schem, 270, {}, true)
node.param2 = 0
else
tnt.boom(pos, {radius=3})
minetest.set_node(pos, {name="default:lava_source"})
return
end
minetest.set_node(pos, {name="air"})
local newpos = {x=pos.x, y=pos.y-2, z=pos.z}
minetest.set_node(newpos, node)
minetest.get_node_timer(newpos):start(4)
end,
}
minetest.register_node("df_underworld_items:digging_seal", digging_seal_def)
local prefix_len = string.len(formspec_prefix)
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname:sub(1,prefix_len) ~= formspec_prefix or not fields.open then
return
end
local pos_string = formname:sub(prefix_len+1)
local pos = minetest.string_to_pos(pos_string)
if test_key(pos) then
if named_waypoints_path then
named_waypoints.update_waypoint("puzzle_seals", pos, {name=S("Breach in the Slade"), color=0xFA264F, player=player:get_player_name()})
end
minetest.log("action", "[df_underworld_items] " .. player:get_player_name() .. " triggered a puzzle seal at " .. pos_string)
minetest.set_node(pos, {name="df_underworld_items:digging_seal", param2 = math.random(1,4)-1})
minetest.get_node_timer(pos):start(4)
minetest.close_formspec(player:get_player_name(), formname)
end
end)
-------------------------------------------------------------------------------------------------
local inscription_block_def = {
description = S("Inscribed Slade Block"),
_doc_items_longdesc = nil,
_doc_items_usagehelp = nil,
tiles = {
"dfcaverns_slade_block.png",
"dfcaverns_slade_block.png",
"dfcaverns_slade_block.png^(dfcaverns_inscription_1.png^[opacity:128)",
"dfcaverns_slade_block.png^(dfcaverns_inscription_2.png^[opacity:128)",
"dfcaverns_slade_block.png^(dfcaverns_inscription_3.png^[opacity:128)",
"dfcaverns_slade_block.png^(dfcaverns_inscription_4.png^[opacity:128)",
},
paramtype2 = "facedir",
groups = slade_groups,
sounds = default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } }),
is_ground_content = false,
can_dig = can_dig,
on_blast = function() end,
on_rotate = function() return false end,
}
minetest.register_node("df_underworld_items:inscription_block", inscription_block_def)
local capstone_def = {
description = S("Slade Capstone"),
_doc_items_longdesc = nil,
_doc_items_usagehelp = nil,
drawtype = "mesh",
mesh = "underworld_capstone.obj",
tiles = {
"dfcaverns_slade_block.png",
"dfcaverns_slade_block.png"
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.25, 0, -0.25, 0.25, 0.5, 0.25},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.25, 0, -0.25, 0.25, 0.5, 0.25},
},
},
paramtype = "light",
paramtype2 = "facedir",
groups = slade_groups,
light_source = 8,
sounds = default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } }),
is_ground_content = false,
can_dig = can_dig,
on_blast = function() end,
on_rotate = function() return false end,
}
minetest.register_node("df_underworld_items:slade_capstone", capstone_def)
-----------------------------------------------------------------------------------------
-- Schematics
local n1 = { name = "df_underworld_items:slade_block" }
local n5 = { name = "default:meselamp" }
local n6 = { name = "air", prob = 0 } -- ceiling pieces to leave in place
local n8 = { name = "df_underworld_items:puzzle_seal" }
local n3 = { name = "air"}
local n2 = n3
local n4 = n3
local n7 = n3
local n9 = n3
local n10 = n1
local n11 = n3
local n12 = { name = "df_underworld_items:inscription_block", param2 = 0 }
local n13 = { name = "df_underworld_items:inscription_block", param2 = 1 }
local n14 = { name = "df_underworld_items:inscription_block", param2 = 2 }
local n15 = { name = "df_underworld_items:inscription_block", param2 = 3 }
local n16 = { name = "df_underworld_items:slade_capstone"}
if minetest.get_modpath("stairs") then
local stair_groups = {level = 3, mese_radiation_shield=1, pit_plasma_resistant=1, slade=1, cracky = 3}
if invulnerable then
stair_groups.immortal = 1
end
stairs.register_stair_and_slab(
"slade_block",
"df_underworld_items:slade_block",
stair_groups,
{"dfcaverns_slade_block.png"},
S("Slade Block Stair"),
S("Slade Block Slab"),
default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } })
)
if invulnerable then
for name, def in pairs(minetest.registered_nodes) do
if name:sub(1,7) == "stairs:" and name:sub(-11) == "slade_block" then
minetest.override_item(name, {can_dig = can_dig})
end
end
end
n2 = { name = "stairs:stair_slade_block", param2 = 3 }
n4 = { name = "stairs:stair_slade_block", param2 = 1 }
n7 = { name = "stairs:stair_slade_block", param2 = 2 }
n9 = { name = "stairs:stair_slade_block" }
n10 = { name = "stairs:slab_slade_block", param2 = 21 }
n11 = { name = "stairs:slab_slade_block", param2 = 1 }
end
df_underworld_items.seal_temple_schem = {
size = {y = 6, x = 7, z = 7},
data = {
n15, n2, n3, n3, n3, n4, n14, n14, n3, n3, n3, n3, n3, n15, n13, n3, n3,
n3, n3, n3, n13, n16, n3, n3, n3, n3, n3, n16, n6, n6, n6, n6, n6, n6,
n6, n6, n6, n6, n6, n6, n6, n6, n7, n3, n3, n3, n3, n3, n7, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3,
n3, n3, n6, n3, n3, n3, n3, n3, n6, n6, n6, n6, n6, n6, n6, n6, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n6, n3, n3, n3, n3, n3, n6,
n6, n6, n3, n3, n3, n6, n6, n3, n3, n3, n8, n3, n3, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3,
n3, n6, n3, n3, n3, n3, n3, n6, n6, n6, n3, n3, n3, n6, n6, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n6, n3, n3, n3, n3, n3, n6, n6,
n6, n3, n3, n3, n6, n6, n9, n3, n3, n3, n3, n3, n9, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3,
n6, n3, n3, n3, n3, n3, n6, n6, n6, n6, n6, n6, n6, n6, n12, n2, n3,
n3, n3, n4, n12, n14, n3, n3, n3, n3, n3, n15, n13, n3, n3, n3, n3, n3,
n12, n16, n3, n3, n3, n3, n3, n16, n6, n6, n6, n6, n6, n6, n6, n6, n6,
n6, n6, n6, n6, n6,
}
}
df_underworld_items.seal_stair_schem = {
size = {y = 2, x = 7, z = 7},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n10,
n3, n3, n3, n1, n1, n3, n11, n1, n10, n3, n1, n1, n11, n3, n3, n3, n3,
n1, n1, n3, n3, n3, n3, n3, n1, n1, n3, n3, n3, n3, n3, n1, n1, n3,
n3, n3, n3, n3, n1, n1, n3, n3, n3, n3, n3, n1, n1, n3, n3, n3, n3,
n3, n1, n1, n3, n3, n3, n3, n3, n1, n1, n3, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
}
}

View File

@ -4,13 +4,13 @@ local S, NS = dofile(MP.."/intllib.lua")
local invulnerable = df_underworld_items.config.invulnerable_slade and not minetest.settings:get_bool("creative_mode")
local server_diggable_only = function(pos, player)
return minetest.check_player_privs(player, "server")
end
local add_immortality = function(slade_def)
slade_def.groups.immortal = 1
slade_def.groups.cracky = nil
--slade_def.on_destruct = function() end
--slade_def.can_dig = function(pos, player) return minetest.settings:get_bool("creative_mode") == true end
--slade_def.diggable = false
--slade_def.on_blast = function() end
slade_def.can_dig = server_diggable_only
return slade_def
end
@ -64,6 +64,7 @@ local slade_wall_def = {
paramtype = "light",
tiles = {"dfcaverns_slade_brick.png"},
walkable = true,
is_ground_content = false,
groups = { cracky=3, stone=1, level=3, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1},
sounds = default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } }),
}
@ -78,7 +79,7 @@ minetest.register_node("df_underworld_items:slade_sand", {
_doc_items_longdesc = df_underworld_items.doc.slade_desc,
_doc_items_usagehelp = df_underworld_items.doc.slade_usage,
tiles = {"dfcaverns_slade_sand.png"},
is_ground_content = true,
is_ground_content = false,
groups = {crumbly = 3, level = 2, falling_node = 1, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1},
sounds = default.node_sound_gravel_defaults({
footstep = {name = "default_gravel_footstep", gain = 0.45},
@ -142,10 +143,9 @@ if minetest.get_modpath("stairs") then
local stair_groups = {level = 3, mese_radiation_shield=1, pit_plasma_resistant=1, slade=1}
if invulnerable then
stair_groups.immortal = 1
else
stair_groups.cracky = 3
end
stair_groups.cracky = 3
stairs.register_stair_and_slab(
"slade_brick",
"df_underworld_items:slade_brick",
@ -155,6 +155,15 @@ if minetest.get_modpath("stairs") then
S("Slade Slab"),
default.node_sound_stone_defaults({ footstep = { name = "bedrock2_step", gain = 1 } })
)
if invulnerable then
for name, def in pairs(minetest.registered_nodes) do
if name:sub(1,7) == "stairs:" and name:sub(-11) == "slade_brick" then
minetest.override_item(name, {can_dig = server_diggable_only})
end
end
end
end
if minetest.get_modpath("mesecons_mvps") and df_underworld_items.config.invulnerable_slade then

Binary file not shown.

Binary file not shown.

View File

@ -9,4 +9,10 @@ dfcaverns_grinding_stone.3.ogg - from https://freesound.org/people/FreqMan/sound
dfcaverns_arcing.1.ogg - from https://freesound.org/people/unfa/sounds/264827/ by unfa under Creative Commons BY 3.0
dfcaverns_arcing.2.ogg - from https://freesound.org/people/unfa/sounds/264827/ by unfa under Creative Commons BY 3.0
dfcaverns_arcing.3.ogg - from https://freesound.org/people/unfa/sounds/264827/ by unfa under Creative Commons BY 3.0
dfcaverns_arcing.4.ogg - from https://freesound.org/people/unfa/sounds/264827/ by unfa under Creative Commons BY 3.0
dfcaverns_arcing.4.ogg - from https://freesound.org/people/unfa/sounds/264827/ by unfa under Creative Commons BY 3.0
dfcaverns_seal_unlocked.ogg - from https://freesound.org/people/juskiddink/sounds/74920/ by juskiddink under Creative Commons BY 3.0
dfcaverns_seal_key.ogg - From https://freesound.org/people/megashroom/sounds/391488/ by megashroom under the CC0 public domain license
dfcaverns_massive_digging.1.ogg - from https://freesound.org/people/OGsoundFX/sounds/423120/ by OGsoundFX under Creative Commons BY 3.0
dfcaverns_massive_digging.2.ogg - from https://freesound.org/people/OGsoundFX/sounds/423120/ by OGsoundFX under Creative Commons BY 3.0
dfcaverns_massive_digging.3.ogg - from https://freesound.org/people/OGsoundFX/sounds/423120/ by OGsoundFX under Creative Commons BY 3.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

After

Width:  |  Height:  |  Size: 171 B

View File

@ -2,4 +2,6 @@ All textures not specifically listed here are created by FaceDeer and released u
dfcaverns_glow_amethyst, dfcaverns_glow_amethist_ore - from caverealms glow_amethyst
dfcaverns_slade, dfcaverns_slade_sand, dfcaverns_slade_brick, dfcaverns_glowstone, are all from the Nether mod by PilzAdam: Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/
dfcaverns_slade, dfcaverns_slade_sand, dfcaverns_slade_brick, are all from the Nether mod by PilzAdam: Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) http://creativecommons.org/licenses/by-sa/3.0/
dfcaverns_glowstone_anim is derived from an animated gif of the Sun's surface released by the National Science Foundation under the public domain

Binary file not shown.