Add translator comments

This commit is contained in:
Wuzzy 2024-12-10 02:34:33 +01:00
parent 9c11ae32ae
commit 60ee19d029
24 changed files with 152 additions and 6 deletions

View File

@ -223,6 +223,7 @@ minetest.register_chatcommand("music", {
})
-- Special built-in ambience that is completely silent
--~ Special entry in music list representing silence
lzr_ambience.register_ambience("none", nil, nil, S("None"))
dofile(minetest.get_modpath("lzr_ambience").."/register.lua")

View File

@ -73,7 +73,7 @@ end
local STR_WARNING_1 = S("WARNING: The player movement settings are not at the recommended values for Lazarr! The physics might not work as intended!")
local STR_WARNING_2 = S("Please exit the game and reset the following Luanti settings to their default value:")
-- concatenate invalid settings with list separator (comma)
--~ list separator for list of invalid player movement settings
local STR_INVALID_SETTINGS = table.concat(invalid_settings, S(", "))
local disconnect = function(player)

View File

@ -337,6 +337,7 @@ minetest.register_node("lzr_core:water_source", {
-- Same as lzr_core:water_source, but
-- acts as an inpenetrable barrier
minetest.register_node("lzr_core:water_source_barrier", {
--~ Block that acts as an inpenetrable barrier
description = S("Water Source Barrier"),
_tt_help = S("Block that the player cant move through"),
drawtype = "liquid",
@ -391,6 +392,7 @@ minetest.register_node("lzr_core:water_source_barrier", {
-- For invisible level borders,
-- should act like an invisible barrier.
minetest.register_node("lzr_core:barrier", {
--~ Block that acts as an inpenetrable barrier
description = S("Barrier"),
_tt_help = S("Invisible block that the player cant move through"),
drawtype = "airlike",
@ -427,6 +429,7 @@ local RMO = 0.01
-- but not the player. This node can be used as a
-- level ceiling for rainy levels.
minetest.register_node("lzr_core:rain_membrane", {
--~ Block that acts as a barrier. Player can't move through but rain can
description = S("Rain Membrane"),
_tt_help = S("Invisible block that the player cant move through but rain can"),
drawtype = "airlike",

View File

@ -25,7 +25,7 @@ if minetest.settings:get_bool("lzr_debug", false) then
minetest.register_chatcommand("devmode", {
description = S("Enter or exit development mode"),
privs = { server = true },
params = S("[ enter | exit ]"),
params = "[ enter | exit ]",
func = function(name, param)
local player = minetest.get_player_by_name(name)
local already_in = lzr_gamestate.get_state() == lzr_gamestate.DEV

View File

@ -337,8 +337,10 @@ minetest.register_chatcommand("editor_save", {
end
local ok, filename, filename2 = save_level(level_name)
if ok and filename and filename2 then
--~ @1 and @2 are file locations
return true, S("Level saved to @1 and @2.", filename, filename2)
elseif of and filename then
--~ @1 and @2 are file locations
return true, S("Level saved to @1, but could not write metadata to @2.", filename, filename2)
else
return false, S("Error writing level file!")
@ -393,6 +395,7 @@ local load_level = function(level_name, player)
-- sunlight
if legacy_window == "lzr_decor:woodframed_glass" then
level_state.ceiling = "lzr_core:barrier"
--~ The "window boundary" refers to a special block used for the boundaries of the level to create windows in the walls. It has been removed in later versions of the game.
minetest.chat_send_player(player:get_player_name(), S("Note: This level uses a legacy window boundary, which is no longer supported."))
else
level_state.ceiling = exploded_bounds[4]

View File

@ -50,6 +50,7 @@ local level_ready = false
local reset_player = function(player, reset_type)
if reset_type == "water" then
--~ Message when you fall out of the level into the water. You may be creative in the translation
lzr_messages.show_message(player, S("Youre sleeping with the fishes!"), 6.0, 0xFF0000)
lzr_levels.leave_level(true, false)
elseif reset_type == "out_of_bounds_ship" then
@ -57,16 +58,19 @@ local reset_player = function(player, reset_type)
local spawn = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_RESPAWN_OFFSET)
player:set_pos(spawn)
elseif reset_type == "out_of_bounds" then
--~ Message when you move out of the level boundaries. You may be creative in the translation
lzr_messages.show_message(player, S("Where yer thinks yar goin, landlubber?"), 6.0, 0xFF0000)
lzr_levels.leave_level(true, false)
elseif reset_type == "skull_crush" then
-- The skulls laugh at you when you got stuck ;-)
minetest.sound_play({name="lzr_fallout_skull_laugh", gain=0.9}, {to_player=player:get_player_name()}, true)
--~ Message when you got stuck inside skull blocks. You may be creative in the translation
lzr_messages.show_message(player, S("You were skull-crushed!"), 6.0, 0xFF0000)
lzr_levels.leave_level(true, false)
elseif reset_type == "crush" then
-- The skulls laugh at you when you got stuck ;-)
minetest.sound_play({name="lzr_fallout_skull_laugh", gain=0.9}, {to_player=player:get_player_name()}, true)
--~ Message when you got stuck inside solid blocks other than skulls. You may be creative in the translation
lzr_messages.show_message(player, S("You were between a rock and a hard place."), 6.0, 0xFF0000)
lzr_levels.leave_level(true, false)
else

View File

@ -214,8 +214,11 @@ local function get_formspec(page, name)
local pagestr = ""
local max_page = current_max_pages[name]
if max_page > 1 then
--~ Previous page button in item selection
pagestr = "button[0,5.45;1,1;lzr_getitem_prev;"..F(S("<")).."]"..
--~ Next page button in item selection
"button[1,5.45;1,1;lzr_getitem_next;"..F(S(">")).."]"..
--~ Page counter in item selection. @1 = current page, @2 = total pages
"label[0,5.1;"..F(S("Page: @1/@2", page, max_page)).."]"
end
@ -239,6 +242,7 @@ local function get_formspec(page, name)
"field[2.2,5.75;4,1;search;;"..F(search_text).."]" ..
"field_close_on_enter[search;false]" ..
"button[6,5.45;1.6,1;search_button_start;"..F(S("Search")).."]" ..
--~ Reset search button label in item selection
"button[7.6,5.45;0.8,1;search_button_reset;"..F(S("X")).."]" ..
"tooltip[search_button_reset;"..F(S("Reset search")).."]" ..
pagestr ..

View File

@ -77,6 +77,7 @@ lzr_gui.update_treasure_status = function(player, treasures, total_treasures)
})
hud_ids[name].treasures_img = id
end
--~ Treasure count in HUD. @1 = number of found treasures, @2 number of total treasures in level
local treasure_text = S("@1 / @2", treasures, total_treasures)
local color = 0xFFFFFFFF
if treasures >= total_treasures then

View File

@ -52,11 +52,13 @@ lzr_infobooks.open_book_page = function(player_name, book_id, page_num)
"textarea[7.15,1.3;5.2,5.72;;;"..F(page.text).."]"
if page_num > 1 then
form = form .. "style[prev_page;sound=lzr_infobooks_turn_page]" ..
--~ Previous page button
"button[0.65,7.15;1.3,1.04;prev_page;"..FS("<").."]"..
"tooltip[prev_page;"..FS("Previous page").."]"
end
if page_num < max_page then
form = form .. "style[next_page;sound=lzr_infobooks_turn_page]" ..
--~ Next page button
"button[11.05,7.15;1.3,1.04;next_page;"..FS(">").."]"..
"tooltip[next_page;"..FS("Next page").."]"
end

View File

@ -366,6 +366,7 @@ for laser2=0, #colortiles do
if laser1 == 0 and laser2 > 0 then
local def = table.copy(tm_def_on_0X)
def._lzr_transmissive_mirror_state = laserid
--~ Beam splitter block description with active lasers inside. @1 = a color code uniquely identifying the laser colors
def.description = S("Beam Splitter (active, @1)", colstring)
-- Apply the laser color
def.__tiles_off[1] = colortiles[laser2]
@ -561,6 +562,7 @@ for laser2=0, #colortiles do
if laser1 == 0 and laser2 > 0 then
local def = table.copy(dm_def_on_0X)
def._lzr_double_mirror_state = laserid
--~ Double mirror block description with active lasers inside. @1 = a color code uniquely identifying the laser colors
def.description = S("Double Mirror (active, @1)", colstring)
-- Apply the laser color
def.__tiles_off[2] = colortiles[laser2]
@ -652,6 +654,7 @@ lzr_laser.register_element("lzr_laser:crystal", {
local MIXER_ANIM_LEN = 0.8
lzr_laser.register_element("lzr_laser:mixer", {
--~ A block that mixes laser colors
description = S("Mixer"),
_tt_help = S("Two lasers go in, a laser with their colors combined goes out"),
paramtype = "light",

View File

@ -351,12 +351,15 @@ lzr_laser.register_element = function(basename, def, options)
if options.allow_take or options.allow_rotate then
if options.explicit_inactive_description then
--~ Annotation for a block @1. "fixed" means it cannot be picked up or rotated
def_core.description = S("@1 (fixed, inactive)", def.description)
else
--~ Annotation for a block @1. "fixed" means it cannot be picked up or rotated
def_core.description = S("@1 (fixed)", def.description)
end
else
if options.explicit_inactive_description then
--~ Annotation for a block @1
def_core.description = S("@1 (inactive)", def.description)
else
def_core.description = def.description
@ -430,8 +433,10 @@ lzr_laser.register_element = function(basename, def, options)
def_core_on.pointable = false
end
if options.allow_take or options.allow_rotate then
--~ Annotation for a block @1. "fixed" it means cannot be picked up or rotated
def_core_on.description = S("@1 (fixed, active)", def.description)
else
--~ Annotation for a block @1
def_core_on.description = S("@1 (active)", def.description)
end
def_core_on._lzr_inactive = real_basename.."_fixed"
@ -475,8 +480,10 @@ lzr_laser.register_element = function(basename, def, options)
for c=1, lzr_globals.MAX_COLORCODE do
local def_core_on_c = table.copy(def_core_on)
if options.allow_take or options.allow_rotate then
--~ Annotation for a block @1. "fixed" means it cannot be picked up or rotated. @2 is a color code uniquely identifying the active laser color in that block
def_core_on_c.description = S("@1 (fixed, active, @2)", def.description, lzr_laser.dirstring_to_colstring(tostring(c)))
else
--~ Annotation for a block @1. @2 is a color code uniquely identifying the active laser color in that block
def_core_on_c.description = S("@1 (active, @2)", def.description, lzr_laser.dirstring_to_colstring(tostring(c)))
end
for t=1, #def_core_on_c.tiles do
@ -512,8 +519,10 @@ lzr_laser.register_element = function(basename, def, options)
def_rotatable.overlay_tiles = def_spec.__overlay_tiles_rotatable_off
def_rotatable.groups.rotatable = 1
if options.explicit_inactive_description then
--~ Annotation for a block @1. "soft-fixed" means it cannot be picked up but it CAN be rotated
def_rotatable.description = S("@1 (soft-fixed, inactive)", def.description)
else
--~ Annotation for a block @1. "soft-fixed" means it cannot be picked up but it CAN be rotated
def_rotatable.description = S("@1 (soft-fixed)", def.description)
end
if options.inactive ~= nil then
@ -550,6 +559,7 @@ lzr_laser.register_element = function(basename, def, options)
def_rotatable_on.inventory_image = nil
def_rotatable_on.wield_image = nil
end
--~ Annotation for a block @1. "soft-fixed" means it cannot be picked up but it CAN be rotated
def_rotatable_on.description = S("@1 (soft-fixed, active)", def.description)
if not options.keep_state_on_take then
def_rotatable_on.drop = real_basename.."_rotatable"
@ -568,6 +578,7 @@ lzr_laser.register_element = function(basename, def, options)
else
for c=1, lzr_globals.MAX_COLORCODE do
local def_rotatable_on_c = table.copy(def_rotatable_on)
--~ Annotation for a block @1. "soft-fixed" means it cannot be picked up but it CAN be rotated. @2 is a color code uniquely identifying the block's laser color
def_rotatable_on_c.description = S("@1 (soft-fixed, active, @2)", def.description, lzr_laser.dirstring_to_colstring(tostring(c)))
for t=1, #def_rotatable_on_c.tiles do
if def_rotatable_on_c.tiles[t] == lzr_laser.LASER_TILE then
@ -604,6 +615,7 @@ lzr_laser.register_element = function(basename, def, options)
-- takable nodes are also always rotatable by implication
def_takable.groups.rotatable = 1
if options.explicit_inactive_description then
--~ Annotation for a block @1
def_takable.description = S("@1 (inactive)", def.description)
else
def_takable.description = def.description
@ -661,6 +673,7 @@ lzr_laser.register_element = function(basename, def, options)
else
for c=1, lzr_globals.MAX_COLORCODE do
local def_takable_on_c = table.copy(def_takable_on)
--~ Annotation for a block @1. @2 is a color core uniquely identifying this block's laser color
def_takable_on_c.description = S("@1 (active, @2)", def.description, lzr_laser.dirstring_to_colstring(tostring(c)))
for t=1, #def_takable_on_c.tiles do
if def_takable_on_c.tiles[t] == lzr_laser.LASER_TILE then

View File

@ -213,6 +213,7 @@ for color_z=0, lzr_globals.MAX_COLORCODE do
if tex then
-- Finally register the laser
minetest.register_node("lzr_laser:laser_"..dirstring, {
--~ Laser block description. @1 = color code uniquely identifying the color(s) of the laser beam(s) in that node
description = S("Laser (@1)", lzr_laser.dirstring_to_colstring(dirstring)),
paramtype = "light",
light_source = lzr_globals.LASER_GLOW,
@ -232,6 +233,7 @@ for color_z=0, lzr_globals.MAX_COLORCODE do
if axes == 1 then
-- Combination node: Barrier + laser
minetest.register_node("lzr_laser:barrier_laser_"..dirstring, {
--~ Description of a block that is both laser and invisible barrier. @1 = color code uniquely identifying the color(s) of the laser beam(s) in that node
description = S("Barrier Laser (@1)", lzr_laser.dirstring_to_colstring(dirstring)),
paramtype = "light",
light_source = lzr_globals.LASER_GLOW,
@ -259,6 +261,7 @@ for color_z=0, lzr_globals.MAX_COLORCODE do
-- Combination node: Rain Membrane + laser
minetest.register_node("lzr_laser:rain_membrane_laser_"..dirstring, {
--~ Description of a block that is both laser and invisible barrier that lets rain through but not the player. @1 = color code uniquely identifying the color(s) of the laser beam(s) in that node
description = S("Rain Membrane Laser (@1)", lzr_laser.dirstring_to_colstring(dirstring)),
paramtype = "light",
light_source = lzr_globals.LASER_GLOW,

View File

@ -231,6 +231,7 @@ local trigger_tool_modeinfo = {
local function construct_trigger_tool_description(mode)
local MODE_COLOR = "#fff020"
local HELP_COLOR = "#ffd0d0"
--~ Tool in level editor to change triggers
return S("Trigger Tool").."\n"..
minetest.colorize(MODE_COLOR, trigger_tool_modeinfo[mode].name).."\n"..
minetest.colorize(HELP_COLOR, trigger_tool_modeinfo[mode].description).."\n"..
@ -355,6 +356,7 @@ minetest.register_tool("lzr_laser:trigger_tool", {
signal_type = 0
end
lzr_triggers.set_trigger_signal_type(trigger_id, signal_type)
--~ @1: short signal type name, @2: long signal type description
local signal_description = S("@1 (@2)", lzr_triggers.SIGNAL_TYPE_NAMES[signal_type], lzr_triggers.SIGNAL_TYPE_DESCRIPTIONS[signal_type])
if not signal_description then
signal_description = tostring(signal_type)
@ -379,6 +381,7 @@ minetest.register_tool("lzr_laser:trigger_tool", {
receiver_type = 0
end
lzr_triggers.set_trigger_receiver_type(trigger_id, receiver_type)
--~ @1: short receiver type name, @2: long receiver type description
local receiver_type_description = S("@1 (@2)", lzr_triggers.RECEIVER_TYPE_NAMES[receiver_type], lzr_triggers.RECEIVER_TYPE_DESCRIPTIONS[receiver_type])
if not receiver_type_description then
receiver_type_description = tostring(receiver_type)
@ -395,6 +398,7 @@ minetest.register_tool("lzr_laser:trigger_tool", {
lzr_triggers.set_signals(trigger_id, {})
lzr_triggers.set_trigger_signal_type(trigger_id, 0)
lzr_triggers.set_trigger_receiver_type(trigger_id, 0)
--~ Node was reset at @1.
minetest.chat_send_player(uname, S("Reset node at @1.", minetest.pos_to_string(pos)))
elseif mode == TRIGGER_MODE_INFO then
local meta = minetest.get_meta(pos)
@ -413,6 +417,7 @@ minetest.register_tool("lzr_laser:trigger_tool", {
for s=1, #send_to do
table.insert(send_to_concat, send_to[s])
end
--~ list separator
send_to_str = table.concat(send_to_concat, S(", "))
end
end
@ -453,6 +458,7 @@ minetest.register_tool("lzr_laser:trigger_tool", {
imeta:set_string("inventory_image", trigger_tool_modeinfo[mode].img)
local modename = trigger_tool_modeinfo[mode].name
local uname = user:get_player_name()
--~ Trigger tool was set to the new mode @1
minetest.chat_send_player(uname, S("Tool set to @1!", modename))
return itemstack
end,

View File

@ -136,6 +136,7 @@ local load_custom_level = function(level, player)
else
reason = error_detail
end
--~ Reason shown on level loading error
error_append = "\n\n" .. S("Reason: @1", reason)
end
local form = message_form(player, S("This level is unplayable.")..error_append)

View File

@ -1287,6 +1287,7 @@ function lzr_levels.get_level_name(level, level_data, with_fallback)
if with_fallback then
local fname = level_data[level].filename
fname = string.sub(fname, 1, -5)
--~ Fallback name for untitled levels. @1 = technical level name based on file name
return S("Untitled (@1)", fname)
else
return ""
@ -1572,12 +1573,17 @@ minetest.register_chatcommand("level_info", {
out = out .. S("• File name: @1", minetest.colorize(VALUE_COLOR, fname))
if current_level_data == core_level_data then
out = out .. "\n" .. S("• Level type: @1", minetest.colorize(VALUE_COLOR, S("core")))
--~ Level type can be "core" or "custom"
out = out .. "\n" .. S("• Level type: @1", minetest.colorize(VALUE_COLOR,
--~ A level type (core levels)
S("core")))
if minetest.settings:get_bool("lzr_debug", false) then
out = out .. "\n" .. S("• Level number: @1", minetest.colorize(VALUE_COLOR, current_level))
end
else
out = out .. "\n" .. S("• Level type: @1", minetest.colorize(VALUE_COLOR, S("custom")))
out = out .. "\n" .. S("• Level type: @1", minetest.colorize(VALUE_COLOR,
--~ A level type (custom levels)
S("custom")))
end
return true, out
end

View File

@ -156,6 +156,7 @@ end
-- A node that starts level selection
minetest.register_node("lzr_menu:level_starter", {
--~ A node that starts level selection
description = S("Level Starter"),
-- symbolized by a map
tiles = { "lzr_menu_map.png", "blank.png" },
@ -182,6 +183,7 @@ minetest.register_node("lzr_menu:level_starter", {
-- A node that starts custom level selection
minetest.register_node("lzr_menu:custom_level_starter", {
--~ A node that starts custom level selection
description = S("Custom Level Starter"),
-- symbolized by a map
tiles = { "lzr_menu_map_custom.png", "blank.png" },
@ -429,8 +431,10 @@ local open_color_picker = function(player, colorname)
local function gm(index)
local txt
if COLOR_PICKER_MODIFIERS[index] < 0 then
--~ Subtract color value in custom laser color menu
return FS("@1", math.abs(COLOR_PICKER_MODIFIERS[index]))
else
--~ Add color value in custom laser color menu
return FS("+@1", COLOR_PICKER_MODIFIERS[index])
end
end
@ -438,6 +442,7 @@ local open_color_picker = function(player, colorname)
"button[2,"..y..";0.7,0.5;channel_"..id.."_mmm;"..gm(1).."]" ..
"button[2.7,"..y..";0.7,0.5;channel_"..id.."_mm;"..gm(2).."]"..
"button[3.4,"..y..";0.7,0.5;channel_"..id.."_m;"..gm(3).."]"..
--~ Color value number in custom laser color menu. @1 current value, @2 maximum possible value
"label[4.4,"..(y+0.3)..";"..FS("@1/@2", defval, 255).."]"..
"button[5.6,"..y..";0.7,0.5;channel_"..id.."_p;"..gm(4).."]"..
"button[6.3,"..y..";0.7,0.5;channel_"..id.."_pp;"..gm(5).."]"..

View File

@ -9,6 +9,7 @@ lzr_parrot_npc = {}
-- TODO: These strings are to be used when the parrot model arrives
local SPEAKER_NAME = NS("Goldie the Parrot")
local SPEAKER_NAME_SHORT = NS("Goldie")
--~ @1 is a parrot name
local SAYS = NS("@1 says:")
-- TODO: This name shall be removed when the parrot model arrives

View File

@ -202,6 +202,7 @@ end)
register_sky("bright_blue", {
--~ Sky name
description = S("Bright Blue"),
sky = {
type = "regular",
@ -227,6 +228,7 @@ register_sky("bright_blue", {
timeofday_end= TIMEOFDAY_DAY_END,
})
register_sky("tropical_dawn", {
--~ Sky name
description = S("Tropical Dawn"),
sky = {
type = "regular",
@ -253,6 +255,7 @@ register_sky("tropical_dawn", {
timeofday_end = TIMEOFDAY_DAY_END,
})
register_sky("ocean_evening", {
--~ Sky name
description = S("Ocean Evening"),
sky = {
type = "regular",
@ -283,6 +286,7 @@ register_sky("ocean_evening", {
timeofday_end = TIMEOFDAY_DAY_END,
})
register_sky("ocean_morning", {
--~ Sky name
description = S("Ocean Morning"),
sky = {
type = "regular",
@ -309,6 +313,7 @@ register_sky("ocean_morning", {
timeofday_end = TIMEOFDAY_DAY_END,
})
register_sky("ominous_fog", {
--~ Sky name
description = S("Ominous Fog"),
sky = {
type = "regular",
@ -331,6 +336,7 @@ register_sky("ominous_fog", {
timeofday_end = TIMEOFDAY_DAY_END,
})
register_sky("storm_clouds", {
--~ Sky name
description = S("Stormy Clouds"),
sky = {
type = "regular",
@ -360,6 +366,7 @@ register_sky("storm_clouds", {
day_night_ratio = 0.7,
})
register_sky("starry_night", {
--~ Sky name
description = S("Starry Night"),
sky = {
type = "regular",
@ -395,6 +402,7 @@ register_sky("starry_night", {
-- Most importantly, volumetric light is disabled, which is most
-- computationally heavy.
register_sky("underground", {
--~ Sky name of a special sky for underground levels
description = S("Underground"),
sky = {
type = "plain",
@ -418,8 +426,10 @@ minetest.register_on_chatcommand(function(name, command, params)
if command == "time" and params ~= "" then
local state = lzr_gamestate.get_state()
if lzr_gamestate.get_state() == lzr_gamestate.EDITOR then
--~ Message shown when trying to use "/time" command in editor
minetest.chat_send_player(name, minetest.colorize("#ff8000", S("You cant use this command to set the time in this game. Try a different sky in the level settings.")))
else
--~ Message shown when trying to use "/time" command
minetest.chat_send_player(name, minetest.colorize("#ff8000", S("You cant use this command to set the time in this game.")))
end
return true

View File

@ -252,6 +252,7 @@ function lzr_stairs.register_slab(subname, recipeitem, groups, images, descripti
)
local def_top = table.copy(def_bottom)
--~ Block description for a top slab. @1 = original slab description
def_top.description = S("@1 (top)", description)
def_top.__mesh_off = "lzr_stairs_slab_top_laser.obj"
def_top.__mesh_on = "lzr_stairs_slab_top_laser.obj"

View File

@ -11,7 +11,9 @@ minetest.register_node("lzr_teleporter:teleporter_off", {
description = S("Teleporter"),
paramtype2 = "4dir",
_tt_help = S("Player start point of the level").."\n"..
--~ The "teleporter" block (=start block of a level) has a white dot at one of the sides, marking the initial player look direction
S("Player will face towards the white dot").."\n"..
--~ Only one teleporter block allowed per level
S("(only one per level allowed)"),
tiles = {
{ name = "lzr_teleporter_off_top.png", align_style = "world" },

View File

@ -9,6 +9,7 @@ lzr_tools = {}
-- Digs (almost) any block
minetest.register_tool("lzr_tools:ultra_pickaxe", {
--~ Tool that digs blocks
description = S("Ultra Pickaxe"),
_tt_help = S("Removes blocks except liquids"),
inventory_image = "lzr_tools_ultra_pickaxe.png",
@ -41,6 +42,7 @@ minetest.register_tool("lzr_tools:ultra_pickaxe", {
-- Digs liquids
minetest.register_tool("lzr_tools:ultra_bucket", {
--~ Tool that digs liquids
description = S("Ultra Bucket"),
_tt_help = S("Removes liquids"),
inventory_image = "lzr_tools_ultra_bucket.png",
@ -62,6 +64,7 @@ if minetest.settings:get_bool("lzr_debug", false) then
-- This tool digs lasers. Usually this is only useful when lasers
-- are frozen because otherwise they instantly regenerate.
minetest.register_tool("lzr_tools:laser_absorber", {
--~ Hidden tool that digs lasers
description = S("Laser Absorber"),
_tt_help = S("Removes lasers"),
inventory_image = "lzr_tools_laser_absorber.png",
@ -123,6 +126,7 @@ if minetest.settings:get_bool("lzr_debug", false) then
-- Debug tool to test the laser travel algorithm.
-- Simulates the laser travelling up to a certain maximum number of iterations.
minetest.register_tool("lzr_tools:laser_stepper", {
--~ Hidden debug tool to test the laser travel algorithm.
description = S("Laser Stepper"),
_tt_help = S("Simulates the laser travel algorithm up to a given number of iterations").."\n"..
S("Punch: Increase laser iterations by 1").."\n"..

View File

@ -372,10 +372,15 @@ local register_chest = function(id, def)
end
register_chest("wood", {
--~ Block description
description_unlocked = S("Wooden Chest"),
--~ Block description
description_locked = S("Locked Wooden Chest"),
--~ Block description
description_open = S("Open Wooden Chest"),
--~ Block description
description_open_laser = S("Open Wooden Chest with Laser"),
--~ Block description. @1 = a treasure
description_open_with = NS("Open Wooden Chest with @1"),
tile_top = "lzr_treasure_chest_top.png",
tile_bottom = "lzr_treasure_chest_top.png",
@ -386,10 +391,15 @@ register_chest("wood", {
})
register_chest("dark", {
--~ Block description
description_unlocked = S("Dark Chest"),
--~ Block description
description_locked = S("Locked Dark Chest"),
--~ Block description
description_open = S("Open Dark Chest"),
--~ Block description
description_open_laser = S("Open Dark Chest with Laser"),
--~ Block description. @1 = a treasure
description_open_with = NS("Open Dark Chest with @1"),
tile_top = "lzr_treasure_dark_chest_top.png",
tile_bottom = "lzr_treasure_dark_chest_top.png",

View File

@ -160,7 +160,25 @@ local show_trigger_dialog = function(player, selected_trigger)
-- Header
-- Note: The leading "#" character for "#Recv." and "#Send." cannot be put directly into the string
-- because the *.TR file format doesn't support strings starting with "#".
triggers_str = COLOR_CAPTION..","..IMAGE_ID_BLANK..","..FS("ID")..","..FS("Location")..","..FS("Node")..","..FS("@1Recv.", "#")..","..FS("@1Send.", "#")..","..SIGNAL_TYPE_IMAGE_ID_BLANK..","..FS("Sig. type")..","..RECEIVER_TYPE_IMAGE_ID_BLANK..","..FS("Recv. type")..","..triggers_str
triggers_str = COLOR_CAPTION..","..
IMAGE_ID_BLANK..","..
--~ Trigger list header: Trigger identifier
FS("ID")..","..
--~ Trigger list header: Trigger location
FS("Location")..","..
--~ Trigger list header: Trigger node
FS("Node")..","..
--~ Trigger list header: Number of receivers
FS("@1Recv.", "#")..","..
--~ Trigger list header: Number of senders
FS("@1Send.", "#")..","..
SIGNAL_TYPE_IMAGE_ID_BLANK..","..
--~ Trigger list header: Signal type
FS("Sig. type")..","..
RECEIVER_TYPE_IMAGE_ID_BLANK..","..
--~ Trigger list header: Receiver type
FS("Recv. type")..","..
triggers_str
local C_HEAD = "#FFFF00"
local C_DEF = "#FFFFA0"
@ -217,7 +235,12 @@ local show_trigger_dialog = function(player, selected_trigger)
local info_str = ""
if #senders > 0 or #receivers > 0 then
last_signal_list = { false }
info_str = COLOR_CAPTION..","..IMAGE_ID_BLANK..","..FS("Type")..","..FS("ID")..","
info_str = COLOR_CAPTION..","..
IMAGE_ID_BLANK..","..
--~ Trigger list header: Trigger type
FS("Type")..","..
--~ Trigger list header: Trigger identifier
FS("ID")..","
for r=1, #receivers do
info_str = info_str .. COLOR_RECEIVER..","..IMAGE_ID_RECEIVER..","..FS("Receiver")..","..F(receivers[r])
if r < #receivers or #senders > 0 then
@ -234,6 +257,7 @@ local show_trigger_dialog = function(player, selected_trigger)
end
else
last_signal_list = {}
--~ Shown when there are no triggers in a trigger list
info_str = COLOR_CAPTION..","..IMAGE_ID_BLANK..","..FS("None")..","
end

View File

@ -115,46 +115,79 @@ lzr_triggers.SIGNAL_TYPE_ICONS = {
}
-- Very short forms of the signal type names
lzr_triggers.SIGNAL_TYPE_NAMES_SHORT = {
--~ Short signal type name: Activate OFF
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_OFF] = SA("A.OFF"),
--~ Short signal type name: Activate ON
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_ON] = SA("A.ON"),
--~ Short signal type name: Activate TOGGLE
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_TOGGLE] = SA("A.TOG"),
--~ Short signal type name: Deactivate OFF
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_OFF] = SA("D.OFF"),
--~ Short signal type name: Deactivate ON
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_ON] = SA("D.ON"),
--~ Short signal type name: Deactivate TOGGLE
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_TOGGLE] = SA("D.TOG"),
--~ Short signal type name: Synchronized
[lzr_triggers.SIGNAL_TYPE_SYNC] = SA("Sync"),
--~ Short signal type name: Synchronized inverted
[lzr_triggers.SIGNAL_TYPE_SYNC_INV] = SA("Sync inv"),
--~ Short signal type name: Toggle
[lzr_triggers.SIGNAL_TYPE_TOGGLE] = SA("T."),
--~ Short signal type name: Toggle OFF
[lzr_triggers.SIGNAL_TYPE_TOGGLE_OFF] = SA("T.OFF"),
--~ Short signal type name: Toggle ON
[lzr_triggers.SIGNAL_TYPE_TOGGLE_ON] = SA("T.ON"),
}
-- Long form of the signal type names
lzr_triggers.SIGNAL_TYPE_NAMES = {
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_OFF] = S("Activate OFF"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_ON] = S("Activate ON"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_TOGGLE] = S("Activate TOGGLE"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_OFF] = S("Deactivate OFF"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_ON] = S("Deactivate ON"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_TOGGLE] = S("Deactivate TOGGLE"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_SYNC] = S("Synchronous"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_SYNC_INV] = S("Synchronous inverted"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_TOGGLE] = S("Toggle"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_TOGGLE_OFF] = S("Toggle OFF"),
--~ Signal type name
[lzr_triggers.SIGNAL_TYPE_TOGGLE_ON] = S("Toggle ON"),
}
-- Descriptions of signal types
lzr_triggers.SIGNAL_TYPE_DESCRIPTIONS = {
--~ Signal type description for signal type 'Synchronous'
[lzr_triggers.SIGNAL_TYPE_SYNC] = S("send ON signal when activated, send OFF signal when deactivated"),
--~ Signal type description for signal type 'Synchronous inverted'
[lzr_triggers.SIGNAL_TYPE_SYNC_INV] = S("send OFF signal when activated, send ON signal when deactivated"),
--~ Signal type description for signal type 'Toggle'
[lzr_triggers.SIGNAL_TYPE_TOGGLE] = S("send TOGGLE signal when toggled"),
--~ Signal type description for signal type 'Toggle ON'
[lzr_triggers.SIGNAL_TYPE_TOGGLE_ON] = S("send ON signal when toggled"),
--~ Signal type description for signal type 'Toggle OFF'
[lzr_triggers.SIGNAL_TYPE_TOGGLE_OFF] = S("send OFF signal when toggled"),
--~ Signal type description for signal type 'Activate ON'
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_ON] = S("send ON signal when activated"),
--~ Signal type description for signal type 'Activate TOGGLE'
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_TOGGLE] = S("send TOGGLE signal when activated"),
--~ Signal type description for signal type 'Activate OFF'
[lzr_triggers.SIGNAL_TYPE_ACTIVATE_OFF] = S("send OFF signal when activated"),
--~ Signal type description for signal type 'Deactivate ON'
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_ON] = S("send ON signal when deactivated"),
--~ Signal type description for signal type 'Deactivate TOGGLE'
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_TOGGLE] = S("send TOGGLE signal when deactivated"),
--~ Signal type description for signal type 'Deactivate OFF'
[lzr_triggers.SIGNAL_TYPE_DEACTIVATE_OFF] = S("send OFF signal when deactivated"),
}
@ -202,17 +235,23 @@ lzr_triggers.RECEIVER_TYPE_ICONS = {
}
-- Very short forms of the receiver type names
lzr_triggers.RECEIVER_TYPE_NAMES_SHORT = {
--~ Short receiver type name: Any
[lzr_triggers.RECEIVER_TYPE_ANY] = SA("Any"),
--~ Short receiver type name: Synchronized AND
[lzr_triggers.RECEIVER_TYPE_SYNC_AND] = SA("S.AND"),
}
-- Long form of the receiver type names
lzr_triggers.RECEIVER_TYPE_NAMES = {
--~ Receiver type name
[lzr_triggers.RECEIVER_TYPE_ANY] = S("Any"),
--~ Receiver type name
[lzr_triggers.RECEIVER_TYPE_SYNC_AND] = S("Synchronous AND"),
}
-- Descriptions of receiver types
lzr_triggers.RECEIVER_TYPE_DESCRIPTIONS = {
--~ Receiver type description for type 'Any'
[lzr_triggers.RECEIVER_TYPE_ANY] = S("react to any signal"),
--~ Receiver type description for type 'Synchronous AND'
[lzr_triggers.RECEIVER_TYPE_SYNC_AND] = S("activates when receiving a signal and all its synchronous senders are active and all its inverted synchronous senders are inactive; deactivates when receiving a signal when thats not the case"),
}