diff --git a/binaries/data/mods/public/gui/gui.rnc b/binaries/data/mods/mod/gui/gui.rnc similarity index 100% rename from binaries/data/mods/public/gui/gui.rnc rename to binaries/data/mods/mod/gui/gui.rnc diff --git a/binaries/data/mods/public/gui/gui.rng b/binaries/data/mods/mod/gui/gui.rng similarity index 100% rename from binaries/data/mods/public/gui/gui.rng rename to binaries/data/mods/mod/gui/gui.rng diff --git a/binaries/data/mods/public/gui/gui_page.rnc b/binaries/data/mods/mod/gui/gui_page.rnc similarity index 100% rename from binaries/data/mods/public/gui/gui_page.rnc rename to binaries/data/mods/mod/gui/gui_page.rnc diff --git a/binaries/data/mods/public/gui/gui_page.rng b/binaries/data/mods/mod/gui/gui_page.rng similarity index 100% rename from binaries/data/mods/public/gui/gui_page.rng rename to binaries/data/mods/mod/gui/gui_page.rng diff --git a/source/graphics/MaterialManager.cpp b/source/graphics/MaterialManager.cpp index e0eaa2cede..74462a0ccd 100644 --- a/source/graphics/MaterialManager.cpp +++ b/source/graphics/MaterialManager.cpp @@ -37,7 +37,7 @@ CMaterialManager::CMaterialManager() CFG_GET_VAL("materialmgr.quality", qualityLevel); qualityLevel = clamp(qualityLevel, 0.0f, 10.0f); - if (!CXeromyces::AddValidator(g_VFS, "material", "art/materials/material.rng")) + if (VfsDirectoryExists(L"art/materials/") && !CXeromyces::AddValidator(g_VFS, "material", "art/materials/material.rng")) LOGERROR("CMaterialManager: failed to load grammar file 'art/materials/material.rng'"); } diff --git a/source/graphics/TerrainTextureManager.cpp b/source/graphics/TerrainTextureManager.cpp index cb244341d8..0a5497faa4 100644 --- a/source/graphics/TerrainTextureManager.cpp +++ b/source/graphics/TerrainTextureManager.cpp @@ -35,9 +35,11 @@ #include -CTerrainTextureManager::CTerrainTextureManager(): - m_LastGroupIndex(0) +CTerrainTextureManager::CTerrainTextureManager() + : m_LastGroupIndex(0) { + if (!VfsDirectoryExists(L"art/terrains/")) + return; if (!CXeromyces::AddValidator(g_VFS, "terrain", "art/terrains/terrain.rng")) LOGERROR("CTerrainTextureManager: failed to load grammar file 'art/terrains/terrain.rng'"); if (!CXeromyces::AddValidator(g_VFS, "terrain_texture", "art/terrains/terrain_texture.rng")) diff --git a/source/ps/Filesystem.cpp b/source/ps/Filesystem.cpp index be1610863d..b76ab32e4c 100644 --- a/source/ps/Filesystem.cpp +++ b/source/ps/Filesystem.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2015 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -35,6 +35,12 @@ bool VfsFileExists(const VfsPath& pathname) return g_VFS->GetFileInfo(pathname, 0) == INFO::OK; } +bool VfsDirectoryExists(const VfsPath& pathname) +{ + ENSURE(pathname.IsDirectory()); + return g_VFS->GetDirectoryEntries(pathname, NULL, NULL) == INFO::OK; +} + void RegisterFileReloadFunc(FileReloadFunc func, void* obj) { g_ReloadFuncs.push_back(std::make_pair(func, obj)); diff --git a/source/ps/Filesystem.h b/source/ps/Filesystem.h index 1eee2440f1..ba87163b41 100644 --- a/source/ps/Filesystem.h +++ b/source/ps/Filesystem.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2015 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -30,6 +30,8 @@ extern PIVFS g_VFS; extern bool VfsFileExists(const VfsPath& pathname); +extern bool VfsDirectoryExists(const VfsPath& pathname); + /** * callback function type for file change notifications */ diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index 13ccd4c48a..a0e86761b4 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -1075,7 +1075,8 @@ void InitGraphics(const CmdLineArgs& args, int flags) ogl_WarnIfError(); // TODO: Is this the best place for this? - CXeromyces::AddValidator(g_VFS, "map", "maps/scenario.rng"); + if (VfsDirectoryExists(L"maps/")) + CXeromyces::AddValidator(g_VFS, "map", "maps/scenario.rng"); try {