Vec2 GoalieMode() {
    abstract_robot.setDisplayString("Goalie");
    Vec2 ReturnCmd = new Vec2(CurOurGoal.x, CurOurGoal.y);
    // If we're too far out of goal in x dir, get back in!
    Vec2 OurGoalAbs = new Vec2(CurOurGoal.x, CurOurGoal.y);
    OurGoalAbs.add(CurMyPos);
    if (Math.abs(CurMyPos.x) < Math.abs(OurGoalAbs.x * 0.9)) {
      return (CurOurGoal);
    }

    // Otherwise, calculate projected ball trajectory
    Vec2 BallDir = new Vec2(CurBallPos.x, CurBallPos.y);
    BallDir.sub(PrevBallPos);
    // If ball is headed into goal, block it!
    ReturnCmd.setx(0);

    boolean MoveUp = false;
    boolean MoveDown = false;

    if (CurMyPos.y < CurBallPos.y) MoveUp = true;
    if (CurMyPos.y > CurBallPos.y) MoveDown = true;
    if (CurMyPos.y > GOAL_WIDTH / 2.0) MoveUp = false;
    if (CurMyPos.y < -GOAL_WIDTH / 2.0) MoveDown = false;

    if (MoveDown && MoveUp) {
      ReturnCmd.sety(0);
      //      System.out.println("Both " + CurMyPos.y + " " + CurBallPos.y);
    } else if (MoveDown) {
      ReturnCmd.sety(-1);
      //      System.out.println("Down");
    } else if (MoveUp) {
      ReturnCmd.sety(1);
      //      System.out.println("Up");
    } else {
      ReturnCmd.sety(0);
    }

    return (ReturnCmd);
  }
 Vec2 TocchetMode() {
   abstract_robot.setDisplayString("Tocchet");
   Vec2 Goalie = new Vec2(99999, 0);
   Vec2 GoalDistance = new Vec2(99999, 0);
   Vec2 CmdReturn;
   for (int i = 0; i < CurOpponents.length; i++) {
     if (ClosestTo(CurOpponents[i], EgoToAbs(CurOpponentsGoal))) {
       Goalie.setx(CurOpponents[i].x);
       Goalie.sety(CurOpponents[i].y);
     }
   }
   return (Goalie);
 }