I’m using the latest versions of Twine and Harlowe
Okay. I’ve run into a problem with the (live:) macro again. But instead of digging into Harlowe docs, I’m going to ask my question here. This might seem stupid, but how do you differentiate a variable and the seconds suffix? For example, how would you do this? (live: $seconds s)[$seconds - 0.1)], would you put a special character between $seconds and s, or would the variable itself have to be 1s?
Regards, HouseonaTree 
1 Like
A little background:
1: The value passed to the (live:)
macro represents the Number of milliseconds to use as a delay.
2: When you write a “number” literal that includes a suffix (like 1.5s) you’re telling the system that it needs converts that value into an actual Number before using the value. In the case of the s suffix you’re telling the system it needs to multiple the numerical part of the literal by 1000.
eg. 1.5s becomes 1500 (1.5 x 1000).
You use the (print:)
macro to demonstrate this conversion. The following will output 1500.
number: (print: 1.5s)
So you achieve the outcome you simply need to multiple the number of seconds by 1000.
(live: $seconds * 1000)[$seconds - 0.1]
3: The $seconds - 0.1
content in the (live:) macro’s associated Hook will not cause value of $seconds
to change, that would require the usage of a (set:) macro.
(set: $seconds to it - 0.1)
Nor will it result in a mathematical expression being preformed, you would need to use a (print:) macro for that to occur.
(print: $seconds - 0.1)
4: Changing the value of your $seconds
variable will not alter the delay used by the active (live:)
macro. The following code demonstrates this fact, while the current value of the variable is decreasing, the delay between each iteration of the associated hook remains 5 seconds.
(set: $seconds to 5)
(live: $seconds * 1000)[{
(set: $seconds to it - 1)
seconds: $seconds; elapsed time: (print: (time / 1000))s
(if: $seconds is 0)[
(stop:)
]
}]