Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Mar 02, 2016 · View creator page →

Creator of

Recent community posts

This is an interesting idea -- most of these wouldn't be difficult to track, just tedious. The real pain in the neck would be adding them to the (already huge) list of graphable/trackable stats in the UI. I wonder if we'd almost want a separate list that you could swap the dropdown between -- "Traits" for genetic stats that don't change (all their physical traits, species/tags, etc) and "Stats" for fecundity and other things that change in real time. Food for thought.

I've got a buddy with a steam deck, I'll see if I can get him to try out the Linux build on it!

As for a full steam release -- it's one of those things that's been on the "to do, once all the other features I want are done" list -- except "all the other features" is constantly growing.

Haha, the numbering scheme is kind of whatever. As the numbers get higher they are tending to increment more slowly (I never want to run into being at 1.99999999..

The only thing that really matters is that the numbers be distinguishable to the Version Migrations system.

Speaking of which: Another change in this version is a Migration that will automatically assign Agility, Armor and Slime to your existing critters from previous versions, based on their Speed and Strength stats.


Rendering the graphics is pretty inconsequential in terms of performance -- especially as fast forward speed gets higher, running the actual code for all the entities in the game takes more and more of the resources while rendering stays pretty flat. It *does* technically take more resources to render the whole map zoomed out than it does to render a smaller window so if you want to get basically as close as you can to what you're suggesting, just zoom all the way in so you can see just a tiny portion of the map -- it might get you stable framerates on, for example, 5x instead of 4x, but won't be a total game-changing difference.

I'm persuaded. Check the thread for the link.

Click the "load saved preset" button just to the left of the "Add Critter" button and you'll be able to select any .critter file you want as the critter to be used by the Add tool.

There are a lot of other ways to add existing critters to your sim. In addition to adding one at a time, you can:

  •  Use the "load preset" button in the simulation settings panel to change the default spawn to a saved critter
  • Use the "merge pops" button in the main menu to bring the critters in another save into your current sim
  • Use the "spawn source" option in sim settings to select a save, or save directory, to use as the source for critter spawns instead of a random or specific critter
  • Use "micro-merge" to periodically merge a small number of critters from a directory of Autosaves

Also, please note that I do not plan to actively participate in Discord discussions (although if it picks up steam I might do the occasional scheduled Q&A or something) so please continue to direct questions, feedback, etc. to this Community page.

(1 edit)

Okay, against my better judgment, y'all have convinced me to try it out -- public server is here. If I come to regret it (i.e. I find I need to spend any time dealing with spammers, etc.) it will probably come down.

Hope you have fun!

(2 edits)

Hi there!

The neural network is already fully editable in-game -- click on a neuron to bring up the NeuroSurgery screen and tweak to your hearts' content!

As for the rest -- stay tuned for the next update, because I think you might find it interesting...

I'm afraid those are the options Itch offers. You can always try out the demo for free, though!

To give you a little additional detail:

Most Inputs are only ever positive. The exceptions are the Sensory Angle Inputs for Vision and Scent, which give the angle from the Critter to the strongest Scent or "most significant" (as a function of size, proximity, and taking camouflage into account) nearby visual object. The Angle inputs are positive or negative according to which side of the Critter the sensation comes from.

Similarly, some outputs only really do something if they're Active with a positive value, but there are also exceptions. Left and Right rotation do nothing if negative, but the Forward/Back output neuron causes the Critter to swim forward if positive, backward if negative. The "Breed" output acts the same as long as it's active, regardless of positive or negative -- if the Critter has the energy, it will reproduce with a nearby compatible partner. If there's no nearby partner, it will check its energy levels again and reproduce asexually if it has the energy (Partnered breeding is half as expensive.) Finally the "Adrenaline" output works like this -- if the Critter is not "exhausted" (on cooldown) it will either puff its body up and go into a "Rage", temporarily boosting Strength, or stretch out its tail and "Sprint," boosting its Speed.

Haha, I guess I'll keep the idea in mind!

Another consideration is, if I had a Discord up I would probably spend literally every waking second watching it which would not be great for my day job / real life. :)

(1 edit)

Not at this time -- to be completely honest, I don't think NeuraQuarium has enough users to support a private Discord server. Feel free to share anything neat you see in your sims here on the Community page!

EDIT: See the link below for the Discord server.

Well, there's nothing simple about Critter brains, but I'll try and at least give you some pointers to help you out!

Here's a brand new random Critter and its brain. Brains are read from top to bottom. You can hover your mouse over each neuron to get a readout on it. Here my mouse is on the upper left neuron, the Hunger Input. When reading a Critter brain, here's a color code:

Yellow: ACTIVE (Positive)
Purple: ACTIVE (Negative)
White: Neutral

Synapses come in three Types: Standard (White), Absolute (Blue) and Inverted (Red.) Synapses have their Type color at the start and their Activation color at their end. So you can see that first Hunger Input Neuron in the upper left is Active, and has a Standard Synapse going straight down that's also Active, and two Inverted Synapses that are Inactive. (I'll explain what these Synapses are about later.)

All Critters have the same Inputs and Outputs (though the Decay Rates and Activation Thresholds for these may differ.) You can mouse across them to get the breakdown but briefly, Critters have inputs for Hunger, Pain, Maturity, Temperature, and then various inputs for Scent and Vision. They have Outputs for Forward/Backward movement, Turning Left and Right, Releasing Musk, Biting, trying to Reproduce, and Adrenaline (Rage if Negative, Sprint if Positive.)

The Neurons themselves have a unique build. Each one has a Threshold and a Decay Rate. Every tick, in typical neural network fashion, all of a Neuron's inputs are added together and fed in as the new value for the Neuron, but the Neuron's previous state plus or minus its Decay Rate (whatever gets it closer to 0) is added to those inputs as well. In this way, hidden neurons can possibly serve as a rudimentary "memory" -- high decay rate Input gets you what's happening now, a low decay neuron lower down taking a synapse from that input may tell you "This was happening recently."

If a neuron's State exceeds its Threshold (positive OR negative) then it feeds that value into its Synapses. If it's a Standard Synapse, the Neuron State gets passed down to the connected Neuron (multiplied by the Synapse strength, of course.) Absolute Synapses pass the absolute value of the activating Neuron's state: 0.5 and -0.5 both become 0.5. Inverted Synapses are funky -- they activate if the Neuron is INACTIVE and are neutral if the Neuron is Active. (So you can have a neural connection that's equivalent to "I don't smell blood" or whatever.)

Hope that helps; feel free to ask if you have any questions!

That's awesome! Love to hear about the project inspiring knowledge.

For what it's worth: I did actually spend a day today converting the Vision system to use the Jobs system. The ultimate result was... about the same! The jobs run super quick on those multiple worker threads. But it doesn't actually shave off any frames per second or enable faster speeds.

I'm going to see if I can do something with the heat/gas diffusion system, which is a big cycle hog. If I could cut those times in half it would go a long way.

(1 edit)

A little more detail, as I've been doing some optimization work lately.

The draw loop and physics loops are already pretty well decoupled from other stuff in Unity. Physics actually runs multithreaded natively.  Just as you suggest, I run all gameplay code including AI on a fixed timer, adjusted by game speed, while the draw loop runs as fast as the machine can handle. Unfortunately you can't just split some of your Unity objects off into different cores -- all the scripts run on the main thread.

Unity does have a Jobs system for performing multithreaded tasks. The trouble with applying it to NeuraQuarium is that (a) multithreaded Jobs cannot access objects on the main thread -- all relevant data must be copied and sent as raw values (b) the costliest calculations in the simulation involve large areas of the world -- all the objects in a Critter's visual field, with all of the properties used to process those objects into visual stimulus; or the set of all regions that contain a given scent; etc. Essentially, even if I were to convert some of these processes to multithreaded jobs it's not clear that the speed from using more cores would offset the cost of copying very large amounts of information back and forth hundreds of times.

I'm not done experimenting, though. Time will tell!

I did a little more digging on this topic -- looks like physics calculations are multi-threaded, but scripts (i.e. the AI) all run on the main thread, and can't really be decoupled from it due to how Unity works.

There's not much in the way of deliberate multi-threading in the code, but the engine seems to distribute things more or less evenly across all the cores. The biggest contributors to CPU load are higher population (obviously), a larger level, and lots of heat sources.

The high nutrition value for fruit basically frees herbivores to start sliding down the omnivore track without really "losing" any of the nutrition.

The way the Diet stat works is that herbivores get 100% of the nutrition from fruit, carnivores get 0%, omnivores 50%, and so on with all the in-betweens.

So, if you're an herbivore who is really good at finding fruit (i.e. you evolved where fruit was very rare and not very nutritious, and could only survive by evolving to actively seek out fruits) and suddenly every fruit you find is more calories than your body can even contain, you lose nothing by letting your diet ratio slip down toward omnivory, but you DO suddenly gain energy from eating other critters (say, when you bump into each other and you either bite them or let them bite you; or when you encounter a dead body just sitting there for free.)

This is something I've observed many times -- you want to see the Diet graph shift away from all yellow herbivores? Make fruit MORE nutritious, so critters don't need to invest in plant digestion to use it. Instead they can invest in meat digestion and still supplement their diet with fruit, and get a decent return.

Great! Thanks. (And I fixed the typo in my instructions, too.)

(3 edits)

Okay, it looks like it's become more complicated since the last time I posted instructions. (Thanks a lot, Apple.) I'll update the main page but also give the low-down here:

First, navigate to the directory where lives

Then run  "chmod +x"
You should be able to try and run the app now but get a message saying it cannot be confirmed.

Now, open your System Preferences and select Security and Privacy.
There should be a section saying that NeuraQuarium couldn't be validated and give you an option to say "Open Anyway."

Once you've registered this exception, you should be able to run the .app normally.

Your best bet is probably to google whatever error message comes up when you try to run the app -- it may be an issue of allowing apps from "unidentified developers." 

Like a relative timer that takes your fast-forward and pause into account?
(Personally I just refer to the highest generation -- which is why that stat has hung out in the upper right since forever)

NeuraQuarium community · Created a new topic Save Files

A thread for interesting saves! Here's one to get you started. (Note that most patches are backwards compatible, but I'll include the version number this save was created in for reference.)

Base with Gators - a peaceful population of critters evolved from the base preset, with a small predatory group of "gators" -- big, slow, motion-activated hunters. (v.1.1.0)

Hey! Just a tiny bug fix. Protein wasn't getting saved between save/load.

Hah! Beat me by just a few hours. :)

This is fixed in

My critters have finally reached a milestone: I present to you, "Super Seeker." This little guy is something of a "holy grail" I've been chasing since day one.

This clever little critter is the first I've seen with the ability to not only  avoid obstacles, but detect and navigate toward food in both directions. It can serve as a solid baseline for kick-starting a new germline of very successful critters -- although if you add it to an existing simulation, don't be surprised if it drives everyone else into extinction!

Haha! Yeah, while of course one doesn't deliberately introduce any memory leaks in a program... I have zero doubt that there are some. (Probably even some just built into the Unity engine.)

I definitely don't recommend running NeuraQuarium for more than a few days at a time without saving, quitting, and loading. Personally, I usually don't leave a single instance of the game open for more than 24 hours.

That's really funny -- I was just performing an experiment because I'd also noticed the weird tendency for mono-colored populations and wanted to make sure it wasn't a bug!

I divided the level in two with obstacles and sure enough, the two populations diverged pretty quickly. On the left, color diversity took off quickly, going through pink, orange, and yellow before settling on white. On the right, there was very little change for a very long time, with the population staying very close to the original red, before eventually starting to diversify into pinks and purples. So, at least I know that works! The popular colors are just out-breeding the rest.

Some advanced logging would be really neat. I bet you could extract some really cool data! I've been mostly hesitant to add new options to the game simply because of UI clutter -- there's already so much going on in menus. But as the list builds up I think I'm seeing the need for at least a dedicated "Settings/Options" pane. So I will probably look into adding autosaves and logging along with that.

As for the random generator, NeuraQuarium does *not* use a seeded generator -- which means that, yes, when you reload a save, you are going to see a different result.

That's something that could potentially be changed (or even have an option added) but it would require a little more investigation and work. There are a LOT of random events, and pursuing a goal of total "seed determinism" would even require changes to the save/load system, as some level elements (grass/weeds) do not preserve EVERY aspect of themselves -- when you load a save, the grass might be slightly different colors or sizes, because only the location is saved. So, that's not a "no," but it's a "not tomorrow" ;)

Making fruit rarer and more rewarding does, in general, tend to promote larger bodies. If there's more energy in the fruit than you can store in your body, not only does the extra nutrition go to waste, but you also have less reserve to see you through to the next meal you find.

"Oldest" is perhaps a misleading choice of words to describe what's being selected for that highlight. All it's looking at is the critter's generation number -- not how long it's been alive.

Hey, thanks for the feedback!

I'll do the quick answers first:

  • I've had trouble clicking on critters too, especially as they evolve to be smaller and faster! I went ahead and added a hacky little solution -- if you click and it's a total miss (nothing under your mouse) the program will do another search with a wider radius.
  • I can't believe I missed that issue with the file name suggestions! Fixed that.
  • I never considered a Linux build, because (a) I didn't think there'd be much demand and (b) I don't have a Linux machine to test on. But why not? There's a Linux build available now in the downloads. Let me know how it works for you!

Finally, the meaty one... What does the neural network mean?

A Critter's Brain (Approximate)

(Note: This is not 100% accurate, it's just an explanatory slide from a presentation I made on the topic.) 

I've gone back and forth on including more info about the network graph. Initially, the input and output neurons all had their own labels, but it was really cluttered and hard to read. What I've been thinking of doing is adding just a few icons identifying groups of neurons (for example, the visual center on the top right is 5 neurons; so I'd just put an eye icon that encompasses all 5 of those rather than labeling each neuron individually.)

I'll keep pondering and possibly add some more explanatory information to the HUD in a later update.

Thanks again, and enjoy!

NeuraQuarium simulates a basic aquatic environment populated by AI creatures. Watch them evolve and change through chance, or take a hand in their evolution by molding the environment.

Each creature's behaviors are entirely determined by its artificial neural network. You can watch the neurons fire in real-time, and see how brain structures are passed from parent to offspring.

(4 edits)

Here are some of mine!

  • Blue Cruiser is essentially a whale -- huge and almost blind, it doesn't bother to look for food -- it just swims along, sometimes avoiding walls, sometimes just taking the hits.
  • Righty is the first Critter I've seen evolve that can actively seek out food, "seeing" it visually and then turning to approach it. However... it can only manage this feat if the food's on the correct side!
  • Meaty Boi has the very beginnings of a scavenger lifestyle -- it has evolved to "prefer meat" and seems to sometimes actively seek out corpses when they're nearby. 
  • Zoomba shoots forward till it sees a wall, backs up, turns, and shoots forward again, like a Roomba.

Just download the .critter file and then add a saved critter from the Level Tools menu in-game.  Let's see yours! Post links to your google drive, dropbox, or wherever.

Interesting question about the map! It turns out if you take a regular square grid and convert the cells to hexagons, you end up with that isometric diamond shape. The internal representation of the map is technically a regular 2-dimensional array (i.e. a square with (x,y) coordinates,) and what makes it into a hex grid is a matter of what cells are considered "adjacent."

Hey, thanks for your comment!

Yeah, unfortunately Core Stratagem was made long before the days of 4k monitors and isn't really optimized for high resolutions. I personally run my desktop at 1440p and find the font "okay", but your mileage may vary.

That takes some dedication! Animations are definitely the most time consuming parts of creating a CS army. A few pieces of advice: whenever possible, "animate" by selecting part of your unit and just dragging it around. For example, grab one of your hydra's heads halfway down the neck, move the selection a pixel to the left or right, and then make similar adjustments throughout the rest of the unit. This strategy is especially useful for making death animations since the unit is basically collapsing.

Looking forward to seeing things come together! Keep up the good work!