Part of #510.
Foundation for negative civilization modifiers. No edicts yet — net behavior matches today, but sub-1.0 multipliers become possible.
Scope
- New
CivilizationNegatives record (mirror of CivilizationBonuses + new cost types).
- New
CivilizationModifierResolver — combines milestone bonuses (positive) + signed edict effects → net per lever, clamped.
- Rewrite the four
> 1.0f apply-site guards to apply the resolver's net multiplier unconditionally: FavorSystem.cs:383 (favor), FavorSystem.cs:424 (prestige), PvPManager.cs:202 and 225 (conquest).
- Stacking math + clamps: Favor/Prestige floor 0.5 cap 3.0; Conquest floor 0.0 cap 3.0; holy-site cap floor 1; death-favor-loss cap 1.0.
Acceptance
- Resolver returns net == current values when fed only milestone bonuses (regression).
- A negative test delta produces a sub-1.0 multiplier that actually applies at the grant site.
- Unit tests for resolver math + clamps.
Blocks: all other slices.
Part of #510.
Foundation for negative civilization modifiers. No edicts yet — net behavior matches today, but sub-1.0 multipliers become possible.
Scope
CivilizationNegativesrecord (mirror ofCivilizationBonuses+ new cost types).CivilizationModifierResolver— combines milestone bonuses (positive) + signed edict effects → net per lever, clamped.> 1.0fapply-site guards to apply the resolver's net multiplier unconditionally:FavorSystem.cs:383(favor),FavorSystem.cs:424(prestige),PvPManager.cs:202and225(conquest).Acceptance
Blocks: all other slices.