Initial directory structure rework
authorPerttu Ahola <celeron55@gmail.com>
Sat, 10 Mar 2012 13:56:24 +0000 (15:56 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 10 Mar 2012 15:10:10 +0000 (17:10 +0200)
258 files changed:
data/builtin.lua [deleted file]
data/clienttextures/fontlucida.png [deleted file]
data/clienttextures/menubg.png [deleted file]
data/clienttextures/menulogo.png [deleted file]
data/clienttextures/smoke_puff.png [deleted file]
data/clienttextures/unknown_block.png [deleted file]
data/clienttextures/unknown_item.png [deleted file]
data/clienttextures/unknown_object.png [deleted file]
data/mods/bucket/depends.txt [deleted file]
data/mods/bucket/init.lua [deleted file]
data/mods/bucket/textures/bucket.png [deleted file]
data/mods/bucket/textures/bucket_lava.png [deleted file]
data/mods/bucket/textures/bucket_water.png [deleted file]
data/mods/default/init.lua [deleted file]
data/mods/default/textures/crack.png [deleted file]
data/mods/default/textures/default_apple.png [deleted file]
data/mods/default/textures/default_book.png [deleted file]
data/mods/default/textures/default_bookshelf.png [deleted file]
data/mods/default/textures/default_brick.png [deleted file]
data/mods/default/textures/default_cactus_side.png [deleted file]
data/mods/default/textures/default_cactus_top.png [deleted file]
data/mods/default/textures/default_chest_front.png [deleted file]
data/mods/default/textures/default_chest_lock.png [deleted file]
data/mods/default/textures/default_chest_side.png [deleted file]
data/mods/default/textures/default_chest_top.png [deleted file]
data/mods/default/textures/default_clay.png [deleted file]
data/mods/default/textures/default_clay_brick.png [deleted file]
data/mods/default/textures/default_clay_lump.png [deleted file]
data/mods/default/textures/default_cloud.png [deleted file]
data/mods/default/textures/default_coal_lump.png [deleted file]
data/mods/default/textures/default_cobble.png [deleted file]
data/mods/default/textures/default_dirt.png [deleted file]
data/mods/default/textures/default_fence.png [deleted file]
data/mods/default/textures/default_furnace_front.png [deleted file]
data/mods/default/textures/default_furnace_side.png [deleted file]
data/mods/default/textures/default_glass.png [deleted file]
data/mods/default/textures/default_grass.png [deleted file]
data/mods/default/textures/default_grass_footsteps.png [deleted file]
data/mods/default/textures/default_grass_side.png [deleted file]
data/mods/default/textures/default_gravel.png [deleted file]
data/mods/default/textures/default_iron_lump.png [deleted file]
data/mods/default/textures/default_junglegrass.png [deleted file]
data/mods/default/textures/default_jungletree.png [deleted file]
data/mods/default/textures/default_jungletree_top.png [deleted file]
data/mods/default/textures/default_ladder.png [deleted file]
data/mods/default/textures/default_lava.png [deleted file]
data/mods/default/textures/default_leaves.png [deleted file]
data/mods/default/textures/default_mese.png [deleted file]
data/mods/default/textures/default_mineral_coal.png [deleted file]
data/mods/default/textures/default_mineral_iron.png [deleted file]
data/mods/default/textures/default_mossycobble.png [deleted file]
data/mods/default/textures/default_nc_back.png [deleted file]
data/mods/default/textures/default_nc_front.png [deleted file]
data/mods/default/textures/default_nc_rb.png [deleted file]
data/mods/default/textures/default_nc_side.png [deleted file]
data/mods/default/textures/default_paper.png [deleted file]
data/mods/default/textures/default_papyrus.png [deleted file]
data/mods/default/textures/default_rail.png [deleted file]
data/mods/default/textures/default_rail_crossing.png [deleted file]
data/mods/default/textures/default_rail_curved.png [deleted file]
data/mods/default/textures/default_rail_t_junction.png [deleted file]
data/mods/default/textures/default_sand.png [deleted file]
data/mods/default/textures/default_sandstone.png [deleted file]
data/mods/default/textures/default_sapling.png [deleted file]
data/mods/default/textures/default_scorched_stuff.png [deleted file]
data/mods/default/textures/default_sign.png [deleted file]
data/mods/default/textures/default_sign_back.png [deleted file]
data/mods/default/textures/default_sign_wall.png [deleted file]
data/mods/default/textures/default_steel_block.png [deleted file]
data/mods/default/textures/default_steel_ingot.png [deleted file]
data/mods/default/textures/default_stick.png [deleted file]
data/mods/default/textures/default_stone.png [deleted file]
data/mods/default/textures/default_tnt_bottom.png [deleted file]
data/mods/default/textures/default_tnt_side.png [deleted file]
data/mods/default/textures/default_tnt_top.png [deleted file]
data/mods/default/textures/default_tool_mesepick.png [deleted file]
data/mods/default/textures/default_tool_steelaxe.png [deleted file]
data/mods/default/textures/default_tool_steelpick.png [deleted file]
data/mods/default/textures/default_tool_steelshovel.png [deleted file]
data/mods/default/textures/default_tool_steelsword.png [deleted file]
data/mods/default/textures/default_tool_stoneaxe.png [deleted file]
data/mods/default/textures/default_tool_stonepick.png [deleted file]
data/mods/default/textures/default_tool_stoneshovel.png [deleted file]
data/mods/default/textures/default_tool_stonesword.png [deleted file]
data/mods/default/textures/default_tool_woodaxe.png [deleted file]
data/mods/default/textures/default_tool_woodpick.png [deleted file]
data/mods/default/textures/default_tool_woodshovel.png [deleted file]
data/mods/default/textures/default_tool_woodsword.png [deleted file]
data/mods/default/textures/default_torch.png [deleted file]
data/mods/default/textures/default_torch_on_ceiling.png [deleted file]
data/mods/default/textures/default_torch_on_floor.png [deleted file]
data/mods/default/textures/default_tree.png [deleted file]
data/mods/default/textures/default_tree_top.png [deleted file]
data/mods/default/textures/default_water.png [deleted file]
data/mods/default/textures/default_wood.png [deleted file]
data/mods/default/textures/heart.png [deleted file]
data/mods/default/textures/player.png [deleted file]
data/mods/default/textures/player_back.png [deleted file]
data/mods/default/textures/skybox1.png [deleted file]
data/mods/default/textures/skybox1_dawn.png [deleted file]
data/mods/default/textures/skybox1_night.png [deleted file]
data/mods/default/textures/skybox2.png [deleted file]
data/mods/default/textures/skybox2_dawn.png [deleted file]
data/mods/default/textures/skybox2_night.png [deleted file]
data/mods/default/textures/skybox3.png [deleted file]
data/mods/default/textures/skybox3_dawn.png [deleted file]
data/mods/default/textures/skybox3_night.png [deleted file]
data/mods/default/textures/treeprop.png [deleted file]
data/mods/default/textures/wieldhand.png [deleted file]
data/mods/experimental/depends.txt [deleted file]
data/mods/experimental/init.lua [deleted file]
data/mods/experimental/textures/experimental_dummyball.png [deleted file]
data/mods/give_initial_stuff/depends.txt [deleted file]
data/mods/give_initial_stuff/init.lua [deleted file]
data/mods/legacy/depends.txt [deleted file]
data/mods/legacy/init.lua [deleted file]
data/mods/legacy/textures/apple_iron.png [deleted file]
data/mods/legacy/textures/cooked_rat.png [deleted file]
data/mods/legacy/textures/dungeon_master.png [deleted file]
data/mods/legacy/textures/fireball.png [deleted file]
data/mods/legacy/textures/firefly.png [deleted file]
data/mods/legacy/textures/oerkki1.png [deleted file]
data/mods/legacy/textures/oerkki1_damaged.png [deleted file]
data/mods/legacy/textures/rat.png [deleted file]
share/client/textures/fontlucida.png [new file with mode: 0644]
share/client/textures/menubg.png [new file with mode: 0644]
share/client/textures/menulogo.png [new file with mode: 0644]
share/client/textures/smoke_puff.png [new file with mode: 0644]
share/client/textures/unknown_block.png [new file with mode: 0644]
share/client/textures/unknown_item.png [new file with mode: 0644]
share/client/textures/unknown_object.png [new file with mode: 0644]
share/server/builtin.lua [new file with mode: 0644]
share/server/games/mesetint/mods/bucket/depends.txt [new file with mode: 0644]
share/server/games/mesetint/mods/bucket/init.lua [new file with mode: 0644]
share/server/games/mesetint/mods/bucket/textures/bucket.png [new file with mode: 0644]
share/server/games/mesetint/mods/bucket/textures/bucket_lava.png [new file with mode: 0644]
share/server/games/mesetint/mods/bucket/textures/bucket_water.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/init.lua [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/crack.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_apple.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_book.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_bookshelf.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_brick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_cactus_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_cactus_top.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_chest_front.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_chest_lock.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_chest_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_chest_top.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_clay.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_clay_brick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_clay_lump.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_cloud.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_coal_lump.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_cobble.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_dirt.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_fence.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_furnace_front.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_furnace_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_glass.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_grass.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_grass_footsteps.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_grass_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_gravel.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_iron_lump.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_junglegrass.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_jungletree.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_jungletree_top.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_ladder.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_lava.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_leaves.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_mese.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_mineral_coal.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_mineral_iron.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_mossycobble.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_nc_back.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_nc_front.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_nc_rb.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_nc_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_paper.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_papyrus.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_rail.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_rail_crossing.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_rail_curved.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_rail_t_junction.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sand.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sandstone.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sapling.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_scorched_stuff.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sign.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sign_back.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_sign_wall.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_steel_block.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_steel_ingot.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_stick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_stone.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tnt_bottom.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tnt_side.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tnt_top.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_mesepick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_steelaxe.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_steelpick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_steelshovel.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_steelsword.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_stoneaxe.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_stonepick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_stoneshovel.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_stonesword.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_woodaxe.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_woodpick.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_woodshovel.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tool_woodsword.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_torch.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_torch_on_ceiling.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_torch_on_floor.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tree.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_tree_top.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_water.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/default_wood.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/heart.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/player.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/player_back.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox1.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox1_dawn.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox1_night.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox2.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox2_dawn.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox2_night.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox3.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox3_dawn.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/skybox3_night.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/treeprop.png [new file with mode: 0644]
share/server/games/mesetint/mods/default/textures/wieldhand.png [new file with mode: 0644]
share/server/games/mesetint/mods/experimental/depends.txt [new file with mode: 0644]
share/server/games/mesetint/mods/experimental/init.lua [new file with mode: 0644]
share/server/games/mesetint/mods/experimental/textures/experimental_dummyball.png [new file with mode: 0644]
share/server/games/mesetint/mods/give_initial_stuff/depends.txt [new file with mode: 0644]
share/server/games/mesetint/mods/give_initial_stuff/init.lua [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/depends.txt [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/init.lua [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/apple_iron.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/cooked_rat.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/dungeon_master.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/fireball.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/firefly.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/oerkki1.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/oerkki1_damaged.png [new file with mode: 0644]
share/server/games/mesetint/mods/legacy/textures/rat.png [new file with mode: 0644]
src/client.cpp
src/game.cpp
src/guiPauseMenu.cpp
src/main.cpp
src/porting.cpp
src/porting.h
src/server.cpp
src/server.h
src/servermain.cpp
src/tile.cpp

diff --git a/data/builtin.lua b/data/builtin.lua
deleted file mode 100644 (file)
index 351cf3b..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
---
--- This file contains built-in stuff in Minetest implemented in Lua.
---
--- It is always loaded and executed after registration of the C API,
--- before loading and running any mods.
---
-
-function basic_dump2(o)
-       if type(o) == "number" then
-               return tostring(o)
-       elseif type(o) == "string" then
-               return string.format("%q", o)
-       elseif type(o) == "boolean" then
-               return tostring(o)
-       elseif type(o) == "function" then
-               return "<function>"
-       elseif type(o) == "userdata" then
-               return "<userdata>"
-       elseif type(o) == "nil" then
-               return "nil"
-       else
-               error("cannot dump a " .. type(o))
-               return nil
-       end
-end
-
-function dump2(o, name, dumped)
-       name = name or "_"
-       dumped = dumped or {}
-       io.write(name, " = ")
-       if type(o) == "number" or type(o) == "string" or type(o) == "boolean"
-                       or type(o) == "function" or type(o) == "nil"
-                       or type(o) == "userdata" then
-               io.write(basic_dump2(o), "\n")
-       elseif type(o) == "table" then
-               if dumped[o] then
-                       io.write(dumped[o], "\n")
-               else
-                       dumped[o] = name
-                       io.write("{}\n") -- new table
-                       for k,v in pairs(o) do
-                               local fieldname = string.format("%s[%s]", name, basic_dump2(k))
-                               dump2(v, fieldname, dumped)
-                       end
-               end
-       else
-               error("cannot dump a " .. type(o))
-               return nil
-       end
-end
-
-function dump(o, dumped)
-       dumped = dumped or {}
-       if type(o) == "number" then
-               return tostring(o)
-       elseif type(o) == "string" then
-               return string.format("%q", o)
-       elseif type(o) == "table" then
-               if dumped[o] then
-                       return "<circular reference>"
-               end
-               dumped[o] = true
-               local t = {}
-               for k,v in pairs(o) do
-                       t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
-               end
-               return "{" .. table.concat(t, ", ") .. "}"
-       elseif type(o) == "boolean" then
-               return tostring(o)
-       elseif type(o) == "function" then
-               return "<function>"
-       elseif type(o) == "userdata" then
-               return "<userdata>"
-       elseif type(o) == "nil" then
-               return "nil"
-       else
-               error("cannot dump a " .. type(o))
-               return nil
-       end
-end
-
---
--- Item definition helpers
---
-
-function minetest.inventorycube(img1, img2, img3)
-       img2 = img2 or img1
-       img3 = img3 or img1
-       return "[inventorycube"
-                       .. "{" .. img1:gsub("%^", "&")
-                       .. "{" .. img2:gsub("%^", "&")
-                       .. "{" .. img3:gsub("%^", "&")
-end
-
-function minetest.pos_to_string(pos)
-       return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
-end
-
-function minetest.get_pointed_thing_position(pointed_thing, above)
-       if pointed_thing.type == "node" then
-               if above then
-                       -- The position where a node would be placed
-                       return pointed_thing.above
-               else
-                       -- The position where a node would be dug
-                       return pointed_thing.under
-               end
-       elseif pointed_thing.type == "object" then
-               obj = pointed_thing.ref
-               if obj ~= nil then
-                       return obj:getpos()
-               else
-                       return nil
-               end
-       else
-               return nil
-       end
-end
-
-function minetest.dir_to_facedir(dir)
-       if math.abs(dir.x) > math.abs(dir.z) then
-               if dir.x < 0 then
-                       return 3
-               else
-                       return 1
-               end
-       else
-               if dir.z < 0 then
-                       return 2
-               else
-                       return 0
-               end
-       end
-end
-
-function minetest.dir_to_wallmounted(dir)
-       if math.abs(dir.y) > math.max(math.abs(dir.x), math.abs(dir.z)) then
-               if dir.y < 0 then
-                       return 1
-               else
-                       return 0
-               end
-       elseif math.abs(dir.x) > math.abs(dir.z) then
-               if dir.x < 0 then
-                       return 3
-               else
-                       return 2
-               end
-       else
-               if dir.z < 0 then
-                       return 5
-               else
-                       return 4
-               end
-       end
-end
-
-function minetest.get_node_drops(nodename, toolname)
-       local drop = ItemStack({name=nodename}):get_definition().drop
-       if drop == nil then
-               -- default drop
-               return {ItemStack({name=nodename})}
-       elseif type(drop) == "string" then
-               -- itemstring drop
-               return {ItemStack(drop)}
-       elseif drop.items == nil then
-               -- drop = {} to disable default drop
-               return {}
-       end
-
-       -- Extended drop table
-       local got_items = {}
-       local got_count = 0
-       local _, item, tool
-       for _, item in ipairs(drop.items) do
-               local good_rarity = true
-               local good_tool = true
-               if item.rarity ~= nil then
-                       good_rarity = item.rarity < 1 or math.random(item.rarity) == 1
-               end
-               if item.tools ~= nil then
-                       good_tool = false
-                       for _, tool in ipairs(item.tools) do
-                               if tool:sub(1, 1) == '~' then
-                                       good_tool = toolname:find(tool:sub(2)) ~= nil
-                               else
-                                       good_tool = toolname == tool
-                               end
-                               if good_tool then
-                                       break
-                               end
-                       end
-               end
-               if good_rarity and good_tool then
-                       got_count = got_count + 1
-                       for _, add_item in ipairs(item.items) do
-                               got_items[#got_items+1] = add_item
-                       end
-                       if drop.max_items ~= nil and got_count == drop.max_items then
-                               break
-                       end
-               end
-       end
-       return got_items
-end
-
-function minetest.item_place_node(itemstack, placer, pointed_thing)
-       local item = itemstack:peek_item()
-       local def = itemstack:get_definition()
-       if def.type == "node" and pointed_thing.type == "node" then
-               local pos = pointed_thing.above
-               local oldnode = minetest.env:get_node(pos)
-               local olddef = ItemStack({name=oldnode.name}):get_definition()
-
-               if not olddef.buildable_to then
-                       minetest.log("info", placer:get_player_name() .. " tried to place"
-                               .. " node in invalid position " .. minetest.pos_to_string(pos)
-                               .. ", replacing " .. oldnode.name)
-                       return
-               end
-
-               minetest.log("action", placer:get_player_name() .. " places node "
-                       .. def.name .. " at " .. minetest.pos_to_string(pos))
-
-               local newnode = {name = def.name, param1 = 0, param2 = 0}
-
-               -- Calculate direction for wall mounted stuff like torches and signs
-               if def.paramtype2 == 'wallmounted' then
-                       local under = pointed_thing.under
-                       local above = pointed_thing.above
-                       local dir = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}
-                       newnode.param2 = minetest.dir_to_wallmounted(dir)
-               -- Calculate the direction for furnaces and chests and stuff
-               elseif def.paramtype2 == 'facedir' then
-                       local playerpos = placer:getpos()
-                       local dir = {x = pos.x - playerpos.x, y = pos.y - playerpos.y, z = pos.z - playerpos.z}
-                       newnode.param2 = minetest.dir_to_facedir(dir)
-                       minetest.log("action", "facedir: " .. newnode.param2)
-               end
-
-               -- Add node and update
-               minetest.env:add_node(pos, newnode)
-
-               -- Set metadata owner
-               if def.metadata_name ~= "" then
-                       minetest.env:get_meta(pos):set_owner(placer:get_player_name())
-               end
-
-               -- Run script hook
-               local _, callback
-               for _, callback in ipairs(minetest.registered_on_placenodes) do
-                       callback(pos, newnode, placer)
-               end
-
-               itemstack:take_item()
-       end
-       return itemstack
-end
-
-function minetest.item_place_object(itemstack, placer, pointed_thing)
-       local pos = minetest.get_pointed_thing_position(pointed_thing, true)
-       if pos ~= nil then
-               local item = itemstack:take_item()
-               minetest.env:add_item(pos, item)
-       end
-       return itemstack
-end
-
-function minetest.item_place(itemstack, placer, pointed_thing)
-       if itemstack:get_definition().type == "node" then
-               return minetest.item_place_node(itemstack, placer, pointed_thing)
-       else
-               return minetest.item_place_object(itemstack, placer, pointed_thing)
-       end
-end
-
-function minetest.item_drop(itemstack, dropper, pos)
-       minetest.env:add_item(pos, itemstack)
-       return ""
-end
-
-function minetest.item_eat(hp_change, replace_with_item)
-       return function(itemstack, user, pointed_thing)  -- closure
-               if itemstack:take_item() ~= nil then
-                       user:set_hp(user:get_hp() + hp_change)
-                       itemstack:add_item(replace_with_item) -- note: replace_with_item is optional
-               end
-               return itemstack
-       end
-end
-
-function minetest.node_punch(pos, node, puncher)
-       -- Run script hook
-       local _, callback
-       for _, callback in ipairs(minetest.registered_on_punchnodes) do
-               callback(pos, node, puncher)
-       end
-
-end
-
-function minetest.node_dig(pos, node, digger)
-       minetest.debug("node_dig")
-
-       local def = ItemStack({name=node.name}):get_definition()
-       if not def.diggable then
-               minetest.debug("not diggable")
-               minetest.log("info", digger:get_player_name() .. " tried to dig "
-                       .. node.name .. " which is not diggable "
-                       .. minetest.pos_to_string(pos))
-               return
-       end
-
-       local meta = minetest.env:get_meta(pos)
-       if meta ~= nil and not meta:get_allow_removal() then
-               minetest.debug("dig prevented by metadata")
-               minetest.log("info", digger:get_player_name() .. " tried to dig "
-                       .. node.name .. ", but removal is disabled by metadata "
-                       .. minetest.pos_to_string(pos))
-               return
-       end
-
-       minetest.log('action', digger:get_player_name() .. " digs "
-               .. node.name .. " at " .. minetest.pos_to_string(pos))
-
-       if not minetest.setting_getbool("creative_mode") then
-               local wielded = digger:get_wielded_item()
-               local drops = minetest.get_node_drops(node.name, wielded:get_name())
-
-               -- Wear out tool
-               tp = wielded:get_tool_capabilities()
-               dp = minetest.get_dig_params(def.groups, tp)
-               wielded:add_wear(dp.wear)
-               digger:set_wielded_item(wielded)
-
-               -- Add dropped items
-               local _, dropped_item
-               for _, dropped_item in ipairs(drops) do
-                       digger:get_inventory():add_item("main", dropped_item)
-               end
-       end
-
-       -- Remove node and update
-       minetest.env:remove_node(pos)
-
-       -- Run script hook
-       local _, callback
-       for _, callback in ipairs(minetest.registered_on_dignodes) do
-               callback(pos, node, digger)
-       end
-end
-
---
--- Item definition defaults
---
-
-minetest.nodedef_default = {
-       -- Item properties
-       type="node",
-       -- name intentionally not defined here
-       description = "",
-       groups = {},
-       inventory_image = "",
-       wield_image = "",
-       wield_scale = {x=1,y=1,z=1},
-       stack_max = 99,
-       usable = false,
-       liquids_pointable = false,
-       tool_capabilities = nil,
-
-       -- Interaction callbacks
-       on_place = minetest.item_place,
-       on_drop = minetest.item_drop,
-       on_use = nil,
-
-       on_punch = minetest.node_punch,
-       on_dig = minetest.node_dig,
-
-       -- Node properties
-       drawtype = "normal",
-       visual_scale = 1.0,
-       tile_images = {""},
-       special_materials = {
-               {image="", backface_culling=true},
-               {image="", backface_culling=true},
-       },
-       alpha = 255,
-       post_effect_color = {a=0, r=0, g=0, b=0},
-       paramtype = "none",
-       paramtype2 = "none",
-       is_ground_content = false,
-       sunlight_propagates = false,
-       walkable = true,
-       pointable = true,
-       diggable = true,
-       climbable = false,
-       buildable_to = false,
-       metadata_name = "",
-       liquidtype = "none",
-       liquid_alternative_flowing = "",
-       liquid_alternative_source = "",
-       liquid_viscosity = 0,
-       light_source = 0,
-       damage_per_second = 0,
-       selection_box = {type="regular"},
-       legacy_facedir_simple = false,
-       legacy_wallmounted = false,
-}
-
-minetest.craftitemdef_default = {
-       type="craft",
-       -- name intentionally not defined here
-       description = "",
-       groups = {},
-       inventory_image = "",
-       wield_image = "",
-       wield_scale = {x=1,y=1,z=1},
-       stack_max = 99,
-       liquids_pointable = false,
-       tool_capabilities = nil,
-
-       -- Interaction callbacks
-       on_place = minetest.item_place,
-       on_drop = minetest.item_drop,
-       on_use = nil,
-}
-
-minetest.tooldef_default = {
-       type="tool",
-       -- name intentionally not defined here
-       description = "",
-       groups = {},
-       inventory_image = "",
-       wield_image = "",
-       wield_scale = {x=1,y=1,z=1},
-       stack_max = 1,
-       liquids_pointable = false,
-       tool_capabilities = nil,
-
-       -- Interaction callbacks
-       on_place = minetest.item_place,
-       on_drop = minetest.item_drop,
-       on_use = nil,
-}
-
-minetest.noneitemdef_default = {  -- This is used for the hand and unknown items
-       type="none",
-       -- name intentionally not defined here
-       description = "",
-       groups = {},
-       inventory_image = "",
-       wield_image = "",
-       wield_scale = {x=1,y=1,z=1},
-       stack_max = 99,
-       liquids_pointable = false,
-       tool_capabilities = nil,
-
-       -- Interaction callbacks
-       on_place = nil,
-       on_drop = nil,
-       on_use = nil,
-}
-
---
--- Make raw registration functions inaccessible to anyone except builtin.lua
---
-
-local register_item_raw = minetest.register_item_raw
-minetest.register_item_raw = nil
-
-local register_alias_raw = minetest.register_alias_raw
-minetest.register_item_raw = nil
-
---
--- Item / entity / ABM registration functions
---
-
-minetest.registered_abms = {}
-minetest.registered_entities = {}
-minetest.registered_items = {}
-minetest.registered_nodes = {}
-minetest.registered_craftitems = {}
-minetest.registered_tools = {}
-minetest.registered_aliases = {}
-
--- For tables that are indexed by item name:
--- If table[X] does not exist, default to table[minetest.registered_aliases[X]]
-local function set_alias_metatable(table)
-       setmetatable(table, {
-               __index = function(name)
-                       return rawget(table, minetest.registered_aliases[name])
-               end
-       })
-end
-set_alias_metatable(minetest.registered_items)
-set_alias_metatable(minetest.registered_nodes)
-set_alias_metatable(minetest.registered_craftitems)
-set_alias_metatable(minetest.registered_tools)
-
--- These item names may not be used because they would interfere
--- with legacy itemstrings
-local forbidden_item_names = {
-       MaterialItem = true,
-       MaterialItem2 = true,
-       MaterialItem3 = true,
-       NodeItem = true,
-       node = true,
-       CraftItem = true,
-       craft = true,
-       MBOItem = true,
-       ToolItem = true,
-       tool = true,
-}
-
-local function check_modname_prefix(name)
-       if name:sub(1,1) == ":" then
-               -- Escape the modname prefix enforcement mechanism
-               return name:sub(2)
-       else
-               -- Modname prefix enforcement
-               local expected_prefix = minetest.get_current_modname() .. ":"
-               if name:sub(1, #expected_prefix) ~= expected_prefix then
-                       error("Name " .. name .. " does not follow naming conventions: " ..
-                               "\"modname:\" or \":\" prefix required")
-               end
-               local subname = name:sub(#expected_prefix+1)
-               if subname:find("[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]") then
-                       error("Name " .. name .. " does not follow naming conventions: " ..
-                               "contains unallowed characters")
-               end
-               return name
-       end
-end
-
-function minetest.register_abm(spec)
-       -- Add to minetest.registered_abms
-       minetest.registered_abms[#minetest.registered_abms+1] = spec
-end
-
-function minetest.register_entity(name, prototype)
-       -- Check name
-       if name == nil then
-               error("Unable to register entity: Name is nil")
-       end
-       name = check_modname_prefix(tostring(name))
-
-       prototype.name = name
-       prototype.__index = prototype  -- so that it can be used as a metatable
-
-       -- Add to minetest.registered_entities
-       minetest.registered_entities[name] = prototype
-end
-
-function minetest.register_item(name, itemdef)
-       -- Check name
-       if name == nil then
-               error("Unable to register item: Name is nil")
-       end
-       name = check_modname_prefix(tostring(name))
-       if forbidden_item_names[name] then
-               error("Unable to register item: Name is forbidden: " .. name)
-       end
-       itemdef.name = name
-
-       -- Apply defaults and add to registered_* table
-       if itemdef.type == "node" then
-               setmetatable(itemdef, {__index = minetest.nodedef_default})
-               minetest.registered_nodes[itemdef.name] = itemdef
-       elseif itemdef.type == "craft" then
-               setmetatable(itemdef, {__index = minetest.craftitemdef_default})
-               minetest.registered_craftitems[itemdef.name] = itemdef
-       elseif itemdef.type == "tool" then
-               setmetatable(itemdef, {__index = minetest.tooldef_default})
-               minetest.registered_tools[itemdef.name] = itemdef
-       elseif itemdef.type == "none" then
-               setmetatable(itemdef, {__index = minetest.noneitemdef_default})
-       else
-               error("Unable to register item: Type is invalid: " .. dump(itemdef))
-       end
-
-       -- Flowing liquid uses param2
-       if itemdef.type == "node" and itemdef.liquidtype == "flowing" then
-               itemdef.paramtype2 = "flowingliquid"
-       end
-
-       -- BEGIN Legacy stuff
-       if itemdef.cookresult_itemstring ~= nil and itemdef.cookresult_itemstring ~= "" then
-               minetest.register_craft({
-                       type="cooking",
-                       output=itemdef.cookresult_itemstring,
-                       recipe=itemdef.name,
-                       cooktime=itemdef.furnace_cooktime
-               })
-       end
-       if itemdef.furnace_burntime ~= nil and itemdef.furnace_burntime >= 0 then
-               minetest.register_craft({
-                       type="fuel",
-                       recipe=itemdef.name,
-                       burntime=itemdef.furnace_burntime
-               })
-       end
-       -- END Legacy stuff
-
-       -- Disable all further modifications
-       getmetatable(itemdef).__newindex = {}
-
-       --minetest.log("Registering item: " .. itemdef.name)
-       minetest.registered_items[itemdef.name] = itemdef
-       minetest.registered_aliases[itemdef.name] = nil
-       register_item_raw(itemdef)
-end
-
-function minetest.register_node(name, nodedef)
-       nodedef.type = "node"
-       minetest.register_item(name, nodedef)
-end
-
-function minetest.register_craftitem(name, craftitemdef)
-       craftitemdef.type = "craft"
-
-       -- BEGIN Legacy stuff
-       if craftitemdef.inventory_image == nil and craftitemdef.image ~= nil then
-               craftitemdef.inventory_image = craftitemdef.image
-       end
-       -- END Legacy stuff
-
-       minetest.register_item(name, craftitemdef)
-end
-
-function minetest.register_tool(name, tooldef)
-       tooldef.type = "tool"
-       tooldef.stack_max = 1
-
-       -- BEGIN Legacy stuff
-       if tooldef.inventory_image == nil and tooldef.image ~= nil then
-               tooldef.inventory_image = tooldef.image
-       end
-       if tooldef.tool_capabilities == nil and
-          (tooldef.full_punch_interval ~= nil or
-           tooldef.basetime ~= nil or
-           tooldef.dt_weight ~= nil or
-           tooldef.dt_crackiness ~= nil or
-           tooldef.dt_crumbliness ~= nil or
-           tooldef.dt_cuttability ~= nil or
-           tooldef.basedurability ~= nil or
-           tooldef.dd_weight ~= nil or
-           tooldef.dd_crackiness ~= nil or
-           tooldef.dd_crumbliness ~= nil or
-           tooldef.dd_cuttability ~= nil) then
-               tooldef.tool_capabilities = {
-                       full_punch_interval = tooldef.full_punch_interval,
-                       basetime = tooldef.basetime,
-                       dt_weight = tooldef.dt_weight,
-                       dt_crackiness = tooldef.dt_crackiness,
-                       dt_crumbliness = tooldef.dt_crumbliness,
-                       dt_cuttability = tooldef.dt_cuttability,
-                       basedurability = tooldef.basedurability,
-                       dd_weight = tooldef.dd_weight,
-                       dd_crackiness = tooldef.dd_crackiness,
-                       dd_crumbliness = tooldef.dd_crumbliness,
-                       dd_cuttability = tooldef.dd_cuttability,
-               }
-       end
-       -- END Legacy stuff
-
-       minetest.register_item(name, tooldef)
-end
-
-function minetest.register_alias(name, convert_to)
-       if forbidden_item_names[name] then
-               error("Unable to register alias: Name is forbidden: " .. name)
-       end
-       if minetest.registered_items[name] ~= nil then
-               minetest.log("WARNING: Not registering alias, item with same name" ..
-                       " is already defined: " .. name .. " -> " .. convert_to)
-       else
-               --minetest.log("Registering alias: " .. name .. " -> " .. convert_to)
-               minetest.registered_aliases[name] = convert_to
-               register_alias_raw(name, convert_to)
-       end
-end
-
--- Alias the forbidden item names to "" so they can't be
--- created via itemstrings (e.g. /give)
-local name
-for name in pairs(forbidden_item_names) do
-       minetest.registered_aliases[name] = ""
-       register_alias_raw(name, "")
-end
-
-
--- Deprecated:
--- Aliases for minetest.register_alias (how ironic...)
---minetest.alias_node = minetest.register_alias
---minetest.alias_tool = minetest.register_alias
---minetest.alias_craftitem = minetest.register_alias
-
---
--- Built-in node definitions. Also defined in C.
---
-
-minetest.register_item(":unknown", {
-       type = "none",
-       description = "Unknown Item",
-       inventory_image = "unknown_item.png",
-       on_place = minetest.item_place,
-       on_drop = minetest.item_drop,
-})
-
-minetest.register_node(":air", {
-       description = "Air (you hacker you!)",
-       inventory_image = "unknown_block.png",
-       wield_image = "unknown_block.png",
-       drawtype = "airlike",
-       paramtype = "light",
-       sunlight_propagates = true,
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true,
-       air_equivalent = true,
-})
-
-minetest.register_node(":ignore", {
-       description = "Ignore (you hacker you!)",
-       inventory_image = "unknown_block.png",
-       wield_image = "unknown_block.png",
-       drawtype = "airlike",
-       paramtype = "none",
-       sunlight_propagates = false,
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true, -- A way to remove accidentally placed ignores
-       air_equivalent = true,
-})
-
--- The hand (bare definition)
-minetest.register_item(":", {
-       type = "none",
-})
-
---
--- Default material types
---
-
-function minetest.digprop_constanttime(time)
-       return {
-               diggability = "constant",
-               constant_time = time,
-       }
-end
-
-function minetest.digprop_stonelike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * 5,
-               crackiness = 1,
-               crumbliness = -0.1,
-               cuttability = -0.2,
-       }
-end
-
-function minetest.digprop_dirtlike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * 1.2,
-               crackiness = 0,
-               crumbliness = 1.2,
-               cuttability = -0.4,
-       }
-end
-
-function minetest.digprop_gravellike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * 2,
-               crackiness = 0.2,
-               crumbliness = 1.5,
-               cuttability = -1.0,
-       }
-end
-
-function minetest.digprop_woodlike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * 1.0,
-               crackiness = 0.75,
-               crumbliness = -1.0,
-               cuttability = 1.5,
-       }
-end
-
-function minetest.digprop_leaveslike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * (-0.5),
-               crackiness = 0,
-               crumbliness = 0,
-               cuttability = 2.0,
-       }
-end
-
-function minetest.digprop_glasslike(toughness)
-       return {
-               diggablity = "normal",
-               weight = toughness * 0.1,
-               crackiness = 2.0,
-               crumbliness = -1.0,
-               cuttability = -1.0,
-       }
-end
-
---
--- Creative inventory
---
-
-minetest.creative_inventory = {}
-
-minetest.add_to_creative_inventory = function(itemstring)
-       table.insert(minetest.creative_inventory, itemstring)
-end
-
---
--- Callback registration
---
-
-local function make_registration()
-       local t = {}
-       local registerfunc = function(func) table.insert(t, func) end
-       return t, registerfunc
-end
-
-minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration()
-minetest.registered_globalsteps, minetest.register_globalstep = make_registration()
-minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration()
-minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration()
-minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
-minetest.registered_on_generateds, minetest.register_on_generated = make_registration()
-minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
-minetest.registered_on_dieplayers, minetest.register_on_dieplayer = make_registration()
-minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
-
---
--- Set random seed
---
-
-math.randomseed(os.time())
-
--- END
diff --git a/data/clienttextures/fontlucida.png b/data/clienttextures/fontlucida.png
deleted file mode 100644 (file)
index c63fa02..0000000
Binary files a/data/clienttextures/fontlucida.png and /dev/null differ
diff --git a/data/clienttextures/menubg.png b/data/clienttextures/menubg.png
deleted file mode 100644 (file)
index 7cb9c89..0000000
Binary files a/data/clienttextures/menubg.png and /dev/null differ
diff --git a/data/clienttextures/menulogo.png b/data/clienttextures/menulogo.png
deleted file mode 100644 (file)
index 76595c4..0000000
Binary files a/data/clienttextures/menulogo.png and /dev/null differ
diff --git a/data/clienttextures/smoke_puff.png b/data/clienttextures/smoke_puff.png
deleted file mode 100644 (file)
index e346d20..0000000
Binary files a/data/clienttextures/smoke_puff.png and /dev/null differ
diff --git a/data/clienttextures/unknown_block.png b/data/clienttextures/unknown_block.png
deleted file mode 100644 (file)
index a27cb8c..0000000
Binary files a/data/clienttextures/unknown_block.png and /dev/null differ
diff --git a/data/clienttextures/unknown_item.png b/data/clienttextures/unknown_item.png
deleted file mode 100644 (file)
index 35cabf0..0000000
Binary files a/data/clienttextures/unknown_item.png and /dev/null differ
diff --git a/data/clienttextures/unknown_object.png b/data/clienttextures/unknown_object.png
deleted file mode 100644 (file)
index 4d6a98d..0000000
Binary files a/data/clienttextures/unknown_object.png and /dev/null differ
diff --git a/data/mods/bucket/depends.txt b/data/mods/bucket/depends.txt
deleted file mode 100644 (file)
index 3a7daa1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-default
-
diff --git a/data/mods/bucket/init.lua b/data/mods/bucket/init.lua
deleted file mode 100644 (file)
index 8ed9da5..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
--- bucket (Minetest 0.4 mod)
--- A bucket, which can pick up water and lava
-
-minetest.register_alias("bucket", "bucket:bucket_empty")
-minetest.register_alias("bucket_water", "bucket:bucket_water")
-minetest.register_alias("bucket_lava", "bucket:bucket_lava")
-
-minetest.register_craft({
-       output = 'bucket:bucket_empty 1',
-       recipe = {
-               {'default:steel_ingot', '', 'default:steel_ingot'},
-               {'', 'default:steel_ingot', ''},
-       }
-})
-
-bucket = {}
-bucket.liquids = {}
-
--- Register a new liquid
---   source = name of the source node
---   flowing = name of the flowing node
---   itemname = name of the new bucket item (or nil if liquid is not takeable)
---   inventory_image = texture of the new bucket item (ignored if itemname == nil)
--- This function can be called from any mod (that depends on bucket).
-function bucket.register_liquid(source, flowing, itemname, inventory_image)
-       bucket.liquids[source] = {
-               source = source,
-               flowing = flowing,
-               itemname = itemname,
-       }
-       bucket.liquids[flowing] = bucket.liquids[source]
-
-       if itemname ~= nil then
-               minetest.register_craftitem(itemname, {
-                       inventory_image = inventory_image,
-                       stack_max = 1,
-                       liquids_pointable = true,
-                       on_use = function(itemstack, user, pointed_thing)
-                               -- Must be pointing to node
-                               if pointed_thing.type ~= "node" then
-                                       return
-                               end
-                               -- Check if pointing to a liquid
-                               n = minetest.env:get_node(pointed_thing.under)
-                               if bucket.liquids[n.name] == nil then
-                                       -- Not a liquid
-                                       minetest.env:add_node(pointed_thing.above, {name=source})
-                               elseif n.name ~= source then
-                                       -- It's a liquid
-                                       minetest.env:add_node(pointed_thing.under, {name=source})
-                               end
-                               return {name="bucket:bucket_empty"}
-                       end
-               })
-       end
-end
-
-minetest.register_craftitem("bucket:bucket_empty", {
-       inventory_image = "bucket.png",
-       stack_max = 1,
-       liquids_pointable = true,
-       on_use = function(itemstack, user, pointed_thing)
-               -- Must be pointing to node
-               if pointed_thing.type ~= "node" then
-                       return
-               end
-               -- Check if pointing to a liquid source
-               n = minetest.env:get_node(pointed_thing.under)
-               liquiddef = bucket.liquids[n.name]
-               if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
-                       minetest.env:add_node(pointed_thing.under, {name="air"})
-                       return {name=liquiddef.itemname}
-               end
-       end,
-})
-
-bucket.register_liquid(
-       "default:water_source",
-       "default:water_flowing",
-       "bucket:bucket_water",
-       "bucket_water.png"
-)
-
-bucket.register_liquid(
-       "default:lava_source",
-       "default:lava_flowing",
-       "bucket:bucket_lava",
-       "bucket_lava.png"
-)
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:bucket_lava",
-       burntime = 60,
-})
diff --git a/data/mods/bucket/textures/bucket.png b/data/mods/bucket/textures/bucket.png
deleted file mode 100644 (file)
index f165fd2..0000000
Binary files a/data/mods/bucket/textures/bucket.png and /dev/null differ
diff --git a/data/mods/bucket/textures/bucket_lava.png b/data/mods/bucket/textures/bucket_lava.png
deleted file mode 100644 (file)
index 7cf27cd..0000000
Binary files a/data/mods/bucket/textures/bucket_lava.png and /dev/null differ
diff --git a/data/mods/bucket/textures/bucket_water.png b/data/mods/bucket/textures/bucket_water.png
deleted file mode 100644 (file)
index f220ec5..0000000
Binary files a/data/mods/bucket/textures/bucket_water.png and /dev/null differ
diff --git a/data/mods/default/init.lua b/data/mods/default/init.lua
deleted file mode 100644 (file)
index 2fdfdb3..0000000
+++ /dev/null
@@ -1,1830 +0,0 @@
--- default (Minetest 0.4 mod)
--- Most default stuff
-
--- Quick documentation about the API
--- =================================
---
--- Helper functions defined by builtin.lua:
--- dump2(obj, name="_", dumped={})
--- dump(obj, dumped={})
---
--- Mod load path
--- -------------
--- Generic:
--- $path_data/mods/
--- $path_userdata/usermods/
--- $mapdir/worldmods/
---
--- On a run-in-place version (eg. the distributed windows version):
--- minetest-0.4.x/data/mods/
--- minetest-0.4.x/usermods/
--- minetest-0.4.x/world/worldmods/
---
--- On an installed version on linux:
--- /usr/share/minetest/mods/
--- ~/.minetest/usermods
--- ~/.minetest/world/worldmods
---
--- Naming convention for registered textual names
--- ----------------------------------------------
--- "modname:<whatever>" (<whatever> can have characters a-zA-Z0-9_)
---
--- This is to prevent conflicting names from corrupting maps and is
--- enforced by the mod loader.
---
--- Example: mod "experimental", ideal item/node/entity name "tnt":
---          -> the name should be "experimental:tnt".
---
--- Enforcement can be overridden by prefixing the name with ":". This can
--- be used for overriding the registrations of some other mod.
---
--- Example: Any mod can redefine experimental:tnt by using the name
---          ":experimental:tnt" when registering it.
--- (also that mods is required to have "experimental" as a dependency)
---
--- The legacy mod uses ":" for maintaining backwards compatibility.
---
--- Textures
--- --------
--- Mods should generally prefix their textures with modname_, eg. given
--- the mod name "foomod", a texture could be called "default_foomod_superfurnace.png"
---
--- This is not crucial and a conflicting name will not corrupt maps.
---
--- Representations of simple things
--- --------------------------------
---
--- MapNode representation:
--- {name="name", param1=num, param2=num}
---
--- param1 and param2 are 8 bit and 4 bit integers, respectively. They
--- are reserved for certain automated functions. If you don't use these
--- functions, you can use them to store arbitrary values.
---
--- param1 is reserved for the engine when:
---   paramtype != "none"
--- param2 is reserved for the engine when any of these are used:
---   liquidtype == "flowing"
---   drawtype == "flowingliquid"
---   drawtype == "torchlike"
---   drawtype == "signlike"
---
--- Position representation:
--- {x=num, y=num, z=num}
---
--- stackstring/itemstring: A stack of items in serialized format.
--- eg. 'node "default:dirt" 5'
--- eg. 'tool "default:pick_wood" 21323'
--- eg. 'craft "default:apple" 2'
---
--- item: A stack of items in Lua table format.
--- eg. {name="default:dirt", count=1, wear=0, metadata=""} 
---     ^ a single dirt node
--- eg. {name="default:pick_wood", count=1, wear=21323, metadata=""}
---     ^ a wooden pick about 1/3 weared out
--- eg. {name="default:apple", count=1, wear=0, metadata=""}
---     ^ an apple.
---
--- Any time an item must be passed to a function, it can be an
--- ItemStack (see below), an itemstring or a table in the above format.
---
--- Global functions:
--- minetest.register_entity(name, prototype table)
--- minetest.register_abm(abm definition)
--- minetest.register_node(name, node definition)
--- minetest.register_tool(name, item definition)
--- minetest.register_craftitem(name, item definition)
--- minetest.register_alias(name, convert_to)
--- minetest.register_craft(recipe)
--- minetest.register_globalstep(func(dtime))
--- minetest.register_on_placenode(func(pos, newnode, placer))
--- minetest.register_on_dignode(func(pos, oldnode, digger))
--- minetest.register_on_punchnode(func(pos, node, puncher))
--- minetest.register_on_generated(func(minp, maxp))
--- minetest.register_on_newplayer(func(ObjectRef))
--- minetest.register_on_dieplayer(func(ObjectRef))
--- minetest.register_on_respawnplayer(func(ObjectRef))
--- ^ return true in func to disable regular player placement
--- ^ currently called _before_ repositioning of player occurs
--- minetest.register_on_chat_message(func(name, message))
--- minetest.add_to_creative_inventory(itemstring)
--- minetest.setting_get(name) -> string or nil
--- minetest.setting_getbool(name) -> boolean value or nil
--- minetest.chat_send_all(text)
--- minetest.chat_send_player(name, text)
--- minetest.get_player_privs(name) -> set of privs
--- minetest.get_inventory(location) -> InvRef
--- ^ location = eg. {type="player", name="celeron55"}
---                  {type="node", pos={x=, y=, z=}}
--- minetest.get_current_modname() -> string
--- minetest.get_modpath(modname) -> eg. "/home/user/.minetest/usermods/modname"
--- ^ Useful for loading additional .lua modules or static data from mod
--- minetest.get_worldpath(modname) -> eg. "/home/user/.minetest/world"
--- ^ Useful for storing custom data
---
--- minetest.debug(line)
--- ^ Goes to dstream
--- minetest.log(line)
--- minetest.log(loglevel, line)
--- ^ loglevel one of "error", "action", "info", "verbose"
---
--- minetest.digprop_constanttime(time)
--- minetest.digprop_stonelike(toughness)
--- minetest.digprop_dirtlike(toughness)
--- minetest.digprop_gravellike(toughness)
--- minetest.digprop_woodlike(toughness)
--- minetest.digprop_leaveslike(toughness)
--- minetest.digprop_glasslike(toughness)
---
--- Global objects:
--- minetest.env - environment reference
---
--- Global tables:
--- minetest.registered_items
--- ^ List of registered items, indexed by name
--- minetest.registered_nodes
--- ^ List of registered node definitions, indexed by name
--- minetest.registered_craftitems
--- ^ List of registered craft item definitions, indexed by name
--- minetest.registered_tools
--- ^ List of registered tool definitions, indexed by name
--- minetest.registered_entities
--- ^ List of registered entity prototypes, indexed by name
--- minetest.object_refs
--- ^ List of object references, indexed by active object id
--- minetest.luaentities
--- ^ List of lua entities, indexed by active object id
---
--- EnvRef is basically ServerEnvironment and ServerMap combined.
--- EnvRef methods:
--- - add_node(pos, node)
--- - remove_node(pos)
--- - get_node(pos)
---   ^ Returns {name="ignore", ...} for unloaded area
--- - get_node_or_nil(pos)
---   ^ Returns nil for unloaded area
--- - get_node_light(pos, timeofday) -> 0...15 or nil
---   ^ timeofday: nil = current time, 0 = night, 0.5 = day
--- - add_entity(pos, name): Returns ObjectRef or nil if failed
--- - add_item(pos, itemstring)
--- - add_rat(pos)
--- - add_firefly(pos)
--- - get_meta(pos) -- Get a NodeMetaRef at that position
--- - get_player_by_name(name) -- Get an ObjectRef to a player
--- - get_objects_inside_radius(pos, radius)
--- - set_timeofday(val): val: 0...1; 0 = midnight, 0.5 = midday
--- - get_timeofday()
---
--- NodeMetaRef (this stuff is subject to change in a future version)
--- - get_type()
--- - allows_text_input()
--- - set_text(text) -- eg. set the text of a sign
--- - get_text()
--- - get_owner()
--- - set_owner(string)
--- Generic node metadata specific:
--- - set_infotext(infotext)
--- - get_inventory() -> InvRef
--- - set_inventory_draw_spec(string)
--- - set_allow_text_input(bool)
--- - set_allow_removal(bool)
--- - set_enforce_owner(bool)
--- - is_inventory_modified()
--- - reset_inventory_modified()
--- - is_text_modified()
--- - reset_text_modified()
--- - set_string(name, value)
--- - get_string(name)
---
--- ObjectRef is basically ServerActiveObject.
--- ObjectRef methods:
--- - remove(): remove object (after returning from Lua)
--- - getpos() -> {x=num, y=num, z=num}
--- - setpos(pos); pos={x=num, y=num, z=num}
--- - moveto(pos, continuous=false): interpolated move
--- - punch(puncher, time_from_last_punch, tool_capabilities, direction)
---   ^ puncher = an another ObjectRef,
---   ^ time_from_last_punch = time since last punch action of the puncher
--- - right_click(clicker); clicker = an another ObjectRef
--- - get_hp(): returns number of hitpoints (2 * number of hearts)
--- - set_hp(hp): set number of hitpoints (2 * number of hearts)
--- - get_inventory() -> InvRef
--- - get_wield_list(): returns the name of the inventory list the wielded item is in
--- - get_wield_index(): returns the index of the wielded item
--- - get_wielded_item() -> ItemStack
--- - set_wielded_item(item): replaces the wielded item, returns true if successful
--- LuaEntitySAO-only: (no-op for other objects)
--- - setvelocity({x=num, y=num, z=num})
--- - getvelocity() -> {x=num, y=num, z=num}
--- - setacceleration({x=num, y=num, z=num})
--- - getacceleration() -> {x=num, y=num, z=num}
--- - setyaw(radians)
--- - getyaw() -> radians
--- - settexturemod(mod)
--- - setsprite(p={x=0,y=0}, num_frames=1, framelength=0.2,
--- -           select_horiz_by_yawpitch=false)
--- - ^ Select sprite from spritesheet with optional animation and DM-style
--- -   texture selection based on yaw relative to camera
--- - set_armor_groups({group1=rating, group2=rating, ...})
--- - get_entity_name() (DEPRECATED: Will be removed in a future version)
--- - get_luaentity()
--- Player-only: (no-op for other objects)
--- - get_player_name(): will return nil if is not a player
--- - get_look_dir(): get camera direction as a unit vector
--- - get_look_pitch(): pitch in radians
--- - get_look_yaw(): yaw in radians (wraps around pretty randomly as of now)
---
--- InvRef methods:
--- - get_size(listname): get size of a list
--- - set_size(listname, size): set size of a list
--- - get_stack(listname, i): get a copy of stack index i in list
--- - set_stack(listname, i, stack): copy stack to index i in list
--- - get_list(listname): return full list
--- - set_list(listname, list): set full list (size will not change)
--- - add_item(listname, stack): add item somewhere in list, returns leftover ItemStack
--- - room_for_item(listname, stack): returns true if the stack of items
---     can be fully added to the list
--- - contains_item(listname, stack): returns true if the stack of items
---     can be fully taken from the list
---   remove_item(listname, stack): take as many items as specified from the list,
---     returns the items that were actually removed (as an ItemStack)
---
--- ItemStack methods:
--- - is_empty(): return true if stack is empty
--- - get_name(): returns item name (e.g. "default:stone")
--- - get_count(): returns number of items on the stack
--- - get_wear(): returns tool wear (0-65535), 0 for non-tools
--- - get_metadata(): returns metadata (a string attached to an item stack)
--- - clear(): removes all items from the stack, making it empty
--- - replace(item): replace the contents of this stack (item can also
---     be an itemstring or table)
--- - to_string(): returns the stack in itemstring form
--- - to_table(): returns the stack in Lua table form
--- - get_stack_max(): returns the maximum size of the stack (depends on the item)
--- - get_free_space(): returns get_stack_max() - get_count()
--- - is_known(): returns true if the item name refers to a defined item type
--- - get_definition(): returns the item definition table
--- - get_tool_capabilities(): returns the digging properties of the item,
---   ^ or those of the hand if none are defined for this item type
--- - add_wear(amount): increases wear by amount if the item is a tool
--- - add_item(item): put some item or stack onto this stack,
---   ^ returns leftover ItemStack
--- - item_fits(item): returns true if item or stack can be fully added to this one
--- - take_item(n): take (and remove) up to n items from this stack
---   ^ returns taken ItemStack
---   ^ if n is omitted, n=1 is used
--- - peek_item(n): copy (don't remove) up to n items from this stack
---   ^ returns copied ItemStack
---   ^ if n is omitted, n=1 is used
---
--- Registered entities:
--- - Functions receive a "luaentity" as self:
---   - It has the member .name, which is the registered name ("mod:thing")
---   - It has the member .object, which is an ObjectRef pointing to the object
---   - The original prototype stuff is visible directly via a metatable
--- - Callbacks:
---   - on_activate(self, staticdata)
---   - on_step(self, dtime)
---   - on_punch(self, hitter)
---   - on_rightclick(self, clicker)
---   - get_staticdata(self)
---     ^ return string that will be passed to on_activate when the object
---       is created next time
---
--- Entity prototype table:
--- {
---     physical = true,
---     collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
---     visual = "cube"/"sprite",
---     visual_size = {x=1, y=1},
---     textures = {texture,texture,texture,texture,texture,texture},
---     spritediv = {x=1, y=1},
---     initial_sprite_basepos = {x=0, y=0},
---     on_activate = function(self, staticdata),
---     on_step = function(self, dtime),
---     on_punch = function(self, hitter),
---     on_rightclick = function(self, clicker),
---     get_staticdata = function(self),
---     # Also you can define arbitrary member variables here
---     myvariable = whatever,
--- }
---
--- Item definition options (register_node, register_craftitem, register_tool)
--- {
---     description = "Steel Axe",
---     groups = {}, -- key=name, value=rating; rating=1..3.
---                     if rating not applicable, use 1.
---                     eg. {wool=1, fluffy=3}
---                         {soil=2, outerspace=1, crumbly=1}
---                         {bendy=2, snappy=1},
---                         {hard=1, metal=1, spikes=1}
---     inventory_image = "default_tool_steelaxe.png",
---     wield_image = "",
---     wield_scale = {x=1,y=1,z=1},
---     stack_max = 99,
---     liquids_pointable = false,
---     tool_capabilities = {
---         full_punch_interval = 1.0,
---         max_drop_level=0,
---         groupcaps={
---             -- For example:
---             fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
---             snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
---             choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
---         }
---     }
---     on_drop = func(item, dropper, pos),
---     on_place = func(item, placer, pointed_thing),
---     on_use = func(item, user, pointed_thing),
--- }
---
--- Node definition options (register_node):
--- {
---     <all fields allowed in item definitions>,
---     drawtype = "normal",
---     visual_scale = 1.0,
---     tile_images = {"default_unknown_block.png"},
---     special_materials = {
---         {image="", backface_culling=true},
---         {image="", backface_culling=true},
---     },
---     alpha = 255,
---     post_effect_color = {a=0, r=0, g=0, b=0},
---     paramtype = "none",
---     paramtype2 = "none",
---     is_ground_content = false,
---     sunlight_propagates = false,
---     walkable = true,
---     pointable = true,
---     diggable = true,
---     climbable = false,
---     buildable_to = false,
---     drop = "",
---     -- alternatively drop = { max_items = ..., items = { ... } }
---     metadata_name = "",
---     liquidtype = "none",
---     liquid_alternative_flowing = "",
---     liquid_alternative_source = "",
---     liquid_viscosity = 0,
---     light_source = 0,
---     damage_per_second = 0,
---     selection_box = {type="regular"},
---     legacy_facedir_simple = false, -- Support maps made in and before January 2012
---     legacy_wallmounted = false, -- Support maps made in and before January 2012
--- }
---
--- Recipe:
--- {
---     output = 'default:pick_stone',
---     recipe = {
---         {'default:cobble', 'default:cobble', 'default:cobble'},
---         {'', 'default:stick', ''},
---         {'', 'default:stick', ''},
---     },
---     replacements = <optional list of item pairs,
---                     replace one input item with another item on crafting>
--- }
---
--- Recipe (shapeless):
--- {
---     type = "shapeless",
---     output = 'mushrooms:mushroom_stew',
---     recipe = {
---         "mushrooms:bowl",
---         "mushrooms:mushroom_brown",
---         "mushrooms:mushroom_red",
---     },
---     replacements = <optional list of item pairs,
---                     replace one input item with another item on crafting>
--- }
---
--- Recipe (tool repair):
--- {
---     type = "toolrepair",
---     additional_wear = -0.02,
--- }
---
--- Recipe (cooking):
--- {
---     type = "cooking",
---     output = "default:glass",
---     recipe = "default:sand",
---     cooktime = 3,
--- }
---
--- Recipe (furnace fuel):
--- {
---     type = "fuel",
---     recipe = "default:leaves",
---     burntime = 1,
--- }
---
--- ABM (ActiveBlockModifier) definition:
--- {
---     nodenames = {"default:lava_source"},
---     neighbors = {"default:water_source", "default:water_flowing"}, -- (any of these)
---      ^ If left out or empty, any neighbor will do
---      ^ This might get removed in the future
---     interval = 1.0, -- (operation interval)
---     chance = 1, -- (chance of trigger is 1.0/this)
---     action = func(pos, node, active_object_count, active_object_count_wider),
--- }
---
--- Item groups:
--- - Groups always have a rating associated with them. If there is no
---   useful meaning for a rating for a given group, it shall be 1.
--- - When not defined, the rating of a group defaults to 0.
---
--- Special groups:
--- - dig_immediate:
---   - 2: node is removed without tool wear after 1 second or so
---   - 3: node is removed without tool wear immediately (like a torch)
--- - level: Can be used to give an additional sense of progression in the game.
---   - 0 is something that is directly accessible at the start of gameplay
-
-WATER_ALPHA = 160
-WATER_VISC = 1
-LAVA_VISC = 7
-LIGHT_MAX = 14
-
--- Definitions made by this mod that other mods can use too
-default = {}
-
---
--- Tool definition
---
-
--- The hand
-minetest.register_item(":", {
-       type = "none",
-       wield_image = "wieldhand.png",
-       wield_scale = {x=1,y=1,z=2.5},
-       tool_capabilities = {
-               full_punch_interval = 1.0,
-               max_drop_level = 0,
-               groupcaps = {
-                       fleshy = {times={[2]=2.00, [3]=1.00}, maxwear=0, maxlevel=1},
-                       crumbly = {times={[3]=0.70}, maxwear=0, maxlevel=1},
-                       snappy = {times={[3]=0.70}, maxwear=0, maxlevel=1},
-               }
-       }
-})
-
-minetest.register_tool("default:pick_wood", {
-       description = "Wooden Pickaxe",
-       inventory_image = "default_tool_woodpick.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       cracky={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:pick_stone", {
-       description = "Stone Pickaxe",
-       inventory_image = "default_tool_stonepick.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       cracky={times={[1]=1.50, [2]=0.80, [3]=0.60}, maxwear=0.05, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:pick_steel", {
-       description = "Steel Pickaxe",
-       inventory_image = "default_tool_steelpick.png",
-       tool_capabilities = {
-               max_drop_level=1,
-               groupcaps={
-                       cracky={times={[1]=1.00, [2]=0.60, [3]=0.40}, maxwear=0.1, maxlevel=2}
-               }
-       },
-})
-minetest.register_tool("default:pick_mese", {
-       description = "Mese Pickaxe",
-       inventory_image = "default_tool_mesepick.png",
-       tool_capabilities = {
-               max_drop_level=3,
-               groupcaps={
-                       cracky={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3},
-                       crumbly={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3},
-                       snappy={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3}
-               }
-       },
-})
-minetest.register_tool("default:shovel_wood", {
-       description = "Wooden Shovel",
-       inventory_image = "default_tool_woodshovel.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       crumbly={times={[1]=1.50, [2]=0.80, [3]=0.50}, maxwear=0.1, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:shovel_stone", {
-       description = "Stone Shovel",
-       inventory_image = "default_tool_stoneshovel.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       crumbly={times={[1]=0.80, [2]=0.50, [3]=0.30}, maxwear=0.05, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:shovel_steel", {
-       description = "Steel Shovel",
-       inventory_image = "default_tool_steelshovel.png",
-       tool_capabilities = {
-               max_drop_level=1,
-               groupcaps={
-                       crumbly={times={[1]=0.50, [2]=0.35, [3]=0.30}, maxwear=0.1, maxlevel=2}
-               }
-       },
-})
-minetest.register_tool("default:axe_wood", {
-       description = "Wooden Axe",
-       inventory_image = "default_tool_woodaxe.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       choppy={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1},
-                       fleshy={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:axe_stone", {
-       description = "Stone Axe",
-       inventory_image = "default_tool_stoneaxe.png",
-       tool_capabilities = {
-               max_drop_level=0,
-               groupcaps={
-                       choppy={times={[1]=1.50, [2]=1.00, [3]=0.60}, maxwear=0.05, maxlevel=1},
-                       fleshy={times={[2]=1.30, [3]=0.70}, maxwear=0.05, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:axe_steel", {
-       description = "Steel Axe",
-       inventory_image = "default_tool_steelaxe.png",
-       tool_capabilities = {
-               max_drop_level=1,
-               groupcaps={
-                       choppy={times={[1]=1.00, [2]=0.80, [3]=0.50}, maxwear=0.1, maxlevel=2},
-                       fleshy={times={[2]=1.10, [3]=0.60}, maxwear=0.03, maxlevel=1}
-               }
-       },
-})
-minetest.register_tool("default:sword_wood", {
-       description = "Wooden Sword",
-       inventory_image = "default_tool_woodsword.png",
-       tool_capabilities = {
-               full_punch_interval = 1.0,
-               max_drop_level=0,
-               groupcaps={
-                       fleshy={times={[2]=1.10, [3]=0.60}, maxwear=0.1, maxlevel=1},
-                       snappy={times={[2]=1.00, [3]=0.50}, maxwear=0.1, maxlevel=1},
-                       choppy={times={[3]=1.00}, maxwear=0.05, maxlevel=0}
-               }
-       }
-})
-minetest.register_tool("default:sword_stone", {
-       description = "Stone Sword",
-       inventory_image = "default_tool_stonesword.png",
-       tool_capabilities = {
-               full_punch_interval = 1.0,
-               max_drop_level=0,
-               groupcaps={
-                       fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
-                       snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
-                       choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
-               }
-       }
-})
-minetest.register_tool("default:sword_steel", {
-       description = "Steel Sword",
-       inventory_image = "default_tool_steelsword.png",
-       tool_capabilities = {
-               full_punch_interval = 1.0,
-               max_drop_level=1,
-               groupcaps={
-                       fleshy={times={[1]=1.00, [2]=0.40, [3]=0.20}, maxwear=0.1, maxlevel=2},
-                       snappy={times={[2]=0.70, [3]=0.30}, maxwear=0.03, maxlevel=1},
-                       choppy={times={[3]=0.70}, maxwear=0.03, maxlevel=0}
-               }
-       }
-})
-
---
--- Crafting definition
---
-
-minetest.register_craft({
-       output = 'default:wood 4',
-       recipe = {
-               {'default:tree'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:stick 4',
-       recipe = {
-               {'default:wood'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:fence_wood 2',
-       recipe = {
-               {'default:stick', 'default:stick', 'default:stick'},
-               {'default:stick', 'default:stick', 'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:sign_wall',
-       recipe = {
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'', 'default:stick', ''},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:torch 4',
-       recipe = {
-               {'default:coal_lump'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:pick_wood',
-       recipe = {
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'', 'default:stick', ''},
-               {'', 'default:stick', ''},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:pick_stone',
-       recipe = {
-               {'default:cobble', 'default:cobble', 'default:cobble'},
-               {'', 'default:stick', ''},
-               {'', 'default:stick', ''},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:pick_steel',
-       recipe = {
-               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
-               {'', 'default:stick', ''},
-               {'', 'default:stick', ''},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:pick_mese',
-       recipe = {
-               {'default:mese', 'default:mese', 'default:mese'},
-               {'', 'default:stick', ''},
-               {'', 'default:stick', ''},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:shovel_wood',
-       recipe = {
-               {'default:wood'},
-               {'default:stick'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:shovel_stone',
-       recipe = {
-               {'default:cobble'},
-               {'default:stick'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:shovel_steel',
-       recipe = {
-               {'default:steel_ingot'},
-               {'default:stick'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:axe_wood',
-       recipe = {
-               {'default:wood', 'default:wood'},
-               {'default:wood', 'default:stick'},
-               {'', 'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:axe_stone',
-       recipe = {
-               {'default:cobble', 'default:cobble'},
-               {'default:cobble', 'default:stick'},
-               {'', 'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:axe_steel',
-       recipe = {
-               {'default:steel_ingot', 'default:steel_ingot'},
-               {'default:steel_ingot', 'default:stick'},
-               {'', 'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:sword_wood',
-       recipe = {
-               {'default:wood'},
-               {'default:wood'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:sword_stone',
-       recipe = {
-               {'default:cobble'},
-               {'default:cobble'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:sword_steel',
-       recipe = {
-               {'default:steel_ingot'},
-               {'default:steel_ingot'},
-               {'default:stick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:rail 15',
-       recipe = {
-               {'default:steel_ingot', '', 'default:steel_ingot'},
-               {'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
-               {'default:steel_ingot', '', 'default:steel_ingot'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:chest',
-       recipe = {
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'default:wood', '', 'default:wood'},
-               {'default:wood', 'default:wood', 'default:wood'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:chest_locked',
-       recipe = {
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'default:wood', 'default:steel_ingot', 'default:wood'},
-               {'default:wood', 'default:wood', 'default:wood'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:furnace',
-       recipe = {
-               {'default:cobble', 'default:cobble', 'default:cobble'},
-               {'default:cobble', '', 'default:cobble'},
-               {'default:cobble', 'default:cobble', 'default:cobble'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:steelblock',
-       recipe = {
-               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
-               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
-               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:sandstone',
-       recipe = {
-               {'default:sand', 'default:sand'},
-               {'default:sand', 'default:sand'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:clay',
-       recipe = {
-               {'default:clay_lump', 'default:clay_lump'},
-               {'default:clay_lump', 'default:clay_lump'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:brick',
-       recipe = {
-               {'default:clay_brick', 'default:clay_brick'},
-               {'default:clay_brick', 'default:clay_brick'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:paper',
-       recipe = {
-               {'default:papyrus', 'default:papyrus', 'default:papyrus'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:book',
-       recipe = {
-               {'default:paper'},
-               {'default:paper'},
-               {'default:paper'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:bookshelf',
-       recipe = {
-               {'default:wood', 'default:wood', 'default:wood'},
-               {'default:book', 'default:book', 'default:book'},
-               {'default:wood', 'default:wood', 'default:wood'},
-       }
-})
-
-minetest.register_craft({
-       output = 'default:ladder',
-       recipe = {
-               {'default:stick', '', 'default:stick'},
-               {'default:stick', 'default:stick', 'default:stick'},
-               {'default:stick', '', 'default:stick'},
-       }
-})
-
---
--- Crafting (tool repair)
---
-minetest.register_craft({
-       type = "toolrepair",
-       additional_wear = -0.02,
-})
-
---
--- Cooking recipes
---
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:glass",
-       recipe = "default:sand",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:coal_lump",
-       recipe = "default:tree",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:coal_lump",
-       recipe = "default:jungletree",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:stone",
-       recipe = "default:cobble",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:steel_ingot",
-       recipe = "default:iron_lump",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "default:clay_brick",
-       recipe = "default:clay_lump",
-})
-
---
--- Fuels
---
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:tree",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:jungletree",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:junglegrass",
-       burntime = 2,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:leaves",
-       burntime = 1,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:cactus",
-       burntime = 15,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:papyrus",
-       burntime = 1,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:bookshelf",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:fence_wood",
-       burntime = 15,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:ladder",
-       burntime = 5,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:wood",
-       burntime = 7,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:mese",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:lava_source",
-       burntime = 60,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:torch",
-       burntime = 4,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:sign_wall",
-       burntime = 10,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:chest",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:chest_locked",
-       burntime = 30,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:nyancat",
-       burntime = 1,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:nyancat_rainbow",
-       burntime = 1,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:sapling",
-       burntime = 10,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:apple",
-       burntime = 3,
-})
-
-minetest.register_craft({
-       type = "fuel",
-       recipe = "default:coal_lump",
-       burntime = 40,
-})
-
---
--- Node definitions
---
-
-minetest.register_node("default:stone", {
-       description = "Stone",
-       tile_images = {"default_stone.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-       drop = 'default:cobble',
-       legacy_mineral = true,
-})
-
-minetest.register_node("default:stone_with_coal", {
-       description = "Stone with coal",
-       tile_images = {"default_stone.png^default_mineral_coal.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-       drop = 'default:coal_lump',
-})
-
-minetest.register_node("default:stone_with_iron", {
-       description = "Stone with iron",
-       tile_images = {"default_stone.png^default_mineral_iron.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-       drop = 'default:iron_lump',
-})
-
-minetest.register_node("default:dirt_with_grass", {
-       description = "Dirt with grass",
-       tile_images = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
-       is_ground_content = true,
-       groups = {crumbly=3},
-       drop = 'default:dirt',
-})
-
-minetest.register_node("default:dirt_with_grass_footsteps", {
-       description = "Dirt with grass and footsteps",
-       tile_images = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
-       is_ground_content = true,
-       groups = {crumbly=3},
-       drop = 'default:dirt',
-})
-
-minetest.register_node("default:dirt", {
-       description = "Dirt",
-       tile_images = {"default_dirt.png"},
-       is_ground_content = true,
-       groups = {crumbly=3},
-})
-
-minetest.register_node("default:sand", {
-       description = "Sand",
-       tile_images = {"default_sand.png"},
-       is_ground_content = true,
-       groups = {crumbly=3},
-})
-
-minetest.register_node("default:gravel", {
-       description = "Gravel",
-       tile_images = {"default_gravel.png"},
-       is_ground_content = true,
-       groups = {crumbly=2},
-})
-
-minetest.register_node("default:sandstone", {
-       description = "Sandstone",
-       tile_images = {"default_sandstone.png"},
-       is_ground_content = true,
-       groups = {crumbly=2,cracky=2},
-       drop = 'default:sand',
-})
-
-minetest.register_node("default:clay", {
-       description = "Clay",
-       tile_images = {"default_clay.png"},
-       is_ground_content = true,
-       groups = {crumbly=3},
-       drop = 'default:clay_lump 4',
-})
-
-minetest.register_node("default:brick", {
-       description = "Brick",
-       tile_images = {"default_brick.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-       drop = 'default:clay_brick 4',
-})
-
-minetest.register_node("default:tree", {
-       description = "Tree",
-       tile_images = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
-       is_ground_content = true,
-       groups = {snappy=2,choppy=2},
-})
-
-minetest.register_node("default:jungletree", {
-       description = "Jungle Tree",
-       tile_images = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
-       is_ground_content = true,
-       groups = {snappy=2,choppy=2},
-})
-
-minetest.register_node("default:junglegrass", {
-       description = "Jungle Grass",
-       drawtype = "plantlike",
-       visual_scale = 1.3,
-       tile_images = {"default_junglegrass.png"},
-       inventory_image = "default_junglegrass.png",
-       wield_image = "default_junglegrass.png",
-       paramtype = "light",
-       walkable = false,
-       groups = {snappy=3},
-})
-
-minetest.register_node("default:leaves", {
-       description = "Leaves",
-       drawtype = "allfaces_optional",
-       visual_scale = 1.3,
-       tile_images = {"default_leaves.png"},
-       paramtype = "light",
-       groups = {snappy=3},
-       drop = {
-               max_items = 1,
-               items = {
-                       {
-                               -- player will get sapling with 1/20 chance
-                               items = {'default:sapling'},
-                               rarity = 20,
-                       },
-                       {
-                               -- player will get leaves only if he get no saplings,
-                               -- this is because max_items is 1
-                               items = {'default:leaves'},
-                       }
-               }
-       },
-})
-
-minetest.register_node("default:cactus", {
-       description = "Cactus",
-       tile_images = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
-       is_ground_content = true,
-       groups = {snappy=2,choppy=3},
-})
-
-minetest.register_node("default:papyrus", {
-       description = "Papyrus",
-       drawtype = "plantlike",
-       tile_images = {"default_papyrus.png"},
-       inventory_image = "default_papyrus.png",
-       wield_image = "default_papyrus.png",
-       paramtype = "light",
-       is_ground_content = true,
-       walkable = false,
-       groups = {snappy=3},
-})
-
-minetest.register_node("default:bookshelf", {
-       description = "Bookshelf",
-       tile_images = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
-       is_ground_content = true,
-       groups = {snappy=2,choppy=3},
-})
-
-minetest.register_node("default:glass", {
-       description = "Glass",
-       drawtype = "glasslike",
-       tile_images = {"default_glass.png"},
-       inventory_image = minetest.inventorycube("default_glass.png"),
-       paramtype = "light",
-       sunlight_propagates = true,
-       is_ground_content = true,
-       groups = {snappy=2,cracky=3},
-})
-
-minetest.register_node("default:fence_wood", {
-       description = "Wooden Fence",
-       drawtype = "fencelike",
-       tile_images = {"default_wood.png"},
-       inventory_image = "default_fence.png",
-       wield_image = "default_fence.png",
-       paramtype = "light",
-       is_ground_content = true,
-       selection_box = {
-               type = "fixed",
-               fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
-       },
-       groups = {snappy=2,choppy=2},
-})
-
-minetest.register_node("default:rail", {
-       description = "Rail",
-       drawtype = "raillike",
-       tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
-       inventory_image = "default_rail.png",
-       wield_image = "default_rail.png",
-       paramtype = "light",
-       is_ground_content = true,
-       walkable = false,
-       selection_box = {
-               type = "fixed",
-               --fixed = <default>
-       },
-       groups = {bendy=2,snappy=1},
-})
-
-minetest.register_node("default:ladder", {
-       description = "Ladder",
-       drawtype = "signlike",
-       tile_images = {"default_ladder.png"},
-       inventory_image = "default_ladder.png",
-       wield_image = "default_ladder.png",
-       paramtype = "light",
-       paramtype2 = "wallmounted",
-       is_ground_content = true,
-       walkable = false,
-       climbable = true,
-       selection_box = {
-               type = "wallmounted",
-               --wall_top = = <default>
-               --wall_bottom = = <default>
-               --wall_side = = <default>
-       },
-       groups = {snappy=2,choppy=2},
-       legacy_wallmounted = true,
-})
-
-minetest.register_node("default:wood", {
-       description = "Wood",
-       tile_images = {"default_wood.png"},
-       is_ground_content = true,
-       groups = {snappy=2,choppy=2},
-})
-
-minetest.register_node("default:mese", {
-       description = "Mese",
-       tile_images = {"default_mese.png"},
-       is_ground_content = true,
-       groups = {cracky=1},
-})
-
-minetest.register_node("default:cloud", {
-       description = "Cloud",
-       tile_images = {"default_cloud.png"},
-       is_ground_content = true,
-})
-
-minetest.register_node("default:water_flowing", {
-       description = "Water (flowing)",
-       inventory_image = minetest.inventorycube("default_water.png"),
-       drawtype = "flowingliquid",
-       tile_images = {"default_water.png"},
-       alpha = WATER_ALPHA,
-       paramtype = "light",
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true,
-       liquidtype = "flowing",
-       liquid_alternative_flowing = "default:water_flowing",
-       liquid_alternative_source = "default:water_source",
-       liquid_viscosity = WATER_VISC,
-       post_effect_color = {a=64, r=100, g=100, b=200},
-       special_materials = {
-               {image="default_water.png", backface_culling=false},
-               {image="default_water.png", backface_culling=true},
-       },
-       groups = {water=3, liquid=3},
-})
-
-minetest.register_node("default:water_source", {
-       description = "Water",
-       inventory_image = minetest.inventorycube("default_water.png"),
-       drawtype = "liquid",
-       tile_images = {"default_water.png"},
-       alpha = WATER_ALPHA,
-       paramtype = "light",
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true,
-       liquidtype = "source",
-       liquid_alternative_flowing = "default:water_flowing",
-       liquid_alternative_source = "default:water_source",
-       liquid_viscosity = WATER_VISC,
-       post_effect_color = {a=64, r=100, g=100, b=200},
-       special_materials = {
-               -- New-style water source material (mostly unused)
-               {image="default_water.png", backface_culling=false},
-       },
-       groups = {water=3, liquid=3},
-})
-
-minetest.register_node("default:lava_flowing", {
-       description = "Lava (flowing)",
-       inventory_image = minetest.inventorycube("default_lava.png"),
-       drawtype = "flowingliquid",
-       tile_images = {"default_lava.png"},
-       paramtype = "light",
-       light_source = LIGHT_MAX - 1,
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true,
-       liquidtype = "flowing",
-       liquid_alternative_flowing = "default:lava_flowing",
-       liquid_alternative_source = "default:lava_source",
-       liquid_viscosity = LAVA_VISC,
-       damage_per_second = 4*2,
-       post_effect_color = {a=192, r=255, g=64, b=0},
-       special_materials = {
-               {image="default_lava.png", backface_culling=false},
-               {image="default_lava.png", backface_culling=true},
-       },
-       groups = {lava=3, liquid=2, hot=3},
-})
-
-minetest.register_node("default:lava_source", {
-       description = "Lava",
-       inventory_image = minetest.inventorycube("default_lava.png"),
-       drawtype = "liquid",
-       tile_images = {"default_lava.png"},
-       paramtype = "light",
-       light_source = LIGHT_MAX - 1,
-       walkable = false,
-       pointable = false,
-       diggable = false,
-       buildable_to = true,
-       liquidtype = "source",
-       liquid_alternative_flowing = "default:lava_flowing",
-       liquid_alternative_source = "default:lava_source",
-       liquid_viscosity = LAVA_VISC,
-       damage_per_second = 4*2,
-       post_effect_color = {a=192, r=255, g=64, b=0},
-       special_materials = {
-               -- New-style lava source material (mostly unused)
-               {image="default_lava.png", backface_culling=false},
-       },
-       groups = {lava=3, liquid=2, hot=3},
-})
-
-minetest.register_node("default:torch", {
-       description = "Torch",
-       drawtype = "torchlike",
-       tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
-       inventory_image = "default_torch_on_floor.png",
-       wield_image = "default_torch_on_floor.png",
-       paramtype = "light",
-       paramtype2 = "wallmounted",
-       sunlight_propagates = true,
-       walkable = false,
-       light_source = LIGHT_MAX-1,
-       selection_box = {
-               type = "wallmounted",
-               wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
-               wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
-               wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
-       },
-       groups = {dig_immediate=3},
-       legacy_wallmounted = true,
-})
-
-minetest.register_node("default:sign_wall", {
-       description = "Sign",
-       drawtype = "signlike",
-       tile_images = {"default_sign_wall.png"},
-       inventory_image = "default_sign_wall.png",
-       wield_image = "default_sign_wall.png",
-       paramtype = "light",
-       paramtype2 = "wallmounted",
-       sunlight_propagates = true,
-       walkable = false,
-       metadata_name = "sign",
-       selection_box = {
-               type = "wallmounted",
-               --wall_top = <default>
-               --wall_bottom = <default>
-               --wall_side = <default>
-       },
-       groups = {dig_immediate=2},
-       legacy_wallmounted = true,
-})
-
-minetest.register_node("default:chest", {
-       description = "Chest",
-       tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
-               "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
-       paramtype2 = "facedir",
-       metadata_name = "chest",
-       groups = {snappy=2,choppy=2},
-       legacy_facedir_simple = true,
-})
-
-minetest.register_node("default:chest_locked", {
-       description = "Locked Chest",
-       tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
-               "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
-       paramtype2 = "facedir",
-       metadata_name = "locked_chest",
-       groups = {snappy=2,choppy=2},
-       legacy_facedir_simple = true,
-})
-
-minetest.register_node("default:furnace", {
-       description = "Furnace",
-       tile_images = {"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
-               "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
-       paramtype2 = "facedir",
-       metadata_name = "furnace",
-       groups = {cracky=2},
-       legacy_facedir_simple = true,
-})
-
-minetest.register_node("default:cobble", {
-       description = "Cobble",
-       tile_images = {"default_cobble.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-})
-
-minetest.register_node("default:mossycobble", {
-       description = "Mossy Cobble",
-       tile_images = {"default_mossycobble.png"},
-       is_ground_content = true,
-       groups = {cracky=3},
-})
-
-minetest.register_node("default:steelblock", {
-       description = "Steel Block",
-       tile_images = {"default_steel_block.png"},
-       is_ground_content = true,
-       groups = {snappy=1,bendy=2},
-})
-
-minetest.register_node("default:nyancat", {
-       description = "Nyancat",
-       tile_images = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
-               "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
-       inventory_image = "default_nc_front.png",
-       paramtype2 = "facedir",
-       groups = {cracky=2},
-       legacy_facedir_simple = true,
-})
-
-minetest.register_node("default:nyancat_rainbow", {
-       description = "Nyancat Rainbow",
-       tile_images = {"default_nc_rb.png"},
-       inventory_image = "default_nc_rb.png",
-       groups = {cracky=2},
-})
-
-minetest.register_node("default:sapling", {
-       description = "Sapling",
-       drawtype = "plantlike",
-       visual_scale = 1.0,
-       tile_images = {"default_sapling.png"},
-       inventory_image = "default_sapling.png",
-       wield_image = "default_sapling.png",
-       paramtype = "light",
-       walkable = false,
-       groups = {dig_immediate=3},
-})
-
-minetest.register_node("default:apple", {
-       description = "Apple",
-       drawtype = "plantlike",
-       visual_scale = 1.0,
-       tile_images = {"default_apple.png"},
-       inventory_image = "default_apple.png",
-       paramtype = "light",
-       sunlight_propagates = true,
-       walkable = false,
-       groups = {dig_immediate=3},
-       on_use = minetest.item_eat(4),
-})
-
---
--- Crafting items
---
-
-minetest.register_craftitem("default:stick", {
-       description = "Stick",
-       inventory_image = "default_stick.png",
-})
-
-minetest.register_craftitem("default:paper", {
-       description = "Paper",
-       inventory_image = "default_paper.png",
-})
-
-minetest.register_craftitem("default:book", {
-       description = "Book",
-       inventory_image = "default_book.png",
-})
-
-minetest.register_craftitem("default:coal_lump", {
-       description = "Lump of coal",
-       inventory_image = "default_coal_lump.png",
-})
-
-minetest.register_craftitem("default:iron_lump", {
-       description = "Lump of iron",
-       inventory_image = "default_iron_lump.png",
-})
-
-minetest.register_craftitem("default:clay_lump", {
-       description = "Lump of clay",
-       inventory_image = "default_clay_lump.png",
-})
-
-minetest.register_craftitem("default:steel_ingot", {
-       description = "Steel ingot",
-       inventory_image = "default_steel_ingot.png",
-})
-
-minetest.register_craftitem("default:clay_brick", {
-       description = "Clay brick",
-       inventory_image = "default_steel_ingot.png",
-       inventory_image = "default_clay_brick.png",
-})
-
-minetest.register_craftitem("default:scorched_stuff", {
-       description = "Scorched stuff",
-       inventory_image = "default_scorched_stuff.png",
-})
-
---
--- Creative inventory
---
-
-minetest.add_to_creative_inventory('default:pick_mese')
-minetest.add_to_creative_inventory('default:pick_steel')
-minetest.add_to_creative_inventory('default:axe_steel')
-minetest.add_to_creative_inventory('default:shovel_steel')
-
-minetest.add_to_creative_inventory('default:torch')
-minetest.add_to_creative_inventory('default:cobble')
-minetest.add_to_creative_inventory('default:dirt')
-minetest.add_to_creative_inventory('default:stone')
-minetest.add_to_creative_inventory('default:sand')
-minetest.add_to_creative_inventory('default:sandstone')
-minetest.add_to_creative_inventory('default:clay')
-minetest.add_to_creative_inventory('default:brick')
-minetest.add_to_creative_inventory('default:tree')
-minetest.add_to_creative_inventory('default:wood')
-minetest.add_to_creative_inventory('default:leaves')
-minetest.add_to_creative_inventory('default:cactus')
-minetest.add_to_creative_inventory('default:papyrus')
-minetest.add_to_creative_inventory('default:bookshelf')
-minetest.add_to_creative_inventory('default:glass')
-minetest.add_to_creative_inventory('default:fence_wood')
-minetest.add_to_creative_inventory('default:rail')
-minetest.add_to_creative_inventory('default:mese')
-minetest.add_to_creative_inventory('default:chest')
-minetest.add_to_creative_inventory('default:furnace')
-minetest.add_to_creative_inventory('default:sign_wall')
-minetest.add_to_creative_inventory('default:water_source')
-minetest.add_to_creative_inventory('default:lava_source')
-minetest.add_to_creative_inventory('default:ladder')
-
---
--- Some common functions
---
-
-default.falling_node_names = {}
-
-function nodeupdate_single(p)
-       n = minetest.env:get_node(p)
-       if default.falling_node_names[n.name] ~= nil then
-               p_bottom = {x=p.x, y=p.y-1, z=p.z}
-               n_bottom = minetest.env:get_node(p_bottom)
-               if n_bottom.name == "air" then
-                       minetest.env:remove_node(p)
-                       minetest.env:add_entity(p, "default:falling_"..n.name)
-                       nodeupdate(p)
-               end
-       end
-end
-
-function nodeupdate(p)
-       for x = -1,1 do
-       for y = -1,1 do
-       for z = -1,1 do
-               p2 = {x=p.x+x, y=p.y+y, z=p.z+z}
-               nodeupdate_single(p2)
-       end
-       end
-       end
-end
-
---
--- Falling stuff
---
-
-function default.register_falling_node(nodename, texture)
-       default.falling_node_names[nodename] = true
-       -- Override naming conventions for stuff like :default:falling_default:sand
-       minetest.register_entity(":default:falling_"..nodename, {
-               -- Static definition
-               physical = true,
-               collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
-               visual = "cube",
-               textures = {texture,texture,texture,texture,texture,texture},
-               -- State
-               -- Methods
-               on_step = function(self, dtime)
-                       -- Set gravity
-                       self.object:setacceleration({x=0, y=-10, z=0})
-                       -- Turn to actual sand when collides to ground or just move
-                       local pos = self.object:getpos()
-                       local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
-                       local bcn = minetest.env:get_node(bcp)
-                       if bcn.name ~= "air" then
-                               -- Turn to a sand node
-                               local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
-                               minetest.env:add_node(np, {name=nodename})
-                               self.object:remove()
-                       else
-                               -- Do nothing
-                       end
-               end
-       })
-end
-
-default.register_falling_node("default:sand", "default_sand.png")
-default.register_falling_node("default:gravel", "default_gravel.png")
-
---
--- Global callbacks
---
-
--- Global environment step function
-function on_step(dtime)
-       -- print("on_step")
-end
-minetest.register_globalstep(on_step)
-
-function on_placenode(p, node)
-       --print("on_placenode")
-       nodeupdate(p)
-end
-minetest.register_on_placenode(on_placenode)
-
-function on_dignode(p, node)
-       --print("on_dignode")
-       nodeupdate(p)
-end
-minetest.register_on_dignode(on_dignode)
-
-function on_punchnode(p, node)
-end
-minetest.register_on_punchnode(on_punchnode)
-
-local function handle_give_command(cmd, giver, receiver, stackstring)
-       if not minetest.get_player_privs(giver)["give"] then
-               minetest.chat_send_player(giver, "error: you don't have permission to give")
-               return
-       end
-       minetest.debug("DEBUG: "..cmd..' invoked, stackstring="'..stackstring..'"')
-       minetest.log(cmd..' invoked, stackstring="'..stackstring..'"')
-       local itemstack = ItemStack(stackstring)
-       if itemstack:is_empty() then
-               minetest.chat_send_player(giver, 'error: cannot give an empty item')
-               return
-       elseif not itemstack:is_known() then
-               minetest.chat_send_player(giver, 'error: cannot give an unknown item')
-               return
-       end
-       local receiverref = minetest.env:get_player_by_name(receiver)
-       if receiverref == nil then
-               minetest.chat_send_player(giver, receiver..' is not a known player')
-               return
-       end
-       local leftover = receiverref:get_inventory():add_item("main", itemstack)
-       if leftover:is_empty() then
-               partiality = ""
-       elseif leftover:get_count() == itemstack:get_count() then
-               partiality = "could not be "
-       else
-               partiality = "partially "
-       end
-       -- The actual item stack string may be different from what the "giver"
-       -- entered (e.g. big numbers are always interpreted as 2^16-1).
-       stackstring = itemstack:to_string()
-       if giver == receiver then
-               minetest.chat_send_player(giver, '"'..stackstring
-                       ..'" '..partiality..'added to inventory.');
-       else
-               minetest.chat_send_player(giver, '"'..stackstring
-                       ..'" '..partiality..'added to '..receiver..'\'s inventory.');
-               minetest.chat_send_player(receiver, '"'..stackstring
-                       ..'" '..partiality..'added to inventory.');
-       end
-end
-
-minetest.register_on_chat_message(function(name, message)
-       --print("default on_chat_message: name="..dump(name).." message="..dump(message))
-       local cmd = "/giveme"
-       if message:sub(0, #cmd) == cmd then
-               local stackstring = string.match(message, cmd.." (.*)")
-               if stackstring == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' stackstring')
-                       return true -- Handled chat message
-               end
-               handle_give_command(cmd, name, name, stackstring)
-               return true
-       end
-       local cmd = "/give"
-       if message:sub(0, #cmd) == cmd then
-               local receiver, stackstring = string.match(message, cmd.." ([%a%d_-]+) (.*)")
-               if receiver == nil or stackstring == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' name stackstring')
-                       return true -- Handled chat message
-               end
-               handle_give_command(cmd, name, receiver, stackstring)
-               return true
-       end
-       local cmd = "/spawnentity"
-       if message:sub(0, #cmd) == cmd then
-               if not minetest.get_player_privs(name)["give"] then
-                       minetest.chat_send_player(name, "you don't have permission to spawn (give)")
-                       return true -- Handled chat message
-               end
-               if not minetest.get_player_privs(name)["interact"] then
-                       minetest.chat_send_player(name, "you don't have permission to interact")
-                       return true -- Handled chat message
-               end
-               local entityname = string.match(message, cmd.." (.*)")
-               if entityname == nil then
-                       minetest.chat_send_player(name, 'usage: '..cmd..' entityname')
-                       return true -- Handled chat message
-               end
-               print(cmd..' invoked, entityname="'..entityname..'"')
-               local player = minetest.env:get_player_by_name(name)
-               if player == nil then
-                       print("Unable to spawn entity, player is nil")
-                       return true -- Handled chat message
-               end
-               local p = player:getpos()
-               p.y = p.y + 1
-               minetest.env:add_entity(p, entityname)
-               minetest.chat_send_player(name, '"'..entityname
-                               ..'" spawned.');
-               return true -- Handled chat message
-       end
-       local cmd = "/pulverize"
-       if message:sub(0, #cmd) == cmd then
-               local player = minetest.env:get_player_by_name(name)
-               if player == nil then
-                       print("Unable to pulverize, player is nil")
-                       return true -- Handled chat message
-               end
-               if player:get_wielded_item():is_empty() then
-                       minetest.chat_send_player(name, 'Unable to pulverize, no item in hand.')
-               else
-                       player:set_wielded_item(nil)
-                       minetest.chat_send_player(name, 'An item was pulverized.')
-               end
-               return true
-       end
-end)
-
---
--- Done, print some random stuff
---
-
---print("minetest.registered_entities:")
---dump2(minetest.registered_entities)
-
--- END
diff --git a/data/mods/default/textures/crack.png b/data/mods/default/textures/crack.png
deleted file mode 100644 (file)
index 4997839..0000000
Binary files a/data/mods/default/textures/crack.png and /dev/null differ
diff --git a/data/mods/default/textures/default_apple.png b/data/mods/default/textures/default_apple.png
deleted file mode 100644 (file)
index 9593f28..0000000
Binary files a/data/mods/default/textures/default_apple.png and /dev/null differ
diff --git a/data/mods/default/textures/default_book.png b/data/mods/default/textures/default_book.png
deleted file mode 100644 (file)
index 176fb6a..0000000
Binary files a/data/mods/default/textures/default_book.png and /dev/null differ
diff --git a/data/mods/default/textures/default_bookshelf.png b/data/mods/default/textures/default_bookshelf.png
deleted file mode 100644 (file)
index 5ecc50f..0000000
Binary files a/data/mods/default/textures/default_bookshelf.png and /dev/null differ
diff --git a/data/mods/default/textures/default_brick.png b/data/mods/default/textures/default_brick.png
deleted file mode 100644 (file)
index 32d77f3..0000000
Binary files a/data/mods/default/textures/default_brick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_cactus_side.png b/data/mods/default/textures/default_cactus_side.png
deleted file mode 100644 (file)
index fc479fd..0000000
Binary files a/data/mods/default/textures/default_cactus_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_cactus_top.png b/data/mods/default/textures/default_cactus_top.png
deleted file mode 100644 (file)
index f9e68df..0000000
Binary files a/data/mods/default/textures/default_cactus_top.png and /dev/null differ
diff --git a/data/mods/default/textures/default_chest_front.png b/data/mods/default/textures/default_chest_front.png
deleted file mode 100644 (file)
index c5628af..0000000
Binary files a/data/mods/default/textures/default_chest_front.png and /dev/null differ
diff --git a/data/mods/default/textures/default_chest_lock.png b/data/mods/default/textures/default_chest_lock.png
deleted file mode 100644 (file)
index ae038fa..0000000
Binary files a/data/mods/default/textures/default_chest_lock.png and /dev/null differ
diff --git a/data/mods/default/textures/default_chest_side.png b/data/mods/default/textures/default_chest_side.png
deleted file mode 100644 (file)
index 916dd78..0000000
Binary files a/data/mods/default/textures/default_chest_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_chest_top.png b/data/mods/default/textures/default_chest_top.png
deleted file mode 100644 (file)
index 58c7967..0000000
Binary files a/data/mods/default/textures/default_chest_top.png and /dev/null differ
diff --git a/data/mods/default/textures/default_clay.png b/data/mods/default/textures/default_clay.png
deleted file mode 100644 (file)
index 3557429..0000000
Binary files a/data/mods/default/textures/default_clay.png and /dev/null differ
diff --git a/data/mods/default/textures/default_clay_brick.png b/data/mods/default/textures/default_clay_brick.png
deleted file mode 100644 (file)
index e36648e..0000000
Binary files a/data/mods/default/textures/default_clay_brick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_clay_lump.png b/data/mods/default/textures/default_clay_lump.png
deleted file mode 100644 (file)
index be0bab9..0000000
Binary files a/data/mods/default/textures/default_clay_lump.png and /dev/null differ
diff --git a/data/mods/default/textures/default_cloud.png b/data/mods/default/textures/default_cloud.png
deleted file mode 100644 (file)
index 24091a3..0000000
Binary files a/data/mods/default/textures/default_cloud.png and /dev/null differ
diff --git a/data/mods/default/textures/default_coal_lump.png b/data/mods/default/textures/default_coal_lump.png
deleted file mode 100644 (file)
index bad901e..0000000
Binary files a/data/mods/default/textures/default_coal_lump.png and /dev/null differ
diff --git a/data/mods/default/textures/default_cobble.png b/data/mods/default/textures/default_cobble.png
deleted file mode 100644 (file)
index 7d04474..0000000
Binary files a/data/mods/default/textures/default_cobble.png and /dev/null differ
diff --git a/data/mods/default/textures/default_dirt.png b/data/mods/default/textures/default_dirt.png
deleted file mode 100644 (file)
index 7cb9c89..0000000
Binary files a/data/mods/default/textures/default_dirt.png and /dev/null differ
diff --git a/data/mods/default/textures/default_fence.png b/data/mods/default/textures/default_fence.png
deleted file mode 100644 (file)
index 0b99f0e..0000000
Binary files a/data/mods/default/textures/default_fence.png and /dev/null differ
diff --git a/data/mods/default/textures/default_furnace_front.png b/data/mods/default/textures/default_furnace_front.png
deleted file mode 100644 (file)
index 1620a27..0000000
Binary files a/data/mods/default/textures/default_furnace_front.png and /dev/null differ
diff --git a/data/mods/default/textures/default_furnace_side.png b/data/mods/default/textures/default_furnace_side.png
deleted file mode 100644 (file)
index 63cb162..0000000
Binary files a/data/mods/default/textures/default_furnace_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_glass.png b/data/mods/default/textures/default_glass.png
deleted file mode 100644 (file)
index ade0196..0000000
Binary files a/data/mods/default/textures/default_glass.png and /dev/null differ
diff --git a/data/mods/default/textures/default_grass.png b/data/mods/default/textures/default_grass.png
deleted file mode 100644 (file)
index 3610bb2..0000000
Binary files a/data/mods/default/textures/default_grass.png and /dev/null differ
diff --git a/data/mods/default/textures/default_grass_footsteps.png b/data/mods/default/textures/default_grass_footsteps.png
deleted file mode 100644 (file)
index 57e063d..0000000
Binary files a/data/mods/default/textures/default_grass_footsteps.png and /dev/null differ
diff --git a/data/mods/default/textures/default_grass_side.png b/data/mods/default/textures/default_grass_side.png
deleted file mode 100644 (file)
index 4f4f680..0000000
Binary files a/data/mods/default/textures/default_grass_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_gravel.png b/data/mods/default/textures/default_gravel.png
deleted file mode 100644 (file)
index f08666a..0000000
Binary files a/data/mods/default/textures/default_gravel.png and /dev/null differ
diff --git a/data/mods/default/textures/default_iron_lump.png b/data/mods/default/textures/default_iron_lump.png
deleted file mode 100644 (file)
index edb9310..0000000
Binary files a/data/mods/default/textures/default_iron_lump.png and /dev/null differ
diff --git a/data/mods/default/textures/default_junglegrass.png b/data/mods/default/textures/default_junglegrass.png
deleted file mode 100644 (file)
index eea87c0..0000000
Binary files a/data/mods/default/textures/default_junglegrass.png and /dev/null differ
diff --git a/data/mods/default/textures/default_jungletree.png b/data/mods/default/textures/default_jungletree.png
deleted file mode 100644 (file)
index ccd20ac..0000000
Binary files a/data/mods/default/textures/default_jungletree.png and /dev/null differ
diff --git a/data/mods/default/textures/default_jungletree_top.png b/data/mods/default/textures/default_jungletree_top.png
deleted file mode 100644 (file)
index 2a9b513..0000000
Binary files a/data/mods/default/textures/default_jungletree_top.png and /dev/null differ
diff --git a/data/mods/default/textures/default_ladder.png b/data/mods/default/textures/default_ladder.png
deleted file mode 100644 (file)
index 1105635..0000000
Binary files a/data/mods/default/textures/default_ladder.png and /dev/null differ
diff --git a/data/mods/default/textures/default_lava.png b/data/mods/default/textures/default_lava.png
deleted file mode 100644 (file)
index cb02ada..0000000
Binary files a/data/mods/default/textures/default_lava.png and /dev/null differ
diff --git a/data/mods/default/textures/default_leaves.png b/data/mods/default/textures/default_leaves.png
deleted file mode 100644 (file)
index 7a25126..0000000
Binary files a/data/mods/default/textures/default_leaves.png and /dev/null differ
diff --git a/data/mods/default/textures/default_mese.png b/data/mods/default/textures/default_mese.png
deleted file mode 100644 (file)
index 4c876cd..0000000
Binary files a/data/mods/default/textures/default_mese.png and /dev/null differ
diff --git a/data/mods/default/textures/default_mineral_coal.png b/data/mods/default/textures/default_mineral_coal.png
deleted file mode 100644 (file)
index 3ff9692..0000000
Binary files a/data/mods/default/textures/default_mineral_coal.png and /dev/null differ
diff --git a/data/mods/default/textures/default_mineral_iron.png b/data/mods/default/textures/default_mineral_iron.png
deleted file mode 100644 (file)
index 51b15d9..0000000
Binary files a/data/mods/default/textures/default_mineral_iron.png and /dev/null differ
diff --git a/data/mods/default/textures/default_mossycobble.png b/data/mods/default/textures/default_mossycobble.png
deleted file mode 100644 (file)
index fad1b33..0000000
Binary files a/data/mods/default/textures/default_mossycobble.png and /dev/null differ
diff --git a/data/mods/default/textures/default_nc_back.png b/data/mods/default/textures/default_nc_back.png
deleted file mode 100644 (file)
index f09f416..0000000
Binary files a/data/mods/default/textures/default_nc_back.png and /dev/null differ
diff --git a/data/mods/default/textures/default_nc_front.png b/data/mods/default/textures/default_nc_front.png
deleted file mode 100644 (file)
index cad9eda..0000000
Binary files a/data/mods/default/textures/default_nc_front.png and /dev/null differ
diff --git a/data/mods/default/textures/default_nc_rb.png b/data/mods/default/textures/default_nc_rb.png
deleted file mode 100644 (file)
index 7ebc993..0000000
Binary files a/data/mods/default/textures/default_nc_rb.png and /dev/null differ
diff --git a/data/mods/default/textures/default_nc_side.png b/data/mods/default/textures/default_nc_side.png
deleted file mode 100644 (file)
index f954045..0000000
Binary files a/data/mods/default/textures/default_nc_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_paper.png b/data/mods/default/textures/default_paper.png
deleted file mode 100644 (file)
index ae5c06b..0000000
Binary files a/data/mods/default/textures/default_paper.png and /dev/null differ
diff --git a/data/mods/default/textures/default_papyrus.png b/data/mods/default/textures/default_papyrus.png
deleted file mode 100644 (file)
index bf0dec7..0000000
Binary files a/data/mods/default/textures/default_papyrus.png and /dev/null differ
diff --git a/data/mods/default/textures/default_rail.png b/data/mods/default/textures/default_rail.png
deleted file mode 100644 (file)
index 18176d9..0000000
Binary files a/data/mods/default/textures/default_rail.png and /dev/null differ
diff --git a/data/mods/default/textures/default_rail_crossing.png b/data/mods/default/textures/default_rail_crossing.png
deleted file mode 100644 (file)
index 9846405..0000000
Binary files a/data/mods/default/textures/default_rail_crossing.png and /dev/null differ
diff --git a/data/mods/default/textures/default_rail_curved.png b/data/mods/default/textures/default_rail_curved.png
deleted file mode 100644 (file)
index 62afa3d..0000000
Binary files a/data/mods/default/textures/default_rail_curved.png and /dev/null differ
diff --git a/data/mods/default/textures/default_rail_t_junction.png b/data/mods/default/textures/default_rail_t_junction.png
deleted file mode 100644 (file)
index 9985f63..0000000
Binary files a/data/mods/default/textures/default_rail_t_junction.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sand.png b/data/mods/default/textures/default_sand.png
deleted file mode 100644 (file)
index 15101a7..0000000
Binary files a/data/mods/default/textures/default_sand.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sandstone.png b/data/mods/default/textures/default_sandstone.png
deleted file mode 100644 (file)
index c4759b4..0000000
Binary files a/data/mods/default/textures/default_sandstone.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sapling.png b/data/mods/default/textures/default_sapling.png
deleted file mode 100644 (file)
index 73f5023..0000000
Binary files a/data/mods/default/textures/default_sapling.png and /dev/null differ
diff --git a/data/mods/default/textures/default_scorched_stuff.png b/data/mods/default/textures/default_scorched_stuff.png
deleted file mode 100644 (file)
index 9ced2fb..0000000
Binary files a/data/mods/default/textures/default_scorched_stuff.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sign.png b/data/mods/default/textures/default_sign.png
deleted file mode 100644 (file)
index 2e0b3cb..0000000
Binary files a/data/mods/default/textures/default_sign.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sign_back.png b/data/mods/default/textures/default_sign_back.png
deleted file mode 100644 (file)
index 779e4bc..0000000
Binary files a/data/mods/default/textures/default_sign_back.png and /dev/null differ
diff --git a/data/mods/default/textures/default_sign_wall.png b/data/mods/default/textures/default_sign_wall.png
deleted file mode 100644 (file)
index 06eac1e..0000000
Binary files a/data/mods/default/textures/default_sign_wall.png and /dev/null differ
diff --git a/data/mods/default/textures/default_steel_block.png b/data/mods/default/textures/default_steel_block.png
deleted file mode 100644 (file)
index 8e20200..0000000
Binary files a/data/mods/default/textures/default_steel_block.png and /dev/null differ
diff --git a/data/mods/default/textures/default_steel_ingot.png b/data/mods/default/textures/default_steel_ingot.png
deleted file mode 100644 (file)
index f6c9414..0000000
Binary files a/data/mods/default/textures/default_steel_ingot.png and /dev/null differ
diff --git a/data/mods/default/textures/default_stick.png b/data/mods/default/textures/default_stick.png
deleted file mode 100644 (file)
index 2d31797..0000000
Binary files a/data/mods/default/textures/default_stick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_stone.png b/data/mods/default/textures/default_stone.png
deleted file mode 100644 (file)
index cad0dbe..0000000
Binary files a/data/mods/default/textures/default_stone.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tnt_bottom.png b/data/mods/default/textures/default_tnt_bottom.png
deleted file mode 100644 (file)
index 8ba2fca..0000000
Binary files a/data/mods/default/textures/default_tnt_bottom.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tnt_side.png b/data/mods/default/textures/default_tnt_side.png
deleted file mode 100644 (file)
index d9a2bc4..0000000
Binary files a/data/mods/default/textures/default_tnt_side.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tnt_top.png b/data/mods/default/textures/default_tnt_top.png
deleted file mode 100644 (file)
index a84ffc9..0000000
Binary files a/data/mods/default/textures/default_tnt_top.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_mesepick.png b/data/mods/default/textures/default_tool_mesepick.png
deleted file mode 100644 (file)
index a1f3812..0000000
Binary files a/data/mods/default/textures/default_tool_mesepick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_steelaxe.png b/data/mods/default/textures/default_tool_steelaxe.png
deleted file mode 100644 (file)
index 0ad23c9..0000000
Binary files a/data/mods/default/textures/default_tool_steelaxe.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_steelpick.png b/data/mods/default/textures/default_tool_steelpick.png
deleted file mode 100644 (file)
index 7982daf..0000000
Binary files a/data/mods/default/textures/default_tool_steelpick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_steelshovel.png b/data/mods/default/textures/default_tool_steelshovel.png
deleted file mode 100644 (file)
index ed84138..0000000
Binary files a/data/mods/default/textures/default_tool_steelshovel.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_steelsword.png b/data/mods/default/textures/default_tool_steelsword.png
deleted file mode 100644 (file)
index a745812..0000000
Binary files a/data/mods/default/textures/default_tool_steelsword.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_stoneaxe.png b/data/mods/default/textures/default_tool_stoneaxe.png
deleted file mode 100644 (file)
index 698ac91..0000000
Binary files a/data/mods/default/textures/default_tool_stoneaxe.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_stonepick.png b/data/mods/default/textures/default_tool_stonepick.png
deleted file mode 100644 (file)
index b34de6f..0000000
Binary files a/data/mods/default/textures/default_tool_stonepick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_stoneshovel.png b/data/mods/default/textures/default_tool_stoneshovel.png
deleted file mode 100644 (file)
index ba52431..0000000
Binary files a/data/mods/default/textures/default_tool_stoneshovel.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_stonesword.png b/data/mods/default/textures/default_tool_stonesword.png
deleted file mode 100644 (file)
index 8f8191f..0000000
Binary files a/data/mods/default/textures/default_tool_stonesword.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_woodaxe.png b/data/mods/default/textures/default_tool_woodaxe.png
deleted file mode 100644 (file)
index 3daa4af..0000000
Binary files a/data/mods/default/textures/default_tool_woodaxe.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_woodpick.png b/data/mods/default/textures/default_tool_woodpick.png
deleted file mode 100644 (file)
index ea728cc..0000000
Binary files a/data/mods/default/textures/default_tool_woodpick.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_woodshovel.png b/data/mods/default/textures/default_tool_woodshovel.png
deleted file mode 100644 (file)
index 649ab4c..0000000
Binary files a/data/mods/default/textures/default_tool_woodshovel.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tool_woodsword.png b/data/mods/default/textures/default_tool_woodsword.png
deleted file mode 100644 (file)
index d6c6be3..0000000
Binary files a/data/mods/default/textures/default_tool_woodsword.png and /dev/null differ
diff --git a/data/mods/default/textures/default_torch.png b/data/mods/default/textures/default_torch.png
deleted file mode 100644 (file)
index 7a953c2..0000000
Binary files a/data/mods/default/textures/default_torch.png and /dev/null differ
diff --git a/data/mods/default/textures/default_torch_on_ceiling.png b/data/mods/default/textures/default_torch_on_ceiling.png
deleted file mode 100644 (file)
index 6965d38..0000000
Binary files a/data/mods/default/textures/default_torch_on_ceiling.png and /dev/null differ
diff --git a/data/mods/default/textures/default_torch_on_floor.png b/data/mods/default/textures/default_torch_on_floor.png
deleted file mode 100644 (file)
index 76d1dd5..0000000
Binary files a/data/mods/default/textures/default_torch_on_floor.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tree.png b/data/mods/default/textures/default_tree.png
deleted file mode 100644 (file)
index 65abfc2..0000000
Binary files a/data/mods/default/textures/default_tree.png and /dev/null differ
diff --git a/data/mods/default/textures/default_tree_top.png b/data/mods/default/textures/default_tree_top.png
deleted file mode 100644 (file)
index 2cdd94f..0000000
Binary files a/data/mods/default/textures/default_tree_top.png and /dev/null differ
diff --git a/data/mods/default/textures/default_water.png b/data/mods/default/textures/default_water.png
deleted file mode 100644 (file)
index e5f8cdc..0000000
Binary files a/data/mods/default/textures/default_water.png and /dev/null differ
diff --git a/data/mods/default/textures/default_wood.png b/data/mods/default/textures/default_wood.png
deleted file mode 100644 (file)
index 57c1d7c..0000000
Binary files a/data/mods/default/textures/default_wood.png and /dev/null differ
diff --git a/data/mods/default/textures/heart.png b/data/mods/default/textures/heart.png
deleted file mode 100644 (file)
index 6bc183e..0000000
Binary files a/data/mods/default/textures/heart.png and /dev/null differ
diff --git a/data/mods/default/textures/player.png b/data/mods/default/textures/player.png
deleted file mode 100644 (file)
index 90adf97..0000000
Binary files a/data/mods/default/textures/player.png and /dev/null differ
diff --git a/data/mods/default/textures/player_back.png b/data/mods/default/textures/player_back.png
deleted file mode 100644 (file)
index 530aa75..0000000
Binary files a/data/mods/default/textures/player_back.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox1.png b/data/mods/default/textures/skybox1.png
deleted file mode 100644 (file)
index 9801d5f..0000000
Binary files a/data/mods/default/textures/skybox1.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox1_dawn.png b/data/mods/default/textures/skybox1_dawn.png
deleted file mode 100644 (file)
index 9711c47..0000000
Binary files a/data/mods/default/textures/skybox1_dawn.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox1_night.png b/data/mods/default/textures/skybox1_night.png
deleted file mode 100644 (file)
index 32e43a6..0000000
Binary files a/data/mods/default/textures/skybox1_night.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox2.png b/data/mods/default/textures/skybox2.png
deleted file mode 100644 (file)
index a8c94b4..0000000
Binary files a/data/mods/default/textures/skybox2.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox2_dawn.png b/data/mods/default/textures/skybox2_dawn.png
deleted file mode 100644 (file)
index a761dff..0000000
Binary files a/data/mods/default/textures/skybox2_dawn.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox2_night.png b/data/mods/default/textures/skybox2_night.png
deleted file mode 100644 (file)
index beb07a9..0000000
Binary files a/data/mods/default/textures/skybox2_night.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox3.png b/data/mods/default/textures/skybox3.png
deleted file mode 100644 (file)
index 2776ec7..0000000
Binary files a/data/mods/default/textures/skybox3.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox3_dawn.png b/data/mods/default/textures/skybox3_dawn.png
deleted file mode 100644 (file)
index 22c8cbe..0000000
Binary files a/data/mods/default/textures/skybox3_dawn.png and /dev/null differ
diff --git a/data/mods/default/textures/skybox3_night.png b/data/mods/default/textures/skybox3_night.png
deleted file mode 100644 (file)
index bb50978..0000000
Binary files a/data/mods/default/textures/skybox3_night.png and /dev/null differ
diff --git a/data/mods/default/textures/treeprop.png b/data/mods/default/textures/treeprop.png
deleted file mode 100644 (file)
index 77ea4d6..0000000
Binary files a/data/mods/default/textures/treeprop.png and /dev/null differ
diff --git a/data/mods/default/textures/wieldhand.png b/data/mods/default/textures/wieldhand.png
deleted file mode 100644 (file)
index c4549e5..0000000
Binary files a/data/mods/default/textures/wieldhand.png and /dev/null differ
diff --git a/data/mods/experimental/depends.txt b/data/mods/experimental/depends.txt
deleted file mode 100644 (file)
index 3a7daa1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-default
-
diff --git a/data/mods/experimental/init.lua b/data/mods/experimental/init.lua
deleted file mode 100644 (file)
index 1ee3fdc..0000000
+++ /dev/null
@@ -1,616 +0,0 @@
---
--- Experimental things
---
-
--- For testing random stuff
-
-experimental = {}
-
-function on_step(dtime)
-       -- print("experimental on_step")
-       --[[
-       objs = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 10)
-       for k, obj in pairs(objs) do
-               name = obj:get_player_name()
-               if name then
-                       print(name.." at "..dump(obj:getpos()))
-                       print(name.." dir: "..dump(obj:get_look_dir()))
-                       print(name.." pitch: "..dump(obj:get_look_pitch()))
-                       print(name.." yaw: "..dump(obj:get_look_yaw()))
-               else
-                       print("Some object at "..dump(obj:getpos()))
-               end
-       end
-       --]]
-       --[[
-       if experimental.t1 == nil then
-               experimental.t1 = 0
-       end
-       experimental.t1 = experimental.t1 + dtime
-       if experimental.t1 >= 2 then
-               experimental.t1 = experimental.t1 - 2
-               minetest.log("time of day is "..minetest.env:get_timeofday())
-               if experimental.day then
-                       minetest.log("forcing day->night")
-                       experimental.day = false
-                       minetest.env:set_timeofday(0.0)
-               else
-                       minetest.log("forcing night->day")
-                       experimental.day = true
-                       minetest.env:set_timeofday(0.5)
-               end
-               minetest.log("time of day is "..minetest.env:get_timeofday())
-       end
-       --]]
-end
-minetest.register_globalstep(on_step)
-
--- An example furnace-thing implemented in Lua
-
---[[
-minetest.register_node("experimental:luafurnace", {
-       tile_images = {"default_lava.png", "default_furnace_side.png",
-               "default_furnace_side.png", "default_furnace_side.png",
-               "default_furnace_side.png", "default_furnace_front.png"},
-       --inventory_image = "furnace_front.png",
-       inventory_image = minetest.inventorycube("default_furnace_front.png"),
-       paramtype = "facedir_simple",
-       metadata_name = "generic",
-       material = minetest.digprop_stonelike(3.0),
-})
-
-minetest.register_on_placenode(function(pos, newnode, placer)
-       if newnode.name == "experimental:luafurnace" then
-               local meta = minetest.env:get_meta(pos)
-               meta:inventory_set_list("fuel", {""})
-               meta:inventory_set_list("src", {""})
-               meta:inventory_set_list("dst", {"","","",""})
-               meta:set_inventory_draw_spec(
-                       "invsize[8,9;]"
-                       .."list[current_name;fuel;2,3;1,1;]"
-                       .."list[current_name;src;2,1;1,1;]"
-                       .."list[current_name;dst;5,1;2,2;]"
-                       .."list[current_player;main;0,5;8,4;]"
-               )
-               
-               local total_cooked = 0;
-               meta:set_string("total_cooked", total_cooked)
-               meta:set_infotext("Lua Furnace: total cooked: "..total_cooked)
-       end
-end)
-
-minetest.register_abm({
-       nodenames = {"experimental:luafurnace"},
-       interval = 1.0,
-       chance = 1,
-       action = function(pos, node, active_object_count, active_object_count_wider)
-               local meta = minetest.env:get_meta(pos)
-               for i, name in ipairs({
-                               "fuel_totaltime",
-                               "fuel_time",
-                               "src_totaltime",
-                               "src_time"
-               }) do
-                       if not meta:get_string(name) then
-                               meta:set_string(name, 0)
-                       end
-               end
-
-               local inv = meta:get_inventory()
-               
-               local fuelitem = inv:get_stack("fuel", 1):peek_item()
-               local srcitem = inv:get_stack("src", 1):peek_item()
-               --print("fuelitem="..dump(fuelitem))
-               --print("srcitem="..dump(srcitem))
-               
-               local was_active = false
-
-               local src_cooktime = -1
-               local result_stackstring = nil
-               
-               if srcitem then
-                       local prop = get_item_definition(srcitem)
-                       if prop and prop.cookresult_itemstring ~= "" then
-                               result_stackstring = prop.cookresult_itemstring
-                               src_cooktime = prop.furnace_cooktime or 3
-                       end
-               end
-
-               print("src_cooktime="..dump(src_cooktime))
-               print("result_stackstring="..dump(result_stackstring))
-
-               if tonumber(meta:get_string("fuel_time")) < tonumber(meta:get_string("fuel_totaltime")) then
-                       was_active = true
-                       meta:set_string("fuel_time", tonumber(meta:get_string("fuel_time")) + 1)
-                       meta:set_string("src_time", tonumber(meta:get_string("src_time")) + 1)
-                       --print("result_stackstring="..dump(result_stackstring))
-                       --print('tonumber(meta:get_string("src_time"))='..dump(tonumber(meta:get_string("src_time"))))
-                       --print("src_cooktime="..dump(src_cooktime))
-                       if result_stackstring and tonumber(meta:get_string("src_time")) >= src_cooktime and src_cooktime >= 0 then
-                               -- Put result in "dst" list
-                               success = inv:autoinsert_stackstring("dst", result_stackstring)
-                               if not success then
-                                       print("Could not autoinsert '"..result_stackstring.."'")
-                               end
-                               -- If succeeded, take stuff from "src" list
-                               if success then
-                                       srcstack = inv:get_stack("src", 1)
-                                       srcstack:take_item()
-                                       inv:set_stack("src", 1, srcstack)
-                               end
-                               meta:set_string("src_time", 0)
-                       end
-               end
-               
-               if tonumber(meta:get_string("fuel_time")) < tonumber(meta:get_string("fuel_totaltime")) then
-                       meta:set_infotext("Furnace active: "..(tonumber(meta:get_string("fuel_time"))/tonumber(meta:get_string("fuel_totaltime"))*100).."%")
-                       return
-               end
-
-               local srcitem = inv:get_stack("src", 1):peek_item()
-
-               local src_cooktime = 0
-               local result_stackstring = nil
-               
-               if srcitem then
-                       local prop = get_item_definition(srcitem)
-                       if prop and prop.cookresult_itemstring ~= "" then
-                               result_stackstring = prop.cookresult_itemstring
-                               src_cooktime = prop.furnace_cooktime or 3
-                       end
-               end
-
-               local fuelitem = inv:get_stack("fuel", 1):peek_item()
-
-               if not result_stackstring or not fuelitem then
-                       if was_active then
-                               meta:set_infotext("Furnace is empty")
-                       end
-                       return
-               end
-
-               local burntime = -1
-               if fuelitem then
-                       local prop = get_item_definition(fuelitem)
-                       if prop then
-                               burntime = prop.furnace_burntime or -1
-                       end
-               end
-
-               if burntime <= 0 then
-                       meta:set_infotext("Furnace out of fuel")
-                       return
-               end
-
-               meta:set_string("fuel_totaltime", burntime)
-               meta:set_string("fuel_time", 0)
-               
-               local stack = inv:get_stack("fuel", 1)
-               stack:take_item()
-               inv:set_stack("fuel", 1, stack)
-       end,
-})
-minetest.register_abm({
-       nodenames = {"experimental:luafurnace"},
-       interval = 1.0,
-       chance = 1,
-       action = function(pos, node, active_object_count, active_object_count_wider)
-               local meta = minetest.env:get_meta(pos)
-               local fuellist = meta:inventory_get_list("fuel")
-               local srclist = meta:inventory_get_list("src")
-               local dstlist = meta:inventory_get_list("dst")
-               if fuellist == nil or srclist == nil or dstlist == nil then
-                       return
-               end
-               _, srcitem = stackstring_take_item(srclist[1])
-               _, fuelitem = stackstring_take_item(fuellist[1])
-               if not srcitem or not fuelitem then return end
-               if fuelitem.type == "node" then
-                       local prop = minetest.registered_nodes[fuelitem.name]
-                       if prop == nil then return end
-                       if prop.furnace_burntime < 0 then return end
-               else
-                       return
-               end
-               local resultstack = nil
-               if srcitem.type == "node" then
-                       local prop = minetest.registered_nodes[srcitem.name]
-                       if prop == nil then return end
-                       if prop.cookresult_item == "" then return end
-                       resultstack = prop.cookresult_item
-               else
-                       return
-               end
-
-               if resultstack == nil then
-                       return
-               end
-
-               dstlist[1], success = stackstring_put_stackstring(dstlist[1], resultstack)
-               if not success then
-                       return
-               end
-
-               fuellist[1], _ = stackstring_take_item(fuellist[1])
-               srclist[1], _ = stackstring_take_item(srclist[1])
-
-               meta:inventory_set_list("fuel", fuellist)
-               meta:inventory_set_list("src", srclist)
-               meta:inventory_set_list("dst", dstlist)
-
-               local total_cooked = meta:get_string("total_cooked")
-               total_cooked = tonumber(total_cooked) + 1
-               meta:set_string("total_cooked", total_cooked)
-               meta:set_infotext("Lua Furnace: total cooked: "..total_cooked)
-       end,
-})
-minetest.register_craft({
-       output = 'node "experimental:luafurnace" 1',
-       recipe = {
-               {'node "default:cobble"', 'node "default:cobble"', 'node "default:cobble"'},
-               {'node "default:cobble"', 'node "default:steel_ingot"', 'node "default:cobble"'},
-               {'node "default:cobble"', 'node "default:cobble"', 'node "default:cobble"'},
-       }
-})
---]]
-
---
--- Random stuff
---
-
---[[
-minetest.register_tool("experimental:horribletool", {
-       image = "default_lava.png",
-       basetime = 2.0
-       dt_weight = 0.2
-       dt_crackiness = 0.2
-       dt_crumbliness = 0.2
-       dt_cuttability = 0.2
-       basedurability = 50
-       dd_weight = -5
-       dd_crackiness = -5
-       dd_crumbliness = -5
-       dd_cuttability = -5
-})
---]]
-
---
--- TNT (not functional)
---
-
-minetest.register_craft({
-       output = 'experimental:tnt',
-       recipe = {
-               {'default:wood'},
-               {'default:coal_lump'},
-               {'default:wood'}
-       }
-})
-
-minetest.register_node("experimental:tnt", {
-       tile_images = {"default_tnt_top.png", "default_tnt_bottom.png",
-                       "default_tnt_side.png", "default_tnt_side.png",
-                       "default_tnt_side.png", "default_tnt_side.png"},
-       inventory_image = minetest.inventorycube("default_tnt_top.png",
-                       "default_tnt_side.png", "default_tnt_side.png"),
-       drop = '', -- Get nothing
-       material = {
-               diggability = "not",
-       },
-})
-
-minetest.register_on_punchnode(function(p, node)
-       if node.name == "experimental:tnt" then
-               minetest.env:remove_node(p)
-               minetest.env:add_entity(p, "experimental:tnt")
-               nodeupdate(p)
-       end
-end)
-
-local TNT = {
-       -- Static definition
-       physical = true, -- Collides with things
-       -- weight = 5,
-       collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
-       visual = "cube",
-       textures = {"default_tnt_top.png", "default_tnt_bottom.png",
-                       "default_tnt_side.png", "default_tnt_side.png",
-                       "default_tnt_side.png", "default_tnt_side.png"},
-       -- Initial value for our timer
-       timer = 0,
-       -- Number of punches required to defuse
-       health = 1,
-       blinktimer = 0,
-       blinkstatus = true,
-}
-
--- Called when a TNT object is created
-function TNT:on_activate(staticdata)
-       print("TNT:on_activate()")
-       self.object:setvelocity({x=0, y=4, z=0})
-       self.object:setacceleration({x=0, y=-10, z=0})
-       self.object:settexturemod("^[brighten")
-       self.object:set_armor_groups({immortal=1})
-end
-
--- Called periodically
-function TNT:on_step(dtime)
-       --print("TNT:on_step()")
-       self.timer = self.timer + dtime
-       self.blinktimer = self.blinktimer + dtime
-       if self.blinktimer > 0.5 then
-               self.blinktimer = self.blinktimer - 0.5
-               if self.blinkstatus then
-                       self.object:settexturemod("")
-               else
-                       self.object:settexturemod("^[brighten")
-               end
-               self.blinkstatus = not self.blinkstatus
-       end
-end
-
--- Called when object is punched
-function TNT:on_punch(hitter)
-       print("TNT:on_punch()")
-       self.health = self.health - 1
-       if self.health <= 0 then
-               self.object:remove()
-               hitter:get_inventory():add_item("main", "experimental:tnt")
-               --hitter:set_hp(hitter:get_hp() - 1)
-       end
-end
-
--- Called when object is right-clicked
-function TNT:on_rightclick(clicker)
-       --pos = self.object:getpos()
-       --pos = {x=pos.x, y=pos.y+0.1, z=pos.z}
-       --self.object:moveto(pos, false)
-end
-
---print("TNT dump: "..dump(TNT))
---print("Registering TNT");
-minetest.register_entity("experimental:tnt", TNT)
-
--- Add TNT's old name also
-minetest.register_alias("TNT", "experimental:tnt")
-
---
--- The dummyball!
---
-
-minetest.register_entity("experimental:dummyball", {
-       -- Static definition
-       hp_max = 20,
-       physical = false,
-       collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
-       visual = "sprite",
-       visual_size = {x=1, y=1},
-       textures = {"experimental_dummyball.png"},
-       spritediv = {x=1, y=3},
-       initial_sprite_basepos = {x=0, y=0},
-       -- Dynamic variables
-       phase = 0,
-       phasetimer = 0,
-
-       on_activate = function(self, staticdata)
-               minetest.log("Dummyball activated!")
-       end,
-
-       on_step = function(self, dtime)
-               self.phasetimer = self.phasetimer + dtime
-               if self.phasetimer > 2.0 then
-                       self.phasetimer = self.phasetimer - 2.0
-                       self.phase = self.phase + 1
-                       if self.phase >= 3 then
-                               self.phase = 0
-                       end
-                       self.object:setsprite({x=0, y=self.phase})
-                       phasearmor = {
-                               [0]={cracky=3},
-                               [1]={crumbly=3},
-                               [2]={fleshy=3}
-                       }
-                       self.object:set_armor_groups(phasearmor[self.phase])
-               end
-       end,
-
-       on_punch = function(self, hitter)
-       end,
-})
-
-minetest.register_on_chat_message(function(name, message)
-       local cmd = "/dummyball"
-       if message:sub(0, #cmd) == cmd then
-               if not minetest.get_player_privs(name)["give"] then
-                       minetest.chat_send_player(name, "you don't have permission to spawn (give)")
-                       return true -- Handled chat message
-               end
-               if not minetest.get_player_privs(name)["interact"] then
-                       minetest.chat_send_player(name, "you don't have permission to interact")
-                       return true -- Handled chat message
-               end
-               local player = minetest.env:get_player_by_name(name)
-               if player == nil then
-                       print("Unable to spawn entity, player is nil")
-                       return true -- Handled chat message
-               end
-               local entityname = "experimental:dummyball"
-               local p = player:getpos()
-               p.y = p.y + 1
-               minetest.env:add_entity(p, entityname)
-               minetest.chat_send_player(name, '"'..entityname
-                               ..'" spawned.');
-               return true -- Handled chat message
-       end
-end)
-
---
--- A test entity for testing animated and yaw-modulated sprites
---
-
-minetest.register_entity("experimental:testentity", {
-       -- Static definition
-       physical = true, -- Collides with things
-       -- weight = 5,
-       collisionbox = {-0.7,-1.35,-0.7, 0.7,1.0,0.7},
-       --collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
-       visual = "sprite",
-       visual_size = {x=2, y=3},
-       textures = {"dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"},
-       spritediv = {x=6, y=5},
-       initial_sprite_basepos = {x=0, y=0},
-
-       on_activate = function(self, staticdata)
-               print("testentity.on_activate")
-               self.object:setsprite({x=0,y=0}, 1, 0, true)
-               --self.object:setsprite({x=0,y=0}, 4, 0.3, true)
-
-               -- Set gravity
-               self.object:setacceleration({x=0, y=-10, z=0})
-               -- Jump a bit upwards
-               self.object:setvelocity({x=0, y=10, z=0})
-       end,
-
-       on_punch = function(self, hitter)
-               self.object:remove()
-               hitter:add_to_inventory('craft testobject1 1')
-       end,
-})
-
---
--- More random stuff
---
-
-minetest.register_on_respawnplayer(function(player)
-       print("on_respawnplayer")
-       -- player:setpos({x=0, y=30, z=0})
-       -- return true
-end)
-
-minetest.register_on_generated(function(minp, maxp)
-       --print("on_generated: minp="..dump(minp).." maxp="..dump(maxp))
-       --cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2}
-       --minetest.env:add_node(cp, {name="sand"})
-end)
-
--- Example setting get
---print("setting max_users = " .. dump(minetest.setting_get("max_users")))
---print("setting asdf = " .. dump(minetest.setting_get("asdf")))
-
-minetest.register_on_chat_message(function(name, message)
-       --[[print("on_chat_message: name="..dump(name).." message="..dump(message))
-       local cmd = "/testcommand"
-       if message:sub(0, #cmd) == cmd then
-               print(cmd.." invoked")
-               return true
-       end
-       local cmd = "/help"
-       if message:sub(0, #cmd) == cmd then
-               print("script-overridden help command")
-               minetest.chat_send_all("script-overridden help command")
-               return true
-       end]]
-end)
-
--- Grow papyrus on TNT every 10 seconds
---[[minetest.register_abm({
-       nodenames = {"TNT"},
-       interval = 10.0,
-       chance = 1,
-       action = function(pos, node, active_object_count, active_object_count_wider)
-               print("TNT ABM action")
-               pos.y = pos.y + 1
-               minetest.env:add_node(pos, {name="papyrus"})
-       end,
-})]]
-
--- Replace texts of alls signs with "foo" every 10 seconds
---[[minetest.register_abm({
-       nodenames = {"sign_wall"},
-       interval = 10.0,
-       chance = 1,
-       action = function(pos, node, active_object_count, active_object_count_wider)
-               print("ABM: Sign text changed")
-               local meta = minetest.env:get_meta(pos)
-               meta:set_text("foo")
-       end,
-})]]
-
---[[local ncpos = nil
-local ncq = 1
-local ncstuff = {
-    {2, 1, 0, 3}, {3, 0, 1, 2}, {4, -1, 0, 1}, {5, -1, 0, 1}, {6, 0, -1, 0},
-    {7, 0, -1, 0}, {8, 1, 0, 3}, {9, 1, 0, 3}, {10, 1, 0, 3}, {11, 0, 1, 2},
-    {12, 0, 1, 2}, {13, 0, 1, 2}, {14, -1, 0, 1}, {15, -1, 0, 1}, {16, -1, 0, 1},
-    {17, -1, 0, 1}, {18, 0, -1, 0}, {19, 0, -1, 0}, {20, 0, -1, 0}, {21, 0, -1, 0},
-    {22, 1, 0, 3}, {23, 1, 0, 3}, {24, 1, 0, 3}, {25, 1, 0, 3}, {10, 0, 1, 2}
-}
-local ncold = {}
-local nctime = nil
-
-minetest.register_abm({
-    nodenames = {"dirt_with_grass"},
-    interval = 100000.0,
-    chance = 1,
-    action = function(pos, node, active_object_count, active_object_count_wider)
-        if ncpos ~= nil then
-            return
-        end
-       
-        if pos.x % 16 ~= 8 or pos.z % 16 ~= 8 then
-            return
-        end
-       
-        pos.y = pos.y + 1
-        n = minetest.env:get_node(pos)
-        print(dump(n))
-        if n.name ~= "air" then
-            return
-        end
-
-        pos.y = pos.y + 2
-        ncpos = pos
-        nctime = os.clock()
-        minetest.env:add_node(ncpos, {name="nyancat"})
-    end
-})
-
-minetest.register_abm({
-    nodenames = {"nyancat"},
-    interval = 1.0,
-    chance = 1,
-    action = function(pos, node, active_object_count, active_object_count_wider)
-        if ncpos == nil then
-            return
-        end
-        if pos.x == ncpos.x and pos.y == ncpos.y and pos.z == ncpos.z then
-            clock = os.clock()
-            if clock - nctime < 0.1 then
-                return
-            end
-            nctime = clock
-           
-            s0 = ncstuff[ncq]
-            ncq = s0[1]
-            s1 = ncstuff[ncq]
-            p0 = pos
-            p1 = {x = p0.x + s0[2], y = p0.y, z = p0.z + s0[3]}
-            p2 = {x = p1.x + s1[2], y = p1.y, z = p1.z + s1[3]}
-            table.insert(ncold, 1, p0)
-            while #ncold >= 10 do
-                minetest.env:add_node(ncold[#ncold], {name="air"})
-                table.remove(ncold, #ncold)
-            end
-            minetest.env:add_node(p0, {name="nyancat_rainbow"})
-            minetest.env:add_node(p1, {name="nyancat", param1=s0[4]})
-            minetest.env:add_node(p2, {name="air"})
-            ncpos = p1
-        end
-    end,
-})--]]
-
-print("experimental modname="..dump(minetest.get_current_modname()))
-print("experimental modpath="..dump(minetest.get_modpath("experimental")))
-print("experimental worldpath="..dump(minetest.get_worldpath()))
-
--- END
diff --git a/data/mods/experimental/textures/experimental_dummyball.png b/data/mods/experimental/textures/experimental_dummyball.png
deleted file mode 100644 (file)
index 0846765..0000000
Binary files a/data/mods/experimental/textures/experimental_dummyball.png and /dev/null differ
diff --git a/data/mods/give_initial_stuff/depends.txt b/data/mods/give_initial_stuff/depends.txt
deleted file mode 100644 (file)
index 3a7daa1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-default
-
diff --git a/data/mods/give_initial_stuff/init.lua b/data/mods/give_initial_stuff/init.lua
deleted file mode 100644 (file)
index 9cf6b51..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-minetest.register_on_newplayer(function(player)
-       print("on_newplayer")
-       if minetest.setting_getbool("give_initial_stuff") then
-               print("giving give_initial_stuff to player")
-               player:get_inventory():add_item('main', 'default:pick_steel')
-               player:get_inventory():add_item('main', 'default:torch 99')
-               player:get_inventory():add_item('main', 'default:axe_steel')
-               player:get_inventory():add_item('main', 'default:shovel_steel')
-               player:get_inventory():add_item('main', 'default:cobble 99')
-       end
-end)
-
diff --git a/data/mods/legacy/depends.txt b/data/mods/legacy/depends.txt
deleted file mode 100644 (file)
index 3a7daa1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-default
-
diff --git a/data/mods/legacy/init.lua b/data/mods/legacy/init.lua
deleted file mode 100644 (file)
index 7f9088c..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
--- legacy (Minetest 0.4 mod)
--- Provides as much backwards-compatibility as feasible
-
---
--- Aliases to support loading 0.3 and old 0.4 worlds and inventories
---
-
-minetest.register_alias("stone", "default:stone")
-minetest.register_alias("stone_with_coal", "default:stone_with_coal")
-minetest.register_alias("stone_with_iron", "default:stone_with_iron")
-minetest.register_alias("dirt_with_grass", "default:dirt_with_grass")
-minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps")
-minetest.register_alias("dirt", "default:dirt")
-minetest.register_alias("sand", "default:sand")
-minetest.register_alias("gravel", "default:gravel")
-minetest.register_alias("sandstone", "default:sandstone")
-minetest.register_alias("clay", "default:clay")
-minetest.register_alias("brick", "default:brick")
-minetest.register_alias("tree", "default:tree")
-minetest.register_alias("jungletree", "default:jungletree")
-minetest.register_alias("junglegrass", "default:junglegrass")
-minetest.register_alias("leaves", "default:leaves")
-minetest.register_alias("cactus", "default:cactus")
-minetest.register_alias("papyrus", "default:papyrus")
-minetest.register_alias("bookshelf", "default:bookshelf")
-minetest.register_alias("glass", "default:glass")
-minetest.register_alias("wooden_fence", "default:fence_wood")
-minetest.register_alias("rail", "default:rail")
-minetest.register_alias("ladder", "default:ladder")
-minetest.register_alias("wood", "default:wood")
-minetest.register_alias("mese", "default:mese")
-minetest.register_alias("cloud", "default:cloud")
-minetest.register_alias("water_flowing", "default:water_flowing")
-minetest.register_alias("water_source", "default:water_source")
-minetest.register_alias("lava_flowing", "default:lava_flowing")
-minetest.register_alias("lava_source", "default:lava_source")
-minetest.register_alias("torch", "default:torch")
-minetest.register_alias("sign_wall", "default:sign_wall")
-minetest.register_alias("furnace", "default:furnace")
-minetest.register_alias("chest", "default:chest")
-minetest.register_alias("locked_chest", "default:chest_locked")
-minetest.register_alias("cobble", "default:cobble")
-minetest.register_alias("mossycobble", "default:mossycobble")
-minetest.register_alias("steelblock", "default:steelblock")
-minetest.register_alias("nyancat", "default:nyancat")
-minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow")
-minetest.register_alias("sapling", "default:sapling")
-minetest.register_alias("apple", "default:apple")
-
-minetest.register_alias("WPick", "default:pick_wood")
-minetest.register_alias("STPick", "default:pick_stone")
-minetest.register_alias("SteelPick", "default:pick_steel")
-minetest.register_alias("MesePick", "default:pick_mese")
-minetest.register_alias("WShovel", "default:shovel_wood")
-minetest.register_alias("STShovel", "default:shovel_stone")
-minetest.register_alias("SteelShovel", "default:shovel_steel")
-minetest.register_alias("WAxe", "default:axe_wood")
-minetest.register_alias("STAxe", "default:axe_stone")
-minetest.register_alias("SteelAxe", "default:axe_steel")
-minetest.register_alias("WSword", "default:sword_wood")
-minetest.register_alias("STSword", "default:sword_stone")
-minetest.register_alias("SteelSword", "default:sword_steel")
-
-minetest.register_alias("Stick", "default:stick")
-minetest.register_alias("paper", "default:paper")
-minetest.register_alias("book", "default:book")
-minetest.register_alias("lump_of_coal", "default:coal_lump")
-minetest.register_alias("lump_of_iron", "default:iron_lump")
-minetest.register_alias("lump_of_clay", "default:clay_lump")
-minetest.register_alias("steel_ingot", "default:steel_ingot")
-minetest.register_alias("clay_brick", "default:clay_brick")
-minetest.register_alias("scorched_stuff", "default:scorched_stuff")
-
---
--- Old items
---
-
-minetest.register_craftitem(":rat", {
-       description = "Rat",
-       inventory_image = "rat.png",
-       on_drop = function(item, dropper, pos)
-               minetest.env:add_rat(pos)
-               item:take_item()
-               return item
-       end,
-       on_place = function(item, dropped, pointed)
-               pos = minetest.get_pointed_thing_position(pointed, true)
-               if pos ~= nil then
-                       minetest.env:add_rat(pos)
-                       item:take_item()
-                       return item
-               end
-       end
-})
-
-minetest.register_craftitem(":cooked_rat", {
-       description = "Cooked rat",
-       inventory_image = "cooked_rat.png",
-       on_use = minetest.item_eat(6),
-})
-
-minetest.register_craftitem(":firefly", {
-       description = "Firefly",
-       inventory_image = "firefly.png",
-       on_drop = function(item, dropper, pos)
-               minetest.env:add_firefly(pos)
-               item:take_item()
-               return item
-       end,
-       on_place = function(item, dropped, pointed)
-               pos = minetest.get_pointed_thing_position(pointed, true)
-               if pos ~= nil then
-                       minetest.env:add_firefly(pos)
-                       item:take_item()
-                       return item
-               end
-       end
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "cooked_rat",
-       recipe = "rat",
-})
-
-minetest.register_craft({
-       type = "cooking",
-       output = "scorched_stuff",
-       recipe = "cooked_rat",
-})
-
--- END
diff --git a/data/mods/legacy/textures/apple_iron.png b/data/mods/legacy/textures/apple_iron.png
deleted file mode 100644 (file)
index 2dffdf0..0000000
Binary files a/data/mods/legacy/textures/apple_iron.png and /dev/null differ
diff --git a/data/mods/legacy/textures/cooked_rat.png b/data/mods/legacy/textures/cooked_rat.png
deleted file mode 100644 (file)
index daad3be..0000000
Binary files a/data/mods/legacy/textures/cooked_rat.png and /dev/null differ
diff --git a/data/mods/legacy/textures/dungeon_master.png b/data/mods/legacy/textures/dungeon_master.png
deleted file mode 100644 (file)
index 3457c82..0000000
Binary files a/data/mods/legacy/textures/dungeon_master.png and /dev/null differ
diff --git a/data/mods/legacy/textures/fireball.png b/data/mods/legacy/textures/fireball.png
deleted file mode 100644 (file)
index 5231428..0000000
Binary files a/data/mods/legacy/textures/fireball.png and /dev/null differ
diff --git a/data/mods/legacy/textures/firefly.png b/data/mods/legacy/textures/firefly.png
deleted file mode 100644 (file)
index 40df7fa..0000000
Binary files a/data/mods/legacy/textures/firefly.png and /dev/null differ
diff --git a/data/mods/legacy/textures/oerkki1.png b/data/mods/legacy/textures/oerkki1.png
deleted file mode 100644 (file)
index 33cbac9..0000000
Binary files a/data/mods/legacy/textures/oerkki1.png and /dev/null differ
diff --git a/data/mods/legacy/textures/oerkki1_damaged.png b/data/mods/legacy/textures/oerkki1_damaged.png
deleted file mode 100644 (file)
index 9b77738..0000000
Binary files a/data/mods/legacy/textures/oerkki1_damaged.png and /dev/null differ
diff --git a/data/mods/legacy/textures/rat.png b/data/mods/legacy/textures/rat.png
deleted file mode 100644 (file)
index d1a0e2a..0000000
Binary files a/data/mods/legacy/textures/rat.png and /dev/null differ
diff --git a/share/client/textures/fontlucida.png b/share/client/textures/fontlucida.png
new file mode 100644 (file)
index 0000000..c63fa02
Binary files /dev/null and b/share/client/textures/fontlucida.png differ
diff --git a/share/client/textures/menubg.png b/share/client/textures/menubg.png
new file mode 100644 (file)
index 0000000..7cb9c89
Binary files /dev/null and b/share/client/textures/menubg.png differ
diff --git a/share/client/textures/menulogo.png b/share/client/textures/menulogo.png
new file mode 100644 (file)
index 0000000..76595c4
Binary files /dev/null and b/share/client/textures/menulogo.png differ
diff --git a/share/client/textures/smoke_puff.png b/share/client/textures/smoke_puff.png
new file mode 100644 (file)
index 0000000..e346d20
Binary files /dev/null and b/share/client/textures/smoke_puff.png differ
diff --git a/share/client/textures/unknown_block.png b/share/client/textures/unknown_block.png
new file mode 100644 (file)
index 0000000..a27cb8c
Binary files /dev/null and b/share/client/textures/unknown_block.png differ
diff --git a/share/client/textures/unknown_item.png b/share/client/textures/unknown_item.png
new file mode 100644 (file)
index 0000000..35cabf0
Binary files /dev/null and b/share/client/textures/unknown_item.png differ
diff --git a/share/client/textures/unknown_object.png b/share/client/textures/unknown_object.png
new file mode 100644 (file)
index 0000000..4d6a98d
Binary files /dev/null and b/share/client/textures/unknown_object.png differ
diff --git a/share/server/builtin.lua b/share/server/builtin.lua
new file mode 100644 (file)
index 0000000..351cf3b
--- /dev/null
@@ -0,0 +1,849 @@
+--
+-- This file contains built-in stuff in Minetest implemented in Lua.
+--
+-- It is always loaded and executed after registration of the C API,
+-- before loading and running any mods.
+--
+
+function basic_dump2(o)
+       if type(o) == "number" then
+               return tostring(o)
+       elseif type(o) == "string" then
+               return string.format("%q", o)
+       elseif type(o) == "boolean" then
+               return tostring(o)
+       elseif type(o) == "function" then
+               return "<function>"
+       elseif type(o) == "userdata" then
+               return "<userdata>"
+       elseif type(o) == "nil" then
+               return "nil"
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+function dump2(o, name, dumped)
+       name = name or "_"
+       dumped = dumped or {}
+       io.write(name, " = ")
+       if type(o) == "number" or type(o) == "string" or type(o) == "boolean"
+                       or type(o) == "function" or type(o) == "nil"
+                       or type(o) == "userdata" then
+               io.write(basic_dump2(o), "\n")
+       elseif type(o) == "table" then
+               if dumped[o] then
+                       io.write(dumped[o], "\n")
+               else
+                       dumped[o] = name
+                       io.write("{}\n") -- new table
+                       for k,v in pairs(o) do
+                               local fieldname = string.format("%s[%s]", name, basic_dump2(k))
+                               dump2(v, fieldname, dumped)
+                       end
+               end
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+function dump(o, dumped)
+       dumped = dumped or {}
+       if type(o) == "number" then
+               return tostring(o)
+       elseif type(o) == "string" then
+               return string.format("%q", o)
+       elseif type(o) == "table" then
+               if dumped[o] then
+                       return "<circular reference>"
+               end
+               dumped[o] = true
+               local t = {}
+               for k,v in pairs(o) do
+                       t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
+               end
+               return "{" .. table.concat(t, ", ") .. "}"
+       elseif type(o) == "boolean" then
+               return tostring(o)
+       elseif type(o) == "function" then
+               return "<function>"
+       elseif type(o) == "userdata" then
+               return "<userdata>"
+       elseif type(o) == "nil" then
+               return "nil"
+       else
+               error("cannot dump a " .. type(o))
+               return nil
+       end
+end
+
+--
+-- Item definition helpers
+--
+
+function minetest.inventorycube(img1, img2, img3)
+       img2 = img2 or img1
+       img3 = img3 or img1
+       return "[inventorycube"
+                       .. "{" .. img1:gsub("%^", "&")
+                       .. "{" .. img2:gsub("%^", "&")
+                       .. "{" .. img3:gsub("%^", "&")
+end
+
+function minetest.pos_to_string(pos)
+       return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
+end
+
+function minetest.get_pointed_thing_position(pointed_thing, above)
+       if pointed_thing.type == "node" then
+               if above then
+                       -- The position where a node would be placed
+                       return pointed_thing.above
+               else
+                       -- The position where a node would be dug
+                       return pointed_thing.under
+               end
+       elseif pointed_thing.type == "object" then
+               obj = pointed_thing.ref
+               if obj ~= nil then
+                       return obj:getpos()
+               else
+                       return nil
+               end
+       else
+               return nil
+       end
+end
+
+function minetest.dir_to_facedir(dir)
+       if math.abs(dir.x) > math.abs(dir.z) then
+               if dir.x < 0 then
+                       return 3
+               else
+                       return 1
+               end
+       else
+               if dir.z < 0 then
+                       return 2
+               else
+                       return 0
+               end
+       end
+end
+
+function minetest.dir_to_wallmounted(dir)
+       if math.abs(dir.y) > math.max(math.abs(dir.x), math.abs(dir.z)) then
+               if dir.y < 0 then
+                       return 1
+               else
+                       return 0
+               end
+       elseif math.abs(dir.x) > math.abs(dir.z) then
+               if dir.x < 0 then
+                       return 3
+               else
+                       return 2
+               end
+       else
+               if dir.z < 0 then
+                       return 5
+               else
+                       return 4
+               end
+       end
+end
+
+function minetest.get_node_drops(nodename, toolname)
+       local drop = ItemStack({name=nodename}):get_definition().drop
+       if drop == nil then
+               -- default drop
+               return {ItemStack({name=nodename})}
+       elseif type(drop) == "string" then
+               -- itemstring drop
+               return {ItemStack(drop)}
+       elseif drop.items == nil then
+               -- drop = {} to disable default drop
+               return {}
+       end
+
+       -- Extended drop table
+       local got_items = {}
+       local got_count = 0
+       local _, item, tool
+       for _, item in ipairs(drop.items) do
+               local good_rarity = true
+               local good_tool = true
+               if item.rarity ~= nil then
+                       good_rarity = item.rarity < 1 or math.random(item.rarity) == 1
+               end
+               if item.tools ~= nil then
+                       good_tool = false
+                       for _, tool in ipairs(item.tools) do
+                               if tool:sub(1, 1) == '~' then
+                                       good_tool = toolname:find(tool:sub(2)) ~= nil
+                               else
+                                       good_tool = toolname == tool
+                               end
+                               if good_tool then
+                                       break
+                               end
+                       end
+               end
+               if good_rarity and good_tool then
+                       got_count = got_count + 1
+                       for _, add_item in ipairs(item.items) do
+                               got_items[#got_items+1] = add_item
+                       end
+                       if drop.max_items ~= nil and got_count == drop.max_items then
+                               break
+                       end
+               end
+       end
+       return got_items
+end
+
+function minetest.item_place_node(itemstack, placer, pointed_thing)
+       local item = itemstack:peek_item()
+       local def = itemstack:get_definition()
+       if def.type == "node" and pointed_thing.type == "node" then
+               local pos = pointed_thing.above
+               local oldnode = minetest.env:get_node(pos)
+               local olddef = ItemStack({name=oldnode.name}):get_definition()
+
+               if not olddef.buildable_to then
+                       minetest.log("info", placer:get_player_name() .. " tried to place"
+                               .. " node in invalid position " .. minetest.pos_to_string(pos)
+                               .. ", replacing " .. oldnode.name)
+                       return
+               end
+
+               minetest.log("action", placer:get_player_name() .. " places node "
+                       .. def.name .. " at " .. minetest.pos_to_string(pos))
+
+               local newnode = {name = def.name, param1 = 0, param2 = 0}
+
+               -- Calculate direction for wall mounted stuff like torches and signs
+               if def.paramtype2 == 'wallmounted' then
+                       local under = pointed_thing.under
+                       local above = pointed_thing.above
+                       local dir = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}
+                       newnode.param2 = minetest.dir_to_wallmounted(dir)
+               -- Calculate the direction for furnaces and chests and stuff
+               elseif def.paramtype2 == 'facedir' then
+                       local playerpos = placer:getpos()
+                       local dir = {x = pos.x - playerpos.x, y = pos.y - playerpos.y, z = pos.z - playerpos.z}
+                       newnode.param2 = minetest.dir_to_facedir(dir)
+                       minetest.log("action", "facedir: " .. newnode.param2)
+               end
+
+               -- Add node and update
+               minetest.env:add_node(pos, newnode)
+
+               -- Set metadata owner
+               if def.metadata_name ~= "" then
+                       minetest.env:get_meta(pos):set_owner(placer:get_player_name())
+               end
+
+               -- Run script hook
+               local _, callback
+               for _, callback in ipairs(minetest.registered_on_placenodes) do
+                       callback(pos, newnode, placer)
+               end
+
+               itemstack:take_item()
+       end
+       return itemstack
+end
+
+function minetest.item_place_object(itemstack, placer, pointed_thing)
+       local pos = minetest.get_pointed_thing_position(pointed_thing, true)
+       if pos ~= nil then
+               local item = itemstack:take_item()
+               minetest.env:add_item(pos, item)
+       end
+       return itemstack
+end
+
+function minetest.item_place(itemstack, placer, pointed_thing)
+       if itemstack:get_definition().type == "node" then
+               return minetest.item_place_node(itemstack, placer, pointed_thing)
+       else
+               return minetest.item_place_object(itemstack, placer, pointed_thing)
+       end
+end
+
+function minetest.item_drop(itemstack, dropper, pos)
+       minetest.env:add_item(pos, itemstack)
+       return ""
+end
+
+function minetest.item_eat(hp_change, replace_with_item)
+       return function(itemstack, user, pointed_thing)  -- closure
+               if itemstack:take_item() ~= nil then
+                       user:set_hp(user:get_hp() + hp_change)
+                       itemstack:add_item(replace_with_item) -- note: replace_with_item is optional
+               end
+               return itemstack
+       end
+end
+
+function minetest.node_punch(pos, node, puncher)
+       -- Run script hook
+       local _, callback
+       for _, callback in ipairs(minetest.registered_on_punchnodes) do
+               callback(pos, node, puncher)
+       end
+
+end
+
+function minetest.node_dig(pos, node, digger)
+       minetest.debug("node_dig")
+
+       local def = ItemStack({name=node.name}):get_definition()
+       if not def.diggable then
+               minetest.debug("not diggable")
+               minetest.log("info", digger:get_player_name() .. " tried to dig "
+                       .. node.name .. " which is not diggable "
+                       .. minetest.pos_to_string(pos))
+               return
+       end
+
+       local meta = minetest.env:get_meta(pos)
+       if meta ~= nil and not meta:get_allow_removal() then
+               minetest.debug("dig prevented by metadata")
+               minetest.log("info", digger:get_player_name() .. " tried to dig "
+                       .. node.name .. ", but removal is disabled by metadata "
+                       .. minetest.pos_to_string(pos))
+               return
+       end
+
+       minetest.log('action', digger:get_player_name() .. " digs "
+               .. node.name .. " at " .. minetest.pos_to_string(pos))
+
+       if not minetest.setting_getbool("creative_mode") then
+               local wielded = digger:get_wielded_item()
+               local drops = minetest.get_node_drops(node.name, wielded:get_name())
+
+               -- Wear out tool
+               tp = wielded:get_tool_capabilities()
+               dp = minetest.get_dig_params(def.groups, tp)
+               wielded:add_wear(dp.wear)
+               digger:set_wielded_item(wielded)
+
+               -- Add dropped items
+               local _, dropped_item
+               for _, dropped_item in ipairs(drops) do
+                       digger:get_inventory():add_item("main", dropped_item)
+               end
+       end
+
+       -- Remove node and update
+       minetest.env:remove_node(pos)
+
+       -- Run script hook
+       local _, callback
+       for _, callback in ipairs(minetest.registered_on_dignodes) do
+               callback(pos, node, digger)
+       end
+end
+
+--
+-- Item definition defaults
+--
+
+minetest.nodedef_default = {
+       -- Item properties
+       type="node",
+       -- name intentionally not defined here
+       description = "",
+       groups = {},
+       inventory_image = "",
+       wield_image = "",
+       wield_scale = {x=1,y=1,z=1},
+       stack_max = 99,
+       usable = false,
+       liquids_pointable = false,
+       tool_capabilities = nil,
+
+       -- Interaction callbacks
+       on_place = minetest.item_place,
+       on_drop = minetest.item_drop,
+       on_use = nil,
+
+       on_punch = minetest.node_punch,
+       on_dig = minetest.node_dig,
+
+       -- Node properties
+       drawtype = "normal",
+       visual_scale = 1.0,
+       tile_images = {""},
+       special_materials = {
+               {image="", backface_culling=true},
+               {image="", backface_culling=true},
+       },
+       alpha = 255,
+       post_effect_color = {a=0, r=0, g=0, b=0},
+       paramtype = "none",
+       paramtype2 = "none",
+       is_ground_content = false,
+       sunlight_propagates = false,
+       walkable = true,
+       pointable = true,
+       diggable = true,
+       climbable = false,
+       buildable_to = false,
+       metadata_name = "",
+       liquidtype = "none",
+       liquid_alternative_flowing = "",
+       liquid_alternative_source = "",
+       liquid_viscosity = 0,
+       light_source = 0,
+       damage_per_second = 0,
+       selection_box = {type="regular"},
+       legacy_facedir_simple = false,
+       legacy_wallmounted = false,
+}
+
+minetest.craftitemdef_default = {
+       type="craft",
+       -- name intentionally not defined here
+       description = "",
+       groups = {},
+       inventory_image = "",
+       wield_image = "",
+       wield_scale = {x=1,y=1,z=1},
+       stack_max = 99,
+       liquids_pointable = false,
+       tool_capabilities = nil,
+
+       -- Interaction callbacks
+       on_place = minetest.item_place,
+       on_drop = minetest.item_drop,
+       on_use = nil,
+}
+
+minetest.tooldef_default = {
+       type="tool",
+       -- name intentionally not defined here
+       description = "",
+       groups = {},
+       inventory_image = "",
+       wield_image = "",
+       wield_scale = {x=1,y=1,z=1},
+       stack_max = 1,
+       liquids_pointable = false,
+       tool_capabilities = nil,
+
+       -- Interaction callbacks
+       on_place = minetest.item_place,
+       on_drop = minetest.item_drop,
+       on_use = nil,
+}
+
+minetest.noneitemdef_default = {  -- This is used for the hand and unknown items
+       type="none",
+       -- name intentionally not defined here
+       description = "",
+       groups = {},
+       inventory_image = "",
+       wield_image = "",
+       wield_scale = {x=1,y=1,z=1},
+       stack_max = 99,
+       liquids_pointable = false,
+       tool_capabilities = nil,
+
+       -- Interaction callbacks
+       on_place = nil,
+       on_drop = nil,
+       on_use = nil,
+}
+
+--
+-- Make raw registration functions inaccessible to anyone except builtin.lua
+--
+
+local register_item_raw = minetest.register_item_raw
+minetest.register_item_raw = nil
+
+local register_alias_raw = minetest.register_alias_raw
+minetest.register_item_raw = nil
+
+--
+-- Item / entity / ABM registration functions
+--
+
+minetest.registered_abms = {}
+minetest.registered_entities = {}
+minetest.registered_items = {}
+minetest.registered_nodes = {}
+minetest.registered_craftitems = {}
+minetest.registered_tools = {}
+minetest.registered_aliases = {}
+
+-- For tables that are indexed by item name:
+-- If table[X] does not exist, default to table[minetest.registered_aliases[X]]
+local function set_alias_metatable(table)
+       setmetatable(table, {
+               __index = function(name)
+                       return rawget(table, minetest.registered_aliases[name])
+               end
+       })
+end
+set_alias_metatable(minetest.registered_items)
+set_alias_metatable(minetest.registered_nodes)
+set_alias_metatable(minetest.registered_craftitems)
+set_alias_metatable(minetest.registered_tools)
+
+-- These item names may not be used because they would interfere
+-- with legacy itemstrings
+local forbidden_item_names = {
+       MaterialItem = true,
+       MaterialItem2 = true,
+       MaterialItem3 = true,
+       NodeItem = true,
+       node = true,
+       CraftItem = true,
+       craft = true,
+       MBOItem = true,
+       ToolItem = true,
+       tool = true,
+}
+
+local function check_modname_prefix(name)
+       if name:sub(1,1) == ":" then
+               -- Escape the modname prefix enforcement mechanism
+               return name:sub(2)
+       else
+               -- Modname prefix enforcement
+               local expected_prefix = minetest.get_current_modname() .. ":"
+               if name:sub(1, #expected_prefix) ~= expected_prefix then
+                       error("Name " .. name .. " does not follow naming conventions: " ..
+                               "\"modname:\" or \":\" prefix required")
+               end
+               local subname = name:sub(#expected_prefix+1)
+               if subname:find("[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]") then
+                       error("Name " .. name .. " does not follow naming conventions: " ..
+                               "contains unallowed characters")
+               end
+               return name
+       end
+end
+
+function minetest.register_abm(spec)
+       -- Add to minetest.registered_abms
+       minetest.registered_abms[#minetest.registered_abms+1] = spec
+end
+
+function minetest.register_entity(name, prototype)
+       -- Check name
+       if name == nil then
+               error("Unable to register entity: Name is nil")
+       end
+       name = check_modname_prefix(tostring(name))
+
+       prototype.name = name
+       prototype.__index = prototype  -- so that it can be used as a metatable
+
+       -- Add to minetest.registered_entities
+       minetest.registered_entities[name] = prototype
+end
+
+function minetest.register_item(name, itemdef)
+       -- Check name
+       if name == nil then
+               error("Unable to register item: Name is nil")
+       end
+       name = check_modname_prefix(tostring(name))
+       if forbidden_item_names[name] then
+               error("Unable to register item: Name is forbidden: " .. name)
+       end
+       itemdef.name = name
+
+       -- Apply defaults and add to registered_* table
+       if itemdef.type == "node" then
+               setmetatable(itemdef, {__index = minetest.nodedef_default})
+               minetest.registered_nodes[itemdef.name] = itemdef
+       elseif itemdef.type == "craft" then
+               setmetatable(itemdef, {__index = minetest.craftitemdef_default})
+               minetest.registered_craftitems[itemdef.name] = itemdef
+       elseif itemdef.type == "tool" then
+               setmetatable(itemdef, {__index = minetest.tooldef_default})
+               minetest.registered_tools[itemdef.name] = itemdef
+       elseif itemdef.type == "none" then
+               setmetatable(itemdef, {__index = minetest.noneitemdef_default})
+       else
+               error("Unable to register item: Type is invalid: " .. dump(itemdef))
+       end
+
+       -- Flowing liquid uses param2
+       if itemdef.type == "node" and itemdef.liquidtype == "flowing" then
+               itemdef.paramtype2 = "flowingliquid"
+       end
+
+       -- BEGIN Legacy stuff
+       if itemdef.cookresult_itemstring ~= nil and itemdef.cookresult_itemstring ~= "" then
+               minetest.register_craft({
+                       type="cooking",
+                       output=itemdef.cookresult_itemstring,
+                       recipe=itemdef.name,
+                       cooktime=itemdef.furnace_cooktime
+               })
+       end
+       if itemdef.furnace_burntime ~= nil and itemdef.furnace_burntime >= 0 then
+               minetest.register_craft({
+                       type="fuel",
+                       recipe=itemdef.name,
+                       burntime=itemdef.furnace_burntime
+               })
+       end
+       -- END Legacy stuff
+
+       -- Disable all further modifications
+       getmetatable(itemdef).__newindex = {}
+
+       --minetest.log("Registering item: " .. itemdef.name)
+       minetest.registered_items[itemdef.name] = itemdef
+       minetest.registered_aliases[itemdef.name] = nil
+       register_item_raw(itemdef)
+end
+
+function minetest.register_node(name, nodedef)
+       nodedef.type = "node"
+       minetest.register_item(name, nodedef)
+end
+
+function minetest.register_craftitem(name, craftitemdef)
+       craftitemdef.type = "craft"
+
+       -- BEGIN Legacy stuff
+       if craftitemdef.inventory_image == nil and craftitemdef.image ~= nil then
+               craftitemdef.inventory_image = craftitemdef.image
+       end
+       -- END Legacy stuff
+
+       minetest.register_item(name, craftitemdef)
+end
+
+function minetest.register_tool(name, tooldef)
+       tooldef.type = "tool"
+       tooldef.stack_max = 1
+
+       -- BEGIN Legacy stuff
+       if tooldef.inventory_image == nil and tooldef.image ~= nil then
+               tooldef.inventory_image = tooldef.image
+       end
+       if tooldef.tool_capabilities == nil and
+          (tooldef.full_punch_interval ~= nil or
+           tooldef.basetime ~= nil or
+           tooldef.dt_weight ~= nil or
+           tooldef.dt_crackiness ~= nil or
+           tooldef.dt_crumbliness ~= nil or
+           tooldef.dt_cuttability ~= nil or
+           tooldef.basedurability ~= nil or
+           tooldef.dd_weight ~= nil or
+           tooldef.dd_crackiness ~= nil or
+           tooldef.dd_crumbliness ~= nil or
+           tooldef.dd_cuttability ~= nil) then
+               tooldef.tool_capabilities = {
+                       full_punch_interval = tooldef.full_punch_interval,
+                       basetime = tooldef.basetime,
+                       dt_weight = tooldef.dt_weight,
+                       dt_crackiness = tooldef.dt_crackiness,
+                       dt_crumbliness = tooldef.dt_crumbliness,
+                       dt_cuttability = tooldef.dt_cuttability,
+                       basedurability = tooldef.basedurability,
+                       dd_weight = tooldef.dd_weight,
+                       dd_crackiness = tooldef.dd_crackiness,
+                       dd_crumbliness = tooldef.dd_crumbliness,
+                       dd_cuttability = tooldef.dd_cuttability,
+               }
+       end
+       -- END Legacy stuff
+
+       minetest.register_item(name, tooldef)
+end
+
+function minetest.register_alias(name, convert_to)
+       if forbidden_item_names[name] then
+               error("Unable to register alias: Name is forbidden: " .. name)
+       end
+       if minetest.registered_items[name] ~= nil then
+               minetest.log("WARNING: Not registering alias, item with same name" ..
+                       " is already defined: " .. name .. " -> " .. convert_to)
+       else
+               --minetest.log("Registering alias: " .. name .. " -> " .. convert_to)
+               minetest.registered_aliases[name] = convert_to
+               register_alias_raw(name, convert_to)
+       end
+end
+
+-- Alias the forbidden item names to "" so they can't be
+-- created via itemstrings (e.g. /give)
+local name
+for name in pairs(forbidden_item_names) do
+       minetest.registered_aliases[name] = ""
+       register_alias_raw(name, "")
+end
+
+
+-- Deprecated:
+-- Aliases for minetest.register_alias (how ironic...)
+--minetest.alias_node = minetest.register_alias
+--minetest.alias_tool = minetest.register_alias
+--minetest.alias_craftitem = minetest.register_alias
+
+--
+-- Built-in node definitions. Also defined in C.
+--
+
+minetest.register_item(":unknown", {
+       type = "none",
+       description = "Unknown Item",
+       inventory_image = "unknown_item.png",
+       on_place = minetest.item_place,
+       on_drop = minetest.item_drop,
+})
+
+minetest.register_node(":air", {
+       description = "Air (you hacker you!)",
+       inventory_image = "unknown_block.png",
+       wield_image = "unknown_block.png",
+       drawtype = "airlike",
+       paramtype = "light",
+       sunlight_propagates = true,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       air_equivalent = true,
+})
+
+minetest.register_node(":ignore", {
+       description = "Ignore (you hacker you!)",
+       inventory_image = "unknown_block.png",
+       wield_image = "unknown_block.png",
+       drawtype = "airlike",
+       paramtype = "none",
+       sunlight_propagates = false,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true, -- A way to remove accidentally placed ignores
+       air_equivalent = true,
+})
+
+-- The hand (bare definition)
+minetest.register_item(":", {
+       type = "none",
+})
+
+--
+-- Default material types
+--
+
+function minetest.digprop_constanttime(time)
+       return {
+               diggability = "constant",
+               constant_time = time,
+       }
+end
+
+function minetest.digprop_stonelike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * 5,
+               crackiness = 1,
+               crumbliness = -0.1,
+               cuttability = -0.2,
+       }
+end
+
+function minetest.digprop_dirtlike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * 1.2,
+               crackiness = 0,
+               crumbliness = 1.2,
+               cuttability = -0.4,
+       }
+end
+
+function minetest.digprop_gravellike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * 2,
+               crackiness = 0.2,
+               crumbliness = 1.5,
+               cuttability = -1.0,
+       }
+end
+
+function minetest.digprop_woodlike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * 1.0,
+               crackiness = 0.75,
+               crumbliness = -1.0,
+               cuttability = 1.5,
+       }
+end
+
+function minetest.digprop_leaveslike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * (-0.5),
+               crackiness = 0,
+               crumbliness = 0,
+               cuttability = 2.0,
+       }
+end
+
+function minetest.digprop_glasslike(toughness)
+       return {
+               diggablity = "normal",
+               weight = toughness * 0.1,
+               crackiness = 2.0,
+               crumbliness = -1.0,
+               cuttability = -1.0,
+       }
+end
+
+--
+-- Creative inventory
+--
+
+minetest.creative_inventory = {}
+
+minetest.add_to_creative_inventory = function(itemstring)
+       table.insert(minetest.creative_inventory, itemstring)
+end
+
+--
+-- Callback registration
+--
+
+local function make_registration()
+       local t = {}
+       local registerfunc = function(func) table.insert(t, func) end
+       return t, registerfunc
+end
+
+minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration()
+minetest.registered_globalsteps, minetest.register_globalstep = make_registration()
+minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration()
+minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration()
+minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
+minetest.registered_on_generateds, minetest.register_on_generated = make_registration()
+minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
+minetest.registered_on_dieplayers, minetest.register_on_dieplayer = make_registration()
+minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
+
+--
+-- Set random seed
+--
+
+math.randomseed(os.time())
+
+-- END
diff --git a/share/server/games/mesetint/mods/bucket/depends.txt b/share/server/games/mesetint/mods/bucket/depends.txt
new file mode 100644 (file)
index 0000000..3a7daa1
--- /dev/null
@@ -0,0 +1,2 @@
+default
+
diff --git a/share/server/games/mesetint/mods/bucket/init.lua b/share/server/games/mesetint/mods/bucket/init.lua
new file mode 100644 (file)
index 0000000..8ed9da5
--- /dev/null
@@ -0,0 +1,95 @@
+-- bucket (Minetest 0.4 mod)
+-- A bucket, which can pick up water and lava
+
+minetest.register_alias("bucket", "bucket:bucket_empty")
+minetest.register_alias("bucket_water", "bucket:bucket_water")
+minetest.register_alias("bucket_lava", "bucket:bucket_lava")
+
+minetest.register_craft({
+       output = 'bucket:bucket_empty 1',
+       recipe = {
+               {'default:steel_ingot', '', 'default:steel_ingot'},
+               {'', 'default:steel_ingot', ''},
+       }
+})
+
+bucket = {}
+bucket.liquids = {}
+
+-- Register a new liquid
+--   source = name of the source node
+--   flowing = name of the flowing node
+--   itemname = name of the new bucket item (or nil if liquid is not takeable)
+--   inventory_image = texture of the new bucket item (ignored if itemname == nil)
+-- This function can be called from any mod (that depends on bucket).
+function bucket.register_liquid(source, flowing, itemname, inventory_image)
+       bucket.liquids[source] = {
+               source = source,
+               flowing = flowing,
+               itemname = itemname,
+       }
+       bucket.liquids[flowing] = bucket.liquids[source]
+
+       if itemname ~= nil then
+               minetest.register_craftitem(itemname, {
+                       inventory_image = inventory_image,
+                       stack_max = 1,
+                       liquids_pointable = true,
+                       on_use = function(itemstack, user, pointed_thing)
+                               -- Must be pointing to node
+                               if pointed_thing.type ~= "node" then
+                                       return
+                               end
+                               -- Check if pointing to a liquid
+                               n = minetest.env:get_node(pointed_thing.under)
+                               if bucket.liquids[n.name] == nil then
+                                       -- Not a liquid
+                                       minetest.env:add_node(pointed_thing.above, {name=source})
+                               elseif n.name ~= source then
+                                       -- It's a liquid
+                                       minetest.env:add_node(pointed_thing.under, {name=source})
+                               end
+                               return {name="bucket:bucket_empty"}
+                       end
+               })
+       end
+end
+
+minetest.register_craftitem("bucket:bucket_empty", {
+       inventory_image = "bucket.png",
+       stack_max = 1,
+       liquids_pointable = true,
+       on_use = function(itemstack, user, pointed_thing)
+               -- Must be pointing to node
+               if pointed_thing.type ~= "node" then
+                       return
+               end
+               -- Check if pointing to a liquid source
+               n = minetest.env:get_node(pointed_thing.under)
+               liquiddef = bucket.liquids[n.name]
+               if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
+                       minetest.env:add_node(pointed_thing.under, {name="air"})
+                       return {name=liquiddef.itemname}
+               end
+       end,
+})
+
+bucket.register_liquid(
+       "default:water_source",
+       "default:water_flowing",
+       "bucket:bucket_water",
+       "bucket_water.png"
+)
+
+bucket.register_liquid(
+       "default:lava_source",
+       "default:lava_flowing",
+       "bucket:bucket_lava",
+       "bucket_lava.png"
+)
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:bucket_lava",
+       burntime = 60,
+})
diff --git a/share/server/games/mesetint/mods/bucket/textures/bucket.png b/share/server/games/mesetint/mods/bucket/textures/bucket.png
new file mode 100644 (file)
index 0000000..f165fd2
Binary files /dev/null and b/share/server/games/mesetint/mods/bucket/textures/bucket.png differ
diff --git a/share/server/games/mesetint/mods/bucket/textures/bucket_lava.png b/share/server/games/mesetint/mods/bucket/textures/bucket_lava.png
new file mode 100644 (file)
index 0000000..7cf27cd
Binary files /dev/null and b/share/server/games/mesetint/mods/bucket/textures/bucket_lava.png differ
diff --git a/share/server/games/mesetint/mods/bucket/textures/bucket_water.png b/share/server/games/mesetint/mods/bucket/textures/bucket_water.png
new file mode 100644 (file)
index 0000000..f220ec5
Binary files /dev/null and b/share/server/games/mesetint/mods/bucket/textures/bucket_water.png differ
diff --git a/share/server/games/mesetint/mods/default/init.lua b/share/server/games/mesetint/mods/default/init.lua
new file mode 100644 (file)
index 0000000..2fdfdb3
--- /dev/null
@@ -0,0 +1,1830 @@
+-- default (Minetest 0.4 mod)
+-- Most default stuff
+
+-- Quick documentation about the API
+-- =================================
+--
+-- Helper functions defined by builtin.lua:
+-- dump2(obj, name="_", dumped={})
+-- dump(obj, dumped={})
+--
+-- Mod load path
+-- -------------
+-- Generic:
+-- $path_data/mods/
+-- $path_userdata/usermods/
+-- $mapdir/worldmods/
+--
+-- On a run-in-place version (eg. the distributed windows version):
+-- minetest-0.4.x/data/mods/
+-- minetest-0.4.x/usermods/
+-- minetest-0.4.x/world/worldmods/
+--
+-- On an installed version on linux:
+-- /usr/share/minetest/mods/
+-- ~/.minetest/usermods
+-- ~/.minetest/world/worldmods
+--
+-- Naming convention for registered textual names
+-- ----------------------------------------------
+-- "modname:<whatever>" (<whatever> can have characters a-zA-Z0-9_)
+--
+-- This is to prevent conflicting names from corrupting maps and is
+-- enforced by the mod loader.
+--
+-- Example: mod "experimental", ideal item/node/entity name "tnt":
+--          -> the name should be "experimental:tnt".
+--
+-- Enforcement can be overridden by prefixing the name with ":". This can
+-- be used for overriding the registrations of some other mod.
+--
+-- Example: Any mod can redefine experimental:tnt by using the name
+--          ":experimental:tnt" when registering it.
+-- (also that mods is required to have "experimental" as a dependency)
+--
+-- The legacy mod uses ":" for maintaining backwards compatibility.
+--
+-- Textures
+-- --------
+-- Mods should generally prefix their textures with modname_, eg. given
+-- the mod name "foomod", a texture could be called "default_foomod_superfurnace.png"
+--
+-- This is not crucial and a conflicting name will not corrupt maps.
+--
+-- Representations of simple things
+-- --------------------------------
+--
+-- MapNode representation:
+-- {name="name", param1=num, param2=num}
+--
+-- param1 and param2 are 8 bit and 4 bit integers, respectively. They
+-- are reserved for certain automated functions. If you don't use these
+-- functions, you can use them to store arbitrary values.
+--
+-- param1 is reserved for the engine when:
+--   paramtype != "none"
+-- param2 is reserved for the engine when any of these are used:
+--   liquidtype == "flowing"
+--   drawtype == "flowingliquid"
+--   drawtype == "torchlike"
+--   drawtype == "signlike"
+--
+-- Position representation:
+-- {x=num, y=num, z=num}
+--
+-- stackstring/itemstring: A stack of items in serialized format.
+-- eg. 'node "default:dirt" 5'
+-- eg. 'tool "default:pick_wood" 21323'
+-- eg. 'craft "default:apple" 2'
+--
+-- item: A stack of items in Lua table format.
+-- eg. {name="default:dirt", count=1, wear=0, metadata=""} 
+--     ^ a single dirt node
+-- eg. {name="default:pick_wood", count=1, wear=21323, metadata=""}
+--     ^ a wooden pick about 1/3 weared out
+-- eg. {name="default:apple", count=1, wear=0, metadata=""}
+--     ^ an apple.
+--
+-- Any time an item must be passed to a function, it can be an
+-- ItemStack (see below), an itemstring or a table in the above format.
+--
+-- Global functions:
+-- minetest.register_entity(name, prototype table)
+-- minetest.register_abm(abm definition)
+-- minetest.register_node(name, node definition)
+-- minetest.register_tool(name, item definition)
+-- minetest.register_craftitem(name, item definition)
+-- minetest.register_alias(name, convert_to)
+-- minetest.register_craft(recipe)
+-- minetest.register_globalstep(func(dtime))
+-- minetest.register_on_placenode(func(pos, newnode, placer))
+-- minetest.register_on_dignode(func(pos, oldnode, digger))
+-- minetest.register_on_punchnode(func(pos, node, puncher))
+-- minetest.register_on_generated(func(minp, maxp))
+-- minetest.register_on_newplayer(func(ObjectRef))
+-- minetest.register_on_dieplayer(func(ObjectRef))
+-- minetest.register_on_respawnplayer(func(ObjectRef))
+-- ^ return true in func to disable regular player placement
+-- ^ currently called _before_ repositioning of player occurs
+-- minetest.register_on_chat_message(func(name, message))
+-- minetest.add_to_creative_inventory(itemstring)
+-- minetest.setting_get(name) -> string or nil
+-- minetest.setting_getbool(name) -> boolean value or nil
+-- minetest.chat_send_all(text)
+-- minetest.chat_send_player(name, text)
+-- minetest.get_player_privs(name) -> set of privs
+-- minetest.get_inventory(location) -> InvRef
+-- ^ location = eg. {type="player", name="celeron55"}
+--                  {type="node", pos={x=, y=, z=}}
+-- minetest.get_current_modname() -> string
+-- minetest.get_modpath(modname) -> eg. "/home/user/.minetest/usermods/modname"
+-- ^ Useful for loading additional .lua modules or static data from mod
+-- minetest.get_worldpath(modname) -> eg. "/home/user/.minetest/world"
+-- ^ Useful for storing custom data
+--
+-- minetest.debug(line)
+-- ^ Goes to dstream
+-- minetest.log(line)
+-- minetest.log(loglevel, line)
+-- ^ loglevel one of "error", "action", "info", "verbose"
+--
+-- minetest.digprop_constanttime(time)
+-- minetest.digprop_stonelike(toughness)
+-- minetest.digprop_dirtlike(toughness)
+-- minetest.digprop_gravellike(toughness)
+-- minetest.digprop_woodlike(toughness)
+-- minetest.digprop_leaveslike(toughness)
+-- minetest.digprop_glasslike(toughness)
+--
+-- Global objects:
+-- minetest.env - environment reference
+--
+-- Global tables:
+-- minetest.registered_items
+-- ^ List of registered items, indexed by name
+-- minetest.registered_nodes
+-- ^ List of registered node definitions, indexed by name
+-- minetest.registered_craftitems
+-- ^ List of registered craft item definitions, indexed by name
+-- minetest.registered_tools
+-- ^ List of registered tool definitions, indexed by name
+-- minetest.registered_entities
+-- ^ List of registered entity prototypes, indexed by name
+-- minetest.object_refs
+-- ^ List of object references, indexed by active object id
+-- minetest.luaentities
+-- ^ List of lua entities, indexed by active object id
+--
+-- EnvRef is basically ServerEnvironment and ServerMap combined.
+-- EnvRef methods:
+-- - add_node(pos, node)
+-- - remove_node(pos)
+-- - get_node(pos)
+--   ^ Returns {name="ignore", ...} for unloaded area
+-- - get_node_or_nil(pos)
+--   ^ Returns nil for unloaded area
+-- - get_node_light(pos, timeofday) -> 0...15 or nil
+--   ^ timeofday: nil = current time, 0 = night, 0.5 = day
+-- - add_entity(pos, name): Returns ObjectRef or nil if failed
+-- - add_item(pos, itemstring)
+-- - add_rat(pos)
+-- - add_firefly(pos)
+-- - get_meta(pos) -- Get a NodeMetaRef at that position
+-- - get_player_by_name(name) -- Get an ObjectRef to a player
+-- - get_objects_inside_radius(pos, radius)
+-- - set_timeofday(val): val: 0...1; 0 = midnight, 0.5 = midday
+-- - get_timeofday()
+--
+-- NodeMetaRef (this stuff is subject to change in a future version)
+-- - get_type()
+-- - allows_text_input()
+-- - set_text(text) -- eg. set the text of a sign
+-- - get_text()
+-- - get_owner()
+-- - set_owner(string)
+-- Generic node metadata specific:
+-- - set_infotext(infotext)
+-- - get_inventory() -> InvRef
+-- - set_inventory_draw_spec(string)
+-- - set_allow_text_input(bool)
+-- - set_allow_removal(bool)
+-- - set_enforce_owner(bool)
+-- - is_inventory_modified()
+-- - reset_inventory_modified()
+-- - is_text_modified()
+-- - reset_text_modified()
+-- - set_string(name, value)
+-- - get_string(name)
+--
+-- ObjectRef is basically ServerActiveObject.
+-- ObjectRef methods:
+-- - remove(): remove object (after returning from Lua)
+-- - getpos() -> {x=num, y=num, z=num}
+-- - setpos(pos); pos={x=num, y=num, z=num}
+-- - moveto(pos, continuous=false): interpolated move
+-- - punch(puncher, time_from_last_punch, tool_capabilities, direction)
+--   ^ puncher = an another ObjectRef,
+--   ^ time_from_last_punch = time since last punch action of the puncher
+-- - right_click(clicker); clicker = an another ObjectRef
+-- - get_hp(): returns number of hitpoints (2 * number of hearts)
+-- - set_hp(hp): set number of hitpoints (2 * number of hearts)
+-- - get_inventory() -> InvRef
+-- - get_wield_list(): returns the name of the inventory list the wielded item is in
+-- - get_wield_index(): returns the index of the wielded item
+-- - get_wielded_item() -> ItemStack
+-- - set_wielded_item(item): replaces the wielded item, returns true if successful
+-- LuaEntitySAO-only: (no-op for other objects)
+-- - setvelocity({x=num, y=num, z=num})
+-- - getvelocity() -> {x=num, y=num, z=num}
+-- - setacceleration({x=num, y=num, z=num})
+-- - getacceleration() -> {x=num, y=num, z=num}
+-- - setyaw(radians)
+-- - getyaw() -> radians
+-- - settexturemod(mod)
+-- - setsprite(p={x=0,y=0}, num_frames=1, framelength=0.2,
+-- -           select_horiz_by_yawpitch=false)
+-- - ^ Select sprite from spritesheet with optional animation and DM-style
+-- -   texture selection based on yaw relative to camera
+-- - set_armor_groups({group1=rating, group2=rating, ...})
+-- - get_entity_name() (DEPRECATED: Will be removed in a future version)
+-- - get_luaentity()
+-- Player-only: (no-op for other objects)
+-- - get_player_name(): will return nil if is not a player
+-- - get_look_dir(): get camera direction as a unit vector
+-- - get_look_pitch(): pitch in radians
+-- - get_look_yaw(): yaw in radians (wraps around pretty randomly as of now)
+--
+-- InvRef methods:
+-- - get_size(listname): get size of a list
+-- - set_size(listname, size): set size of a list
+-- - get_stack(listname, i): get a copy of stack index i in list
+-- - set_stack(listname, i, stack): copy stack to index i in list
+-- - get_list(listname): return full list
+-- - set_list(listname, list): set full list (size will not change)
+-- - add_item(listname, stack): add item somewhere in list, returns leftover ItemStack
+-- - room_for_item(listname, stack): returns true if the stack of items
+--     can be fully added to the list
+-- - contains_item(listname, stack): returns true if the stack of items
+--     can be fully taken from the list
+--   remove_item(listname, stack): take as many items as specified from the list,
+--     returns the items that were actually removed (as an ItemStack)
+--
+-- ItemStack methods:
+-- - is_empty(): return true if stack is empty
+-- - get_name(): returns item name (e.g. "default:stone")
+-- - get_count(): returns number of items on the stack
+-- - get_wear(): returns tool wear (0-65535), 0 for non-tools
+-- - get_metadata(): returns metadata (a string attached to an item stack)
+-- - clear(): removes all items from the stack, making it empty
+-- - replace(item): replace the contents of this stack (item can also
+--     be an itemstring or table)
+-- - to_string(): returns the stack in itemstring form
+-- - to_table(): returns the stack in Lua table form
+-- - get_stack_max(): returns the maximum size of the stack (depends on the item)
+-- - get_free_space(): returns get_stack_max() - get_count()
+-- - is_known(): returns true if the item name refers to a defined item type
+-- - get_definition(): returns the item definition table
+-- - get_tool_capabilities(): returns the digging properties of the item,
+--   ^ or those of the hand if none are defined for this item type
+-- - add_wear(amount): increases wear by amount if the item is a tool
+-- - add_item(item): put some item or stack onto this stack,
+--   ^ returns leftover ItemStack
+-- - item_fits(item): returns true if item or stack can be fully added to this one
+-- - take_item(n): take (and remove) up to n items from this stack
+--   ^ returns taken ItemStack
+--   ^ if n is omitted, n=1 is used
+-- - peek_item(n): copy (don't remove) up to n items from this stack
+--   ^ returns copied ItemStack
+--   ^ if n is omitted, n=1 is used
+--
+-- Registered entities:
+-- - Functions receive a "luaentity" as self:
+--   - It has the member .name, which is the registered name ("mod:thing")
+--   - It has the member .object, which is an ObjectRef pointing to the object
+--   - The original prototype stuff is visible directly via a metatable
+-- - Callbacks:
+--   - on_activate(self, staticdata)
+--   - on_step(self, dtime)
+--   - on_punch(self, hitter)
+--   - on_rightclick(self, clicker)
+--   - get_staticdata(self)
+--     ^ return string that will be passed to on_activate when the object
+--       is created next time
+--
+-- Entity prototype table:
+-- {
+--     physical = true,
+--     collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
+--     visual = "cube"/"sprite",
+--     visual_size = {x=1, y=1},
+--     textures = {texture,texture,texture,texture,texture,texture},
+--     spritediv = {x=1, y=1},
+--     initial_sprite_basepos = {x=0, y=0},
+--     on_activate = function(self, staticdata),
+--     on_step = function(self, dtime),
+--     on_punch = function(self, hitter),
+--     on_rightclick = function(self, clicker),
+--     get_staticdata = function(self),
+--     # Also you can define arbitrary member variables here
+--     myvariable = whatever,
+-- }
+--
+-- Item definition options (register_node, register_craftitem, register_tool)
+-- {
+--     description = "Steel Axe",
+--     groups = {}, -- key=name, value=rating; rating=1..3.
+--                     if rating not applicable, use 1.
+--                     eg. {wool=1, fluffy=3}
+--                         {soil=2, outerspace=1, crumbly=1}
+--                         {bendy=2, snappy=1},
+--                         {hard=1, metal=1, spikes=1}
+--     inventory_image = "default_tool_steelaxe.png",
+--     wield_image = "",
+--     wield_scale = {x=1,y=1,z=1},
+--     stack_max = 99,
+--     liquids_pointable = false,
+--     tool_capabilities = {
+--         full_punch_interval = 1.0,
+--         max_drop_level=0,
+--         groupcaps={
+--             -- For example:
+--             fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
+--             snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
+--             choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
+--         }
+--     }
+--     on_drop = func(item, dropper, pos),
+--     on_place = func(item, placer, pointed_thing),
+--     on_use = func(item, user, pointed_thing),
+-- }
+--
+-- Node definition options (register_node):
+-- {
+--     <all fields allowed in item definitions>,
+--     drawtype = "normal",
+--     visual_scale = 1.0,
+--     tile_images = {"default_unknown_block.png"},
+--     special_materials = {
+--         {image="", backface_culling=true},
+--         {image="", backface_culling=true},
+--     },
+--     alpha = 255,
+--     post_effect_color = {a=0, r=0, g=0, b=0},
+--     paramtype = "none",
+--     paramtype2 = "none",
+--     is_ground_content = false,
+--     sunlight_propagates = false,
+--     walkable = true,
+--     pointable = true,
+--     diggable = true,
+--     climbable = false,
+--     buildable_to = false,
+--     drop = "",
+--     -- alternatively drop = { max_items = ..., items = { ... } }
+--     metadata_name = "",
+--     liquidtype = "none",
+--     liquid_alternative_flowing = "",
+--     liquid_alternative_source = "",
+--     liquid_viscosity = 0,
+--     light_source = 0,
+--     damage_per_second = 0,
+--     selection_box = {type="regular"},
+--     legacy_facedir_simple = false, -- Support maps made in and before January 2012
+--     legacy_wallmounted = false, -- Support maps made in and before January 2012
+-- }
+--
+-- Recipe:
+-- {
+--     output = 'default:pick_stone',
+--     recipe = {
+--         {'default:cobble', 'default:cobble', 'default:cobble'},
+--         {'', 'default:stick', ''},
+--         {'', 'default:stick', ''},
+--     },
+--     replacements = <optional list of item pairs,
+--                     replace one input item with another item on crafting>
+-- }
+--
+-- Recipe (shapeless):
+-- {
+--     type = "shapeless",
+--     output = 'mushrooms:mushroom_stew',
+--     recipe = {
+--         "mushrooms:bowl",
+--         "mushrooms:mushroom_brown",
+--         "mushrooms:mushroom_red",
+--     },
+--     replacements = <optional list of item pairs,
+--                     replace one input item with another item on crafting>
+-- }
+--
+-- Recipe (tool repair):
+-- {
+--     type = "toolrepair",
+--     additional_wear = -0.02,
+-- }
+--
+-- Recipe (cooking):
+-- {
+--     type = "cooking",
+--     output = "default:glass",
+--     recipe = "default:sand",
+--     cooktime = 3,
+-- }
+--
+-- Recipe (furnace fuel):
+-- {
+--     type = "fuel",
+--     recipe = "default:leaves",
+--     burntime = 1,
+-- }
+--
+-- ABM (ActiveBlockModifier) definition:
+-- {
+--     nodenames = {"default:lava_source"},
+--     neighbors = {"default:water_source", "default:water_flowing"}, -- (any of these)
+--      ^ If left out or empty, any neighbor will do
+--      ^ This might get removed in the future
+--     interval = 1.0, -- (operation interval)
+--     chance = 1, -- (chance of trigger is 1.0/this)
+--     action = func(pos, node, active_object_count, active_object_count_wider),
+-- }
+--
+-- Item groups:
+-- - Groups always have a rating associated with them. If there is no
+--   useful meaning for a rating for a given group, it shall be 1.
+-- - When not defined, the rating of a group defaults to 0.
+--
+-- Special groups:
+-- - dig_immediate:
+--   - 2: node is removed without tool wear after 1 second or so
+--   - 3: node is removed without tool wear immediately (like a torch)
+-- - level: Can be used to give an additional sense of progression in the game.
+--   - 0 is something that is directly accessible at the start of gameplay
+
+WATER_ALPHA = 160
+WATER_VISC = 1
+LAVA_VISC = 7
+LIGHT_MAX = 14
+
+-- Definitions made by this mod that other mods can use too
+default = {}
+
+--
+-- Tool definition
+--
+
+-- The hand
+minetest.register_item(":", {
+       type = "none",
+       wield_image = "wieldhand.png",
+       wield_scale = {x=1,y=1,z=2.5},
+       tool_capabilities = {
+               full_punch_interval = 1.0,
+               max_drop_level = 0,
+               groupcaps = {
+                       fleshy = {times={[2]=2.00, [3]=1.00}, maxwear=0, maxlevel=1},
+                       crumbly = {times={[3]=0.70}, maxwear=0, maxlevel=1},
+                       snappy = {times={[3]=0.70}, maxwear=0, maxlevel=1},
+               }
+       }
+})
+
+minetest.register_tool("default:pick_wood", {
+       description = "Wooden Pickaxe",
+       inventory_image = "default_tool_woodpick.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       cracky={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:pick_stone", {
+       description = "Stone Pickaxe",
+       inventory_image = "default_tool_stonepick.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       cracky={times={[1]=1.50, [2]=0.80, [3]=0.60}, maxwear=0.05, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:pick_steel", {
+       description = "Steel Pickaxe",
+       inventory_image = "default_tool_steelpick.png",
+       tool_capabilities = {
+               max_drop_level=1,
+               groupcaps={
+                       cracky={times={[1]=1.00, [2]=0.60, [3]=0.40}, maxwear=0.1, maxlevel=2}
+               }
+       },
+})
+minetest.register_tool("default:pick_mese", {
+       description = "Mese Pickaxe",
+       inventory_image = "default_tool_mesepick.png",
+       tool_capabilities = {
+               max_drop_level=3,
+               groupcaps={
+                       cracky={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3},
+                       crumbly={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3},
+                       snappy={times={[1]=0.2, [2]=0.2, [3]=0.2}, maxwear=0.05, maxlevel=3}
+               }
+       },
+})
+minetest.register_tool("default:shovel_wood", {
+       description = "Wooden Shovel",
+       inventory_image = "default_tool_woodshovel.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       crumbly={times={[1]=1.50, [2]=0.80, [3]=0.50}, maxwear=0.1, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:shovel_stone", {
+       description = "Stone Shovel",
+       inventory_image = "default_tool_stoneshovel.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       crumbly={times={[1]=0.80, [2]=0.50, [3]=0.30}, maxwear=0.05, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:shovel_steel", {
+       description = "Steel Shovel",
+       inventory_image = "default_tool_steelshovel.png",
+       tool_capabilities = {
+               max_drop_level=1,
+               groupcaps={
+                       crumbly={times={[1]=0.50, [2]=0.35, [3]=0.30}, maxwear=0.1, maxlevel=2}
+               }
+       },
+})
+minetest.register_tool("default:axe_wood", {
+       description = "Wooden Axe",
+       inventory_image = "default_tool_woodaxe.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       choppy={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1},
+                       fleshy={times={[2]=1.50, [3]=0.80}, maxwear=0.1, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:axe_stone", {
+       description = "Stone Axe",
+       inventory_image = "default_tool_stoneaxe.png",
+       tool_capabilities = {
+               max_drop_level=0,
+               groupcaps={
+                       choppy={times={[1]=1.50, [2]=1.00, [3]=0.60}, maxwear=0.05, maxlevel=1},
+                       fleshy={times={[2]=1.30, [3]=0.70}, maxwear=0.05, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:axe_steel", {
+       description = "Steel Axe",
+       inventory_image = "default_tool_steelaxe.png",
+       tool_capabilities = {
+               max_drop_level=1,
+               groupcaps={
+                       choppy={times={[1]=1.00, [2]=0.80, [3]=0.50}, maxwear=0.1, maxlevel=2},
+                       fleshy={times={[2]=1.10, [3]=0.60}, maxwear=0.03, maxlevel=1}
+               }
+       },
+})
+minetest.register_tool("default:sword_wood", {
+       description = "Wooden Sword",
+       inventory_image = "default_tool_woodsword.png",
+       tool_capabilities = {
+               full_punch_interval = 1.0,
+               max_drop_level=0,
+               groupcaps={
+                       fleshy={times={[2]=1.10, [3]=0.60}, maxwear=0.1, maxlevel=1},
+                       snappy={times={[2]=1.00, [3]=0.50}, maxwear=0.1, maxlevel=1},
+                       choppy={times={[3]=1.00}, maxwear=0.05, maxlevel=0}
+               }
+       }
+})
+minetest.register_tool("default:sword_stone", {
+       description = "Stone Sword",
+       inventory_image = "default_tool_stonesword.png",
+       tool_capabilities = {
+               full_punch_interval = 1.0,
+               max_drop_level=0,
+               groupcaps={
+                       fleshy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
+                       snappy={times={[2]=0.80, [3]=0.40}, maxwear=0.05, maxlevel=1},
+                       choppy={times={[3]=0.90}, maxwear=0.05, maxlevel=0}
+               }
+       }
+})
+minetest.register_tool("default:sword_steel", {
+       description = "Steel Sword",
+       inventory_image = "default_tool_steelsword.png",
+       tool_capabilities = {
+               full_punch_interval = 1.0,
+               max_drop_level=1,
+               groupcaps={
+                       fleshy={times={[1]=1.00, [2]=0.40, [3]=0.20}, maxwear=0.1, maxlevel=2},
+                       snappy={times={[2]=0.70, [3]=0.30}, maxwear=0.03, maxlevel=1},
+                       choppy={times={[3]=0.70}, maxwear=0.03, maxlevel=0}
+               }
+       }
+})
+
+--
+-- Crafting definition
+--
+
+minetest.register_craft({
+       output = 'default:wood 4',
+       recipe = {
+               {'default:tree'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:stick 4',
+       recipe = {
+               {'default:wood'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:fence_wood 2',
+       recipe = {
+               {'default:stick', 'default:stick', 'default:stick'},
+               {'default:stick', 'default:stick', 'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:sign_wall',
+       recipe = {
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'', 'default:stick', ''},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:torch 4',
+       recipe = {
+               {'default:coal_lump'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:pick_wood',
+       recipe = {
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'', 'default:stick', ''},
+               {'', 'default:stick', ''},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:pick_stone',
+       recipe = {
+               {'default:cobble', 'default:cobble', 'default:cobble'},
+               {'', 'default:stick', ''},
+               {'', 'default:stick', ''},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:pick_steel',
+       recipe = {
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+               {'', 'default:stick', ''},
+               {'', 'default:stick', ''},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:pick_mese',
+       recipe = {
+               {'default:mese', 'default:mese', 'default:mese'},
+               {'', 'default:stick', ''},
+               {'', 'default:stick', ''},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:shovel_wood',
+       recipe = {
+               {'default:wood'},
+               {'default:stick'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:shovel_stone',
+       recipe = {
+               {'default:cobble'},
+               {'default:stick'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:shovel_steel',
+       recipe = {
+               {'default:steel_ingot'},
+               {'default:stick'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:axe_wood',
+       recipe = {
+               {'default:wood', 'default:wood'},
+               {'default:wood', 'default:stick'},
+               {'', 'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:axe_stone',
+       recipe = {
+               {'default:cobble', 'default:cobble'},
+               {'default:cobble', 'default:stick'},
+               {'', 'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:axe_steel',
+       recipe = {
+               {'default:steel_ingot', 'default:steel_ingot'},
+               {'default:steel_ingot', 'default:stick'},
+               {'', 'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:sword_wood',
+       recipe = {
+               {'default:wood'},
+               {'default:wood'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:sword_stone',
+       recipe = {
+               {'default:cobble'},
+               {'default:cobble'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:sword_steel',
+       recipe = {
+               {'default:steel_ingot'},
+               {'default:steel_ingot'},
+               {'default:stick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:rail 15',
+       recipe = {
+               {'default:steel_ingot', '', 'default:steel_ingot'},
+               {'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
+               {'default:steel_ingot', '', 'default:steel_ingot'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:chest',
+       recipe = {
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'default:wood', '', 'default:wood'},
+               {'default:wood', 'default:wood', 'default:wood'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:chest_locked',
+       recipe = {
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'default:wood', 'default:steel_ingot', 'default:wood'},
+               {'default:wood', 'default:wood', 'default:wood'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:furnace',
+       recipe = {
+               {'default:cobble', 'default:cobble', 'default:cobble'},
+               {'default:cobble', '', 'default:cobble'},
+               {'default:cobble', 'default:cobble', 'default:cobble'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:steelblock',
+       recipe = {
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:sandstone',
+       recipe = {
+               {'default:sand', 'default:sand'},
+               {'default:sand', 'default:sand'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:clay',
+       recipe = {
+               {'default:clay_lump', 'default:clay_lump'},
+               {'default:clay_lump', 'default:clay_lump'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:brick',
+       recipe = {
+               {'default:clay_brick', 'default:clay_brick'},
+               {'default:clay_brick', 'default:clay_brick'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:paper',
+       recipe = {
+               {'default:papyrus', 'default:papyrus', 'default:papyrus'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:book',
+       recipe = {
+               {'default:paper'},
+               {'default:paper'},
+               {'default:paper'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:bookshelf',
+       recipe = {
+               {'default:wood', 'default:wood', 'default:wood'},
+               {'default:book', 'default:book', 'default:book'},
+               {'default:wood', 'default:wood', 'default:wood'},
+       }
+})
+
+minetest.register_craft({
+       output = 'default:ladder',
+       recipe = {
+               {'default:stick', '', 'default:stick'},
+               {'default:stick', 'default:stick', 'default:stick'},
+               {'default:stick', '', 'default:stick'},
+       }
+})
+
+--
+-- Crafting (tool repair)
+--
+minetest.register_craft({
+       type = "toolrepair",
+       additional_wear = -0.02,
+})
+
+--
+-- Cooking recipes
+--
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:glass",
+       recipe = "default:sand",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:coal_lump",
+       recipe = "default:tree",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:coal_lump",
+       recipe = "default:jungletree",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:stone",
+       recipe = "default:cobble",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:steel_ingot",
+       recipe = "default:iron_lump",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "default:clay_brick",
+       recipe = "default:clay_lump",
+})
+
+--
+-- Fuels
+--
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:tree",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:jungletree",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:junglegrass",
+       burntime = 2,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:leaves",
+       burntime = 1,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:cactus",
+       burntime = 15,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:papyrus",
+       burntime = 1,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:bookshelf",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:fence_wood",
+       burntime = 15,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:ladder",
+       burntime = 5,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:wood",
+       burntime = 7,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:mese",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:lava_source",
+       burntime = 60,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:torch",
+       burntime = 4,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:sign_wall",
+       burntime = 10,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:chest",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:chest_locked",
+       burntime = 30,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:nyancat",
+       burntime = 1,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:nyancat_rainbow",
+       burntime = 1,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:sapling",
+       burntime = 10,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:apple",
+       burntime = 3,
+})
+
+minetest.register_craft({
+       type = "fuel",
+       recipe = "default:coal_lump",
+       burntime = 40,
+})
+
+--
+-- Node definitions
+--
+
+minetest.register_node("default:stone", {
+       description = "Stone",
+       tile_images = {"default_stone.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+       drop = 'default:cobble',
+       legacy_mineral = true,
+})
+
+minetest.register_node("default:stone_with_coal", {
+       description = "Stone with coal",
+       tile_images = {"default_stone.png^default_mineral_coal.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+       drop = 'default:coal_lump',
+})
+
+minetest.register_node("default:stone_with_iron", {
+       description = "Stone with iron",
+       tile_images = {"default_stone.png^default_mineral_iron.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+       drop = 'default:iron_lump',
+})
+
+minetest.register_node("default:dirt_with_grass", {
+       description = "Dirt with grass",
+       tile_images = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
+       is_ground_content = true,
+       groups = {crumbly=3},
+       drop = 'default:dirt',
+})
+
+minetest.register_node("default:dirt_with_grass_footsteps", {
+       description = "Dirt with grass and footsteps",
+       tile_images = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
+       is_ground_content = true,
+       groups = {crumbly=3},
+       drop = 'default:dirt',
+})
+
+minetest.register_node("default:dirt", {
+       description = "Dirt",
+       tile_images = {"default_dirt.png"},
+       is_ground_content = true,
+       groups = {crumbly=3},
+})
+
+minetest.register_node("default:sand", {
+       description = "Sand",
+       tile_images = {"default_sand.png"},
+       is_ground_content = true,
+       groups = {crumbly=3},
+})
+
+minetest.register_node("default:gravel", {
+       description = "Gravel",
+       tile_images = {"default_gravel.png"},
+       is_ground_content = true,
+       groups = {crumbly=2},
+})
+
+minetest.register_node("default:sandstone", {
+       description = "Sandstone",
+       tile_images = {"default_sandstone.png"},
+       is_ground_content = true,
+       groups = {crumbly=2,cracky=2},
+       drop = 'default:sand',
+})
+
+minetest.register_node("default:clay", {
+       description = "Clay",
+       tile_images = {"default_clay.png"},
+       is_ground_content = true,
+       groups = {crumbly=3},
+       drop = 'default:clay_lump 4',
+})
+
+minetest.register_node("default:brick", {
+       description = "Brick",
+       tile_images = {"default_brick.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+       drop = 'default:clay_brick 4',
+})
+
+minetest.register_node("default:tree", {
+       description = "Tree",
+       tile_images = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
+       is_ground_content = true,
+       groups = {snappy=2,choppy=2},
+})
+
+minetest.register_node("default:jungletree", {
+       description = "Jungle Tree",
+       tile_images = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
+       is_ground_content = true,
+       groups = {snappy=2,choppy=2},
+})
+
+minetest.register_node("default:junglegrass", {
+       description = "Jungle Grass",
+       drawtype = "plantlike",
+       visual_scale = 1.3,
+       tile_images = {"default_junglegrass.png"},
+       inventory_image = "default_junglegrass.png",
+       wield_image = "default_junglegrass.png",
+       paramtype = "light",
+       walkable = false,
+       groups = {snappy=3},
+})
+
+minetest.register_node("default:leaves", {
+       description = "Leaves",
+       drawtype = "allfaces_optional",
+       visual_scale = 1.3,
+       tile_images = {"default_leaves.png"},
+       paramtype = "light",
+       groups = {snappy=3},
+       drop = {
+               max_items = 1,
+               items = {
+                       {
+                               -- player will get sapling with 1/20 chance
+                               items = {'default:sapling'},
+                               rarity = 20,
+                       },
+                       {
+                               -- player will get leaves only if he get no saplings,
+                               -- this is because max_items is 1
+                               items = {'default:leaves'},
+                       }
+               }
+       },
+})
+
+minetest.register_node("default:cactus", {
+       description = "Cactus",
+       tile_images = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
+       is_ground_content = true,
+       groups = {snappy=2,choppy=3},
+})
+
+minetest.register_node("default:papyrus", {
+       description = "Papyrus",
+       drawtype = "plantlike",
+       tile_images = {"default_papyrus.png"},
+       inventory_image = "default_papyrus.png",
+       wield_image = "default_papyrus.png",
+       paramtype = "light",
+       is_ground_content = true,
+       walkable = false,
+       groups = {snappy=3},
+})
+
+minetest.register_node("default:bookshelf", {
+       description = "Bookshelf",
+       tile_images = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
+       is_ground_content = true,
+       groups = {snappy=2,choppy=3},
+})
+
+minetest.register_node("default:glass", {
+       description = "Glass",
+       drawtype = "glasslike",
+       tile_images = {"default_glass.png"},
+       inventory_image = minetest.inventorycube("default_glass.png"),
+       paramtype = "light",
+       sunlight_propagates = true,
+       is_ground_content = true,
+       groups = {snappy=2,cracky=3},
+})
+
+minetest.register_node("default:fence_wood", {
+       description = "Wooden Fence",
+       drawtype = "fencelike",
+       tile_images = {"default_wood.png"},
+       inventory_image = "default_fence.png",
+       wield_image = "default_fence.png",
+       paramtype = "light",
+       is_ground_content = true,
+       selection_box = {
+               type = "fixed",
+               fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+       },
+       groups = {snappy=2,choppy=2},
+})
+
+minetest.register_node("default:rail", {
+       description = "Rail",
+       drawtype = "raillike",
+       tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
+       inventory_image = "default_rail.png",
+       wield_image = "default_rail.png",
+       paramtype = "light",
+       is_ground_content = true,
+       walkable = false,
+       selection_box = {
+               type = "fixed",
+               --fixed = <default>
+       },
+       groups = {bendy=2,snappy=1},
+})
+
+minetest.register_node("default:ladder", {
+       description = "Ladder",
+       drawtype = "signlike",
+       tile_images = {"default_ladder.png"},
+       inventory_image = "default_ladder.png",
+       wield_image = "default_ladder.png",
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       is_ground_content = true,
+       walkable = false,
+       climbable = true,
+       selection_box = {
+               type = "wallmounted",
+               --wall_top = = <default>
+               --wall_bottom = = <default>
+               --wall_side = = <default>
+       },
+       groups = {snappy=2,choppy=2},
+       legacy_wallmounted = true,
+})
+
+minetest.register_node("default:wood", {
+       description = "Wood",
+       tile_images = {"default_wood.png"},
+       is_ground_content = true,
+       groups = {snappy=2,choppy=2},
+})
+
+minetest.register_node("default:mese", {
+       description = "Mese",
+       tile_images = {"default_mese.png"},
+       is_ground_content = true,
+       groups = {cracky=1},
+})
+
+minetest.register_node("default:cloud", {
+       description = "Cloud",
+       tile_images = {"default_cloud.png"},
+       is_ground_content = true,
+})
+
+minetest.register_node("default:water_flowing", {
+       description = "Water (flowing)",
+       inventory_image = minetest.inventorycube("default_water.png"),
+       drawtype = "flowingliquid",
+       tile_images = {"default_water.png"},
+       alpha = WATER_ALPHA,
+       paramtype = "light",
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       liquidtype = "flowing",
+       liquid_alternative_flowing = "default:water_flowing",
+       liquid_alternative_source = "default:water_source",
+       liquid_viscosity = WATER_VISC,
+       post_effect_color = {a=64, r=100, g=100, b=200},
+       special_materials = {
+               {image="default_water.png", backface_culling=false},
+               {image="default_water.png", backface_culling=true},
+       },
+       groups = {water=3, liquid=3},
+})
+
+minetest.register_node("default:water_source", {
+       description = "Water",
+       inventory_image = minetest.inventorycube("default_water.png"),
+       drawtype = "liquid",
+       tile_images = {"default_water.png"},
+       alpha = WATER_ALPHA,
+       paramtype = "light",
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       liquidtype = "source",
+       liquid_alternative_flowing = "default:water_flowing",
+       liquid_alternative_source = "default:water_source",
+       liquid_viscosity = WATER_VISC,
+       post_effect_color = {a=64, r=100, g=100, b=200},
+       special_materials = {
+               -- New-style water source material (mostly unused)
+               {image="default_water.png", backface_culling=false},
+       },
+       groups = {water=3, liquid=3},
+})
+
+minetest.register_node("default:lava_flowing", {
+       description = "Lava (flowing)",
+       inventory_image = minetest.inventorycube("default_lava.png"),
+       drawtype = "flowingliquid",
+       tile_images = {"default_lava.png"},
+       paramtype = "light",
+       light_source = LIGHT_MAX - 1,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       liquidtype = "flowing",
+       liquid_alternative_flowing = "default:lava_flowing",
+       liquid_alternative_source = "default:lava_source",
+       liquid_viscosity = LAVA_VISC,
+       damage_per_second = 4*2,
+       post_effect_color = {a=192, r=255, g=64, b=0},
+       special_materials = {
+               {image="default_lava.png", backface_culling=false},
+               {image="default_lava.png", backface_culling=true},
+       },
+       groups = {lava=3, liquid=2, hot=3},
+})
+
+minetest.register_node("default:lava_source", {
+       description = "Lava",
+       inventory_image = minetest.inventorycube("default_lava.png"),
+       drawtype = "liquid",
+       tile_images = {"default_lava.png"},
+       paramtype = "light",
+       light_source = LIGHT_MAX - 1,
+       walkable = false,
+       pointable = false,
+       diggable = false,
+       buildable_to = true,
+       liquidtype = "source",
+       liquid_alternative_flowing = "default:lava_flowing",
+       liquid_alternative_source = "default:lava_source",
+       liquid_viscosity = LAVA_VISC,
+       damage_per_second = 4*2,
+       post_effect_color = {a=192, r=255, g=64, b=0},
+       special_materials = {
+               -- New-style lava source material (mostly unused)
+               {image="default_lava.png", backface_culling=false},
+       },
+       groups = {lava=3, liquid=2, hot=3},
+})
+
+minetest.register_node("default:torch", {
+       description = "Torch",
+       drawtype = "torchlike",
+       tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
+       inventory_image = "default_torch_on_floor.png",
+       wield_image = "default_torch_on_floor.png",
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       sunlight_propagates = true,
+       walkable = false,
+       light_source = LIGHT_MAX-1,
+       selection_box = {
+               type = "wallmounted",
+               wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
+               wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
+               wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
+       },
+       groups = {dig_immediate=3},
+       legacy_wallmounted = true,
+})
+
+minetest.register_node("default:sign_wall", {
+       description = "Sign",
+       drawtype = "signlike",
+       tile_images = {"default_sign_wall.png"},
+       inventory_image = "default_sign_wall.png",
+       wield_image = "default_sign_wall.png",
+       paramtype = "light",
+       paramtype2 = "wallmounted",
+       sunlight_propagates = true,
+       walkable = false,
+       metadata_name = "sign",
+       selection_box = {
+               type = "wallmounted",
+               --wall_top = <default>
+               --wall_bottom = <default>
+               --wall_side = <default>
+       },
+       groups = {dig_immediate=2},
+       legacy_wallmounted = true,
+})
+
+minetest.register_node("default:chest", {
+       description = "Chest",
+       tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
+               "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
+       paramtype2 = "facedir",
+       metadata_name = "chest",
+       groups = {snappy=2,choppy=2},
+       legacy_facedir_simple = true,
+})
+
+minetest.register_node("default:chest_locked", {
+       description = "Locked Chest",
+       tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
+               "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
+       paramtype2 = "facedir",
+       metadata_name = "locked_chest",
+       groups = {snappy=2,choppy=2},
+       legacy_facedir_simple = true,
+})
+
+minetest.register_node("default:furnace", {
+       description = "Furnace",
+       tile_images = {"default_furnace_side.png", "default_furnace_side.png", "default_furnace_side.png",
+               "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
+       paramtype2 = "facedir",
+       metadata_name = "furnace",
+       groups = {cracky=2},
+       legacy_facedir_simple = true,
+})
+
+minetest.register_node("default:cobble", {
+       description = "Cobble",
+       tile_images = {"default_cobble.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+})
+
+minetest.register_node("default:mossycobble", {
+       description = "Mossy Cobble",
+       tile_images = {"default_mossycobble.png"},
+       is_ground_content = true,
+       groups = {cracky=3},
+})
+
+minetest.register_node("default:steelblock", {
+       description = "Steel Block",
+       tile_images = {"default_steel_block.png"},
+       is_ground_content = true,
+       groups = {snappy=1,bendy=2},
+})
+
+minetest.register_node("default:nyancat", {
+       description = "Nyancat",
+       tile_images = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
+               "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
+       inventory_image = "default_nc_front.png",
+       paramtype2 = "facedir",
+       groups = {cracky=2},
+       legacy_facedir_simple = true,
+})
+
+minetest.register_node("default:nyancat_rainbow", {
+       description = "Nyancat Rainbow",
+       tile_images = {"default_nc_rb.png"},
+       inventory_image = "default_nc_rb.png",
+       groups = {cracky=2},
+})
+
+minetest.register_node("default:sapling", {
+       description = "Sapling",
+       drawtype = "plantlike",
+       visual_scale = 1.0,
+       tile_images = {"default_sapling.png"},
+       inventory_image = "default_sapling.png",
+       wield_image = "default_sapling.png",
+       paramtype = "light",
+       walkable = false,
+       groups = {dig_immediate=3},
+})
+
+minetest.register_node("default:apple", {
+       description = "Apple",
+       drawtype = "plantlike",
+       visual_scale = 1.0,
+       tile_images = {"default_apple.png"},
+       inventory_image = "default_apple.png",
+       paramtype = "light",
+       sunlight_propagates = true,
+       walkable = false,
+       groups = {dig_immediate=3},
+       on_use = minetest.item_eat(4),
+})
+
+--
+-- Crafting items
+--
+
+minetest.register_craftitem("default:stick", {
+       description = "Stick",
+       inventory_image = "default_stick.png",
+})
+
+minetest.register_craftitem("default:paper", {
+       description = "Paper",
+       inventory_image = "default_paper.png",
+})
+
+minetest.register_craftitem("default:book", {
+       description = "Book",
+       inventory_image = "default_book.png",
+})
+
+minetest.register_craftitem("default:coal_lump", {
+       description = "Lump of coal",
+       inventory_image = "default_coal_lump.png",
+})
+
+minetest.register_craftitem("default:iron_lump", {
+       description = "Lump of iron",
+       inventory_image = "default_iron_lump.png",
+})
+
+minetest.register_craftitem("default:clay_lump", {
+       description = "Lump of clay",
+       inventory_image = "default_clay_lump.png",
+})
+
+minetest.register_craftitem("default:steel_ingot", {
+       description = "Steel ingot",
+       inventory_image = "default_steel_ingot.png",
+})
+
+minetest.register_craftitem("default:clay_brick", {
+       description = "Clay brick",
+       inventory_image = "default_steel_ingot.png",
+       inventory_image = "default_clay_brick.png",
+})
+
+minetest.register_craftitem("default:scorched_stuff", {
+       description = "Scorched stuff",
+       inventory_image = "default_scorched_stuff.png",
+})
+
+--
+-- Creative inventory
+--
+
+minetest.add_to_creative_inventory('default:pick_mese')
+minetest.add_to_creative_inventory('default:pick_steel')
+minetest.add_to_creative_inventory('default:axe_steel')
+minetest.add_to_creative_inventory('default:shovel_steel')
+
+minetest.add_to_creative_inventory('default:torch')
+minetest.add_to_creative_inventory('default:cobble')
+minetest.add_to_creative_inventory('default:dirt')
+minetest.add_to_creative_inventory('default:stone')
+minetest.add_to_creative_inventory('default:sand')
+minetest.add_to_creative_inventory('default:sandstone')
+minetest.add_to_creative_inventory('default:clay')
+minetest.add_to_creative_inventory('default:brick')
+minetest.add_to_creative_inventory('default:tree')
+minetest.add_to_creative_inventory('default:wood')
+minetest.add_to_creative_inventory('default:leaves')
+minetest.add_to_creative_inventory('default:cactus')
+minetest.add_to_creative_inventory('default:papyrus')
+minetest.add_to_creative_inventory('default:bookshelf')
+minetest.add_to_creative_inventory('default:glass')
+minetest.add_to_creative_inventory('default:fence_wood')
+minetest.add_to_creative_inventory('default:rail')
+minetest.add_to_creative_inventory('default:mese')
+minetest.add_to_creative_inventory('default:chest')
+minetest.add_to_creative_inventory('default:furnace')
+minetest.add_to_creative_inventory('default:sign_wall')
+minetest.add_to_creative_inventory('default:water_source')
+minetest.add_to_creative_inventory('default:lava_source')
+minetest.add_to_creative_inventory('default:ladder')
+
+--
+-- Some common functions
+--
+
+default.falling_node_names = {}
+
+function nodeupdate_single(p)
+       n = minetest.env:get_node(p)
+       if default.falling_node_names[n.name] ~= nil then
+               p_bottom = {x=p.x, y=p.y-1, z=p.z}
+               n_bottom = minetest.env:get_node(p_bottom)
+               if n_bottom.name == "air" then
+                       minetest.env:remove_node(p)
+                       minetest.env:add_entity(p, "default:falling_"..n.name)
+                       nodeupdate(p)
+               end
+       end
+end
+
+function nodeupdate(p)
+       for x = -1,1 do
+       for y = -1,1 do
+       for z = -1,1 do
+               p2 = {x=p.x+x, y=p.y+y, z=p.z+z}
+               nodeupdate_single(p2)
+       end
+       end
+       end
+end
+
+--
+-- Falling stuff
+--
+
+function default.register_falling_node(nodename, texture)
+       default.falling_node_names[nodename] = true
+       -- Override naming conventions for stuff like :default:falling_default:sand
+       minetest.register_entity(":default:falling_"..nodename, {
+               -- Static definition
+               physical = true,
+               collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
+               visual = "cube",
+               textures = {texture,texture,texture,texture,texture,texture},
+               -- State
+               -- Methods
+               on_step = function(self, dtime)
+                       -- Set gravity
+                       self.object:setacceleration({x=0, y=-10, z=0})
+                       -- Turn to actual sand when collides to ground or just move
+                       local pos = self.object:getpos()
+                       local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
+                       local bcn = minetest.env:get_node(bcp)
+                       if bcn.name ~= "air" then
+                               -- Turn to a sand node
+                               local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
+                               minetest.env:add_node(np, {name=nodename})
+                               self.object:remove()
+                       else
+                               -- Do nothing
+                       end
+               end
+       })
+end
+
+default.register_falling_node("default:sand", "default_sand.png")
+default.register_falling_node("default:gravel", "default_gravel.png")
+
+--
+-- Global callbacks
+--
+
+-- Global environment step function
+function on_step(dtime)
+       -- print("on_step")
+end
+minetest.register_globalstep(on_step)
+
+function on_placenode(p, node)
+       --print("on_placenode")
+       nodeupdate(p)
+end
+minetest.register_on_placenode(on_placenode)
+
+function on_dignode(p, node)
+       --print("on_dignode")
+       nodeupdate(p)
+end
+minetest.register_on_dignode(on_dignode)
+
+function on_punchnode(p, node)
+end
+minetest.register_on_punchnode(on_punchnode)
+
+local function handle_give_command(cmd, giver, receiver, stackstring)
+       if not minetest.get_player_privs(giver)["give"] then
+               minetest.chat_send_player(giver, "error: you don't have permission to give")
+               return
+       end
+       minetest.debug("DEBUG: "..cmd..' invoked, stackstring="'..stackstring..'"')
+       minetest.log(cmd..' invoked, stackstring="'..stackstring..'"')
+       local itemstack = ItemStack(stackstring)
+       if itemstack:is_empty() then
+               minetest.chat_send_player(giver, 'error: cannot give an empty item')
+               return
+       elseif not itemstack:is_known() then
+               minetest.chat_send_player(giver, 'error: cannot give an unknown item')
+               return
+       end
+       local receiverref = minetest.env:get_player_by_name(receiver)
+       if receiverref == nil then
+               minetest.chat_send_player(giver, receiver..' is not a known player')
+               return
+       end
+       local leftover = receiverref:get_inventory():add_item("main", itemstack)
+       if leftover:is_empty() then
+               partiality = ""
+       elseif leftover:get_count() == itemstack:get_count() then
+               partiality = "could not be "
+       else
+               partiality = "partially "
+       end
+       -- The actual item stack string may be different from what the "giver"
+       -- entered (e.g. big numbers are always interpreted as 2^16-1).
+       stackstring = itemstack:to_string()
+       if giver == receiver then
+               minetest.chat_send_player(giver, '"'..stackstring
+                       ..'" '..partiality..'added to inventory.');
+       else
+               minetest.chat_send_player(giver, '"'..stackstring
+                       ..'" '..partiality..'added to '..receiver..'\'s inventory.');
+               minetest.chat_send_player(receiver, '"'..stackstring
+                       ..'" '..partiality..'added to inventory.');
+       end
+end
+
+minetest.register_on_chat_message(function(name, message)
+       --print("default on_chat_message: name="..dump(name).." message="..dump(message))
+       local cmd = "/giveme"
+       if message:sub(0, #cmd) == cmd then
+               local stackstring = string.match(message, cmd.." (.*)")
+               if stackstring == nil then
+                       minetest.chat_send_player(name, 'usage: '..cmd..' stackstring')
+                       return true -- Handled chat message
+               end
+               handle_give_command(cmd, name, name, stackstring)
+               return true
+       end
+       local cmd = "/give"
+       if message:sub(0, #cmd) == cmd then
+               local receiver, stackstring = string.match(message, cmd.." ([%a%d_-]+) (.*)")
+               if receiver == nil or stackstring == nil then
+                       minetest.chat_send_player(name, 'usage: '..cmd..' name stackstring')
+                       return true -- Handled chat message
+               end
+               handle_give_command(cmd, name, receiver, stackstring)
+               return true
+       end
+       local cmd = "/spawnentity"
+       if message:sub(0, #cmd) == cmd then
+               if not minetest.get_player_privs(name)["give"] then
+                       minetest.chat_send_player(name, "you don't have permission to spawn (give)")
+                       return true -- Handled chat message
+               end
+               if not minetest.get_player_privs(name)["interact"] then
+                       minetest.chat_send_player(name, "you don't have permission to interact")
+                       return true -- Handled chat message
+               end
+               local entityname = string.match(message, cmd.." (.*)")
+               if entityname == nil then
+                       minetest.chat_send_player(name, 'usage: '..cmd..' entityname')
+                       return true -- Handled chat message
+               end
+               print(cmd..' invoked, entityname="'..entityname..'"')
+               local player = minetest.env:get_player_by_name(name)
+               if player == nil then
+                       print("Unable to spawn entity, player is nil")
+                       return true -- Handled chat message
+               end
+               local p = player:getpos()
+               p.y = p.y + 1
+               minetest.env:add_entity(p, entityname)
+               minetest.chat_send_player(name, '"'..entityname
+                               ..'" spawned.');
+               return true -- Handled chat message
+       end
+       local cmd = "/pulverize"
+       if message:sub(0, #cmd) == cmd then
+               local player = minetest.env:get_player_by_name(name)
+               if player == nil then
+                       print("Unable to pulverize, player is nil")
+                       return true -- Handled chat message
+               end
+               if player:get_wielded_item():is_empty() then
+                       minetest.chat_send_player(name, 'Unable to pulverize, no item in hand.')
+               else
+                       player:set_wielded_item(nil)
+                       minetest.chat_send_player(name, 'An item was pulverized.')
+               end
+               return true
+       end
+end)
+
+--
+-- Done, print some random stuff
+--
+
+--print("minetest.registered_entities:")
+--dump2(minetest.registered_entities)
+
+-- END
diff --git a/share/server/games/mesetint/mods/default/textures/crack.png b/share/server/games/mesetint/mods/default/textures/crack.png
new file mode 100644 (file)
index 0000000..4997839
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/crack.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_apple.png b/share/server/games/mesetint/mods/default/textures/default_apple.png
new file mode 100644 (file)
index 0000000..9593f28
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_apple.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_book.png b/share/server/games/mesetint/mods/default/textures/default_book.png
new file mode 100644 (file)
index 0000000..176fb6a
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_book.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_bookshelf.png b/share/server/games/mesetint/mods/default/textures/default_bookshelf.png
new file mode 100644 (file)
index 0000000..5ecc50f
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_bookshelf.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_brick.png b/share/server/games/mesetint/mods/default/textures/default_brick.png
new file mode 100644 (file)
index 0000000..32d77f3
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_brick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_cactus_side.png b/share/server/games/mesetint/mods/default/textures/default_cactus_side.png
new file mode 100644 (file)
index 0000000..fc479fd
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_cactus_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_cactus_top.png b/share/server/games/mesetint/mods/default/textures/default_cactus_top.png
new file mode 100644 (file)
index 0000000..f9e68df
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_cactus_top.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_chest_front.png b/share/server/games/mesetint/mods/default/textures/default_chest_front.png
new file mode 100644 (file)
index 0000000..c5628af
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_chest_front.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_chest_lock.png b/share/server/games/mesetint/mods/default/textures/default_chest_lock.png
new file mode 100644 (file)
index 0000000..ae038fa
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_chest_lock.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_chest_side.png b/share/server/games/mesetint/mods/default/textures/default_chest_side.png
new file mode 100644 (file)
index 0000000..916dd78
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_chest_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_chest_top.png b/share/server/games/mesetint/mods/default/textures/default_chest_top.png
new file mode 100644 (file)
index 0000000..58c7967
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_chest_top.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_clay.png b/share/server/games/mesetint/mods/default/textures/default_clay.png
new file mode 100644 (file)
index 0000000..3557429
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_clay.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_clay_brick.png b/share/server/games/mesetint/mods/default/textures/default_clay_brick.png
new file mode 100644 (file)
index 0000000..e36648e
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_clay_brick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_clay_lump.png b/share/server/games/mesetint/mods/default/textures/default_clay_lump.png
new file mode 100644 (file)
index 0000000..be0bab9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_clay_lump.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_cloud.png b/share/server/games/mesetint/mods/default/textures/default_cloud.png
new file mode 100644 (file)
index 0000000..24091a3
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_cloud.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_coal_lump.png b/share/server/games/mesetint/mods/default/textures/default_coal_lump.png
new file mode 100644 (file)
index 0000000..bad901e
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_coal_lump.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_cobble.png b/share/server/games/mesetint/mods/default/textures/default_cobble.png
new file mode 100644 (file)
index 0000000..7d04474
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_cobble.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_dirt.png b/share/server/games/mesetint/mods/default/textures/default_dirt.png
new file mode 100644 (file)
index 0000000..7cb9c89
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_dirt.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_fence.png b/share/server/games/mesetint/mods/default/textures/default_fence.png
new file mode 100644 (file)
index 0000000..0b99f0e
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_fence.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_furnace_front.png b/share/server/games/mesetint/mods/default/textures/default_furnace_front.png
new file mode 100644 (file)
index 0000000..1620a27
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_furnace_front.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_furnace_side.png b/share/server/games/mesetint/mods/default/textures/default_furnace_side.png
new file mode 100644 (file)
index 0000000..63cb162
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_furnace_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_glass.png b/share/server/games/mesetint/mods/default/textures/default_glass.png
new file mode 100644 (file)
index 0000000..ade0196
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_glass.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_grass.png b/share/server/games/mesetint/mods/default/textures/default_grass.png
new file mode 100644 (file)
index 0000000..3610bb2
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_grass.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_grass_footsteps.png b/share/server/games/mesetint/mods/default/textures/default_grass_footsteps.png
new file mode 100644 (file)
index 0000000..57e063d
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_grass_footsteps.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_grass_side.png b/share/server/games/mesetint/mods/default/textures/default_grass_side.png
new file mode 100644 (file)
index 0000000..4f4f680
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_grass_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_gravel.png b/share/server/games/mesetint/mods/default/textures/default_gravel.png
new file mode 100644 (file)
index 0000000..f08666a
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_gravel.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_iron_lump.png b/share/server/games/mesetint/mods/default/textures/default_iron_lump.png
new file mode 100644 (file)
index 0000000..edb9310
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_iron_lump.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_junglegrass.png b/share/server/games/mesetint/mods/default/textures/default_junglegrass.png
new file mode 100644 (file)
index 0000000..eea87c0
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_junglegrass.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_jungletree.png b/share/server/games/mesetint/mods/default/textures/default_jungletree.png
new file mode 100644 (file)
index 0000000..ccd20ac
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_jungletree.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_jungletree_top.png b/share/server/games/mesetint/mods/default/textures/default_jungletree_top.png
new file mode 100644 (file)
index 0000000..2a9b513
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_jungletree_top.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_ladder.png b/share/server/games/mesetint/mods/default/textures/default_ladder.png
new file mode 100644 (file)
index 0000000..1105635
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_ladder.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_lava.png b/share/server/games/mesetint/mods/default/textures/default_lava.png
new file mode 100644 (file)
index 0000000..cb02ada
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_lava.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_leaves.png b/share/server/games/mesetint/mods/default/textures/default_leaves.png
new file mode 100644 (file)
index 0000000..7a25126
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_leaves.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_mese.png b/share/server/games/mesetint/mods/default/textures/default_mese.png
new file mode 100644 (file)
index 0000000..4c876cd
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_mese.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_mineral_coal.png b/share/server/games/mesetint/mods/default/textures/default_mineral_coal.png
new file mode 100644 (file)
index 0000000..3ff9692
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_mineral_coal.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_mineral_iron.png b/share/server/games/mesetint/mods/default/textures/default_mineral_iron.png
new file mode 100644 (file)
index 0000000..51b15d9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_mineral_iron.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_mossycobble.png b/share/server/games/mesetint/mods/default/textures/default_mossycobble.png
new file mode 100644 (file)
index 0000000..fad1b33
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_mossycobble.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_nc_back.png b/share/server/games/mesetint/mods/default/textures/default_nc_back.png
new file mode 100644 (file)
index 0000000..f09f416
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_nc_back.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_nc_front.png b/share/server/games/mesetint/mods/default/textures/default_nc_front.png
new file mode 100644 (file)
index 0000000..cad9eda
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_nc_front.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_nc_rb.png b/share/server/games/mesetint/mods/default/textures/default_nc_rb.png
new file mode 100644 (file)
index 0000000..7ebc993
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_nc_rb.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_nc_side.png b/share/server/games/mesetint/mods/default/textures/default_nc_side.png
new file mode 100644 (file)
index 0000000..f954045
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_nc_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_paper.png b/share/server/games/mesetint/mods/default/textures/default_paper.png
new file mode 100644 (file)
index 0000000..ae5c06b
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_paper.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_papyrus.png b/share/server/games/mesetint/mods/default/textures/default_papyrus.png
new file mode 100644 (file)
index 0000000..bf0dec7
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_papyrus.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_rail.png b/share/server/games/mesetint/mods/default/textures/default_rail.png
new file mode 100644 (file)
index 0000000..18176d9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_rail.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_rail_crossing.png b/share/server/games/mesetint/mods/default/textures/default_rail_crossing.png
new file mode 100644 (file)
index 0000000..9846405
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_rail_crossing.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_rail_curved.png b/share/server/games/mesetint/mods/default/textures/default_rail_curved.png
new file mode 100644 (file)
index 0000000..62afa3d
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_rail_curved.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_rail_t_junction.png b/share/server/games/mesetint/mods/default/textures/default_rail_t_junction.png
new file mode 100644 (file)
index 0000000..9985f63
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_rail_t_junction.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sand.png b/share/server/games/mesetint/mods/default/textures/default_sand.png
new file mode 100644 (file)
index 0000000..15101a7
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sand.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sandstone.png b/share/server/games/mesetint/mods/default/textures/default_sandstone.png
new file mode 100644 (file)
index 0000000..c4759b4
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sandstone.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sapling.png b/share/server/games/mesetint/mods/default/textures/default_sapling.png
new file mode 100644 (file)
index 0000000..73f5023
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sapling.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_scorched_stuff.png b/share/server/games/mesetint/mods/default/textures/default_scorched_stuff.png
new file mode 100644 (file)
index 0000000..9ced2fb
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_scorched_stuff.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sign.png b/share/server/games/mesetint/mods/default/textures/default_sign.png
new file mode 100644 (file)
index 0000000..2e0b3cb
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sign.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sign_back.png b/share/server/games/mesetint/mods/default/textures/default_sign_back.png
new file mode 100644 (file)
index 0000000..779e4bc
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sign_back.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_sign_wall.png b/share/server/games/mesetint/mods/default/textures/default_sign_wall.png
new file mode 100644 (file)
index 0000000..06eac1e
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_sign_wall.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_steel_block.png b/share/server/games/mesetint/mods/default/textures/default_steel_block.png
new file mode 100644 (file)
index 0000000..8e20200
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_steel_block.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_steel_ingot.png b/share/server/games/mesetint/mods/default/textures/default_steel_ingot.png
new file mode 100644 (file)
index 0000000..f6c9414
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_steel_ingot.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_stick.png b/share/server/games/mesetint/mods/default/textures/default_stick.png
new file mode 100644 (file)
index 0000000..2d31797
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_stick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_stone.png b/share/server/games/mesetint/mods/default/textures/default_stone.png
new file mode 100644 (file)
index 0000000..cad0dbe
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_stone.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tnt_bottom.png b/share/server/games/mesetint/mods/default/textures/default_tnt_bottom.png
new file mode 100644 (file)
index 0000000..8ba2fca
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tnt_bottom.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tnt_side.png b/share/server/games/mesetint/mods/default/textures/default_tnt_side.png
new file mode 100644 (file)
index 0000000..d9a2bc4
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tnt_side.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tnt_top.png b/share/server/games/mesetint/mods/default/textures/default_tnt_top.png
new file mode 100644 (file)
index 0000000..a84ffc9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tnt_top.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_mesepick.png b/share/server/games/mesetint/mods/default/textures/default_tool_mesepick.png
new file mode 100644 (file)
index 0000000..a1f3812
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_mesepick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_steelaxe.png b/share/server/games/mesetint/mods/default/textures/default_tool_steelaxe.png
new file mode 100644 (file)
index 0000000..0ad23c9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_steelaxe.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_steelpick.png b/share/server/games/mesetint/mods/default/textures/default_tool_steelpick.png
new file mode 100644 (file)
index 0000000..7982daf
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_steelpick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_steelshovel.png b/share/server/games/mesetint/mods/default/textures/default_tool_steelshovel.png
new file mode 100644 (file)
index 0000000..ed84138
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_steelshovel.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_steelsword.png b/share/server/games/mesetint/mods/default/textures/default_tool_steelsword.png
new file mode 100644 (file)
index 0000000..a745812
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_steelsword.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_stoneaxe.png b/share/server/games/mesetint/mods/default/textures/default_tool_stoneaxe.png
new file mode 100644 (file)
index 0000000..698ac91
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_stoneaxe.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_stonepick.png b/share/server/games/mesetint/mods/default/textures/default_tool_stonepick.png
new file mode 100644 (file)
index 0000000..b34de6f
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_stonepick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_stoneshovel.png b/share/server/games/mesetint/mods/default/textures/default_tool_stoneshovel.png
new file mode 100644 (file)
index 0000000..ba52431
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_stoneshovel.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_stonesword.png b/share/server/games/mesetint/mods/default/textures/default_tool_stonesword.png
new file mode 100644 (file)
index 0000000..8f8191f
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_stonesword.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_woodaxe.png b/share/server/games/mesetint/mods/default/textures/default_tool_woodaxe.png
new file mode 100644 (file)
index 0000000..3daa4af
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_woodaxe.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_woodpick.png b/share/server/games/mesetint/mods/default/textures/default_tool_woodpick.png
new file mode 100644 (file)
index 0000000..ea728cc
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_woodpick.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_woodshovel.png b/share/server/games/mesetint/mods/default/textures/default_tool_woodshovel.png
new file mode 100644 (file)
index 0000000..649ab4c
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_woodshovel.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tool_woodsword.png b/share/server/games/mesetint/mods/default/textures/default_tool_woodsword.png
new file mode 100644 (file)
index 0000000..d6c6be3
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tool_woodsword.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_torch.png b/share/server/games/mesetint/mods/default/textures/default_torch.png
new file mode 100644 (file)
index 0000000..7a953c2
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_torch.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_torch_on_ceiling.png b/share/server/games/mesetint/mods/default/textures/default_torch_on_ceiling.png
new file mode 100644 (file)
index 0000000..6965d38
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_torch_on_ceiling.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_torch_on_floor.png b/share/server/games/mesetint/mods/default/textures/default_torch_on_floor.png
new file mode 100644 (file)
index 0000000..76d1dd5
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_torch_on_floor.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tree.png b/share/server/games/mesetint/mods/default/textures/default_tree.png
new file mode 100644 (file)
index 0000000..65abfc2
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tree.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_tree_top.png b/share/server/games/mesetint/mods/default/textures/default_tree_top.png
new file mode 100644 (file)
index 0000000..2cdd94f
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_tree_top.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_water.png b/share/server/games/mesetint/mods/default/textures/default_water.png
new file mode 100644 (file)
index 0000000..e5f8cdc
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_water.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/default_wood.png b/share/server/games/mesetint/mods/default/textures/default_wood.png
new file mode 100644 (file)
index 0000000..57c1d7c
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/default_wood.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/heart.png b/share/server/games/mesetint/mods/default/textures/heart.png
new file mode 100644 (file)
index 0000000..6bc183e
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/heart.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/player.png b/share/server/games/mesetint/mods/default/textures/player.png
new file mode 100644 (file)
index 0000000..90adf97
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/player.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/player_back.png b/share/server/games/mesetint/mods/default/textures/player_back.png
new file mode 100644 (file)
index 0000000..530aa75
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/player_back.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox1.png b/share/server/games/mesetint/mods/default/textures/skybox1.png
new file mode 100644 (file)
index 0000000..9801d5f
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox1.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox1_dawn.png b/share/server/games/mesetint/mods/default/textures/skybox1_dawn.png
new file mode 100644 (file)
index 0000000..9711c47
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox1_dawn.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox1_night.png b/share/server/games/mesetint/mods/default/textures/skybox1_night.png
new file mode 100644 (file)
index 0000000..32e43a6
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox1_night.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox2.png b/share/server/games/mesetint/mods/default/textures/skybox2.png
new file mode 100644 (file)
index 0000000..a8c94b4
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox2.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox2_dawn.png b/share/server/games/mesetint/mods/default/textures/skybox2_dawn.png
new file mode 100644 (file)
index 0000000..a761dff
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox2_dawn.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox2_night.png b/share/server/games/mesetint/mods/default/textures/skybox2_night.png
new file mode 100644 (file)
index 0000000..beb07a9
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox2_night.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox3.png b/share/server/games/mesetint/mods/default/textures/skybox3.png
new file mode 100644 (file)
index 0000000..2776ec7
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox3.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox3_dawn.png b/share/server/games/mesetint/mods/default/textures/skybox3_dawn.png
new file mode 100644 (file)
index 0000000..22c8cbe
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox3_dawn.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/skybox3_night.png b/share/server/games/mesetint/mods/default/textures/skybox3_night.png
new file mode 100644 (file)
index 0000000..bb50978
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/skybox3_night.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/treeprop.png b/share/server/games/mesetint/mods/default/textures/treeprop.png
new file mode 100644 (file)
index 0000000..77ea4d6
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/treeprop.png differ
diff --git a/share/server/games/mesetint/mods/default/textures/wieldhand.png b/share/server/games/mesetint/mods/default/textures/wieldhand.png
new file mode 100644 (file)
index 0000000..c4549e5
Binary files /dev/null and b/share/server/games/mesetint/mods/default/textures/wieldhand.png differ
diff --git a/share/server/games/mesetint/mods/experimental/depends.txt b/share/server/games/mesetint/mods/experimental/depends.txt
new file mode 100644 (file)
index 0000000..3a7daa1
--- /dev/null
@@ -0,0 +1,2 @@
+default
+
diff --git a/share/server/games/mesetint/mods/experimental/init.lua b/share/server/games/mesetint/mods/experimental/init.lua
new file mode 100644 (file)
index 0000000..1ee3fdc
--- /dev/null
@@ -0,0 +1,616 @@
+--
+-- Experimental things
+--
+
+-- For testing random stuff
+
+experimental = {}
+
+function on_step(dtime)
+       -- print("experimental on_step")
+       --[[
+       objs = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 10)
+       for k, obj in pairs(objs) do
+               name = obj:get_player_name()
+               if name then
+                       print(name.." at "..dump(obj:getpos()))
+                       print(name.." dir: "..dump(obj:get_look_dir()))
+                       print(name.." pitch: "..dump(obj:get_look_pitch()))
+                       print(name.." yaw: "..dump(obj:get_look_yaw()))
+               else
+                       print("Some object at "..dump(obj:getpos()))
+               end
+       end
+       --]]
+       --[[
+       if experimental.t1 == nil then
+               experimental.t1 = 0
+       end
+       experimental.t1 = experimental.t1 + dtime
+       if experimental.t1 >= 2 then
+               experimental.t1 = experimental.t1 - 2
+               minetest.log("time of day is "..minetest.env:get_timeofday())
+               if experimental.day then
+                       minetest.log("forcing day->night")
+                       experimental.day = false
+                       minetest.env:set_timeofday(0.0)
+               else
+                       minetest.log("forcing night->day")
+                       experimental.day = true
+                       minetest.env:set_timeofday(0.5)
+               end
+               minetest.log("time of day is "..minetest.env:get_timeofday())
+       end
+       --]]
+end
+minetest.register_globalstep(on_step)
+
+-- An example furnace-thing implemented in Lua
+
+--[[
+minetest.register_node("experimental:luafurnace", {
+       tile_images = {"default_lava.png", "default_furnace_side.png",
+               "default_furnace_side.png", "default_furnace_side.png",
+               "default_furnace_side.png", "default_furnace_front.png"},
+       --inventory_image = "furnace_front.png",
+       inventory_image = minetest.inventorycube("default_furnace_front.png"),
+       paramtype = "facedir_simple",
+       metadata_name = "generic",
+       material = minetest.digprop_stonelike(3.0),
+})
+
+minetest.register_on_placenode(function(pos, newnode, placer)
+       if newnode.name == "experimental:luafurnace" then
+               local meta = minetest.env:get_meta(pos)
+               meta:inventory_set_list("fuel", {""})
+               meta:inventory_set_list("src", {""})
+               meta:inventory_set_list("dst", {"","","",""})
+               meta:set_inventory_draw_spec(
+                       "invsize[8,9;]"
+                       .."list[current_name;fuel;2,3;1,1;]"
+                       .."list[current_name;src;2,1;1,1;]"
+                       .."list[current_name;dst;5,1;2,2;]"
+                       .."list[current_player;main;0,5;8,4;]"
+               )
+               
+               local total_cooked = 0;
+               meta:set_string("total_cooked", total_cooked)
+               meta:set_infotext("Lua Furnace: total cooked: "..total_cooked)
+       end
+end)
+
+minetest.register_abm({
+       nodenames = {"experimental:luafurnace"},
+       interval = 1.0,
+       chance = 1,
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               local meta = minetest.env:get_meta(pos)
+               for i, name in ipairs({
+                               "fuel_totaltime",
+                               "fuel_time",
+                               "src_totaltime",
+                               "src_time"
+               }) do
+                       if not meta:get_string(name) then
+                               meta:set_string(name, 0)
+                       end
+               end
+
+               local inv = meta:get_inventory()
+               
+               local fuelitem = inv:get_stack("fuel", 1):peek_item()
+               local srcitem = inv:get_stack("src", 1):peek_item()
+               --print("fuelitem="..dump(fuelitem))
+               --print("srcitem="..dump(srcitem))
+               
+               local was_active = false
+
+               local src_cooktime = -1
+               local result_stackstring = nil
+               
+               if srcitem then
+                       local prop = get_item_definition(srcitem)
+                       if prop and prop.cookresult_itemstring ~= "" then
+                               result_stackstring = prop.cookresult_itemstring
+                               src_cooktime = prop.furnace_cooktime or 3
+                       end
+               end
+
+               print("src_cooktime="..dump(src_cooktime))
+               print("result_stackstring="..dump(result_stackstring))
+
+               if tonumber(meta:get_string("fuel_time")) < tonumber(meta:get_string("fuel_totaltime")) then
+                       was_active = true
+                       meta:set_string("fuel_time", tonumber(meta:get_string("fuel_time")) + 1)
+                       meta:set_string("src_time", tonumber(meta:get_string("src_time")) + 1)
+                       --print("result_stackstring="..dump(result_stackstring))
+                       --print('tonumber(meta:get_string("src_time"))='..dump(tonumber(meta:get_string("src_time"))))
+                       --print("src_cooktime="..dump(src_cooktime))
+                       if result_stackstring and tonumber(meta:get_string("src_time")) >= src_cooktime and src_cooktime >= 0 then
+                               -- Put result in "dst" list
+                               success = inv:autoinsert_stackstring("dst", result_stackstring)
+                               if not success then
+                                       print("Could not autoinsert '"..result_stackstring.."'")
+                               end
+                               -- If succeeded, take stuff from "src" list
+                               if success then
+                                       srcstack = inv:get_stack("src", 1)
+                                       srcstack:take_item()
+                                       inv:set_stack("src", 1, srcstack)
+                               end
+                               meta:set_string("src_time", 0)
+                       end
+               end
+               
+               if tonumber(meta:get_string("fuel_time")) < tonumber(meta:get_string("fuel_totaltime")) then
+                       meta:set_infotext("Furnace active: "..(tonumber(meta:get_string("fuel_time"))/tonumber(meta:get_string("fuel_totaltime"))*100).."%")
+                       return
+               end
+
+               local srcitem = inv:get_stack("src", 1):peek_item()
+
+               local src_cooktime = 0
+               local result_stackstring = nil
+               
+               if srcitem then
+                       local prop = get_item_definition(srcitem)
+                       if prop and prop.cookresult_itemstring ~= "" then
+                               result_stackstring = prop.cookresult_itemstring
+                               src_cooktime = prop.furnace_cooktime or 3
+                       end
+               end
+
+               local fuelitem = inv:get_stack("fuel", 1):peek_item()
+
+               if not result_stackstring or not fuelitem then
+                       if was_active then
+                               meta:set_infotext("Furnace is empty")
+                       end
+                       return
+               end
+
+               local burntime = -1
+               if fuelitem then
+                       local prop = get_item_definition(fuelitem)
+                       if prop then
+                               burntime = prop.furnace_burntime or -1
+                       end
+               end
+
+               if burntime <= 0 then
+                       meta:set_infotext("Furnace out of fuel")
+                       return
+               end
+
+               meta:set_string("fuel_totaltime", burntime)
+               meta:set_string("fuel_time", 0)
+               
+               local stack = inv:get_stack("fuel", 1)
+               stack:take_item()
+               inv:set_stack("fuel", 1, stack)
+       end,
+})
+minetest.register_abm({
+       nodenames = {"experimental:luafurnace"},
+       interval = 1.0,
+       chance = 1,
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               local meta = minetest.env:get_meta(pos)
+               local fuellist = meta:inventory_get_list("fuel")
+               local srclist = meta:inventory_get_list("src")
+               local dstlist = meta:inventory_get_list("dst")
+               if fuellist == nil or srclist == nil or dstlist == nil then
+                       return
+               end
+               _, srcitem = stackstring_take_item(srclist[1])
+               _, fuelitem = stackstring_take_item(fuellist[1])
+               if not srcitem or not fuelitem then return end
+               if fuelitem.type == "node" then
+                       local prop = minetest.registered_nodes[fuelitem.name]
+                       if prop == nil then return end
+                       if prop.furnace_burntime < 0 then return end
+               else
+                       return
+               end
+               local resultstack = nil
+               if srcitem.type == "node" then
+                       local prop = minetest.registered_nodes[srcitem.name]
+                       if prop == nil then return end
+                       if prop.cookresult_item == "" then return end
+                       resultstack = prop.cookresult_item
+               else
+                       return
+               end
+
+               if resultstack == nil then
+                       return
+               end
+
+               dstlist[1], success = stackstring_put_stackstring(dstlist[1], resultstack)
+               if not success then
+                       return
+               end
+
+               fuellist[1], _ = stackstring_take_item(fuellist[1])
+               srclist[1], _ = stackstring_take_item(srclist[1])
+
+               meta:inventory_set_list("fuel", fuellist)
+               meta:inventory_set_list("src", srclist)
+               meta:inventory_set_list("dst", dstlist)
+
+               local total_cooked = meta:get_string("total_cooked")
+               total_cooked = tonumber(total_cooked) + 1
+               meta:set_string("total_cooked", total_cooked)
+               meta:set_infotext("Lua Furnace: total cooked: "..total_cooked)
+       end,
+})
+minetest.register_craft({
+       output = 'node "experimental:luafurnace" 1',
+       recipe = {
+               {'node "default:cobble"', 'node "default:cobble"', 'node "default:cobble"'},
+               {'node "default:cobble"', 'node "default:steel_ingot"', 'node "default:cobble"'},
+               {'node "default:cobble"', 'node "default:cobble"', 'node "default:cobble"'},
+       }
+})
+--]]
+
+--
+-- Random stuff
+--
+
+--[[
+minetest.register_tool("experimental:horribletool", {
+       image = "default_lava.png",
+       basetime = 2.0
+       dt_weight = 0.2
+       dt_crackiness = 0.2
+       dt_crumbliness = 0.2
+       dt_cuttability = 0.2
+       basedurability = 50
+       dd_weight = -5
+       dd_crackiness = -5
+       dd_crumbliness = -5
+       dd_cuttability = -5
+})
+--]]
+
+--
+-- TNT (not functional)
+--
+
+minetest.register_craft({
+       output = 'experimental:tnt',
+       recipe = {
+               {'default:wood'},
+               {'default:coal_lump'},
+               {'default:wood'}
+       }
+})
+
+minetest.register_node("experimental:tnt", {
+       tile_images = {"default_tnt_top.png", "default_tnt_bottom.png",
+                       "default_tnt_side.png", "default_tnt_side.png",
+                       "default_tnt_side.png", "default_tnt_side.png"},
+       inventory_image = minetest.inventorycube("default_tnt_top.png",
+                       "default_tnt_side.png", "default_tnt_side.png"),
+       drop = '', -- Get nothing
+       material = {
+               diggability = "not",
+       },
+})
+
+minetest.register_on_punchnode(function(p, node)
+       if node.name == "experimental:tnt" then
+               minetest.env:remove_node(p)
+               minetest.env:add_entity(p, "experimental:tnt")
+               nodeupdate(p)
+       end
+end)
+
+local TNT = {
+       -- Static definition
+       physical = true, -- Collides with things
+       -- weight = 5,
+       collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
+       visual = "cube",
+       textures = {"default_tnt_top.png", "default_tnt_bottom.png",
+                       "default_tnt_side.png", "default_tnt_side.png",
+                       "default_tnt_side.png", "default_tnt_side.png"},
+       -- Initial value for our timer
+       timer = 0,
+       -- Number of punches required to defuse
+       health = 1,
+       blinktimer = 0,
+       blinkstatus = true,
+}
+
+-- Called when a TNT object is created
+function TNT:on_activate(staticdata)
+       print("TNT:on_activate()")
+       self.object:setvelocity({x=0, y=4, z=0})
+       self.object:setacceleration({x=0, y=-10, z=0})
+       self.object:settexturemod("^[brighten")
+       self.object:set_armor_groups({immortal=1})
+end
+
+-- Called periodically
+function TNT:on_step(dtime)
+       --print("TNT:on_step()")
+       self.timer = self.timer + dtime
+       self.blinktimer = self.blinktimer + dtime
+       if self.blinktimer > 0.5 then
+               self.blinktimer = self.blinktimer - 0.5
+               if self.blinkstatus then
+                       self.object:settexturemod("")
+               else
+                       self.object:settexturemod("^[brighten")
+               end
+               self.blinkstatus = not self.blinkstatus
+       end
+end
+
+-- Called when object is punched
+function TNT:on_punch(hitter)
+       print("TNT:on_punch()")
+       self.health = self.health - 1
+       if self.health <= 0 then
+               self.object:remove()
+               hitter:get_inventory():add_item("main", "experimental:tnt")
+               --hitter:set_hp(hitter:get_hp() - 1)
+       end
+end
+
+-- Called when object is right-clicked
+function TNT:on_rightclick(clicker)
+       --pos = self.object:getpos()
+       --pos = {x=pos.x, y=pos.y+0.1, z=pos.z}
+       --self.object:moveto(pos, false)
+end
+
+--print("TNT dump: "..dump(TNT))
+--print("Registering TNT");
+minetest.register_entity("experimental:tnt", TNT)
+
+-- Add TNT's old name also
+minetest.register_alias("TNT", "experimental:tnt")
+
+--
+-- The dummyball!
+--
+
+minetest.register_entity("experimental:dummyball", {
+       -- Static definition
+       hp_max = 20,
+       physical = false,
+       collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
+       visual = "sprite",
+       visual_size = {x=1, y=1},
+       textures = {"experimental_dummyball.png"},
+       spritediv = {x=1, y=3},
+       initial_sprite_basepos = {x=0, y=0},
+       -- Dynamic variables
+       phase = 0,
+       phasetimer = 0,
+
+       on_activate = function(self, staticdata)
+               minetest.log("Dummyball activated!")
+       end,
+
+       on_step = function(self, dtime)
+               self.phasetimer = self.phasetimer + dtime
+               if self.phasetimer > 2.0 then
+                       self.phasetimer = self.phasetimer - 2.0
+                       self.phase = self.phase + 1
+                       if self.phase >= 3 then
+                               self.phase = 0
+                       end
+                       self.object:setsprite({x=0, y=self.phase})
+                       phasearmor = {
+                               [0]={cracky=3},
+                               [1]={crumbly=3},
+                               [2]={fleshy=3}
+                       }
+                       self.object:set_armor_groups(phasearmor[self.phase])
+               end
+       end,
+
+       on_punch = function(self, hitter)
+       end,
+})
+
+minetest.register_on_chat_message(function(name, message)
+       local cmd = "/dummyball"
+       if message:sub(0, #cmd) == cmd then
+               if not minetest.get_player_privs(name)["give"] then
+                       minetest.chat_send_player(name, "you don't have permission to spawn (give)")
+                       return true -- Handled chat message
+               end
+               if not minetest.get_player_privs(name)["interact"] then
+                       minetest.chat_send_player(name, "you don't have permission to interact")
+                       return true -- Handled chat message
+               end
+               local player = minetest.env:get_player_by_name(name)
+               if player == nil then
+                       print("Unable to spawn entity, player is nil")
+                       return true -- Handled chat message
+               end
+               local entityname = "experimental:dummyball"
+               local p = player:getpos()
+               p.y = p.y + 1
+               minetest.env:add_entity(p, entityname)
+               minetest.chat_send_player(name, '"'..entityname
+                               ..'" spawned.');
+               return true -- Handled chat message
+       end
+end)
+
+--
+-- A test entity for testing animated and yaw-modulated sprites
+--
+
+minetest.register_entity("experimental:testentity", {
+       -- Static definition
+       physical = true, -- Collides with things
+       -- weight = 5,
+       collisionbox = {-0.7,-1.35,-0.7, 0.7,1.0,0.7},
+       --collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
+       visual = "sprite",
+       visual_size = {x=2, y=3},
+       textures = {"dungeon_master.png^[makealpha:128,0,0^[makealpha:128,128,0"},
+       spritediv = {x=6, y=5},
+       initial_sprite_basepos = {x=0, y=0},
+
+       on_activate = function(self, staticdata)
+               print("testentity.on_activate")
+               self.object:setsprite({x=0,y=0}, 1, 0, true)
+               --self.object:setsprite({x=0,y=0}, 4, 0.3, true)
+
+               -- Set gravity
+               self.object:setacceleration({x=0, y=-10, z=0})
+               -- Jump a bit upwards
+               self.object:setvelocity({x=0, y=10, z=0})
+       end,
+
+       on_punch = function(self, hitter)
+               self.object:remove()
+               hitter:add_to_inventory('craft testobject1 1')
+       end,
+})
+
+--
+-- More random stuff
+--
+
+minetest.register_on_respawnplayer(function(player)
+       print("on_respawnplayer")
+       -- player:setpos({x=0, y=30, z=0})
+       -- return true
+end)
+
+minetest.register_on_generated(function(minp, maxp)
+       --print("on_generated: minp="..dump(minp).." maxp="..dump(maxp))
+       --cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2}
+       --minetest.env:add_node(cp, {name="sand"})
+end)
+
+-- Example setting get
+--print("setting max_users = " .. dump(minetest.setting_get("max_users")))
+--print("setting asdf = " .. dump(minetest.setting_get("asdf")))
+
+minetest.register_on_chat_message(function(name, message)
+       --[[print("on_chat_message: name="..dump(name).." message="..dump(message))
+       local cmd = "/testcommand"
+       if message:sub(0, #cmd) == cmd then
+               print(cmd.." invoked")
+               return true
+       end
+       local cmd = "/help"
+       if message:sub(0, #cmd) == cmd then
+               print("script-overridden help command")
+               minetest.chat_send_all("script-overridden help command")
+               return true
+       end]]
+end)
+
+-- Grow papyrus on TNT every 10 seconds
+--[[minetest.register_abm({
+       nodenames = {"TNT"},
+       interval = 10.0,
+       chance = 1,
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               print("TNT ABM action")
+               pos.y = pos.y + 1
+               minetest.env:add_node(pos, {name="papyrus"})
+       end,
+})]]
+
+-- Replace texts of alls signs with "foo" every 10 seconds
+--[[minetest.register_abm({
+       nodenames = {"sign_wall"},
+       interval = 10.0,
+       chance = 1,
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               print("ABM: Sign text changed")
+               local meta = minetest.env:get_meta(pos)
+               meta:set_text("foo")
+       end,
+})]]
+
+--[[local ncpos = nil
+local ncq = 1
+local ncstuff = {
+    {2, 1, 0, 3}, {3, 0, 1, 2}, {4, -1, 0, 1}, {5, -1, 0, 1}, {6, 0, -1, 0},
+    {7, 0, -1, 0}, {8, 1, 0, 3}, {9, 1, 0, 3}, {10, 1, 0, 3}, {11, 0, 1, 2},
+    {12, 0, 1, 2}, {13, 0, 1, 2}, {14, -1, 0, 1}, {15, -1, 0, 1}, {16, -1, 0, 1},
+    {17, -1, 0, 1}, {18, 0, -1, 0}, {19, 0, -1, 0}, {20, 0, -1, 0}, {21, 0, -1, 0},
+    {22, 1, 0, 3}, {23, 1, 0, 3}, {24, 1, 0, 3}, {25, 1, 0, 3}, {10, 0, 1, 2}
+}
+local ncold = {}
+local nctime = nil
+
+minetest.register_abm({
+    nodenames = {"dirt_with_grass"},
+    interval = 100000.0,
+    chance = 1,
+    action = function(pos, node, active_object_count, active_object_count_wider)
+        if ncpos ~= nil then
+            return
+        end
+       
+        if pos.x % 16 ~= 8 or pos.z % 16 ~= 8 then
+            return
+        end
+       
+        pos.y = pos.y + 1
+        n = minetest.env:get_node(pos)
+        print(dump(n))
+        if n.name ~= "air" then
+            return
+        end
+
+        pos.y = pos.y + 2
+        ncpos = pos
+        nctime = os.clock()
+        minetest.env:add_node(ncpos, {name="nyancat"})
+    end
+})
+
+minetest.register_abm({
+    nodenames = {"nyancat"},
+    interval = 1.0,
+    chance = 1,
+    action = function(pos, node, active_object_count, active_object_count_wider)
+        if ncpos == nil then
+            return
+        end
+        if pos.x == ncpos.x and pos.y == ncpos.y and pos.z == ncpos.z then
+            clock = os.clock()
+            if clock - nctime < 0.1 then
+                return
+            end
+            nctime = clock
+           
+            s0 = ncstuff[ncq]
+            ncq = s0[1]
+            s1 = ncstuff[ncq]
+            p0 = pos
+            p1 = {x = p0.x + s0[2], y = p0.y, z = p0.z + s0[3]}
+            p2 = {x = p1.x + s1[2], y = p1.y, z = p1.z + s1[3]}
+            table.insert(ncold, 1, p0)
+            while #ncold >= 10 do
+                minetest.env:add_node(ncold[#ncold], {name="air"})
+                table.remove(ncold, #ncold)
+            end
+            minetest.env:add_node(p0, {name="nyancat_rainbow"})
+            minetest.env:add_node(p1, {name="nyancat", param1=s0[4]})
+            minetest.env:add_node(p2, {name="air"})
+            ncpos = p1
+        end
+    end,
+})--]]
+
+print("experimental modname="..dump(minetest.get_current_modname()))
+print("experimental modpath="..dump(minetest.get_modpath("experimental")))
+print("experimental worldpath="..dump(minetest.get_worldpath()))
+
+-- END
diff --git a/share/server/games/mesetint/mods/experimental/textures/experimental_dummyball.png b/share/server/games/mesetint/mods/experimental/textures/experimental_dummyball.png
new file mode 100644 (file)
index 0000000..0846765
Binary files /dev/null and b/share/server/games/mesetint/mods/experimental/textures/experimental_dummyball.png differ
diff --git a/share/server/games/mesetint/mods/give_initial_stuff/depends.txt b/share/server/games/mesetint/mods/give_initial_stuff/depends.txt
new file mode 100644 (file)
index 0000000..3a7daa1
--- /dev/null
@@ -0,0 +1,2 @@
+default
+
diff --git a/share/server/games/mesetint/mods/give_initial_stuff/init.lua b/share/server/games/mesetint/mods/give_initial_stuff/init.lua
new file mode 100644 (file)
index 0000000..9cf6b51
--- /dev/null
@@ -0,0 +1,12 @@
+minetest.register_on_newplayer(function(player)
+       print("on_newplayer")
+       if minetest.setting_getbool("give_initial_stuff") then
+               print("giving give_initial_stuff to player")
+               player:get_inventory():add_item('main', 'default:pick_steel')
+               player:get_inventory():add_item('main', 'default:torch 99')
+               player:get_inventory():add_item('main', 'default:axe_steel')
+               player:get_inventory():add_item('main', 'default:shovel_steel')
+               player:get_inventory():add_item('main', 'default:cobble 99')
+       end
+end)
+
diff --git a/share/server/games/mesetint/mods/legacy/depends.txt b/share/server/games/mesetint/mods/legacy/depends.txt
new file mode 100644 (file)
index 0000000..3a7daa1
--- /dev/null
@@ -0,0 +1,2 @@
+default
+
diff --git a/share/server/games/mesetint/mods/legacy/init.lua b/share/server/games/mesetint/mods/legacy/init.lua
new file mode 100644 (file)
index 0000000..7f9088c
--- /dev/null
@@ -0,0 +1,132 @@
+-- legacy (Minetest 0.4 mod)
+-- Provides as much backwards-compatibility as feasible
+
+--
+-- Aliases to support loading 0.3 and old 0.4 worlds and inventories
+--
+
+minetest.register_alias("stone", "default:stone")
+minetest.register_alias("stone_with_coal", "default:stone_with_coal")
+minetest.register_alias("stone_with_iron", "default:stone_with_iron")
+minetest.register_alias("dirt_with_grass", "default:dirt_with_grass")
+minetest.register_alias("dirt_with_grass_footsteps", "default:dirt_with_grass_footsteps")
+minetest.register_alias("dirt", "default:dirt")
+minetest.register_alias("sand", "default:sand")
+minetest.register_alias("gravel", "default:gravel")
+minetest.register_alias("sandstone", "default:sandstone")
+minetest.register_alias("clay", "default:clay")
+minetest.register_alias("brick", "default:brick")
+minetest.register_alias("tree", "default:tree")
+minetest.register_alias("jungletree", "default:jungletree")
+minetest.register_alias("junglegrass", "default:junglegrass")
+minetest.register_alias("leaves", "default:leaves")
+minetest.register_alias("cactus", "default:cactus")
+minetest.register_alias("papyrus", "default:papyrus")
+minetest.register_alias("bookshelf", "default:bookshelf")
+minetest.register_alias("glass", "default:glass")
+minetest.register_alias("wooden_fence", "default:fence_wood")
+minetest.register_alias("rail", "default:rail")
+minetest.register_alias("ladder", "default:ladder")
+minetest.register_alias("wood", "default:wood")
+minetest.register_alias("mese", "default:mese")
+minetest.register_alias("cloud", "default:cloud")
+minetest.register_alias("water_flowing", "default:water_flowing")
+minetest.register_alias("water_source", "default:water_source")
+minetest.register_alias("lava_flowing", "default:lava_flowing")
+minetest.register_alias("lava_source", "default:lava_source")
+minetest.register_alias("torch", "default:torch")
+minetest.register_alias("sign_wall", "default:sign_wall")
+minetest.register_alias("furnace", "default:furnace")
+minetest.register_alias("chest", "default:chest")
+minetest.register_alias("locked_chest", "default:chest_locked")
+minetest.register_alias("cobble", "default:cobble")
+minetest.register_alias("mossycobble", "default:mossycobble")
+minetest.register_alias("steelblock", "default:steelblock")
+minetest.register_alias("nyancat", "default:nyancat")
+minetest.register_alias("nyancat_rainbow", "default:nyancat_rainbow")
+minetest.register_alias("sapling", "default:sapling")
+minetest.register_alias("apple", "default:apple")
+
+minetest.register_alias("WPick", "default:pick_wood")
+minetest.register_alias("STPick", "default:pick_stone")
+minetest.register_alias("SteelPick", "default:pick_steel")
+minetest.register_alias("MesePick", "default:pick_mese")
+minetest.register_alias("WShovel", "default:shovel_wood")
+minetest.register_alias("STShovel", "default:shovel_stone")
+minetest.register_alias("SteelShovel", "default:shovel_steel")
+minetest.register_alias("WAxe", "default:axe_wood")
+minetest.register_alias("STAxe", "default:axe_stone")
+minetest.register_alias("SteelAxe", "default:axe_steel")
+minetest.register_alias("WSword", "default:sword_wood")
+minetest.register_alias("STSword", "default:sword_stone")
+minetest.register_alias("SteelSword", "default:sword_steel")
+
+minetest.register_alias("Stick", "default:stick")
+minetest.register_alias("paper", "default:paper")
+minetest.register_alias("book", "default:book")
+minetest.register_alias("lump_of_coal", "default:coal_lump")
+minetest.register_alias("lump_of_iron", "default:iron_lump")
+minetest.register_alias("lump_of_clay", "default:clay_lump")
+minetest.register_alias("steel_ingot", "default:steel_ingot")
+minetest.register_alias("clay_brick", "default:clay_brick")
+minetest.register_alias("scorched_stuff", "default:scorched_stuff")
+
+--
+-- Old items
+--
+
+minetest.register_craftitem(":rat", {
+       description = "Rat",
+       inventory_image = "rat.png",
+       on_drop = function(item, dropper, pos)
+               minetest.env:add_rat(pos)
+               item:take_item()
+               return item
+       end,
+       on_place = function(item, dropped, pointed)
+               pos = minetest.get_pointed_thing_position(pointed, true)
+               if pos ~= nil then
+                       minetest.env:add_rat(pos)
+                       item:take_item()
+                       return item
+               end
+       end
+})
+
+minetest.register_craftitem(":cooked_rat", {
+       description = "Cooked rat",
+       inventory_image = "cooked_rat.png",
+       on_use = minetest.item_eat(6),
+})
+
+minetest.register_craftitem(":firefly", {
+       description = "Firefly",
+       inventory_image = "firefly.png",
+       on_drop = function(item, dropper, pos)
+               minetest.env:add_firefly(pos)
+               item:take_item()
+               return item
+       end,
+       on_place = function(item, dropped, pointed)
+               pos = minetest.get_pointed_thing_position(pointed, true)
+               if pos ~= nil then
+                       minetest.env:add_firefly(pos)
+                       item:take_item()
+                       return item
+               end
+       end
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "cooked_rat",
+       recipe = "rat",
+})
+
+minetest.register_craft({
+       type = "cooking",
+       output = "scorched_stuff",
+       recipe = "cooked_rat",
+})
+
+-- END
diff --git a/share/server/games/mesetint/mods/legacy/textures/apple_iron.png b/share/server/games/mesetint/mods/legacy/textures/apple_iron.png
new file mode 100644 (file)
index 0000000..2dffdf0
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/apple_iron.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/cooked_rat.png b/share/server/games/mesetint/mods/legacy/textures/cooked_rat.png
new file mode 100644 (file)
index 0000000..daad3be
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/cooked_rat.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/dungeon_master.png b/share/server/games/mesetint/mods/legacy/textures/dungeon_master.png
new file mode 100644 (file)
index 0000000..3457c82
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/dungeon_master.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/fireball.png b/share/server/games/mesetint/mods/legacy/textures/fireball.png
new file mode 100644 (file)
index 0000000..5231428
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/fireball.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/firefly.png b/share/server/games/mesetint/mods/legacy/textures/firefly.png
new file mode 100644 (file)
index 0000000..40df7fa
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/firefly.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/oerkki1.png b/share/server/games/mesetint/mods/legacy/textures/oerkki1.png
new file mode 100644 (file)
index 0000000..33cbac9
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/oerkki1.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/oerkki1_damaged.png b/share/server/games/mesetint/mods/legacy/textures/oerkki1_damaged.png
new file mode 100644 (file)
index 0000000..9b77738
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/oerkki1_damaged.png differ
diff --git a/share/server/games/mesetint/mods/legacy/textures/rat.png b/share/server/games/mesetint/mods/legacy/textures/rat.png
new file mode 100644 (file)
index 0000000..d1a0e2a
Binary files /dev/null and b/share/server/games/mesetint/mods/legacy/textures/rat.png differ
index bc303bc4b225adad7d19cff51c543f376e153c1b..72cd28b18f9a14d82e09a5ac3dbe43ae460dd08e 100644 (file)
@@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 static std::string getTextureCacheDir()
 {
-       return porting::path_userdata + DIR_DELIM + "cache" + DIR_DELIM + "texture";
+       return porting::path_user + DIR_DELIM + "cache" + DIR_DELIM + "textures";
 }
 
 struct TextureRequest
index a69942e61a0e84a8e48c6c00250cab6f8568862e..0d09e335e1bc9ea3a29ecc04c6549bd00799fb9f 100644 (file)
@@ -726,7 +726,7 @@ void the_game(
        if(address == ""){
                draw_load_screen(L"Creating server...", driver, font);
                infostream<<"Creating server"<<std::endl;
-               server = new Server(map_dir, configpath);
+               server = new Server(map_dir, configpath, "mesetint");
                server->start(port);
        }
 
index 3cd572387f24de92e02311c1af26d31008269437..3b1861b3db92b1adfd788b74c2928f1d35372e98 100644 (file)
@@ -174,7 +174,7 @@ void GUIPauseMenu::regenerateGui(v2u32 screensize)
                                SWPRINTF_CHARSTRING\r
                                ,\r
                                BUILD_INFO,\r
-                               porting::path_userdata.c_str()\r
+                               porting::path_user.c_str()\r
                );*/\r
 \r
                std::ostringstream os;\r
@@ -182,7 +182,7 @@ void GUIPauseMenu::regenerateGui(v2u32 screensize)
                os<<"by Perttu Ahola and contributors\n";\r
                os<<"celeron55@gmail.com\n";\r
                os<<BUILD_INFO<<"\n";\r
-               os<<"ud_path = "<<wrap_rows(porting::path_userdata, 20)<<"\n";\r
+               os<<"path_user = "<<wrap_rows(porting::path_user, 20)<<"\n";\r
        \r
                Environment->addStaticText(narrow_to_wide(os.str()).c_str(), rect, false, true, this, 259);\r
        }\r
index ec999c5300574b25aa19e6ad7c28d791e59b5d41..322d84e9e0896d9ef6666bb542b4828da207ab5f 100644 (file)
@@ -1157,19 +1157,18 @@ int main(int argc, char *argv[])
        porting::signal_handler_init();
        bool &kill = *porting::signal_handler_killstatus();
        
-       // Initialize porting::path_data and porting::path_userdata
        porting::initializePaths();
 
        // Create user data directory
-       fs::CreateDir(porting::path_userdata);
+       fs::CreateDir(porting::path_user);
 
-       init_gettext((porting::path_data+DIR_DELIM+".."+DIR_DELIM+"locale").c_str());
+       init_gettext((porting::path_share+DIR_DELIM+".."+DIR_DELIM+"locale").c_str());
        
        // Initialize debug streams
 #ifdef RUN_IN_PLACE
        std::string debugfile = DEBUGFILE;
 #else
-       std::string debugfile = porting::path_userdata+DIR_DELIM+DEBUGFILE;
+       std::string debugfile = porting::path_user+DIR_DELIM+DEBUGFILE;
 #endif
        debugstreams_init(disable_stderr, debugfile.c_str());
        // Initialize debug stacks
@@ -1221,10 +1220,12 @@ int main(int argc, char *argv[])
        else
        {
                core::array<std::string> filenames;
-               filenames.push_back(porting::path_userdata +
+               filenames.push_back(porting::path_user +
                                DIR_DELIM + "minetest.conf");
 #ifdef RUN_IN_PLACE
-               filenames.push_back(porting::path_userdata +
+               // Try also from a lower level (to aid having the same configuration
+               // for many RUN_IN_PLACE installs)
+               filenames.push_back(porting::path_user +
                                DIR_DELIM + ".." + DIR_DELIM + "minetest.conf");
 #endif
 
@@ -1278,11 +1279,22 @@ int main(int argc, char *argv[])
                port = 30000;
        
        // Map directory
-       std::string map_dir = porting::path_userdata+DIR_DELIM+"world";
+       std::string map_dir = porting::path_user + DIR_DELIM + "server" + DIR_DELIM + "worlds" + DIR_DELIM + "world";
        if(cmd_args.exists("map-dir"))
                map_dir = cmd_args.get("map-dir");
        else if(g_settings->exists("map-dir"))
                map_dir = g_settings->get("map-dir");
+       else{
+               // No map-dir option was specified.
+               // Check if the world is found from the default directory, and if
+               // not, see if the legacy world directory exists.
+               std::string legacy_map_dir = porting::path_user+DIR_DELIM+".."+DIR_DELIM+"world";
+               if(!fs::PathExists(map_dir) && fs::PathExists(legacy_map_dir)){
+                       errorstream<<"Warning: Using legacy world directory \""
+                                       <<legacy_map_dir<<"\""<<std::endl;
+                       map_dir = legacy_map_dir;
+               }
+       }
        
        // Run dedicated server if asked to
        if(cmd_args.getFlag("server"))
@@ -1293,7 +1305,7 @@ int main(int argc, char *argv[])
                g_timegetter = new SimpleTimeGetter();
                
                // Create server
-               Server server(map_dir.c_str(), configpath);
+               Server server(map_dir, configpath, "mesetint");
                server.start(port);
                
                // Run server
index 0adc955a94f77b28861a5bd8b4c00e118feeab09..edf950635c25d3589f7075024f1c7456be18d895 100644 (file)
@@ -124,12 +124,12 @@ void signal_handler_init(void)
        Path mangler
 */
 
-std::string path_data = ".." DIR_DELIM "data";
-std::string path_userdata = "..";
+std::string path_share = ".." DIR_DELIM "share";
+std::string path_user = ".." DIR_DELIM "user";
 
 std::string getDataPath(const char *subpath)
 {
-       return path_data + DIR_DELIM + subpath;
+       return path_share + DIR_DELIM + subpath;
 }
 
 void pathRemoveFile(char *path, char delim)
@@ -163,16 +163,13 @@ void initializePaths()
        char buf[buflen];
        DWORD len;
        
-       // Find path of executable and set path_data relative to it
+       // Find path of executable and set path_share relative to it
        len = GetModuleFileName(GetModuleHandle(NULL), buf, buflen);
        assert(len < buflen);
        pathRemoveFile(buf, '\\');
 
-       // Use "./bin/../data"
-       path_data = std::string(buf) + DIR_DELIM ".." DIR_DELIM "data";
-               
-       // Use "./bin/.."
-       path_userdata = std::string(buf) + DIR_DELIM "..";
+       path_share = std::string(buf) + "\\..\\share";
+       path_user = std::string(buf) + "\\..\\user";
 
        /*
                Linux
@@ -187,11 +184,8 @@ void initializePaths()
        
        pathRemoveFile(buf, '/');
 
-       // Use "./bin/../data"
-       path_data = std::string(buf) + "/../data";
-               
-       // Use "./bin/../"
-       path_userdata = std::string(buf) + "/..";
+       path_share = std::string(buf) + "/../share";
+       path_user = std::string(buf) + "/../user";
        
        /*
                OS X
@@ -201,8 +195,8 @@ void initializePaths()
        //TODO: Get path of executable. This assumes working directory is bin/
        dstream<<"WARNING: Relative path not properly supported on OS X and FreeBSD"
                        <<std::endl;
-       path_data = std::string("../data");
-       path_userdata = std::string("..");
+       path_share = std::string("../share");
+       path_user = std::string("../user");
 
        #endif
 
@@ -224,19 +218,18 @@ void initializePaths()
        char buf[buflen];
        DWORD len;
        
-       // Find path of executable and set path_data relative to it
+       // Find path of executable and set path_share relative to it
        len = GetModuleFileName(GetModuleHandle(NULL), buf, buflen);
        assert(len < buflen);
        pathRemoveFile(buf, '\\');
        
-       // Use "./bin/../data"
-       path_data = std::string(buf) + DIR_DELIM ".." DIR_DELIM "data";
-       //path_data = std::string(buf) + "/../share/" + PROJECT_NAME;
+       // Use ".\bin\..\share"
+       path_share = std::string(buf) + "\\..\\share";
                
        // Use "C:\Documents and Settings\user\Application Data\<PROJECT_NAME>"
        len = GetEnvironmentVariable("APPDATA", buf, buflen);
        assert(len < buflen);
-       path_userdata = std::string(buf) + DIR_DELIM + PROJECT_NAME;
+       path_user = std::string(buf) + DIR_DELIM + PROJECT_NAME;
 
        /*
                Linux
@@ -251,15 +244,15 @@ void initializePaths()
        
        pathRemoveFile(buf, '/');
 
-       path_data = std::string(buf) + "/../share/" + PROJECT_NAME;
-       //path_data = std::string(INSTALL_PREFIX) + "/share/" + PROJECT_NAME;
-       if (!fs::PathExists(path_data)) {
-               dstream<<"WARNING: data path " << path_data << " not found!";
-               path_data = std::string(buf) + "/../data";
-               dstream<<" Trying " << path_data << std::endl;
+       path_share = std::string(buf) + "/../share/" + PROJECT_NAME;
+       //path_share = std::string(INSTALL_PREFIX) + "/share/" + PROJECT_NAME;
+       if (!fs::PathExists(path_share)) {
+               dstream<<"WARNING: data path " << path_share << " not found!";
+               path_share = std::string(buf) + "/../data";
+               dstream<<" Trying " << path_share << std::endl;
        }
        
-       path_userdata = std::string(getenv("HOME")) + "/." + PROJECT_NAME;
+       path_user = std::string(getenv("HOME")) + "/." + PROJECT_NAME;
 
        /*
                OS X
@@ -276,7 +269,7 @@ void initializePaths()
        {
                dstream<<"Bundle resource path: "<<path<<std::endl;
                //chdir(path);
-               path_data = std::string(path) + "/data";
+               path_share = std::string(path) + "/share";
        }
        else
     {
@@ -285,19 +278,19 @@ void initializePaths()
     }
     CFRelease(resources_url);
        
-       path_userdata = std::string(getenv("HOME")) + "/Library/Application Support/" + PROJECT_NAME;
+       path_user = std::string(getenv("HOME")) + "/Library/Application Support/" + PROJECT_NAME;
 
        #elif defined(__FreeBSD__)
 
-       path_data = std::string(INSTALL_PREFIX) + "/share/" + PROJECT_NAME;
-       path_userdata = std::string(getenv("HOME")) + "/." + PROJECT_NAME;
+       path_share = std::string(INSTALL_PREFIX) + "/share/" + PROJECT_NAME;
+       path_user = std::string(getenv("HOME")) + "/." + PROJECT_NAME;
     
        #endif
 
 #endif // RUN_IN_PLACE
 
-       dstream<<"path_data = "<<path_data<<std::endl;
-       dstream<<"path_userdata = "<<path_userdata<<std::endl;
+       dstream<<"path_share = "<<path_share<<std::endl;
+       dstream<<"path_user = "<<path_user<<std::endl;
 }
 
 } //namespace porting
index 4970a84787856d24a4b3e82ff6ce37206d50fd58..05a6ae0c462b418295ff86eb70042963d45b353f 100644 (file)
@@ -59,7 +59,7 @@ bool * signal_handler_killstatus(void);
 /*
        Path of static data directory.
 */
-extern std::string path_data;
+extern std::string path_share;
 
 /*
        Directory for storing user data. Examples:
@@ -67,7 +67,7 @@ extern std::string path_data;
        Linux: "~/.<PROJECT_NAME>"
        Mac: "~/Library/Application Support/<PROJECT_NAME>"
 */
-extern std::string path_userdata;
+extern std::string path_user;
 
 /*
        Get full path of stuff in data directory.
@@ -76,7 +76,7 @@ extern std::string path_userdata;
 std::string getDataPath(const char *subpath);
 
 /*
-       Initialize path_data and path_userdata.
+       Initialize path_share and path_user.
 */
 void initializePaths();
 
index 899624633312261d35be5c9bcdf8d5c216ceb5e0..69f655e6acd7b244a2bc4a7cdd62dca0f8d96281 100644 (file)
@@ -843,13 +843,17 @@ u32 PIChecksum(core::list<PlayerInfo> &l)
 */
 
 Server::Server(
-               std::string mapsavedir,
-               std::string configpath
+               std::string path_world,
+               std::string path_config,
+               std::string gamename
        ):
+       m_gamename(gamename),
+       m_path_world(path_world),
+       m_path_config(path_config),
        m_env(NULL),
        m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this),
-       m_authmanager(mapsavedir+DIR_DELIM+"auth.txt"),
-       m_banmanager(mapsavedir+DIR_DELIM+"ipban.txt"),
+       m_authmanager(path_world+DIR_DELIM+"auth.txt"),
+       m_banmanager(path_world+DIR_DELIM+"ipban.txt"),
        m_lua(NULL),
        m_itemdef(createItemDefManager()),
        m_nodedef(createNodeDefManager()),
@@ -859,12 +863,15 @@ Server::Server(
        m_time_counter(0),
        m_time_of_day_send_timer(0),
        m_uptime(0),
-       m_mapsavedir(mapsavedir),
-       m_configpath(configpath),
        m_shutdown_requested(false),
        m_ignore_map_edit_events(false),
        m_ignore_map_edit_events_peer_id(0)
 {
+       infostream<<"Server created."<<std::endl;
+       infostream<<"- path_world  = "<<path_world<<std::endl;
+       infostream<<"- path_config = "<<path_config<<std::endl;
+       infostream<<"- gamename    = "<<gamename<<std::endl;
+
        m_liquid_transform_timer = 0.0;
        m_print_info_timer = 0.0;
        m_objectdata_timer = 0.0;
@@ -876,27 +883,35 @@ Server::Server(
        m_step_dtime_mutex.Init();
        m_step_dtime = 0.0;
 
-       JMutexAutoLock envlock(m_env_mutex);
-       JMutexAutoLock conlock(m_con_mutex);
+       // Figure out some paths
+       m_path_share = porting::path_share + DIR_DELIM + "server";
+       m_path_game = m_path_share + DIR_DELIM + "games" + DIR_DELIM + m_gamename;
 
        // Path to builtin.lua
-       std::string builtinpath = porting::path_data + DIR_DELIM + "builtin.lua";
+       std::string builtinpath = m_path_share + DIR_DELIM + "builtin.lua";
 
        // Add default global mod search path
-       m_modspaths.push_front(porting::path_data + DIR_DELIM + "mods");
+       m_modspaths.push_front(m_path_game + DIR_DELIM "mods");
        // Add world mod search path
-       m_modspaths.push_front(mapsavedir + DIR_DELIM + "worldmods");
-       // Add user mod search path
-       m_modspaths.push_front(porting::path_userdata + DIR_DELIM + "usermods");
+       m_modspaths.push_front(m_path_world + DIR_DELIM + "worldmods");
+       // Add addon mod search path
+       for(std::set<std::string>::const_iterator i = m_path_addons.begin();
+                       i != m_path_addons.end(); i++){
+               m_modspaths.push_front((*i) + DIR_DELIM + "mods");
+       }
        
        // Print out mod search paths
-       infostream<<"Mod search paths:"<<std::endl;
+       infostream<<"- mod search paths:"<<std::endl;
        for(core::list<std::string>::Iterator i = m_modspaths.begin();
                        i != m_modspaths.end(); i++){
                std::string modspath = *i;
                infostream<<"    "<<modspath<<std::endl;
        }
        
+       // Lock environment
+       JMutexAutoLock envlock(m_env_mutex);
+       JMutexAutoLock conlock(m_con_mutex);
+
        // Initialize scripting
        
        infostream<<"Server: Initializing scripting"<<std::endl;
@@ -936,7 +951,7 @@ Server::Server(
 
        // Initialize Environment
        
-       m_env = new ServerEnvironment(new ServerMap(mapsavedir, this), m_lua,
+       m_env = new ServerEnvironment(new ServerMap(path_world, this), m_lua,
                        this, this);
 
        // Give environment reference to scripting api
@@ -946,15 +961,15 @@ Server::Server(
        m_env->getMap().addEventReceiver(this);
 
        // If file exists, load environment metadata
-       if(fs::PathExists(m_mapsavedir+DIR_DELIM+"env_meta.txt"))
+       if(fs::PathExists(m_path_world+DIR_DELIM+"env_meta.txt"))
        {
                infostream<<"Server: Loading environment metadata"<<std::endl;
-               m_env->loadMeta(m_mapsavedir);
+               m_env->loadMeta(m_path_world);
        }
 
        // Load players
        infostream<<"Server: Loading players"<<std::endl;
-       m_env->deSerializePlayers(m_mapsavedir);
+       m_env->deSerializePlayers(m_path_world);
 
        /*
                Add some test ActiveBlockModifiers to environment
@@ -1002,13 +1017,13 @@ Server::~Server()
                        Save players
                */
                infostream<<"Server: Saving players"<<std::endl;
-               m_env->serializePlayers(m_mapsavedir);
+               m_env->serializePlayers(m_path_world);
 
                /*
                        Save environment metadata
                */
                infostream<<"Server: Saving environment metadata"<<std::endl;
-               m_env->saveMeta(m_mapsavedir);
+               m_env->saveMeta(m_path_world);
        }
                
        /*
@@ -1065,7 +1080,7 @@ void Server::start(unsigned short port)
        m_thread.setRun(true);
        m_thread.Start();
        
-       infostream<<"Server: Started on port "<<port<<std::endl;
+       infostream<<"Server started on port "<<port<<"."<<std::endl;
 }
 
 void Server::stop()
@@ -1803,10 +1818,10 @@ void Server::AsyncRunStep()
                        m_env->getMap().save(MOD_STATE_WRITE_NEEDED);
 
                        // Save players
-                       m_env->serializePlayers(m_mapsavedir);
+                       m_env->serializePlayers(m_path_world);
                        
                        // Save environment metadata
-                       m_env->saveMeta(m_mapsavedir);
+                       m_env->saveMeta(m_path_world);
                }
        }
 }
@@ -4110,8 +4125,8 @@ void Server::setPlayerPassword(const std::string &name, const std::wstring &pass
 // Saves g_settings to configpath given at initialization
 void Server::saveConfig()
 {
-       if(m_configpath != "")
-               g_settings->updateConfigFile(m_configpath.c_str());
+       if(m_path_config != "")
+               g_settings->updateConfigFile(m_path_config.c_str());
 }
 
 void Server::notifyPlayer(const char *name, const std::wstring msg)
index 04bd61a87a51f7f65c3473e040825f4a67d05b66..50cd5b285d790cd1c0d319ea9685f23f3238dabc 100644 (file)
@@ -392,6 +392,7 @@ public:
        */
 
        Server(
+               std::string gamename,
                std::string mapsavedir,
                std::string configpath
        );
@@ -526,7 +527,7 @@ public:
 
        const ModSpec* getModSpec(const std::string &modname);
        
-       std::string getWorldPath(){ return m_mapsavedir; }
+       std::string getWorldPath(){ return m_path_world; }
 
 private:
 
@@ -631,6 +632,21 @@ private:
                Variables
        */
        
+       // Game name
+       std::string m_gamename;
+       // World directory
+       std::string m_path_world;
+       // Path to user's configuration file ("" = no configuration file)
+       std::string m_path_config;
+
+       // Equivalent of /usr/share/minetest/server
+       std::string m_path_share;
+       // Equivalent of /usr/share/minetest/server/games/gamename
+       std::string m_path_game;
+       // Equivalent of /usr/share/minetest/server/addons/gamename
+       // and ~/.minetest/server/addons/gamename
+       std::set<std::string> m_path_addons;
+       
        // Some timers
        float m_liquid_transform_timer;
        float m_print_info_timer;
@@ -724,12 +740,6 @@ private:
        /*
                Random stuff
        */
-
-       // Map directory
-       std::string m_mapsavedir;
-
-       // Configuration path ("" = no configuration file)
-       std::string m_configpath;
        
        // Mod parent directory paths
        core::list<std::string> m_modspaths;
index 4194faaaab639b2ca4e9dc9c2525a81a59d873d3..5eb5162ae9eaf3c19e1c7e4d322b38e91c36155a 100644 (file)
@@ -163,17 +163,16 @@ int main(int argc, char *argv[])
        porting::signal_handler_init();
        bool &kill = *porting::signal_handler_killstatus();
        
-       // Initialize porting::path_data and porting::path_userdata
        porting::initializePaths();
 
        // Create user data directory
-       fs::CreateDir(porting::path_userdata);
+       fs::CreateDir(porting::path_user);
        
        // Initialize debug streams
 #ifdef RUN_IN_PLACE
        std::string debugfile = DEBUGFILE;
 #else
-       std::string debugfile = porting::path_userdata+DIR_DELIM+DEBUGFILE;
+       std::string debugfile = porting::path_user+DIR_DELIM+DEBUGFILE;
 #endif
        debugstreams_init(disable_stderr, debugfile.c_str());
        // Initialize debug stacks
@@ -283,10 +282,12 @@ int main(int argc, char *argv[])
        else
        {
                core::array<std::string> filenames;
-               filenames.push_back(porting::path_userdata +
+               filenames.push_back(porting::path_user +
                                DIR_DELIM + "minetest.conf");
 #ifdef RUN_IN_PLACE
-               filenames.push_back(porting::path_userdata +
+               // Try also from a lower level (to aid having the same configuration
+               // for many RUN_IN_PLACE installs)
+               filenames.push_back(porting::path_user +
                                DIR_DELIM + ".." + DIR_DELIM + "minetest.conf");
 #endif
 
@@ -334,28 +335,31 @@ int main(int argc, char *argv[])
        // Port?
        u16 port = 30000;
        if(cmd_args.exists("port") && cmd_args.getU16("port") != 0)
-       {
                port = cmd_args.getU16("port");
-       }
        else if(g_settings->exists("port") && g_settings->getU16("port") != 0)
-       {
                port = g_settings->getU16("port");
-       }
-       else
-       {
-               dstream<<"Please specify port (in config or on command line)"
-                               <<std::endl;
-       }
        
-       // Figure out path to map
-       std::string map_dir = porting::path_userdata+DIR_DELIM+"world";
+       // Map directory
+       std::string map_dir = porting::path_user + DIR_DELIM + "server" + DIR_DELIM + "worlds" + DIR_DELIM + "world";
        if(cmd_args.exists("map-dir"))
                map_dir = cmd_args.get("map-dir");
        else if(g_settings->exists("map-dir"))
                map_dir = g_settings->get("map-dir");
+       else{
+               // No map-dir option was specified.
+               // Check if the world is found from the default directory, and if
+               // not, see if the legacy world directory exists.
+               std::string legacy_map_dir = porting::path_user+DIR_DELIM+".."+DIR_DELIM+"world";
+               if(!fs::PathExists(map_dir) && fs::PathExists(legacy_map_dir)){
+                       errorstream<<"Warning: Using legacy world directory \""
+                                       <<legacy_map_dir<<"\""<<std::endl;
+                       map_dir = legacy_map_dir;
+               }
+       }
+       
        
        // Create server
-       Server server(map_dir.c_str(), configpath);
+       Server server(map_dir, configpath, "mesetint");
        server.start(port);
 
        // Run server
index c39a65511b57d861e293d45589cafc0163c76154..5ef469944fe4c36b6af35f8b70111d6c10d36a9c 100644 (file)
@@ -132,8 +132,9 @@ std::string getTexturePath(const std::string &filename)
        */
        if(fullpath == "")
        {
-               std::string rel_path = std::string("clienttextures")+DIR_DELIM+filename;
-               std::string testpath = porting::path_data + DIR_DELIM + rel_path;
+               std::string rel_path = std::string("client")
+                               + DIR_DELIM + "textures" + DIR_DELIM + filename;
+               std::string testpath = porting::path_share + DIR_DELIM + rel_path;
                // Check all filename extensions. Returns "" if not found.
                fullpath = getImagePath(testpath);
        }
@@ -997,7 +998,7 @@ void TextureSource::buildMainAtlas(class IGameDef *gamedef)
        /*
                Write image to file so that it can be inspected
        */
-       /*std::string atlaspath = porting::path_userdata
+       /*std::string atlaspath = porting::path_user
                        + DIR_DELIM + "generated_texture_atlas.png";
        infostream<<"Removing and writing texture atlas for inspection to "
                        <<atlaspath<<std::endl;