Struct ModifierSet
ENGINE: Fixed-size modifier storage (cache-friendly, deterministic) Uses fixed arrays for zero allocations and cache locality
Performance: O(1) lookup, 8KB per instance (512 types × 2 longs × 8 bytes) Memory layout: Contiguous arrays for additive and multiplicative values
DETERMINISM: Stores FixedPoint64.RawValue (long) for cross-platform compatibility Pattern used by: EU4 (modifier system), CK3 (character modifiers), Stellaris (empire modifiers)
public struct ModifierSet
Fields
MAX_MODIFIER_TYPES
public const int MAX_MODIFIER_TYPES = 512
Field Value
- int
Methods
Add(ushort, FixedPoint64, bool)
Add a modifier (stacks with existing)
public void Add(ushort modifierTypeId, FixedPoint64 value, bool isMultiplicative)
Parameters
modifierTypeIdushortvalueFixedPoint64isMultiplicativebool
ApplyModifier(ushort, FixedPoint64)
Apply modifier to base value Formula: (base + additive) * (1 + multiplicative)
public FixedPoint64 ApplyModifier(ushort modifierTypeId, FixedPoint64 baseValue)
Parameters
modifierTypeIdushortbaseValueFixedPoint64
Returns
Clear()
Clear all modifiers (reset to zero) Vectorized for performance
public void Clear()
Get(ushort)
Get accumulated modifier value
public ModifierValue Get(ushort modifierTypeId)
Parameters
modifierTypeIdushort
Returns
Remove(ushort, FixedPoint64, bool)
Remove a modifier (for temporary effects)
public void Remove(ushort modifierTypeId, FixedPoint64 value, bool isMultiplicative)
Parameters
modifierTypeIdushortvalueFixedPoint64isMultiplicativebool
Set(ushort, FixedPoint64, bool)
Set modifier to exact value (replaces existing)
public void Set(ushort modifierTypeId, FixedPoint64 value, bool isMultiplicative)
Parameters
modifierTypeIdushortvalueFixedPoint64isMultiplicativebool