private void scaleImages(Game game) {
    for (Player player : game.getAllPlayers()) {
      Color color = player.getColors().getMeepleColor();
      scaleFigureImages(player, color, player.getFollowers());
      scaleFigureImages(player, color, player.getSpecialMeeples());
      if (game.hasCapability(TunnelCapability.class)) {
        Image tunnelA =
            rm.getLayeredImage(
                new LayeredImageDescriptor(
                    "player-meeples/tunnel", player.getColors().getMeepleColor()));
        Image tunnelB =
            rm.getLayeredImage(
                new LayeredImageDescriptor(
                    "player-meeples/tunnel", player.getColors().getTunnelBColor()));

        scaledImages.put(player.getIndex() + "tunnelA", scaleImage(tunnelA));
        scaledImages.put(player.getIndex() + "tunnelB", scaleImage(tunnelB));
      }
    }
    if (game.hasCapability(TowerCapability.class)) {
      scaledImages.put("towerpiece", scaleImage(rm.getImage("neutral/towerpiece")));
    }
    if (game.hasCapability(KingAndRobberBaronCapability.class)) {
      scaledImages.put("king", scaleImage(rm.getImage("neutral/king")));
      scaledImages.put("robber", scaleImage(rm.getImage("neutral/robber")));
    }
    if (game.hasCapability(BazaarCapability.class)) {
      scaledImages.put("bridge", scaleImage(rm.getImage("neutral/bridge")));
      scaledImages.put("castle", scaleImage(rm.getImage("neutral/castle")));
    }
    if (game.hasCapability(ClothWineGrainCapability.class)) {
      scaledImages.put("cloth", rm.getImage("neutral/cloth"));
      scaledImages.put("grain", rm.getImage("neutral/grain"));
      scaledImages.put("wine", rm.getImage("neutral/wine"));
    }
    if (game.hasCapability(BarnCapability.class)) {
      scaledImages.put("abbey", scaleImage(rm.getAbbeyImage(Rotation.R0).getImage()));
    }
    if (game.hasCapability(LittleBuildingsCapability.class)) {
      scaledImages.put("lb-tower", scaleImage(rm.getImage("neutral/lb-tower")));
      scaledImages.put("lb-house", scaleImage(rm.getImage("neutral/lb-house")));
      scaledImages.put("lb-shed", scaleImage(rm.getImage("neutral/lb-shed")));
    }
    if (game.hasCapability(GoldminesCapability.class)) {
      scaledImages.put("gold", scaleImage(rm.getImage("neutral/gold")));
    }
    if (game.hasCapability(DragonCapability.class)) {
      Image scaled =
          new ImageIcon(rm.getImage("neutral/dragon").getScaledInstance(42, 42, Image.SCALE_SMOOTH))
              .getImage();
      scaledImages.put("dragon", scaled);
    }
    if (game.hasCapability(FairyCapability.class)) {
      scaledImages.put("fairy", scaleImage(rm.getImage("neutral/fairy")));
    }
    if (game.hasCapability(MageAndWitchCapability.class)) {
      scaledImages.put("mage", scaleImage(rm.getImage("neutral/mage")));
      scaledImages.put("witch", scaleImage(rm.getImage("neutral/witch")));
    }
  }
 public Image get(Player player, String key) {
   if (player == null) {
     return scaledImages.get(key);
   } else {
     return scaledImages.get(player.getIndex() + key);
   }
 }
 private void scaleFigureImages(Player player, Color color, Collection<? extends Meeple> meeples) {
   for (Meeple f : meeples) {
     String key = player.getIndex() + f.getClass().getSimpleName();
     if (!scaledImages.containsKey(key)) {
       Image img = rm.getLayeredImage(new LayeredImageDescriptor(f.getClass(), color));
       scaledImages.put(key, scaleImage(img));
     }
   }
 }
 @Override
 public void saveToSnapshot(Document doc, Element node) {
   node.setAttribute("bridgeUsed", bridgeUsed + "");
   for (Player player : game.getAllPlayers()) {
     Element el = doc.createElement("player");
     node.appendChild(el);
     el.setAttribute("index", "" + player.getIndex());
     el.setAttribute("bridges", "" + getPlayerBridges(player));
   }
 }
  @Override
  public void saveToSnapshot(Document doc, Element node) {
    for (Player player : game.getAllPlayers()) {
      Element el = doc.createElement("player");
      node.appendChild(el);
      el.setAttribute("index", "" + player.getIndex());
      el.setAttribute("castles", "" + getPlayerCastles(player));
    }

    for (Castle castle : scoreableCastleVicinity.keySet()) {
      node.appendChild(createCastleXmlElement(doc, castle));
    }
    for (Castle castle : newCastles) {
      Element el = createCastleXmlElement(doc, castle);
      el.setAttribute("new", "true");
      node.appendChild(el);
    }
    for (Castle castle : emptyCastles) {
      Element el = createCastleXmlElement(doc, castle);
      el.setAttribute("completed", "true");
      node.appendChild(el);
    }
  }
 private int getTunnelId(Player p, boolean isB) {
   return p.getIndex() + (isB ? 100 : 0);
 }