LevelData FileFormats::OpenLevelFile(QString filePath) { QFile file(filePath); LevelData data; if (!file.open(QIODevice::ReadOnly)) { #ifndef PGE_ENGINE QMessageBox::critical(NULL, QTranslator::tr("File open error"), QTranslator::tr("Can't open the file."), QMessageBox::Ok); #endif data.ReadFileValid = false; return data; } QTextStream in(&file); //Read File QFileInfo in_1(filePath); if(in_1.suffix().toLower() == "lvl") { //Read SMBX LVL File in.setAutoDetectUnicode(true); in.setLocale(QLocale::system()); in.setCodec(QTextCodec::codecForLocale()); data = ReadSMBX64LvlFile( in.readAll(), filePath ); } else { //Read PGE LVLX File in.setCodec("UTF-8"); data = ReadExtendedLvlFile( in.readAll(), filePath ); } return data; }
int main () { // create a read/write string-stream object on tiny char // and attach it to an ostringstream object std::ostringstream out_1 (std::ios::in | std::ios::out); // tie the istream object to the ostringstream object std::istream in_1 (out_1.rdbuf ()); // output to out_1 out_1 << "Here is the first ouput"; // create a string object on tiny char std::string string_ex = "L'heure est grave!"; // open a read only stringstream object and initialize it std::istringstream in_2 (string_ex); // output in_1 to the standard output std::cout << in_1.rdbuf () << std::endl; // reposition in_1 at the beginning in_1.seekg (0); // output in_2 to the standard output std::cout << in_2.rdbuf () << std::endl; // reposition in_2 at the beginning in_2.seekg (0); // get the current put position (equivalent to out_1.tellp ()) std::stringbuf::pos_type pos = out_1.rdbuf ()->pubseekoff (0, std::ios::cur, std::ios::out); // append the content of the stringbuf pointed to by in_2 // to the one pointed at by out_1 out_1 << ' ' << in_2.rdbuf (); // output in_1 to the standard output std::cout << in_1.rdbuf () << std::endl; // position the get sequence (equivalent to in_1.seekg (pos)) in_1.rdbuf ()->pubseekpos (pos, std::ios::in); // output "L'heure est grave!" std::cout << in_1.rdbuf () << std::endl; return 0; }
void MainWindow::OpenFile(QString FilePath, bool addToRecentList) { if(m_isFileReloading) return; m_isFileReloading = true; BoolReseter rst(&m_isFileReloading); Q_UNUSED(rst); if(!m_isAppInited) return; qApp->setActiveWindow(this); //Check if data configs are valid if( configs.check() ) { LogCritical(QString("Error! *.INI configs not loaded")); QMessageBox::warning(this, tr("Configuration is loaded with errors"), tr("Cannot open file:\n" "Configuration package loaded with errors.") .arg(ConfStatus::configPath)); //Show configuration status window on_actionCurConfig_triggered(); return; } QMdiSubWindow *newSubWin = NULL; QMdiSubWindow *existing = findOpenedFileWin(FilePath); if (existing) { ui->centralWidget->setActiveSubWindow(existing); return; } QFile file(FilePath); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file: %1").arg(file.errorString()), QMessageBox::Ok); return; } QFileInfo in_1(FilePath); GlobalSettings::openPath = in_1.absoluteDir().absolutePath(); if((in_1.suffix().toLower() == "lvl")||(in_1.suffix().toLower() == "lvlx")) { LevelData FileData; LogDebug("> parsing level file format"); if( !FileFormats::OpenLevelFile(FilePath, FileData) ) { formatErrorMsgBox(FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata); return; } LogDebug("File was read!"); FileData.meta.filename = util::getBaseFilename(in_1.fileName()); FileData.meta.path = in_1.absoluteDir().absolutePath(); FileData.playmusic = GlobalSettings::autoPlayMusic; file.close(); LogDebug("Creating of sub-window"); LevelEdit *child = createLvlChild(&newSubWin); if ( child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts) ) { child->show(); updateMenus(newSubWin, true); child->updateGeometry(); child->ResetPosition(); dock_LvlItemBox->setLvlItemBoxes(false, false); statusBar()->showMessage(tr("Level file loaded"), 2000); SetCurrentLevelSection(0); dock_LvlWarpProps->init(); dock_LvlLayers->setLayersBox(); if(GlobalSettings::autoPlayMusic) ui->actionPlayMusic->setChecked(true); on_actionPlayMusic_triggered(ui->actionPlayMusic->isChecked()); } else { LogDebug(">>File loading aborted"); //child->show(); child->LvlData.meta.modified = false; newSubWin->close(); LogDebug(">>Windows closed"); } } else if((in_1.suffix().toLower() == "wld")||(in_1.suffix().toLower() == "wldx")) { WorldData FileData; if( !FileFormats::OpenWorldFile( FilePath, FileData ) ) { formatErrorMsgBox(FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata); return; } file.close(); WorldEdit *child = createWldChild(&newSubWin); if ( child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts) ) { child->show(); updateMenus(newSubWin, true); child->updateGeometry(); child->ResetPosition(); dock_WldItemBox->setWldItemBoxes(false, false); dock_WldSettingsBox->setCurrentWorldSettings(); if(FileData.HubStyledWorld) { dock_WldSettingsBox->setVisible(true); dock_WldSettingsBox->raise(); } statusBar()->showMessage(tr("World map file loaded"), 2000); } else { LogDebug(">>File loading aborted"); child->close(); newSubWin->close(); LogDebug(">>Windows closed"); } } else if(in_1.suffix().toLower() == "txt") { NPCConfigFile FileData; if( !FileFormats::ReadNpcTXTFileF(FilePath, FileData) ) { QMessageBox::critical(this, QObject::tr("File open error"), tr("Can't read the file"), QMessageBox::Ok); return; } if( !FileData.unknownLines.isEmpty() ) { QMessageBox::warning(this, QObject::tr("Unknown values are presented"), QObject::tr("Your file have an unknown values which will be removed\n" " when you will save file") + QString("\n====================================\n" "%1").arg(FileData.unknownLines), QMessageBox::Ok); } NpcEdit *child = createNPCChild(&newSubWin); if (child->loadFile(FilePath, FileData)) { statusBar()->showMessage(tr("NPC Config loaded"), 2000); child->show(); updateMenus(newSubWin, true); } else { child->close(); newSubWin->close(); } } else if(in_1.suffix().toLower() == "sav") { GamesaveData FileData; QString statistics; if(!FileFormats::ReadSMBX64SavFileF( FilePath, FileData)) { formatErrorMsgBox( FilePath, FileData.meta.ERROR_info, FileData.meta.ERROR_linenum, FileData.meta.ERROR_linedata ); return; } statistics+= QString("SMBX Game Save file version %1\n\n").arg(FileData.meta.RecentFormatVersion); if(FileData.gameCompleted) statistics+= " ====This game was completed====\n\n"; statistics+= QString("Lives: %1, Coins:%2, ").arg(FileData.lives).arg(FileData.coins); statistics+= QString("Total stars: %1, Gotten stars: %2\n") .arg(FileData.totalStars) .arg(FileData.gottenStars.size()); statistics+= QString("Position X=%1, Y=%2\n") .arg(FileData.worldPosX) .arg(FileData.worldPosY); if(FileData.musicID>0) { long item=configs.getMusWldI(FileData.musicID); if(item>=0) { statistics+= QString("Current music: %1\n\n").arg(configs.main_music_wld[item].name); } } statistics += "\n===========Players:============\n"; for(int i=0; i<FileData.characterStates.size();i++) { if(i<configs.main_characters.size()) statistics += QString("%1:\n").arg(configs.main_characters[i].name); else statistics += QString("<unknown character>:\n"); statistics += QString("Health: %1, ").arg(FileData.characterStates[i].health); statistics += QString("Power-UP: %1, ").arg(FileData.characterStates[i].state); switch(FileData.characterStates[i].mountType) { case 0: break; case 1: statistics += QString("Mounted vehicle: Shoe - "); switch(FileData.characterStates[i].mountID) { case 1: statistics += QString("Kuribo's (green)");break; case 2: statistics += QString("Podoboo's (red)");break; case 3: statistics += QString("Lakitu's (blue)");break; default: statistics += QString("of God Power :D");break; } break; case 3: statistics += QString("Mounted vehicle: Yoshi");break; default: statistics += QString("Mounted vehicle: <unknown>");break; } if( (FileData.characterStates[i].itemID>0) && configs.main_npc.contains(FileData.characterStates[i].itemID) ) { statistics += QString("%2Has item: %1") .arg(configs.main_npc[FileData.characterStates[i].itemID].setup.name) .arg(FileData.characterStates[i].mountType > 0 ? ", ":""); } if(i<FileData.characterStates.size()-1) statistics += "\n----------------------------\n"; } statistics += "\n=========================\n"; if( !FileData.meta.ReadFileValid ) return; QMessageBox::information(this, tr("Game save statistics"), statistics, QMessageBox::Ok); } else { QMessageBox::warning(this, tr("Bad file"), tr("This file have unknown extension"), QMessageBox::Ok); return; } // Add to recent fileList if(addToRecentList){ AddToRecentFiles(FilePath); SyncRecentFiles(); } }
void MainWindow::OpenFile(QString FilePath, bool addToRecentList) { if(_is_reloading) return; _is_reloading=true; BoolReseter rst(&_is_reloading); Q_UNUSED(rst); if(!continueLoad) return; qApp->setActiveWindow(this); //Check if data configs are valid if( configs.check() ) { WriteToLog(QtCriticalMsg, QString("Error! *.INI configs not loaded")); QMessageBox::warning(this, tr("Configuration is loaded with errors"), tr("Cannot open file:\nConfiguration package loaded with errors.").arg(ConfStatus::configPath)); //Show configuration status window on_actionCurConfig_triggered(); return; } QMdiSubWindow *existing = findOpenedFileWin(FilePath); if (existing) { ui->centralWidget->setActiveSubWindow(existing); return; } QFile file(FilePath); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); return; } QFileInfo in_1(FilePath); GlobalSettings::openPath = in_1.absoluteDir().absolutePath(); if((in_1.suffix().toLower() == "lvl")||(in_1.suffix().toLower() == "lvlx")) { LevelData FileData; WriteToLog(QtDebugMsg, "> parsing level file format"); FileData = FileFormats::OpenLevelFile(FilePath); if( !FileData.ReadFileValid ) return; WriteToLog(QtDebugMsg, "File was read!"); FileData.filename = in_1.baseName(); FileData.path = in_1.absoluteDir().absolutePath(); FileData.playmusic = GlobalSettings::autoPlayMusic; file.close(); WriteToLog(QtDebugMsg, "> Opem meta-file"); file.setFileName(FilePath+".meta"); if(QFileInfo(FilePath+".meta").exists()) { WriteToLog(QtDebugMsg, "> meta-file found, open them!"); if (file.open(QIODevice::ReadOnly)) { QString metaRaw; QTextStream meta(&file); meta.setCodec("UTF-8"); metaRaw = meta.readAll(); if(FileData.metaData.script != NULL) { delete FileData.metaData.script; FileData.metaData.script = NULL; } FileData.metaData = FileFormats::ReadNonSMBX64MetaData(metaRaw, FilePath+".meta"); WriteToLog(QtDebugMsg, "Meta-File was read!"); } else { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); } } WriteToLog(QtDebugMsg, "Creating of sub-window"); LevelEdit *child = createLvlChild(); if ( (bool)(child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts)) ) { child->show(); child->updateGeometry(); child->ResetPosition(); statusBar()->showMessage(tr("Level file loaded"), 2000); updateMenus(true); SetCurrentLevelSection(0); dock_LvlWarpProps->init(); dock_LvlLayers->setLayersBox(); if(GlobalSettings::autoPlayMusic) ui->actionPlayMusic->setChecked(true); on_actionPlayMusic_triggered(ui->actionPlayMusic->isChecked()); } else { WriteToLog(QtDebugMsg, ">>File loading aborted"); child->show(); if(activeChildWindow()==1) activeLvlEditWin()->LvlData.modified = false; ui->centralWidget->activeSubWindow()->close(); WriteToLog(QtDebugMsg, ">>Windows closed"); } } else if((in_1.suffix().toLower() == "wld")||(in_1.suffix().toLower() == "wldx")) { WorldData FileData; FileData= FileFormats::OpenWorldFile(FilePath); if( !FileData.ReadFileValid ) return; file.close(); file.setFileName(FilePath+".meta"); if(QFileInfo(FilePath+".meta").exists()) { if (file.open(QIODevice::ReadOnly)) { QString metaRaw; QTextStream meta(&file); meta.setCodec("UTF-8"); metaRaw = meta.readAll(); FileData.metaData = FileFormats::ReadNonSMBX64MetaData(metaRaw, FilePath+".meta"); } else { QMessageBox::critical(this, tr("File open error"), tr("Can't open the file."), QMessageBox::Ok); } } WorldEdit *child = createWldChild(); if ( (bool)(child->loadFile(FilePath, FileData, configs, GlobalSettings::LvlOpts)) ) { child->show(); child->updateGeometry(); child->ResetPosition(); updateMenus(true); dock_WldSettingsBox->setCurrentWorldSettings(); if(FileData.HubStyledWorld) { dock_WldSettingsBox->setVisible(true); dock_WldSettingsBox->raise(); } statusBar()->showMessage(tr("World map file loaded"), 2000); } else { child->close(); } //QMessageBox::information(this, tr("Dummy"), //tr("Sorry, the World Maps support is not inplemented in this version."), //QMessageBox::Ok); } else if(in_1.suffix().toLower() == "txt") { NPCConfigFile FileData = FileFormats::ReadNpcTXTFile(file); if( !FileData.ReadFileValid ) return; NpcEdit *child = createNPCChild(); if (child->loadFile(FilePath, FileData)) { statusBar()->showMessage(tr("NPC Config loaded"), 2000); child->show(); updateMenus(true); } else { child->close(); } } else if(in_1.suffix().toLower() == "sav") { GamesaveData FileData; QTextStream in(&file); //Read File in.setAutoDetectUnicode(true); in.setLocale(QLocale::system()); in.setCodec(QTextCodec::codecForLocale()); QString statistics; FileData = FileFormats::ReadSMBX64SavFile( in.readAll(), file.fileName() ); statistics+= QString("SMBX Game Save file version %1\n\n").arg(FileData.version); if(FileData.gameCompleted) statistics+= " ====This game was completed====\n\n"; statistics+= QString("Lives: %1, Coins:%2, ").arg(FileData.lives).arg(FileData.coins); statistics+= QString("Total stars: %1, Gotten stars: %2\n") .arg(FileData.totalStars) .arg(FileData.gottenStars.size()); statistics+= QString("Position X=%1, Y=%2\n") .arg(FileData.worldPosX) .arg(FileData.worldPosY); if(FileData.musicID>0) { long item=configs.getMusWldI(FileData.musicID); if(item>=0) { statistics+= QString("Current music: %1\n\n").arg(configs.main_music_wld[item].name); } } statistics += "\n===========Players:============\n"; for(int i=0; i<FileData.characterStates.size();i++) { if(i<configs.characters.size()) statistics += QString("%1:\n").arg(configs.characters[i].name); else statistics += QString("<unknown character>:\n"); statistics += QString("Health: %1, ").arg(FileData.characterStates[i].health); statistics += QString("Power-UP: %1, ").arg(FileData.characterStates[i].state); switch(FileData.characterStates[i].mountType) { case 0: break; case 1: statistics += QString("Mounted transport: Shoe - "); switch(FileData.characterStates[i].mountID) { case 1: statistics += QString("Kuribo's (green)");break; case 2: statistics += QString("Podoboo's (red)");break; case 3: statistics += QString("Lakitu's (blue)");break; default: statistics += QString("of God Power :D");break; } break; case 3: statistics += QString("Mounted transport: Yoshi");break; default: statistics += QString("Mounted transport: <unknown>");break; } if(FileData.characterStates[i].itemID>0) { int item= configs.getNpcI(FileData.characterStates[i].itemID); if(item>=0) { statistics += QString("%2Has item: %1").arg(configs.main_npc[item].name) .arg(FileData.characterStates[i].mountType>0?", ":""); } } if(i<FileData.characterStates.size()-1) statistics += "\n----------------------------\n"; } statistics += "\n=========================\n"; if( !FileData.ReadFileValid ) return; QMessageBox::information(this, tr("Game save statistics"), statistics, QMessageBox::Ok); } else { QMessageBox::warning(this, tr("Bad file"), tr("This file have unknown extension"), QMessageBox::Ok); return; } // Add to recent fileList if(addToRecentList){ AddToRecentFiles(FilePath); SyncRecentFiles(); } }
WorldData FileFormats::ReadSMBX64WldFile(QString RawData, QString filePath) { FileStringList in; in.addData( RawData ); int str_count=0; //Line Counter int file_format=0; //File format number QString line; //Current Line data WorldData FileData = dummyWldDataArray(); //Add path data if(!filePath.isEmpty()) { QFileInfo in_1(filePath); FileData.filename = in_1.baseName(); FileData.path = in_1.absoluteDir().absolutePath(); } FileData.untitled = false; FileData.modified = false; //Enable strict mode for SMBX WLD file format FileData.smbx64strict = true; WorldTiles tile; WorldScenery scen; WorldPaths pathitem; WorldLevels lvlitem; WorldMusic musicbox; str_count++;line = in.readLine(); //Read first Line if( SMBX64::Int(line) ) //File format number goto badfile; else file_format=line.toInt(); str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Episode name goto badfile; else FileData.EpisodeTitle = removeQuotes(line); if(file_format >= 55) { str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Edisode without Mario goto badfile; else FileData.nocharacter1 = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Edisode without Luigi goto badfile; else FileData.nocharacter2 = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Edisode without Peach goto badfile; else FileData.nocharacter3 = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Edisode without Toad goto badfile; else FileData.nocharacter4 = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Edisode without Link goto badfile; else FileData.nocharacter5 = SMBX64::wBoolR(line); //Convert into the bool array FileData.nocharacter<< FileData.nocharacter1<< FileData.nocharacter2<< FileData.nocharacter3<< FileData.nocharacter4<< FileData.nocharacter5; } if(file_format >= 10) { str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Autostart level goto badfile; else FileData.IntroLevel_file = removeQuotes(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Don't use world map on this episode goto badfile; else FileData.HubStyledWorld = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if( SMBX64::wBool(line) ) //Restart level on playable character's death goto badfile; else FileData.restartlevel = SMBX64::wBoolR(line); } if(file_format >= 20) { str_count++;line = in.readLine(); if( SMBX64::Int(line) ) //Stars quantity goto badfile; else FileData.stars = line.toInt(); } if(file_format >= 10) { str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Author 1 goto badfile; else FileData.author1 = removeQuotes(line); str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Author 2 goto badfile; else FileData.author2 = removeQuotes(line); str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Author 3 goto badfile; else FileData.author3 = removeQuotes(line); str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Author 4 goto badfile; else FileData.author4 = removeQuotes(line); str_count++;line = in.readLine(); if( SMBX64::qStr(line) ) //Author 5 goto badfile; else FileData.author5 = removeQuotes(line); FileData.authors.clear(); FileData.authors += (FileData.author1.isEmpty())? "" : FileData.author1+"\n"; FileData.authors += (FileData.author2.isEmpty())? "" : FileData.author2+"\n"; FileData.authors += (FileData.author3.isEmpty())? "" : FileData.author3+"\n"; FileData.authors += (FileData.author4.isEmpty())? "" : FileData.author4+"\n"; FileData.authors += (FileData.author5.isEmpty())? "" : FileData.author5; } ////////////Tiles Data////////// str_count++;line = in.readLine(); while(line!="\"next\"") { tile = dummyWldTile(); if(SMBX64::sInt(line)) //Tile x goto badfile; else tile.x = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Tile y goto badfile; else tile.y = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::Int(line)) //Tile ID goto badfile; else tile.id = line.toInt(); tile.array_id = FileData.tile_array_id; FileData.tile_array_id++; tile.index = FileData.tiles.size(); //Apply element index FileData.tiles.push_back(tile); str_count++;line = in.readLine(); } ////////////Scenery Data////////// str_count++;line = in.readLine(); while(line!="\"next\"") { scen = dummyWldScen(); if(SMBX64::sInt(line)) //Scenery x goto badfile; else scen.x = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Scenery y goto badfile; else scen.y = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::Int(line)) //Scenery ID goto badfile; else scen.id = line.toInt(); scen.array_id = FileData.scene_array_id; FileData.scene_array_id++; scen.index = FileData.scenery.size(); //Apply element index FileData.scenery.push_back(scen); str_count++;line = in.readLine(); } ////////////Paths Data////////// str_count++;line = in.readLine(); while(line!="\"next\"") { pathitem = dummyWldPath(); if(SMBX64::sInt(line)) //Path x goto badfile; else pathitem.x = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Path y goto badfile; else pathitem.y = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::Int(line)) //Path ID goto badfile; else pathitem.id = line.toInt(); pathitem.array_id = FileData.path_array_id; FileData.path_array_id++; pathitem.index = FileData.paths.size(); //Apply element index FileData.paths.push_back(pathitem); str_count++;line = in.readLine(); } ////////////LevelBox Data////////// str_count++;line = in.readLine(); while(line!="\"next\"") { lvlitem = dummyWldLevel(); if(SMBX64::sInt(line)) //Level x goto badfile; else lvlitem.x = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Level y goto badfile; else lvlitem.y = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::Int(line)) //Level ID goto badfile; else lvlitem.id = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::qStr(line)) //Level file goto badfile; else lvlitem.lvlfile = removeQuotes(line); str_count++;line = in.readLine(); if(SMBX64::qStr(line)) //Level title goto badfile; else lvlitem.title = removeQuotes(line); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Top exit goto badfile; else lvlitem.top_exit = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Left exit goto badfile; else lvlitem.left_exit = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //bottom exit goto badfile; else lvlitem.bottom_exit = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //right exit goto badfile; else lvlitem.right_exit = line.toInt(); if(file_format >= 10) { str_count++;line = in.readLine(); if(SMBX64::Int(line)) //Enter via Level's warp goto badfile; else lvlitem.entertowarp = line.toInt(); } if(file_format >= 28) { str_count++;line = in.readLine(); if(SMBX64::wBool(line)) //Always Visible goto badfile; else lvlitem.alwaysVisible = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if(SMBX64::wBool(line)) //Path background goto badfile; else lvlitem.pathbg = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if(SMBX64::wBool(line)) //Game start point goto badfile; else lvlitem.gamestart = SMBX64::wBoolR(line); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Goto x on World map goto badfile; else lvlitem.gotox = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //Goto y on World map goto badfile; else lvlitem.gotoy = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::wBool(line)) //Big Path background goto badfile; else lvlitem.bigpathbg = SMBX64::wBoolR(line); } lvlitem.array_id = FileData.level_array_id; FileData.level_array_id++; lvlitem.index = FileData.levels.size(); //Apply element index FileData.levels.push_back(lvlitem); str_count++;line = in.readLine(); } ////////////MusicBox Data////////// str_count++;line = in.readLine(); while(line!="\"next\"") { musicbox = dummyWldMusic(); if(SMBX64::sInt(line)) //MusicBox x goto badfile; else musicbox.x = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::sInt(line)) //MusicBox y goto badfile; else musicbox.y = line.toInt(); str_count++;line = in.readLine(); if(SMBX64::Int(line)) //MusicBox ID goto badfile; else musicbox.id = line.toInt(); musicbox.array_id = FileData.musicbox_array_id; FileData.musicbox_array_id++; musicbox.index = FileData.music.size(); //Apply element index FileData.music.push_back(musicbox); str_count++;line = in.readLine(); } str_count++;line = in.readLine(); // Read last line if((line!="")&&(!line.isNull())) goto badfile; FileData.ReadFileValid=true; return FileData; badfile: //If file format not corrects BadFileMsg(FileData.path, str_count, line); FileData.ReadFileValid=false; return FileData; }