I started out with a simple idea: ----- | | | | ----- |-----| | | <- water | | |-----| | | | | <- land | | | | Water moves from the left side to the right side whenever land(left)+water(left) is greater than land(right)+water(right). The amount that actually moves is the amount needed to make them equal. The difference between the two is: d = (land(left)+water(left)) - (land(right)+water(right)). To make the two sides equal, I have to move d/2 water from the left to the right. (I may not be able to do so, if there isn't enough water on the left, but that's the most I would move.) That's the general flow idea I used for water, food, and labor. However, the details are somewhat different. For water flow, water will flow only to the best adjacent hexagon. (The one with the highest 'd' value.) In addition, some erosion occurs, proportional to the square of d. For erosion, I make some of the land move from the left space to the right space, or from the right space to the one one farther downstream. (I've tried many different things and am not completely happy with any of them.) For food and labor flow, it doesn't use the land value at all, but the idea is the same. Instead of moving only to the best adjacent hex, it moves to all adjacent hexes that have d>0. The amount that moves is proportional to d. For example, if d(North) is 10 and d(South) is 5 and d(other directions) is negative, then I would decide to move food both North and South, and I would move twice as much north as south. In addition to flow, there have to be sources and sinks. For water, the "S"'s on the map mark the water sources. The edge of the map is a big sink. (Water also evaporates.) For labor, houses are sources and farms are sinks. For food, farms are sources and houses are sinks. Farms only produce food if they receive labor, so when things are just starting out, the houses have to send labor to farms first, and then later farms send food to houses.