0 votes
by (120 points)
retagged by
So, iam using this code to make the ingame time
if (! setup.changeDate) {
  setup.changeDate = function(date, interval, units) {
    var d = new Date(date); // Don't change original date.
    switch(interval.toLowerCase()) {
      case 'years':
        d.setFullYear(d.getFullYear() + units);
      case 'quarters':
        d.setMonth(d.getMonth() + 3 * units);
      case 'months':
        d.setMonth(d.getMonth() + units);
      case 'weeks':
        d.setDate(d.getDate() + 7 * units);
      case 'days':
        d.setDate(d.getDate() + units);
      case 'hours':
        d.setTime(d.getTime() + units * 3600000);
      case 'minutes':
        d.setTime(d.getTime() + units * 60000);
      case 'seconds':
        d.setTime(d.getTime() + units * 1000);
    return d;


  • ​And my question is how to make it so, for example when the time of each day hit 22:00, to force player to a passage where he can sleep. As i dont quite understand the code, since i copied it ( but it works) iam not sure which is the varriable for case 'hours'


3 Answers

+1 vote
by (63.1k points)
How are you using this code?  Can we see an example from within you passages?
by (120 points)
I have typed it in the Edit Story JavaScript tab. The code is creating an ingame time which i can control with <<set $now to setup.changeDate($now, 'minutes', 15)>>   for example, but i want to make it, so when it hits certain time, to force the player into a certain passage.
by (120 points)
And i have <<set $now to new Date(2017, 11, 1, 9, 0, 0)>>  in the StoryInit passage
0 votes
by (6.2k points)
I don't know how to Sugarcube very well, but the Harlowe version of what you're looking for is the (goto:) macro.
0 votes
by (159k points)

note: The following solution is based on the information you supplied to @Chapel.

You can use the Javascript <Date>.getHours() function to obtain the number of hours that have past since midnight for a particular Date object. You can then use an <<if>> macro to compare that number against 23.

The following example creates a Date object, displays the current time of that object, then uses a <<link>> macro to allow the updating of the objects hours property. The link also use a <<replace>> macro the update the current time being shown, and uses the above mentioned check to cause the forwarding to the other passage via a <<goto>> macro.

<<set $now to new Date(2017, 11, 1, 9, 0, 0)>>

time: @@#time;<<print $now.toTimeString().split(' ')[0]>>@@

<<link "add hour to current time">>
	<<set $now to setup.changeDate($now, 'hours', 2)>>

	/% Update the displayed time. %/
	<<replace "#time">><<print $now.toTimeString().split(' ')[0]>><</replace>>

	/% Check if 23:00, which is the 23rd hour. %/
	<<if $now.getHours() is 23>>
		<<goto "Other Passage">>

... it should be noted that there are other places that the same check could be used to achieve the same result.