anchor.diff:          let makeDefault time lifeTimeOpt particleLifeTimeOpt particleRate particleMax =
               let image = asset Assets.Default.PackageName Assets.Default.ImageName
               let particleSeed =
  -                { Life = { StartTime = 0L; LifeTimeOpt = 60L }
  +                { Life = Life.make 0L 60L
                     Body = Body.defaultBody
                     Size = Constants.Engine.ParticleSizeDefault
                     Offset = v2Dup 0.5f
  
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:             if particleIndex > emitter.ParticleWatermark then emitter.ParticleWatermark <- particleIndex
              emitter.ParticleIndex <- particleIndex
              let particle = &emitter.ParticleBuffer.[particleIndex]
              particle.Life <- Life.make time particle.Life.LifeTimeOpt
              particle <- emitter.ParticleInitializer time constrain emitter
  
          /// Determine emitter's liveness.
  