public void attackToken(
     Board board, MovablePlayerToken src, PlayerToken trg, boolean specialPower) {
   // An attack happens only between PlayerTokens:
   // perform attack method of source token:
   String outcome = "";
   // No need for an extra attack method, just interpret differently the results.
   if (specialPower && (src instanceof SpecialMovablePlayerToken)) {
     SpecialMovablePlayerToken scltkn = (SpecialMovablePlayerToken) src;
     outcome = scltkn.specialAttackTo(trg);
   } else {
     outcome = src.attackTo(trg);
   }
   if (outcome.equals("won")) {
     // Save location:
     int tmpc = trg.getCol();
     int tmpr = trg.getRow();
     // Remove token that lost from the board:
     takeToken(board, trg);
     // move token that won to its place:
     this.moveToken(board, src, new Vector2D(tmpr, tmpc));
   } else if (outcome.equals("lost")) {
     // Remove token that lost from the board:
     takeToken(board, src);
   } else if (outcome.equals("tie")) {
     // remove both tokens from the board:
     takeToken(board, src);
     takeToken(board, trg);
   } else if (outcome.equals("wonNotMove")) {
     // Remove token that lost from the board:
     takeToken(board, trg);
   } else if (outcome.equals("nothing")) {
     // Nothing happens in the board.
   } else if (outcome.equals("convert")) {
     // Target Token is converted to the other side (probably
     // due to cookies)..
     convertToken(board, trg);
   }
 }