Clock
XanMag
01 Nov 2017, 22:02I should have posted this before I started making a game... but, that's how I roll...
With every move in the game, I have a '+1' script running. I would like to sync this with my digital alarm clock.
Game starts at 11:15pm. Five turns pass and it is 11:20. I would like the clock to reflect that.
It is a pretty short game, only lasting 45-60 turns, and I probably could do 45-60 Else If scripts to print out the time on the clock...
x clock
Else If Integer Count = 27, then print message "the clock reads 11:42"
Else If Integer Count = 28, then print message "the clock reads 11:43"
etc, etc...
Seems like a pain in the ass, but certainly doable.
Is there an easier way without janking up the stuff I have already implemented? I do NOT want a time posted in any panes or anything like that. It's only relevant when the clock is examined.
Thanks in advance.

K.V.
02 Nov 2017, 00:30x = game.timeelapsed
game.hours = x / 3600
time = x%3600
game.minutes = x/60
x = time%60
game.seconds = x
msg ("<br/>Game time: " + game.hours + ":{if game.minutes<10:0}" + game.minutes + ":{if game.seconds<10:0}" + game.seconds + "<br/>")

K.V.
02 Nov 2017, 01:03I believe this is what you REALLY want:
<start type="script">
clock.x = 15
clock.time = "11:"+clock.x
</start>
<object name="clock">
<inherit name="editor_object" />
<look>It reads: {clock.time}.</look>
</object>
<turnscript name="ClockScript">
<enabled />
<script>
clock.x = clock.x + 1
if (clock.x = 45) {
clock.time = "12:00"
//msg ("You ran out of time!<h3>YOU SUCK!</h3>")
//finish
}
else {
clock.time = "11:"+clock.x
}
</script>
</turnscript>
Clocking
You can see a clock.
> look at clock
It reads: 11:15.
> look at clock
It reads: 11:16.
> look at clock
It reads: 11:17.
> look at clock
It reads: 11:18.
> look at clock
It reads: 11:19.
> look at clock
It reads: 11:20.
mrangel
02 Nov 2017, 12:27If you already have a Count variable, then…
msg ("the clock reads "+((((Count + 15)/60+10)%12)+1)+":"+Left("0"+((Count+15)%60),2))
or a rough approximation of what it looks like in the GUI:
- print message [expression]
"the clock reads "+((((Count + 15)/60+10)%12)+1)+":"+Left("0"+((Count+15)%60),2)
jmnevil54
02 Nov 2017, 14:58I'm making a clock tutorial now. (Half serious, half sarcastic, half angry and furious, half tired) I hope you're happy!
jmnevil54
02 Nov 2017, 17:01...Nevermind. The closest I got was printing that it was "Military Time: 9:0".
You can paste this on the look thing, to show the time.
Military Time: {game.hour}:{game.minute}
jmnevil54
02 Nov 2017, 17:06So if I type in "Military Time: {game.hour}: {if game.minutes<10:0} {game.minute}" I get:
Military Time: 9: {if game.minutes<10:0} 0
That figures....
mrangel
02 Nov 2017, 17:44Military Time: 9: {if game.minutes<10:0} 0
Hmm... trying to remember the restrictions in text markup. Is it that it supports =
but not <
? Or is it that the {if
requires an else clause (in which case {if game.minutes<10:0:}
might work?
jmnevil54
02 Nov 2017, 18:04Mrangel, I tried
{if game.minutes<10:0:}
but it didn't work. It might be the first thing, or some other thing.
hegemonkhan
02 Nov 2017, 18:14here's the doc for quest's text processor commands (if you're working with JS/outside of quest, then you can probably ignore this post):
http://docs.textadventures.co.uk/quest/text_processor.html
it's much more limited (though you can nest a bunch of 'ifs' I think), so you might just have to do 'normal' (the 'if' and String Concatenation) scripting
maybe try this:
{if game.minutes<10:0}:
// or:
"{if game.minutes<10:0}:"
// or:
"{if " + game.minutes + "<10:0}:"
jmnevil54
02 Nov 2017, 18:46I'm using the online version. So no.
I'm just here to try and help XanMag anyway. It looks like he's already got everything under control.

DarkLizerd
02 Nov 2017, 19:31try:
M=right("0" +game.minutes,2)
this will add a "0" in front of the minutes so that you get:
00, 05, 10, 15...
Oh... mrangel already said that... (just longer...)

K.V.
02 Nov 2017, 20:45game.timeelapsed
is a built-in attribute.
x = game.timeelapsed
game.hours = x / 3600
time = x%3600
game.minutes = x/60
x = time%60
game.seconds = x
msg ("<br/>Game time: " + game.hours + ":{if game.minutes<10:0}" + game.minutes + ":{if game.seconds<10:0}" + game.seconds + "<br/>")
msg ("<br/>Game time: " + game.hours + ":{if game.minutes<10:0}" + game.minutes + ":{if game.seconds<10:0}" + game.seconds + "<br/>")
This is the proper syntax {if game.minutes<10:0}
.
If you're trying to print that on the first turn, you have to use a SetTimeout(1)
to give Quest a second to assign a value to game.timeelapsed
.
NOTE: This must be in a turn script to work, too.
Here is an example game:
<!--Saved by Quest 5.7.6404.15496-->
<asl version="550">
<include ref="English.aslx" />
<include ref="Core.aslx" />
<game name="Easy clock example">
<gameid>21b48b6c-a07f-4da3-a955-a1180f2d632c</gameid>
<version>1.0</version>
<firstpublished>2017</firstpublished>
<start type="script">
SetTimeout (1) {
ClockFunct
}
</start>
</game>
<object name="room">
<inherit name="editor_room" />
<object name="player">
<inherit name="editor_object" />
<inherit name="editor_player" />
</object>
</object>
<turnscript name="ClockTurnScript">
<enabled />
<script>
ClockFunct
</script>
</turnscript>
<function name="ClockFunct"><![CDATA[
x = game.timeelapsed
game.hours = x / 3600
time = x%3600
game.minutes = x/60
x = time%60
game.seconds = x
msg ("<br/>Game time: " + game.hours + ":{if game.minutes<10:0}" + game.minutes + ":{if game.seconds<10:0}" + game.seconds + "<br/>")
]]></function>
</asl>
jmne,
- Did you have it in a start script?
It won't work on the first turn without a SetTimeout
- Did you change it around some?
You have game.hour
. I have game.hours
.
I also noticed you put game.minute
in one place and game.minutes
in another, all in the same line of code...

K.V.
02 Nov 2017, 20:57Here it is as a two-minute countdown:
<function name="GameTimeFunction"><![CDATA[
x = 120 - game.timeelapsed
time = x%3600
game.minutes = x/60
x = time%60
game.seconds = x
if (game.seconds < 10) {
secondsDisplayed = "0+"game.seconds
}
else {
secondsDisplayed = game.seconds
}
game.timeDisplayed = game.minutes + ":"+secondsDisplayed
msg ("<center><br/><b>[SYSTEM MESSAGE: Game-time remaining: "+game.timeDisplayed+" ]</b><br/></center>")
]]></function>
Start Script
SetTimeout (1) {
ClockFunct
}
Turn script
ClockFunct
Without the SetTimeout on the start script:
XanMag
02 Nov 2017, 21:14Just an FYI. KV's first suggestion worked like a charm for me. Thanks.
But... feel free to keep talking about clocks. =)

K.V.
02 Nov 2017, 21:36How many clocks can you count in opening of Back to the Future?
jmnevil54
02 Nov 2017, 21:45Military Time: {game.hour}:{if game.minute<10:0}{game.minute}
This works.
*Loser trumpet/trombone plays
Brie-brie-brieeeeeeeee.......
XanMag
02 Nov 2017, 22:00How many clocks can you count in opening of Back to the Future?
Total guess...
The Pixie
03 Nov 2017, 07:42To add a leading zero, yu can use PadString
.
http://docs.textadventures.co.uk/quest/functions/string/padstring.html
You could use it like this:
It is {=PadString(hours, 2 0}:{=PadString(minutes, 2 0}.

K.V.
03 Nov 2017, 09:46@ The Pixie
Nice!
I peruse the functions frequently, but there are still many that have slid right past me.
We should do up a Function of the Week thread.
☆The more you know...
(Remember that? During the commercial breaks when G.I. Joe, He-Man and She-Ra and all those cartoons originally ran?)
How many clocks can you count in opening of Back to the Future?
Total guess... 22.
That's the count I come up with, too. (Have you ever noticed the 'clock tower' clock, with the little man hanging from it? Because I never have until just now. I just found a 32-year-old Easter Egg! Whoo-hoo!)
🎵 Bum Bum-bah-BAH!!!
Hear ye, hear ye!
jmnevil54, an up-and-coming Quest Time Lord, has now coded a functional clock.
What will this mean for the players? Will there be time-trials?
More on this as it comes in...