(live: 1s)[(set: $timer to it - 1)]
(live: 1s)[$timer]
This would show the variable $timer as text, which would be counting down thanks to the first line. However, once a passage is loaded, it isn't constantly reloaded, even if some of the text should change, which is why there's a second (live:) macro - that would reload the text every second.
You could try this one instead, however if you wanted to use the (save-game:) macro, it wouldn't let you, because it's too complicated to save anything or something:
(live: 1s)[(set: $timer to it - 1)(replace: ?timer)[$timer]]
|timer>[$timer]
That would replace the text with the decreased version of itself every second, but this wouldn't let you save, and it's longer anyway, so I recommend the first one.