mirror of
https://github.com/FaceDeer/dfcaverns.git
synced 2025-06-28 14:36:20 +02:00
Small stuff (#8)
* cave pearls and spindleshrooms (name subject to change) now are things. Not in mapgen yet. * add the wandering "gas wisp" to light up some of the gas-filled caverns * make wisps rarely spawned by gas explosions * revamp spindlestems into a sort of mineral detector, add glowing extract bottles * optimize pngs * add gas wisps to mapgen * add spindlestems to cavern level 1, most level 1 warrens are now lit up * update internal names, adjust mineral detection range * add cave pearls to some level 2 warrens and tunnels * switch experimental simplecrafting_lib support to crafting mod * Pearls don't grow on falling nodes * put spindlestems with goblin caps, make them always grow red when near those * bunch of documentation * add castle coral to replace cave coral, which has been repurposed into column decoration * documentation for cave coral, update some locale text * add a recipe for cooking oil into paraffin * add old bones to the underworld * MIT license for bones_loot * also cook black cap gills into paraffin, they're oily * add salt crystals to the bloodthorn caverns, illuminating the floor * documentation for salt crystals * auto-generate minetestmapper colors. need to update the spindlestem colours manually * add spindlestem to fungiwood caverns too, and increase warren coverage * in anticipation of eventually adding stuff below the Slade, making glowing pit erosion self-limiting. * add a bit of displacement to the underside of the slade layer * Unique images and names for cooking recipes. * revamp bones loot * add softer footsteps for some fungus types * update mapgen_helper * update cave coral screenshot * mention glowing salts in bloodthorn caverns
This commit is contained in:
22
bones_loot/LICENSE.txt
Normal file
22
bones_loot/LICENSE.txt
Normal file
@ -0,0 +1,22 @@
|
||||
License for Code
|
||||
----------------
|
||||
|
||||
Copyright (C) 2019 FaceDeer
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
3
bones_loot/depends.txt
Normal file
3
bones_loot/depends.txt
Normal file
@ -0,0 +1,3 @@
|
||||
bones
|
||||
dungeon_loot?
|
||||
intllib?
|
125
bones_loot/init.lua
Normal file
125
bones_loot/init.lua
Normal file
@ -0,0 +1,125 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
local dungeon_loot_path = minetest.get_modpath("dungeon_loot")
|
||||
|
||||
bones_loot = {}
|
||||
|
||||
local local_loot = {}
|
||||
local local_loot_register = function(t)
|
||||
if t.name ~= nil then
|
||||
t = {t} -- single entry
|
||||
end
|
||||
for _, loot in ipairs(t) do
|
||||
table.insert(local_loot, loot)
|
||||
end
|
||||
end
|
||||
|
||||
-- we could do this for the dungeon_loot registered loot table as well,
|
||||
-- but best not to meddle in other mods' internals if it can be helped.
|
||||
local clean_up_local_loot = function()
|
||||
if local_loot == nil then return end
|
||||
for i = #local_loot, 1, -1 do
|
||||
if not minetest.registered_items[local_loot[i].name] then
|
||||
table.remove(local_loot, i)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Uses same table format as dungeon_loot
|
||||
-- eg, {name = "bucket:bucket_water", chance = 0.45, types = {"sandstone", "desert"}},
|
||||
-- if dungeon_loot is installed it uses dungeon_loot's registration function directly.
|
||||
if dungeon_loot_path then
|
||||
bones_loot.register_loot = dungeon_loot.register
|
||||
else
|
||||
bones_loot.register_loot = local_loot_register
|
||||
minetest.after(0, clean_up_local_loot)
|
||||
end
|
||||
|
||||
local get_loot_list = function(pos, loot_type, exclusive_loot_type)
|
||||
local loot_table
|
||||
if dungeon_loot_path then
|
||||
loot_table = dungeon_loot.registered_loot
|
||||
else
|
||||
loot_table = local_loot
|
||||
end
|
||||
|
||||
local item_list = {}
|
||||
local pos_y = pos.y
|
||||
for _, loot in ipairs(loot_table) do
|
||||
if loot.y == nil or (pos_y >= loot.y[1] and pos_y <= loot.y[2]) then
|
||||
if (not exclusive_loot_type and loot.types == nil) or
|
||||
(loot.types and table.indexof(loot.types, loot_type) ~= -1) then
|
||||
table.insert(item_list, loot)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return item_list
|
||||
end
|
||||
|
||||
local shuffle = function(tbl)
|
||||
for i = #tbl, 2, -1 do
|
||||
local rand = math.random(i)
|
||||
tbl[i], tbl[rand] = tbl[rand], tbl[i]
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
-- "exclusive" set to true means that loot table entries without a loot_type won't be considered.
|
||||
bones_loot.get_loot = function(pos, loot_type, max_stacks, exclusive_loot_type)
|
||||
local item_list = get_loot_list(pos, loot_type, exclusive_loot_type)
|
||||
shuffle(item_list)
|
||||
|
||||
-- apply chances / randomized amounts and collect resulting items
|
||||
local items = {}
|
||||
for _, loot in ipairs(item_list) do
|
||||
if math.random() <= loot.chance then
|
||||
local itemdef = minetest.registered_items[loot.name]
|
||||
if itemdef then
|
||||
local amount = 1
|
||||
if loot.count ~= nil then
|
||||
amount = math.random(loot.count[1], loot.count[2])
|
||||
end
|
||||
|
||||
if itemdef.tool_capabilities then
|
||||
for n = 1, amount do
|
||||
local wear = math.random(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear
|
||||
table.insert(items, ItemStack({name = loot.name, wear = wear}))
|
||||
max_stacks = max_stacks - 1
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
else
|
||||
local stack_max = itemdef.stack_max
|
||||
while amount > 0 do
|
||||
table.insert(items, ItemStack({name = loot.name, count = math.min(stack_max, amount)}))
|
||||
amount = amount - stack_max
|
||||
max_stacks = max_stacks - 1
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
return items
|
||||
end
|
||||
|
||||
bones_loot.place_bones = function(pos, loot_type, max_stacks, infotext, exclusive_loot_type)
|
||||
minetest.set_node(pos, {name="bones:bones", param2 = math.random(1,4)-1})
|
||||
local meta = minetest.get_meta(pos)
|
||||
if infotext == nil then
|
||||
infotext = S("Someone's old bones")
|
||||
end
|
||||
meta:set_string("infotext", infotext)
|
||||
|
||||
if max_stacks and max_stacks > 0 then
|
||||
local loot = bones_loot.get_loot(pos, loot_type, max_stacks, exclusive_loot_type)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8 * 4)
|
||||
for _, item in ipairs(loot) do
|
||||
inv:add_item("main", item)
|
||||
end
|
||||
end
|
||||
end
|
45
bones_loot/intllib.lua
Normal file
45
bones_loot/intllib.lua
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
-- Fallback functions for when `intllib` is not installed.
|
||||
-- Code released under Unlicense <http://unlicense.org>.
|
||||
|
||||
-- Get the latest version of this file at:
|
||||
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||
|
||||
local function format(str, ...)
|
||||
local args = { ... }
|
||||
local function repl(escape, open, num, close)
|
||||
if escape == "" then
|
||||
local replacement = tostring(args[tonumber(num)])
|
||||
if open == "" then
|
||||
replacement = replacement..close
|
||||
end
|
||||
return replacement
|
||||
else
|
||||
return "@"..open..num..close
|
||||
end
|
||||
end
|
||||
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||
end
|
||||
|
||||
local gettext, ngettext
|
||||
if minetest.get_modpath("intllib") then
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
gettext, ngettext = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
gettext = intllib.Getter()
|
||||
end
|
||||
end
|
||||
|
||||
-- Fill in missing functions.
|
||||
|
||||
gettext = gettext or function(msgid, ...)
|
||||
return format(msgid, ...)
|
||||
end
|
||||
|
||||
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||
return format(n==1 and msgid or msgid_plural, ...)
|
||||
end
|
||||
|
||||
return gettext, ngettext
|
22
bones_loot/locale/template.pot
Normal file
22
bones_loot/locale/template.pot
Normal file
@ -0,0 +1,22 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-08-07 00:58-0600\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: bones_loot\init.lua:65
|
||||
msgid "Someone's old bones"
|
||||
msgstr ""
|
6
bones_loot/locale/update.bat
Normal file
6
bones_loot/locale/update.bat
Normal file
@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
|
||||
cd ..
|
||||
set LIST=
|
||||
for /r %%X in (*.lua) do set LIST=!LIST! %%X
|
||||
..\..\intllib\tools\xgettext.bat %LIST%
|
4
bones_loot/mod.conf
Normal file
4
bones_loot/mod.conf
Normal file
@ -0,0 +1,4 @@
|
||||
name = bones_loot
|
||||
description = An API that allows bones to be placed procedurally with randomly generated loot
|
||||
depends = bones
|
||||
optional_depends = dungeon_loot, intllib
|
Reference in New Issue
Block a user