I might be coming into this conversation late, but I am assuming by announce you mean using the chat output. You can do that with the metascripts if you batch everything up (so that your announcement can be made to wait until ChatSetAttr has had a chance to do the updating). Here is a simple example using just words: !{{ !modattr --name MacroMule --Tension|[[[[{@{Tension},6}<5]]*1 +[[{@{Tension},0}>6]]*(-6)]] (^)The tension is now at @^(MacroMule.Tension). {^& delay .3} }} Or using the inline roll instead of checking the Tension value. This one doesn't require the delay: !{{ !modattr --name MacroMule --Tension|[[[[{@{Tension},6}<5]]*1 +[[{@{Tension},0}>6]]*(-6)]] The tension is now at $[[2]]. }} And a slightly "showier" version using the default roll template. This could be changed to any roll template in your game: !{{ !modattr --name MacroMule --Tension|[[[[{@{Tension},6}<5]]*1 +[[{@{Tension},0}>6]]*(-6)]] (^){^&template:default} ({)name=Tension Updated(}) ({)New Value=$[[2]] (}). }} Another possibility is that you use some token on the game board to signal what the tension should be. (A number, or tokens that *are* numbers, or a bar value that goes from green to red... lots of ideas.