anchor.diff:          | ReticlesCancel
   
       and [<NoComparison>] BattleCommand =
  -        | InitializeBattle
  -        | FinalizeBattle
  -        | DestroyCharacter of CharacterIndex
  -        | ResetCharacter of CharacterIndex
  -        | IndexedCommand of IndexedCommand * int
  -        | FadeSong
  +        | InitializeBattleCmd
  +        | FinalizeBattleCmd
  +        | DestroyCharacterCmd of CharacterIndex
  +        | ResetCharacterCmd of CharacterIndex
  +        | IndexedCommandCmd of IndexedCommand * int
  +        | FadeSongCmd
   
       and Screen with
   
  
positive.code:                 match timeLocal with
                  | 0L when target.CharacterState.IsHealthy ->
                      if target.CharacterState.IsHealthy then
                          withMsg battleRunning (AttackCharacterM (sourceIndex, targetIndex))
                      else // target wounded, cancel attack
                          let battleRunning = { battleRunning with CurrentCommandOpt = None }
                          withMsgs battleRunning [ResetCharacterM sourceIndex; PoiseCharacterM sourceIndex]
                  | _ when timeLocal = 1L * int64 source.CharacterAnimationState.Stutter ->
                      withMsg battleRunning (DamageCharacterM targetIndex)
                  | _ ->
                      if CharacterAnimationState.finished time source.CharacterAnimationState then
                          if target.CharacterState.IsHealthy then
                              let battleRunning = { battleRunning with CurrentCommandOpt = None }
                              withMsgs battleRunning [PoiseCharacterM sourceIndex; PoiseCharacterM targetIndex]
                          else
                              let woundCommand = CurrentCommand.make time (ActionCommand.make Wound targetIndex None)
                              let battleRunning = { battleRunning with CurrentCommandOpt = Some woundCommand }
                              withMsg battleRunning (PoiseCharacterM sourceIndex)
                      else just battleRunning
  
              // else target destroyed, cancel attack
              | None ->
                  let battleRunning = { battleRunning with CurrentCommandOpt = None }
                  withMsgs battleRunning [ResetCharacterM sourceIndex; PoiseCharacterM sourceIndex]
  
          let tickWound characterIndex time timeLocal battleRunning model =
              match timeLocal with
              | 0L ->
                  withMsg battleRunning (DamageCharacterM characterIndex)
              | _ ->
                  let character = getCharacter characterIndex model
                  if character.CharacterState.IsAlly then
                      match character.CharacterAnimationState.CharacterAnimationCycle with
                      | DamageCycle ->
                          if CharacterAnimationState.finished time character.CharacterAnimationState
                          then withMsg { battleRunning with CurrentCommandOpt = None } (WoundCharacterM characterIndex)
                          else just battleRunning
                      | _ -> failwithumf ()
                  else
                      match character.CharacterAnimationState.CharacterAnimationCycle with
                      | DamageCycle ->
                          if CharacterAnimationState.finished time character.CharacterAnimationState
                          then withMsg battleRunning (WoundCharacterM characterIndex)
                          else just battleRunning
                      | WoundCycle ->
                          if CharacterAnimationState.finished time character.CharacterAnimationState
                          then withMsg { battleRunning with CurrentCommandOpt = None } (DestroyCharacterM characterIndex)
                          else just battleRunning
                      | _ -> failwithumf ()
  
          let tickReady time timeStart model =
              let timeLocal = time - timeStart
              match timeLocal with
              | 0L -> withMsg { model with BattleState = BattleRunning (BattleRunning.make ()) } ReadyCharactersM
              | 30L -> withMsg { model with BattleState = BattleRunning (BattleRunning.make ()) } PoiseCharactersM
              | _ -> just model
  
          let rec tickCurrentCommand time currentCommand battleRunning model =
  
negative.code:             let specialMenu = Simulants.SpecialMenu index
              let itemMenu = Simulants.ItemMenu index
              let reticles = Simulants.Reticles index
              [regularMenu.ItemSelectEvent =|>! fun evt -> IndexedCommandCmd (RegularMenuSelect evt.Data, index)
               specialMenu.ItemSelectEvent =|>! fun evt -> IndexedCommandCmd (SpecialMenuSelect evt.Data, index)
               specialMenu.CancelEvent =>! IndexedCommandCmd (RegularMenuShow, index)
               itemMenu.ItemSelectEvent =|>! fun evt -> IndexedCommandCmd (ItemMenuSelect evt.Data, index)
               itemMenu.CancelEvent =>! IndexedCommandCmd (RegularMenuShow, index)
               reticles.TargetSelectEvent =|> fun evt -> ReticlesSelect (evt.Data, AllyIndex index)
               reticles.CancelEvent =>! IndexedCommandCmd (ReticlesCancel, index)]
  
          let inputContent index =
              let input = Simulants.Input index
  