DreamFXLang
Diagnostics

DFX3xxx — Declarations and document structure

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

31 codes in this family (31 error). The message is the format string as the compiler holds it: %s, %d and %c are substituted at runtime.

DFX3000

errorraised byGeneration/DreamFXGenerator.cpp:1696Generation/DreamFXGenerator.cpp:1707

(built at runtime)

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

errorraised byGeneration/DreamFXGenerator.cpp:1257

(built at runtime)

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

errorraised byGeneration/DreamFXGenerator.cpp:1298Generation/DreamFXGenerator.cpp:1351

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1415

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1478

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1848

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

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

errorraised byGeneration/DreamFXGenerator.cpp:923

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

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

errorraised byGeneration/DreamFXGenerator.cpp:965

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1017

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

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

Fix. Use one of the names listed.

DFX3009

errorraised byGeneration/DreamFXGenerator.cpp:1280Generation/DreamFXGenerator.cpp:948

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1792Generation/DreamFXGenerator.cpp:306Generation/DreamFXGenerator.cpp:893

Property '%s': %s

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

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

DFX3020

errorraised byGeneration/DreamFXGenerator.cpp:563

Unknown %s setting '%s'. Available settings: %s

Cause. A settings key that does not exist. An unchecked misspelling would do nothing at all, and the effect would simply be wrong with no sign why.

Fix. Use one of the names listed -- they are read from the live asset, so they are the real ones.

DFX3021

errorraised byGeneration/DreamFXGenerator.cpp:1739

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

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

Fix. Rename one.

DFX3030

errorraised byLint/DreamFXLint.cpp:178

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

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

errorraised byLint/DreamFXLint.cpp:186

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

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

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

DFX3032

errorraised byLint/DreamFXLint.cpp:192

A DynamicInput's Usage must be DynamicInput, not '%s'.

Cause. A DynamicInput document declaring a stack usage makes two statements about what it is that disagree.

Fix. Write Usage = DynamicInput;, or change the document kind to Module.

DFX3033

errorraised byLint/DreamFXLint.cpp:203

Input '%s' is declared more than once.

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

Fix. Rename one.

DFX3034

errorraised byLint/DreamFXLint.cpp:218

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

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

errorraised byLint/DreamFXLint.cpp:224

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

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

Fix. Give it a literal default.

DFX3036

errorraised byLint/DreamFXLint.cpp:233

The Body block is empty.

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

Fix. Write the body, or delete the file.

DFX3037

errorraised byGeneration/DreamFXModuleGenerator.cpp:1014

(built at runtime)

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

errorraised byGeneration/DreamFXModuleGenerator.cpp:896

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

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

Fix. Use one of the names listed.

DFX3039

errorraised byGeneration/DreamFXModuleGenerator.cpp:937

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1868

(built at runtime)

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

errorraised byGeneration/DreamFXGenerator.cpp:1881

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

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

errorraised byGeneration/DreamFXGenerator.cpp:1891

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

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

Fix. Point from at a .dfe.

DFX3043

errorraised byGeneration/DreamFXGenerator.cpp:1683

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

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

errorraised byGeneration/DreamFXModuleGenerator.cpp:967

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.

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.

DFX3045

errorraised byGeneration/DreamFXModuleGenerator.cpp:499

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

Cause. A particle attribute was declared in a .dfm body with a type that is not a Niagara value type.

Fix. Use one of the DSL types -- float, int, bool, Vector2, Vector, Vector4, Color, Position, Quat.

DFX3046

errorraised byGeneration/DreamFXModuleGenerator.cpp:599

'%s' is not a particle attribute DreamFX knows the type of. Write the type at its first use in the body -- `float %s = ...;` -- the way a .dfs declares a new attribute.

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

errorraised byGeneration/DreamFXModuleGenerator.cpp:1003

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

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.

On this page