From e0fe65765f5b0bdfe349b4578b3f24b69a8afb51 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 15 Dec 2024 13:14:31 +0100 Subject: [PATCH] Add locked door --- CREDITS.md | 4 + mods/lzr_doors/init.lua | 106 +++++++++++++----- .../sounds/lzr_doors_door_locked.ogg | Bin 0 -> 22802 bytes .../textures/lzr_doors_overlay_exit.png | Bin 0 -> 112 bytes .../textures/lzr_doors_overlay_locked.png | Bin 0 -> 122 bytes 5 files changed, 82 insertions(+), 28 deletions(-) create mode 100644 mods/lzr_doors/sounds/lzr_doors_door_locked.ogg create mode 100644 mods/lzr_doors/textures/lzr_doors_overlay_exit.png create mode 100644 mods/lzr_doors/textures/lzr_doors_overlay_locked.png diff --git a/CREDITS.md b/CREDITS.md index 955a5fe3..01f3ebd0 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -291,6 +291,10 @@ so they work in Luanti. - By Breviceps - License: CC0 - +- `lzr_doors_door_locked.ogg` + - by saha213131 + - License: CC0 + - ## Translations diff --git a/mods/lzr_doors/init.lua b/mods/lzr_doors/init.lua index 5b567c05..e94ce1a1 100644 --- a/mods/lzr_doors/init.lua +++ b/mods/lzr_doors/init.lua @@ -2,23 +2,28 @@ local S = minetest.get_translator("lzr_doors") local F = minetest.formspec_escape local FS = function(...) return minetest.formspec_escape(S(...)) end --- Basic doors for Lazarr! +lzr_doors = {} --- The doors in Lazarr! are much simpler than in other games. This --- is neccessary to ensure laser compatibility. +--[[ Basic doors for Lazarr! --- A major limitation is that doors cannot be opened or closed. +The doors in Lazarr! are much simpler than in other games. This +is neccessary to ensure laser compatibility. --- A door is basically just 2 panes (using `lzr_panes`), --- with a top segment and a bottom one. Panes are useful because --- they are laser-compatible. +There are two types of doors: Locked doors play a sound when +interacting with them and exit doors that allow the player +to exit the level. --- Door segments are completely standalone, it is the reponsibility --- of the map author to construct correct doors. +A major limitation is that doors cannot be opened or closed. +A door is basically just 2 panes (using `lzr_panes`), +with a top segment and a bottom one. Panes are useful because +they are laser-compatible. +Door segments are completely standalone, it is the reponsibility +of the map author to construct correct doors. +]] -local on_rightclick_or_punch = function(pos, node, clicker) +local on_rightclick_exit = function(pos, node, clicker) local state = lzr_gamestate.get_state() if state ~= lzr_gamestate.LEVEL then return @@ -38,6 +43,15 @@ local on_rightclick_or_punch = function(pos, node, clicker) minetest.show_formspec(clicker:get_player_name(), "lzr_doors:leave_level", form) end + +local on_rightclick_locked = function(pos, node, clicker) + local state = lzr_gamestate.get_state() + if state ~= lzr_gamestate.LEVEL and state ~= lzr_gamestate.LEVEL_COMPLETE and state ~= lzr_gamestate.LEVEL_TEST then + return + end + minetest.sound_play({name="lzr_doors_door_locked", gain=0.3}, {pos=pos}, true) +end + minetest.register_on_player_receive_fields(function(player, formname, fields) local state = lzr_gamestate.get_state() if state ~= lzr_gamestate.LEVEL then @@ -50,22 +64,58 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -lzr_panes.register_pane("lzr_doors:door_wood_frame_frame_top", { - description = S("Top Wood Frame Door Segment"), - textures = {"lzr_doors_door_wood_frame_top.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_top.png^[transformFX"}, - inventory_image = "lzr_doors_door_wood_frame_top.png", - wield_image = "lzr_doors_door_wood_frame_top.png", - sounds = lzr_sounds.node_sound_wood_defaults(), - element_group = "laser_element_door_wood_frame_top", - on_rightclick = on_rightclick_or_punch, -}) -lzr_panes.register_pane("lzr_doors:door_wood_frame_frame_bottom", { - description = S("Bottom Wooden Frame Door Segment"), - textures = {"lzr_doors_door_wood_frame_bottom.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_bottom.png^[transformFX"}, - inventory_image = "lzr_doors_door_wood_frame_bottom.png", - wield_image = "lzr_doors_door_wood_frame_bottom.png", - sounds = lzr_sounds.node_sound_wood_defaults(), - element_group = "laser_element_door_wood_frame_bottom", - on_rightclick = on_rightclick_or_punch, -}) +local help_exit = S("Allows to exit the level") +local help_locked = S("Cannot be opened") +lzr_doors.register_door = function(basename, modname, def) + lzr_panes.register_pane(modname..":door_"..basename.."_exit_top", { + description = S("@1 (top segment, exit)", def.base_description), + _tt_help = help_exit, + def.textures, + textures = def.textures_top, + inventory_image = "("..def.image_top .. ")^lzr_doors_overlay_exit.png", + wield_image = "("..def.image_top .. ")^lzr_doors_overlay_exit.png", + sounds = def.sounds or lzr_sounds.node_sound_wood_defaults(), + element_group = "laser_element_door_"..basename.."_exit_top", + on_rightclick = on_rightclick_exit, + }) + lzr_panes.register_pane(modname..":door_"..basename.."_exit_bottom", { + description = S("@1 (bottom segment, exit)", def.base_description), + _tt_help = help_exit, + textures = def.textures_bottom, + inventory_image = "("..def.image_bottom.. ")^lzr_doors_overlay_exit.png", + wield_image = "("..def.image_bottom.. ")^lzr_doors_overlay_exit.png", + sounds = lzr_sounds.node_sound_wood_defaults(), + element_group = "laser_element_door_"..basename.."_exit_bottom", + on_rightclick = on_rightclick_exit, + }) + + lzr_panes.register_pane(modname..":door_"..basename.."_locked_top", { + description = S("@1 (top segment, locked)", def.base_description), + _tt_help = help_locked, + textures = def.textures_top, + inventory_image = "("..def.image_top .. ")^lzr_doors_overlay_locked.png", + wield_image = "("..def.image_top .. ")^lzr_doors_overlay_locked.png", + sounds = def.sounds or lzr_sounds.node_sound_wood_defaults(), + element_group = "laser_element_door_"..basename.."_locked_top", + on_rightclick = on_rightclick_locked, + }) + lzr_panes.register_pane(modname..":door_"..basename.."_locked_bottom", { + description = S("@1 (bottom segment, locked)", def.base_description), + _tt_help = help_locked, + textures = def.textures_bottom, + inventory_image = "("..def.image_bottom.. ")^lzr_doors_overlay_locked.png", + wield_image = "("..def.image_bottom.. ")^lzr_doors_overlay_locked.png", + sounds = lzr_sounds.node_sound_wood_defaults(), + element_group = "laser_element_door_"..basename.."_locked_bottom", + on_rightclick = on_rightclick_locked, + }) +end + +lzr_doors.register_door("wood_frame", "lzr_doors", { + base_description = S("Wooden Frame Door"), + textures_top = {"lzr_doors_door_wood_frame_top.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_top.png^[transformFX"}, + textures_bottom = {"lzr_doors_door_wood_frame_bottom.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_sides.png", "lzr_doors_door_wood_frame_bottom.png^[transformFX"}, + image_top = "lzr_doors_door_wood_frame_top.png", + image_bottom = "lzr_doors_door_wood_frame_bottom.png", +}) diff --git a/mods/lzr_doors/sounds/lzr_doors_door_locked.ogg b/mods/lzr_doors/sounds/lzr_doors_door_locked.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3bc5b88502f6fda33eb70dfa7c7d27889e77d1d3 GIT binary patch literal 22802 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 Z^U(E+@Fx-4r1ElBBZ{(5E=LXw01j$RCfWc1 literal 0 HcmV?d00001 diff --git a/mods/lzr_doors/textures/lzr_doors_overlay_exit.png b/mods/lzr_doors/textures/lzr_doors_overlay_exit.png new file mode 100644 index 0000000000000000000000000000000000000000..700ebcb9603fae8625d58d1551e7ca60e189484f GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=AJH&Ar_~T6C_v{H*hsf%644j+b6~YYLQMn V4>}^a-vA9`@O1TaS?83{1OWY3C&B;# literal 0 HcmV?d00001