While creating massive production planets i started to think about the limitations of the game system as it is now. Especially the absence of a relation between the population size and the number of a given improvement. Furthermore it annoyed me that for a given terraforming tech the number of tiles was just 1 or many, and nothing in between.
At the moment for a given improvement there are three modes of limitation:
1) improvement is unique for the player (<IsPlayerWonder>) - like the Manufacturing Capital;
2) improvement is unique for the planet (<IsColonyUnique>) - like the Colony Capital;
3) improvement can be build limitless - like the Factory.
and
4) uniqueness defined by a group of improvements is enforced through the use of preclusions (<Preclusions>).
These above facts limit the granulation of the improvement construction (count), and make the internal integrity and maintenance of the (ImprovementDefs.) xml file vulnerable. The vulnerability shows in the fact that for every improvement out of a group all others must be specified as preclusions. That this vulnerability is not theoretical has been shown by the fact that in the xml files these mistakes already exist; and have been mentioned in various posts - including acknowledgement by Stardock.
I would like to propose an alternative system to address these issues. The current (xml) infrastructure already supports targeting, so lets use that. Instead of the two unique tags and the preclusions tag the following (xml) constructs could make it far more flexible and robust.
And as an added bonus modding becomes easier (especially when multiple mods are going to be used), because a mod does not need to know about all the 'new' improvements within a improvement group that are defined in another mod.
Note: The following XML shows only the to this proposal relevant tags.
Replace <IsPlayerWonder>true</IsPlayerWonder> with:
<Limit>
<Target>
<TargetType>Player</TargetType>
</Target>
</Limit>
Replace <IsColonyLimit>true</IsColonyUnique> with:
<Limit>
<Target>
<TargetType>Colony</TargetType>
</Target>
</Limit>
Replace (or augment) <Preclusions> with - example for Solar Power Plant:
<InternalName>SolarPowerPlant</InternalName>
<ImprovementType>Manufacturing</ImprovementType>
<ImprovementGroup>ManufacturingPowerPlant</ImprovementType>
<Limit>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>ManufacturingPowerPlant</ImprovementType>
</Target>
</Limit>
Result: No need for preclusions on SolarPowerPlant, FusionPowerPlant, AntimatterPowerPlant, QuantumPowerPlant.
Alter <UpgradesFrom> from a single improvement to from multiple improvements:
<InternalName>FusionPowerPlant</InternalName>
<ImprovementType>Manufacturing</ImprovementType>
<ImprovementGroup>ManufacturingPowerPlant</ImprovementType>
<UpgradesFrom>SolarPowerPlant</UpgradesFrom>
<UpgradesFrom>NuclearPowerPlant</UpgradesFrom>
Result: a single (possibly unique) improvement can be in the upgrade path of multiple improvements.
Limit the number of times an improvement can be build - example raise limit Soil Enhancement to 4 and lower the Ultra Terraformer tile limit to 6:
<InternalName>SoilEnhancement</InternalName>
<Limit>
<Target>
<TargetType>Colony</TargetType>
<TargetLimit>
<Count>4</Count>
</TargetLimit>
</Target>
</Limit>
<InternalName>OmegaTerraforming</InternalName>
<Limit>
<Target>
<TargetType>Colony</TargetType>
<TargetLimit>
<Count>6</Count>
</TargetLimit>
</Target>
</Limit>
Limit the number of times an improvement can be build depending on something else - example limit the number of factories by population:
<InternalName>BasicFactory</InternalName>
<ImprovementType>Manufacturing</ImprovementType>
<ImprovementGroup>ManufacturingBuilding</ImprovementType>
<Limit>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>ManufacturingBuilding</ImprovementType>
<TargetLimit>
<TargetType>Population</TargetType> <!-- 1 Basic factory per 2 billion population -->
<Multiplier>2</Multiplier>
</TargetLimit>
</Target>
</Limit>
<InternalName>XenoFactory</InternalName>
<ImprovementType>Manufacturing</ImprovementType>
<ImprovementGroup>ManufacturingBuilding</ImprovementType>
<Limit>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>ManufacturingBuilding</ImprovementType>
<TargetLimit>
<TargetType>Population</TargetType> <!-- 1 Xeno factory per 4 billion population -->
<Multiplier>4</Multiplier>
</TargetLimit>
</Target>
</Limit>
Example: a world with 20 billion people can have 6 Basic and 2 Xeno factories (or 4 Basic and 3 Xeno or some other combination). The result is that to have a lot of high order manufacturing plants you need a lot of population.
Optional additional uniquenesses:
Unique improvement within a solar system:
<Limit>
<Target>
<TargetType>Star</TargetType>
</Target>
</Limit>
Unique improvement within a galactic range - example 20 tile range:
<Limit>
<Target>
<TargetType>GalacticRange</TargetType>
<GalacticRange>20</GalacticRange>
</Target>
</Limit>
These additionals could enable things like the implementation of star, sector and empire capitals each giving for example additional (level and adjacency or even empire wide) bonuses.
Colony Capital:
<InternalName>ColonyCapital</InternalName>
<ImprovementType>Special</ImprovementType>
<ImprovementGroup>SpecialCapital</ImprovementGroup>
<Limit>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>SpecialCapital</ImprovementType>
</Target>
</Limit>
Star System Capital:
<InternalName>StarCapital</InternalName>
<ImprovementType>Special</ImprovementType>
<ImprovementGroup>SpecialCapital</ImprovementGroup>
<Limit>
<Target>
<TargetType>Star</TargetType>
</Target>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>SpecialCapital</ImprovementType>
</Target>
</Limit>
<UpgradesFrom>ColonyCapital</UpgradesFrom>
Star Sector Capital:
<InternalName>SectorCapital</InternalName>
<ImprovementType>Special</ImprovementType>
<ImprovementGroup>SpecialCapital</ImprovementGroup>
<Limit>
<Target>
<TargetType>GalacticRange</TargetType>
<GalacticRange>20</GalacticRange>
</Target>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>SpecialCapital</ImprovementType>
</Target>
</Limit>
<UpgradesFrom>StarCapital</UpgradesFrom>
Empire Capital:
<InternalName>EmpireCapital</InternalName>
<ImprovementType>Special</ImprovementType>
<ImprovementGroup>SpecialCapital</ImprovementGroup>
<Limit>
<Target>
<TargetType>Player</TargetType>
</Target>
<Target>
<TargetType>ImprovementGroup</TargetType>
<ImprovementGroup>SpecialCapital</ImprovementType>
</Target>
</Limit>
<UpgradesFrom>SectorCapital</UpgradesFrom>
Any constant values should be take as placeholders for whatever value will balance best and are there just to clarify the structure.
The above is just something to show the direction of my thoughts. I do not expect that this will be implemented literary, but i wanted to start a discussion about what might be possible and how to possibly implement it.
Comments are as always welcome.