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_user/games/gameid/`
Where `gameid` is unique to each game.
* `$path_share/games/gameid/` The game directory can contain the following files:
* `$path_user/games/gameid/` * `game.conf`
Which contains:
where `gameid` is unique to each game. * name = <Human-readable full name of the game>
e.g.
The game directory contains the file `game.conf`, which contains: name = Minetest
* Optionally, game.conf can also contain:
name = <Human-readable full name of the game> disallowed_mapgens = <comma-separated mapgens>
e.g.
e.g. disallowed_mapgens = v5,v6,flat
These mapgens are removed from the list of mapgens for the game.
name = Minetest * minetest.conf
Used to set default settings when running this game.
Optionally, game.conf can also contain: * settingtypes.txt
In the same format as the one in builtin.
disallowed_mapgens = <comma-separated mapgens> This settingtypes.txt will be parsed by the menu and the settings will be
displayed in the "Games" category in the advanced settings tab.
e.g. * If the subgame contains a folder called `textures` the server will load it
as a texturepack, overriding mod textures.
disallowed_mapgens = v5,v6,flat Any server texturepack will override mod textures and the game texturepack.
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.
### 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);