Program: 164195
Project: 164195
Buggy source:
@Override public void onSelect(Integer target){
  if (target != null && (Dungeon.level.visited[target] || Dungeon.level.mapped[target])) {
    int missileProperties=(Dungeon.depth == 10 || Dungeon.depth == 15 || Dungeon.depth == 20 || Dungeon.depth == 25) ? Ballistica.PROJECTILE : Ballistica.STOP_CHARS | Ballistica.STOP_TARGET;
    final Ballistica chain=new Ballistica(curUser.pos,target,missileProperties);
    if (Actor.findChar(chain.collisionPos) != null) {
      int newPos=-1;
      for (      int i : chain.subPath(1,chain.dist)) {
        if (!Level.solid[i] && Actor.findChar(i) == null) {
          newPos=i;
          break;
        }
      }
      if (newPos == -1) {
        GLog.w(Messages.get(this,"String_Node_Str"));
      }
 else {
        final int newMobPos=newPos;
        final Char affected=Actor.findChar(chain.collisionPos);
        int chargeUse=Level.distance(affected.pos,newMobPos);
        if (chargeUse > charge) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else         if (affected.properties().contains(Char.Property.IMMOVABLE)) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else {
          charge-=chargeUse;
          updateQuickslot();
        }
        curUser.busy();
        curUser.sprite.parent.add(new Chains(curUser.pos,affected.pos,new Callback(){
          public void call(){
            Actor.add(new Pushing(affected,affected.pos,newMobPos,new Callback(){
              public void call(){
                Dungeon.level.press(newMobPos,affected);
              }
            }
));
            affected.pos=newMobPos;
            Dungeon.observe();
            curUser.spendAndNext(1f);
          }
        }
));
      }
    }
 else     if (Level.solid[chain.path.get(chain.dist)] || (chain.dist > 0 && Level.solid[chain.path.get(chain.dist - 1)]) || (chain.path.size() > chain.dist + 1 && Level.solid[chain.path.get(chain.dist + 1)])|| (chain.path.size() == chain.dist + 1)) {
      int newPos=-1;
      for (      int i : chain.subPath(1,chain.dist)) {
        if (!Level.solid[i] && Actor.findChar(i) == null)         newPos=i;
      }
      if (newPos == -1) {
        GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
      }
 else {
        final int newHeroPos=newPos;
        int chargeUse=Level.distance(curUser.pos,newHeroPos);
        if (chargeUse > charge) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else {
          charge-=chargeUse;
          updateQuickslot();
        }
        curUser.busy();
        curUser.sprite.parent.add(new Chains(curUser.pos,target,new Callback(){
          public void call(){
            Actor.add(new Pushing(curUser,curUser.pos,newHeroPos,new Callback(){
              public void call(){
                Dungeon.level.press(newHeroPos,curUser);
              }
            }
));
            curUser.spendAndNext(1f);
            curUser.pos=newHeroPos;
            Dungeon.observe();
          }
        }
));
      }
    }
 else {
      GLog.i(Messages.get(EtherealChains.class,"String_Node_Str"));
    }
  }
}

Fixed version (ground truth):
@Override public void onSelect(Integer target){
  if (target != null && (Dungeon.level.visited[target] || Dungeon.level.mapped[target])) {
    int missileProperties=(Dungeon.depth == 10 || Dungeon.depth == 15 || Dungeon.depth == 20 || Dungeon.depth == 25) ? Ballistica.PROJECTILE : Ballistica.STOP_CHARS | Ballistica.STOP_TARGET;
    final Ballistica chain=new Ballistica(curUser.pos,target,missileProperties);
    if (Actor.findChar(chain.collisionPos) != null) {
      int newPos=-1;
      for (      int i : chain.subPath(1,chain.dist)) {
        if (!Level.solid[i] && Actor.findChar(i) == null) {
          newPos=i;
          break;
        }
      }
      if (newPos == -1) {
        GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
      }
 else {
        final int newMobPos=newPos;
        final Char affected=Actor.findChar(chain.collisionPos);
        int chargeUse=Level.distance(affected.pos,newMobPos);
        if (chargeUse > charge) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else         if (affected.properties().contains(Char.Property.IMMOVABLE)) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else {
          charge-=chargeUse;
          updateQuickslot();
        }
        curUser.busy();
        curUser.sprite.parent.add(new Chains(curUser.pos,affected.pos,new Callback(){
          public void call(){
            Actor.add(new Pushing(affected,affected.pos,newMobPos,new Callback(){
              public void call(){
                Dungeon.level.press(newMobPos,affected);
              }
            }
));
            affected.pos=newMobPos;
            Dungeon.observe();
            curUser.spendAndNext(1f);
          }
        }
));
      }
    }
 else     if (Level.solid[chain.path.get(chain.dist)] || (chain.dist > 0 && Level.solid[chain.path.get(chain.dist - 1)]) || (chain.path.size() > chain.dist + 1 && Level.solid[chain.path.get(chain.dist + 1)])|| (chain.path.size() == chain.dist + 1)) {
      int newPos=-1;
      for (      int i : chain.subPath(1,chain.dist)) {
        if (!Level.solid[i] && Actor.findChar(i) == null)         newPos=i;
      }
      if (newPos == -1) {
        GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
      }
 else {
        final int newHeroPos=newPos;
        int chargeUse=Level.distance(curUser.pos,newHeroPos);
        if (chargeUse > charge) {
          GLog.w(Messages.get(EtherealChains.class,"String_Node_Str"));
          return;
        }
 else {
          charge-=chargeUse;
          updateQuickslot();
        }
        curUser.busy();
        curUser.sprite.parent.add(new Chains(curUser.pos,target,new Callback(){
          public void call(){
            Actor.add(new Pushing(curUser,curUser.pos,newHeroPos,new Callback(){
              public void call(){
                Dungeon.level.press(newHeroPos,curUser);
              }
            }
));
            curUser.spendAndNext(1f);
            curUser.pos=newHeroPos;
            Dungeon.observe();
          }
        }
));
      }
    }
 else {
      GLog.i(Messages.get(EtherealChains.class,"String_Node_Str"));
    }
  }
}