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:                         (damage, model)
                  if target.CharacterState.HitPoints > 0 || target.CharacterState.IsEnemy then
                      let model = updateCharacter (CharacterModel.setAnimationCycle time DamageCycle) targetIndex model
                      withCmd model (DisplayDamage (targetIndex, damage))
                  else withMsg model (ResetCharacter targetIndex)
              | ChargeCharacter sourceIndex ->
                  let time = World.getTickTime world
  
negative.code:                           Content =
                              Effects.TextSprite
                                  (Effects.Resource (Assets.DefaultPackage, Assets.DefaultFont),
                                   [|Effects.Text (scstring (abs delta))
                                     Effects.Color
                                      (Effects.Set, Effects.Linear, Effects.Once,
                                       [|{ TweenValue = colorOpaque; TweenLength = 30L }
                                         { TweenValue = colorOpaque; TweenLength = 30L }
                                         { TweenValue = colorTransparent; TweenLength = 0L }|])|],
                                   Effects.Nil) }
                      let world = entity.SetEffect effect world
                      let world = entity.SetSize v2Zero world
  