- fix for issue 772
- fixed some issues in zstream that prevented to use "getline" in zipped streams - added a "pooled buffers" system to keep a cache of file descriptors. This is potentially dangerous though, but shaves several seconds of loading time on the PSP. If problems arise on other platforms I'll make it a compilation parameter - gracefully fail when calling manacost information on a not properly initialized mana cost
This commit is contained in:
@@ -126,6 +126,7 @@ void GameApp::Create()
|
||||
LOG("init Res Folder at " + foldersRoot);
|
||||
JFileSystem::init(foldersRoot + "User/", foldersRoot + systemFolder);
|
||||
|
||||
|
||||
// Create User Folders (for write access) if they don't exist
|
||||
{
|
||||
const char* folders[] = { "ai", "ai/baka", "ai/baka/stats", "campaigns", "graphics", "lang", "packs", "player", "player/stats", "profiles", "rules", "sets", "settings", "sound", "sound/sfx", "themes", "test"};
|
||||
@@ -160,6 +161,13 @@ void GameApp::Create()
|
||||
//Test for Music files presence
|
||||
JFileSystem * jfs = JFileSystem::GetInstance();
|
||||
HasMusic = jfs->FileExists(WResourceManager::Instance()->musicFile("Track0.mp3")) && jfs->FileExists(WResourceManager::Instance()->musicFile("Track1.mp3"));
|
||||
|
||||
LOG("Init Collection");
|
||||
MTGAllCards::loadInstance();
|
||||
|
||||
LOG("Loading rules");
|
||||
Rules::loadAllRules();
|
||||
|
||||
|
||||
LOG("Loading Textures");
|
||||
LOG("--Loading menuicons.png");
|
||||
@@ -235,8 +243,6 @@ void GameApp::Create()
|
||||
jq = WResourceManager::Instance()->RetrieveQuad("phasebar.png", 0, 0, 0, 0, "phasebar", RETRIEVE_MANAGE);
|
||||
|
||||
|
||||
LOG("Init Collection");
|
||||
MTGAllCards::loadInstance();
|
||||
|
||||
LOG("Creating Game States");
|
||||
mGameStates[GAME_STATE_DECK_VIEWER] = NEW GameStateDeckViewer(this);
|
||||
@@ -265,9 +271,6 @@ void GameApp::Create()
|
||||
mCurrentState = NULL;
|
||||
mNextState = mGameStates[GAME_STATE_MENU];
|
||||
|
||||
LOG("--Load Game rules");
|
||||
Rules::loadAllRules();
|
||||
|
||||
//Set Audio volume
|
||||
JSoundSystem::GetInstance()->SetSfxVolume(options[Options::SFXVOLUME].number);
|
||||
JSoundSystem::GetInstance()->SetMusicVolume(options[Options::MUSICVOLUME].number);
|
||||
|
||||
@@ -1750,17 +1750,33 @@ void GameObserver::createPlayer(const string& playerMode
|
||||
#ifdef TESTSUITE
|
||||
void GameObserver::loadTestSuitePlayer(int playerId, TestSuiteGame* testSuite)
|
||||
{
|
||||
players.push_back(new TestSuiteAI(testSuite, playerId));
|
||||
loadPlayer(playerId, new TestSuiteAI(testSuite, playerId));
|
||||
}
|
||||
#endif //TESTSUITE
|
||||
|
||||
void GameObserver::loadPlayer(int playerId, Player* player)
|
||||
{
|
||||
players.push_back(player);
|
||||
//Because we're using a vector instead of an array (why?),
|
||||
// we have to prepare the vector in order to be the right size to accomodate the playerId variable
|
||||
// see http://code.google.com/p/wagic/issues/detail?id=772
|
||||
if (players.size() > (size_t) playerId) {
|
||||
SAFE_DELETE(players[playerId]);
|
||||
players[playerId] = NULL;
|
||||
} else {
|
||||
while (players.size() <= (size_t) playerId)
|
||||
{
|
||||
players.push_back(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
players[playerId] = player;
|
||||
}
|
||||
|
||||
void GameObserver::loadPlayer(int playerId, PlayerType playerType, int decknb, bool premadeDeck)
|
||||
{
|
||||
|
||||
|
||||
|
||||
if (decknb)
|
||||
{
|
||||
if (playerType == PLAYER_TYPE_HUMAN)
|
||||
@@ -1774,7 +1790,8 @@ void GameObserver::loadPlayer(int playerId, PlayerType playerType, int decknb, b
|
||||
sprintf(deckFile, "%s/deck%i.txt", options.profileFile().c_str(), decknb);
|
||||
char deckFileSmall[255];
|
||||
sprintf(deckFileSmall, "player_deck%i", decknb);
|
||||
players.push_back(NEW HumanPlayer(this, deckFile, deckFileSmall, premadeDeck));
|
||||
|
||||
loadPlayer(playerId, NEW HumanPlayer(this, deckFile, deckFileSmall, premadeDeck));
|
||||
#ifdef NETWORK_SUPPORT
|
||||
// FIXME, this is broken
|
||||
if(isNetwork)
|
||||
@@ -1785,7 +1802,7 @@ void GameObserver::loadPlayer(int playerId, PlayerType playerType, int decknb, b
|
||||
}
|
||||
else
|
||||
{ //Remote player
|
||||
mPlayers.push_back(NEW RemotePlayer(mParent->mpNetwork));
|
||||
loadPlayer(playerId, NEW RemotePlayer(mParent->mpNetwork));
|
||||
#endif //NETWORK_SUPPORT
|
||||
}
|
||||
}
|
||||
@@ -1794,7 +1811,8 @@ void GameObserver::loadPlayer(int playerId, PlayerType playerType, int decknb, b
|
||||
AIPlayerFactory playerCreator;
|
||||
Player * opponent = NULL;
|
||||
if (playerId == 1) opponent = players[0];
|
||||
players.push_back(playerCreator.createAIPlayer(this, MTGCollection(), opponent, decknb));
|
||||
|
||||
loadPlayer(playerId, playerCreator.createAIPlayer(this, MTGCollection(), opponent, decknb));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1809,11 +1827,11 @@ void GameObserver::loadPlayer(int playerId, PlayerType playerType, int decknb, b
|
||||
if (playerId == 1) opponent = players[0];
|
||||
#ifdef AI_CHANGE_TESTING
|
||||
if (playerType == PLAYER_TYPE_CPU_TEST)
|
||||
players.push_back(playerCreator.createAIPlayerTest(this, MTGCollection(), opponent, playerId == 0 ? "ai/bakaA/" : "ai/bakaB/"));
|
||||
loadPlayer(playerId, playerCreator.createAIPlayerTest(this, MTGCollection(), opponent, playerId == 0 ? "ai/bakaA/" : "ai/bakaB/"));
|
||||
else
|
||||
#endif
|
||||
{
|
||||
players.push_back(playerCreator.createAIPlayer(this, MTGCollection(), opponent));
|
||||
loadPlayer(playerId, playerCreator.createAIPlayer(this, MTGCollection(), opponent));
|
||||
}
|
||||
|
||||
if (playerType == PLAYER_TYPE_CPU_TEST)
|
||||
|
||||
@@ -394,11 +394,9 @@ void GameStateMenu::listPrimitives()
|
||||
{
|
||||
string filename = "sets/primitives/";
|
||||
filename.append(primitiveFiles[i]);
|
||||
izfstream file;
|
||||
if (! JFileSystem::GetInstance()->openForRead(file, filename))
|
||||
continue;
|
||||
|
||||
file.close();
|
||||
if (! JFileSystem::GetInstance()->FileExists(filename))
|
||||
continue;
|
||||
primitives.push_back(filename);
|
||||
}
|
||||
primitivesLoadCounter = 0;
|
||||
|
||||
@@ -330,18 +330,20 @@ int MTGAllCards::load(const char * config_file, const char * set_name, int autol
|
||||
|
||||
int lineNumber = 0;
|
||||
std::string contents;
|
||||
if (!JFileSystem::GetInstance()->readIntoString(config_file, contents))
|
||||
izfstream file;
|
||||
if (!JFileSystem::GetInstance()->openForRead(file, config_file))
|
||||
return total_cards;
|
||||
std::stringstream stream(contents);
|
||||
|
||||
string s;
|
||||
|
||||
while (true)
|
||||
while (getline(file,s))
|
||||
{
|
||||
if (!std::getline(stream, s)) return total_cards;
|
||||
lineNumber++;
|
||||
if (!s.size()) continue;
|
||||
if (s[s.size() - 1] == '\r') s.erase(s.size() - 1); // Handle DOS files
|
||||
if (s[s.size() - 1] == '\r')
|
||||
s.erase(s.size() - 1); //Handle DOS files
|
||||
if (!s.size()) continue;
|
||||
|
||||
if (s.find("#AUTO_DEFINE ") == 0)
|
||||
{
|
||||
string toAdd = s.substr(13);
|
||||
@@ -374,6 +376,7 @@ int MTGAllCards::load(const char * config_file, const char * set_name, int autol
|
||||
if (!maxGrade) maxGrade = Constants::GRADE_BORDERLINE; //Default setting for grade is borderline?
|
||||
if (fileGrade > maxGrade)
|
||||
{
|
||||
file.close();
|
||||
return total_cards;
|
||||
}
|
||||
}
|
||||
@@ -405,6 +408,7 @@ int MTGAllCards::load(const char * config_file, const char * set_name, int autol
|
||||
continue;
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
return total_cards;
|
||||
}
|
||||
|
||||
|
||||
@@ -351,11 +351,23 @@ ManaCost::~ManaCost()
|
||||
|
||||
void ManaCost::x()
|
||||
{
|
||||
if (cost.size() <= (size_t)Constants::NB_Colors)
|
||||
{
|
||||
DebugTrace("Seems ManaCost was not properly initialized");
|
||||
return;
|
||||
}
|
||||
|
||||
cost[Constants::NB_Colors] = 1;
|
||||
}
|
||||
|
||||
int ManaCost::hasX()
|
||||
{
|
||||
if (cost.size() <= (size_t)Constants::NB_Colors)
|
||||
{
|
||||
DebugTrace("Seems ManaCost was not properly initialized");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return cost[Constants::NB_Colors];
|
||||
}
|
||||
|
||||
@@ -465,6 +477,11 @@ void ManaCost::copy(ManaCost * _manaCost)
|
||||
|
||||
int ManaCost::getCost(int color)
|
||||
{
|
||||
if (cost.size() <= (size_t)color)
|
||||
{
|
||||
DebugTrace("Seems ManaCost was not properly initialized");
|
||||
return 0;
|
||||
}
|
||||
return cost[color];
|
||||
}
|
||||
|
||||
@@ -477,7 +494,7 @@ ManaCostHybrid * ManaCost::getHybridCost(unsigned int i)
|
||||
|
||||
int ManaCost::hasColor(int color)
|
||||
{
|
||||
if (cost[color])
|
||||
if (getCost(color))
|
||||
return 1;
|
||||
for (size_t i = 0; i < hybrids.size(); i++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user