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