public World(Tile topTileArg, String filename, int dimensionArg){
	dimension = dimensionArg;
	topTile = topTileArg;
	leftTile = topTile;
	while(leftTile.leftDown != null){
	    leftTile = leftTile.leftDown;
	}
	rightTile = topTile;
	while(rightTile.rightDown != null){
	    rightTile = rightTile.rightDown;
	}
	bottomTile = rightTile;
	while(bottomTile.leftDown != null){
	    bottomTile = bottomTile.leftDown;
	}
	if(Debug.developerMode){
	    System.out.println("Summary of world " + filename + ":");
	    System.out.println("Total tiles: " + Tile.totalTiles);
	    System.out.println("\tGrass tiles: " + Tile.grassTiles);
	    System.out.println("\tRock tiles: " + Tile.rockTiles);
	    System.out.println("\tVoid tiles: " + Tile.voidTiles);
	    System.out.println("\tSpawn tiles: " + Tile.spawnTiles);
	    System.out.println("Resources:");
	    
	    System.out.println("\tScrap tiles: " + Tile.scrapTiles + ", total scrap: " + Tile.scrapTiles*2);
	    System.out.println("\tRubidium tiles: " + Tile.rubidiumTiles + ", total rubidium: "
			       + Tile.rubidiumTiles*2);
	    System.out.println("\tExplosium tiles: " + Tile.explosiumTiles + ", total explosium: "
			       + Tile.explosiumTiles*2);
	}
	enumerateCoordinates(topTile);
	findAndRandomizeSpawnpoints(topTile);
	if(Debug.developerMode){
	    performStructureConsistencyVerification(topTile);
	}
	returnAsRowMajorMatrix();
    }