# HG changeset patch # User kasoroth # Date 1297828395 18000 # Node ID 423f01060523b23184d2083ddb1cdb84d1a23a98 # Parent 088d604f7ec358421bdd296f4c2e3c5cd8230ec1 Created generic functions for looking in mod then in main game for text files and lua scripts. diff -r 088d604f7ec3 -r 423f01060523 Aquaria/Continuity.cpp --- a/Aquaria/Continuity.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/Continuity.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -860,13 +860,7 @@ int num, use; float sz; std::ifstream in2; - - if (dsq->mod.isActive()) { - in2.open( (dsq->mod.getPath() + "data/treasures.txt").c_str() ); - if( !in2.is_open() ) in2.open("data/treasures.txt"); - } - else - in2.open("data/treasures.txt"); + dsq->openFile("data/treasures.txt",in2); while (std::getline(in2, line)) { @@ -891,7 +885,8 @@ /* int num; - std::ifstream in2("data/ingredientdescriptions.txt"); + std::ifstream in2; + dsq->openFile("data/ingredientdescriptions.txt",in2); while (std::getline(in2, line)) { IngredientDescription desc; @@ -904,7 +899,8 @@ ingredientData.clear(); recipes.clear(); - std::ifstream in("data/ingredients.txt"); + std::ifstream in; + dsq->openFile("data/ingredients.txt",in); int c = 0; @@ -1234,7 +1230,8 @@ { eats.clear(); - std::ifstream inf("data/eats.txt"); + std::ifstream inf; + dsq->openFile("data/eats.txt",inf); EatData curData; std::string read; @@ -1365,10 +1362,7 @@ if (song->script) { - if (dsq->mod.isActive()) - dsq->runScriptNum(dsq->mod.getPath() + "scripts/songs.lua", "castSong", num); - else - dsq->runScriptNum("songs.lua", "castSong", num); + dsq->runScriptNum("scripts/songs.lua", "castSong", num); } else { @@ -2168,7 +2162,8 @@ void Continuity::loadPetData() { petData.clear(); - std::ifstream in("data/pets.txt"); + std::ifstream in; + dsq->openFile("data/pets.txt",in); std::string read; while (std::getline(in, read)) { @@ -3279,7 +3274,8 @@ health = maxHealth; speedTypes.clear(); - std::ifstream inFile("data/speedtypes.txt"); + std::ifstream inFile; + dsq->openFile("data/speedtypes.txt",inFile); int n, spd; while (inFile >> n) { diff -r 088d604f7ec3 -r 423f01060523 Aquaria/DSQ.cpp --- a/Aquaria/DSQ.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/DSQ.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -363,7 +363,8 @@ void DSQ::loadElementEffects() { - std::ifstream inFile("data/elementeffects.txt"); + std::ifstream inFile; + openFile("data/elementeffects.txt",inFile); elementEffects.clear(); std::string line; while (std::getline(inFile, line)) @@ -3599,7 +3600,8 @@ if (user.audio.subtitles) { std::string fn = "scripts/vox/" + sound->lastVoice + ".txt"; - std::ifstream inf(fn.c_str()); + std::ifstream inf; + openFile(fn,inf); if (inf.is_open()) { std::string dia; @@ -3773,28 +3775,34 @@ bool DSQ::runScript(const std::string &name, const std::string &function) { - if (!scriptInterface.runScript(name, function)) + bool success = false; + if (mod.isActive()) success = scriptInterface.runScript(mod.getPath()+name, function); + if (!success) success = scriptInterface.runScript(name, function); + if (!success) debugLog("Could not find script file [" + name + "]"); + return success; +} + +bool DSQ::runScriptNum(const std::string &name, const std::string &func, float num) +{ + bool success = false; + if (mod.isActive()) success = scriptInterface.runScriptNum(mod.getPath()+name, func, num); + if (!success) success = scriptInterface.runScriptNum(name, func, num); + if (!success) debugLog("Could not find script file [" + name + "]"); + return success; +} + +// Attempt to open a file for reading. Look in mod folder (if any) first, then main game +bool DSQ::openFile(const std::string &filename, std::ifstream &filestream) { + if (mod.isActive()) { - debugLog("Could not find script file [" + name + "]"); + filestream.open( (mod.getPath() + filename).c_str() ); + if( !filestream.is_open() ) filestream.open( filename.c_str() ); } else { - return true; + filestream.open( filename.c_str() ); } - return false; -} - -bool DSQ::runScriptNum(const std::string &name, const std::string &func, float num) -{ - if (!scriptInterface.runScriptNum(name, func, num)) - { - debugLog("Could not find script file [" + name + "]"); - } - else - { - return true; - } - return false; + return filestream.is_open(); } void DSQ::onMouseInput() diff -r 088d604f7ec3 -r 423f01060523 Aquaria/DSQ.h --- a/Aquaria/DSQ.h Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/DSQ.h Tue Feb 15 22:53:15 2011 -0500 @@ -1330,6 +1330,7 @@ ScriptInterface scriptInterface; bool runScript(const std::string &name, const std::string &func=""); bool runScriptNum(const std::string &name, const std::string &func="", float num=0); + bool openFile(const std::string &filename, std::ifstream &filestream); void spawnParticleEffect(const std::string &name, Vector position, float rot=0, float t=0, int layer=LR_PARTICLES, float follow=0); diff -r 088d604f7ec3 -r 423f01060523 Aquaria/Emote.cpp --- a/Aquaria/Emote.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/Emote.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -31,7 +31,8 @@ void Emote::load(const std::string &file) { emotes.clear(); - std::ifstream in(file.c_str()); + std::ifstream in; + dsq->openFile(file,in); std::string line; while (std::getline(in, line)) diff -r 088d604f7ec3 -r 423f01060523 Aquaria/Game.cpp --- a/Aquaria/Game.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/Game.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -826,13 +826,7 @@ if (doubleClickTimer > 0) { doubleClickTimer = 0; - - if (dsq->mod.isActive()) { - if( !dsq->runScriptNum(dsq->mod.getPath() + "scripts/menu-treasures.lua", "useTreasure", flag) ) - dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", flag); - } - else - dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", flag); + dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", flag); } else { @@ -5298,7 +5292,8 @@ void Game::setWarpAreaSceneName(WarpArea &warpArea) { - std::ifstream in("data/warpAreas.txt"); + std::ifstream in; + dsq->openFile("data/warpAreas.txt",in); std::string color, area1, dir1, area2, dir2; std::string line; while (std::getline(in, line)) @@ -7228,12 +7223,7 @@ if (selectedTreasureFlag != -1) { - if (dsq->mod.isActive()) { - if( !dsq->runScriptNum(dsq->mod.getPath() + "scripts/menu-treasures.lua", "useTreasure", selectedTreasureFlag) ) - dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", selectedTreasureFlag); - } - else - dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", selectedTreasureFlag); + dsq->runScriptNum("scripts/global/menu-treasures.lua", "useTreasure", selectedTreasureFlag); } } @@ -7785,7 +7775,8 @@ void appendFileToString(std::string &string, const std::string &file) { - std::ifstream inf(file.c_str()); + std::ifstream inf; + dsq->openFile(file,inf); if (inf.is_open()) { diff -r 088d604f7ec3 -r 423f01060523 Aquaria/GameplayVariables.cpp --- a/Aquaria/GameplayVariables.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/GameplayVariables.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -24,7 +24,8 @@ void GameplayVariables::load() { - std::ifstream inFile("data/variables.txt"); + std::ifstream inFile; + dsq->openFile("data/variables.txt",inFile); if(!inFile) { core->messageBox("error", "Variables data not found! Aborting..."); diff -r 088d604f7ec3 -r 423f01060523 Aquaria/Mod.cpp --- a/Aquaria/Mod.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/Mod.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -189,9 +189,8 @@ // load the mod-init.lua file // which is in the root of the mod's folder // e.g. _mods/recachetest/ - std::string scriptPath = path + "mod-init.lua"; - debugLog("scriptPath: " + scriptPath); - if (!dsq->runScript(scriptPath, "init")) + debugLog("scriptPath: " + path + "mod-init.lua"); + if (!dsq->runScript("mod-init.lua", "init")) { debugLog("MOD: runscript failed"); dsq->continuity.reset(); diff -r 088d604f7ec3 -r 423f01060523 Aquaria/ScriptInterface.cpp --- a/Aquaria/ScriptInterface.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/ScriptInterface.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -8416,7 +8416,8 @@ void ScriptInterface::loadParticleEffectScripts() { //particleEffectScripts - std::ifstream in("scripts/particleEffects/ParticleEffects.txt"); + std::ifstream in; + dsq->openFile("scripts/particleEffects/ParticleEffects.txt",in); std::string line; while (std::getline(in, line)) { diff -r 088d604f7ec3 -r 423f01060523 Aquaria/StringBank.cpp --- a/Aquaria/StringBank.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/StringBank.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -30,13 +30,7 @@ stringMap.clear(); std::ifstream in; - - if (dsq->mod.isActive()) { - in.open( (dsq->mod.getPath() + file).c_str() ); - if( !in.is_open() ) in.open( file.c_str() ); - } - else - in.open( file.c_str() ); + dsq->openFile(file,in); std::string line; int idx; diff -r 088d604f7ec3 -r 423f01060523 Aquaria/WorldMapTiles.cpp --- a/Aquaria/WorldMapTiles.cpp Mon Feb 14 22:09:45 2011 -0500 +++ b/Aquaria/WorldMapTiles.cpp Tue Feb 15 22:53:15 2011 -0500 @@ -83,7 +83,8 @@ std::string line; - std::ifstream in(file.c_str()); + std::ifstream in; + dsq->openFile(file,in); while (std::getline(in, line)) {