If all goes well, I should have a video to show you good folk this weekend.
I’m pretty sure you will be very impressed with what Sojour can now do! 😎
Remember ‘Keep Mum!’
Have Fun
RobP
If the last post was unexpected, this one is really unexpected!
This hotfix addresses this issue:
RPG-470 [Fix]: This fixes an issue with the conversations system crashing if there are no NPC’s on the journals. The system tries to focus on the first NPC there, and fails because there isn’t one, which results in a crash. This is now fixed!
Once again, apologies for the hassles! Hopefully this is the last hotfix!
Have Fun!
RobP
This is an unexpected post!
It turns out that the new save system was having issues on completely fresh installs – notably, it was complaining about missing files.
RPG-469 [Fix]: This fixes a bug where Sojour will complain if you attempt to save on a completely clean installation.
This issue shouldn’t affect existing users, just new installations.
Either way I recommend all users upgrade.
Have Fun!
RobP
Sojour 1.4.0.0 has finally been released!
This release contains many enhancements, though the primary one is a much more robust save and loading system, which should make your data a lot safer.
Changes to 1.4.0.0:
RPG-465 [Upgrade]: Upgraded Sojour to latest .net framework version – 4.8.1. In the rare case that your Windows system does not have this, you will need to pop over to https://dotnet.microsoft.com/en-us/download/dotnet-framework/net481 and download the runtime.
RPG-462 [Enhancement]: A new global setting has been added for event tables to toggle on or off the injection of the table name into journals.
RPG-461 [Enhancement ]: The main character toolbar and NPC toolbars now include a horizontal scroll bar that will appear when there are too many characters/npcs to display at once. Hovering over a character/npc on a map will scroll the character/npc into focus on the relevant toolbar.
RPG-460 [Enhancement]: Event tables can now be hidden from journals.
RPG-455 [Upgrade]: The WebView component has been upgraded to the latest version.
RPG-453 [Enhancement]: Sojour now has a new Save button that is supported by a very robust saving system. This system automatically creates backups and it also verifies a new file’s data before overwriting the original. In the event that the original is corrupted, Sojour will offer the user a chance to use the backup instead.
RPG-452 [Fix]: Ctrl-Clicking tokens and characters on the map now toggles conversations again. (This was broken in the big UI refactor release)
RPG-451 [Enhancement]: Sojour now compresses all images imported into it which should make the system more stable. It defaults to reducing an image’s in-memory size down to 25% of its original size! This setting can be altered under settings. In addition, Sojour now performs backups prior to all map imports to protect your data in the event of a Windows GDI crash.
RPG-450 [Fix]: Changing a character’s character sheet should now update the preview pane immediately.
RPG-449 [Fix]: The scaling token can now be moved on the map again! Also reduced the minimum size a token can be from 1 metre to 10 cms.
RPG-448 [Enhancement]: The find dialog for journals now incorporates a find previous button.
RPG-447 [Fix]: Sojour no longer assumes a mouse and keyboard are connected to the computer.
RPG-446 [Enhancement]: Users can now use physical dice when rolling on Sojour’s tables. There is a new field to allow the user to enter their dice roll with modifiers.
RPG-443 [Enhancement]: Dice expressions can now be included in table results to allow for some variability in numbers. Sojour also supports the use of dice expressions for table re-directs too.
In addition, there are many other undocumented fixes that got put in as a result of testing the enhancements above.
More information on the release can be viewed in the preview video which can be found here:
A few additional features were snuck into Sojour after the preview video was published. I’ll quickly go over these below.
First up, the main character toolbar got the same enhancements as the new NPC toolbar:
This means that a new scroll bar is included for when the number of characters overflow the space available. In addition, highlighting a character on the map now auto-scrolls the toolbar to focus on that character.
Event tables can now be hidden from the journal using a new toggle button:
This new button will allow users to hide sub tables from showing in the journal drop downs (unless they want them to show).
You also get a new global option to hide or show table names when events are injected into journals:
The above setting is on by default.
When switched on, journal table entries are pre-fixed with the table name:
The same journal entry with this setting turned off:
That’s it for this post!
I hope you all have a lot of fun with 1.4.0.0 😊
RobP
This is a short fly by post to talk about two more features that have been added to Sojour Release Version 1.4.
These two features were added as a direct result of customer feedback from the You-Tube preview video.
The main character toolbar now gets the same scroll bar enhancement that the NPC toolbar received!
This scroll bar operates in exactly the same way as the new updated NPC toolbar’s scroll bar does. It will appear only where necessary.
The next requested enhancement is for tables. These can now be selectively hidden or shown from the Journal’s main drop down by toggling a new button on the upper right of the table:
For example, consider this scenario, we have three encounter tables:
The user is only meant to roll on the Encounters table. The other two are simply sub-tables that the Encounters table will occasionally roll on and are not meant to be directly accessed by the user.
Both of the Advanced Encounters tables have been set to be hidden from all journals.
From a journal, the result is this:
The two Advanced Encounters tables are now hidden!
This functionality will help streamline the list of tables available in the journals drop down to only those a player should be using!
That’s it for this fly by post. Only two additional enhancements, but I think they will make all the difference and I would like to thank the customers for providing the feedback.
From tomorrow onwards, I’m updating the manual, so I will have to freeze this release.
The result of this is that there will be no further new features in this release.
However, if you have ideas for new features, keep them coming! They will appear in a subsequent release.
Have Fun!
RobP
I have decided to temporarily put down the calendar Mk2 work to get out some fixes and enhancements out to you good folk. This is exactly what I did last year before Christmas for custom folders.
The idea is that once this release is out I will be going back to calendar system.
The reason the calendar system is taking so long is due to its flexibility. This leads to an inordinate number of corner cases each of which have to be tested. It’s amazing how many of them are exhibiting issues. The calendar work is headed the right way, but it’s going to take time!
Version 1.4 primarily focuses on how Sojour saves your data, though there are other enhancements that will be discussed below.
Why a new save mechanism?
It’s because over Sojour’s two years of public releases I have had 3 or 4 reports of users losing data due to the main Sojour.dat file being corrupted. This seems to happen when a network drive goes away during a save, or when Sojour itself crashes – which can happen during large image imports due to limitations with the Windows GDI.
To that end I decided to completely revamp the save system in order to prevent the core Sojour files ever being corrupted.
Sojour has moved away from an opaque system of saving frequently in the background, to one where the user has to explicitly choose to save their data – though there are exceptions to this.
To achieve this, Sojour got a brand new Save button on the main toolbar:
This save button saves almost everything, except PDF’s. This is a limitation of the free PDF component that Sojour uses. To save the PDF’s you have to use the save button directly on the PDFs themselves. (I’m looking at replacing this component with a more expensive commercial one, but that is a future endeavour)
Hovering over the new save button displays how long it was since your last save. We can see that this was 2 minutes ago in the above image.
If you change anything significantly within Sojour, the save button will change to let you know:
It might seem a backward step to remove the continuous background saving, but there are two main reasons for this:
The loading and saving now takes long enough that you will see a window telling you what’s going on:

Sojour has similar windows for loading and updating.
Although the system is now primarily a manual one, there are some occasions where Sojour will automatically save your data. These are:
Closing Sojour is an obvious use case, the other two items below it will need further explanation.
First up the map import.
Sojour initially imports all images using the Windows GDI’s Image class. I think it would be fair to say that this class is somewhat flaky when it comes to large images and it does occasionally crash. Sometimes, the crashes are so severe that they can take down Sojour (even with protective code to prevent this).
Performing full saves prior to the map imports mean that in the event of anything going wrong, you do not lose your data.
As for the latter item – automatic saves – they have always been in Sojour, but they are now a little more in-your-face as they display a window when the saves are happening.
By default, Sojour is set to automatically save every hour, but you can change this, or even disable it if you want to:
What makes the new system safer?
Simples, it’s the way it saves the three most important files within Sojour: Sojour.dat, AssetTreeView.dat and AppStatus.dat.
The first thing that Sojour does is to create duplicate versions of the files it is about to save. These duplicates are pre-pended with ‘PREVIOUS_VERSION_’. These can be seen below:
The next thing that happens, is that Sojour will then save its data into a temporary file which will be prepended with the words ‘VERIFICATION_TEST_’.
This is a file that the user will never normally see – unless something goes wrong.
Saving to a temporary file rather than directly to the original offers us the opportunity to verify its contents prior to overwriting the original file.
The screenshot below shows a paused Sojour within the debugger so that you can see this temporary file:
Sojour then verifies that file’s integrity by loading it in the background. If this verification step succeeds, the verification version of the file is copied over the original file – in this example it would be Sojour.Dat.
This system has several advantages over the old system:
This is a much more ‘enterprise’ level system than the original and one that I could not break, even under some rather arduous conditions.
That’s the new file system mechanism. What else got added?
First up is a new NPC bar for the journals:
The new bar is much larger than the original and now incorporates a scroll bar that will automatically appear and disappear as needed. This means that you can add as many NPC’s to your map, without the NPC bar cutting them off.
Waving your mouse cursor over an NPC on the map will scroll the NPC bar to bring the relevant NPC into view whereupon it is temporarily highlighted in light blue. The same also happens in reverse too.
This should make it much easier to associate NPC map tokens with their toolbar counterparts and vice-versa.
Another change added to Sojour is a new ‘Dice Roll’ field for lookup tables.
This field allows a user to enter external dice results, rather than have Sojour roll the dice:
A typical use case for this field is for when the user wants to roll physical dice on one of Sojour’s tables. Simply pick a table, roll your physical dice, then enter your dice result into that field along with modifiers. This will activate the chosen table with he results of your physical dice!
As an aside, the reason for the new UI colours is to enable users to easily associate the tables drop down list with the dice roll field – as one directly affects the other.
Another enhancement added to Sojour’s tables is the ability to insert dice expressions into your table results:
When this table is run a few times you could get results similar to this:
Thanks to the dice expressions, we how have a variable number of creatures that can turn up for each table row!
The tables support all four dice expression formats that the journals do (it’s the same code) and you can make those expressions as simple or as complex as you like.
Before we finish with tables and dice expressions, there is one more thing that you can do with them and it is exceptionally powerful!
You can now use dice expressions with table name redirects:
For the above screenshot, if the system (or user) rolls a 7 on the Encounters table, Sojour will then roll a 1d2 dice (an impossible dice in real life, but one that Sojour can roll). The result of this 1d2 dice determines which Advanced Encounters table the Encounters table will refer to.
For example, if it rolls a ‘1’, it will refer to the ‘Advanced Encounters 1’ table and if it rolls a ‘2’ it will refer to the ‘Advanced Encounters 2’ table.
This is a very powerful mechanism that allows you can go completely nuts and link as many tables together as you want! 🙂
Another new feature that got added is a ‘Find Prev’ button to the Journal Find window:
This should make finding things in your journals a lot easier!
The new table’s features and the find enhancement were both customer requested enhancements. If you have any ideas, send me an email using the address at the front of the manual and I’ll see what can be done!
Another thing that got upgraded is the image import function.
As noted earlier, the Windows GDI is somewhat flaky, especially with bigger images.
To get around this, Sojour now compresses all images imported into it via file or screenshot.
The compression setting can be set using a new setting within the Settings dialog called Graphic Import Quality:
Image compression makes a huge difference to memory usage.
For example, here is a large map imported with the previous version of Sojour:
38.2Mbs! That is a large image file.
Here is the same file imported with this new version of Sojour:
Note the difference in size.
The newly imported map is 1.52mb vs the 38.2mb of the original import. That’s quite a saving – around 25 times smaller for no appreciable loss of quality!
This vast reduction in image size should make Sojour a lot more stable when importing large images.
A full list of changes and fixes will be produced nearer the time of release.
I guess the next question is: ‘When can I get this version?’
The answer is in around 1 or 2 weeks time, assuming a fair wind.
The coding is done, but that leaves the large manual and all its screenshots to update – this is why the release is getting delayed. On the plus side, it gives me more time to exercise the new functions.
Also, for those that don’t know, all Sojour enhancements are free for paying customers!
That’s it for this post!
Have fun!
RobP
Lord Gwydion over at RPG Frequencies has discovered a way to use embedded web pages within Sojour!
To be honest, I had no idea you could do this!
One thing for sure, I’m now thinking that Sojour needs to be able to host web pages natively as this is exceedingly useful!
If you want to see how to do it, pop over to the RPG Frequencies YouTube on this link:
Have Fun!
RobP
A quick fly-by update to let you good folk know where we are.
Development has been slow, mainly because I’m finding trouble getting the time together. That’s completely my fault, as I have far too many hobbies!
I’m still working on the Mk2 Calendar system but we have progress!
Firstly, we are back where we were – in that the calculation and display systems are now fully operational again:
In addition, multiple rolling entities can now be added. In the above screenshot we are just using one set of rolling entities called ‘Days of the Week’. But what if we also added phases of the moon?
Here is what the calendar looks like with phases of the moon added:
Not entirely realistic. However, rolling entities do support a skip function. Given that these phases tend to happen every 7 days in real life, I have decided to set the ‘Day Skip’ to six. eg there will be six skipped cells before the next rolling entity triggers.
The results?
It is starting to look a little more ‘real’, though I did randomly set the synchronisation point on the previous screen (aka Start Year and Start Rolling Entity), so these moon phases will not be the ones you will see in real life – unless I’m very lucky.
The above functionality will enable people to to add special rolling events in the form of iconography or text to their calendars. This should benefit many RPG calendars. For example the Runequest Gloranthan calendar should show the phases of the Red Moon as that moon directly affects the strength of Lunar magic. This system makes it very easy to add those phases!
Can we go further? Maybe by adding a third rolling entity?
This new set comprises of 5 random pictures in a fixed sequence. Adding the new sequence results in a calendar that looks like this:
In addition, I can also apply an independent ‘Day Skip’ to the new rolling entities. In this case I will specify a skip of 2 cells:
The result?
As you can see in the above screenshot it all works perfectly!
Plus, as you would expect, these rolling entities roll properly across month boundaries.
Here is a screenshot of the previous month:
Note that the sequences of rolling entities, the days, moon phases and the other images carry over across the month boundary!
What about going a month forward?
Going forward a month also results in the three sequences from each rolling entity group carrying on correctly across the month boundary 😎
Plus, remember, that the Gregorian calendar that you see in the above examples is created from first principals using time units and rolling entities – no operating system calendar components are used! Sojour’s calendars also go a lot further forward and a lot further backward in time than the Windows calendar too – see this post for more information.
None of this post probably makes much sense right now, but it will do when I put a video together explaining this new powerful system and how it will help you create any calendar that you can imagine!
A lot of progress with the Mk2 Calendar system, but still a lot more to do.
And for those that don’t know, if you buy Sojour, all updates are free 🙂
That’s it for this update!
Have Fun!
RobP
Rather than stay in a black hole whilst working on the Calendar Mk2 system, I thought, that instead, I’ll provide some regular updates.
These updates might not necessarily prove useful in of themselves, but at least they’ll let you folk know that I’m still working on things.
In the last post I alluded to the fact that I had refactored the code in the calendar backend without having updated the UI to use that code (Doh!). This resulted in various UI elements simply not working, or in extreme cases crashing!
A bit of a backward step considering we did have a mostly working system!
I’m now at a point where the UI is starting to work again.
Although a hard slog, I think the detour is worth it. The result is that the new code runs faster and because it is better encapsulated, the higher level code in the UI is also a lot simpler!
The hard bit is working out what needs to stay, what needs to go and what needs to be modified. This is quite a difficult task when one considers the complexity of the modelling (it’s complex because it can model any calendar you can imagine!)
Here are some screenshots that show the UI is now back and working… mostly….
Firstly we can now view mark 2 calendars again:

The above screenshot shows a Gregorian Calendar created with Sojour’s built in tools.
At this point, the structure of a year has been defined, but the Days of the Week rolling entities have not been switched on. The result is a calendar month with the correct number of days but no real context.
Next up, I switch on the Days of the Week rolling entities:

Straight away we can see a number of things have kicked in.
Firstly, days of the week now appear in the calendar and you can see that the relevant time units in the tree-view have been properly overridden by the rolling entities.
The other notable feature is the way the month view has automatically added space elements to allow all of the same days of the week to align in the correct column (the additional blank row at the bottom is an existing bug that will be fixed).
The fact that this is working at all, is somewhat miraculous, given how different the new backend code is.
Next up I tried turning off the upper header bar to see what would happen:
Right away, the system removes that header bar.
It has also realised that with no column headers, the calendar cells no longer have context – i.e. the day of the week. The system remedies this by automatically adding the day of the week to each calendar cell.
Speaking of calendar cells, these are not the finished product. The cells are currently rudimentary and are designed so that I can check the calendar calculations are working correctly. They will look a lot better and incorporate a lot of new functionality once completed.
Everything seems in order, although the ‘spare-row’ bug is still there.
Finally I turn off Days of the Week to make sure the tree-view reverts back to its original settings:

And it does! All good!
There is still a huge amount of work to do as I keep identifying additional use-cases that need to be covered off by the code. The good news is that the newer code is much better segregated, which makes adding new functionality like this a cinch.
The effort ploughed into this feature, so far:

That’s a lot of commits and development time!
Whilst this feature takes me away from Sojour’s more regular updates, I’m a firm believer that it is essential for Sojour’s longevity.
Sojour needs a calendar system that can model rolling calendars, which right now it cannot do. The current version cheats with regard to this feature by having the Gregorian calendar use the Windows Calendar! In contrast the new system does not do this and recreates all calendars from first principals.
That’s it for this mini update!
Have Fun!
RobP