anchor.diff:      GameEntity bigBad;
       //definitely replace this.
       String flavorText = "$BIGBADNAME suddenly appears for probably no reason.";
  -    TriggerCondition(Session this.session);
  +    TriggerCondition(Session this.session, GameEntity bigBad);
  +    String name = "Generic Trigger";
   
       //TODO how to actually set up the triggers? sub classes? where are my notes...
   
       bool triggered();
       void renderForm(Element div);
   
  -    static SelectElement drawSelectTriggerConditions(Element div) {
  -        //TODO call listPossibleTriggers to make the options, select teh first one by default.
  +    TriggerCondition makeNewOfSameType();
  +
  +    static SelectElement drawSelectTriggerConditions(Element div, Session session, BigBad bigBad) {
  +        List<TriggerCondition> conditions = listPossibleTriggers(session, bigBad);
  +        SelectElement select = new SelectElement();
  +        for(TriggerCondition sample in conditions) {
  +            OptionElement o = new OptionElement();
  +            o.value = sample.name;
  +            o.text = sample.name;
  +            select.append(o);
  +        }
  +
  +        ButtonElement button = new ButtonElement();
  +        button.text = "Add Trigger Condition";
  +        button.onClick.listen((e) {
  +            String type = select.options[select.selectedIndex].value;
  +            for(TriggerCondition tc in conditions) {
  +                if(tc.name == type) {
  +                    TriggerCondition newCondition = tc.makeNewOfSameType();
  +                    bigBad.triggerConditions.add(newCondition);
  +                    newCondition.renderForm(div);
  +                }
  +            }
  +        });
  +
  +        div.append(select);
  +        div.append(button);
  +        return select;
       }
   
  -    static List<TriggerCondition> listPossibleTriggers(Session session) {
  +    static List<TriggerCondition> listPossibleTriggers(Session session, GameEntity bigBad) {
           List<TriggerCondition> ret = new List<TriggerCondition>();
  -        ret.add(new ItemTraitTriggerCondition(session));
  -        ret.add(new CrownedCarapaceTriggerCondition(session));
  -
  -        //TODO should have drop down of one instance of each trigger, and a button to add a copy of one to the big bad
  -        //todo once you've added the copy it renders itself as a sub form
  +        ret.add(new ItemTraitTriggerCondition(session, bigBad));
  +        ret.add(new CrownedCarapaceTriggerCondition(session,bigBad));
           return ret;
       }
   
  
positive.code:     static String CARAPACENAME = "CARAPACENAME";
      static String CROWNNAME = "CROWNNAME";
  
      String carapaceInitials;
      //strongly encouraged for this to be replaced
      //like, "An ominous 'honk' makes the Knight of Rage drop the Juggalo Poster in shock. With growing dread they realize that shit is about to get hella rowdy, as the Mirthful Messiahs have rolled into town.
      @override
      String flavorText = "$BIGBADNAME suddenly appears because the ${CARAPACENAME} has summoned them with the ULTIMATE POWER a ${CROWNNAME} represents.";
  
    CrownedCarapaceTriggerCondition(Session session) : super(session);
  
      @override
      bool triggered() {
  
negative.code:     static String ITEMTRAITNAME = "ITEMTRAITNAME";
      static String ITEMAME = "ITEMNAME";
  
      @override
      String name = "PlayerHasItemWithTrait";
  
      static String ITEMTRAITOWNERNAME = "PLAYER";
      ItemTrait itemTrait;
      //strongly encouraged for this to be replaced
      //like, "An ominous 'honk' makes the Knight of Rage drop the Juggalo Poster in shock. With growing dread they realize that shit is about to get hella rowdy, as the Mirthful Messiahs have rolled into town.
      @override
      String flavorText = "$BIGBADNAME suddenly appears because the $ITEMTRAITOWNERNAME is holding a $ITEMAME that is $ITEMTRAITNAME.";
  
    ItemTraitTriggerCondition(Session session, GameEntity bigBad) : super(session, bigBad);
  
    @override
    bool triggered() {
  