I was thinking, we could automatically support all existing maps - as in step 2:
1) for each tile we check tiles around to decide:
a) is this tile supported by the one below it (e.g. mountain-top on the earth fill, or tree-top on tree-trunk)
b) if not, then it must be hanging on tiles around it (e.g. a floor tile on other floor tiles around)
most interesting is case B.
On each such tile, we calculate how much support it has. I guess it could be "radiating" from tiles (A), is further away from support then less of it.
Consider floor tiles, on 1st floor (above 0-th ground floor) in e.g. the farm building.
The ones near edge (near wall) are strongly support, the ones in middle are less.
2) When loading a map in battlescape, one-time do following calculations:
For each tile we assume that the support it has now, is the right support for it; and further assume at least 50% of current value is needed for that tile in that place to hang.
We save that value for this tile.
And that should be it.
Of course, still new maps might customise this setting and save support-needed value for each tile, or set it to be e.g. 1..100% of current value (to make certain floors very fragile).
During battlescape, when some tiles are destroyed, we re-check all tiles around (in worst case scane the entire map, but that can be optimised a lot, later).
As walls around that floor are destroyed, support is lessen, and if it falls below 50% of what it was then tile drops off.
As for case (A), simply if the tile below it is gone, then we this one also drops.
Depending on tile type, after falling it might remain (e.g. earth-filled block), or might be removed and instead smoke generated (falling floor tile shatters and is gone) or perhaps changed into object "rubble" sometimes (would be hidden from map and from inventory screen).