commit d3e8f7134aacacca5c5980ff108f576f7b1f4bd0 Author: BlockMen Date: Fri Jun 28 22:58:06 2013 +0200 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..fcfd25f --- /dev/null +++ b/README.txt @@ -0,0 +1,37 @@ +Minetest mod "Better HUD" +========================= +version: 0.1 Beta + +License of source code: WTFPL +----------------------------- +- "Disable Drowning" [no_drowning], PilzAdam + +everything else: +(c) Copyright BlockMen (2013) + + +License of textures: +-------------------- +hud_heart_fg.png - celeron55 (CC BY-SA 3.0), modified by BlockMen +hud_heart_bg.png - celeron55 (CC BY-SA 3.0), modified by BlockMen +hud_hunger_fg.png - PilzAdam(WTFPL), modified by BlockMen +hud_hunger_bg.png - PilzAdam(WTFPL), modified by BlockMen +wieldhand.png (from character.png) - Jordach (CC BY-SA 3.0), modified by BlockMen + +everything else is WTFPL: +(c) Copyright BlockMen (2013) + +This program is free software. It comes without any warranty, to +the extent permitted by applicable law. You can redistribute it +and/or modify it under the terms of the Do What The Fuck You Want +To Public License, Version 2, as published by Sam Hocevar. See +http://sam.zoy.org/wtfpl/COPYING for more details. + + +Using the mod: +-------------- + +This mod changes the HUD of Minetest. It adds a costum crosshair, a improved health bar. +Also it adds hunger to the game and and hunger bar to the HUD. + +Furthermore it disables the current way of drowning (credits go to PilzAdam) and it will have an LUA-based drowing next versions. diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/hunger.lua b/hunger.lua new file mode 100644 index 0000000..9e0f7ff --- /dev/null +++ b/hunger.lua @@ -0,0 +1,34 @@ +function hud.item_eat(hunger_change, replace_with_item) + return function(itemstack, user, pointed_thing) + if itemstack:take_item() ~= nil then + local h = tonumber(hud.hunger[user:get_player_name()]) + h=h+hunger_change + if h>20 then h=20 end + hud.hunger[user:get_player_name()]=h + itemstack:add_item(replace_with_item) -- note: replace_with_item is optional + --sound:eat + end + return itemstack + end +end + +local function overwrite(name, hunger_change, as_node) + local tab = minetest.registered_items[name] + if tab == nil then return end + local tab2 = {} + for i,v in pairs(tab) do + tab2[i] = v + end + tab2.on_use = hud.item_eat(hunger_change) + + if as_node then + minetest.register_node(":"..name, tab2) + else + minetest.register_craftitem(":"..name, tab2) + end +end + +overwrite("default:apple", 2, true) +if minetest.get_modpath("farming") ~= nil then + overwrite("farming:bread", 6, false) +end diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..d4a7506 --- /dev/null +++ b/init.lua @@ -0,0 +1,155 @@ +hud = {} + +local health_hud = {} +hud.hunger = {} +local hunger_hud = {} +hud.air = {} +local air_hud = {} + +local SAVE_INTERVAL = 0.5*60--currently useless + +local ENABLE_HUNGER = minetest.setting_getbool("enable_damage") -- set to false if no hunger wanted +local NO_HUNGER_TIME = 300 --=5min (so 1h playing == hunger) + +--minetest.after(SAVE_INTERVAL, timer, SAVE_INTERVAL) + +local function hide_builtin(player) + player:hud_set_flags({crosshair = false, hotbar = true, healthbar = false, wielditem = true, breathbar = false}) +end + +local function costum_hud(player) +--crosshair + player:hud_add({ + hud_elem_type = "image", + text = "hud_cross.png", + position = {x=0.5, y=0.5}, + scale = {x=1, y=1}, + }) +if minetest.setting_getbool("enable_damage") then +--hunger + player:hud_add({ + hud_elem_type = "statbar", + position = {x=0.5,y=1}, + scale = {x=1, y=1}, + text = "hud_hunger_bg.png", + number = 20, + alignment = {x=-1,y=-1}, + offset = {x=15,y=-60}, + }) + + hunger_hud[player:get_player_name()] = player:hud_add({ + hud_elem_type = "statbar", + position = {x=0.5,y=1}, + scale = {x=1, y=1}, + text = "hud_hunger_fg.png", + number = 20, + alignment = {x=-1,y=-1}, + offset = {x=15,y=-60}, + }) +--health + player:hud_add({ + hud_elem_type = "statbar", + position = {x=0.5,y=1}, + scale = {x=1, y=1}, + text = "hud_heart_bg.png", + number = 20, + alignment = {x=-1,y=-1}, + offset = {x=-175,y=-60}, + }) + + health_hud[player:get_player_name()] = player:hud_add({ + hud_elem_type = "statbar", + position = {x=0.5,y=1}, + scale = {x=1, y=1}, + text = "hud_heart_fg.png", + number = player:get_hp(), + alignment = {x=-1,y=-1}, + offset = {x=-175,y=-60}, + }) +end + +end + + +local function update_hud(player) +--health + player:hud_change(health_hud[player:get_player_name()], "number", player:get_hp()) +--hunger + player:hud_change(hunger_hud[player:get_player_name()], "number", hud.hunger[player:get_player_name()]) +end + + +local function save_hunger(player) + local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "w+") + if file then + file:write(hud.hunger[player:get_player_name()]) + file:close() + end +end + +local function timer(interval, player) + if interval > 0 then + save_hunger(player) + minetest.after(interval, timer, interval, player) + end +end + +local function load_hunger(player) + local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "r") + if file then + hud.hunger[player:get_player_name()] = file:read("*all") + file:close() + return hud.hunger[player:get_player_name()] + else + return + end + +end + + +minetest.register_on_joinplayer(function(player) + hud.hunger[player:get_player_name()] = load_hunger(player) + if hud.hunger[player:get_player_name()] == nil then + hud.hunger[player:get_player_name()] = 20 + end + minetest.after(0.5, function() + save_hunger(player) + hide_builtin(player) + costum_hud(player) + end) +end) + +local timer = 0 +local timer2 = 0 +minetest.after(2.5, function() +if minetest.setting_getbool("enable_damage") then + minetest.register_globalstep(function(dtime) + timer = timer + dtime + timer2 = timer2 + dtime + for _,player in ipairs(minetest.get_connected_players()) do + local h = tonumber(hud.hunger[player:get_player_name()]) + if ENABLE_HUNGER and timer > 4 then + if h>=18 then + player:set_hp(player:get_hp()+1) + elseif h==1 and minetest.setting_getbool("enable_damage") then + if player:get_hp()-1 >= 1 then player:set_hp(player:get_hp()-1) end + end + end + if ENABLE_HUNGER and timer2>NO_HUNGER_TIME then + --local h = tonumber(hunger[player:get_player_name()]) + if h>1 then + h=h-1 + hud.hunger[player:get_player_name()]=h + save_hunger(player) + end + end + update_hud(player) + end + if timer>4 then timer=0 end + if timer2>NO_HUNGER_TIME then timer2=0 end + end) +end +end) + +if ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end +dofile(minetest.get_modpath("hud").."/no_drowning.lua") diff --git a/no_drowning.lua b/no_drowning.lua new file mode 100644 index 0000000..f7b3149 --- /dev/null +++ b/no_drowning.lua @@ -0,0 +1,15 @@ +local function drwn_overwrite(name) + local table = minetest.registered_nodes[name] + local table2 = {} + for i,v in pairs(table) do + table2[i] = v + end + table2.drowning = false + table2.hud_drowning = true + minetest.register_node(":"..name, table2) +end + +drwn_overwrite("default:water_source") +drwn_overwrite("default:water_flowing") +drwn_overwrite("default:lava_source") +drwn_overwrite("default:lava_flowing") diff --git a/textures/hud_cross.png b/textures/hud_cross.png new file mode 100644 index 0000000..5822e71 Binary files /dev/null and b/textures/hud_cross.png differ diff --git a/textures/hud_heart_bg.png b/textures/hud_heart_bg.png new file mode 100644 index 0000000..e2be276 Binary files /dev/null and b/textures/hud_heart_bg.png differ diff --git a/textures/hud_heart_fg.png b/textures/hud_heart_fg.png new file mode 100644 index 0000000..dc213d8 Binary files /dev/null and b/textures/hud_heart_fg.png differ diff --git a/textures/hud_hunger_bg.png b/textures/hud_hunger_bg.png new file mode 100644 index 0000000..07e21e7 Binary files /dev/null and b/textures/hud_hunger_bg.png differ diff --git a/textures/hud_hunger_fg.png b/textures/hud_hunger_fg.png new file mode 100644 index 0000000..a5cc2a1 Binary files /dev/null and b/textures/hud_hunger_fg.png differ diff --git a/textures/hud_inv_border.png b/textures/hud_inv_border.png new file mode 100644 index 0000000..d28af85 Binary files /dev/null and b/textures/hud_inv_border.png differ diff --git a/textures/wieldhand.png b/textures/wieldhand.png new file mode 100644 index 0000000..5f7f490 Binary files /dev/null and b/textures/wieldhand.png differ