Program: 40046
Project: 40046
Buggy source:
/** 
 * Update the game state over the given timestep in seconds.
 * @param delta amount of time to advance in seconds
 */
public void update(double delta){
  Log.trace("String_Node_Str","String_Node_Str");
  if (newMapPath != null) {
    try {
      loadMap(newMapPath);
    }
 catch (    IOException e) {
      Log.warn("String_Node_Str","String_Node_Str" + newMapPath + "String_Node_Str");
    }
  }
  while (botsToAdd != 0) {
    if (botsToAdd < 0) {
      removeBot();
      botsToAdd++;
    }
 else {
      addBots(botsToAdd);
      botsToAdd=0;
    }
  }
  if (paused) {
    return;
  }
  graveMarkers.update(delta);
  getPlayerInput(delta);
  pathManager.updateSearches();
  for (  RavenDoor door : map.getDoors()) {
    door.update(delta);
  }
  HashSet<RavenProjectile> toRemove=new HashSet<RavenProjectile>();
  for (  RavenProjectile projectile : projectiles) {
    if (projectile.IsDead()) {
      toRemove.add(projectile);
    }
 else {
      projectile.update(delta);
    }
  }
  projectiles.removeAll(toRemove);
  boolean spawnPossible=true;
  for (  RavenBot bot : bots) {
    if (bot.isSpawning() && spawnPossible) {
      spawnPossible=attemptToAddBot(bot);
    }
 else     if (bot.isDead()) {
      graveMarkers.addGrave(bot.pos());
      bot.setSpawning();
    }
 else     if (bot.isAlive()) {
      bot.update(delta);
    }
  }
  map.updateTriggerSystem(delta,bots);
  if (removeBot) {
    Log.info("String_Node_Str","String_Node_Str");
    if (!bots.isEmpty()) {
      RavenBot bot=bots.get(bots.size() - 1);
      if (bot.equals(selectedBot)) {
        selectedBot=null;
      }
      notifyAllBotsOfRemoval(bot);
      bots.remove(bot);
    }
    removeBot=false;
  }
}

Fixed version (ground truth):
/** 
 * Update the game state over the given timestep in seconds.
 * @param delta amount of time to advance in seconds
 * @throws mapLoadedException 
 */
public void update(double delta) throws mapLoadedException {
  Log.trace("String_Node_Str","String_Node_Str");
  if (newMapPath != null) {
    try {
      loadMap(newMapPath);
      throw new mapLoadedException();
    }
 catch (    IOException e) {
      Log.warn("String_Node_Str","String_Node_Str" + newMapPath + "String_Node_Str");
    }
  }
  while (botsToAdd != 0) {
    if (botsToAdd < 0) {
      removeBot();
      botsToAdd++;
    }
 else {
      addBots(botsToAdd);
      botsToAdd=0;
    }
  }
  if (paused) {
    return;
  }
  graveMarkers.update(delta);
  getPlayerInput(delta);
  pathManager.updateSearches();
  for (  RavenDoor door : map.getDoors()) {
    door.update(delta);
  }
  HashSet<RavenProjectile> toRemove=new HashSet<RavenProjectile>();
  for (  RavenProjectile projectile : projectiles) {
    if (projectile.IsDead()) {
      toRemove.add(projectile);
    }
 else {
      projectile.update(delta);
    }
  }
  projectiles.removeAll(toRemove);
  boolean spawnPossible=true;
  for (  RavenBot bot : bots) {
    if (bot.isSpawning() && spawnPossible) {
      spawnPossible=attemptToAddBot(bot);
    }
 else     if (bot.isDead()) {
      graveMarkers.addGrave(bot.pos());
      bot.setSpawning();
    }
 else     if (bot.isAlive()) {
      bot.update(delta);
    }
  }
  map.updateTriggerSystem(delta,bots);
  if (removeBot) {
    Log.info("String_Node_Str","String_Node_Str");
    if (!bots.isEmpty()) {
      RavenBot bot=bots.get(bots.size() - 1);
      if (bot.equals(selectedBot)) {
        selectedBot=null;
      }
      notifyAllBotsOfRemoval(bot);
      bots.remove(bot);
    }
    removeBot=false;
  }
}