Last updated: 19 Jan 24 19:52:43 (UTC)

Timing gameplay (e.g. escape room)

Start button:

<<button "start">>
<<set $startTime to Date.now()>>
<<set $stDisplay to new Date()>>
<<goto [[Q1]]>>
<</button>>
<<button "start">>
<<set $startTime to Date.now()>>
<<set $stDisplay to new Date()>>
<<goto [[Q1]]>>
<</button>>

End button:

<<button “end”>>
            <<set $endTime to Date.now()>>
            <<set $enDisplay to new Date()>>
            <<set $seconds = 1000>>
            <<set $minutes = 1000 * 60>>
            <<set $timeMs = $endTime - $startTime>>
            <<set $timeMin = $timeMs / $minutes>>
            <<set $min = Math.trunc($timeMin)>>
            <<set $s = $timeMin - $min>>
            <<set $sec = $s * 60>>
            <<goto [[results]]>>
<</end>>
<<button “end”>>
            <<set $endTime to Date.now()>>
            <<set $enDisplay to new Date()>>
            <<set $seconds = 1000>>
            <<set $minutes = 1000 * 60>>
            <<set $timeMs = $endTime - $startTime>>
            <<set $timeMin = $timeMs / $minutes>>
            <<set $min = Math.trunc($timeMin)>>
            <<set $s = $timeMin - $min>>
            <<set $sec = $s * 60>>
            <<goto [[results]]>>
<</end>>

Show results:

You made it out in $min minutes and $sec second<<if $sec > 1>>s<</if>>!

Your start time: $stDisplay
Your end time: $enDisplay
You made it out in $min minutes and $sec second<<if $sec > 1>>s<</if>>!

Your start time: $stDisplay
Your end time: $enDisplay

Including a count-up timer on screen:

In a “PassageHeader” (or footer, I suppose) passage:

<span id="minutes">00</span>:<span id="seconds">00</span>
<hr>

<<silently>>
<<repeat 1s>>
    <<if $mcounter < 6>>
        <<set $scounter += 1>>
            <<if $scounter >= 0 && $scounter <= 9>>
                <<replace "#seconds">>0$scounter<</replace>>
            <<elseif $scounter >=10 && $scounter <= 59>>
                <<replace "#seconds">>$scounter<</replace>>
            <<elseif $scounter == 60>>
                <<set $scounter to 0>>
                <<set $mcounter += 1>>
                <<replace "#seconds">>00<</replace>>
                <<if $mcounter >= 0 && $mcounter <= 9>>
                    <<replace "#minutes">>0$mcounter<</replace>>
                <<elseif $mcounter >=10 && $mcounter <= 59>>
                    <<replace "#minutes">>$mcounter<</replace>>
                <<elseif $mcounter == 60>>
                    <<set $tTime = 3600>>
                    <<goto [[results]]>>
                <</if>>
            <</if>>
    <<else>>
        <<stop>>
    <</if>>
<</repeat>>
<</silently>>
<span id="minutes">00</span>:<span id="seconds">00</span>
<hr>

<<silently>>
<<repeat 1s>>
    <<if $mcounter < 6>>
        <<set $scounter += 1>>
            <<if $scounter >= 0 && $scounter <= 9>>
                <<replace "#seconds">>0$scounter<</replace>>
            <<elseif $scounter >=10 && $scounter <= 59>>
                <<replace "#seconds">>$scounter<</replace>>
            <<elseif $scounter == 60>>
                <<set $scounter to 0>>
                <<set $mcounter += 1>>
                <<replace "#seconds">>00<</replace>>
                <<if $mcounter >= 0 && $mcounter <= 9>>
                    <<replace "#minutes">>0$mcounter<</replace>>
                <<elseif $mcounter >=10 && $mcounter <= 59>>
                    <<replace "#minutes">>$mcounter<</replace>>
                <<elseif $mcounter == 60>>
                    <<set $tTime = 3600>>
                    <<goto [[results]]>>
                <</if>>
            <</if>>
    <<else>>
        <<stop>>
    <</if>>
<</repeat>>
<</silently>>

On the button that starts the game, add:

<<button …
<<set $scounter to 0>>
<<set $mcounter to 0>>
<</button>>
<<button …
<<set $scounter to 0>>
<<set $mcounter to 0>>
<</button>>