diff --git a/CREDITS.md b/CREDITS.md
index 2cf4c67..6c4de9c 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -95,6 +95,13 @@ Sounds:
- `lzr_sounds_footstep_stone.*.ogg`, `default_dirt_footstep.*.ogg`, `lzr_sounds_footstep_leaves.*.ogg`, `lzr_sounds_dug_grass.*.ogg`:
- by Wuzzy
- License: MIT License
+- `lzr_treasure_chest_open.ogg`:
+ - by JUDITH136
+ - License: CC BY 3.0
+- `lzr_treasure_chest_open_fail.ogg`:
+ - by Dymewiz
+ - License: CC BY 3.0
+
- All other sounds come from Minetest Game (see license of Minetest Game 5.4.1 for details)
Code:
diff --git a/mods/lzr_treasure/init.lua b/mods/lzr_treasure/init.lua
index c50eb2b..0d6ee93 100644
--- a/mods/lzr_treasure/init.lua
+++ b/mods/lzr_treasure/init.lua
@@ -1,60 +1,9 @@
+local movement_gravity = tonumber(minetest.settings:get("movement_gravity")) or 9.81
+
local S = minetest.get_translator("lzr_treasure")
-
--- Register chests --
-
-local register_chest = function(id, def)
- minetest.register_node("lzr_treasure:"..id, {
- description = def.description,
- paramtype2 = "facedir",
- tiles = def.tiles,
- groups = { breakable = 1, chest = 1 },
- sounds = def.sounds,
- on_rotate = screwdriver.rotate_simple,
- })
-end
-
-register_chest("chest_dark", {
- description = S("Dark Chest"),
- tiles = {
- "xdecor_enderchest_top.png", "xdecor_enderchest_top.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_front.png"
- },
- sounds = lzr_sounds.node_sound_stone_defaults(),
-})
-
-register_chest("chest_dark_locked", {
- description = S("Locked Dark Chest"),
- tiles = {
- "xdecor_enderchest_top.png", "xdecor_enderchest_top.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
- "xdecor_enderchest_side.png", "lzr_treasure_enderchest_lock.png"
- },
- sounds = lzr_sounds.node_sound_stone_defaults(),
-})
-
-register_chest("chest_wood", {
- description = S("Wooden Chest"),
- tiles = {
- "default_chest_top.png", "default_chest_top.png",
- "default_chest_side.png", "default_chest_side.png",
- "default_chest_side.png", "default_chest_front.png"
- },
- sounds = lzr_sounds.node_sound_wood_defaults(),
-})
-
-register_chest("chest_wood_locked", {
- description = S("Locked Wooden Chest"),
- tiles = {
- "default_chest_top.png", "default_chest_top.png",
- "default_chest_side.png", "default_chest_side.png",
- "default_chest_side.png", "default_chest_lock.png"
- },
- sounds = lzr_sounds.node_sound_wood_defaults(),
-})
+local N = function(s) return s end
-- Register treasure blocks --
-
minetest.register_node("lzr_treasure:gold_block", {
description = S("Gold Block"),
tiles = {"default_gold_block.png"},
@@ -62,3 +11,155 @@ minetest.register_node("lzr_treasure:gold_block", {
sounds = lzr_sounds.node_sound_metal_defaults(),
})
+-- Register chests --
+
+local register_chest = function(id, def)
+ local sound_open = def.sound_open or "lzr_treasure_chest_open"
+ local sound_open_fail = def.sound_open_fail or "lzr_treasure_chest_open_fail"
+ minetest.register_node("lzr_treasure:chest_"..id.."_unlocked", {
+ description = def.description_unlocked,
+ paramtype2 = "facedir",
+ tiles = { def.tile_top, def.tile_bottom, def.tile_side, def.tile_side, def.tile_side, def.tile_front },
+ groups = { breakable = 1, chest = 1, rotatable = 1 },
+ sounds = def.node_sounds,
+ on_rotate = screwdriver.rotate_simple,
+ on_punch = function(pos, node, puncher)
+ minetest.log("action", "[lzr_treasure] "..puncher:get_player_name().." opens "..node.name.." at "..minetest.pos_to_string(pos))
+ minetest.set_node(pos, {name="lzr_treasure:chest_"..id.."_open_gold", param2=node.param2})
+ minetest.sound_play({name=sound_open, gain=0.5}, {pos=pos}, true)
+ end,
+ })
+
+ minetest.register_node("lzr_treasure:chest_"..id.."_locked", {
+ description = def.description_locked,
+ paramtype2 = "facedir",
+ tiles = { def.tile_top, def.tile_bottom, def.tile_side, def.tile_side, def.tile_side, def.tile_front_lock },
+ groups = { breakable = 1, chest = 2, rotatable = 1 },
+ sounds = def.node_sounds,
+ on_rotate = screwdriver.rotate_simple,
+ on_punch = function(pos, node, puncher)
+ minetest.sound_play({name=sound_open_fail, gain=0.3}, {pos=pos}, true)
+ end,
+ })
+
+ minetest.register_node("lzr_treasure:chest_"..id.."_open", {
+ description = def.description_open,
+ drawtype = "nodebox",
+ paramtype = "light",
+ collision_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 2/16, 0.5 },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 2/16, 0.5 },
+ },
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, -7/16, 2/16, 0.5 },
+ { 7/16, -0.5, -0.5, 0.5, 2/16, 0.5 },
+ { -7/16, -0.5, -0.5, 7/16, 2/16, -7/16 },
+ { -7/16, -0.5, 7/16, 7/16, 2/16, 0.5 },
+ { -7/16, -0.5, -7/16, 7/16, -7/16, 7/16 },
+ },
+ },
+ tiles = { def.tile_top, def.tile_bottom, def.tile_side, def.tile_side, def.tile_side, def.tile_front },
+ paramtype2 = "facedir",
+ groups = { breakable = 1, chest = 3, rotatable = 1 },
+ sounds = def.node_sounds,
+ on_rotate = screwdriver.rotate_simple,
+ })
+
+ -- Open chest with treasure
+
+ local treasure_id = "gold"
+ local treasure = "lzr_treasure:gold_block"
+ local treasure_tile = "default_gold_block.png"
+
+ local treasure_def = minetest.registered_nodes[treasure]
+ local sounds_open_treasure = table.copy(def.node_sounds)
+ sounds_open_treasure.footstep = table.copy(treasure_def.sounds.footstep)
+ sounds_open_treasure.dig = nil
+ sounds_open_treasure.dug = table.copy(treasure_def.sounds.dug)
+
+ minetest.register_node("lzr_treasure:chest_"..id.."_open_"..treasure_id, {
+ description = S(def.description_open_with, treasure_def.description),
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ { -0.5, -0.5, -0.5, 0.5, 2/16, 0.5 },
+ { -7/16, 2/16, -7/16, 7/16, 0.5, 7/16 },
+ },
+ },
+ tiles = {
+ "("..def.tile_top..")^("..treasure_tile.."^[mask:lzr_treasure_mask_block_in_chest_top.png)",
+ def.tile_bottom,
+ "("..def.tile_side..")^("..treasure_tile.."^[mask:lzr_treasure_mask_block_in_chest_side.png)",
+ "("..def.tile_side..")^("..treasure_tile.."^[mask:lzr_treasure_mask_block_in_chest_side.png)",
+ "("..def.tile_side..")^("..treasure_tile.."^[mask:lzr_treasure_mask_block_in_chest_side.png)",
+ "("..def.tile_front..")^("..treasure_tile.."^[mask:lzr_treasure_mask_block_in_chest_side.png)",
+ },
+ on_punch = function(pos, node, puncher)
+ -- Take treasure out of open chest
+ minetest.log("action", "[lzr_treasure] "..puncher:get_player_name().." takes treasure from "..node.name.." at "..minetest.pos_to_string(pos))
+ local inv = puncher:get_inventory()
+ local give = true
+ if lzr_gamestate.get_state() == lzr_gamestate.EDITOR and inv:contains_item("main", treasure) then
+ give = false
+ end
+ if give then
+ inv:add_item("main", treasure)
+ end
+ minetest.sound_play(sounds_open_treasure.dug, {pos=pos}, true)
+ -- spawn a few particles for the taken treasrue
+ minetest.add_particlespawner({
+ amount = 12,
+ time = 0.001,
+ minpos = vector.subtract(pos, vector.new(7/16, 7/16, 7/16)),
+ maxpos = vector.add(pos, vector.new(7/16, 7/16, 7/16)),
+ minvel = vector.new(-0.4, 0, -0.4),
+ maxvel = vector.new(0.4, 0.2, 0.4),
+ minacc = vector.new(0, -movement_gravity, 0),
+ maxacc = vector.new(0, -movement_gravity, 0),
+ minsize = 0.75,
+ maxsize = 0.75,
+ node = {name=treasure},
+ })
+ minetest.set_node(pos, {name="lzr_treasure:chest_"..id.."_open", param2=node.param2})
+ end,
+ paramtype2 = "facedir",
+ groups = { breakable = 1, chest = 4, rotatable = 1, },
+ sounds = sounds_open_treasure,
+ on_rotate = screwdriver.rotate_simple,
+ })
+
+end
+
+register_chest("wood", {
+ description_unlocked = S("Wooden Chest"),
+ description_locked = S("Locked Wooden Chest"),
+ description_open = S("Open Wooden Chest"),
+ description_open_with = N("Open Wooden Chest with @1"),
+ tile_top = "lzr_treasure_chest_top.png",
+ tile_bottom = "lzr_treasure_chest_top.png",
+ tile_side = "lzr_treasure_chest_side.png",
+ tile_front = "lzr_treasure_chest_front.png",
+ tile_front_lock = "lzr_treasure_chest_lock.png",
+ node_sounds = lzr_sounds.node_sound_wood_defaults(),
+})
+
+register_chest("dark", {
+ description_unlocked = S("Dark Chest"),
+ description_locked = S("Locked Dark Chest"),
+ description_open = S("Open Dark Chest"),
+ description_open_with = N("Open Dark Chest with @1"),
+ tile_top = "lzr_treasure_dark_chest_top.png",
+ tile_bottom = "lzr_treasure_dark_chest_top.png",
+ tile_side = "lzr_treasure_dark_chest_side.png",
+ tile_front = "lzr_treasure_dark_chest_front.png",
+ tile_front_lock = "lzr_treasure_dark_chest_lock.png",
+ node_sounds = lzr_sounds.node_sound_stone_defaults(),
+})
diff --git a/mods/lzr_treasure/sounds/408001__judith136__20.wav b/mods/lzr_treasure/sounds/408001__judith136__20.wav
new file mode 100644
index 0000000..4af3f62
Binary files /dev/null and b/mods/lzr_treasure/sounds/408001__judith136__20.wav differ
diff --git a/mods/lzr_treasure/sounds/lzr_treasure_chest_open.ogg b/mods/lzr_treasure/sounds/lzr_treasure_chest_open.ogg
new file mode 100644
index 0000000..18cee4f
Binary files /dev/null and b/mods/lzr_treasure/sounds/lzr_treasure_chest_open.ogg differ
diff --git a/mods/lzr_treasure/sounds/lzr_treasure_chest_open_fail.ogg b/mods/lzr_treasure/sounds/lzr_treasure_chest_open_fail.ogg
new file mode 100644
index 0000000..6fef430
Binary files /dev/null and b/mods/lzr_treasure/sounds/lzr_treasure_chest_open_fail.ogg differ
diff --git a/mods/lzr_treasure/textures/default_chest_front.png b/mods/lzr_treasure/textures/default_chest_front.png
deleted file mode 100644
index 63d58e0..0000000
Binary files a/mods/lzr_treasure/textures/default_chest_front.png and /dev/null differ
diff --git a/mods/lzr_treasure/textures/default_chest_top.png b/mods/lzr_treasure/textures/default_chest_top.png
deleted file mode 100644
index ecf2eab..0000000
Binary files a/mods/lzr_treasure/textures/default_chest_top.png and /dev/null differ
diff --git a/mods/lzr_treasure/textures/lzr_treasure_chest_front.png b/mods/lzr_treasure/textures/lzr_treasure_chest_front.png
new file mode 100644
index 0000000..9641ae2
Binary files /dev/null and b/mods/lzr_treasure/textures/lzr_treasure_chest_front.png differ
diff --git a/mods/lzr_treasure/textures/default_chest_lock.png b/mods/lzr_treasure/textures/lzr_treasure_chest_lock.png
similarity index 100%
rename from mods/lzr_treasure/textures/default_chest_lock.png
rename to mods/lzr_treasure/textures/lzr_treasure_chest_lock.png
diff --git a/mods/lzr_treasure/textures/default_chest_side.png b/mods/lzr_treasure/textures/lzr_treasure_chest_side.png
similarity index 58%
rename from mods/lzr_treasure/textures/default_chest_side.png
rename to mods/lzr_treasure/textures/lzr_treasure_chest_side.png
index 2cbba35..bf1a3f1 100644
Binary files a/mods/lzr_treasure/textures/default_chest_side.png and b/mods/lzr_treasure/textures/lzr_treasure_chest_side.png differ
diff --git a/mods/lzr_treasure/textures/lzr_treasure_chest_top.png b/mods/lzr_treasure/textures/lzr_treasure_chest_top.png
new file mode 100644
index 0000000..bb23bdc
Binary files /dev/null and b/mods/lzr_treasure/textures/lzr_treasure_chest_top.png differ
diff --git a/mods/lzr_treasure/textures/xdecor_enderchest_front.png b/mods/lzr_treasure/textures/lzr_treasure_dark_chest_front.png
similarity index 100%
rename from mods/lzr_treasure/textures/xdecor_enderchest_front.png
rename to mods/lzr_treasure/textures/lzr_treasure_dark_chest_front.png
diff --git a/mods/lzr_treasure/textures/lzr_treasure_enderchest_lock.png b/mods/lzr_treasure/textures/lzr_treasure_dark_chest_lock.png
similarity index 100%
rename from mods/lzr_treasure/textures/lzr_treasure_enderchest_lock.png
rename to mods/lzr_treasure/textures/lzr_treasure_dark_chest_lock.png
diff --git a/mods/lzr_treasure/textures/xdecor_enderchest_side.png b/mods/lzr_treasure/textures/lzr_treasure_dark_chest_side.png
similarity index 100%
rename from mods/lzr_treasure/textures/xdecor_enderchest_side.png
rename to mods/lzr_treasure/textures/lzr_treasure_dark_chest_side.png
diff --git a/mods/lzr_treasure/textures/lzr_treasure_dark_chest_top.png b/mods/lzr_treasure/textures/lzr_treasure_dark_chest_top.png
new file mode 100644
index 0000000..980c236
Binary files /dev/null and b/mods/lzr_treasure/textures/lzr_treasure_dark_chest_top.png differ
diff --git a/mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_side.png b/mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_side.png
new file mode 100644
index 0000000..fa05520
Binary files /dev/null and b/mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_side.png differ
diff --git a/mods/lzr_treasure/textures/xdecor_enderchest_top.png b/mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_top.png
similarity index 54%
rename from mods/lzr_treasure/textures/xdecor_enderchest_top.png
rename to mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_top.png
index f19c8ca..482e0df 100644
Binary files a/mods/lzr_treasure/textures/xdecor_enderchest_top.png and b/mods/lzr_treasure/textures/lzr_treasure_mask_block_in_chest_top.png differ