Table of Contents

Struct ModifierSet

Namespace
Core.Modifiers
Assembly
Core.dll

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

modifierTypeId ushort
value FixedPoint64
isMultiplicative bool

ApplyModifier(ushort, FixedPoint64)

Apply modifier to base value Formula: (base + additive) * (1 + multiplicative)

public FixedPoint64 ApplyModifier(ushort modifierTypeId, FixedPoint64 baseValue)

Parameters

modifierTypeId ushort
baseValue FixedPoint64

Returns

FixedPoint64

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

modifierTypeId ushort

Returns

ModifierValue

Remove(ushort, FixedPoint64, bool)

Remove a modifier (for temporary effects)

public void Remove(ushort modifierTypeId, FixedPoint64 value, bool isMultiplicative)

Parameters

modifierTypeId ushort
value FixedPoint64
isMultiplicative bool

Set(ushort, FixedPoint64, bool)

Set modifier to exact value (replaces existing)

public void Set(ushort modifierTypeId, FixedPoint64 value, bool isMultiplicative)

Parameters

modifierTypeId ushort
value FixedPoint64
isMultiplicative bool