Got the first step of the Tower class down: it fills a square with a phantom tower (the creeps can go right through it, but they don't know that) but only if the tower is placed in a spot where it has supply. Effectively, that means next to a source of its own color or next to a wall carrying power of that color from a source.
Checking the supply of the square and disallowing building if the square is not in supply were the most time consuming things I did today.
As a bonus, this allowed me to do the same for the walls: you can now only build walls if they would be in supply from some source. This means that creeps can make dead walls in the middle of the board by destroying parts of your wall structure.
Finally, I found the problem of the phantom supply tiles: the system I put together called set_ground() twice. That was it. But -- that did not solve the background problem in the source renderer for any sources placed on the board from a site-drop (sources placed in other ways do not have the problem). It is, unfortunately, a completely different error that requires a fully separate fix.