(Mid-)December updates


Hi everyone,

I thought it'd be a good time to write another update. We've made some decent progress but I'd also like to revisit the release date for the 0.3 update.

If you'd like to watch Solitarian's stream instead, it covers more or less the same things as this devlog:

Anyhow, as the release date goes, I'm going to need more time to finish the update so we'll be looking at a release in January instead. The issues I mentioned in one of the previous dev diaries (with rivers) will take some time to finish and I also took some detours to improve vegetation simulation. I don't want to rush things out as I worry this update may get attention of people who aren't familiar with the project yet and I don't want to give bad first impressions with half baked features.

On a more positive note, those detours may in the end help us improve the climate model as well. I often mentioned that attempting to simulate global climate and weather on a PC or a laptop is a hopelessly difficult task if you care about differences in temperatures as small as those that define some of the Koppen climates. As such, we don't have a dynamic wind map mode like that on nullschool.earth, which would require integrating Navier-Stokes equations for incompressible fluids, which isn't possible at the level of accuracy needed. Or so I though. I recently learnt a couple research papers on so-called Lattice Boltzmann methods. I won't go into technical details, wikipedia has a reasonable writeup on them if anyone is interested in further reading. In either case, they are much faster at the resolution and convergence times required by the game. I haven't rewritten the GCM to use the, but I did make a small demo for advection and diffusion of air. Here's a screenshot of that demo on which direction of the wind (to be more precise, the angle between the wind speeds vector and a vector pointing east) is encoded as hue. Solitarian's video has a section that shows how those winds propagate in time, at least until friction and dissipation prevent further movements.


The vegetation model was also improved. Running the simulation for a long time won't cause it to converge on a global forest anymore. Ratio of conifers to broadleaf trees is also more reasonable. Under the hood, the ratio of evapotranspiration to potential evapotranspiration is used as a proxy to better estimate climax vegetation.



We now also calculate edible primary production of local ecosystems and display that information as a separate map mode. It serves as a proxy for environments pressure towards nomadism. Tiles store a "buffer" of edible food and foraging over tile's edible primary production depletes local resources, forcing migrations.


Those migrations have their own map mode. Tribes migrate when local resources can no longer support their populations and seek a location within their claimed territory that can. They need to travel the distance tile by tile and sleep every night.

This map mode shows the percentage of local resources that is available for foraging. You can sort of see the migration history on it.


The migrations themselves have their own map mode, showing movement of currently migrating bands:


As I mentioned, bands only migrate within their claimed area. These claims depend largely on traversability of terrain and can change upon finished migrations, if the tribe finds their new location sufficiently attractive. Claimed areas are much larger than controlled areas and can in principle overlap with claimed areas of other bands. This doesn't need to lead to conflict, however, as population pressure may be low enough for all bands to mostly avoid each other.


I also started writing first optimizations for the city view, which allowed us to double the render distance. It's still got a long way to go before it runs at stable 60 fps on mid tier machines with kilometers worth of rendered terrain but we're starting to get to a place where entire settlements will be able to fit on the screen at once:


Other than that characters can now starve and die of old age, making nutrition meaningful. There is a separate map mode to show starvation per settlement:


Food can now also spoil, with spoilage rates influenced by temperature and moisture, which adds another dimension to properties of different regions. All things considered, the AI has a simple game it plays, trying to survive by going to nutrient rich areas. I'm currently working on UI and multiplayer synchronization so that this game is exposed to players as well.

Lastly, characters can now trade with each other within a single settlement, which will help with distribution of nutrients and decrease issues with starvation. Each settlement has its own local market that keeps track of prices and historic supply/demand. Basic economic principles are at play here, with prices increasing when demand exceeds supply and decreasing when supply exceeds demand.


One of the struggles in complex video game economies are those of liquidity. It's been claimed that it's one of the main issues leading to economic collapses in Victoria 2. SotE will avoid that problem by treating money and value in a relatively modern way, wherein debt can be created ad hoc between trusted parties even if nominal liquidity is lacking. This will be particularly important in gift economies and for late game banking. Right now, it enables exchange of goods without explicitly coding in barter or gifting behavior, decreasing complexity of the codebase. Since gift economies are often analyzed as primitive *debt* economies (due to norms of reciprocity), I think it's a reasonable implementation.

That's it for today! I'll see you guys in the next dev diary.

Get Songs of the Eons, 0.2

Leave a comment

Log in with itch.io to leave a comment.