Well I hear you on that. Luckily 80% of the changes are just copy and paste for the different minors. Our artists work so hard that it's great to be able to get more of their stuff into the game.
Just as an FYI the way the Knighttime's module works (and presumably the way Prof. Garfield will work as well) - one "factory" unit can work for every city, so if there's no real reason for each one to have an individual type you can save the slots/some work. HoF has strategic bombing where I'm only using a factory, oil refinery, and urban unit for each city that can build them (Germany and the Axis Minors). You link it with coordinates
There's a table where each city is defined. Here's one (Berlin, or city 0 meaning the first one I placed. [15] is for my factory improvement, which in the second section of code further below is linked to unitTypeID 126 meaning the 127th unit (because it starts at 0).
strat.cityCoordinates = {
-- Outer key is a city ID
-- All nested (inner) keys are improvement IDs
--GERMAN INDUSTRIAL CITIES (includes Prague, Pilsen, and Austria)
--[[ Berlin ]]
[0] = {
[15] = {{128,62}}, [5] = {{128,66}}, [4] = {{130,62}, {129,63}, {131,65}}, [14] = {{129,65}, {131,67}, {132,64}, {131,63}} },
}
This below looks like goblygook but is named well enough that I think you can follow. Basically the building of a city improvement changes the terrain type to a high-yield industrial or trade tile. Destroying the unit not only takes away the improvement, but also changes the terrain.
strat.improvementUnitTerrainLinks = {
-- Key is an improvement ID
--[[ Factory ]]
[15] = {
unitTypeId=126, buildTerrainTypeMap0=13, buildTerrainTypeMap1=13, buildTerrainTypeMap2=13, destroyTerrainTypeMap0=14, destroyTerrainTypeMap1=14, destroyTerrainTypeMap2=14},
--[[ Fuel Refinery ]] [5] = {unitTypeId=123, buildTerrainTypeMap0=12, buildTerrainTypeMap1=12, buildTerrainTypeMap2=12, destroyTerrainTypeMap0=14, destroyTerrainTypeMap1=14, destroyTerrainTypeMap2=14},
--[[ Civilian Population ]] [4] = {unitTypeId=124, buildTerrainTypeMap0=5, buildTerrainTypeMap1=5, buildTerrainTypeMap2=5, destroyTerrainTypeMap0=14, destroyTerrainTypeMap1=14, destroyTerrainTypeMap2=15},
--[[ Housing District ]] [14] = {unitTypeId=39, buildTerrainTypeMap0=5, buildTerrainTypeMap1=5, buildTerrainTypeMap2=5, destroyTerrainTypeMap0=14, destroyTerrainTypeMap1=14, destroyTerrainTypeMap2=15},
}
I'd really encourage you to load up Over the Reich and play a turn against yourself to see it in action. You can get immediate results with Bomber Command's attack on Cologne. I imagine when @Prof. Garfield releases the strat bombing module it'll be a little different but it will likely have the same idea. I think he was considering making it so you don't even need to define (and potentially mistype) coordinates for each city.