DreamFXLang
Diagnostics

DFX3xxx — Declarations and document structure

Every DFX3xxx diagnostic, with its severity, verbatim message, cause and fix.

DFX3xxx --- Declarations and document structure

The block between the generated markers is written by .skill/gen-diagnostics.ps1. Everything below a marker is written by hand and survives a regeneration.

DFX3000

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1930, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1941

Cause. The Root="..." does not name a mounted content root, or Name="..." has no asset name after its last slash.

Fix. Root is Game, empty, or Plugin.<PluginName>. Name is a path ending in the asset's name, e.g. Systems/NS_Spark.

DFX3001

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1519

Cause. The module name resolved to nothing on the search paths. Distinct from DFX3003, which means the module exists but has no such input -- a typo in a path and a typo in an argument would otherwise read the same.

Fix. Add the folder to Settings.ModulePaths, or write the full asset path. dfx list prints every module on the current paths.

DFX3002

Severity error

Message

Could not read the input schema of module '%s': %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1560, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1613

Cause. The module was found but its input signature could not be read. The schema is probed by adding the module to a transient system, so this usually means the module cannot live in the stack it was written in.

Fix. Check the stack. dfx schema <Module> -Stack <Stack> reproduces the probe.

DFX3003

Severity error

Message

Module '%s' has no input named '%s'.%s Available inputs: %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1677

Cause. The module has no input by that name. Niagara input names contain spaces (Loop Duration); DreamFX normalises both sides, so LoopDuration matches, but a misspelling does not.

Fix. Use one of the names listed. A near-miss is suggested. dfx schema <Module> prints the full signature, including inputs hidden behind a static switch.

DFX3004

Severity error

Message

Unknown renderer type '%s'. Expected one of SpriteRenderer, MeshRenderer, RibbonRenderer, LightRenderer, DecalRenderer, ComponentRenderer, VolumeRenderer, or any UNiagaraRendererProperties subclass.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1740

Cause. Renderer types are a closed set.

Fix. Use one of the listed types. Renderer properties are schema-driven and open (L8); only the type keyword is fixed.

DFX3005

Severity error

Message

Emitter '%s' is declared more than once. Emitter names are stable keys and must be unique.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2117

Cause. Two emitters share a name. The name is the stable key the regeneration contract matches handles by (plan 4.5), so a duplicate is data loss, not a naming nit.

Fix. Rename one. To rename an emitter that already exists in an asset, use dfx rename first so the handle and its rapid-iteration parameters survive (R4).

DFX3006

Severity error

Message

'%s' is neither an allowed inline function (%s) nor a dynamic input: %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1183

Cause. A call in a value position matched neither the L6 builtin whitelist nor any dynamic input asset.

Fix. Use one of the builtins listed, reference a real dynamic input, or write the maths in an hlsl { } block. Widening the whitelist is a design decision (L6), not a config change.

DFX3007

Severity error

Message

Could not read the input schema of dynamic input '%s': %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1225

Cause. The dynamic input asset was found but its signature could not be read.

Fix. dfx schema <Name> reproduces the read against the same asset.

DFX3008

Severity error

Message

Dynamic input '%s' has no input named '%s'. Available inputs: %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1277

Cause. The dynamic input has no input by that name -- DFX3003 one level down a chain.

Fix. Use one of the names listed.

DFX3009

Severity error

Message

Dynamic input '%s' is pinned to version %s, which its asset does not offer. Available version(s): %s.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1207, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1542

Cause. An R7 @version pin disagrees with the module asset's exposed version, or pins an asset that never opted into versioning. The pin records which version the source was written against; DreamFX cannot build against any other one, because the external edit API has no way to select a version.

Fix. Retest against the exposed version and update the pin, restore the version on the asset, or drop the @ if the module is unversioned.

DFX3010

Severity error

Message

Property '%s': %s

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1145, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2051, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:337

Cause. A Properties entry is malformed -- see the inner message.

Fix. Fix the declaration. Types are listed in DFX4021's message.

DFX3020

Severity error

Message

Cannot read the default for %s setting '%s'.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1965, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:737, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:766

Cause. A settings key is not supported, or the generator cannot read a mapped setting's fresh-asset default from the current engine. The latter prevents rebuilding with stale values for settings removed from the source.

Fix. For an unknown key, use one of the supported names listed in the diagnostic. If reading defaults failed, check the accompanying engine/probe error and report the engine version and setting name; rebuilding requires a valid default schema.

DFX3021

Severity error

Message

User parameter '%s' is declared more than once.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1998

Cause. Two user parameters share a name; a blueprint SetNiagaraVariable would reach whichever won.

Fix. Rename one.

DFX3030

Severity error

Message

A Module or DynamicInput must declare Settings.Usage -- it decides which stacks the module can be placed in.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:186

Cause. Usage decides which stacks a module may be placed in. Without it the module exists and is unreachable from every stack.

Fix. Add Usage = ParticleUpdate; (or another stack). An array selects several: Usage = [ParticleSpawn, ParticleUpdate];

DFX3031

Severity error

Message

A DynamicInput must declare Settings.Output -- its return type cannot be inferred from the body.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:194

Cause. A dynamic input's return type cannot be inferred from its body.

Fix. Add Output = float; (or the type it returns).

DFX3032

Severity error

Message

A DynamicInput's Usage must be DynamicInput or a nonempty array of stack names.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:218

Cause. A DynamicInput declares an invalid Usage value: a bare stack name, an empty array, or an array containing an unknown stack name.

Fix. Use Usage = DynamicInput; for its default stack mask, or a nonempty stack array such as Usage = [SystemSpawn, SystemUpdate]; to select where the input is available.

DFX3033

Severity error

Message

Input '%s' is declared more than once.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:228

Cause. Two inputs share a name and would collide on the same Module. parameter.

Fix. Rename one.

DFX3034

Severity error

Message

Input '%s' is marked [StaticSwitch] but is a %s. A static switch must be a bool, an int or an enum.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:243

Cause. R5: a static switch is resolved at compile time, so it has to be something a switch can branch on.

Fix. Make it bool, int, or an enum -- or drop the [StaticSwitch].

DFX3035

Severity error

Message

Input '%s' is a [StaticSwitch], so its default must be a compile-time constant.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:249

Cause. R5 from the other side: a switch resolved at compile time cannot take a runtime value.

Fix. Give it a literal default.

DFX3036

Severity error

Message

The Body block is empty.

Raised by Source/DreamFXEditor/Private/Lint/DreamFXLint.cpp:258

Cause. An empty body generates a module that occupies a stack slot and does nothing.

Fix. Write the body, or delete the file.

DFX3037

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:1054

Cause. A dynamic input's body is not a single expression. The Niagara translator wraps it as Output = (Type)( <body> );, so statements before the return produce invalid HLSL rather than an error naming the real problem.

Fix. Fold it into one expression, or write it as a Module -- a module's body is emitted verbatim and can hold as many statements as it likes.

DFX3038

Severity error

Message

'%s' is not a stack a module can be placed in. Use one of: %s.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:931

Cause. Usage names one of the six stacks (L1) and nothing else.

Fix. Use one of the names listed.

DFX3039

Severity error

Message

A DynamicInput cannot return a data interface; its Output must be a value type.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:972

Cause. A dynamic input feeds a value into an input slot; a data interface is not a value.

Fix. Return a value type. Data interfaces are declared in Properties and fed at runtime (plan 3.5).

DFX3040

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2136

Cause. The from path did not resolve to a .dfe on disk.

Fix. Paths resolve relative to the referencing file first, then against every DFX root. The extension is optional.

DFX3041

Severity error

Message

'%s' could not be parsed; see the errors above.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2149

Cause. The referenced .dfe has its own errors; they are reported above this one against the .dfe's own path.

Fix. Fix the .dfe. Its diagnostics carry its own file and line, not the host's.

DFX3042

Severity error

Message

'%s' declares a %s, but 'from' needs an Emitter document.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2159

Cause. from pulls in an emitter, and the referenced file declares something else.

Fix. Point from at a .dfe.

DFX3043

Severity error

Message

'%s' reads user parameters this system does not declare: %s. Add them to the Properties block.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1916

Cause. A .dfe is merged by copy (R3), including whatever User.* it reads. The host has to declare those or the copied emitter reads a parameter that does not exist. The diagnostic points at the from line, because that is where the decision was made.

Fix. Add the named parameters to the host's Properties block.

DFX3044

Severity error

Message

The default for input '%s' has to be a literal or an enum entry. A module input default is stored on the asset, so it cannot reference anything outside the module.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:1007

Cause. A module input's default is stored on the asset, so it cannot reference anything outside the module.

Fix. Use a literal or an enum entry. To make it caller-supplied, leave it and set it at the call site.

DFX3046

Severity error

Message

'%s' is not a particle attribute DreamFX knows the type of. Write its type at first use, for example `float %s = ...;`.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:623

Cause. A .dfm body touches a Particles.* attribute that is neither a common Niagara attribute nor declared in the body. The pin wired for it needs a type, and guessing would wire one of the wrong width.

Fix. Write the type at its first use, the way a .dfs declares a new attribute: float Particles.Moon.Phase = 0.0;

DFX3047

Severity error

Message

A DynamicInput computes a value; it cannot write '%s'. Move the write into a Module.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:1043

Cause. A dynamic input computes a value in an input slot; it has no place in the stack to write from.

Fix. Move the write into a Module.

DFX3048

Severity error

Message

Default override '%s' changes its type from %s to %s. Overrides must keep the base parameter's type.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXEmitterMerge.cpp:84

Cause. An emitter using from overrides a base Defaults parameter with a different type. Base stacks may still read the parameter using its original type.

Fix. Keep the base parameter's type when overriding its value. Use a separate parameter name if a different type is required.

DFX3049

Severity error

Message

MeshRenderer has no Material property. Set OverrideMaterials = [\"/path/to/material\"]; and bOverrideMaterials = true; to override its mesh materials.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:1791

Cause. A MeshRenderer declares Material, but mesh materials are controlled by its override array and enable switch.

Fix. Replace Material with OverrideMaterials = ["/path/to/material"]; and set bOverrideMaterials = true;.

DFX3050

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:138

Cause. The system's Parent reference cannot be resolved to a .dfs source file.

Fix. Correct the parent source path and ensure the referenced .dfs file exists in a supported source location.

DFX3051

Severity error

Message

Only a System document can inherit a .dfs parent.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:131, Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:154, Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:161

Cause. The parent source cannot be parsed, does not declare a System, or is being inherited by a non-system document.

Fix. Use system Parent inheritance only between .dfs system documents and fix any diagnostics reported for the parent file.

DFX3052

Severity error

Message

System inheritance contains a cycle or exceeds 128 sources: %s -> %s.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:144

Cause. The system's parent chain revisits a source file or exceeds the limit of 128 sources.

Fix. Remove the circular parent reference shown in the diagnostic or shorten the inheritance chain.

DFX3053

Severity error

Message

Inherited parameter '%s' changes type from %s to %s. An override must preserve the parent's parameter type.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:74

Cause. A child system redeclares an inherited parameter with a different Niagara type.

Fix. Preserve the parent's parameter type when overriding its value, or choose a different name for a new parameter.

DFX3054

Severity error

Message

Parameter '%s' is declared twice in one inheritance layer. An override must be declared in the child source, not twice in the same source.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:22, Source/DreamFXEditor/Private/Generation/DreamFXSystemInheritance.cpp:34

Cause. One source in a system inheritance chain declares the same parameter or emitter name more than once.

Fix. Keep one declaration per name in each source file and place inherited overrides in the child source.

DFX3055

Severity error

Message

(built at runtime)

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2197, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2203

Cause. An emitter's inherits path cannot be resolved to a standalone Niagara emitter asset with inheritance enabled.

Fix. Correct the asset path and enable inheritance on that emitter, or use from "...dfe" when the intended parent is DreamFX source.

DFX3056

Severity error

Message

Native parent has an unavailable version or a cyclic parent chain: %s.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2216, Source/DreamFXEditor/Private/Generation/DreamFXGenerator.cpp:2223

Cause. A native emitter parent chain contains an unavailable version, a cycle, or unmerged ancestor changes.

Fix. Select an existing version GUID, remove any parent cycle, and merge and save pending ancestor changes in Niagara before rebuilding.

DFX3057

Severity error

Message

Attribute '%s' is declared with conflicting types.

Raised by Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:570, Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:577, Source/DreamFXEditor/Private/Generation/DreamFXModuleGenerator.cpp:695

Cause. A .dfm custom attribute has conflicting types, is read during its own initialization, or is first initialized on a path that might not execute.

Fix. Give a new attribute one unconditional whole-value initializer before control flow; to update a custom attribute supplied by an earlier module, declare its type without an initializer and keep subsequent types consistent.

DFX3045

Historical diagnostic. This code is no longer emitted by the current source tree. The section is retained so older diagnostic links remain usable; it is not part of the generated active-code list.

The earlier error was:

'%s' is not a type a particle attribute can have.

It described a particle-attribute declaration in a .dfm body using a type that was not a Niagara value type. The historical fix was to use a supported DSL value type such as float, int, bool, Vector2, Vector, Vector4, Color, Position or Quat. For current authoring rules, see modules and dynamic inputs and values and types.

On this page