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
|
- License: CC BY 3.0
|
||||||
- Origin: <https://freesound.org/people/youandbiscuitme/sounds/258244/>
|
- Origin: <https://freesound.org/people/youandbiscuitme/sounds/258244/>
|
||||||
- Changes were made
|
- 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)
|
- All other sounds come from Minetest Game (see license of Minetest Game 5.4.1 for details)
|
||||||
|
|
||||||
Code:
|
Code:
|
||||||
|
|
|
@ -3,6 +3,7 @@ minetest.override_item("", {
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
max_drop_level = 0,
|
max_drop_level = 0,
|
||||||
groupcaps = {
|
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)
|
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
|
||||||
local done = lzr_laser.check_level_won()
|
local done = lzr_laser.check_level_won()
|
||||||
if done then
|
if done then
|
||||||
lzr_levels.next_level()
|
lzr_levels.level_complete()
|
||||||
end
|
end
|
||||||
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)
|
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
|
||||||
local done = lzr_laser.check_level_won(true)
|
local done = lzr_laser.check_level_won(true)
|
||||||
if done then
|
if done then
|
||||||
lzr_levels.next_level()
|
lzr_levels.level_complete()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -133,7 +133,28 @@ local register_element = function(subname, def, options)
|
||||||
end
|
end
|
||||||
def_core.groups.breakable = 1
|
def_core.groups.breakable = 1
|
||||||
def_core.groups[subname] = 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)
|
local def_core_on = table.copy(def_core)
|
||||||
def_core_on.description = S("@1 (active)", def.description)
|
def_core_on.description = S("@1 (active)", def.description)
|
||||||
def_core_on._lzr_active = nil
|
def_core_on._lzr_active = nil
|
||||||
|
@ -151,13 +172,11 @@ local register_element = function(subname, def, options)
|
||||||
local def_takable = table.copy(def_core)
|
local def_takable = table.copy(def_core)
|
||||||
def_takable.tiles = def.tiles_takable_off
|
def_takable.tiles = def.tiles_takable_off
|
||||||
def_takable.groups.takable = 1
|
def_takable.groups.takable = 1
|
||||||
def_takable.groups.dig_immediate = 3
|
|
||||||
def_takable.description = S("@1 (takable)", def.description)
|
def_takable.description = S("@1 (takable)", def.description)
|
||||||
def_takable._lzr_active = "lzr_laser:"..subname.."_takable_on"
|
def_takable._lzr_active = "lzr_laser:"..subname.."_takable_on"
|
||||||
local def_takable_on = table.copy(def_core_on)
|
local def_takable_on = table.copy(def_core_on)
|
||||||
def_takable_on.tiles = def.tiles_takable_on
|
def_takable_on.tiles = def.tiles_takable_on
|
||||||
def_takable_on.groups.takable = 1
|
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.description = S("@1 (takable, active)", def.description)
|
||||||
def_takable_on.drop = "lzr_laser:"..subname.."_takable"
|
def_takable_on.drop = "lzr_laser:"..subname.."_takable"
|
||||||
def_takable_on._lzr_inactive = "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)
|
on_rightclick = function(pos, node)
|
||||||
|
if lzr_gamestate.get_state() == lzr_gamestate.LEVEL_COMPLETE then
|
||||||
|
return
|
||||||
|
end
|
||||||
local nname
|
local nname
|
||||||
|
local on = false
|
||||||
if node.name == "lzr_laser:emitter" then
|
if node.name == "lzr_laser:emitter" then
|
||||||
nname = "lzr_laser:emitter_on"
|
nname = "lzr_laser:emitter_on"
|
||||||
|
on = true
|
||||||
elseif node.name == "lzr_laser:emitter_on" then
|
elseif node.name == "lzr_laser:emitter_on" then
|
||||||
nname = "lzr_laser:emitter"
|
nname = "lzr_laser:emitter"
|
||||||
elseif node.name == "lzr_laser:emitter_takable" then
|
elseif node.name == "lzr_laser:emitter_takable" then
|
||||||
nname = "lzr_laser:emitter_takable_on"
|
nname = "lzr_laser:emitter_takable_on"
|
||||||
|
on = true
|
||||||
elseif node.name == "lzr_laser:emitter_takable_on" then
|
elseif node.name == "lzr_laser:emitter_takable_on" then
|
||||||
nname = "lzr_laser:emitter_takable"
|
nname = "lzr_laser:emitter_takable"
|
||||||
end
|
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})
|
minetest.swap_node(pos, {name=nname, param2=node.param2})
|
||||||
full_update()
|
full_update()
|
||||||
end,
|
end,
|
||||||
|
|
Binary file not shown.
|
@ -92,6 +92,22 @@ function lzr_levels.start_level(level)
|
||||||
lzr_levels.prepare_and_build_level(level)
|
lzr_levels.prepare_and_build_level(level)
|
||||||
lzr_messages.show_message(player, S("Level @1", level), 3)
|
lzr_messages.show_message(player, S("Level @1", level), 3)
|
||||||
lzr_gamestate.set_state(lzr_gamestate.LEVEL)
|
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
|
end
|
||||||
|
|
||||||
function lzr_levels.next_level()
|
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,
|
crumbly = instadig,
|
||||||
oddly_breakable_by_hand = instadig,
|
oddly_breakable_by_hand = instadig,
|
||||||
dig_immediate = instadig,
|
dig_immediate = instadig,
|
||||||
|
takable = instadig,
|
||||||
breakable = instadig,
|
breakable = instadig,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -138,6 +138,9 @@ end
|
||||||
-- 1: on_use parameters -> axis/amount/etc.
|
-- 1: on_use parameters -> axis/amount/etc.
|
||||||
-- 2: param2/axis/amount/etc. -> new param2
|
-- 2: param2/axis/amount/etc. -> new param2
|
||||||
function screwdriver.use(itemstack, player, pointed_thing, is_right_click)
|
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
|
if pointed_thing.type ~= "node" then return end
|
||||||
local pos = pointed_thing.under
|
local pos = pointed_thing.under
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
name = screwdriver2
|
name = screwdriver2
|
||||||
description = A more intuitive node rotation tool.
|
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