anchor.diff:              if particleIndex > emitter.ParticleWatermark then emitter.ParticleWatermark <- particleIndex
               emitter.ParticleIndex <- particleIndex
               let particle = &emitter.ParticleBuffer.[particleIndex]
  -            particle.Life <- { LifeTimeOpt = particle.Life.LifeTimeOpt; StartTime = time }
  +            particle.Life <- Life.make time particle.Life.LifeTimeOpt
               particle <- emitter.ParticleInitializer time constrain emitter
   
           /// Determine emitter's liveness.
  
positive.code:     /// Describes the life of an instance value.
      /// OPTIMIZATION: LifeTimeOpt uses 0L to represent infinite life.
      /// OPTIMIZATION: doesn't use Liveness type to avoid its constructor calls.
      type [<StructuralEquality; NoComparison; Struct>] Life =
          { StartTime : int64
            LifeTimeOpt : int64 }
  
          /// The progress made through the instance's life.
          static member getProgress time life =
              match life.LifeTimeOpt with
              | 0L -> 1.0f
              | lifeTime -> (single time - single life.StartTime) / single lifeTime
  
          /// The liveness of the instance as a boolean.
          static member getLiveness time life =
              match life.LifeTimeOpt with
              | 0L -> true
              | lifeTime -> lifeTime < time - life.StartTime
  
      /// Describes the body of an instance value.
      type [<StructuralEquality; NoComparison; Struct>] Body =
  
negative.code:               Absolute = absolute
                Blend = blend
                Image = image
                Life = Life.make time lifeTimeOpt
                ParticleLifeTimeOpt = particleLifeTimeOpt
                ParticleRate = particleRate
                ParticleIndex = 0
  