Add 'level complete' state and new sounds
parent
43b6298166
commit
68341954fc
10
CREDITS.md
10
CREDITS.md
|
@ -49,6 +49,16 @@ Sounds:
|
|||
- License: CC BY 3.0
|
||||
- Origin: <https://freesound.org/people/youandbiscuitme/sounds/258244/>
|
||||
- Changes were made
|
||||
- `lzr_laser_emitter_activate.ogg`:
|
||||
- by PhonosUPF <https://freesound.org/people/PhonosUPF/sounds/501976/>
|
||||
- License: CC0
|
||||
- `lzr_levels_level_start.ogg`:
|
||||
- by original\_sound <https://freesound.org/people/original_sound/sounds/372209/>
|
||||
- License: CC BY 3.0
|
||||
- `lzr_levels_level_complete.ogg`:
|
||||
- by Fupicat <https://freesound.org/people/Fupicat/sounds/521641/>
|
||||
- Edit by Wuzzy (higher pitch)
|
||||
- License: CC0
|
||||
- All other sounds come from Minetest Game (see license of Minetest Game 5.4.1 for details)
|
||||
|
||||
Code:
|
||||
|
|
|
@ -3,6 +3,7 @@ minetest.override_item("", {
|
|||
tool_capabilities = {
|
||||
max_drop_level = 0,
|
||||
groupcaps = {
|
||||
takable = { times = { [1] = 0, [2] = 0, [3] = 0 } },
|
||||
},
|
||||
}
|
||||
})
|
||||
|
|
|
@ -97,7 +97,7 @@ local full_update = function()
|
|||
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
|
||||
local done = lzr_laser.check_level_won()
|
||||
if done then
|
||||
lzr_levels.next_level()
|
||||
lzr_levels.level_complete()
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -109,7 +109,7 @@ local full_update_detector_placed = function()
|
|||
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
|
||||
local done = lzr_laser.check_level_won(true)
|
||||
if done then
|
||||
lzr_levels.next_level()
|
||||
lzr_levels.level_complete()
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -133,7 +133,28 @@ local register_element = function(subname, def, options)
|
|||
end
|
||||
def_core.groups.breakable = 1
|
||||
def_core.groups[subname] = 1
|
||||
|
||||
def_core.can_dig = function()
|
||||
return lzr_gamestate.get_state() ~= lzr_gamestate.LEVEL_COMPLETE
|
||||
end
|
||||
def_core.on_place = function(itemstack, placer, pointed_thing)
|
||||
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||
-- Prevent node placement when in 'level complete' state
|
||||
return itemstack
|
||||
else
|
||||
-- node's on_rightclick action takes precedence
|
||||
if pointed_thing.type == "node" and placer then
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
local sneak = placer:get_player_control().sneak
|
||||
if def and def.on_rightclick and not sneak then
|
||||
def.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
-- Default node placement behavior
|
||||
return minetest.item_place_node(itemstack, placer, pointed_thing)
|
||||
end
|
||||
end
|
||||
local def_core_on = table.copy(def_core)
|
||||
def_core_on.description = S("@1 (active)", def.description)
|
||||
def_core_on._lzr_active = nil
|
||||
|
@ -151,13 +172,11 @@ local register_element = function(subname, def, options)
|
|||
local def_takable = table.copy(def_core)
|
||||
def_takable.tiles = def.tiles_takable_off
|
||||
def_takable.groups.takable = 1
|
||||
def_takable.groups.dig_immediate = 3
|
||||
def_takable.description = S("@1 (takable)", def.description)
|
||||
def_takable._lzr_active = "lzr_laser:"..subname.."_takable_on"
|
||||
local def_takable_on = table.copy(def_core_on)
|
||||
def_takable_on.tiles = def.tiles_takable_on
|
||||
def_takable_on.groups.takable = 1
|
||||
def_takable_on.groups.dig_immediate = 3
|
||||
def_takable_on.description = S("@1 (takable, active)", def.description)
|
||||
def_takable_on.drop = "lzr_laser:"..subname.."_takable"
|
||||
def_takable_on._lzr_inactive = "lzr_laser:"..subname.."_takable"
|
||||
|
@ -311,16 +330,27 @@ register_element("emitter", {
|
|||
|
||||
},
|
||||
on_rightclick = function(pos, node)
|
||||
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||
return
|
||||
end
|
||||
local nname
|
||||
local on = false
|
||||
if node.name == "lzr_laser:emitter" then
|
||||
nname = "lzr_laser:emitter_on"
|
||||
on = true
|
||||
elseif node.name == "lzr_laser:emitter_on" then
|
||||
nname = "lzr_laser:emitter"
|
||||
elseif node.name == "lzr_laser:emitter_takable" then
|
||||
nname = "lzr_laser:emitter_takable_on"
|
||||
on = true
|
||||
elseif node.name == "lzr_laser:emitter_takable_on" then
|
||||
nname = "lzr_laser:emitter_takable"
|
||||
end
|
||||
if on then
|
||||
minetest.sound_play({name="lzr_laser_emitter_activate", gain=1.0}, {pos=pos}, true)
|
||||
else
|
||||
minetest.sound_play({name="lzr_laser_emitter_activate", gain=0.8}, {pos=pos, pitch=0.7}, true)
|
||||
end
|
||||
minetest.swap_node(pos, {name=nname, param2=node.param2})
|
||||
full_update()
|
||||
end,
|
||||
|
|
Binary file not shown.
|
@ -92,6 +92,22 @@ function lzr_levels.start_level(level)
|
|||
lzr_levels.prepare_and_build_level(level)
|
||||
lzr_messages.show_message(player, S("Level @1", level), 3)
|
||||
lzr_gamestate.set_state(lzr_gamestate.LEVEL)
|
||||
minetest.sound_play({name = "lzr_levels_level_enter", gain = 1}, {to_player=player:get_player_name()}, true)
|
||||
end
|
||||
|
||||
function lzr_levels.level_complete()
|
||||
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||
return false
|
||||
end
|
||||
local player = get_singleplayer()
|
||||
lzr_messages.show_message(player, S("Level @1 complete!", current_level), 3)
|
||||
minetest.sound_play({name = "lzr_levels_level_complete", gain = 1}, {to_player=player:get_player_name()}, true)
|
||||
lzr_gamestate.set_state(lzr_gamestate.LEVEL_COMPLETE)
|
||||
minetest.after(3, function()
|
||||
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||
lzr_levels.next_level()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function lzr_levels.next_level()
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -17,6 +17,7 @@ minetest.register_tool("lzr_tools:ultra_pickaxe", {
|
|||
crumbly = instadig,
|
||||
oddly_breakable_by_hand = instadig,
|
||||
dig_immediate = instadig,
|
||||
takable = instadig,
|
||||
breakable = instadig,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -138,6 +138,9 @@ end
|
|||
-- 1: on_use parameters -> axis/amount/etc.
|
||||
-- 2: param2/axis/amount/etc. -> new param2
|
||||
function screwdriver.use(itemstack, player, pointed_thing, is_right_click)
|
||||
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||
return
|
||||
end
|
||||
if pointed_thing.type ~= "node" then return end
|
||||
local pos = pointed_thing.under
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
name = screwdriver2
|
||||
description = A more intuitive node rotation tool.
|
||||
optional_depends = screwdriver, worldedit_commands, default
|
||||
depends = lzr_gamestate
|
||||
optional_depends = screwdriver, worldedit_commands, default
|
||||
|
|
Loading…
Reference in New Issue