public GameMapData loadMap(GameMap g, int multiplier, TextDisplay textDisplay, int levelsDeep)
      throws Exception {
    spawnedPlayer = false;
    notSpawnedPlayerCount = 0;
    possibleSpawnPoints.clear();
    // this method is going to manage appending and extending an array that is
    // going to be built by loading 4 different files
    Scenery[][] completeMap;
    Scenery[][] randomMap2 = loadRandomMap(g, multiplier, 0, 1, levelsDeep, textDisplay);
    Scenery[][] randomMap3 = loadRandomMap(g, multiplier, 1, 0, levelsDeep, textDisplay);
    Scenery[][] randomMap4 = loadRandomMap(g, multiplier, 1, 1, levelsDeep, textDisplay);
    Scenery[][] randomMap1 = loadRandomMap(g, multiplier, 0, 0, levelsDeep, textDisplay);
    // I do it in this order so that I can say
    // "if I haven't loaded  a map with a player then I should do so on the fourth time!"

    // these were built using he arraymerge function of eclipse

    // randomMapOneTwo is randomMap3 stacked on top of randomMap2
    Scenery[][] randomMapOneTwo = new Scenery[randomMap1.length + randomMap2.length][];
    System.arraycopy(randomMap1, 0, randomMapOneTwo, 0, randomMap1.length);
    System.arraycopy(randomMap2, 0, randomMapOneTwo, randomMap1.length, randomMap2.length);

    // randomMapThreeFour is randomMap3 stacked on top of randomMap4
    Scenery[][] randomMapThreeFour = new Scenery[randomMap3.length + randomMap4.length][];
    System.arraycopy(randomMap3, 0, randomMapThreeFour, 0, randomMap3.length);
    System.arraycopy(randomMap4, 0, randomMapThreeFour, randomMap3.length, randomMap4.length);

    completeMap = new Scenery[randomMapOneTwo.length][];

    // this iterates all of through all of the contents of mapOneTwo and
    // mapThreeFour and uses the array merge on them
    for (int i = 0; i < randomMapOneTwo.length; i++) {
      Scenery[] tmpArray = new Scenery[randomMapOneTwo[i].length + randomMapThreeFour[i].length];
      System.arraycopy(randomMapOneTwo[i], 0, tmpArray, 0, randomMapOneTwo[i].length);
      System.arraycopy(randomMapThreeFour[i], 0, tmpArray, randomMapOneTwo[i].length,
          randomMapThreeFour[i].length);
      completeMap[i] = tmpArray;
    }

    for (int y = 0; y < completeMap.length; y++) {
      for (int x = 0; x < completeMap[y].length; x++) {
        // if x or y equals 0 Or if x or y = edge of the array (arrays are 0
        // based so I had to put that -1 in) place a wall
        if (x == 0 || x == actualWidth - 1 || y == 0 || y == actualHeight - 1) {
          completeMap[y][x] = new Wall(x, y, g, multiplier);
        }
      }
    }

    completeMap[completeMap.length - 2][completeMap.length - 2] = new NextLevel(g,
        completeMap.length - 2, completeMap.length - 2, multiplier);
    GameMapData gameMapData = new GameMapData(completeMap);
    gameMapData.setSpawnPoint(possibleSpawnPoints);
    return gameMapData;
  }