From 4c0d4e4105d2f2e63b9a43bb83fecf92288f63b3 Mon Sep 17 00:00:00 2001 From: red-001 Date: Fri, 23 Jun 2017 01:51:57 +0100 Subject: [PATCH] Load a texturepack from the 'textures' subfolder of a game --- doc/lua_api.txt | 66 ++++++++++++++++++++++--------------------------- src/server.cpp | 10 +++++--- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f588211b6..da4655682 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -47,47 +47,41 @@ Paths Games ----- Games are looked up from: + * `$path_share/games/gameid/` + * `$path_user/games/gameid/` +Where `gameid` is unique to each game. -* `$path_share/games/gameid/` -* `$path_user/games/gameid/` - -where `gameid` is unique to each game. - -The game directory contains the file `game.conf`, which contains: - - name = - -e.g. - - name = Minetest - -Optionally, game.conf can also contain: - - disallowed_mapgens = - -e.g. - - disallowed_mapgens = v5,v6,flat - -These mapgens are removed from the list of mapgens for the game. - -The game directory can contain the file minetest.conf, which will be used -to set default settings when running the particular game. -It can also contain a settingtypes.txt in the same format as the one in builtin. -This settingtypes.txt will be parsed by the menu and the settings will be displayed -in the "Games" category in the settings tab. +The game directory can contain the following files: + * `game.conf` + Which contains: + * name = + e.g. + name = Minetest + * Optionally, game.conf can also contain: + disallowed_mapgens = + e.g. + disallowed_mapgens = v5,v6,flat + These mapgens are removed from the list of mapgens for the game. + * minetest.conf + Used to set default settings when running this game. + * settingtypes.txt + In the same format as the one in builtin. + This settingtypes.txt will be parsed by the menu and the settings will be + displayed in the "Games" category in the advanced settings tab. + * If the subgame contains a folder called `textures` the server will load it + as a texturepack, overriding mod textures. + Any server texturepack will override mod textures and the game texturepack. ### Menu images -Games can provide custom main menu images. They are put inside a `menu` directory -inside the game directory. - -The images are named `$identifier.png`, where `$identifier` is -one of `overlay,background,footer,header`. -If you want to specify multiple images for one identifier, add additional images named -like `$identifier.$n.png`, with an ascending number $n starting with 1, and a random -image will be chosen from the provided ones. +Games can provide custom main menu images. They are put inside a `menu` +directory inside the game directory. +The images are named `$identifier.png`, where `$identifier` is one of +`overlay`, `background`, `footer`, `header`. +If you want to specify multiple images for one identifier, add additional +images named like `$identifier.$n.png`, with an ascending number $n starting +with 1, and a random image will be chosen from the provided ones. Mod load path ------------- diff --git a/src/server.cpp b/src/server.cpp index 26b3bb4b1..d011089c3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -253,7 +253,10 @@ Server::Server( m_nodedef->updateAliases(m_itemdef); // Apply texture overrides from texturepack/override.txt - for (const auto &path : fs::GetRecursiveDirs(g_settings->get("texture_path"))) + std::vector paths; + fs::GetRecursiveDirs(paths, g_settings->get("texture_path")); + fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures"); + for (const std::string &path : paths) m_nodedef->applyTextureOverrides(path + DIR_DELIM + "override.txt"); m_nodedef->setNodeRegistrationStatus(true); @@ -2259,8 +2262,9 @@ void Server::fillMediaCache() paths.push_back(mod.path + DIR_DELIM + "models"); paths.push_back(mod.path + DIR_DELIM + "locale"); } - fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + - "textures" + DIR_DELIM + "server"); + fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures"); + fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server"); + // Collect media file information from paths into cache for (const std::string &mediapath : paths) { std::vector dirlist = fs::GetDirListing(mediapath);