anchor.diff:                      then { model with Characters = Map.remove characterIndex model.Characters }
                       else model
                   just model
  -            | GiveConsumable (consumable, sourceIndex) ->
  -                let time = World.getTickTime world
  -                let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time CastCycle) sourceIndex model
  -                let item = Consumable consumable
  -                let model = { model with Inventory = Inventory.removeItem item model.Inventory }
  -                just model
  -            | TakeConsumable (consumable, targetIndex) ->
  -                let time = World.getTickTime world
  -                let rom = screen.Parent.GetModel<Rom> world
  -                let healing =
  -                    match consumable with
  -                    | GreenHerb -> 50 // TODO: pull from rom data
  -                    | RedHerb -> 500 // TODO: pull from rom data
  -                let model = BattleModel.updateCharacterState (CharacterState.changeHitPoints rom false healing) targetIndex model
  -                let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time SpinCycle) targetIndex model
  -                let displayHitPointsChange = DisplayHitPointsChange (targetIndex, healing)
  -                let playHealSound = PlaySound (0L, Constants.Audio.DefaultSoundVolume, Assets.HealSound)
  -                withCmds model [displayHitPointsChange; playHealSound]
               | Tick ->
                   if World.isTicking world
                   then tick (World.getTickTime world) model
  
positive.code:                             let woundCommand = CurrentCommand.make time (ActionCommand.make Wound sourceIndex (Some targetIndex))
                              let model = { model with CurrentCommandOpt = Some woundCommand }
                              withMsg model (PoiseCharacter sourceIndex)
                      else just model
              | None ->
                  let model = { model with CurrentCommandOpt = None }
  
negative.code:                 let sigs = if cancelled then Command (DisplayCancel targetIndex) :: sigs else sigs
                  let sigs = Command (DisplayHitPointsChange (targetIndex, -damage)) :: sigs
                  withSigs model sigs
              | ConsumeCharacter1 (consumable, sourceIndex) ->
                  let time = World.getTickTime world
                  let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time CastCycle) sourceIndex model
                  let item = Consumable consumable
                  let model = { model with Inventory = Inventory.removeItem item model.Inventory }
                  just model
              | ConsumeCharacter2 (consumable, targetIndex) ->
                  let time = World.getTickTime world
                  let rom = screen.Parent.GetModel<Rom> world
                  let healing =
                      match consumable with
                      | GreenHerb -> 50 // TODO: pull from rom data
                      | RedHerb -> 500 // TODO: pull from rom data
                  let model = BattleModel.updateCharacterState (CharacterState.changeHitPoints rom false healing) targetIndex model
                  let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time SpinCycle) targetIndex model
                  let displayHitPointsChange = DisplayHitPointsChange (targetIndex, healing)
                  let playHealSound = PlaySound (0L, Constants.Audio.DefaultSoundVolume, Assets.HealSound)
                  withCmds model [displayHitPointsChange; playHealSound]
              | ChargeCharacter sourceIndex ->
                  let time = World.getTickTime world
                  let model = BattleModel.updateCharacter (CharacterModel.setAnimationCycle time (PoiseCycle Charging)) sourceIndex model
  