Internal development notes, very slightly cleaned up and commented a week later.
TL;DR: performance optimizations, cross platform Steam Cloud saves, Steam Workshop support for mods and translations.
For the past two weeks we’ve been very busy with some TOP SECRET internal deadline, having a mini stabilization phase for the game and preparing promotional materials. For this reason I didn’t update the blog last week. Rest assured that much was done, more than 100 individual commits, but it’s all part of the secret deadline. Max was still this past week and this current week very involved with that, but I had less work and so went back to the feature backlog for V3.
- optimize civ matcher with some sort of cache use copy for return game tick based for discarding store in civ object - optimize world tick the baseline cost for bridged systems is too high, because of too many available hooks with an inefficient calling implementation lookup based on string, fancy vararg calling system, etc -> implement a much faster shortcut with direct s7_call proto in BridgedSystem::process lookup of scheme symbol and keep in var call is direct s7_call, arg list is built without reflection helper callPre/Post takes mandatory entry hint add cache entry lookup to BridgedVirtuals helper: void* cachePre/Post(int entry) now callers can check for hook existence and skip all processing if hook exists, they can take slow route or use cached entry for fast direct call, as desired effort is being defeated by the AutoReflection not detecting reflection:skip for the cache vectors... idea: add "NR" at end of name to skip it... add a BridgedSystemFull which can override everything, and keep the existing BridgedSystem only supporting a post-process override - also do BridgedTool and BridgedDisplaySystem
Some long overdue optimization pass was done this past week. One of the worst culprits was whacked, with the aggressor system doing a linear search over every civ for each range check. This has now been cached per-frame.
The need for the world tick optimization surfaced after testing the game with two dozen ships. It was very clear the baseline cost for running a World instance was too high, even if the World is small and mostly empty. Since most systems are now implemented in Scheme the tick has to call into Scheme code. The bridged implementation of EntitySystem exposes all its virtual methods as overridable by Scheme code. So, for every tick, it was looking up, by string, six Scheme procs. This is useless 99% of the time, since only one method is required to be overrided for virtually all systems. Those checks have been removed, with all systems now using a single virtual call over
::process. And the results have been cached. The speed up has been 5x, and in case it’s needed, there’s still ways to make it faster in the future.
- update steam sdk - update steam build - re-enable auto steam cloud with proper root overrides for each platform tentative fix for linux to use $XDG_DATA_PATH - redo steam pipe upload scripts - check if abs paths are getting into save files yes, they are try to move all of them to file aliasing various tmx references references to floor-like objects in a planet landing how is this happening? the planet-editor is overriding the model for those objects with its autoprobed files
An historic bug from the V2 days has been fixed. V3 now has proper cross-platform Steam Cloud save support. V3 has also been updated to the latest Steamworks SDK.
- steam workshop mods prepare scripting bridge to support per-mod paths, instead of the current 2-level auto scanning system enable UGC in steamworks mod creation tool: new developer section in options has dialog to create new mod fields for all metadata implement submit flow as described in docs has listing of all UGC for the game for the current Steam user allows to update existing UGC metadata, including re-upload and changing content folder no deletion, just change visibility to private, as per docs mod selection when creating a new game button for opening the workshop in the steam overlay list all subscribed, downloaded mods for the current Steam user allow to select which ones are enabled for the new game be ready for async sub/unsub - add support for workshop translation mods add toggle for the tag in the developer tool must appear in lang options listing must be available during game load add workshop button to lang options investigate to open the overlay for a single tag - refresh language mod panel while displayed
And finally the big item for the week. V3 now has Steam Workshop support for mods. The first part is the mod uploader. This is a new tab in the options screen which allows users to upload new mods and update them:
After the mod is uploaded, it shows up in the Steamworks page:
Users can then visit Steamworks and subscribe to the mod, which will make it available for enabling when creating a new game:
There’s still work to do toward making mod making more approachable, by having examples and documentation done, but most of the pieces are now in place.