@peachtreeoath Our map is made of interlocked polyominos -- "minos" for short. A mino is a group of 2D blocks connected by grid edges. (The classic Tetris pieces are 4-block minos, often called "tetra-minos".)
Generate minos: Start with a 1x1 mino and randomly "grow" it outwards by adding blocks adjacent to previously added blocks. When added, each block merges to a random eligible adjacent mino and enlarges it. If all neighboring minos are already at max size, the new block doesn't merge and starts a new mino instead. Keep adding blocks until the level's fully filled.
Cleanup most tiny minos: Increase the max mino size. Iterate over tiny minos (<= 2 blocks) and merge them into a random adjacent neighbor mino. ("Most" because a tiny mino isn't merged if every neighbor mino would exceed the new max size if merged.)
Greedy mino coloring: Iterate the minos in random order and color each mino with the first color not taken by adjacent minos that have already been colored. (The "colors" here are abstract color numbers represented by a small integer.)
Trace mino edges: Expand each mino block to 2x2 tiles. Trace mino edges with road tiles. Assign grass / water / building A / building B to interior tiles by taking color % 4. Adjacent minos almost always have different choice of grass / water / building A / building B.
Autotile: Use Godot's autotile feature to automatically figure out which tile art to use. Godot autotile decides when to use the horizontal / vertical / specific intersection art for a road tile, or when to use corners for water / grass tiles.