anchor.diff:  thing. If the effect doesn’t want to do anything this frame, it can
   simply return an empty assigner list.
   
  -5.  Once all the assigners have been collected, Each assigner’s
  +. Once all the assigners have been collected, Each assigner’s
   http://deepsymmetry.org/afterglow/doc/afterglow.effects.html#var-assign[assign]
   function is called, again passing in the show and the metronome
   snapshot, the target which is being assigned (a DMX channel in a show
  
positive.code: left with a single assigned value for every target which any effect
  wanted to affect for the current frame.
  
  6.  Afterglow uses these assignment results to establish actual DMX
  values for the frame. It splits them based on the kind of assignment
  they want to make, doing all of one type before moving on to the next
  type. The type ordering is established by
  
negative.code: how they should look. This enables a consistent, coordinated appearance
  for everything in the frame.
  
  . The next step is to zero out the buffers that will be used to send
  DMX data for each universe, so that if no effect tries to set a value
  for a particular channel on this frame, a zero value will be sent for
  it.
  
  . Then Afterglow loops over all [[Effect Functions]] that are
  currently active for the show, and asks if any are ready to end, as
  described in the [[Effect Function Lifecycle]] section. If any are, they
  are removed from the list of active effects.
  
  . Then it makes another loop over any functions that did not end, to
  see how they want to affect the lights. It does this by calling, in
  order, each effect’s
  http://deepsymmetry.org/afterglow/doc/afterglow.effects.html#var-generate[generate]
  