public String[] getMiniMap(Room room, final int diameter, boolean openOnly) {
    char[][] map = new char[diameter][diameter];
    for (int i = 0; i < diameter; i++) for (int i2 = 0; i2 < diameter; i2++) map[i][i2] = ' ';
    boolean amIndoors = ((room.domainType() & Room.INDOORS) == Room.INDOORS);
    Room[][] rmap = new Room[diameter][diameter];
    Vector rooms = new Vector();
    HashSet closedPaths = new HashSet();
    TrackingLibrary.TrackingFlags flags;
    flags =
        new TrackingLibrary.TrackingFlags()
            .plus(TrackingLibrary.TrackingFlag.NOEMPTYGRIDS)
            .plus(TrackingLibrary.TrackingFlag.NOAIR);
    if (openOnly) flags = flags.plus(TrackingLibrary.TrackingFlag.OPENONLY);

    CMLib.tracking().getRadiantRooms(room, rooms, flags, null, diameter, null);
    rmap[diameter / 2][diameter / 2] = room;
    map[diameter / 2][diameter / 2] = '*';
    for (int i = 0; i < rooms.size(); i++) {
      Room R = (Room) rooms.elementAt(i);
      if ((closedPaths.contains(R)) || (R == room)) continue;
      Room parentR = null;
      int parentDir = -1;
      int[] xy = null;
      for (int i2 = 0; (i2 < diameter) && (parentR == null); i2++)
        for (int i3 = 0; (i3 < diameter) && (parentR == null); i3++) {
          Room R2 = rmap[i2][i3];
          if (R2 != null)
            for (int d = Directions.NUM_DIRECTIONS() - 1; d >= 0; d--)
              if ((R2.getRoomInDir(d) == R)
                  && (!closedPaths.contains(R2))
                  && (R2.getExitInDir(d) != null)) {
                parentR = R2;
                parentDir = d;
                xy = Directions.adjustXYByDirections(i3, i2, d);
                break;
              }
        }
      if (xy != null) {
        if ((parentDir < 0)
            || (xy[0] < 0)
            || (xy[0] >= diameter)
            || (xy[1] < 0)
            || (xy[1] >= diameter)
            || (map[xy[1]][xy[0]] != ' ')) closedPaths.add(R);
        else {
          map[xy[1]][xy[0]] = roomChar(R, !amIndoors);
          rmap[xy[1]][xy[0]] = R;

          if ((R.domainType() & Room.INDOORS) == Room.INDOORS) closedPaths.add(R);
        }
      }
    }
    final String[] miniMap = new String[diameter];
    final StringBuffer str = new StringBuffer("");
    char r = ' ';
    char c = ' ';
    for (int i2 = 0; i2 < diameter; i2++) {
      str.setLength(0);
      for (int i3 = 0; i3 < diameter; i3++) {
        r = map[i2][i3];
        c = roomColor(rmap[i2][i3]);
        if (c != ' ') str.append("^" + c + "" + r);
        else str.append(r);
      }
      miniMap[i2] = str.toString();
    }
    return miniMap;
  }