コード例 #1
0
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;
}
コード例 #2
0
ファイル: stringbuf.cpp プロジェクト: Flameeyes/stdcxx
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;
}
コード例 #3
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();
    }
}
コード例 #4
0
ファイル: file_open.cpp プロジェクト: tcvicio/PGE-Project
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();
    }
}
コード例 #5
0
ファイル: file_wld.cpp プロジェクト: hacheipe399/PlatGEnWohl
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;
}