void GameApp::Create() { srand((unsigned int) time(0)); // initialize random #if !defined(QT_CONFIG) && !defined(IOS) #if defined (WIN32) _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #elif defined (PSP) pspFpuSetEnable(0); //disable FPU Exceptions until we find where the FPU errors come from pspDebugScreenPrintf("Wagic:Loading resources..."); #endif #endif //QT_CONFIG //_CrtSetBreakAlloc(368); LOG("starting Game"); string systemFolder = "Res/"; string foldersRoot = ""; //Find the Res folder ifstream mfile("Res.txt"); string resPath; if (mfile) { bool found = false; while (!found && std::getline(mfile, resPath)) { if (resPath[resPath.size() - 1] == '\r') resPath.erase(resPath.size() - 1); //Handle DOS files string testfile = resPath + systemFolder; testfile.append("graphics/simon.dat"); ifstream tempfile(testfile.c_str()); if (tempfile) { found = true; tempfile.close(); foldersRoot = resPath; } } mfile.close(); } 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"}; for (size_t i = 0; i < sizeof(folders)/sizeof(folders[0]); ++i) { JFileSystem::GetInstance()->MakeDir(string(folders[i])); } } LOG("Loading Modrules"); //Load Mod Rules before everything else gModRules.load("rules/modrules.xml"); LOG("Loading Unlockables"); //Load awards (needs to be loaded before any option are accessed) Unlockable::load(); //Link this to our settings manager. options.theGame = this; //Ensure that options are partially loaded before loading files. LOG("options.reloadProfile()"); options.reloadProfile(); //Setup Cache before calling any gfx/sfx functions WResourceManager::Instance()->ResetCacheLimits(); LOG("Checking for music files"); //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::getInstance(); LOG("Loading rules"); Rules::loadAllRules(); LOG("Loading Textures"); LOG("--Loading menuicons.png"); WResourceManager::Instance()->RetrieveTexture("menuicons.png", RETRIEVE_MANAGE); #if !defined (PSP) WResourceManager::Instance()->RetrieveTexture("miconslarge.png", RETRIEVE_MANAGE); #endif LOG("---Gettings menuicons.png quads"); //Load all icons from gModRules and save in manaIcons -> todo. Change the icons positions on menuicons.png to avoid use item->mColorId vector<ModRulesBackGroundCardGuiItem *>items = gModRules.cardgui.background; for(size_t i= 0; i < items.size(); i ++) { ModRulesBackGroundCardGuiItem * item = items[i]; if (item->mMenuIcon == 1) { manaIcons.push_back(WResourceManager::Instance()->RetrieveQuad("menuicons.png", 2 + (float)item->mColorId * 36, 38, 32, 32, "c_" + item->MColorName, RETRIEVE_MANAGE)); Constants::MTGColorStrings.push_back(item->MColorName.c_str()); } } Constants::NB_Colors = (int)Constants::MTGColorStrings.size(); items.erase(items.begin(),items.end()); for (int i = manaIcons.size()-1; i >= 0; --i) if (manaIcons[i].get()) manaIcons[i]->SetHotSpot(16, 16); LOG("--Loading back.jpg"); WResourceManager::Instance()->RetrieveTexture("back.jpg", RETRIEVE_MANAGE); JQuadPtr jq = WResourceManager::Instance()->RetrieveQuad("back.jpg", 0, 0, 0, 0, kGenericCardID, RETRIEVE_MANAGE); if (jq.get()) jq->SetHotSpot(jq->mWidth / 2, jq->mHeight / 2); WResourceManager::Instance()->RetrieveTexture("back_thumb.jpg", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveQuad("back_thumb.jpg", 0, 0, MTG_MINIIMAGE_WIDTH, MTG_MINIIMAGE_HEIGHT, kGenericCardThumbnailID, RETRIEVE_MANAGE); LOG("--Loading particles.png"); WResourceManager::Instance()->RetrieveTexture("particles.png", RETRIEVE_MANAGE); jq = WResourceManager::Instance()->RetrieveQuad("particles.png", 0, 0, 32, 32, "particles", RETRIEVE_MANAGE); if (jq) jq->SetHotSpot(16, 16); jq = WResourceManager::Instance()->RetrieveQuad("particles.png", 64, 0, 32, 32, "stars", RETRIEVE_MANAGE); if (jq) jq->SetHotSpot(16, 16); LOG("--Loading fonts"); string lang = options[Options::LANG].str; std::transform(lang.begin(), lang.end(), lang.begin(), ::tolower); WResourceManager::Instance()->InitFonts(lang); Translator::GetInstance()->init(); // The translator is ready now. LOG("--Loading various textures"); // Load in this function only textures that are used frequently throughout the game. These textures will constantly stay in Ram, so be frugal WResourceManager::Instance()->RetrieveTexture("phasebar.png", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("wood.png", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("gold.png", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("goldglow.png", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("backdrop.jpg", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("handback.png", RETRIEVE_MANAGE); WResourceManager::Instance()->RetrieveTexture("shadows.png", RETRIEVE_MANAGE); jq = WResourceManager::Instance()->RetrieveQuad("shadows.png", 2, 2, 16, 16, "white", RETRIEVE_MANAGE); if (jq) jq->SetHotSpot(8, 8); jq = WResourceManager::Instance()->RetrieveQuad("shadows.png", 20, 2, 16, 16, "shadow", RETRIEVE_MANAGE); if (jq) jq->SetHotSpot(8, 8); jq = WResourceManager::Instance()->RetrieveQuad("shadows.png", 38, 2, 16, 16, "extracostshadow", RETRIEVE_MANAGE); if (jq) jq->SetHotSpot(8, 8); jq = WResourceManager::Instance()->RetrieveQuad("phasebar.png", 0, 0, 0, 0, "phasebar", RETRIEVE_MANAGE); LOG("Creating Game States"); mGameStates[GAME_STATE_DECK_VIEWER] = NEW GameStateDeckViewer(this); mGameStates[GAME_STATE_DECK_VIEWER]->Create(); mGameStates[GAME_STATE_MENU] = NEW GameStateMenu(this); mGameStates[GAME_STATE_MENU]->Create(); mGameStates[GAME_STATE_DUEL] = NEW GameStateDuel(this); mGameStates[GAME_STATE_DUEL]->Create(); mGameStates[GAME_STATE_SHOP] = NEW GameStateShop(this); mGameStates[GAME_STATE_SHOP]->Create(); mGameStates[GAME_STATE_OPTIONS] = NEW GameStateOptions(this); mGameStates[GAME_STATE_OPTIONS]->Create(); mGameStates[GAME_STATE_AWARDS] = NEW GameStateAwards(this); mGameStates[GAME_STATE_AWARDS]->Create(); mGameStates[GAME_STATE_STORY] = NEW GameStateStory(this); mGameStates[GAME_STATE_STORY]->Create(); mGameStates[GAME_STATE_TRANSITION] = NULL; mCurrentState = NULL; mNextState = mGameStates[GAME_STATE_MENU]; //Set Audio volume JSoundSystem::GetInstance()->SetSfxVolume(options[Options::SFXVOLUME].number); JSoundSystem::GetInstance()->SetMusicVolume(options[Options::MUSICVOLUME].number); DebugTrace("size of MTGCardInstance: " << sizeof(MTGCardInstance)); DebugTrace("size of MTGCard: "<< sizeof(MTGCard)); DebugTrace("size of CardPrimitive: "<< sizeof(CardPrimitive)); DebugTrace("size of ExtraCost: " << sizeof(ExtraCost)); DebugTrace("size of ManaCost: " << sizeof(ManaCost)); LOG("Game Creation Done."); }