split mine gas out into a separate mod

This commit is contained in:
FaceDeer
2019-06-29 19:54:57 -06:00
parent a474ef31b4
commit 211afcc8c3
17 changed files with 162 additions and 64 deletions

24
mine_gas/LICENSE.txt Normal file
View File

@ -0,0 +1,24 @@
Sounds and textures are under various licenses, see the license.txt file in the /sounds and /textures directories for details.
License for Code
----------------
Copyright (C) 2018 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
mine_gas/depends.txt Normal file
View File

@ -0,0 +1,3 @@
default
tnt?
doc?

186
mine_gas/init.lua Normal file
View File

@ -0,0 +1,186 @@
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local gas_desc
local gas_usage
local seep_desc
local seep_usage
if minetest.get_modpath("doc") then
gas_desc = S("Gaseous hydrocarbons formed from the detritus of long dead plants and animals processed by heat and pressure deep within the earth.")
gas_usage = S("Gas is highly hazardous. Heavier than air, it pools in deep caverns and asphyxiates the unwary.")
if minetest.get_modpath("tnt") then
gas_usage = gas_usage .. " " .. S("When exposed to air and an ignition source it can produce a deadly explosion.")
end
seep_desc = S("Some coal deposits have cracks that seep a steady flow of mine gas.")
seep_usage = S("Mining out such a deposit seals the crack.")
end
minetest.register_alias("oil:gas", "mine_gas:gas")
minetest.register_alias("oil:gas_seep", "mine_gas:gas_seep")
minetest.register_node("mine_gas:gas", {
description = S("Mine Gas"),
_doc_items_longdesc = gas_desc,
_doc_items_usagehelp = gas_usage,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drawtype = "glasslike",
drowning = 1,
post_effect_color = {a = 20, r = 20, g = 20, b = 250},
tiles = {"mine_gas.png^[opacity:28"},
use_texture_alpha = true,
groups = {not_in_creative_inventory=1, ropes_can_extend_into=1},
paramtype = "light",
drop = {},
sunlight_propagates = true,
--on_blast = function() end, -- unaffected by explosions
})
minetest.register_node("mine_gas:gas_seep", {
description = S("Gas Seep"),
_doc_items_longdesc = seep_desc,
_doc_items_usagehelp = seep_usage,
tiles = {"default_stone.png^default_mineral_coal.png^[combine:16x80:0,-16=crack_anylength.png"},
groups = {cracky = 3},
drop = 'default:coal_lump',
sounds = default.node_sound_stone_defaults(),
is_ground_content = true,
})
minetest.register_on_dignode(function(pos, oldnode, digger)
if minetest.get_item_group(oldnode.name, "digtron") > 0 then
-- skip digtron moved nodes
return;
end
local np = minetest.find_node_near(pos, 1,{"mine_gas:gas"})
if np ~= nil then
minetest.set_node(pos, {name = "mine_gas:gas"})
return
end
end)
local directions = {
{x=1, y=0, z=0},
{x=-1, y=0, z=0},
{x=0, y=0, z=1},
{x=0, y=0, z=-1},
}
local gas_node = {name="mine_gas:gas"}
minetest.register_abm({
label = "mine_gas:gas movement",
nodenames = {"mine_gas:gas"},
neighbors = {"group:liquid", "air"},
interval = 1.0,
chance = 1,
catch_up = true,
action = function(pos, node)
local next_pos = {x=pos.x, y=pos.y+1, z=pos.z}
local next_node = minetest.get_node(next_pos)
if minetest.get_item_group(next_node.name, "liquid") > 0 then
minetest.swap_node(next_pos, gas_node)
minetest.swap_node(pos, next_node)
else
next_pos.y = pos.y-1
next_node = minetest.get_node(next_pos)
if next_node.name == "air" then
minetest.swap_node(next_pos, gas_node)
minetest.swap_node(pos, next_node)
else
local dir = directions[math.random(1,4)]
local next_pos = vector.add(pos, dir)
local next_node = minetest.get_node(next_pos)
if next_node.name == "air" or minetest.get_item_group(next_node.name, "liquid") > 0 then
if next_node.name == "air" or math.random() < 0.5 then -- gas never "climbs" above air.
minetest.swap_node(next_pos, gas_node)
minetest.swap_node(pos, next_node)
else
-- this can get gas to rise up out of the surface of liquid, preventing it from forming a permanent hole.
next_pos.y = next_pos.y + 1
next_node = minetest.get_node(next_pos)
if next_node.name == "air" then
minetest.swap_node(next_pos, gas_node)
minetest.swap_node(pos, next_node)
end
end
end
end
end
end,
})
minetest.register_abm({
label = "mine_gas:gas snuffing torches",
nodenames = {"group:torch"},
neighbors = {"mine_gas:gas"},
interval = 1.0,
chance = 1,
catch_up = true,
action = function(pos, node)
if not minetest.find_node_near(pos, 1, "air") then
local torch_node = minetest.get_node(pos)
local drops = minetest.get_node_drops(torch_node.name, "")
for _, dropped_item in pairs(drops) do
minetest.add_item(pos, dropped_item)
end
minetest.set_node(pos, {name="mine_gas:gas"})
minetest.sound_play(
"default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.1}
)
end
end,
})
if minetest.get_modpath("tnt") then
minetest.register_abm({
label = "mine_gas:gas ignition",
nodenames = {"group:torch", "group:igniter"},
neighbors = {"mine_gas:gas"},
interval = 1.0,
chance = 1,
catch_up = true,
action = function(pos, node)
if minetest.find_node_near(pos, 1, "air") then
tnt.boom(pos, {radius=1, damage_radius=6})
end
end,
})
end
local orthogonal = {
{x=0,y=0,z=1},
{x=0,y=1,z=0},
{x=1,y=0,z=0},
{x=0,y=0,z=-1},
{x=0,y=-1,z=0},
{x=-1,y=0,z=0},
}
minetest.register_abm({
label = "mine_gas:gas seep",
nodenames = {"mine_gas:gas_seep"},
neighbors = {"air"},
interval = 1.0,
chance = 1,
catch_up = true,
action = function(pos, node)
local target_pos = vector.add(pos,orthogonal[math.random(1,6)])
if minetest.get_node(target_pos).name == "air" then
minetest.swap_node(target_pos, {name="mine_gas:gas"})
if math.random() < 0.5 then
minetest.sound_play(
"mine_gas_seep_hiss",
{pos = pos, max_hear_distance = 8, gain = 0.05}
)
end
end
end,
})

45
mine_gas/intllib.lua Normal file
View 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

View File

@ -0,0 +1,51 @@
# 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-03-26 00:49-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"
#: dfcaverns\mine_gas\init.lua:11
msgid ""
"Gaseous hydrocarbons formed from the detritus of long dead plants and "
"animals processed by heat and pressure deep within the earth."
msgstr ""
#: dfcaverns\mine_gas\init.lua:12
msgid ""
"Gas is highly hazardous. Heavier than air, it pools in deep caverns and "
"asphyxiates the unwary."
msgstr ""
#: dfcaverns\mine_gas\init.lua:14
msgid ""
"When exposed to air and an ignition source it can produce a deadly explosion."
msgstr ""
#: dfcaverns\mine_gas\init.lua:17
msgid "Some coal deposits have cracks that seep a steady flow of mine gas."
msgstr ""
#: dfcaverns\mine_gas\init.lua:18
msgid "Mining out such a deposit seals the crack."
msgstr ""
#: dfcaverns\mine_gas\init.lua:26
msgid "Mine Gas"
msgstr ""
#: dfcaverns\mine_gas\init.lua:46
msgid "Gas Seep"
msgstr ""

View 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%

1
mine_gas/mod.conf Normal file
View File

@ -0,0 +1 @@
name = mine_gas

View File

@ -0,0 +1,2 @@
mine_gas_seep_hiss.1 is from https://freesound.org/people/wubitog/sounds/234782/ under the public domain (CC0)
mine_gas_seep_hiss.2 is from https://freesound.org/people/kgatto/sounds/240263/ by kgatto under the CC-BY-3.0 license

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
All textures not specifically listed here are created by FaceDeer and released under both the MIT license and under the Creative Commons CC0 license.

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B