Appearance
Error and result-code reference
Mass Forge uses explicit enums and result structures so Blueprint and C++ callers can distinguish expected gameplay outcomes from setup errors. This reference covers every public result, status, disposition, and terminal-reason enum. Treat the enum as the primary branch condition; inspect the surrounding result structure for the failed attribute, tag, policy, effect, entity, or request ID.
A rejected receipt owns no queue slot and will not complete later. An accepted request still needs execution-time validation, so retain its Request ID and handle every terminal result instead of converting the workflow to a boolean.
Handling rules
Success,Allowed, and accepted/terminal-success states are the only general success paths. A receipt is accepted only when itsWas Acceptedhelper is true and its request ID is positive.MassIsProcessingmeans the direct operation was attempted during a Mass processing phase. Use the corresponding queued operation when one exists; do not retry in a tight Blueprint loop.InvalidWorldcommonly means the world-context object is null, destroyed, or belongs to a world that is shutting down. Supply a live object from the intended game world.InvalidEntityand stale-representation outcomes are safe failures. Re-resolve represented Actors or reacquire actorless handles instead of modifying an old index/serial pair.QueueFullis bounded back-pressure, not silent loss. Reduce burst size, distribute work across frames, or raise the documented project setting after measuring memory and frame cost.- Nested results matter. For example,
EntityApplicationFailed,GameplayTagFailure,PersistentEffectFailed, andTransactionFailedidentify the failed layer; inspect the nested result payload for the exact cause.

Blueprint exposes expected spawn outcomes as named execution branches instead of hiding them behind a boolean. For compound gameplay operations, branch on the top-level enum first, then split the returned result struct to inspect the nested entity, attribute, tag, policy, effect, or request-ID details described below.
EMFProjectileLaunchResult
Returned immediately when a project asks the world projectile subsystem to create one actorless Mass projectile.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | A projectile entity was created, initialized, and assigned a positive projectile ID. | Store the receipt if correlation is needed; render snapshots or wait for the resolved event. |
InvalidWorld | The subsystem has no live world, or required Mass spawning/entity services are unavailable. | Launch from a live gameplay world after subsystem initialization and stop during teardown. |
InvalidConfig | The request has no Mass Entity Config. | Assign an Entity Config containing Mass Forge Projectile Trait. |
InvalidRequest | A location contains NaN, or speed, arc, release delay, or maximum lifetime is non-finite/out of range. | Sanitize authored/runtime values and keep speed/lifetime positive and delays/arcs non-negative. |
MassIsProcessing | Immediate entity creation was requested while the Mass entity manager owned processing. | Queue the project-side launch until the next safe world tick; never retry inside the processor loop. |
SpawnFailed | The Mass spawner did not return exactly one projectile entity. | Validate the Entity Config/archetype and world capacity, then retry only from a later safe tick. |
MissingProjectileFragment | The spawned config did not contain FMF_ProjectileFragment. | Add Mass Forge Projectile Trait to the exact Entity Config supplied in the request. |
EMFProjectileResolveReason
Published when an accepted Mass projectile leaves simulation.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Impact | The point-to-point/arc flight reached its authored target and optional damage was attempted. | Use the resolved location/cue and inspect the nested Damage result before applying project-specific follow-up behavior. |
LifetimeExpired | Maximum lifetime elapsed before travel reached the target. | Treat it as a miss/cleanup result; increase lifetime or reduce travel distance only when the authored design requires it. |
EMFEntityResolveResult
Returned when converting a represented Actor into a generation-checked Mass Forge entity handle.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The Actor has a current, valid Mass representation. | Use the returned handle; reacquire it after representation or lifecycle changes. |
InvalidWorld | The world context did not resolve to a live world. | Pass a live Actor, component, subsystem, or other object from the intended world. |
InvalidActor | The Actor is null, pending destruction, or otherwise invalid. | Stop the operation and obtain a live Actor. |
DifferentWorld | The Actor belongs to a different world than the selected subsystem. | Use a context object from the Actor's world and never carry handles across worlds. |
RepresentationUnavailable | The world's Mass Actor representation subsystem is unavailable. | Enable/configure the required Mass representation support or use an actorless handle source. |
NotRepresented | The Actor is valid but is not currently mapped to a Mass entity. | Use an ordinary-Actor adapter or wait for representation before resolving it. |
StaleRepresentation | The Actor mapping returned an entity index/serial that is no longer valid. | Recreate or refresh representation; do not reuse the cleared output handle. |
EMFEntitySpawnResult
Returned by the Blueprint-first single and bounded-batch entity spawn nodes.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Every requested entity was created, received its requested transform, and returned a generation-safe handle. | Store handles only for the lifetime needed and revalidate them after destruction, pooling, or world changes. |
InvalidWorld | The supplied context did not resolve to a live gameplay world. | Call from an object owned by the intended game world. |
InvalidEntityConfig | The Entity Config is null or invalid. | Assign a saved Mass Entity Config, preferably one generated by the Mass Forge wizard. |
InvalidTransforms | The transform array is empty or contains a non-finite transform. | Supply at least one finite world transform. |
SpawnLimitExceeded | One Blueprint batch requested more than 10,000 returned handles. | Split ordinary Blueprint work across bounded batches or use a measured C++ population path for larger allocations. |
SpawnerUnavailable | The world does not provide the required Mass entity/spawner subsystems. | Enable the Mass dependencies and call after world subsystem initialization. |
MassIsProcessing | Immediate entity creation would overlap Mass processing. | Schedule the spawn from a later safe game-thread boundary; do not retry inside a processor loop. |
SpawnFailed | The Mass spawner did not create the complete requested batch. | Validate the config/archetype and world capacity; no partial output is retained. |
MissingTransformFragment | The spawned archetype lacks Unreal's standard transform fragment, so placement could not be guaranteed. | Add Mass Forge Transform Trait or another trait that supplies FTransformFragment; the failed batch is destroyed. |
EMFEntityDestroyResult
Returned by the Blueprint-first generation-safe destroy node.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The exact live entity generation was submitted to the Mass spawner for destruction. | Clear project-held references and reacquire any replacement entity. |
InvalidWorld | The supplied context did not resolve to a live gameplay world. | Stop during teardown or supply a live context from the correct world. |
InvalidEntity | The handle is unset, stale, destroyed, or belongs to another world. | Treat destruction as already complete or reacquire the intended entity; never reuse only the index. |
SpawnerUnavailable | The Mass entity/spawner services are unavailable. | Call after world subsystem initialization and before teardown. |
MassIsProcessing | Immediate destruction would overlap Mass processing. | Use an existing queued death/destruction path or schedule the direct destroy at the next safe boundary. |
EMFAttributeAccessResult
Used by attribute reads, writes, instant-effect transactions, and queued attribute/effect receipts.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The requested read or transaction completed. | Consume the values and any clamp/operation details in the result. |
InvalidWorld | No live Mass Forge world subsystem was available. | Supply a valid world context and avoid calls during world teardown. |
InvalidEntity | The handle is unset, stale, or belongs to another world. | Reacquire the entity handle and verify its lifecycle. |
MassIsProcessing | Direct fragment access would overlap Mass processing. | Submit the matching queued request and handle its completion event. |
MissingSchema | The requested attribute domain has no configured runtime schema. | Assign the domain schema in Mass Forge project settings and rebuild the Entity Config. |
UnknownAttribute | The stable attribute ID is absent from its configured schema. | Select a current schema entry or migrate the old ID deliberately. |
MissingFragment | The entity archetype does not contain the required attribute fragment. | Add the Mass Forge Attributes Trait and the needed domain to the Entity Config. |
InvalidMagnitude | A supplied or calculated float is NaN, infinite, or otherwise invalid. | Sanitize gameplay inputs and validate every custom calculation before submission. |
MissingMagnitudeParameter | An effect requested a named context scalar that was not supplied. | Add the parameter to the effect context or remove/correct the authored parameter name. |
InvalidEffect | The Instant Effect asset is null, invalid, or changed incompatibly. | Repair the asset in its authoring overview and rerun Project Health. |
GameplayTagFailure | The atomic effect's tag portion could not validate or commit. | Inspect the effect's failed tag/result, trait capacity, and tag counts. |
QueueFull | The bounded attribute or instant-effect queue has no free request slot. | Throttle the producer or raise the matching pending-request limit after profiling. |
MagnitudeCalculationFailed | An assigned custom magnitude calculation rejected, was invalid/unloadable, recursed, or returned a non-finite value. | Inspect FailedModifierIndex and MagnitudeCalculationResponse; repair the stable calculation asset or its inputs before retrying. |
EMFEffectMagnitudeCalculationResult
Returned by reusable Blueprint/C++ effect-magnitude calculation assets.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The calculation returned a finite final magnitude. | Use the returned magnitude; Mass Forge continues staging the enclosing transaction. |
Rejected | Project logic intentionally refused to calculate for this context. | Inspect the stable calculation ID/reason and treat expected gameplay denial separately from setup failure. |
InvalidWorld | The query has no live world or crosses world ownership. | Supply context from the same active world as the transaction. |
InvalidConfiguration | The calculation is missing, unloadable, has no stable ID, or uses the unimplemented fail-closed base class. | Repair/implement the asset and rerun Data Validation and Project Health. |
RecursiveEvaluation | Calculation code started another custom magnitude evaluation before returning. | Keep calculations side-effect-free; defer gameplay operations until the outer transaction completes. |
NonFiniteMagnitude | The input, configured math, or returned magnitude is NaN or infinite. | Sanitize inputs and guard division/overflow before returning Success. |
EMFAttributeSnapshotResult
Used when capturing or atomically restoring attribute snapshots.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Capture or restore completed atomically. | Persist the snapshot or continue from the applied values. |
InvalidWorld | No live attribute subsystem was available. | Perform save/load against the correct active game world. |
InvalidEntity | The target handle is unset or stale. | Reacquire the entity before capture or restore. |
MassIsProcessing | Direct snapshot access would overlap Mass processing. | Capture on a safe lifecycle tick; for restore, use Queue Mass Forge Attribute Snapshot Restore. |
MissingSchema | A required domain schema is not configured. | Restore the schema configuration before handling snapshots. |
MissingFragment | The entity lacks a fragment required by a snapshot attribute. | Use a compatible Entity Config or migrate into an appropriate archetype. |
EmptySnapshot | The snapshot contains no values. | Treat it as absent save data or populate it through a successful capture. |
UnsupportedVersion | FormatVersion is not supported by this plugin build. | Compare SnapshotFormatVersion with ExpectedFormatVersion; upgrade through a supported plugin path or reject the save with a user-facing message. |
SchemaVersionMismatch | The project schema generation differs from the snapshot. | Compare SnapshotSchemaVersion with ExpectedSchemaVersion, then apply each required migration asset in order before restore. |
DuplicateAttribute | The snapshot contains the same stable attribute ID more than once. | Repair the producer or migration; never choose one duplicate implicitly. |
UnknownAttribute | A saved stable ID is not present in current schemas. | Add an explicit rename/remove migration rule. |
InvalidValue | A saved value is NaN or infinite. | Reject or repair the corrupted save; do not inject the value into Mass state. |
QueueFull | The bounded deferred snapshot-restore queue has no pending capacity. | Defer or shed the load; raise Max Pending Queued Snapshot Restores only after measuring copied-payload memory and frame cost. |
EMFAttributeSnapshotMigrationResultCode
Returned by one explicit snapshot migration step.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The migration produced a complete target-version snapshot. | Continue the migration chain or restore the final snapshot. |
InvalidMigration | The migration asset is null or fails its own validation. | Correct its ID, adjacent versions, rules, and duplicate mappings. |
UnsupportedSnapshotFormat | The input binary format is not understood. | Load it with a compatible plugin version or provide an external format converter. |
SourceVersionMismatch | The input schema version does not equal the migration's source version. | Select the next adjacent migration in the chain. |
EmptySnapshot | The migration input has no attribute values. | Treat the save as missing/corrupt or start from a valid captured snapshot. |
InvalidAttribute | A source or rename target ID in the snapshot/rules is invalid. | Repair the stable IDs and validate the migration asset. |
InvalidValue | An input value is NaN or infinite. | Reject or repair the corrupted save before migration. |
DuplicateAttribute | Migration would produce duplicate target identities. | Remove conflicting rules or resolve converging renames explicitly. |
EMFEntityStateSnapshotResult
Used when capturing, validating, directly restoring, or queuing the versioned durable entity-state snapshot.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Capture, validation, or restore completed atomically. | Persist the snapshot or continue from the fully restored state. |
InvalidWorld | No live Mass Forge world or required subsystem was available. | Use a live object from the intended gameplay world and avoid world teardown. |
InvalidEntity | The entity handle is unset, stale, or belongs to another world. | Reacquire the complete entity index/serial before capture or restore. |
MassIsProcessing | A direct operation would read or mutate fragments during Mass processing. | Capture at a safe lifecycle point or use Queue Mass Forge Entity State Restore for restore. |
UnsupportedVersion | The snapshot format is not understood by this plugin build. | Load it with a compatible plugin or migrate it through an explicitly supported format path. |
SchemaVersionMismatch | The nested attribute schema generation differs from the project schema. | Apply the required ordered attribute migrations before restoring the complete snapshot. |
InvalidAttributeSnapshot | The nested attribute payload failed format, schema, identity, value, capacity, or fragment validation. | Inspect AttributeResult, repair or migrate the entire payload, and retry without partial application. |
MissingGameplayTagFragment | The snapshot includes counted tags but the target archetype has no tag fragment. | Use a compatible Entity Config with the Gameplay Tag Trait. |
InvalidGameplayTag | A saved Gameplay Tag is empty or not registered. | Repair the save producer or restore the required project tag registration. |
InvalidGameplayTagCount | A saved exact tag count is outside the supported positive compact range. | Reject or repair the corrupted count before restore. |
DuplicateGameplayTag | The same exact Gameplay Tag occurs more than once. | Merge it into one exact count; do not choose a duplicate implicitly. |
GameplayTagCapacityExceeded | Saved exact tags exceed the fixed fragment capacity. | Migrate to a compatible bounded payload or redesign the target state budget. |
MissingAbilityFragment | The snapshot includes ability state but the target archetype has no ability fragment. | Use a compatible Entity Config with the Ability Trait. |
InvalidAbilityId | An ability grant has an empty stable ID or ability data appears while abilities are excluded. | Repair the snapshot producer and resolve every grant through a current stable ability ID. |
DuplicateAbilityId | The same stable Ability ID occurs more than once. | Keep one authoritative grant record per ability. |
AbilityCapacityExceeded | Saved grants exceed the target's fixed ability capacity. | Migrate or trim deliberately before restore; never accept an implicit partial grant list. |
InvalidAbilityTime | An individual cooldown remaining value is negative, NaN, or infinite. | Reject or repair the save and persist remaining gameplay seconds only. |
InvalidChargeState | Stored charge recovery has an invalid time or inconsistent scheduled flag. | Repair the charge record so unscheduled recovery is zero and every time is finite/non-negative. |
InvalidCooldownGroup | A shared/global cooldown has an empty ID or non-positive/non-finite remaining time. | Remove expired groups and repair the remaining duration or stable group identity. |
DuplicateCooldownGroup | The same shared/global cooldown ID occurs more than once. | Merge it into one authoritative remaining duration. |
CooldownGroupCapacityExceeded | Saved active groups exceed the target's fixed group capacity. | Migrate to a compatible bounded payload; do not partially restore groups. |
ActiveAbilityLifecycle | A format-1/2/3 restore targeted an entity with an active cast/channel that the legacy payload cannot describe. | Reach an idle ability boundary or restore a compatible format-4 snapshot; legacy restore never erases the lifecycle implicitly. |
ActivePersistentEffects | A format-1/2 restore targeted an entity with active Persistent Effects that the legacy payload cannot describe. | End those effects deliberately or restore a compatible format-3 snapshot; legacy restore never erases them implicitly. |
TransactionInProgress | A re-entrant direct restore was requested while another entity-state restore was publishing its transaction. | Defer the new operation through the bounded queue and handle its terminal completion. |
QueueFull | The bounded entity-state restore queue has no pending capacity. | Throttle or defer the producer; raise Max Pending Queued Entity State Restores only after profiling memory and frame cost. |
InvalidRegenerationState | Regeneration timing contains an invalid/duplicate target, non-finite or out-of-range remainder, changed schema identity, excess rules, or format-1-only forbidden fields. | Reject or explicitly migrate the payload; keep continuous-rule remainder at zero and interval remainder below its tick interval. |
MissingRegenerationFragment | A format-2-or-newer snapshot includes regeneration timing but the destination archetype has no regeneration fragment. | Restore into a compatible Entity Config with the Regeneration Trait. |
RegenerationProfileMismatch | The destination's unique regeneration target set or tick intervals differ from the format-2-or-newer snapshot. | Use the matching profile or explicitly migrate/reset timing before restore; Mass Forge will not remap a phase by array position. |
InvalidPersistentEffectState | A format-3-or-newer effect section has inconsistent duration/period/backlog state, invalid portable context/tags/modifiers, missing reversible bases, or effective attributes that do not match those bases and contributions. | Reject or explicitly migrate the save; do not patch runtime fragment slots or accept partial effect ownership. |
MissingPersistentAttributeModifierFragment | The destination or captured active-effect archetype lacks the companion fragment required for reversible contributions. | Use the Persistent Effects Trait on a compatible Entity Config and repair any custom archetype construction. |
MissingPersistentEffectDefinition | A saved persistent or periodic soft asset reference is absent or cannot be loaded. | Restore the referenced asset at its stable path or explicitly migrate/remove that saved effect before restore. |
PersistentEffectDefinitionMismatch | A loaded persistent or periodic asset's stable Effect ID differs from the ID guarded by the save. | Restore the identity-compatible asset or run an explicit project SaveGame migration; never reinterpret it silently. |
PersistentEffectCapacityExceeded | The save exceeds 16 active effects or 24 reversibly modified attributes. | Migrate or reduce the payload deliberately; Mass Forge refuses partial restoration. |
InvalidAbilityLifecycleState | The format-4 lifecycle section has inconsistent include flags, grants, phase, timing, commit state, pulse count/backlog, target mode, or forbidden legacy-format data. | Reject or explicitly migrate the complete save; never infer missing lifecycle state or patch the payload partially. |
MissingAbilityLifecycleDefinition | The saved active lifecycle's soft Ability reference is empty, missing, or cannot be loaded. | Restore the referenced Ability asset at its stable path or explicitly migrate/remove that lifecycle before restore. |
AbilityLifecycleDefinitionMismatch | The loaded Ability differs from the saved stable ID, Save Compatibility Version, execution type, cast time, channel duration, or channel period. | Restore a behavior-compatible asset or run an explicit project SaveGame migration; do not continue old timing under changed authoring. |
MissingAbilityLifecycleTargetBinding | An externally targeted lifecycle was captured without a stable relationship key or restored without its runtime target binding. | Store a project-owned stable target key during capture, recreate the target, and supply the matching key plus new entity handle during restore. |
AbilityLifecycleTargetReferenceMismatch | The supplied runtime target binding's project-owned key does not equal the key saved with the lifecycle. | Resolve the exact saved relationship and resubmit with the identical key; do not guess by Actor, position, or array order. |
InvalidAbilityLifecycleTarget | The external target binding is unset, stale, not a live full-generation entity, or collapses the external relationship onto the restored source. | Recreate and resolve the intended distinct target entity, then retry with its current handle. |
EMFEntityStateLifecycleTargetMode
Describes the portable target relationship stored for one format-4 active Ability Lifecycle.
| Value | Cause or meaning | Recommended response |
|---|---|---|
None | The active cast/channel has no target and stores no target reference. | Use the ordinary capture and restore nodes; do not invent a binding. |
Self | The active cast/channel targeted the saved entity itself. | Use the ordinary restore path; Mass Forge rebinds it to the restored destination entity. |
External | The active cast/channel targeted another entity, represented only by a project-owned stable relationship key in the save. | Recreate the target and supply the matching key plus its current full-generation handle to the lifecycle-target restore variant. |
EMFGameplayTagResult
Used by counted tag mutations and queries.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The tag operation or query completed. | Use the exact count and hierarchical-match fields as appropriate. |
InvalidWorld | No live Gameplay Tag subsystem was available. | Supply a valid world context. |
InvalidEntity | The entity handle is unset or stale. | Reacquire the entity handle. |
MissingFragment | The entity lacks the Mass Forge Gameplay Tag fragment. | Add the Gameplay Tag Trait to its Entity Config. |
InvalidTag | The Gameplay Tag is empty or not registered. | Select a registered project tag. |
InvalidCount | The requested add/remove count is outside the supported positive range. | Pass a positive bounded count. |
TagNotFound | A remove/query expected an exact owned tag that is absent. | Treat absence as gameplay state or correct the requested tag. |
InsufficientCount | Removal exceeds the exact owned count. | Clamp the request deliberately or correct the producer. |
CountOverflow | Adding would exceed the compact counter's supported maximum. | Reduce stacking or redesign the counter semantics. |
NoFreeTagSlot | The entity's bounded tag fragment is full. | Remove unused tags or redesign the archetype/state budget. |
MassIsProcessing | Direct tag access would overlap Mass processing. | Use the queued Add/Remove node for one raw count change, or a queued Instant Effect for an atomic multi-change transaction. |
QueueFull | The bounded counted-tag queue has no pending capacity. | Defer or shed the burst; tune queue limits only after profiling. |
InvalidOperation | Native code supplied an out-of-range tag-operation enum value. | Pass only Add or Remove; treat other values as corrupted input. |
EMFEffectDispatchResult
Returned by Entity/Actor cross-ownership Instant Effect dispatch.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Exactly one supported target route accepted the effect. | Inspect Route, resolved endpoints, and the nested application result. |
InvalidWorld | No live world/subsystem could be resolved. | Pass a context object from the intended game world. |
InvalidSource | The explicit source Actor/entity is invalid or cross-world. | Correct or omit the optional source as the node contract allows. |
InvalidTarget | The target Actor/entity is null, stale, or cross-world. | Reacquire a live target. |
InvalidEffect | The Instant Effect asset is null or invalid. | Repair the effect asset and validate its dependencies. |
UnsupportedTarget | The Actor is neither Mass-represented nor an effect receiver. | Add the receiver interface/component or use a supported Mass entity target. |
MultipleReceivers | More than one receiver component would make routing ambiguous. | Keep exactly one receiver component or implement the Actor interface directly. |
EntityApplicationFailed | The Mass route was selected but its atomic effect transaction failed. | Inspect EntityResult and EntityApplication for the precise failure. |
ReceiverRejected | The selected ordinary-Actor receiver declined the effect. | Inspect project receiver logic; retry only when its rejection condition changes. |
EMFPersistentEffectResult
Used by persistent-effect application, removal, query, stacking, and periodic execution.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The requested persistent-effect operation completed. | Use the handle, stack disposition, and timing data returned. |
InvalidWorld | No live persistent-effect subsystem was available. | Supply a valid world context. |
InvalidEntity | The target handle is unset or stale. | Reacquire the entity. |
MassIsProcessing | Direct fragment access would overlap Mass processing. | Schedule the operation from a safe phase. |
InvalidEffect | The Persistent Effect asset is null or fails validation. | Repair its ID, duration, stacking, modifiers, tags, and dependencies. |
MissingFragment | The entity lacks persistent-effect instance storage. | Add the Persistent Effects Trait. |
MissingAttributeModifierFragment | Reversible attribute modifiers require storage absent from the archetype. | Enable persistent attribute modifiers in the Entity Config. |
MissingAttributeFragment | An authored modifier or pulse targets a missing attribute domain fragment. | Add the Attributes Trait/domain or change the effect. |
MissingAttributeSchema | A required attribute domain schema is not configured. | Configure the schema in project settings. |
UnknownAttribute | An authored stable attribute ID no longer resolves. | Repair the asset or migrate the attribute identity. |
MissingMagnitudeParameter | A context-backed magnitude lacks its named scalar. | Supply the parameter or correct the effect asset. |
InvalidModifierMagnitude | A resolved persistent modifier is NaN or infinite. | Correct authored values, context inputs, or custom calculations. |
AttributeCaptureFailed | Snapshot-at-application could not read a required source/target attribute. | Inspect the failed binding, fragments, entity, and processing phase. |
AttributeCaptureCapacityExceeded | The effect needs more captured values than its bounded instance storage permits. | Reduce unique captures or split the effect. |
ModifierCapacityExceeded | Applying the effect would overflow bounded persistent modifier storage. | Remove/split modifiers or budget more storage in a future archetype design. |
NoFreeEffectSlot | The entity has no free persistent-effect instance slot. | Remove/expire effects or reduce simultaneous effect variety. |
InvalidHandle | A remove/query handle is unset, malformed, or for another entity. | Retain the exact returned handle and validate ownership before use. |
NotFound | The handle was once plausible but no active instance matches it. | Treat it as already removed/expired and discard the handle. |
InitialApplicationFailed | The authored apply-on-start periodic/instant payload failed atomically. | Inspect the nested Instant Effect inputs and target configuration. |
StackLimitReached | The selected stacking rule cannot add another stack. | Treat this as expected gameplay or choose a refresh/replace policy. |
StrongerOrEqualEffectActive | Strongest-wins rejected a weaker or equal incoming effect. | Keep the current effect or submit a genuinely stronger value. |
StackOperationInProgress | Re-entrant listener code attempted to alter the same stack transaction. | Defer the nested operation and avoid recursive mutation. |
IncompatibleStack | An existing stable stack identity has incompatible authored/runtime structure. | Keep stack definitions structurally consistent and use a new ID for a different contract. |
MissingGameplayTagFragment | Effect tag gates/grants require tag storage absent from the entity. | Add the Gameplay Tag Trait. |
MissingRequiredTag | The target lacks an authored prerequisite tag. | Treat as a gameplay gate or grant the prerequisite first. |
BlockedByTag | The target owns an authored immunity/blocking tag. | Respect the immunity or remove it through an explicit cleanse/dispel flow. |
GameplayTagFailure | Lifecycle tag validation or atomic tag mutation failed. | Inspect tag validity, counts, capacity, and the entity's tag fragment. |
QueueFull | The bounded persistent Apply/Remove queue has no pending capacity. | Defer or shed the burst; tune limits only after measuring queue pressure. |
MagnitudeCalculationFailed | A persistent attribute contribution's custom calculation failed before the instance committed. | Inspect the failed modifier and nested calculation response; the effect and all lifecycle changes remain unapplied. |
EMFPersistentEffectStackDisposition
Describes what a successful persistent-effect application did to stack state.
| Value | Cause or meaning | Recommended response |
|---|---|---|
AddedNewInstance | A new independent or first stack instance was created. | Track the returned handle when later removal/query is needed. |
RefreshedExisting | Existing duration/timing was refreshed without creating a new instance. | Refresh presentation timing for the existing handle. |
ExtendedExisting | Existing duration was increased by the stacking rule. | Update duration UI from the returned live state. |
ReplacedExisting | The previous compatible instance was removed and replaced. | Stop old presentation and bind to the returned replacement handle. |
ReplacedWithStronger | Strongest-wins accepted the incoming stronger instance. | Present the upgraded magnitude and replacement lifecycle. |
EMFPersistentEffectRemovalReason
Published when a persistent effect leaves active state.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Manual | A caller explicitly removed or dispelled the instance. | End presentation normally and record the manual source if needed. |
Expired | Finite duration reached zero. | End duration UI/VFX and release the handle. |
Replaced | A stacking rule replaced the instance. | Transition presentation to the replacement instance. |
EntityInvalidated | The owning entity was destroyed or became invalid. | Drop all project-side references without targeting the old handle. |
Cancelled | A classification cleanse/cancel or lifecycle rollback removed it. | Use project context/events to explain the cancellation when relevant. |
EMFDamageResult
Used by immediate damage applications, queued receipts, and queued completions.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Damage calculated and committed atomically. | Use the complete calculation, shield/health, critical, death, and context fields. |
InvalidWorld | No live damage subsystem was available. | Supply a valid world context. |
MassIsProcessing | Immediate damage would overlap Mass processing. | Use Queue Mass Forge Damage. |
InvalidDefinition | The Damage Definition is null or fails validation. | Repair it in the authoring overview and rerun Project Health. |
InvalidSource | A required source entity/Actor is invalid. | Reacquire the source or use an environmental/Actor request allowed by the definition. |
InvalidTarget | The target entity is unset, stale, or lacks required state. | Reacquire a valid damageable target. |
SelfDamageDisallowed | Source and target match while the definition forbids self damage. | Choose another target or explicitly enable self damage. |
TargetAlreadyDead | The target already satisfies the configured death condition. | Suppress repeat hits/rewards and wait for lifecycle handling. |
MissingRequiredTag | The target lacks a tag required by the definition. | Treat as a gate or establish the prerequisite tag first. |
BlockedByTag | An authored immunity/blocking tag is present. | Respect or explicitly remove the immunity. |
BlockedByPolicy | A project damage-policy provider vetoed the request. | Inspect BlockingPolicyId and BlockingPolicyReason. |
PolicyEvaluationInProgress | A provider re-entered damage while policies were already being evaluated. | Defer nested damage and keep providers side-effect-free. |
GameplayTagFailure | Required/death tag work failed validation or atomic commit. | Inspect GameplayTagResult, failed tag, trait, counts, and capacity. |
AttributeReadFailed | A configured formula attribute could not be read. | Inspect AttributeResult and FailedAttribute; repair schema/archetype setup. |
InvalidMagnitude | Base damage or a resolved calculation became NaN, infinite, or invalid. | Sanitize inputs and definition values before applying damage. |
TransactionFailed | The final atomic Health/Shield/death-tag effect failed. | Inspect the nested transaction result and failed operation. |
QueueFull | The bounded pending-damage queue is full. | Throttle damage producers or raise the measured queue budget. |
EMFDamagePolicyDecision
Each policy provider returns one decision; any Deny vetoes the damage request.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Abstain | This provider has no opinion for the request. | Continue evaluating later providers. |
Allow | This provider permits the request but does not override another provider's veto. | Continue evaluation; use it for diagnostics if desired. |
Deny | This provider blocks the request. | Supply stable policy/reason IDs and present the relevant gameplay feedback. |
EMFDamagePolicyProviderResult
Returned by damage-policy provider registration and unregistration.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Registration/unregistration changed the live provider registry. | Continue normal lifecycle handling. |
InvalidWorld | No live damage subsystem was available. | Register from a live object in the intended world. |
InvalidProvider | The provider is null, destroyed, or lacks the required interface. | Pass a live implementing object/component. |
WrongWorld | The provider belongs to a different world. | Register it with its own world's subsystem. |
AlreadyRegistered | The same live provider is already present. | Treat setup as idempotent; do not add another registration. |
CapacityReached | The bounded world provider registry is full. | Consolidate policy rules or remove unused providers. |
EvaluationInProgress | Registry mutation was attempted during a policy callback. | Defer registration changes until evaluation completes. |
NotRegistered | Unregistration found no matching live provider. | Treat it as already removed or correct the lifecycle pairing. |
EMFDeathHandlingRequestResult
Describes the immediate post-death lifecycle request attached to successful killing damage.
| Value | Cause or meaning | Recommended response |
|---|---|---|
NotRequested | The target survived or the definition keeps dead entities. | Apply project lifecycle behavior only if separately configured. |
ProjectDeactivationRequested | Mass Forge emitted a request for project-owned pooling/deactivation. | Handle the request ID once and report completion in project logic. |
DestructionQueued | Safe deferred Mass-entity destruction was accepted. | Correlate the later destruction completion with the request ID. |
QueueFull | Deferred destruction could not be scheduled. | Keep the dead entity inert, throttle deaths, and retry through controlled project logic if appropriate. |
EMFDeathDestructionResult
Final result published for queued Mass-entity destruction.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Destroyed | The generation-checked entity was still valid and was destroyed. | Release project-side presentation and references. |
EntityAlreadyInvalid | The entity was already destroyed/reused before the request executed. | Treat destruction as terminal and never act on the old handle. |
EMFAbilityResult
Shared by ability ownership, checks, activation, lifecycle control, AI requests, and queued operation receipts/completions.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The operation completed or an activation/lifecycle request was accepted. | Inspect the enclosing receipt/result for request ID and committed effects. |
InvalidWorld | No live ability subsystem was available. | Supply a valid world context. |
InvalidEntity | The source entity is unset or stale. | Reacquire the source handle. |
MissingAbilityFragment | The source archetype lacks ability state. | Add the Mass Forge Ability Trait. |
InvalidAbility | The Ability asset is null, invalid, or changed incompatibly. | Repair it in the authoring overview and rerun Project Health. |
NotGranted | The source does not own the requested stable ability ID. | Grant it first or correct the ID. |
AlreadyGranted | A grant request targeted an already-owned ability. | Treat the grant as unnecessary or revoke deliberately before replacement. |
NoFreeAbilitySlot | The compact ability fragment has no free grant slot. | Revoke an ability or reduce the loadout. |
QueueFull | The shared bounded Activate/Grant/Revoke/Cancel/Interrupt or AI-request capacity is exhausted. | Throttle producers or increase the measured budget. |
TargetRequired | The ability requires a target but none was supplied. | Select and pass a valid target. |
InvalidTarget | The supplied target is stale or otherwise invalid. | Reacquire the target. |
SelfTargetNotAllowed | Source and target match while self-targeting is disabled. | Select another target or change the authored targeting rule. |
TargetingPolicyRejected | A targeting policy denied the source/target pair. | Inspect the policy result/index/ID and correct range or project conditions. |
TargetingPolicyEvaluationInProgress | Policy code re-entered activation during evaluation. | Keep policies side-effect-free and defer nested activation. |
OnCooldown | The individual ability cooldown has not expired. | Wait for the reported remaining time. |
OnCooldownGroup | A shared/global cooldown group is active. | Query the group remaining time and wait. |
NoFreeCooldownGroupSlot | Starting a new named cooldown would exceed bounded group storage. | Consolidate group names or reduce simultaneous groups. |
NoCharges | The ability has no available charge. | Wait for charge recovery or change the loadout rules. |
CannotAfford | One or more cost attributes are below their required values. | Inspect the failed cost/attribute and restore resources. |
RequirementNotMet | An authored source/target attribute comparison failed. | Inspect the requirement index, subject, observed value, and threshold. |
MissingGameplayTagFragment | Ability tag gates/effects require tag storage absent from an entity. | Add the Gameplay Tag Trait to the relevant archetype. |
MissingRequiredTag | A required source/target tag is absent. | Establish the prerequisite or treat this as an expected gate. |
BlockedByTag | A source/target blocking tag is present. | Respect or explicitly cleanse the blocking state. |
InvalidAttribute | A cost, requirement, or nested effect references an unresolved attribute. | Repair the stable attribute ID/schema dependency. |
MissingMagnitudeParameter | A nested effect needs a context scalar missing from the ability defaults/context. | Add the named default/input parameter. |
GameplayTagEffectFailed | A nested tag transaction failed. | Inspect failed tag details, counts, capacity, and fragment setup. |
PersistentEffectFailed | A referenced persistent effect could not apply. | Inspect the nested persistent result and asset/archetype setup. |
TransactionInProgress | Re-entrant code attempted a conflicting ability transaction. | Defer nested work until the current transaction/event returns. |
ActiveAbilityInProgress | The source already has an active cast/channel. | Wait, cancel/interrupt it when allowed, or reject the new input. |
NoActiveAbility | A lifecycle query/control request found no active cast/channel. | Treat it as already ended and clear stale presentation. |
CancellationBlocked | The active ability does not permit voluntary cancellation. | Continue it or use a permitted interruption path. |
InterruptionBlocked | The active ability is immune to interruption. | Respect the authored rule. |
InvalidRequestId | A supplied AI request ID is non-positive or malformed. | Retain the positive ID returned by an accepted receipt. |
RequestNotFound | No tracked AI request matches the ID. | Correct the ID or treat it as expired/forgotten history. |
RequestNotTerminal | Forget was requested while the AI ticket is still pending/active. | Cancel or wait for a terminal state first. |
RequestAlreadyTerminal | A control operation targeted a ticket that has already finished. | Read its terminal state and stop issuing control requests. |
RequestCancelled | A queued AI activation was cancelled before execution. | Treat it as a terminal cancellation, not a system failure. |
InvalidEffect | A referenced Instant/Persistent Effect is invalid at execution time. | Repair the dependency and rerun Project Health. |
MassIsProcessing | Direct ability state access would overlap Mass processing. | Use the matching queued operation or invoke the direct operation from a safe phase. |
LifecycleChanged | A queued Cancel/Interrupt captured one lifecycle ID, but a different lifecycle is now active on that source. | Treat the request as safely stale; inspect the new lifecycle and submit a new request only if it should also stop. |
ConditionRejected | A project-authored activation condition returned a non-passing response. | Inspect the failed condition index, stable condition ID, result, and reason; treat expected game-rule denial separately from invalid configuration. |
ConditionEvaluationInProgress | Condition code re-entered ability admission while another condition was being evaluated. | Keep conditions side-effect-free and defer nested gameplay work until the current activation completes. |
MagnitudeCalculationFailed | A nested Instant Effect custom magnitude failed while the ability transaction was staged. | Inspect FailedEffectId, FailedModifierIndex, and MagnitudeCalculationResponse; costs, effects, cooldown, charges, and lifecycle state remain uncommitted. |
ExecutionPlanRejected | The assigned execution plan rejected evaluation or returned invalid, unsafe, or over-limit output. | Inspect ExecutionPlanResponse, its stable plan ID/result/reason, and the plan's returned references and parameters; activation state remains uncommitted. |
ExecutionPlanEvaluationInProgress | Plan code re-entered ability admission while another plan evaluation was active. | Keep execution plans deterministic and side-effect-free; defer nested gameplay operations until the current evaluation returns. |
EMFAbilityExecutionPlanResult
Detailed response from an optional Blueprint/C++ Ability Execution Plan.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The plan returned a payload that may proceed to framework validation and transaction staging. | Let Mass Forge validate and commit it; do not apply the described effects manually. |
Rejected | Project logic intentionally declined to produce an activation or channel-pulse payload. | Inspect the stable plan ID/reason and treat expected gameplay denial separately from setup failure. |
InvalidWorld | The query lacks a live world or crosses world ownership. | Evaluate from the same active world as the source and target. |
InvalidSource | The query's source entity or Actor is no longer valid. | Reacquire the source and retry only through normal ability admission. |
InvalidTarget | Target output requires a valid target, or the supplied target/Actor is stale or cross-world. | Enable the Ability's target contract and pass a current target from the same world. |
InvalidConfiguration | The plan is missing/unloadable/unidentified, has an invalid merge mode, or uses the unimplemented fail-closed base class. | Repair or implement the plan, assign a unique PlanId, and rerun Data Validation and Project Health. |
RecursiveEvaluation | Plan code triggered another plan evaluation before returning. | Remove gameplay mutations and nested activation from the callback; return only a transaction description. |
OutputLimitExceeded | The payload exceeds 64 combined effects or 64 parameter overrides. | Split the design into bounded operations or reduce the payload; do not raise hidden per-activation work. |
InvalidEffect | A returned effect is missing, unloadable, unidentified, or Persistent Effect output was returned for a channel pulse. | Repair the reference/ID and keep channel payloads Instant-only. |
InvalidParameter | A returned parameter has no name or a NaN/infinite value. | Supply a stable non-empty name and finite scalar. |
EMFAbilityRequestOperation
Identifies which operation produced an FMFAbilityRequestCompletion.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Activate | The request attempted an Ability activation or cast/channel admission. | Inspect Result and the nested activation diagnostics. |
Grant | The request attempted to add a validated Ability definition to the entity. | On failure, inspect the entity, definition, and bounded grant capacity. |
Revoke | The request attempted to remove one submitted Ability ID and its runtime state. | Treat NotGranted as an already-absent ownership state when appropriate. |
Cancel | The request attempted voluntary cancellation of the exact captured lifecycle. | Handle blocked, ended, or replaced lifecycles explicitly. |
Interrupt | The request attempted external interruption of the exact captured lifecycle. | Handle immunity, ended, or replaced lifecycles explicitly. |
EMFAbilityTargetingPolicyResult
Detailed response from a reusable ability targeting policy.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Allowed | The policy accepts this source/target pair. | Continue evaluating later policies. |
Rejected | Custom policy logic rejected the pair. | Inspect the policy's stable reason and provide gameplay feedback. |
InvalidWorld | The policy query has no valid world. | Supply a live world context. |
InvalidSource | The source entity/Actor is invalid for this policy. | Reacquire or correct the source. |
InvalidTarget | The target entity/Actor is invalid for this policy. | Reacquire or correct the target. |
MissingSourcePosition | The selected position source cannot resolve a source location. | Add a Mass transform/representation or change the policy position mode. |
MissingTargetPosition | The selected position source cannot resolve a target location. | Add a Mass transform/representation or change the policy position mode. |
BelowMinimumRange | Distance is smaller than the authored minimum. | Move apart or adjust the validated minimum. |
BeyondMaximumRange | Distance exceeds the authored maximum. | Move closer or adjust the validated maximum. |
InvalidConfiguration | Policy settings are contradictory or non-finite. | Repair and validate the policy asset. |
EMFAbilityConditionResult
Detailed response from a reusable project-authored activation condition.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Passed | The condition allows activation to continue. | Continue evaluating later conditions. |
Rejected | Project logic intentionally denied activation. | Inspect the stable condition ID and reason, then provide appropriate gameplay feedback. |
InvalidWorld | The condition cannot resolve required authoritative world state. | Supply a live world or repair the condition's world-state dependency. |
InvalidSource | The source entity/Actor is unusable for this condition. | Reacquire the source or handle actorless entities explicitly. |
InvalidTarget | The optional/required target is unusable for this condition. | Require and reacquire a target or handle an unset target explicitly. |
InvalidConfiguration | The condition asset is unimplemented or configured incorrectly. | Implement Evaluate Condition, repair the asset, and rerun validation/Project Health. |
EMFAbilityTargetSelectionResult
Top-level result for built-in and provider-driven target selection.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Selection completed; an empty target array can still be a valid result. | Use bounded targets and inspect truncation/diagnostic counts. |
InvalidWorld | No live Mass world could be resolved. | Supply a valid world context. |
MassIsProcessing | The query cannot safely inspect Mass entity data now. | Run selection from a safe phase. |
InvalidSource | A required source entity/Actor is invalid. | Reacquire or correct the source. |
InvalidTarget | A collision hit did not resolve to a valid Mass target. | Treat it as a miss or resolve another target. |
InvalidRequest | Radius, trace, bounds, or parameter inputs are invalid/non-finite. | Sanitize origin/end/radius/max-target inputs. |
InvalidProvider | The custom provider is null, invalid, or lacks the interface. | Pass a live implementing provider. |
ProviderEvaluationInProgress | Provider selection was re-entered recursively. | Keep the provider side-effect-free and defer nested selection. |
ProviderFailed | The provider returned a non-success response. | Inspect ProviderId and Reason, then correct project logic or inputs. |
EMFAbilityTargetProviderResult
Authored response returned by a custom target provider before Mass Forge sanitizes its handles.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The provider produced a candidate list for validation. | Return stable provider identity and let Mass Forge bound/de-duplicate it. |
Rejected | Project logic intentionally declined the query. | Supply a stable reason and treat it as a controlled selection failure. |
InvalidRequest | Project logic considers the supplied query malformed/unsupported. | Validate query parameters before invoking the provider. |
EMFAbilityAIRequestStatus
Pollable lifecycle status for a tracked AI activation request.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Invalid | No valid tracked state is represented. | Check the enclosing query result and request ID. |
Pending | Accepted work is waiting in the bounded activation queue. | Continue polling without resubmitting. |
Active | The request started a live cast/channel lifecycle. | Read lifecycle progress and continue polling. |
Succeeded | Activation or lifecycle completed successfully. | Consume the terminal result and forget the ticket when no longer needed. |
Failed | Activation or commit ended with a non-success result. | Inspect the nested activation/lifecycle diagnostics. |
Cancelled | The request/lifecycle ended through allowed cancellation. | Treat as a terminal controlled outcome. |
Interrupted | The active lifecycle was interrupted. | Treat as terminal and inspect interruption context in project events. |
EMFAbilityLifecycleEndReason
Terminal reason published for a cast/channel lifecycle.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Completed | The lifecycle reached its authored end and committed successfully. | Finish presentation and consume the activation result. |
Cancelled | A permitted voluntary cancellation ended it. | Roll back/stop presentation according to project UX. |
Interrupted | A permitted external interruption ended it. | Present interruption feedback and clear active state. |
CommitFailed | Final or periodic atomic work could not commit. | Inspect the detailed ability/effect result and repair runtime prerequisites. |
AbilityRevoked | The granted ability was removed while its lifecycle was active. | Treat the lifecycle as terminated and update loadout UI. |
SourceInvalid | The source entity became invalid before completion. | Drop the lifecycle and all stale source references. |
EMFHighVolumeEffectResult
Admission or terminal outcome for the per-entity compiled Apply/Remove mailbox.
| Value | Cause or meaning | Recommended response |
|---|---|---|
None | The mailbox has no admission or execution result. | Submit a command or wait for a completed mailbox before consuming. |
Accepted | A valid command now owns the entity's single mailbox. | Wait for the high-volume processor and consume the correlated completion. |
Success | Every compiled attribute/tag operation committed atomically. | Consume the completion and release the mailbox. |
Busy | A pending command or unconsumed completion already owns the mailbox. | Do not overwrite or spin; consume completion before resubmitting. |
InvalidRequestId | The project supplied correlation ID 0 or a negative value. | Allocate a positive per-producer correlation ID. |
InvalidEffectIndex | The numeric effect index is outside the archetype's compiled table. | Resolve/cache the ID from the matching shared fragment before entity iteration. |
InvalidOperation | The operation is neither Apply nor Remove. | Pass a declared EMFHighVolumeEffectOperation value. |
InvalidDefinition | The selected compiled side is empty or exceeds its fixed capacity. | Repair the trait/effect assets and recreate the entity template. |
MissingAttributeSlot | A compiled domain/slot cannot resolve against the entity fragments. | Verify the Attributes Trait/schema and rebuild stale templates after schema changes. |
InvalidMagnitude | Existing state, the compiled magnitude, or projected arithmetic is non-finite. | Repair the source asset/state; the command changed nothing. |
MissingGameplayTagFragment | The selected side changes tags but this archetype has no tag fragment. | Add/configure the Gameplay Tag Trait or remove tag operations from the pair. |
GameplayTagFailure | A projected tag operation failed validation, count, or capacity rules. | Inspect GameplayTagResult and FailedOperationIndex; the command changed nothing. |
EMFEntityInspectionResult
Returned by point-in-time entity inspection captures.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | A bounded snapshot was captured. | Render its built-in/custom sections without treating them as simulation authority. |
InvalidWorld | No live inspection subsystem was available. | Select an object/entity from the intended active world. |
InvalidEntity | The requested handle or represented Actor is invalid/stale. | Reacquire the selection. |
MassIsProcessing | Snapshotting would overlap Mass processing. | Refresh on a later editor/game tick. |
EMFInspectionProviderResult
Returned by custom inspection-provider registration and unregistration.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The provider registry changed as requested. | Pair registration with lifecycle-safe unregistration. |
InvalidWorld | No live inspection subsystem was available. | Register from a live object in the intended world. |
InvalidProvider | The provider is null or no longer valid. | Pass a live object. |
UnsupportedProvider | The object does not implement the inspection-provider interface. | Implement the interface or use the supplied component pattern. |
AlreadyRegistered | The provider is already in the registry. | Treat setup as idempotent and avoid duplicate registration. |
CapacityReached | The bounded provider registry is full. | Consolidate sections/providers or unregister unused providers. |
NotRegistered | Unregistration found no matching provider. | Treat it as already removed or correct lifecycle pairing. |
EMFGameplayEventHistoryResult
Returned by bounded gameplay-event history queries and entity watch-list operations.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The query or watch-list operation completed. | Consume the chronological records or continue the diagnostic session. |
InvalidWorld | The gameplay-event subsystem no longer belongs to a live world. | Reacquire the subsystem from the intended active world. |
InvalidEntity | A watch handle is unset, stale, or belongs to another entity generation. | Reacquire a live entity handle before adding the watch. |
AlreadyWatched | The entity is already present in the bounded watch list. | Treat the watch setup as idempotent; do not add a duplicate. |
NotWatched | Removal found no matching entity in the watch list. | Treat it as already removed or verify the generation-sensitive handle. |
WatchCapacityReached | The watch list already contains its maximum 64 entities. | Remove unused watches or divide diagnostics into smaller sessions. |
InvalidLimit | A history query requested fewer than 1 or more than 65,536 records. | Supply a positive bounded maximum within the documented range. |
EMFNetworkEntityReferenceResult
Returned when translating between a world-local Mass handle and an Unreal Mass session network identity.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The entity and session reference resolved to one current full generation. | Use the reference only within this replicated world/session. |
InvalidWorld | The world or Mass entity subsystem is unavailable. | Reacquire the subsystem from the live network world. |
InvalidEntity | The supplied Mass handle is unset or stale. | Reacquire the complete current entity generation. |
MissingNetworkIdentity | The entity has no valid Unreal Mass network-ID fragment. | Add/configure the Mass Replication trait and wait for identity initialization. |
InvalidNetworkReference | The incoming session reference is zero, negative, or larger than the native unsigned 32-bit Mass network-ID range. | Send a valid replicated network identity, never an entity index or an unchecked Blueprint integer. |
UnknownNetworkReference | No authoritative registration or client bubble mapping currently owns the ID. | Wait for relevance/registration or discard a reference from another session. |
StaleNetworkReference | The cached mapping no longer matches a live entity with the same ID. | Discard the mapping and reacquire current replicated state. |
EMFNetworkEntityRegistryResult
Returned by the authority-side constant-time network identity registry.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The authority registry changed as requested. | Pair registration with entity retirement/unregistration. |
InvalidWorld | No live network world is available. | Register through the intended world's authority subsystem. |
NotServerAuthority | Registration was attempted on a remote client. | Register only where the authoritative Mass entity exists. |
InvalidEntity | The supplied handle is unset or stale. | Reacquire the server's current entity generation. |
MissingNetworkIdentity | The entity has no initialized Mass network ID. | Configure Mass Replication before registering gameplay identity. |
DuplicateNetworkIdentity | The ID already maps to a different live entity. | Repair entity creation/identity assignment; never overwrite the earlier mapping. |
AlreadyRegistered | The same ID already maps to the same full entity generation. | Treat setup as idempotent. |
NotRegistered | Unregistration found no entry for that entity generation. | Treat it as already retired or repair lifecycle pairing. |
EMFNetworkDefinitionRegistryResult
Returned by the authority-owned catalog of definitions approved for future network dispatch. Client input never loads assets into this catalog.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The catalog operation completed. | Continue with the returned kind/ID or resolved server object. |
InvalidWorld | No live network world is available. | Register during authoritative world or match setup. |
NotServerAuthority | A remote client attempted to maintain or resolve the trusted catalog. | Perform catalog work only on server authority. |
InvalidDefinition | The supplied Primary Data Asset is null, destroyed, or otherwise invalid. | Retain and pass a live server-owned definition. |
UnsupportedDefinitionType | The asset is not a Mass Forge Ability, Instant Effect, Persistent Effect, or Damage Definition. | Register only an explicitly supported gameplay definition family. |
MissingDefinitionId | The definition or lookup has no stable authored ID. | Assign and validate the asset's stable ID before match setup. |
DuplicateDefinitionId | Another object already owns that ID within the same definition family. | Rename or remove the conflicting server definition; never replace it implicitly. |
AlreadyRegistered | The same object already owns that family/ID entry. | Treat repeated setup as idempotent. |
NotRegistered | Explicit unregistration found no entry for that object. | Treat it as already released or repair setup/teardown pairing. |
UnknownDefinition | The requested family/ID was never admitted by the server. | Reject the client request or explicitly register the preloaded asset during setup. |
StaleDefinition | A registered object became invalid or its authored ID changed after admission; the stale entry was removed. | Restore immutable runtime definitions and explicitly register the corrected object again. |
EMFNetworkRequestResult
Returned by server-side validation of an untrusted client request descriptor. Success authorizes later dispatch but is not a gameplay receipt.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Identity validation passed and at least one project policy allowed the request without a veto. | Dispatch through the operation's bounded authoritative queue and correlate its separate receipt. |
InvalidWorld | The authority subsystem has no live world. | Reacquire it from the current server world. |
NotServerAuthority | A remote client attempted to evaluate authority policy. | Send through an owner-bound server RPC adapter instead of evaluating locally. |
InvalidRequestId | The client-local correlation ID is zero or negative. | Allocate a positive client-local ID before submission. |
InvalidOperation | The operation is unset, structurally incomplete, has a non-finite magnitude, or has a negative count. | Build a valid operation-specific descriptor before transport. |
InvalidRequester | The requester Player Controller is null/destroyed. | Invoke from the owning live connection. |
WrongRequesterWorld | The requester belongs to a different world. | Reject cross-world input and reacquire the correct connection. |
InvalidSourceReference | The request supplied no source network identity. | Send the authoritative source entity's session reference. |
InvalidTargetReference | Damage or Persistent Effect Remove omitted its required target. | Supply the intended target's current session reference. |
SourceEntityUnavailable | The source reference is unknown or stale on authority. | Stop retrying stale IDs; wait for current ownership/relevance state. |
TargetEntityUnavailable | The optional/required target reference is unknown or stale. | Reacquire the target or reject the action in UI. |
NoAllowingPolicy | No live project policy explicitly allowed the request. | Install/repair a bounded ownership policy; do not change the default to implicit allow. |
DeniedByPolicy | A project policy vetoed the request. | Use the deciding policy ID/reason for diagnostics and do not dispatch. |
InvalidPolicyResponse | A non-Abstain response omitted its stable policy ID or returned an unknown decision. | Repair the provider implementation; the request changed nothing. |
EvaluationInProgress | A policy recursively evaluated or changed the registry during evaluation. | Remove policy re-entry and defer follow-up work until evaluation returns. |
EMFNetworkStateResult
Returned when maintaining or immediately refreshing one Player Controller's owner-only gameplay-state relevance set.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | Relevance changed or the requested capture completed without truncation. | Consume the initial/current state or wait for later semantic update events. |
InvalidWorld | The component or required world subsystem has no live world. | Reacquire the owning Player Controller and component from the active network world. |
InvalidOwner | The component is not the sole Mass Forge state component on a live Player Controller. | Install exactly one state component as a default Player Controller component. |
NotServerAuthority | A client attempted to add, remove, clear, or force authority relevance. | Make relevance decisions on the server; clients only query replicated state. |
InvalidEntity | The authoritative Mass handle is unset, stale, or was invalidated during refresh. | Reacquire the current generation or allow automatic relevance removal to complete. |
MissingNetworkIdentity | The entity does not yet carry an initialized Mass network ID. | Configure Mass Replication and add relevance only after identity initialization. |
AlreadyRelevant | The same session identity is already in this connection's relevance set. | Treat setup as idempotent and query its existing state. |
NotRelevant | Removal or forced refresh found no matching session identity. | Treat removal as already complete or add the entity on authority first. |
CapacityReached | This connection reached its configured relevant-entity bound. | Remove stale interest entries or raise the profiled bound deliberately. |
CaptureDeferred | Mass was processing, so relevance was retained without reading unstable fragments. | Wait for the bounded scheduled retry and its Added/Updated event. |
CaptureFailed | Registry setup, a section result combination, or a fixed payload capacity prevented a complete baseline. | Inspect entity traits/capacities and correct setup; Mass Forge never sends a truncated state. |
StaleNetworkIdentity | A relevant entity's Mass network ID changed after its connection binding was created. | Retire the stale relevance entry and register/add the entity under its current immutable session identity. |
InvalidAttributeRule | An attribute rule has an unset ID, a negative/non-finite step, a duplicate Attribute ID, or the rule array exceeds the fixed attribute capacity. | Correct the complete rule set and configure it again; the previous runtime policy remains unchanged. |
EMFNetworkRequestPolicyProviderResult
Returned when maintaining the bounded weak server request-policy chain.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Success | The policy registry changed as requested. | Keep lifecycle-safe registration/unregistration pairing. |
InvalidWorld | No live authority world exists. | Register from a world-owned server object. |
NotServerAuthority | A remote client attempted to own server request policy. | Install the provider on Game State or another authority-owned object. |
InvalidProvider | The object is null or does not implement the policy interface. | Pass a live IMF_NetworkRequestPolicy object/component. |
WrongWorld | The provider belongs to another world. | Register with its own world's subsystem. |
AlreadyRegistered | The provider is already present. | Treat setup as idempotent. |
NotRegistered | Unregistration found no matching live provider. | Treat it as already removed or correct teardown pairing. |
CapacityReached | Sixteen live providers are already registered. | Consolidate related project checks or unregister unused providers. |
EvaluationInProgress | Registration changed while a request policy chain was executing. | Defer registry mutation until the evaluation has returned. |
EMFNetworkClientSubmissionResult
Returned immediately on the owning machine when handing a descriptor to the Player Controller request component. Submitted means only that the unreliable RPC was emitted or processed locally; wait for the server receipt before treating the request as accepted.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Submitted | The owner-bound component assigned a positive correlation ID and handed the request to transport. | Store the ID and correlate the later server receipt and, if accepted, completion. |
InvalidWorld | The component has no live world. | Submit only after the owning Player Controller and component have entered a world. |
InvalidOwner | The component is not owned by a live Player Controller. | Add it as a default component of the project Player Controller class. |
NotLocallyControlled | Code tried to submit through another connection's controller. | Submit only through the local owning Player Controller. |
RequestIdExhausted | The component exhausted its positive signed 64-bit client request sequence. | Recreate the connection/component; never wrap or reuse correlation IDs. |
EMFNetworkTransportResult
Returned by the server receipt after owner, payload, replay, rate, outstanding-capacity, policy, catalog, and backend-queue admission checks.
| Value | Cause or meaning | Recommended response |
|---|---|---|
Accepted | The request entered the matching bounded authoritative gameplay queue and has a positive backend ID. | Wait for the correlated terminal completion; activation completion may mean a cast/channel lifecycle started, not ended. |
InvalidOwner | The replicated component is not owned by a live Player Controller. | Install the component on the Player Controller class and do not reparent it at runtime. |
NotServerAuthority | Processing occurred outside authoritative server context. | Repair component replication/ownership and submit through its generated Server RPC. |
InvalidPayload | Operation fields, bounds, scalar count, identities, or finite-number requirements failed. | Rebuild the operation-specific descriptor; the project policy and gameplay queues were not called. |
ReplayOrOutOfOrder | The client ID was not greater than the last structurally valid ID received on this connection. | Allocate IDs monotonically through Submit Network Request; never retry with an old ID. |
RateLimited | The connection exceeded its server-owned real-time request-window limit. | Back off and configure an intentional per-game limit on the component class defaults. |
TooManyOutstanding | Too many accepted requests still await backend terminal events for this connection. | Wait for completion; investigate stalled world processing if capacity does not recover. |
AuthorizationRejected | The authority subsystem or project policy chain rejected the request. | Inspect AuthorizationResult, PolicyId, and Reason; never bypass the deny-by-default policy. |
DefinitionRejected | The stable ID did not resolve through the expected server-approved definition family. | Preload/register the correct definition on authority; never load using the client name. |
BackendUnavailable | The required Mass Forge world subsystem was unavailable. | Verify plugin/world initialization and the operation's subsystem dependency. |
BackendRejected | The matching bounded gameplay queue rejected admission or returned no valid backend ID. | Inspect the operation-specific result on the receipt, correct the request, or wait for queue capacity. |
UnsupportedOperation | The common transport intentionally does not carry this operation, currently Entity State Restore. | Keep save restoration on a trusted project-owned server path until a separately bounded snapshot channel is implemented. |
Reading compound results
- Attribute changes: branch on
FMFAttributeChangeResult.Result, then use previous/new value and clamp state only on success. - Instant Effects: read the top-level attribute result first, then failed-operation/tag fields; successful operation arrays describe the atomic commit.
- Damage: read
FMFDamageApplicationResult.Resultfirst. On layered failures, inspectAttributeResult,GameplayTagResult,FailedAttribute,FailedTag, policy identity/reason, and the nested transaction. - Abilities: read
FMFAbilityActivationResult.Resultfirst, then requirement, targeting-policy, cost, gameplay-tag, Instant Effect, and Persistent Effect details relevant to that code. - Queues: acceptance means
Successplus a positive request ID. Rejection returns ID0and no completion. The later completion event is authoritative for execution-time success because complete entity generations and submitted definition identities are revalidated. See the deferred recovery matrix. - Actor dispatch:
FMFEffectDispatchReceipt.Routeidentifies whether Mass, an Actor interface, or a receiver component was selected; never assume an Actor uses only one ownership path. - Projectiles: branch first on
FMFProjectileLaunchReceipt.Result; after acceptance, useFMFProjectileResolveResult.Reason, then inspect the optional nested Damage result before treating impact as applied damage.