anchor.diff:              | FadeSong ->
                   let world = World.fadeOutSong Constants.Audio.DefaultTimeToFadeOutSongMs world
                   just world
  -            | DisplayDamage (targetIndex, damage) ->
  +            | 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
  
positive.code:                           Content =
                              Effects.TextSprite
                                  (Effects.Resource (Assets.DefaultPackage, Assets.DefaultFont),
                                   [|Effects.Text (scstring damage)
                                     Effects.Color
                                      (Effects.Set, Effects.Linear, Effects.Once,
                                       [|{ TweenValue = v4One; TweenLength = 30L }
                                         { TweenValue = v4One; TweenLength = 30L }
                                         { TweenValue = v4 1.0f 1.0f 1.0f 0.0f; TweenLength = 0L }|])|],
                                   Effects.Nil) }
                      let world = entity.SetEffect effect world
                      let world = entity.SetSize v2Zero world
  
negative.code:                 just model
              | TakeConsumable (consumable, targetIndex) ->
                  let time = World.getTickTime world
                  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
  