Load a texturepack from the 'textures' subfolder of a game

This commit is contained in:
red-001 2017-06-23 01:51:57 +01:00 committed by paramat
parent 70a90bc83a
commit 4c0d4e4105
2 changed files with 37 additions and 39 deletions

@ -47,47 +47,41 @@ Paths
Games Games
----- -----
Games are looked up from: Games are looked up from:
* `$path_share/games/gameid/` * `$path_share/games/gameid/`
* `$path_user/games/gameid/` * `$path_user/games/gameid/`
Where `gameid` is unique to each game.
where `gameid` is unique to each game. The game directory can contain the following files:
* `game.conf`
The game directory contains the file `game.conf`, which contains: Which contains:
* name = <Human-readable full name of the game>
name = <Human-readable full name of the game>
e.g. e.g.
name = Minetest name = Minetest
* Optionally, game.conf can also contain:
Optionally, game.conf can also contain:
disallowed_mapgens = <comma-separated mapgens> disallowed_mapgens = <comma-separated mapgens>
e.g. e.g.
disallowed_mapgens = v5,v6,flat disallowed_mapgens = v5,v6,flat
These mapgens are removed from the list of mapgens for the game. These mapgens are removed from the list of mapgens for the game.
* minetest.conf
The game directory can contain the file minetest.conf, which will be used Used to set default settings when running this game.
to set default settings when running the particular game. * settingtypes.txt
It can also contain a settingtypes.txt in the same format as the one in builtin. In the same format as the one in builtin.
This settingtypes.txt will be parsed by the menu and the settings will be displayed This settingtypes.txt will be parsed by the menu and the settings will be
in the "Games" category in the settings tab. 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 ### Menu images
Games can provide custom main menu images. They are put inside a `menu` directory Games can provide custom main menu images. They are put inside a `menu`
inside the game directory. 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.
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 Mod load path
------------- -------------

@ -253,7 +253,10 @@ Server::Server(
m_nodedef->updateAliases(m_itemdef); m_nodedef->updateAliases(m_itemdef);
// Apply texture overrides from texturepack/override.txt // Apply texture overrides from texturepack/override.txt
for (const auto &path : fs::GetRecursiveDirs(g_settings->get("texture_path"))) std::vector<std::string> 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->applyTextureOverrides(path + DIR_DELIM + "override.txt");
m_nodedef->setNodeRegistrationStatus(true); 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 + "models");
paths.push_back(mod.path + DIR_DELIM + "locale"); paths.push_back(mod.path + DIR_DELIM + "locale");
} }
fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
"textures" + DIR_DELIM + "server"); fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
// Collect media file information from paths into cache // Collect media file information from paths into cache
for (const std::string &mediapath : paths) { for (const std::string &mediapath : paths) {
std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath); std::vector<fs::DirListNode> dirlist = fs::GetDirListing(mediapath);