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
@ -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
|
||||
|
@ -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,
|
||||
|
@ -1,7 +0,0 @@
|
||||
default
|
||||
intllib?
|
||||
doc?
|
||||
radiant_damage?
|
||||
mesecons_mvps?
|
||||
tnt?
|
||||
stairs
|
@ -1 +0,0 @@
|
||||
Various node types used by the dfcaverns mapgen mod for its underworld layer.
|
@ -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",
|
||||
|
@ -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)
|
||||
|
@ -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")
|
@ -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 ""
|
||||
|
||||
|
@ -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 ""
|
||||
|
@ -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
|
||||
|
34
df_underworld_items/models/underworld_capstone.obj
Normal 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
|
386
df_underworld_items/models/underworld_seal.obj
Normal 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
|
506
df_underworld_items/puzzle_seal.lua
Normal 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,
|
||||
}
|
||||
}
|
@ -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
|
||||
|
BIN
df_underworld_items/sounds/dfcaverns_massive_digging.1.ogg
Normal file
BIN
df_underworld_items/sounds/dfcaverns_massive_digging.2.ogg
Normal file
BIN
df_underworld_items/sounds/dfcaverns_massive_digging.3.ogg
Normal file
BIN
df_underworld_items/sounds/dfcaverns_seal_key.ogg
Normal file
BIN
df_underworld_items/sounds/dfcaverns_seal_unlocked.ogg
Normal 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
|
Before Width: | Height: | Size: 753 B |
BIN
df_underworld_items/textures/dfcaverns_glowstone_anim.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
df_underworld_items/textures/dfcaverns_inscription_1.png
Normal file
After Width: | Height: | Size: 475 B |
BIN
df_underworld_items/textures/dfcaverns_inscription_2.png
Normal file
After Width: | Height: | Size: 485 B |
BIN
df_underworld_items/textures/dfcaverns_inscription_3.png
Normal file
After Width: | Height: | Size: 486 B |
BIN
df_underworld_items/textures/dfcaverns_inscription_4.png
Normal file
After Width: | Height: | Size: 481 B |
BIN
df_underworld_items/textures/dfcaverns_puzzle_inscription_1.png
Normal file
After Width: | Height: | Size: 733 B |
BIN
df_underworld_items/textures/dfcaverns_puzzle_inscription_2.png
Normal file
After Width: | Height: | Size: 711 B |
After Width: | Height: | Size: 921 B |
BIN
df_underworld_items/textures/dfcaverns_puzzle_particle.png
Normal file
After Width: | Height: | Size: 387 B |
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 374 B After Width: | Height: | Size: 317 B |
Before Width: | Height: | Size: 302 B After Width: | Height: | Size: 296 B |
Before Width: | Height: | Size: 171 B After Width: | Height: | Size: 171 B |
@ -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
|