anchor.diff:  
   class AlchemyResultAND extends AlchemyResult {
     AlchemyResultAND(List<Item> items) : super(items);
  +
  +  @override
  +  String  description(Player p, templates) {
  +      templates.addAll(<String>["${p.htmlTitleBasicNoTip()} overlaps the punched cards for ${turnArrayIntoHumanSentence(items)} to get ${result.fullName}. ${result.randomDescription(p.session.rand)}"]);
  +      return super.description(p, templates);
  +  }
   
     ///AND takes both functionality and appearance from both things.
     ///TODO if this is OP (i.e. OR is never selected) then take every other trait from both.
  
positive.code: 
   */
  
  abstract class AlchemyResult {
      //no matter what, it's the first item that gets shit shoved into it and all other items that are removed
      //in sim, assume only two items at a time. but can support anding 3 or more things at a time
      //in a mini game.
      List<Item> items;
      Item result;
  
  
negative.code:           }
        }
    }
  
  }
  
  class AlchemyResultOR extends AlchemyResult {
      AlchemyResultOR(List<Item> items) : super(items);
  
      @override
      String  description(Player p, templates) {
          templates.addAll(<String>["${p.htmlTitleBasicNoTip()} carefully punches all holes from ${turnArrayIntoHumanSentence(items)} into one card to get ${result.fullName}. ${result.randomDescription(p.session.rand)}"]);
          return super.description(p, templates);
      }
  
      ///OR takes  functionality from first and appearance from second. ignores all other items.
      @override
  