X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fsubgame.cpp;h=94d9be181a669792ad6728968f5c997bf826e3f3;hb=a1e9732407494edb9cef3ada45cc2781a34ed60c;hp=7fee3899d4ace353f7555735034f25390475c215;hpb=45fcc9de29de762e8dde20a50db4a3184c830e42;p=dragonfireclient.git diff --git a/src/subgame.cpp b/src/subgame.cpp index 7fee3899d..94d9be181 100644 --- a/src/subgame.cpp +++ b/src/subgame.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "settings.h" #include "log.h" +#include "strfnd.h" #ifndef SERVER #include "tile.h" // getImagePath #endif @@ -59,6 +60,17 @@ struct GameFindPath {} }; +Strfnd getSubgamePathEnv() { + std::string sp; + char *subgame_path = getenv("MINETEST_SUBGAME_PATH"); + + if(subgame_path) { + sp = std::string(subgame_path); + } + + return Strfnd(sp); +} + SubgameSpec findSubgame(const std::string &id) { if(id == "") @@ -66,6 +78,17 @@ SubgameSpec findSubgame(const std::string &id) std::string share = porting::path_share; std::string user = porting::path_user; std::vector find_paths; + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + std::string path = search_paths.next(":"); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id, false)); + find_paths.push_back(GameFindPath( + path + DIR_DELIM + id + "_game", false)); + } + find_paths.push_back(GameFindPath( user + DIR_DELIM + "games" + DIR_DELIM + id + "_game", true)); find_paths.push_back(GameFindPath( @@ -129,6 +152,13 @@ std::set getAvailableGameIds() std::set gamespaths; gamespaths.insert(porting::path_share + DIR_DELIM + "games"); gamespaths.insert(porting::path_user + DIR_DELIM + "games"); + + Strfnd search_paths = getSubgamePathEnv(); + + while(!search_paths.atend()) { + gamespaths.insert(search_paths.next(":")); + } + for(std::set::const_iterator i = gamespaths.begin(); i != gamespaths.end(); i++){ std::vector dirlist = fs::GetDirListing(*i); @@ -241,10 +271,9 @@ bool initializeWorld(const std::string &path, const std::string &gameid) if(!fs::PathExists(worldmt_path)){ infostream<<"Creating world.mt ("<