void get2DPlane(String filename) {
		// record the max and min of x, y as we read every line, initially set to the opposite end
		float x_min, y_min, x_max, y_max;
		y_min = x_min = Float.MAX_VALUE;
		y_max = x_max = Float.MIN_VALUE;
		// read the whole file in a string array since the program won't handle huge test cases
		String[] lines=loadStrings (filename);
		agt.twod_plane = new Vec3D[lines.length];
		agt.twod_scores = new float[lines.length];
		// browse through every line
		for (int i = 0; i < lines.length; i++) {
			// file format is assumed to be like "{(x), (y)}"
			String[] coordinates = split(lines[i].substring(1, lines[i].length() - 1), ", ");
			float x_cur = Float.parseFloat(coordinates[0]);
			float y_cur = Float.parseFloat(coordinates[1]);
			// check if it's the new max or min
			if (x_cur < x_min) x_min = x_cur;
			else if (x_cur > x_max) x_max = x_cur;
			if (y_cur < y_min) y_min = y_cur;
			else if (y_cur > y_max) y_max = y_cur;
			agt.twod_plane[i]= new Vec3D (x_cur, y_cur, 0f);
			agt.twod_scores[i] = 0f;
		}
		// transformation needed to center those points to the origin for easy management
		Vec3D trans = new Vec3D((x_max + x_min) / 2, (y_max + y_min) / 2, 0);
		// Round every dimension up according to certain ratio
		int bx = (int) (Math.ceil((x_max - x_min) / ratio) * ratio);
		int by = (int) (Math.ceil((y_max - y_min) / ratio) * ratio);
		int bz = (int) (Math.ceil((agt.DIMZ) / ratio) * ratio);
		// If the dimensions are the largest, set the bounding box to be that size
		if (bx > bX) bX = bx;
		if (by > bY) bY = by;
		if (bz > bZ) bZ = bz;
		// move everything so they are centered to the origin
		for (Vec3D v : agt.twod_plane) v.subSelf(trans);
		// add agents to the system using all of them, their scores and starting points
		agt.addAgents(lines.length, agt.twod_scores, agt.twod_plane);
	}