Update 1.15: Autosave, Auto-merge, Optimizations


Let's start with the small stuff before we move on to the major updates, shall we?

  • Moved "Save Critter" button to left side of screen, joining the "Show Potential Partners" hoverable
  • Added graph for reproduction style and re-worked how Offspring Commitment is calculated - from  0-100% instead of 15-100
  • New Random Critters have random ideal temperatures and sizes (within a range.)
  • Fixed a bug that caused the Neurosurgery suite to reject certain values when assigning a Synapse's destination
  • Hide selection highlight when in Screensaver mode
Auto-Save, Micro-Merge

This is a pair of new features that, when combined, can be really powerful.


Autosave is more or less what you'd expect: Enable the option, select a directory and a frequency (from 5 minutes to 1 hour) and every time the simulation ticks over to that frequency, a new save file will be generated, tagged, and placed in that directory. It will include both the system time and the simulation timestamp in the filename.

Micromerge is where things get spicy. The interface is basically the same, but instead of saving at an interval, Micromerge does the following:

  1. Enter the designated directory
    (a) If there are any sub-directories, enter a random one
  2. Select the latest (by simulation timestamp) autosave within the directory
  3. Perform a partial Merge, importing only a handful of Critters from the autosave

What this allows us to do is to create separate simulations, evolving populations independently, but then automate the process of mixing the populations up in yet another separate, isolated environment. Think of continents joined intermittently by land-bridges, or lakes that only mingle when the monsoon rain comes. Major diversity boost! (I like to actually run three or four instances of the game at a time to take advantage of this!)


Sensory Visualizations

Another new addition is a pair of Sensory Visualizations -- now you can "see" what a Critter is seeing and smelling!


These don't add anything to the simulation, but they're a fun little bit of interface to help you get "in the mind" of a Critter. On the Olfactory Visualizer, there are four blobs that represent the different scents they can detect. The bigger each blob, the stronger the scent they're smelling. The position of the blob cluster on the bar indicates the Critter's "angle to strongest scent" input. Likewise, the Vision Vizualizer shows a small blob for each base color input (R,G,B) along with a big central blob that shows what color those add up to. The size of the central blob indicates the size/proximity of the Critter's most prominent visual object, and the position on the bar indicates the angle. The amount of "jiggle" indicates how much movement the Critter is observing.

Optimizations

The other major piece of work this time around has been optimizations. The addition of heat and scent tracking was a large amount of overhead added to the simulation. I've done a lot of work to streamline and optimize these processes to cut down on computation.

I also made the first step on multi-threading the simulation -- critter Vision processing is now handled by separate threaded jobs (although this particular task has come out to be more or less performance neutral, the lessons learned here will hopefully enable further performance enhancements in the future.)

Of course, framerates will vary based on your machine, but just to give you a benchmark, here' s a comparison of three different levels and their framerates at different game speeds, before and after the optimizations. "Default New" means a small map, 20 critters. The "Modest" example is a late-game sim on a medium map (175ish critters) and the "Max" scenario is 500 critters on a huge map.

speedDefault New Before
Default New After
Modest Before
Modest AfterMax Before
Max After
1x130fps144 (max)
110138935
2x110fps144 (max)6013846
3x80fps144 (max)
811024
4x30fps140610023
5x9fps
120540
1
3

Get NeuraQuarium

Buy Now$4.95 USD or more

Leave a comment

Log in with itch.io to leave a comment.