Rename moveresult speed to velocity
[oweals/minetest.git] / doc / menu_lua_api.txt
index 13ef45de0373fe03ba510c8bd256fc44adaddfa7..8f5460acb19c938f1dc1c63dd5448632b10a1ec8 100644 (file)
@@ -1,5 +1,5 @@
-Minetest Lua Mainmenu API Reference 0.4.10
-========================================
+Minetest Lua Mainmenu API Reference 5.3.0
+=========================================
 
 Introduction
 -------------
@@ -31,38 +31,8 @@ core.start()
 core.close()
 
 Filesystem:
-core.get_scriptdir()
-^ returns directory of script
-core.get_modpath() (possible in async calls)
-^ returns path to global modpath
-core.get_modstore_details(modid) (possible in async calls)
-^ modid numeric id of mod in modstore
-^ returns {
-       id                      = <numeric id of mod in modstore>,
-       title           = <human readable title>,
-       basename        = <basename for mod>,
-       description = <description of mod>,
-       author          = <author of mod>,
-       download_url= <best match download url>,
-       license         = <short description of license>,
-       rating          = <float value of current rating>
-}
-core.get_modstore_list() (possible in async calls)
-^ returns {
-       [1] = {
-               id               = <numeric id of mod in modstore>,
-               title    = <human readable title>,
-               basename = <basename for mod>
-       }
-}
-core.get_gamepath() (possible in async calls)
-^ returns path to global gamepath
-core.get_texturepath() (possible in async calls)
-^ returns path to default textures
-core.get_dirlist(path,onlydirs) (possible in async calls)
-^ path to get subdirs from
-^ onlydirs should result contain only dirs?
-^ returns list of folders within path
+core.get_builtin_path()
+^ returns path to builtin root
 core.create_dir(absolute_path) (possible in async calls)
 ^ absolute_path to directory to create (needs to be absolute)
 ^ returns true/false
@@ -88,6 +58,14 @@ core.sound_play(spec, looped) -> handle
 ^ spec = SimpleSoundSpec (see lua-api.txt)
 ^ looped = bool
 core.sound_stop(handle)
+core.get_video_drivers()
+^ get list of video drivers supported by engine (not all modes are guaranteed to work)
+^ returns list of available video drivers' settings name and 'friendly' display name
+^ e.g. { {name="opengl", friendly_name="OpenGL"}, {name="software", friendly_name="Software Renderer"} }
+^ first element of returned list is guaranteed to be the NULL driver
+core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms
+    registered in the core (possible in async calls)
+core.get_cache_path() -> path of cache
 
 Formspec:
 core.update_formspec(formspec)
@@ -101,6 +79,8 @@ core.explode_table_event(string) -> table
 core.explode_textlist_event(string) -> table
 ^ returns e.g. {type="CHG", index=1}
 ^ type: "INV" (no row selected), "CHG" (selected) or "DCL" (double-click)
+core.set_formspec_prepend(formspec)
+^ string to be added to every mainmenu formspec, to be used for theming.
 
 GUI:
 core.set_background(type, texturepath,[tile],[minsize])
@@ -111,13 +91,14 @@ core.set_background(type, texturepath,[tile],[minsize])
 core.set_clouds(<true/false>)
 core.set_topleft_text(text)
 core.show_keys_menu()
-core.file_open_dialog(formname,caption)
-^ shows a file open dialog
+core.show_path_select_dialog(formname, caption, is_file_select)
+^ shows a path select dialog
 ^ formname is base name of dialog response returned in fields
 ^     -if dialog was accepted "_accepted"
-^^       will be added to fieldname containing the path
+^        will be added to fieldname containing the path
 ^     -if dialog was canceled "_cancelled"
 ^        will be added to fieldname value is set to formname itself
+^ if `is_file_select` is `true`, a file and not a folder will be selected
 ^ returns nil or selected file/folder
 core.get_screen_info()
 ^ returns {
@@ -128,36 +109,68 @@ core.get_screen_info()
        window_height   = <current window height>
        }
 
-Games:
-core.get_game(index)
-^ returns {
-       id               = <id>,
-       path             = <full path to game>,
-       gamemods_path    = <path>,
-       name             = <name of game>,
-       menuicon_path    = <full path to menuicon>,
-       DEPRECATED:
-       addon_mods_paths = {[1] = <path>,},
-}
-core.get_games() -> table of all games in upper format (possible in async calls)
+### Content and Packages
+
+Content - an installed mod, modpack, game, or texture pack (txt)
+Package - content which is downloadable from the content db, may or may not be installed.
+
+* core.get_modpath() (possible in async calls)
+       * returns path to global modpath
+* core.get_clientmodpath() (possible in async calls)
+       * returns path to global client-side modpath
+* core.get_gamepath() (possible in async calls)
+       * returns path to global gamepath
+* core.get_texturepath() (possible in async calls)
+       * returns path to default textures
+* core.get_game(index)
+       * returns:
+
+               {
+                       id               = <id>,
+                       path             = <full path to game>,
+                       gamemods_path    = <path>,
+                       name             = <name of game>,
+                       menuicon_path    = <full path to menuicon>,
+                       author           = "author",
+                       DEPRECATED:
+                       addon_mods_paths = {[1] = <path>,},
+               }
+
+* core.get_games() -> table of all games in upper format (possible in async calls)
+* core.get_content_info(path)
+       * returns
+
+               {
+                       name             = "name of content",
+                       type             = "mod" or "modpack" or "game" or "txp",
+                       description      = "description",
+                       author           = "author",
+                       path             = "path/to/content",
+                       depends          = {"mod", "names"}, -- mods only
+                       optional_depends = {"mod", "names"}, -- mods only
+               }
+
 
 Favorites:
 core.get_favorites(location) -> list of favorites (possible in async calls)
 ^ location: "local" or "online"
 ^ returns {
        [1] = {
-       clients       = <number of clients/nil>,
-       clients_max   = <maximum number of clients/nil>,
-       version       = <server version/nil>,
-       password      = <true/nil>,
-       creative      = <true/nil>,
-       damage        = <true/nil>,
-       pvp           = <true/nil>,
-       description   = <server description/nil>,
-       name          = <server name/nil>,
-       address       = <address of server/nil>,
-       port          = <port>
+               clients       = <number of clients/nil>,
+               clients_max   = <maximum number of clients/nil>,
+               version       = <server version/nil>,
+               password      = <true/nil>,
+               creative      = <true/nil>,
+               damage        = <true/nil>,
+               pvp           = <true/nil>,
+               description   = <server description/nil>,
+               name          = <server name/nil>,
+               address       = <address of server/nil>,
+               port          = <port>
+               clients_list  = <array of clients/nil>
+               mods          = <array of mods/nil>
        },
+       ...
 }
 core.delete_favorite(id, location) -> success
 
@@ -169,11 +182,14 @@ core.log(loglevel, line) (possible in async calls)
 ^ loglevel one of "error", "action", "info", "verbose"
 
 Settings:
-core.setting_set(name, value)
-core.setting_get(name) -> string or nil (possible in async calls)
-core.setting_setbool(name, value)
-core.setting_getbool(name) -> bool or nil (possible in async calls)
-core.setting_save() -> nil, save all settings to config file
+core.settings:set(name, value)
+core.settings:get(name) -> string or nil (possible in async calls)
+core.settings:set_bool(name, value)
+core.settings:get_bool(name) -> bool or nil (possible in async calls)
+core.settings:save() -> nil, save all settings to config file
+
+For a complete list of methods of the Settings object see
+[lua_api.txt](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt)
 
 Worlds:
 core.get_worlds() -> list of worlds (possible in async calls)
@@ -188,11 +204,15 @@ core.create_world(worldname, gameid)
 core.delete_world(index)
 
 Helpers:
+core.get_us_time()
+^ returns time with microsecond precision
 core.gettext(string) -> string
 ^ look up the translation of a string in the gettext message catalog
-fgettext(string, ...) -> string
+fgettext_ne(string, ...)
 ^ call core.gettext(string), replace "$1"..."$9" with the given
-^ extra arguments, call core.formspec_escape and return the result
+^ extra arguments and return the result
+fgettext(string, ...) -> string
+^ same as fgettext_ne(), but calls core.formspec_escape before returning result
 core.parse_json(string[, nullvalue]) -> something (possible in async calls)
 ^ see core.parse_json (lua_api.txt)
 dump(obj, dumped={})
@@ -203,6 +223,16 @@ string:trim()
 ^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
 core.is_yes(arg) (possible in async calls)
 ^ returns whether arg can be interpreted as yes
+minetest.encode_base64(string) (possible in async calls)
+^ Encodes a string in base64.
+minetest.decode_base64(string) (possible in async calls)
+^ Decodes a string encoded in base64.
+
+Version compat:
+core.get_min_supp_proto()
+^ returns the minimum supported network protocol version
+core.get_max_supp_proto()
+^ returns the maximum supported network protocol version
 
 Async:
 core.handle_async(async_job,parameters,finished)
@@ -216,9 +246,12 @@ Limitations of Async operations
  -No access to global lua variables, don't even try
  -Limited set of available functions
        e.g. No access to functions modifying menu like core.start,core.close,
-       core.file_open_dialog
-                       
+       core.show_path_select_dialog
 
-Class reference
+Background music
 ----------------
-Settings: see lua_api.txt
+The main menu supports background music.
+It looks for a `main_menu` sound in `$USER_PATH/sounds`. The same naming
+conventions as for normal sounds apply.
+This means the player can add a custom sound.
+It will be played in the main menu (gain = 1.0), looped.