Egregoria Devblog #5

If you want to know what Egregoria is about, here's the first post.

Project name change

Egregoria was previously named Scale, because I didn't really have an idea what name to pick.
It suited me for a while but didn't quite like it. I wanted a name better linked to the project's goal.

After chatting with friends about different possibilities, one of them sent me the wikipedia page about Egregore:
"Egregore is an occult concept representing a distinct non-physical entity that arises from a collective group of people."

That looked like exactly what I was looking for, since the objective is to visualize the soul of a city emerging from its citizens.
Thus was picked the definitive name of Egregoria.

Just for fun, here's a list of considered possibilities:

  • Citylife
  • Haken (named after Hermann Haken, pioneer of Synergetics)
  • Philab
  • Sentiant
  • Simantec
  • Urbangenics
  • Volvox


Since the last post 61 days ago, Egregoria got:

  • ~1.9k unique visits
  • 22 new stars
  • 170 new commits
  • 5,046 additions
  • 2,650 deletions


The first step toward making humans live somewhere is to generate the house layout. Generating the interior was also considered, but it was out of scope. It ended up being a few rectangles and a walkway.

You can see houses in green and workplaces in blue:

They're not actually connected to anything at the moment, but they should be soon.


Before generating buildings, most city builder games generate lots. Theses are areas where a building is later placed, and in general takes the form of rectangles.
You can generaly assign lots to different building classes such as residential, commercial or industrial.

Here, for example, is how Cities:Skylines generates their lots:

And here's Cities XL, where lots are simply squares placed along the road:

I chose the latter, since it was simpler and gave okay results:

It's not possible to chose the building class at the moment.

Scripting initial tests

Since Egregoria is a simulation, I felt that a scripting layer could be very useful.
After testing Dyon, Mun and Lua via mlua, I settled on Lua since it's very flexible and easy to work with.

As the first task for the scripting layer, I made integration tests for the car AI.
It uses headless binary and is launched from a command line interface.
The world is run for each test until all cars reach their objectives fast enough.

You can try the scenarios directly via a Scenarios window in Egregoria.

Here's is the only failing test at the moment, which has an issue dedicated to it, where three cars form a gridlock because they all want to let another one pass in a cycle:

Automated releases

GitHub actions are amazing, I already had CI setup for checking that master built but didn't have any release system.
Since I only code on Windows, I had no way to build the project for Mac and Linux easily.

So I setup a workflow to automatically release a new version when I tag a commit. It packs the project together for each OS and uploads it to GitHub releases.

You can see the latest release I put together for this post here.

GitHub issues

A month ago, I started to organize my work using GitHub issues, labeling them and making milestones with them.
This allows me to post progress on specific issues and manage everything easily.

This is also a way to publicly show the roadmap and to give opportunities for anyone to contribute.

And it happened! I got my first feature pull request done by skairunner (thank you!), on the "unparking is weird" issue.
After a few rounds of comments and chatting, the PR was eventually merged.


Commenting on GitHub can be great, but having real time communication is even better for small problems.
A Discord server is now available for the project!


This is a place to talk about the future, about issues you might have with Egregoria and other general discussions.

What next ?

Since issues are up and organized in milestones, I can show what's next using the milestone view:

As you can see there's still a bit of work, but it's getting there.

< Back to list