Water is an aspect that I spent quite a bit of time on. In the current version, above-ground water “seeps” into a cell until that cell is fully saturated. Then any remaining water runs a test on its adjacent cells, and if it finds a cell with a lower water level (taking into account cell height), the water will travel to that cell. So basically, water is designed to flow quite naturally.

In the above video I’ve set one of the cells to produce a unit of water at each update. The numbers represent the amount of unsaturated water in each cell. As you can see, water is moving towards the left side of the map, which is at a lower height. Before a water unit flows into an adjacent cell, a check is performed to determine whether the water should be used to saturate the cell. If so, then the water unit disappears and the cell gains a saturation level.

Evaporation also occurs in the game. It slows the spread of the water and causes small puddles to eventually disappear. The puddle created in the video above will eventually reach an equilibrium between the rate of water creation and the rate of evaporation. At this point it will stop expanding. Larger ponds with enough water units in each cell will be immune from evaporation, although I’m thinking of changing this in the future if it benefits gameplay.