anchor.diff:                  just model
               | TakeConsumable (consumable, targetIndex) ->
                   let time = World.getTickTime world
  -                let target = getCharacter targetIndex model
  -                let model =
  -                    updateCharacter (fun character ->
  -                        let state = character.CharacterState
  -                        match consumable with
  -                        | GreenHerb
  -                        | RedHerb ->
  -                            let cure =
  -                                match consumable with
  -                                | GreenHerb -> 100 // TODO: pull from rom data
  -                                | RedHerb -> 500 // TODO: pull from rom data
  -                            let hitPoints = state.HitPoints + cure
  -                            { character with CharacterState = { state with HitPoints = hitPoints }})
  -                        targetIndex
  -                        model
  -                if target.CharacterState.HitPoints > 0 || target.CharacterState.IsEnemy then
  -                    let model = updateCharacter (CharacterModel.setAnimationCycle time SpinCycle) targetIndex model
  -                    just model
  -                else withSig model (Message (ResetCharacter targetIndex))
  +                let healing =
  +                    match consumable with
  +                    | GreenHerb -> 100 // TODO: pull from rom data
  +                    | RedHerb -> 500 // TODO: pull from rom data
  +                let model = updateCharacter (CharacterModel.changeHitPoints healing) targetIndex model
  +                let model = updateCharacter (CharacterModel.setAnimationCycle time SpinCycle) targetIndex model
  +                withCmd model (DisplayHitPointsChange (targetIndex, healing))
               | Tick ->
                   if World.isTicking world
                   then tick (World.getTickTime world) model
  
positive.code: 
      type [<NoComparison>] BattleCommand =
          | FadeSong
          | DisplayDamage of CharacterIndex * int
          | InitializeBattle
          | FinalizeBattle
  
  
negative.code:             | FadeSong ->
                  let world = World.fadeOutSong Constants.Audio.DefaultTimeToFadeOutSongMs world
                  just world
              | DisplayHitPointsChange (targetIndex, delta) ->
                  match tryGetCharacter targetIndex model with
                  | Some target ->
                      let (entity, world) = World.createEntity<EffectDispatcher> None DefaultOverlay Simulants.BattleScene world
                      let colorOpaque =
                          if delta < 0
                          then v4 1.0f 1.0f 1.0f 1.0f
                          else v4 0.0f 1.0f 1.0f 1.0f
                      let colorTransparent =
                          colorOpaque.WithW 0.0f
                      let effect =
                          { EffectName = ""
                            LifetimeOpt = Some 60L
  