Initial commit (version 0.1-test)
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
Minetest Game mod: fire
|
||||
=======================
|
||||
See license.txt for license information.
|
||||
|
||||
Authors of source code
|
||||
----------------------
|
||||
Originally by Perttu Ahola (celeron55) <celeron55@gmail.com> (LGPLv2.1+)
|
||||
Various Minetest developers and contributors (LGPLv2.1+)
|
||||
|
||||
Authors of media (textures and sounds)
|
||||
--------------------------------------
|
||||
Everything not listed in here:
|
||||
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com> (CC BY-SA 3.0)
|
||||
|
||||
Muadtralk (CC BY-SA 3.0)
|
||||
fire_basic_flame_animated.png
|
||||
|
||||
Gambit (CC BY-SA 3.0)
|
||||
fire_flint_steel.png
|
||||
|
||||
dobroide (CC BY 3.0)
|
||||
http://www.freesound.org/people/dobroide/sounds/4211/
|
||||
fire_small.ogg
|
||||
|
||||
Dynamicell (CC BY 3.0)
|
||||
http://www.freesound.org/people/Dynamicell/sounds/17548/
|
||||
fire_large.ogg
|
||||
fire_fire.*.ogg
|
||||
|
||||
fire_small.ogg and fire_large.ogg are unused but kept temporarily to not break
|
||||
other mods that may use them.
|
||||
|
||||
Benboncan (CC BY 3.0)
|
||||
https://www.freesound.org/people/Benboncan/sounds/66457/
|
||||
fire_flint_and_steel.ogg
|
||||
@@ -0,0 +1,286 @@
|
||||
-- fire/init.lua
|
||||
|
||||
-- Global namespace for functions
|
||||
fire = {}
|
||||
|
||||
-- Load support for MT game translation.
|
||||
local S = minetest.get_translator("fire")
|
||||
|
||||
-- 'Enable fire' setting
|
||||
local fire_enabled = minetest.settings:get_bool("enable_fire")
|
||||
if fire_enabled == nil then
|
||||
-- enable_fire setting not specified, check for disable_fire
|
||||
local fire_disabled = minetest.settings:get_bool("disable_fire")
|
||||
if fire_disabled == nil then
|
||||
-- Neither setting specified, check whether singleplayer
|
||||
fire_enabled = minetest.is_singleplayer()
|
||||
else
|
||||
fire_enabled = not fire_disabled
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Items
|
||||
--
|
||||
|
||||
-- Flood flame function
|
||||
local function flood_flame(pos, _, newnode)
|
||||
-- Play flame extinguish sound if liquid is not an 'igniter'
|
||||
if minetest.get_item_group(newnode.name, "igniter") == 0 then
|
||||
minetest.sound_play("fire_extinguish_flame",
|
||||
{pos = pos, max_hear_distance = 16, gain = 0.15}, true)
|
||||
end
|
||||
-- Remove the flame
|
||||
return false
|
||||
end
|
||||
|
||||
-- Flame nodes
|
||||
local fire_node = {
|
||||
drawtype = "firelike",
|
||||
tiles = {{
|
||||
name = "fire_basic_flame_animated.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1
|
||||
}}
|
||||
},
|
||||
inventory_image = "fire_basic_flame.png",
|
||||
paramtype = "light",
|
||||
light_source = 13,
|
||||
walkable = false,
|
||||
buildable_to = true,
|
||||
sunlight_propagates = true,
|
||||
floodable = true,
|
||||
damage_per_second = 4,
|
||||
groups = {igniter = 2, dig_immediate = 3, fire = 1},
|
||||
drop = "",
|
||||
on_flood = flood_flame
|
||||
}
|
||||
|
||||
-- Basic flame node
|
||||
local flame_fire_node = table.copy(fire_node)
|
||||
flame_fire_node.description = S("Fire")
|
||||
flame_fire_node.groups.not_in_creative_inventory = 1
|
||||
flame_fire_node.on_timer = function(pos)
|
||||
if not minetest.find_node_near(pos, 1, {"group:flammable"}) then
|
||||
minetest.remove_node(pos)
|
||||
return
|
||||
end
|
||||
-- Restart timer
|
||||
return true
|
||||
end
|
||||
flame_fire_node.on_construct = function(pos)
|
||||
minetest.get_node_timer(pos):start(math.random(30, 60))
|
||||
end
|
||||
|
||||
minetest.register_node("fire:basic_flame", flame_fire_node)
|
||||
|
||||
-- Permanent flame node
|
||||
local permanent_fire_node = table.copy(fire_node)
|
||||
permanent_fire_node.description = S("Permanent Fire")
|
||||
|
||||
minetest.register_node("fire:permanent_flame", permanent_fire_node)
|
||||
|
||||
-- Flint and Steel
|
||||
minetest.register_tool("fire:flint_and_steel", {
|
||||
description = S("Flint and Steel"),
|
||||
inventory_image = "fire_flint_steel.png",
|
||||
--sound = {breaks = "default_tool_breaks"},
|
||||
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
local sound_pos = pointed_thing.above or user:get_pos()
|
||||
minetest.sound_play("fire_flint_and_steel",
|
||||
{pos = sound_pos, gain = 0.2, max_hear_distance = 8}, true)
|
||||
local player_name = user:get_player_name()
|
||||
if pointed_thing.type == "node" then
|
||||
local node_under = minetest.get_node(pointed_thing.under).name
|
||||
local nodedef = minetest.registered_nodes[node_under]
|
||||
if not nodedef then
|
||||
return
|
||||
end
|
||||
if minetest.is_protected(pointed_thing.under, player_name) then
|
||||
minetest.chat_send_player(player_name, "This area is protected")
|
||||
return
|
||||
end
|
||||
if nodedef.on_ignite then
|
||||
nodedef.on_ignite(pointed_thing.under, user)
|
||||
elseif minetest.get_item_group(node_under, "flammable") >= 1
|
||||
and minetest.get_node(pointed_thing.above).name == "air" then
|
||||
minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"})
|
||||
end
|
||||
end
|
||||
if not minetest.is_creative_enabled(player_name) then
|
||||
-- Wear tool
|
||||
local wdef = itemstack:get_definition()
|
||||
itemstack:add_wear_by_uses(66)
|
||||
|
||||
-- Tool break sound
|
||||
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
|
||||
minetest.sound_play(wdef.sound.breaks,
|
||||
{pos = sound_pos, gain = 0.5}, true)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Sound
|
||||
--
|
||||
|
||||
-- Enable if no setting present
|
||||
local flame_sound = minetest.settings:get_bool("flame_sound", true)
|
||||
|
||||
if flame_sound then
|
||||
local handles = {}
|
||||
local timer = 0
|
||||
|
||||
-- Parameters
|
||||
local radius = 8 -- Flame node search radius around player
|
||||
local cycle = 3 -- Cycle time for sound updates
|
||||
|
||||
-- Update sound for player
|
||||
function fire.update_player_sound(player)
|
||||
local player_name = player:get_player_name()
|
||||
-- Search for flame nodes in radius around player
|
||||
local ppos = player:get_pos()
|
||||
local areamin = vector.subtract(ppos, radius)
|
||||
local areamax = vector.add(ppos, radius)
|
||||
local fpos, num = minetest.find_nodes_in_area(
|
||||
areamin,
|
||||
areamax,
|
||||
{"fire:basic_flame", "fire:permanent_flame"}
|
||||
)
|
||||
-- Total number of flames in radius
|
||||
local flames = (num["fire:basic_flame"] or 0) +
|
||||
(num["fire:permanent_flame"] or 0)
|
||||
-- Stop previous sound
|
||||
if handles[player_name] then
|
||||
minetest.sound_stop(handles[player_name])
|
||||
handles[player_name] = nil
|
||||
end
|
||||
-- If flames
|
||||
if flames > 0 then
|
||||
-- Find centre of flame positions
|
||||
local fposmid = fpos[1]
|
||||
-- If more than 1 flame
|
||||
if #fpos > 1 then
|
||||
local fposmin = areamax
|
||||
local fposmax = areamin
|
||||
for i = 1, #fpos do
|
||||
local fposi = fpos[i]
|
||||
if fposi.x > fposmax.x then
|
||||
fposmax.x = fposi.x
|
||||
end
|
||||
if fposi.y > fposmax.y then
|
||||
fposmax.y = fposi.y
|
||||
end
|
||||
if fposi.z > fposmax.z then
|
||||
fposmax.z = fposi.z
|
||||
end
|
||||
if fposi.x < fposmin.x then
|
||||
fposmin.x = fposi.x
|
||||
end
|
||||
if fposi.y < fposmin.y then
|
||||
fposmin.y = fposi.y
|
||||
end
|
||||
if fposi.z < fposmin.z then
|
||||
fposmin.z = fposi.z
|
||||
end
|
||||
end
|
||||
fposmid = vector.divide(vector.add(fposmin, fposmax), 2)
|
||||
end
|
||||
-- Play sound
|
||||
local handle = minetest.sound_play("fire_fire", {
|
||||
pos = fposmid,
|
||||
to_player = player_name,
|
||||
gain = math.min(0.06 * (1 + flames * 0.125), 0.18),
|
||||
max_hear_distance = 32,
|
||||
loop = true -- In case of lag
|
||||
})
|
||||
-- Store sound handle for this player
|
||||
if handle then
|
||||
handles[player_name] = handle
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Cycle for updating players sounds
|
||||
minetest.register_globalstep(function(dtime)
|
||||
timer = timer + dtime
|
||||
if timer < cycle then
|
||||
return
|
||||
end
|
||||
|
||||
timer = 0
|
||||
local players = minetest.get_connected_players()
|
||||
for n = 1, #players do
|
||||
fire.update_player_sound(players[n])
|
||||
end
|
||||
end)
|
||||
|
||||
-- Stop sound and clear handle on player leave
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if handles[player_name] then
|
||||
minetest.sound_stop(handles[player_name])
|
||||
handles[player_name] = nil
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it
|
||||
function fire.update_sounds_around() end
|
||||
|
||||
--
|
||||
-- ABMs
|
||||
--
|
||||
|
||||
if fire_enabled then
|
||||
-- Ignite neighboring nodes, add basic flames
|
||||
minetest.register_abm({
|
||||
label = "Ignite flame",
|
||||
nodenames = {"group:flammable"},
|
||||
neighbors = {"group:igniter"},
|
||||
interval = 7,
|
||||
chance = 12,
|
||||
catch_up = false,
|
||||
action = function(pos)
|
||||
local p = minetest.find_node_near(pos, 1, {"air"})
|
||||
if p then
|
||||
minetest.set_node(p, {name = "fire:basic_flame"})
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- Remove flammable nodes around basic flame
|
||||
minetest.register_abm({
|
||||
label = "Remove flammable nodes",
|
||||
nodenames = {"fire:basic_flame"},
|
||||
neighbors = "group:flammable",
|
||||
interval = 5,
|
||||
chance = 18,
|
||||
catch_up = false,
|
||||
action = function(pos)
|
||||
local p = minetest.find_node_near(pos, 1, {"group:flammable"})
|
||||
if not p then
|
||||
return
|
||||
end
|
||||
local flammable_node = minetest.get_node(p)
|
||||
local def = minetest.registered_nodes[flammable_node.name]
|
||||
if def.on_burn then
|
||||
def.on_burn(p)
|
||||
else
|
||||
minetest.remove_node(p)
|
||||
minetest.check_for_falling(p)
|
||||
end
|
||||
end
|
||||
})
|
||||
end
|
||||
@@ -0,0 +1,84 @@
|
||||
License of source code
|
||||
----------------------
|
||||
|
||||
GNU Lesser General Public License, version 2.1
|
||||
Copyright (C) 2012-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2012-2016 Various Minetest developers and contributors
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under the terms
|
||||
of the GNU Lesser General Public License as published by the Free Software Foundation;
|
||||
either version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU Lesser General Public License for more details:
|
||||
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
|
||||
|
||||
|
||||
Licenses of media (textures and sounds)
|
||||
---------------------------------------
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
Copyright (C) 2012-2016 Perttu Ahola (celeron55) <celeron55@gmail.com>
|
||||
Copyright (C) 2012-2016 Muadtralk
|
||||
Copyright (C) 2013-2016 Gambit
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
||||
your contributions under the same license as the original.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
-----------------------
|
||||
|
||||
Attribution 3.0 Unported (CC BY 3.0)
|
||||
Copyright (C) 2005 dobroide
|
||||
Copyright (C) 2006 Dynamicell
|
||||
Copyright (C) 2009 Benboncan
|
||||
|
||||
You are free to:
|
||||
Share — copy and redistribute the material in any medium or format.
|
||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
||||
|
||||
Under the following terms:
|
||||
|
||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
||||
that suggests the licensor endorses you or your use.
|
||||
|
||||
No additional restrictions — You may not apply legal terms or technological measures that
|
||||
legally restrict others from doing anything the license permits.
|
||||
|
||||
Notices:
|
||||
|
||||
You do not have to comply with the license for elements of the material in the public
|
||||
domain or where your use is permitted by an applicable exception or limitation.
|
||||
No warranties are given. The license may not give you all of the permissions necessary
|
||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
||||
rights may limit how you use the material.
|
||||
|
||||
For more details:
|
||||
http://creativecommons.org/licenses/by/3.0/
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Feuer
|
||||
Permanent Fire=Permanentes Feuer
|
||||
Flint and Steel=Feuerstein und Stahl
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Fajro
|
||||
Permanent Fire=Ĉiama Fajro
|
||||
Flint and Steel=Siliko kaj Ŝtalo
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Fuego
|
||||
Permanent Fire=Fuego permanente
|
||||
Flint and Steel=Yesca y pedernal
|
||||
@@ -0,0 +1,10 @@
|
||||
# textdomain: fire
|
||||
Fire=Feu
|
||||
Permanent Fire=Feu qui brûle en permanence
|
||||
Flint and Steel=Briquet à silex en acier
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
# textdomain: fire
|
||||
Permanent Flame=Flamme permanente
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Api
|
||||
Permanent Fire=Api Abadi
|
||||
Flint and Steel=Pemantik Api
|
||||
@@ -0,0 +1,10 @@
|
||||
# textdomain: fire
|
||||
Fire=
|
||||
Permanent Fire=
|
||||
Flint and Steel=Acciarino
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
# textdomain: fire
|
||||
Permanent Flame=Fiamma permanente
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=炎
|
||||
Permanent Fire=燃え続ける炎
|
||||
Flint and Steel=火打ち石と打ち金
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=lo fagri
|
||||
Permanent Fire=lo vitno fagri
|
||||
Flint and Steel=lo fakro'i jo'u gasta
|
||||
@@ -0,0 +1,10 @@
|
||||
# textdomain: fire
|
||||
Fire=
|
||||
Permanent Fire=
|
||||
Flint and Steel=Pemetik Api
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
# textdomain: fire
|
||||
Permanent Flame=Api Abadi
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Ogień
|
||||
Permanent Fire=Stały ogień
|
||||
Flint and Steel=Zapalniczka
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Fogo
|
||||
Permanent Fire=Fogo Permanente
|
||||
Flint and Steel=Sílex e Fogo
|
||||
@@ -0,0 +1,10 @@
|
||||
# textdomain: fire
|
||||
Fire=Огонь
|
||||
Permanent Fire=Вечный Огонь
|
||||
Flint and Steel=Огниво
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
# textdomain: fire
|
||||
Permanent Flame=Вечный Огонь
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Oheň
|
||||
Permanent Fire=Stály oheň
|
||||
Flint and Steel=Pazúrik a ocieľka
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Eld
|
||||
Permanent Fire=Permanent eld
|
||||
Flint and Steel=Flinta och stål
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=Вогонь
|
||||
Permanent Fire=Вічний Вогонь
|
||||
Flint and Steel=Кремінь і Сталь
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=火焰
|
||||
Permanent Fire=永久火焰
|
||||
Flint and Steel=火石和划片
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=火焰
|
||||
Permanent Fire=永久火焰
|
||||
Flint and Steel=火石和鋼
|
||||
@@ -0,0 +1,4 @@
|
||||
# textdomain: fire
|
||||
Fire=
|
||||
Permanent Fire=
|
||||
Flint and Steel=
|
||||
@@ -0,0 +1,2 @@
|
||||
name = fire
|
||||
description = Fire mod, modified for Adsurv
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 594 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 205 B |
Reference in New Issue
Block a user