Version 0.1.0: direct damage
This commit is contained in:
parent
8b61de5ba1
commit
a46e9bdd49
58
README.md
58
README.md
@ -1,2 +1,58 @@
|
|||||||
# minetest-bewarethedark
|
Beware the dark [bewarethedark]
|
||||||
|
=================
|
||||||
|
|
||||||
A Minetest mod where darkness simply kills you directly
|
A Minetest mod where darkness simply kills you directly
|
||||||
|
|
||||||
|
Version: 0.1.0
|
||||||
|
|
||||||
|
License:
|
||||||
|
Code: LGPL 2.1 (see included LICENSE file)
|
||||||
|
|
||||||
|
Report bugs or request help on the forum topic.
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This is a mod for MineTest. It's only function is to make
|
||||||
|
darkness and light a valid mechanic for the default minetest_game.
|
||||||
|
In other voxel games, darkness is dangerous because it spawns
|
||||||
|
monsters. In MineTest, darkness just makes it more likely for you
|
||||||
|
to walk into a tree.
|
||||||
|
|
||||||
|
This mod changes that in a very direct fashion: you are damaged
|
||||||
|
by darkness, the darker the damager. So craft those torches!
|
||||||
|
|
||||||
|
Current behavior
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If you stand in a node with light level 7 or less, you slowly
|
||||||
|
get damaged. The darker it is, the more damage you get per second.
|
||||||
|
|
||||||
|
Future plans
|
||||||
|
------------
|
||||||
|
|
||||||
|
**Darkness meter**: similar to the standard air bar and drowning, add
|
||||||
|
a meter for light, or sanity, or something loreful. You only start
|
||||||
|
taking damage when the meter is depleted.
|
||||||
|
|
||||||
|
**Sunburn**: Suddenly, too much light can kill you too! Will need
|
||||||
|
a separate meter.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
None at the moment.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Unzip the archive, rename the folder to to `bewarethedark` and
|
||||||
|
place it in minetest/mods/
|
||||||
|
|
||||||
|
( Linux: If you have a linux system-wide installation place
|
||||||
|
it in ~/.minetest/mods/. )
|
||||||
|
|
||||||
|
( If you only want this to be used in a single world, place
|
||||||
|
the folder in worldmods/ in your worlddirectory. )
|
||||||
|
|
||||||
|
For further information or help see:
|
||||||
|
http://wiki.minetest.com/wiki/Installing_Mods
|
||||||
|
106
init.lua
Normal file
106
init.lua
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
Beware the Dark [bewarethedark]
|
||||||
|
==========================
|
||||||
|
|
||||||
|
A mod where darkness simply kills you outright.
|
||||||
|
|
||||||
|
Copyright (C) 2015 Ben Deutsch <ben@bendeutsch.de>
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
This library 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 library 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.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||||
|
USA
|
||||||
|
|
||||||
|
]]
|
||||||
|
|
||||||
|
|
||||||
|
bewarethedark = {
|
||||||
|
|
||||||
|
-- configuration
|
||||||
|
config = {
|
||||||
|
tick_time = 0.5,
|
||||||
|
damage_for_light = {
|
||||||
|
[15] = 0,
|
||||||
|
[14] = 0,
|
||||||
|
[13] = 0,
|
||||||
|
[12] = 0,
|
||||||
|
[11] = 0,
|
||||||
|
[10] = 0,
|
||||||
|
[ 9] = 0,
|
||||||
|
[ 8] = 0,
|
||||||
|
[ 7] = 0.1,
|
||||||
|
[ 6] = 0.25,
|
||||||
|
[ 5] = 0.5,
|
||||||
|
[ 4] = 1.0,
|
||||||
|
[ 3] = 1.5,
|
||||||
|
[ 2] = 2.0,
|
||||||
|
[ 1] = 2.5,
|
||||||
|
[ 0] = 3.0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- per-player-stash (not persistent)
|
||||||
|
players = {
|
||||||
|
--[[
|
||||||
|
name = {
|
||||||
|
pending_dmg = 0.0,
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
},
|
||||||
|
|
||||||
|
-- global things
|
||||||
|
time_next_tick = 0.0,
|
||||||
|
}
|
||||||
|
local M = bewarethedark
|
||||||
|
local C = bewarethedark.config
|
||||||
|
|
||||||
|
minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
|
M.time_next_tick = M.time_next_tick - dtime
|
||||||
|
while M.time_next_tick < 0.0 do
|
||||||
|
M.time_next_tick = M.time_next_tick + C.tick_time
|
||||||
|
for _,player in ipairs(minetest.get_connected_players()) do
|
||||||
|
local name = player:get_player_name()
|
||||||
|
local pl = M.players[name]
|
||||||
|
if not pl then
|
||||||
|
M.players[name] = { pending_dmg = 0.0 }
|
||||||
|
pl = M.players[name]
|
||||||
|
end
|
||||||
|
local pos = player:getpos()
|
||||||
|
local pos_y = pos.y
|
||||||
|
-- the middle of the block with the player's head
|
||||||
|
pos.y = math.floor(pos_y) + 1.5
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
|
||||||
|
local light_now = minetest.get_node_light(pos) or 0
|
||||||
|
|
||||||
|
local dps = C.damage_for_light[light_now]
|
||||||
|
|
||||||
|
pl.pending_dmg = pl.pending_dmg + (dps * C.tick_time)
|
||||||
|
--print("Standing in " .. node.name .. " at light " .. light_now .. " taking " .. dps .. " to " .. pl.pending_dmg);
|
||||||
|
|
||||||
|
if minetest.setting_getbool("enable_damage") then
|
||||||
|
if pl.pending_dmg > 0.0 then
|
||||||
|
local dmg = math.floor(pl.pending_dmg)
|
||||||
|
--print("Deals "..dmg.." damage!")
|
||||||
|
pl.pending_dmg = pl.pending_dmg - dmg
|
||||||
|
player:set_hp( player:get_hp() - dmg )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
Loading…
x
Reference in New Issue
Block a user