public int getCharmCosts(ICharm charm, ICostAnalyzer analyzer) {
   boolean favored = analyzer.isMagicFavored(charm);
   for (ICharmAttribute attribute : charm.getAttributes()) {
     Map<String, Integer> set = favored ? favoredKeywordCosts : generalKeywordCosts;
     if (set != null && set.get(attribute.getId()) != null) return set.get(attribute.getId());
   }
   return getCharmCosts(favored, analyzer.getMartialArtsLevel(charm));
 }
 public int getSpellCosts(ICostAnalyzer costMapping) {
   boolean isSorceryFavored = costMapping.isOccultFavored();
   return getCharmCosts(isSorceryFavored, null);
 }