diff options
-rw-r--r-- | data/graphics/sprites/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/being.cpp | 3 | ||||
-rw-r--r-- | src/being.h | 8 | ||||
-rw-r--r-- | src/client.cpp | 4 | ||||
-rw-r--r-- | src/configuration.cpp | 25 | ||||
-rw-r--r-- | src/configuration.h | 8 | ||||
-rw-r--r-- | src/game.cpp | 3 | ||||
-rw-r--r-- | src/gui/gui.cpp | 1 | ||||
-rw-r--r-- | src/gui/help.cpp | 6 | ||||
-rw-r--r-- | src/gui/itempopup.cpp | 4 | ||||
-rw-r--r-- | src/gui/theme.cpp | 30 | ||||
-rw-r--r-- | src/item.cpp | 11 | ||||
-rw-r--r-- | src/localplayer.cpp | 4 | ||||
-rw-r--r-- | src/monster.cpp | 8 | ||||
-rw-r--r-- | src/net/manaserv/beinghandler.cpp | 2 | ||||
-rw-r--r-- | src/net/manaserv/playerhandler.cpp | 6 | ||||
-rw-r--r-- | src/npc.cpp | 4 | ||||
-rw-r--r-- | src/player.cpp | 10 | ||||
-rw-r--r-- | src/resources/emotedb.cpp | 10 | ||||
-rw-r--r-- | src/resources/itemdb.cpp | 6 | ||||
-rw-r--r-- | src/resources/iteminfo.cpp | 3 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 5 | ||||
-rw-r--r-- | src/resources/monsterdb.cpp | 3 | ||||
-rw-r--r-- | src/resources/monsterinfo.cpp | 4 | ||||
-rw-r--r-- | src/resources/npcdb.cpp | 4 | ||||
-rw-r--r-- | src/resources/spritedef.cpp | 12 | ||||
-rw-r--r-- | src/resources/wallpaper.cpp | 46 | ||||
-rw-r--r-- | src/resources/wallpaper.h | 2 | ||||
-rw-r--r-- | src/sound.cpp | 9 | ||||
-rw-r--r-- | src/statuseffect.cpp | 7 |
30 files changed, 177 insertions, 73 deletions
diff --git a/data/graphics/sprites/CMakeLists.txt b/data/graphics/sprites/CMakeLists.txt index 1d98772d..db0c4087 100644 --- a/data/graphics/sprites/CMakeLists.txt +++ b/data/graphics/sprites/CMakeLists.txt @@ -3,4 +3,4 @@ SET(FILES error.xml ) -INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/graphics/sprits) +INSTALL(FILES ${FILES} DESTINATION ${DATA_DIR}/graphics/sprites) diff --git a/src/being.cpp b/src/being.cpp index 5c737c0c..d2dfc855 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -1022,7 +1022,8 @@ void Being::load() // we can go. int hairstyles = 1; - while (ItemDB::get(-hairstyles).getSprite(GENDER_MALE) != "error.xml") + while (ItemDB::get(-hairstyles).getSprite(GENDER_MALE) != + paths.getValue("spriteErrorFile", "error.xml")) hairstyles++; mNumberOfHairstyles = hairstyles; diff --git a/src/being.h b/src/being.h index 3d3dfa71..71b3e2cf 100644 --- a/src/being.h +++ b/src/being.h @@ -113,7 +113,13 @@ class Being : public Sprite, public ConfigListener /** * Directions, to be used as bitmask values */ - enum { DOWN = 1, LEFT = 2, UP = 4, RIGHT = 8 }; + enum BeingDirection + { + DOWN = 1, + LEFT = 2, + UP = 4, + RIGHT = 8 + }; /** * Constructor. diff --git a/src/client.cpp b/src/client.cpp index 4b6d3744..ac10112e 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -109,6 +109,7 @@ LoginData loginData; Configuration config; /**< XML file configuration reader */ Configuration branding; /**< XML branding information reader */ +Configuration paths; /**< XML default paths information reader */ Logger *logger; /**< Log object */ KeyboardConfig keyboard; @@ -727,6 +728,9 @@ int Client::exec() false); } + // Read default paths file 'data/paths.xml' + paths.init("paths.xml", true); + // Load XML databases ColorDB::load(); ItemDB::load(); diff --git a/src/configuration.cpp b/src/configuration.cpp index 1310d642..cd31fed7 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -137,33 +137,30 @@ void ConfigurationObject::initFromXML(xmlNodePtr parent_node) } } -void Configuration::init(const std::string &filename) +void Configuration::init(const std::string &filename, bool useResManager) { - mConfigPath = filename; + XML::Document doc(filename, useResManager); - // Do not attempt to read config from non-existant file - FILE *testFile = fopen(filename.c_str(), "r"); - if (!testFile) + if (!doc.rootNode()) + { + logger->log("Couldn't open configuration file: %s", filename.c_str()); return; - else - fclose(testFile); - - xmlDocPtr doc = xmlReadFile(filename.c_str(), NULL, 0); + } - if (!doc) return; + if (useResManager) + mConfigPath = "PhysFS://" + filename; + else + mConfigPath = filename; - xmlNodePtr rootNode = xmlDocGetRootElement(doc); + xmlNodePtr rootNode = doc.rootNode(); if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "configuration")) { logger->log("Warning: No configuration file (%s)", filename.c_str()); - xmlFreeDoc(doc); return; } initFromXML(rootNode); - - xmlFreeDoc(doc); } void ConfigurationObject::writeToXML(xmlTextWriterPtr writer) diff --git a/src/configuration.h b/src/configuration.h index a0c896a5..908d13a4 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -197,9 +197,10 @@ class Configuration : public ConfigurationObject /** * Reads config file and parse all options into memory. * - * \param filename path to config file + * @param filename path to config file + * @param useResManager Make use of the resource manager. */ - void init(const std::string &filename); + void init(const std::string &filename, bool useResManager = false); /** * Writes the current settings back to the config file. @@ -244,10 +245,11 @@ class Configuration : public ConfigurationObject typedef ListenerMap::iterator ListenerMapIterator; ListenerMap mListenerMap; - std::string mConfigPath; /**< Location of config file */ + std::string mConfigPath; /**< Location of config file */ }; extern Configuration branding; extern Configuration config; +extern Configuration paths; #endif diff --git a/src/game.cpp b/src/game.cpp index 79f21863..ec5e6b13 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -928,7 +928,8 @@ void Game::changeMap(const std::string &mapPath) mMapName = mapPath; - std::string fullMap = "maps/" + mapPath + ".tmx"; + std::string fullMap = paths.getValue("maps", "maps/") + + mMapName + ".tmx"; ResourceManager *resman = ResourceManager::getInstance(); if (!resman->exists(fullMap)) fullMap += ".gz"; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e2354386..df2ddadf 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -107,6 +107,7 @@ Gui::Gui(Graphics *graphics): const int fontSize = (int) config.getValue("fontSize", 11); std::string fontFile = branding.getValue("font", "fonts/dejavusans.ttf"); std::string path = resman->getPath(fontFile); + try { mGuiFont = new TrueTypeFont(path, fontSize); diff --git a/src/gui/help.cpp b/src/gui/help.cpp index 9d237f18..f3c6a0af 100644 --- a/src/gui/help.cpp +++ b/src/gui/help.cpp @@ -29,6 +29,7 @@ #include "gui/widgets/scrollarea.h" #include "resources/resourcemanager.h" +#include "configuration.h" #include "utils/gettext.h" @@ -93,8 +94,11 @@ void HelpWindow::loadHelp(const std::string &helpFile) void HelpWindow::loadFile(const std::string &file) { ResourceManager *resman = ResourceManager::getInstance(); + std::string helpPath = branding.getValue("helpPath", ""); + if (helpPath.empty()) + helpPath = paths.getValue("help", "help/"); std::vector<std::string> lines = - resman->loadTextFile("help/" + file + ".txt"); + resman->loadTextFile(helpPath + file + ".txt"); for (unsigned int i = 0; i < lines.size(); ++i) { diff --git a/src/gui/itempopup.cpp b/src/gui/itempopup.cpp index 2618810b..0cde9395 100644 --- a/src/gui/itempopup.cpp +++ b/src/gui/itempopup.cpp @@ -102,7 +102,9 @@ void ItemPopup::setItem(const ItemInfo &item, bool showImage) if (showImage) { ResourceManager *resman = ResourceManager::getInstance(); - Image *image = resman->getImage("graphics/items/" + item.getImageName()); + Image *image = resman->getImage( + paths.getValue("itemIcons", "graphics/items/") + + item.getImageName()); mIcon->setImage(image); if (image) { diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp index e46616e0..12de1f91 100644 --- a/src/gui/theme.cpp +++ b/src/gui/theme.cpp @@ -40,11 +40,22 @@ #include <algorithm> -#define GUI_ROOT "graphics/gui/" - +static std::string defaultThemePath; std::string Theme::mThemePath; Theme *Theme::mInstance = 0; +// Set the theme path... +static void initDefaultThemePath() +{ + ResourceManager *resman = ResourceManager::getInstance(); + defaultThemePath = branding.getValue("guiThemePath", ""); + + if (!defaultThemePath.empty() && resman->isDirectory(defaultThemePath)) + return; + else + defaultThemePath = "graphics/gui/"; +} + Skin::Skin(ImageRect skin, Image *close, Image *stickyUp, Image *stickyDown, const std::string &filePath, const std::string &name): @@ -55,8 +66,7 @@ Skin::Skin(ImageRect skin, Image *close, Image *stickyUp, Image *stickyDown, mCloseImage(close), mStickyImageUp(stickyUp), mStickyImageDown(stickyDown) -{ -} +{} Skin::~Skin() { @@ -99,6 +109,8 @@ Theme::Theme(): mMinimumOpacity(-1.0f), mProgressColors(ProgressColors(THEME_PROG_END)) { + initDefaultThemePath(); + config.addListener("guialpha", this); loadColors(); @@ -313,7 +325,7 @@ bool Theme::tryThemePath(std::string themePath) { if (!themePath.empty()) { - themePath = GUI_ROOT + themePath; + themePath = defaultThemePath + themePath; if (PHYSFS_exists(themePath.c_str())) { mThemePath = themePath; @@ -331,7 +343,7 @@ void Theme::prepareThemePath() // Try theme from branding if (!tryThemePath(branding.getValue("theme", ""))) // Use default - mThemePath = GUI_ROOT; + mThemePath = defaultThemePath; instance()->loadColors(mThemePath); } @@ -356,7 +368,7 @@ std::string Theme::resolveThemePath(const std::string &path) return getThemePath() + "/" + path; // Backup - return std::string(GUI_ROOT) + "/" + path; + return std::string(defaultThemePath) + "/" + path; } Image *Theme::getImageFromTheme(const std::string &path) @@ -508,11 +520,11 @@ static int readProgressType(const std::string &type) void Theme::loadColors(std::string file) { - if (file == GUI_ROOT) + if (file == defaultThemePath) return; // No need to reload if (file == "") - file = GUI_ROOT; + file = defaultThemePath; file += "/colors.xml"; diff --git a/src/item.cpp b/src/item.cpp index 79ccd2c3..b434387e 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -26,6 +26,7 @@ #include "resources/image.h" #include "resources/iteminfo.h" #include "resources/resourcemanager.h" +#include "configuration.h" Item::Item(int id, int quantity, bool equipment, bool equipped): mImage(0), @@ -57,13 +58,17 @@ void Item::setId(int id) mDrawImage->decRef(); ResourceManager *resman = ResourceManager::getInstance(); - std::string imagePath = "graphics/items/" + getInfo().getImageName(); + std::string imagePath = paths.getValue("itemIcons", "graphics/items/") + + getInfo().getImageName(); mImage = resman->getImage(imagePath); mDrawImage = resman->getImage(imagePath); if (!mImage) - mImage = Theme::getImageFromTheme("unknown-item.png"); + mImage = Theme::getImageFromTheme(paths.getValue("unknownItemFile", + "unknown-item.png")); if (!mDrawImage) - mDrawImage = Theme::getImageFromTheme("unknown-item.png"); + mDrawImage = Theme::getImageFromTheme( + paths.getValue("unknownItemFile", + "unknown-item.png")); } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index b06ea456..9c64c6dc 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1035,9 +1035,7 @@ void LocalPlayer::attack(Being *target, bool keep) sound.playSfx(soundFile); } else - { - sound.playSfx("sfx/fist-swish.ogg"); - } + sound.playSfx(paths.getValue("attackSfxFile", "fist-swish.ogg")); Net::getPlayerHandler()->attack(target->getId()); if ((Net::getNetworkType() == ServerInfo::TMWATHENA) && !keep) diff --git a/src/monster.cpp b/src/monster.cpp index d25c6c90..ca156821 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -34,6 +34,7 @@ #include "resources/monsterdb.h" #include "resources/monsterinfo.h" +#include "configuration.h" Monster::Monster(int id, int subtype, Map *map): Being(id, subtype, map), @@ -132,14 +133,17 @@ void Monster::setSubtype(Uint16 subtype) for (std::list<std::string>::const_iterator i = sprites.begin(); i != sprites.end(); i++) { - std::string file = "graphics/sprites/" + *i; + std::string file = paths.getValue("sprites", + "graphics/sprites/") + *i; mSprites.push_back(AnimatedSprite::load(file)); } // Ensure that something is shown if (mSprites.size() == 0) { - mSprites.push_back(AnimatedSprite::load("graphics/sprites/error.xml")); + mSprites.push_back(AnimatedSprite::load( + paths.getValue("sprites", "graphics/sprites/") + + paths.getValue("spriteErrorFile", "error.xml") )); } if (Particle::enabled) diff --git a/src/net/manaserv/beinghandler.cpp b/src/net/manaserv/beinghandler.cpp index b08af749..8df9a8ab 100644 --- a/src/net/manaserv/beinghandler.cpp +++ b/src/net/manaserv/beinghandler.cpp @@ -232,7 +232,7 @@ void BeingHandler::handleBeingsMoveMessage(Net::MessageIn &msg) } if (speed) { - /** + /* * The being's speed is transfered in tiles per second * 10 * to keep it transferable in a Byte. * We set it back to tiles per second and in a float. diff --git a/src/net/manaserv/playerhandler.cpp b/src/net/manaserv/playerhandler.cpp index f6207800..2347fee2 100644 --- a/src/net/manaserv/playerhandler.cpp +++ b/src/net/manaserv/playerhandler.cpp @@ -29,6 +29,7 @@ #include "log.h" #include "particle.h" #include "npc.h" +#include "configuration.h" #include "gui/chat.h" #include "gui/gui.h" @@ -141,7 +142,10 @@ void PlayerHandler::handleMessage(Net::MessageIn &msg) player_node->setLevel(msg.readInt16()); player_node->setCharacterPoints(msg.readInt16()); player_node->setCorrectionPoints(msg.readInt16()); - Particle* effect = particleEngine->addEffect("graphics/particles/levelup.particle.xml", 0, 0); + Particle* effect = particleEngine->addEffect( + paths.getValue("particles", "graphics/particles/") + + paths.getValue("levelUpEffectFile", "levelup.particle.xml"), + 0, 0); player_node->controlParticle(effect); } break; diff --git a/src/npc.cpp b/src/npc.cpp index cdfe5193..a3c26618 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -36,6 +36,7 @@ #include "net/npchandler.h" #include "resources/npcdb.h" +#include "configuration.h" NPC::NPC(int id, int subtype, Map *map): Player(id, subtype, map, true) @@ -68,7 +69,8 @@ void NPC::setSubtype(Uint16 subtype) i != info.sprites.end(); i++) { - std::string file = "graphics/sprites/" + (*i)->sprite; + std::string file = paths.getValue("sprites", + "graphics/sprites/") + (*i)->sprite; int variant = (*i)->variant; mSprites.push_back(AnimatedSprite::load(file, variant)); mSpriteIDs.push_back(0); diff --git a/src/player.cpp b/src/player.cpp index 1f706cb8..e6102b6a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -118,8 +118,10 @@ void Player::logic() default: break; } Particle *p; - p = particleEngine->addEffect("graphics/particles/" + - particleEffect, 0, 0, rotation); + p = particleEngine->addEffect( + paths.getValue("particles", + "graphics/particles/") + + particleEffect, 0, 0, rotation); controlParticle(p); } @@ -193,8 +195,8 @@ void Player::setSprite(int slot, int id, const std::string &color, if (!color.empty()) filename += "|" + color; - equipmentSprite = AnimatedSprite::load("graphics/sprites/" + - filename); + equipmentSprite = AnimatedSprite::load( + paths.getValue("sprites", "graphics/sprites/") + filename); } if (equipmentSprite) diff --git a/src/resources/emotedb.cpp b/src/resources/emotedb.cpp index fddab500..c24e760b 100644 --- a/src/resources/emotedb.cpp +++ b/src/resources/emotedb.cpp @@ -24,6 +24,7 @@ #include "log.h" #include "utils/xml.h" +#include "configuration.h" namespace { @@ -41,7 +42,8 @@ void EmoteDB::load() mLastEmote = 0; EmoteSprite *unknownSprite = new EmoteSprite; - unknownSprite->sprite = AnimatedSprite::load("error.xml"); + unknownSprite->sprite = AnimatedSprite::load( + paths.getValue("spriteErrorFile", "error.xml") ); unknownSprite->name = "unknown"; mUnknown.sprites.push_back(unknownSprite); @@ -76,8 +78,10 @@ void EmoteDB::load() if (xmlStrEqual(spriteNode->name, BAD_CAST "sprite")) { EmoteSprite *currentSprite = new EmoteSprite; - std::string file = "graphics/sprites/" + (std::string) - (const char*) spriteNode->xmlChildrenNode->content; + std::string file = paths.getValue("sprites", + "graphics/sprites/") + + (std::string) (const char*) + spriteNode->xmlChildrenNode->content; currentSprite->sprite = AnimatedSprite::load(file, XML::getProperty(spriteNode, "variant", 0)); currentInfo->sprites.push_back(currentSprite); diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index 077012c7..3fdee021 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -30,6 +30,7 @@ #include "utils/gettext.h" #include "utils/stringutils.h" #include "utils/xml.h" +#include "configuration.h" #include <libxml/tree.h> @@ -115,8 +116,9 @@ void ItemDB::load() mUnknown = new ItemInfo; mUnknown->setName(_("Unknown item")); mUnknown->setImageName(""); - mUnknown->setSprite("error.xml", GENDER_MALE); - mUnknown->setSprite("error.xml", GENDER_FEMALE); + std::string errFile = paths.getValue("spriteErrorFile", "error.xml"); + mUnknown->setSprite(errFile, GENDER_MALE); + mUnknown->setSprite(errFile, GENDER_FEMALE); XML::Document doc("items.xml"); xmlNodePtr rootNode = doc.rootNode(); diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp index 5fb1ff82..4b1d82ea 100644 --- a/src/resources/iteminfo.cpp +++ b/src/resources/iteminfo.cpp @@ -22,6 +22,7 @@ #include "resources/iteminfo.h" #include "resources/itemdb.h" +#include "configuration.h" const std::string &ItemInfo::getSprite(Gender gender) const { @@ -68,7 +69,7 @@ void ItemInfo::setWeaponType(int type) void ItemInfo::addSound(EquipmentSoundEvent event, const std::string &filename) { - mSounds[event].push_back("sfx/" + filename); + mSounds[event].push_back(paths.getValue("sfx", "sfx/") + filename); } const std::string &ItemInfo::getSound(EquipmentSoundEvent event) const diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index e8a2bd20..a8582c9b 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -323,7 +323,10 @@ Map *MapReader::readMap(xmlNodePtr node, const std::string &path) if (config.getValue("showWarps", 1)) { map->addParticleEffect( - "graphics/particles/warparea.particle.xml", + paths.getValue("particles", + "graphics/particles/") + + paths.getValue("portalEffectFile", + "warparea.particle.xml"), objX, objY, objW, objH); } } diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp index 5a796f5f..b08d87f2 100644 --- a/src/resources/monsterdb.cpp +++ b/src/resources/monsterdb.cpp @@ -30,6 +30,7 @@ #include "utils/xml.h" #include "net/net.h" +#include "configuration.h" #define OLD_TMWATHENA_OFFSET 1002 @@ -45,7 +46,7 @@ void MonsterDB::load() if (mLoaded) unload(); - mUnknown.addSprite("error.xml"); + mUnknown.addSprite(paths.getValue("spriteErrorFile", "error.xml")); logger->log("Initializing monster database..."); diff --git a/src/resources/monsterinfo.cpp b/src/resources/monsterinfo.cpp index 9104c721..12cdbe3e 100644 --- a/src/resources/monsterinfo.cpp +++ b/src/resources/monsterinfo.cpp @@ -23,6 +23,7 @@ #include "utils/dtor.h" #include "utils/gettext.h" +#include "configuration.h" MonsterInfo::MonsterInfo(): mName(_("unnamed")), @@ -45,7 +46,8 @@ void MonsterInfo::addSound(MonsterSoundEvent event, const std::string &filename) mSounds[event] = new std::vector<std::string>; } - mSounds[event]->push_back("sfx/" + filename); + mSounds[event]->push_back(paths.getValue("sfx", "sfx/") + + filename); } const std::string &MonsterInfo::getSound(MonsterSoundEvent event) const diff --git a/src/resources/npcdb.cpp b/src/resources/npcdb.cpp index bc36a3b4..21a2e9a1 100644 --- a/src/resources/npcdb.cpp +++ b/src/resources/npcdb.cpp @@ -24,6 +24,7 @@ #include "log.h" #include "utils/xml.h" +#include "configuration.h" namespace { @@ -38,7 +39,8 @@ void NPCDB::load() unload(); NPCsprite *unknownSprite = new NPCsprite; - unknownSprite->sprite = "error.xml"; + unknownSprite->sprite = paths.getValue("spriteErrorFile", + "error.xml"); unknownSprite->variant = 0; mUnknown.sprites.push_back(unknownSprite); diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 55b38546..c524c43c 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -30,6 +30,8 @@ #include "resources/imageset.h" #include "resources/resourcemanager.h" +#include "configuration.h" + #include "utils/xml.h" #include <set> @@ -61,9 +63,12 @@ SpriteDef *SpriteDef::load(const std::string &animationFile, int variant) { logger->log("Error, failed to parse %s", animationFile.c_str()); - if (animationFile != "graphics/sprites/error.xml") + std::string errorFile = paths.getValue("sprites", "graphics/sprites") + + paths.getValue("spriteErrorFile", + "error.xml"); + if (animationFile != errorFile) { - return load("graphics/sprites/error.xml", 0); + return load(errorFile, 0); } else { @@ -278,7 +283,8 @@ void SpriteDef::includeSprite(xmlNodePtr includeNode) if (filename.empty()) return; - XML::Document doc("graphics/sprites/" + filename); + XML::Document doc(paths.getValue("sprites", "graphics/sprites/") + + filename); xmlNodePtr rootNode = doc.rootNode(); if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "sprite")) diff --git a/src/resources/wallpaper.cpp b/src/resources/wallpaper.cpp index f57f429d..22bbda9c 100644 --- a/src/resources/wallpaper.cpp +++ b/src/resources/wallpaper.cpp @@ -21,9 +21,11 @@ #include "resources/wallpaper.h" +#include "resources/resourcemanager.h" #include "log.h" #include "utils/stringutils.h" +#include "configuration.h" #include <physfs.h> @@ -32,9 +34,6 @@ #include <time.h> #include <vector> -#define WALLPAPER_FOLDER "graphics/images/" -#define WALLPAPER_BASE "login_wallpaper.png" - struct WallpaperData { std::string filename; @@ -45,6 +44,37 @@ struct WallpaperData static std::vector<WallpaperData> wallpaperData; static bool haveBackup; // Is the backup (no size given) version available? +static std::string wallpaperPath; +static std::string wallpaperFile; + +// Search for the wallpaper path values sequentially.. +static void initDefaultWallpaperPaths() +{ + ResourceManager *resman = ResourceManager::getInstance(); + + // Init the path + wallpaperPath = branding.getValue("wallpapersPath", ""); + + if (!wallpaperPath.empty() && resman->isDirectory(wallpaperPath)) + return; + else + wallpaperPath = paths.getValue("wallpapers", ""); + + if (wallpaperPath.empty() || !resman->isDirectory(wallpaperPath)) + wallpaperPath = "graphics/images/"; + + // Init the default file + wallpaperFile = branding.getValue("wallpaperFile", ""); + + if (!wallpaperFile.empty() && resman->isDirectory(wallpaperFile)) + return; + else + wallpaperFile = paths.getValue("wallpaperFile", ""); + + if (wallpaperFile.empty() || !resman->isDirectory(wallpaperFile)) + wallpaperFile = "login_wallpaper.png"; +} + bool wallpaperCompare(WallpaperData a, WallpaperData b) { int aa = a.width * a.height; @@ -57,7 +87,9 @@ void Wallpaper::loadWallpapers() { wallpaperData.clear(); - char **imgs = PHYSFS_enumerateFiles(WALLPAPER_FOLDER); + initDefaultWallpaperPaths(); + + char **imgs = PHYSFS_enumerateFiles(wallpaperPath.c_str()); for (char **i = imgs; *i != NULL; i++) { @@ -65,7 +97,7 @@ void Wallpaper::loadWallpapers() int height; // If the backup file is found, we tell it. - if (strncmp (*i, WALLPAPER_BASE, strlen(*i)) == 0) + if (strncmp (*i, wallpaperFile.c_str(), strlen(*i)) == 0) haveBackup = true; // If the image format is terminated by: "_<width>x<height>.png" @@ -86,7 +118,7 @@ void Wallpaper::loadWallpapers() if (sscanf(*i, filename.c_str(), &width, &height) == 2) { WallpaperData wp; - wp.filename = WALLPAPER_FOLDER; + wp.filename = wallpaperPath; wp.filename.append(*i); wp.width = width; wp.height = height; @@ -132,7 +164,7 @@ std::string Wallpaper::getWallpaper(int width, int height) // Return the backup file if everything else failed... if (haveBackup) - return std::string(WALLPAPER_FOLDER WALLPAPER_BASE); + return std::string(wallpaperPath + wallpaperFile); // Return an empty string if everything else failed return std::string(); diff --git a/src/resources/wallpaper.h b/src/resources/wallpaper.h index 8ecb8542..bb640d1e 100644 --- a/src/resources/wallpaper.h +++ b/src/resources/wallpaper.h @@ -37,7 +37,7 @@ class Wallpaper static void loadWallpapers(); /** - * Returns the larget wallpaper for the given resolution, or the + * Returns the largest wallpaper for the given resolution, or the * default wallpaper if none are found. * * @param width the desired width diff --git a/src/sound.cpp b/src/sound.cpp index 95860992..241e25e4 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -27,6 +27,8 @@ #include "resources/resourcemanager.h" #include "resources/soundeffect.h" +#include "configuration.h" + Sound::Sound(): mInstalled(false), mSfxVolume(100), @@ -149,7 +151,9 @@ static Mix_Music *loadMusic(const std::string &filename) // it to a temporary physical file so that SDL_mixer can stream it. logger->log("Loading music \"%s\" from temporary file tempMusic.ogg", path.c_str()); - bool success = resman->copyFile("music/" + filename, "tempMusic.ogg"); + bool success = resman->copyFile( + paths.getValue("music", "music/") + + filename, "tempMusic.ogg"); if (success) path = resman->getPath("tempMusic.ogg"); else @@ -235,7 +239,8 @@ void Sound::playSfx(const std::string &path) return; ResourceManager *resman = ResourceManager::getInstance(); - SoundEffect *sample = resman->getSoundEffect(path); + SoundEffect *sample = resman->getSoundEffect( + paths.getValue("sfx", "sfx/") + path); if (sample) { logger->log("Sound::playSfx() Playing: %s", path.c_str()); diff --git a/src/statuseffect.cpp b/src/statuseffect.cpp index 6ab0b8fa..1f913f4a 100644 --- a/src/statuseffect.cpp +++ b/src/statuseffect.cpp @@ -28,6 +28,8 @@ #include "utils/xml.h" +#include "configuration.h" + #include <map> #define STATUS_EFFECTS_FILE "status-effects.xml" @@ -68,7 +70,7 @@ AnimatedSprite *StatusEffect::getIcon() else { AnimatedSprite *sprite = AnimatedSprite::load( - "graphics/sprites/" + mIcon); + paths.getValue("sprites", "graphics/sprites/") + mIcon); if (false && sprite) { sprite->play(ACTION_DEFAULT); @@ -123,8 +125,7 @@ void StatusEffect::load() if (!rootNode || !xmlStrEqual(rootNode->name, BAD_CAST "status-effects")) { - logger->log("Error loading status effects file: " - STATUS_EFFECTS_FILE); + logger->log("Error loading status effects file: " STATUS_EFFECTS_FILE); return; } |