Skip to main content

Implementation Limits

Static findings for the supplied source, reviewed 2026-10-05. No source fixes or Unreal tests were performed.

Initialization and Scheduling​

FindingCurrent behavior
Native components are not automatically initialized for simulationBeginPlay/InitializeComponent only call Super; SetComponentActive performs actual setup
Default timer filter excludes StandaloneOnWorldReady accepts only DedicatedServer/ListenServer when server-only timers are enabled
World readiness has no retry in default pathInitialize calls OnWorldReady(GetWorld) directly; null/not-ready world can prevent timer/manager setup
External updates skip manager creationNo-timers branch sets external mode and returns before NewObject<CrossAffectManager>
Both timer options disabled leave external mode falseInitialize neither calls nor hooks OnWorldReady in that settings combination
Lifecycle cleanup is conditionalSubsystem timer cleanup requires AuthGameMode; map delegate removal and component EndPlay cleanup are not explicit

Authority and Events​

Core CheckPawn authority checks exist, contrary to the technical PDF, but not on every mutation. Several state/affect/modifier methods can write locally without CheckPawn. There is no native RPC bridge, and direct BlueprintReadWrite stat edits bypass helpers.

Private settings thresholds are copied during authority-only activation and are not replicated. Client food/temperature OnRep comparisons therefore normally use zero-initialized thresholds. Life-event delegates are emitted on the server; sprint/food/temperature threshold events have receive-side behavior. Do not promise uniform events across endpoints.


Health State Consistency​

  • Life-state resets clear the entire HealthStateTags container, including armor tags. Damage routing requires HasArmor/HasNoArmor and may then ignore damage until those tags are restored.
  • A lethal hit crossing MinHealthValue takes the Downed branch and returns before the Dead branch.
  • TriggerDownedTimer does not check bUseDownedTimer. Deactivation does not explicitly clear that timer.
  • Pulse regeneration does not explicitly stop for Dead/Downed. Health can rise while life state remains Dead.
  • Wounded tag conditions do not reliably reflect damage/recovery; normal RemoveHealthValue does not set Wounded for every ordinary injury.
  • HandleRevive can run on any non-Dead state and uses a fixed 25-health addition, not a configurable revive amount.
  • MaxAdditionalHealth is cached without an independently enforced limit in numerical addition.

Modifiers and Cross-Affects​

The global bUseCrossAffects flag is an editor condition rather than a manager runtime gate. The manager caches maps; source whitelists are refreshed by SetData only when the component flag is true, without an unconditional clear on a later disabled flag. Destination AffectTags are not comprehensively cleared by resets/deactivation.

Affects are not counted by source. Removal from one of several sources, or addition-before-removal during source replacement, can remove an affect another trigger still needs. The manager routes only four source/destination families and concrete component getters. Custom tags/components are not automatically new simulation features.

Food AddModifier is not used by native AddValue. Stamina AddAmountStamina/ReduceAmountStamina and FitnessModifierValue are copied/stored but do not drive pulse formulas. ReducedMaxStamina only clamps during later AddStaminaValue calls. Temperature values are not clamped to min/max, and cooling takes precedence over heating.


Distribution and Examples​

Descriptor EngineVersion is 5.7.0 despite the README's 5.2+ claim. SupportedTargetPlatforms contains only Win64 while module PlatformAllowList also includes Linux. No extra engine/platform support was verified. Blueprint assets were classified by existence, not graph behavior; filename-based API/authority assumptions remain unverified.

The PDFs describe architectural intent. The setup/API pages use current source contracts so these limitations are visible during integration.