Instead of squares, our cells are lines in 4 different orientations; horizontal, vertical, diagonally descending and diagonally ascending. To each of these 4 orientations, we assign one CA rule.
Just like a square is drawn depending on its three neighboring squares above, each line is drawn depending on three neighboring lines. For each of the orientations, these are the neighbors in question.
A selection of the resulting line patterns.
Using the lines as dividers, we can fill these patterns with color. Each cell will now contain 8 pieces of data: The presence of each of the four dividers and the color of each of the 4 quarters of the cell.
The 4 colors of a given cell will be determined by its dividers and its adjacent colors — the southern color of the northern cell and the eastern color of the western cell.
With 4 dividers being either present or not, a cell can be in a total of 16 different “divider states”. We handle the coloring of each of these explicitly.
If some part of the cell is left unfilled by the flow of adjacent colors (N and W), we fill them with random colors (1–4).
The same selection of patterns as earlier, but filled with colors using the above process.
We can even remove the dividers altogether.
… and some more …
Still intrigued? Generate your own pattern here: https://generated.space/sketch/crosshatch-automata/
Thank you for your time!