From 5d907f5abeaf0b484e25b485230736327707ff81 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sun, 7 Nov 2010 09:26:29 +0000 Subject: [PATCH] Erwan - Added a possibility to put a file "Res.txt" instead of the folder "Res". The file Res.txt is a simple 1 line text file, telling where to find the Res folder, terminated by "/". For example: "../../wagic_res". This addresses issue 428 . This could also help us in the future, to develop mods. --- JGE/include/JFileSystem.h | 7 +++++ JGE/include/JGE.h | 1 - JGE/lib/win/jge.lib | Bin 2631718 -> 2631904 bytes JGE/src/JFileSystem.cpp | 11 ++++++++ JGE/src/JGfx.cpp | 6 +--- JGE/src/JSfx.cpp | 10 +++---- projects/mtg/include/GameOptions.h | 2 +- projects/mtg/include/Logger.h | 4 +-- projects/mtg/include/PrecompiledHeader.h | 1 + projects/mtg/include/StoryFlow.h | 2 +- projects/mtg/src/AIPlayer.cpp | 6 ++-- projects/mtg/src/Credits.cpp | 2 +- projects/mtg/src/GameApp.cpp | 34 ++++++++++++++++------- projects/mtg/src/GameOptions.cpp | 16 +++++------ projects/mtg/src/GameStateDeckViewer.cpp | 10 +++---- projects/mtg/src/GameStateDuel.cpp | 11 ++++---- projects/mtg/src/GameStateMenu.cpp | 18 ++++++------ projects/mtg/src/GameStateShop.cpp | 2 +- projects/mtg/src/GameStateStory.cpp | 2 +- projects/mtg/src/MTGDeck.cpp | 4 +-- projects/mtg/src/MTGPack.cpp | 6 ++-- projects/mtg/src/OptionItem.cpp | 12 ++++---- projects/mtg/src/Rules.cpp | 2 +- projects/mtg/src/StoryFlow.cpp | 2 +- projects/mtg/src/StyleManager.cpp | 2 +- projects/mtg/src/Tasks.cpp | 2 +- projects/mtg/src/TestSuiteAI.cpp | 6 ++-- projects/mtg/src/Translate.cpp | 10 +++---- projects/mtg/src/WDataSrc.cpp | 2 +- projects/mtg/src/WResourceManager.cpp | 12 ++++---- projects/mtg/src/utils.cpp | 4 +-- 31 files changed, 115 insertions(+), 94 deletions(-) diff --git a/JGE/include/JFileSystem.h b/JGE/include/JFileSystem.h index 3dbe494b9..17a91bd4c 100644 --- a/JGE/include/JFileSystem.h +++ b/JGE/include/JFileSystem.h @@ -11,6 +11,9 @@ #ifndef _FILE_SYSTEM_H_ #define _FILE_SYSTEM_H_ +#define JGE_GET_RES(filename) JFileSystem::GetInstance()->GetResourceFile(filename) +#define JGE_GET_RESPATH() JFileSystem::GetInstance()->GetResourceRoot() + #include #include #include @@ -109,6 +112,10 @@ public: /// ////////////////////////////////////////////////////////////////////////// void SetResourceRoot(const string& resourceRoot); + string GetResourceRoot(); + + // Returns a string prefixed with the resource path + string GetResourceFile(string filename); protected: JFileSystem(); diff --git a/JGE/include/JGE.h b/JGE/include/JGE.h index b354dd8df..a34956cb7 100644 --- a/JGE/include/JGE.h +++ b/JGE/include/JGE.h @@ -11,7 +11,6 @@ #ifndef _JGE_H_ #define _JGE_H_ - #include #include #include diff --git a/JGE/lib/win/jge.lib b/JGE/lib/win/jge.lib index 8550724e113f3dafd08c2bd82efef61b582f6d8f..e8bc0c0129157881775533d89576806e3921eb5e 100644 GIT binary patch delta 24519 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 @@ -108,12 +109,9 @@ void JSoundSystem::DestroySoundSystem() JMusic *JSoundSystem::LoadMusic(const char *fileName) { -#ifdef RESPATH - string s = RESPATH"/"; -#else - string s = "Res/"; -#endif - s.append(fileName); + + string s = JGE_GET_RES(fileName); + JMusic *music = new JMusic(); if (music) { diff --git a/projects/mtg/include/GameOptions.h b/projects/mtg/include/GameOptions.h index 39306422b..815e7384d 100644 --- a/projects/mtg/include/GameOptions.h +++ b/projects/mtg/include/GameOptions.h @@ -10,7 +10,7 @@ using std::string; #include "SimplePad.h" #include "GameApp.h" -#define GLOBAL_SETTINGS RESPATH"/settings/options.txt" +#define GLOBAL_SETTINGS "settings/options.txt" #define PLAYER_SAVEFILE "data.dat" #define PLAYER_SETTINGS "options.txt" #define PLAYER_COLLECTION "collection.dat" diff --git a/projects/mtg/include/Logger.h b/projects/mtg/include/Logger.h index 76d0c3093..b9a232ee1 100644 --- a/projects/mtg/include/Logger.h +++ b/projects/mtg/include/Logger.h @@ -2,10 +2,10 @@ #define _LOGGER_H_ //TODO Remove this and use the jge logging facility (same system) -//#define DOLOG +#define DOLOG #ifdef DOLOG -#define LOG_FILE RESPATH"/debug.txt" +#define LOG_FILE "debug.txt" class Logger{ public: diff --git a/projects/mtg/include/PrecompiledHeader.h b/projects/mtg/include/PrecompiledHeader.h index 330cbac45..2a556df9b 100644 --- a/projects/mtg/include/PrecompiledHeader.h +++ b/projects/mtg/include/PrecompiledHeader.h @@ -16,5 +16,6 @@ #include #include "JGE.h" +#include "JFileSystem.h" #endif //PRECOMPILEDHEADER_H \ No newline at end of file diff --git a/projects/mtg/include/StoryFlow.h b/projects/mtg/include/StoryFlow.h index 7192d2aba..3df63dd60 100644 --- a/projects/mtg/include/StoryFlow.h +++ b/projects/mtg/include/StoryFlow.h @@ -9,7 +9,7 @@ using namespace std; #include class GameObserver; class MTGDeck; -#define CAMPAIGNS_FOLDER "Res/campaigns/" +#define CAMPAIGNS_FOLDER "campaigns/" class StoryDialogElement:public JGuiObject { diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index f518be71d..98c825828 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -654,7 +654,7 @@ int AIPlayer::combatDamages(){ AIStats * AIPlayer::getStats(){ if (!stats){ char statFile[512]; - sprintf(statFile, RESPATH"/ai/baka/stats/%s.stats", opponent()->deckFileSmall.c_str()); + sprintf(statFile,JGE_GET_RES("ai/baka/stats/%s.stats").c_str(), opponent()->deckFileSmall.c_str()); stats = NEW AIStats(this, statFile); } return stats; @@ -677,7 +677,7 @@ AIPlayer * AIPlayerFactory::createAIPlayer(MTGAllCards * collection, Player * op while (found){ found = 0; char buffer[512]; - sprintf(buffer, RESPATH"/ai/baka/deck%i.txt",nbdecks+1); + sprintf(buffer, JGE_GET_RES("ai/baka/deck%i.txt").c_str(),nbdecks+1); std::ifstream file(buffer); if(file){ found = 1; @@ -688,7 +688,7 @@ AIPlayer * AIPlayerFactory::createAIPlayer(MTGAllCards * collection, Player * op if (!nbdecks) return NULL; deckid = 1 + WRand() % (nbdecks); } - sprintf(deckFile, RESPATH"/ai/baka/deck%i.txt",deckid); + sprintf(deckFile, JGE_GET_RES("ai/baka/deck%i.txt").c_str(),deckid); sprintf(avatarFile, "avatar%i.jpg",deckid); sprintf(deckFileSmall, "ai_baka_deck%i",deckid); } diff --git a/projects/mtg/src/Credits.cpp b/projects/mtg/src/Credits.cpp index 4656184f6..8ed1a2035 100644 --- a/projects/mtg/src/Credits.cpp +++ b/projects/mtg/src/Credits.cpp @@ -255,7 +255,7 @@ int Credits::isDifficultyUnlocked(){ found = 0; char buffer[512]; char aiSmallDeckName[512]; - sprintf(buffer, RESPATH"/ai/baka/deck%i.txt",nbAIDecks+1); + sprintf(buffer, JGE_GET_RES("ai/baka/deck%i.txt").c_str(),nbAIDecks+1); if(fileExists(buffer)){ found = 1; nbAIDecks++; diff --git a/projects/mtg/src/GameApp.cpp b/projects/mtg/src/GameApp.cpp index c114c6841..3d30e0248 100644 --- a/projects/mtg/src/GameApp.cpp +++ b/projects/mtg/src/GameApp.cpp @@ -90,6 +90,21 @@ void GameApp::Create() //_CrtSetBreakAlloc(368); LOG("starting Game"); + //Find the Res folder + std::ifstream mfile("Res.txt"); + string resPath; + if(mfile){ + if (std::getline(mfile, resPath)) { + if (resPath[resPath.size()-1] == '\r') resPath.erase(resPath.size()-1); //Handle DOS files + //TODO ERROR Handling if file does not exist + JFileSystem::GetInstance()->SetResourceRoot(trim(resPath)); + } + mfile.close(); + } + LOG("Res Root:"); + LOG(JFileSystem::GetInstance()->GetResourceRoot().c_str()); + + //Link this to our settings manager. options.theGame = this; @@ -99,16 +114,14 @@ void GameApp::Create() LOG("Checking for music files"); //Test for Music files presence - string filepath = RESPATH; - filepath = filepath + "/" + resources.musicFile("Track0.mp3"); + string filepath = JGE_GET_RES(resources.musicFile("Track0.mp3")); std::ifstream file(filepath.c_str()); if (file) file.close(); else HasMusic = 0; - filepath = RESPATH; - filepath = filepath + "/" + resources.musicFile("Track1.mp3"); + filepath = JGE_GET_RES(resources.musicFile("Track1.mp3")); std::ifstream file2(filepath.c_str()); if (file2) file2.close(); @@ -129,7 +142,8 @@ void GameApp::Create() manaIcons[Constants::MTG_COLOR_ARTIFACT] = resources.RetrieveQuad("menuicons.png", 2 + 6*36, 38, 32, 32, "c_artifact",RETRIEVE_MANAGE); - for (int i = sizeof(manaIcons)/sizeof(manaIcons[0]) - 1; i >= 0; --i) manaIcons[i]->SetHotSpot(16,16); + for (int i = sizeof(manaIcons)/sizeof(manaIcons[0]) - 1; i >= 0; --i) + if (manaIcons[i]) manaIcons[i]->SetHotSpot(16,16); LOG("--Loading back.jpg"); resources.RetrieveTexture("back.jpg",RETRIEVE_MANAGE); @@ -142,9 +156,9 @@ void GameApp::Create() LOG("--Loading particles.png"); resources.RetrieveTexture("particles.png",RETRIEVE_MANAGE); jq = resources.RetrieveQuad("particles.png", 0, 0, 32, 32, "particles",RETRIEVE_MANAGE); - jq->SetHotSpot(16,16); + if (jq) jq->SetHotSpot(16,16); jq = resources.RetrieveQuad("particles.png", 64, 0, 32, 32, "stars",RETRIEVE_MANAGE); - jq->SetHotSpot(16,16); + if (jq) jq->SetHotSpot(16,16); LOG("--Loading fonts"); string lang = options[Options::LANG].str; @@ -163,11 +177,11 @@ void GameApp::Create() resources.RetrieveTexture("shadow.png",RETRIEVE_MANAGE); jq = resources.RetrieveQuad("BattleIcon.png", 0, 0, 25, 25,"BattleIcon",RETRIEVE_MANAGE); - jq->SetHotSpot(12, 12); + if (jq) jq->SetHotSpot(12, 12); jq = resources.RetrieveQuad("DefenderIcon.png", 0, 0, 24, 23,"DefenderIcon",RETRIEVE_MANAGE); - jq->SetHotSpot(12, 12); + if (jq) jq->SetHotSpot(12, 12); jq = resources.RetrieveQuad("shadow.png", 0, 0, 16, 16,"shadow",RETRIEVE_MANAGE); - jq->SetHotSpot(8, 8); + if (jq) jq->SetHotSpot(8, 8); jq = resources.RetrieveQuad("phasebar.png",0,0,0,0,"phasebar",RETRIEVE_MANAGE); LOG("Init Collection"); diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index ecc603582..e2e00ac3c 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -498,7 +498,7 @@ int GameSettings::save(){ if(profileOptions){ //Force our directories to exist. - MAKEDIR(RESPATH"/profiles"); + MAKEDIR(JGE_GET_RES("profiles").c_str()); string temp = profileFile("","",false,false); MAKEDIR(temp.c_str()); temp+="/stats"; @@ -521,11 +521,11 @@ string GameSettings::profileFile(string filename, string fallback,bool sanity, b if(!(*this)[Options::ACTIVE_PROFILE].isDefault()) { //No file, return root of profile directory if(filename == ""){ - sprintf(buf,"%sprofiles/%s",( relative ? "" : RESPATH"/" ),profile.c_str()); + sprintf(buf,"%sprofiles/%s",( relative ? "" : JGE_GET_RES("").c_str() ),profile.c_str()); return buf; } //Return file - sprintf(buf,RESPATH"/profiles/%s/%s",profile.c_str(),filename.c_str()); + sprintf(buf,JGE_GET_RES("profiles/%s/%s").c_str(),profile.c_str(),filename.c_str()); if(fileExists(buf)){ if(relative) sprintf(buf,"profiles/%s/%s",profile.c_str(),filename.c_str()); @@ -534,13 +534,13 @@ string GameSettings::profileFile(string filename, string fallback,bool sanity, b } else{ //Use the default directory. - sprintf(buf,"%splayer%s%s",(relative ? "" : RESPATH"/"),(filename == "" ? "" : "/"), filename.c_str()); + sprintf(buf,"%splayer%s%s",(relative ? "" :JGE_GET_RES("").c_str()),(filename == "" ? "" : "/"), filename.c_str()); return buf; } //Don't fallback if sanity checking is disabled.. if(!sanity){ - sprintf(buf,"%sprofiles/%s%s%s",(relative ? "" : RESPATH"/"),profile.c_str(),(filename == "" ? "" : "/"), filename.c_str()); + sprintf(buf,"%sprofiles/%s%s%s",(relative ? "" : JGE_GET_RES("").c_str()),profile.c_str(),(filename == "" ? "" : "/"), filename.c_str()); return buf; } @@ -548,7 +548,7 @@ string GameSettings::profileFile(string filename, string fallback,bool sanity, b if(fallback == "") return ""; - sprintf(buf,"%s%s%s%s",(relative ? "" : RESPATH"/"),fallback.c_str(),(filename == "" ? "" : "/"), filename.c_str()); + sprintf(buf,"%s%s%s%s",(relative ? "" : JGE_GET_RES("").c_str()),fallback.c_str(),(filename == "" ? "" : "/"), filename.c_str()); return buf; } @@ -561,7 +561,7 @@ void GameSettings::reloadProfile(bool images){ void GameSettings::checkProfile(){ if(!globalOptions) - globalOptions = NEW GameOptions(GLOBAL_SETTINGS); + globalOptions = NEW GameOptions(JGE_GET_RES(GLOBAL_SETTINGS)); //If it doesn't exist, load current profile. if(!profileOptions){ @@ -589,7 +589,7 @@ void GameSettings::checkProfile(){ //Make the proper directories if(profileOptions){ //Force our directories to exist. - MAKEDIR(RESPATH"/profiles"); + MAKEDIR(JGE_GET_RES("profiles").c_str()); string temp = profileFile("","",false,false); MAKEDIR(temp.c_str()); temp+="/stats"; diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 330bd8a1b..8e12dae31 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -214,7 +214,7 @@ void GameStateDeckViewer::Start() lastPos = 0; lastTotal = 0; - pricelist = NEW PriceList(RESPATH"/settings/prices.dat",mParent->collection); + pricelist = NEW PriceList(JGE_GET_RES("settings/prices.dat").c_str(),mParent->collection); playerdata = NEW PlayerData(mParent->collection); myCollection = NEW DeckDataWrapper(playerdata->collection); myCollection->Sort(WSrcCards::SORT_ALPHA); @@ -306,7 +306,7 @@ void GameStateDeckViewer::saveDeck(){ void GameStateDeckViewer::saveAsAIDeck( string deckName ) { DeckManager * deckManager = DeckManager::GetInstance(); - vector aiDecks = GameState::getValidDeckMetaData( RESPATH"/ai/baka", "ai_baka", NULL); + vector aiDecks = GameState::getValidDeckMetaData( JGE_GET_RES("ai/baka"), "ai_baka", NULL); int nbAiDecks = aiDecks.size() + 1; aiDecks.clear(); @@ -320,8 +320,8 @@ void GameStateDeckViewer::saveAsAIDeck( string deckName ) else oss << myDeck->parent->meta_desc; string deckDesc = oss.str(); - string filepath = RESPATH; - filepath.append("/ai/baka/").append( defaultAiDeckName ).append( ".txt" ); + string filepath = JGE_GET_RES("ai/baka/"); + filepath.append( defaultAiDeckName ).append( ".txt" ); DebugTrace("saving AI deck " << filepath); myDeck->save( filepath, true, deckName, deckDesc); } @@ -1503,7 +1503,7 @@ int GameStateDeckViewer::loadDeck(int deckid){ found = 0; char buffer[512]; char smallDeckName[512]; - sprintf(buffer, "%s/deck%i.txt",RESPATH"/ai/baka",nbDecks+1); + sprintf(buffer, "%s/deck%i.txt",JGE_GET_RES("ai/baka").c_str(),nbDecks+1); if(fileExists(buffer)){ MTGDeck * mtgd = NEW MTGDeck(buffer,NULL,1); found = 1; diff --git a/projects/mtg/src/GameStateDuel.cpp b/projects/mtg/src/GameStateDuel.cpp index 0c488020c..ca4d0dd08 100644 --- a/projects/mtg/src/GameStateDuel.cpp +++ b/projects/mtg/src/GameStateDuel.cpp @@ -81,7 +81,7 @@ void GameStateDuel::Start() #ifdef TESTSUITE SAFE_DELETE(testSuite); - testSuite = NEW TestSuite(RESPATH"/test/_tests.txt",mParent->collection); + testSuite = NEW TestSuite(JGE_GET_RES("test/_tests.txt").c_str(),mParent->collection); #endif mGamePhase = DUEL_STATE_CHOOSE_DECK1; @@ -126,7 +126,7 @@ void GameStateDuel::Start() else deckmenu->Add( MENUITEM_NEW_DECK, "Create your Deck!", "Highly recommended to get\nthe full Wagic experience!"); premadeDeck = true; - fillDeckMenu(deckmenu,RESPATH"/player/premade"); + fillDeckMenu(deckmenu,JGE_GET_RES("player/premade")); } deckmenu->Add( MENUITEM_NEW_DECK, "New Deck...", "Create a new deck to play with."); deckmenu->Add( MENUITEM_CANCEL, "Main Menu", "Return to Main Menu"); @@ -143,7 +143,7 @@ void GameStateDuel::loadPlayer(int playerId, int decknb, int isAI){ if (!isAI) { //Human Player char deckFile[255]; if(premadeDeck) - sprintf(deckFile, RESPATH"/player/premade/deck%i.txt",decknb); + sprintf(deckFile, JGE_GET_RES("player/premade/deck%i.txt").c_str(),decknb); else sprintf(deckFile, "%s/deck%i.txt",options.profileFile().c_str(), decknb); char deckFileSmall[255]; @@ -226,8 +226,7 @@ void GameStateDuel::End() //TODO Move This to utils or ResourceManager. Don't we have more generic functions that can do that? bool GameStateDuel::MusicExist(string FileName){ - string filepath = RESPATH; - filepath = filepath + "/" + resources.musicFile(FileName); + string filepath = JGE_GET_RES(resources.musicFile(FileName)); std::ifstream file(filepath.c_str()); if (file) { file.close(); @@ -244,7 +243,7 @@ void GameStateDuel::ensureOpponentMenu(){ if (options[Options::EVILTWIN_MODE_UNLOCKED].number) opponentMenu->Add( MENUITEM_EVIL_TWIN, "Evil Twin", _("Can you play against yourself?").c_str()); DeckManager * deckManager = DeckManager::GetInstance(); - vector opponentDeckList = fillDeckMenu( opponentMenu, RESPATH"/ai/baka", "ai_baka", mPlayers[0]); + vector opponentDeckList = fillDeckMenu( opponentMenu, JGE_GET_RES("ai/baka"), "ai_baka", mPlayers[0]); deckManager->updateMetaDataList(&opponentDeckList, true); opponentMenu->Add( MENUITEM_CANCEL, "Cancel", _("Choose a different player deck").c_str()); opponentDeckList.clear(); diff --git a/projects/mtg/src/GameStateMenu.cpp b/projects/mtg/src/GameStateMenu.cpp index fe4c22c32..d3e1d821f 100644 --- a/projects/mtg/src/GameStateMenu.cpp +++ b/projects/mtg/src/GameStateMenu.cpp @@ -103,7 +103,7 @@ void GameStateMenu::Create() for (int j=0;j<2;j++){ sprintf(buf,"menuicons%d%d",i,j); mIcons[n] = resources.RetrieveQuad("menuicons.png", 2 + i * 36.0f, 2.0f + j * 36.0f, 32.0f, 32.0f, buf); - mIcons[n]->SetHotSpot(16,16); + if(mIcons[n]) mIcons[n]->SetHotSpot(16,16); n++; } } @@ -112,7 +112,7 @@ void GameStateMenu::Create() bool langChosen = false; string lang = options[Options::LANG].str; if (lang.size()){ - lang = "Res/lang/" + lang + ".txt"; + lang = JGE_GET_RES("lang/") + lang + ".txt"; if (fileExists(lang.c_str())) langChosen = true; } if (!langChosen){ @@ -155,7 +155,7 @@ void GameStateMenu::Start(){ bgTexture = resources.RetrieveTexture("menutitle.png", RETRIEVE_LOCK); mBg = resources.RetrieveQuad("menutitle.png", 0, 0, 256, 166); // Create background quad for rendering. - mBg->SetHotSpot(128,50); + if (mBg) mBg->SetHotSpot(128,50); if (MENU_STATE_MAJOR_MAINMENU == currentState) currentState = currentState | MENU_STATE_MINOR_FADEIN; @@ -286,7 +286,7 @@ string GameStateMenu::loadRandomWallpaper() { return wallpaper; vector wallpapers; - std::ifstream file("Res/graphics/wallpapers.txt"); + std::ifstream file(JGE_GET_RES("graphics/wallpapers.txt").c_str()); if (!file) return wallpaper; @@ -322,11 +322,11 @@ void GameStateMenu::loadLangMenu(){ if (!subMenuController) return; resetDirectory(); if (!mDip){ - mDip = opendir("Res/lang"); + mDip = opendir(JGE_GET_RES("lang").c_str()); } while ((mDit = readdir(mDip))){ - string filename = "Res/lang/"; + string filename = JGE_GET_RES("lang/"); filename += mDit->d_name; std::ifstream file(filename.c_str()); string s; @@ -352,11 +352,11 @@ void GameStateMenu::listPrimitives(){ LOG("GameStateMenu::listPrimitives"); resetDirectory(); if (!mDip){ - mDip = opendir("Res/sets/primitives/"); + mDip = opendir(JGE_GET_RES("sets/primitives/").c_str()); } while ((mDit = readdir(mDip))){ - string filename = "Res/sets/primitives/"; + string filename = JGE_GET_RES("sets/primitives/"); filename += mDit->d_name; std::ifstream file(filename.c_str()); if(!file) continue; @@ -414,7 +414,7 @@ void GameStateMenu::Update(float dt) }else{ mReadConf = 1; } - if (!nextDirectory(RESPATH"/sets/","_cards.dat")){ + if (!nextDirectory(JGE_GET_RES("sets/").c_str(),"_cards.dat")){ //Remove temporary translations Translator::GetInstance()->tempValues.clear(); diff --git a/projects/mtg/src/GameStateShop.cpp b/projects/mtg/src/GameStateShop.cpp index aa3cf64b3..49a34e993 100644 --- a/projects/mtg/src/GameStateShop.cpp +++ b/projects/mtg/src/GameStateShop.cpp @@ -79,7 +79,7 @@ void GameStateShop::Start(){ MTGAllCards * ac = GameApp::collection; playerdata = NEW PlayerData(ac); myCollection = NEW DeckDataWrapper(playerdata->collection); - pricelist = NEW PriceList(RESPATH"/settings/prices.dat",ac); + pricelist = NEW PriceList(JGE_GET_RES("settings/prices.dat").c_str(),ac); for(int i=0;i::iterator it; for ( it=cards.begin() ; it != cards.end(); it++ ){ int nb = it->second; @@ -932,7 +932,7 @@ MTGSetInfo::MTGSetInfo(string _id) { counts[i] = 0; char myFilename[4096]; - sprintf(myFilename, RESPATH"/sets/%s/booster.txt", id.c_str()); + sprintf(myFilename, JGE_GET_RES("sets/%s/booster.txt").c_str(), id.c_str()); mPack = NEW MTGPack(myFilename); if(!mPack->isValid()){ SAFE_DELETE(mPack); diff --git a/projects/mtg/src/MTGPack.cpp b/projects/mtg/src/MTGPack.cpp index dd365d4aa..0cd1d4dd9 100644 --- a/projects/mtg/src/MTGPack.cpp +++ b/projects/mtg/src/MTGPack.cpp @@ -220,13 +220,13 @@ MTGPack * MTGPacks::randomPack(int key){ return packs[key%s]; } void MTGPacks::loadAll(){ - DIR *mDip = opendir(RESPATH"/packs/"); + DIR *mDip = opendir(JGE_GET_RES("packs/").c_str()); struct dirent *mDit; if(!mDip) return; while ((mDit = readdir(mDip))){ char myFilename[4096]; - sprintf(myFilename, RESPATH"/packs/%s", mDit->d_name); + sprintf(myFilename, JGE_GET_RES("packs/%s").c_str(), mDit->d_name); if(mDit->d_name[0] == '.') continue; if(!strcmp(mDit->d_name,"default_booster.txt")) continue; MTGPack * p = NEW MTGPack(myFilename); @@ -276,7 +276,7 @@ bool MTGPack::isUnlocked(){ MTGPack * MTGPacks::getDefault(){ if(!defaultBooster.isValid()){ - defaultBooster.load(RESPATH"/packs/default_booster.txt"); + defaultBooster.load(JGE_GET_RES("packs/default_booster.txt")); defaultBooster.unlockStatus = 1; if(!defaultBooster.isValid()){ MTGPackSlot * ps = NEW MTGPackSlot(); ps->copies = 1; diff --git a/projects/mtg/src/OptionItem.cpp b/projects/mtg/src/OptionItem.cpp index c2de5266b..ece1e7bb6 100644 --- a/projects/mtg/src/OptionItem.cpp +++ b/projects/mtg/src/OptionItem.cpp @@ -94,7 +94,7 @@ void OptionSelect::addSelection(string s){ //OptionProfile const string OptionProfile::DIRTESTER = "collection.dat"; -OptionProfile::OptionProfile(GameApp * _app, JGuiListener * jgl) : OptionDirectory(RESPATH"/profiles", Options::ACTIVE_PROFILE, "Profile", DIRTESTER){ +OptionProfile::OptionProfile(GameApp * _app, JGuiListener * jgl) : OptionDirectory(JGE_GET_RES("profiles"), Options::ACTIVE_PROFILE, "Profile", DIRTESTER){ app = _app; listener = jgl; height=60; @@ -271,10 +271,10 @@ void OptionLanguage::Reload(){ struct dirent *mDit; DIR *mDip; - mDip = opendir("Res/lang"); + mDip = opendir(JGE_GET_RES("lang").c_str()); while ((mDit = readdir(mDip))){ - string filename = "Res/lang/"; + string filename = JGE_GET_RES("lang/"); filename += mDit->d_name; std::ifstream file(filename.c_str()); string s; @@ -368,7 +368,7 @@ OptionDirectory::OptionDirectory(string root, int id, string displayValue, strin } const string OptionTheme::DIRTESTER = "preview.png"; -OptionTheme::OptionTheme(OptionThemeStyle * style) : OptionDirectory(RESPATH"/themes", Options::ACTIVE_THEME, "Current Theme", DIRTESTER){ +OptionTheme::OptionTheme(OptionThemeStyle * style) : OptionDirectory(JGE_GET_RES("themes"), Options::ACTIVE_THEME, "Current Theme", DIRTESTER){ addSelection("Default"); sort(selections.begin(),selections.end()); initSelections(); @@ -402,9 +402,9 @@ void OptionTheme::Render(){ author = ""; bChecked = true; if(selections[value] == "Default") - sprintf(buf,RESPATH"/graphics/themeinfo.txt"); + sprintf(buf,JGE_GET_RES("graphics/themeinfo.txt").c_str()); else - sprintf(buf,RESPATH"/themes/%s/themeinfo.txt",selections[value].c_str()); + sprintf(buf,JGE_GET_RES("themes/%s/themeinfo.txt").c_str(),selections[value].c_str()); std::ifstream file(buf); if(file){ string temp; diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index 3b67f7a86..47318618b 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -383,7 +383,7 @@ int Rules::load(string _filename){ if (fileExists(_filename.c_str())){ sprintf(filename, "%s", _filename.c_str()); }else{ - sprintf(filename, RESPATH"/rules/%s", _filename.c_str()); + sprintf(filename, JGE_GET_RES("rules/%s").c_str(), _filename.c_str()); } std::ifstream file(filename); std::string s; diff --git a/projects/mtg/src/StoryFlow.cpp b/projects/mtg/src/StoryFlow.cpp index c17379699..44d3e80aa 100644 --- a/projects/mtg/src/StoryFlow.cpp +++ b/projects/mtg/src/StoryFlow.cpp @@ -269,7 +269,7 @@ void StoryDuel::init(){ Player * players[2]; char folder[255], deckFile[255],deckFileSmall[255]; - sprintf(folder, CAMPAIGNS_FOLDER"%s/%s" ,mParent->folder.c_str(), pageId.c_str()); + sprintf(folder, JGE_GET_RES(CAMPAIGNS_FOLDER"%s/%s").c_str() ,mParent->folder.c_str(), pageId.c_str()); sprintf(deckFile, "%s/deck.txt", folder); MTGDeck * tempDeck = NEW MTGDeck(deckFile, GameApp::collection); diff --git a/projects/mtg/src/StyleManager.cpp b/projects/mtg/src/StyleManager.cpp index fc6cf4d5c..797b9417d 100644 --- a/projects/mtg/src/StyleManager.cpp +++ b/projects/mtg/src/StyleManager.cpp @@ -40,7 +40,7 @@ string WStyle::stylized(string filename){ void StyleManager::loadRules(){ killRules(); //TODO Placeholder until XML format available. - string filename = RESPATH"/" + resources.graphicsFile("style.txt"); + string filename = JGE_GET_RES(resources.graphicsFile("style.txt")); TiXmlDocument xmlfile(filename.c_str()); if(!xmlfile.LoadFile()) return; diff --git a/projects/mtg/src/Tasks.cpp b/projects/mtg/src/Tasks.cpp index d8280b199..ac71b1239 100644 --- a/projects/mtg/src/Tasks.cpp +++ b/projects/mtg/src/Tasks.cpp @@ -165,7 +165,7 @@ void Task::loadAIDeckNames() { while (found){ found = 0; char buffer[512]; - sprintf(buffer, "%s/deck%i.txt",RESPATH"/ai/baka",nbDecks + 1); + sprintf(buffer, "%s/deck%i.txt",JGE_GET_RES("ai/baka").c_str(),nbDecks + 1); if(fileExists(buffer)){ found = 1; diff --git a/projects/mtg/src/TestSuiteAI.cpp b/projects/mtg/src/TestSuiteAI.cpp index d046780b1..8d40639b3 100644 --- a/projects/mtg/src/TestSuiteAI.cpp +++ b/projects/mtg/src/TestSuiteAI.cpp @@ -316,7 +316,7 @@ void TestSuite::initGame(){ DebugTrace("TESTUITE Init Game Done !"); } int TestSuite::Log(const char * text){ - ofstream file (RESPATH"/test/results.html",ios_base::app); + ofstream file (JGE_GET_RES("test/results.html").c_str(),ios_base::app); if (file){ file << text; file << "\n"; @@ -429,7 +429,7 @@ TestSuite::TestSuite(const char * filename,MTGAllCards* _collection){ file.close(); } - ofstream file2 (RESPATH"/test/results.html"); + ofstream file2 (JGE_GET_RES("/test/results.html").c_str()); if (file2){ file2 << ""; #ifdef WIN32 @@ -496,7 +496,7 @@ int TestSuite::load(const char * _filename){ forceAbility = false; gameType = GAME_TYPE_CLASSIC; char filename[4096]; - sprintf(filename, RESPATH"/test/%s", _filename); + sprintf(filename, JGE_GET_RES("/test/%s").c_str(), _filename); std::ifstream file(filename); std::string s; loadRandValues(""); diff --git a/projects/mtg/src/Translate.cpp b/projects/mtg/src/Translate.cpp index 56b2cc5d5..fa3fa59cd 100644 --- a/projects/mtg/src/Translate.cpp +++ b/projects/mtg/src/Translate.cpp @@ -37,7 +37,7 @@ string Translator::translate(string value){ Translator::~Translator(){ #if defined DEBUG_TRANSLATE if (!checkMisses) return; - std::ofstream file("Res/lang/missing.txt"); + std::ofstream file(JGE_GET_RES("lang/missing.txt").c_str()); char writer[4096]; if (file){ map::iterator it; @@ -78,7 +78,7 @@ void Translator::load(string filename, map * dictionary) { #if defined DEBUG_TRANSLATE if (!checkMisses) return; - std::ifstream file2("Res/lang/dontcare.txt"); + std::ifstream file2(JGE_GET_RES("lang/dontcare.txt").c_str()); if(file2){ string s; @@ -98,14 +98,14 @@ void Translator::load(string filename, map * dictionary) { void Translator::initCards(){ string lang = options[Options::LANG].str; if (!lang.size()) return; - string cards_dict = "Res/lang/" + lang + "_cards.txt"; + string cards_dict = JGE_GET_RES("lang/") + lang + "_cards.txt"; load(cards_dict,&tempValues); } void Translator::initDecks(){ string lang = options[Options::LANG].str; if (!lang.size()) return; - string decks_dict = "Res/lang/" + lang + "_decks.txt"; + string decks_dict = JGE_GET_RES("lang/") + lang + "_decks.txt"; // Load file std::ifstream file(decks_dict.c_str()); @@ -136,7 +136,7 @@ void Translator::init() { #endif string lang = options[Options::LANG].str; if (!lang.size()) return; - string name = "Res/lang/" + lang + ".txt"; + string name = JGE_GET_RES("lang/") + lang + ".txt"; if (fileExists(name.c_str())){ // fixup for Chinese language support. diff --git a/projects/mtg/src/WDataSrc.cpp b/projects/mtg/src/WDataSrc.cpp index 11f8375df..fa6d8ccaf 100644 --- a/projects/mtg/src/WDataSrc.cpp +++ b/projects/mtg/src/WDataSrc.cpp @@ -489,7 +489,7 @@ int WSrcDeck::getCount(int count){ } int WSrcDeck::totalPrice(){ int total = 0; - PriceList * pricelist = NEW PriceList(RESPATH"/settings/prices.dat",GameApp::collection); + PriceList * pricelist = NEW PriceList(JGE_GET_RES("settings/prices.dat").c_str(),GameApp::collection); map::iterator it; for ( it=copies.begin() ; it != copies.end(); it++ ){ int nb = it->second; diff --git a/projects/mtg/src/WResourceManager.cpp b/projects/mtg/src/WResourceManager.cpp index ce3af67bc..e461a5fb9 100644 --- a/projects/mtg/src/WResourceManager.cpp +++ b/projects/mtg/src/WResourceManager.cpp @@ -683,7 +683,7 @@ string WResourceManager::cardFile(const string filename){ if(set.size()){ char zipname[512]; - sprintf(zipname, "Res/themes/%s/sets/%s/%s.zip", theme.c_str(), set.c_str(),set.c_str()); + sprintf(zipname, JGE_GET_RES("themes/%s/sets/%s/%s.zip").c_str(), theme.c_str(), set.c_str(),set.c_str()); if (fs->AttachZipFile(zipname)) return filename.substr(i+1); } @@ -718,7 +718,7 @@ string WResourceManager::cardFile(const string filename){ if(set.size()){ char zipname[512]; - sprintf(zipname, "Res/sets/%s/%s.zip", set.c_str(),set.c_str()); + sprintf(zipname, JGE_GET_RES("sets/%s/%s.zip").c_str(), set.c_str(),set.c_str()); if (fs->AttachZipFile(zipname)) return filename.substr(i+1); } @@ -808,13 +808,13 @@ int WResourceManager::dirOK(string dirname){ char fname[512]; #if defined (WIN32) - sprintf(fname,RESPATH"/%s",dirname.c_str()); + sprintf(fname,JGE_GET_RES(dirname).c_str()); struct _stat statBuffer; return (_stat(fname, &statBuffer) >= 0 && // make sure it exists statBuffer.st_mode & S_IFDIR); // and it's not a file #else - sprintf(fname,RESPATH"/%s",dirname.c_str()); + sprintf(fname,JGE_GET_RES(dirname).c_str()); struct stat st; if(stat(fname,&st) == 0) return 1; @@ -824,11 +824,9 @@ char fname[512]; int WResourceManager::fileOK(string filename, bool relative){ - char fname[512]; std::ifstream * fp = NULL; if(relative){ - sprintf(fname,RESPATH"/%s",filename.c_str()); - fp = NEW std::ifstream(fname); + fp = NEW std::ifstream(JGE_GET_RES(filename).c_str()); } else fp = NEW std::ifstream(filename.c_str()); diff --git a/projects/mtg/src/utils.cpp b/projects/mtg/src/utils.cpp index 707cd8cc0..628ee744a 100644 --- a/projects/mtg/src/utils.cpp +++ b/projects/mtg/src/utils.cpp @@ -64,9 +64,7 @@ if(fichier){ return 1; } -char alternateFilename[512]; -sprintf(alternateFilename, RESPATH"/%s",filename); - std::ifstream fichier2(alternateFilename); +std::ifstream fichier2(JGE_GET_RES(filename).c_str()); if(fichier2){ fichier2.close(); return 1;