I recently did some work in generating rivers in a 2d game. Revisiting this work to create an exhumed river channel, I decided it might be fun to revisit how to generate it to make the channel look more realistic. Instead of using a drunken walker, this is a more expensive but interesting map generator:

  • Start by generating 2d simplex noise where
  • less <0.6 is floor
  • rest is walls
  • Generate terminal lines at each map exit (north, south, east, west). Shuffle those lines and randomly choose a start and end location for the river based on two of those lines.

Later you can add another line with terminal point to allow a split river channel

Using a* pathfinding, acquire the most optimal point between the terminal points. Fill the path with water while allowing the water to spill outwards randomly if the terrain allows it. Turn all area too far away from water to wall turn water into special dirt (exhumed river channel) carve out area around water and set all non-special dirt to regular dirt in this area