anchor.diff:          | ReadyCharacters
           | PoiseCharacters
           | CelebrateCharacters of bool
  -        | AttackCharacter of CharacterIndex
  -        | DamageCharacter of CharacterIndex * CharacterIndex * SpecialType option
  +        | AttackCharacter1 of CharacterIndex
  +        | AttackCharacter2 of CharacterIndex * CharacterIndex
  +        | SpecialCharacter1 of CharacterIndex * SpecialType
  +        | SpecialCharacter2 of CharacterIndex * CharacterIndex * SpecialType
  +        | ConsumeCharacter1 of ConsumableType * CharacterIndex
  +        | ConsumeCharacter2 of ConsumableType * CharacterIndex
           | ChargeCharacter of CharacterIndex
           | PoiseCharacter of CharacterIndex
           | WoundCharacter of CharacterIndex
           | ResetCharacter of CharacterIndex
           | DestroyCharacter of CharacterIndex
  -        | GiveConsumable of ConsumableType * CharacterIndex
  -        | TakeConsumable of ConsumableType * CharacterIndex
           | Tick
   
       type BattleCommand =
  
positive.code:                 let sigs = if cancelled then Command (DisplayCancel targetIndex) :: sigs else sigs
                  let sigs = Command (DisplayHitPointsChange (targetIndex, -damage)) :: sigs
                  withSigs model sigs
                  
              | ChargeCharacter sourceIndex ->
                  let time = World.getTickTime world
                  let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time (PoiseCycle Charging)) sourceIndex model
  
negative.code:                 let model = { model with CurrentCommandOpt = None }
                  withMsgs model [ResetCharacter sourceIndex; PoiseCharacter sourceIndex]
  
          static let tickSpecial specialType sourceIndex (targetIndexOpt : CharacterIndex option) time timeLocal model =
              let source = BattleModel.getCharacter sourceIndex model
              match targetIndexOpt with
  