It’s been a while since I have posted. This is due in part to not being able to get enough time on Sojour and also due to the size of the current task in-hand. That said, progress has been made!
I guess the first question for me to answer is ‘What are rolling dates?’
I feel that the easiest way of answering this question is to firstly explain what non-rolling dates are.
Calendars that have non-rolling dates are characterised by each month starting on the same day of the week:
The above example shows two different seasons from the Runequest Gloranthan calendar. Each season starts on a very specific day – Freezeday. This would still apply even if I was to go to a different year: Sea Season’s first day will always be Freezeday.
It’s this lack of relative motion between the days and their months that make this Gloranthan calendar a non-rolling calendar (otherwise known as a fixed calendar).
It turns out that many role playing game systems use non-rolling calendars as they are the simplest to use in terms of gameplay. Examples of games using non-rolling calendars are Runequest, Dungeons & Dragons and Traveller.
In direct contrast, the Gregorian calendar, as used in the West on Earth has months that do not start on the same day. This is the case even when looking at the same month over many years.
For example, April 2023 starts on Saturday, whilst April 2024 starts on a Monday.
These variations in the start day occur because the day of the week, Sunday to Saturday, roll independently of the month that they are in. They always form a full seven day week even when crossing monthly boundaries.
It’s this that makes the Gregorian calendar a rolling calendar.
Now, it might come as a shock to most people, but Sojour has never natively supported rolling calendars!
Some of you will be reading the above paragraph in disbelief and will be pointing to Sojour’s built in Gregorian calendar as evidence to the contrary.
However, Sojour’s Gregorian calendar is a special case. Sojour does not use its calendar system’s time-units to model the Gregorian calendar. Instead, it uses the default Gregorian calendar provided by the operating system. It then seamlessly integrates that calendar with Sojour’s user interfaces to provide the illusion of rolling date support.
The big give away is that unlike other calendars, you cannot edit it:
Much of the recent work has been centred around getting Sojour’s time-unit based system to be able to model rolling calendars like the Gregorian calendar. Enabling this will allow users to literally invent any calendar that they can imagine!
Today is a special day in that I finally cracked it! :

The above screenshot doesn’t look too significant, however it represents a huge step-up in Sojour’s calendar modelling capability. That’s because it has managed to model a rolling calendar – the Gregorian Calendar – using its own built-in editor and time-units!
The system even takes leap years into account:
As an aside, Sojour can model leap days, weeks, months or whatever else you can imagine. For example you could easily invent a calendar that has 4 leap days that occur every 6 years 🙂
Coding the month view to support rolling calendar dates was a right royal pain. The first issue is that the 1st can occur on any day! So the 1st will invariably not start in the first cell of the month view and will tend to move around.
In addition, some months will have more, or less rows (weeks) than other months and all of this has to be calculated:

Sojour’s rolling dates are really powerful. In the above Gregorian calendar it only has one set of rolling entities to drive those dates and that is a rolling entity group called ‘Days of the week’. However, I could quite easily go on to add many more rolling entity groups and map those to different time-unit levels.
In fact, you can even assign multiple rolling entities to the same level! For example, with the Gregorian calendar I could create another set of rolling entities called ‘Moon Phases’ and then assign those to the day level. The moon phases will then roll around independently of anything else as the days go by!
Sojour even allows you to associate images with your rolling entities and these will end up being visible on the calendar’s month view. In the above example we would see the different phases of the moon on each day.
The Gregorian calendar I created here is simply a proof of concept. I figured that if Sojour’s time-units could model the Gregorian calendar successfully, then in theory a user could create any calendar that they can imagine!
Whilst I have made a lot of progress, there is still a huge amount of work left and I suspect I will be on this feature for quite a while yet.
Hang on in there and have patience! Once released, Sojour will have one of the most powerful and flexible calendar systems ever released in a VTT!
Have Fun!
RobP






