anchor.diff:          | Interact
   
       type [<NoComparison>] FieldCommand =
  +        | UpdateEye
  +        | PlayFieldSong
  +        | MoveAvatar of Vector2
           | PlaySound of int64 * single * Sound AssetTag
           | PlaySong of int * single * Song AssetTag
           | FadeOutSong of int
  -        | MoveAvatar of Vector2
  -        | UpdateEye
           | Nop
   
       type Screen with
  
positive.code:                         let songCmd =
                              match Field.getFieldSongOpt field with
                              | Some fieldSong ->
                                  if currentSongOpt = Some fieldSong then Nop
                                  else PlaySong (Constants.Audio.DefaultFadeOutMs, Constants.Audio.DefaultSongVolume, fieldSong)
                              | None -> Nop
                          withCmds [moveCmd; songCmd] field
                      elif tickTime = fieldTransition.FieldTransitionTime then
  
negative.code:                     | None -> just field
                  | Some dialog -> interactDialog dialog field
  
          override this.Command (field, command, _, world) =
  
              match command with
              | UpdateEye ->
                  let world = World.setEyeCenter field.Avatar.Center world
                  just world
  
              | PlayFieldSong ->
                  match data.Value.Fields.TryGetValue field.FieldType with
                  | (true, fieldData) ->
                      match fieldData.FieldSongOpt with
                      | Some fieldSong -> withCmd (PlaySong (Constants.Audio.DefaultFadeOutMs, Constants.Audio.DefaultSongVolume, fieldSong)) world
                      | None -> just world
                  | (false, _) -> just world
  
              | MoveAvatar position ->
                  let positionOffset = position - Constants.Field.AvatarBottomInset
  