public void parse() {
        EobLogger.println("Parsing level " + levelId + "...");
        int width = ByteArrayUtility.getWord(levelData, 0);
        int height = ByteArrayUtility.getWord(levelData, 2);
        int sizePerSquare = ByteArrayUtility.getWord(levelData, 4);

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                level[x][y] = new Square(
                        x, y,
                        levelData[6 + (y * width + x) * sizePerSquare],
                        levelData[6 + (y * width + x) * sizePerSquare + 1],
                        levelData[6 + (y * width + x) * sizePerSquare + 2],
                        levelData[6 + (y * width + x) * sizePerSquare + 3],
                        levelId, eobGlobalData);
                level[x][y].checkWalls();
            }
        }

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                level[x][y].createAssets(level, eobGlobalData, settings);
            }
        }

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                level[x][y].externalAssetChange(levelId, level, eobGlobalData, settings);
            }
        }
    }