Skip to content

VFX

Rune VFX communicate selection, activation, drawing state, command travel, and puzzle response.

World-rune glow

AWorldRune applies authored glow materials to its Visual component:

  • candidate: dim glow using CandidateGlowIntensity
  • pending/active: full glow
  • grammar rejection: four on/off pulses

GlowIntensityParameter and GlowFadeTime control the material transition. Candidate and pending materials live under Content/Rephrased/Art/Materials/.

Drawing feedback

The drawing widget uses four clear states:

  • inactive stroke: gray
  • selected stroke: white
  • active stroke: yellow
  • exact matched pattern: blue

The first matched word parks beside the board while the second is drawn. UDrawnRunePresentationComponent shows active drawn words over the player until cancellation or command completion.

Command orb

AExpandingRingActor is the command visual and delivery clock. It begins at the noun command origin and expands to the authored radius over CommandFeedbackDuration.

The visual mesh and overlap edge stay synchronized. The edge reports reached actors once, so contact VFX should be driven from delivery/presentation events rather than independent timing.

Puzzle presentation

ARunePuzzleActor owns status-facing presentation:

  • State Looks: mesh, materials, visibility, on/off, and transform per state; Active switches any component, so a Niagara component can turn on in one state and off in another
  • Performances: Animate to Look, Play Cinematic with its optional Cinematic Sequence, and the Move, Rotate, Rise, and Swap Mesh behaviors
  • the puzzle's own components, such as the pieces of a repair
  • the rejected event

Tech art can add VFX through State Looks and Performances without changing the noun's rules.

OnPresentationFinishedNative fires once a change is fully presented: straight away when nothing plays, otherwise when the performance ends by itself. A cancelled, stopped, or superseded performance does not fire it. Bind it for feedback that must wait until the motion lands.

Repair feedback

URuneRepairFxComponent sits on BP_Puzzle_Light and BP_Puzzle_Door. Add it to any device with BrokenPiece components.

  • While a repair (Broken to not Broken) flies the pieces back, every BrokenPiece component carries Piece Effect.
  • When the presentation finishes, the piece effects stop and everything that shows the whole object flashes with Flash Material as an overlay for Flash Duration: the main mesh if it is visible, and the pieces if the device stays in pieces (as BP_Puzzle_Light does). A narrow warm band with a thin white core sweeps from the bottom of each mesh to its top, lighting a crisp fresnel rim (off the per-pixel normal) as it passes, then fades. The material reads the scalars Flash (fade), Sweep (0 at the bottom of the mesh, 1 at the top), Intensity, and FresnelExponent and the vector Color; SweepWidth and RimAmount are tuned on the material.
  • A checkpoint restore clears both and plays neither.

The current Piece Effect is the placeholder NS_RepairPiece_Placeholder, a trail of warm sprites left behind each piece, and the flash is M_RepairFresnelFlash, both under Content/Developers/Engineer/JefferyHu/RepairFx/.

Rune orbital

UOrbitSatelliteComponent (the character's OrbitSatellites) has effect slots under Orbit | Effects, beside the Start, Trail, and End effects each flight leg carries:

  • Orbit Ring Effect plays round the owner while any rune revolves on the orbit, centred on it and turned to the orbit's plane (Orbit Tilt, and the owner's facing when Follow Owner Rotation is on). Its X axis runs along Orbit Radii X and its Y along Y. Each frame it receives Orbit Radii in the Vector2 user parameter named by Orbit Ring Radii Parameter (OrbitRadii) and Orbit Speed in the float named by Orbit Ring Speed Parameter (OrbitSpeed). It stops spawning once no rune is left on the orbit.
  • Orbit Trail Effect is attached to each rune while it revolves, round the owner or over the draw floor, at its authored size, for a trail behind it.

BP_RephraseCharacter1 uses two placeholders from Content/Developers/Engineer/JefferyHu/RepairFx/: NS_OrbitRing_Placeholder (local-space sprites spawned on a ring scaled by User.OrbitRadii, so they trace the orbit's ellipse) and NS_RuneTrail_Placeholder (cool sprites left behind each rune). A trail built from the LocationBasedRibbon emitter template draws nothing on its own: it waits for location events from another emitter.

Performance

  • Keep world-rune materials instance-friendly.
  • Command-orb overlap cost grows with nearby collision components; profile dense puzzle rooms.
  • Clean up spawned VFX when a repair cinematic ends or an actor is destroyed.
  • Use prefers-style accessibility equivalents in game settings when flashing feedback is tuned; rejection must remain readable without rapid brightness changes.

Source files

  • Source/Rephrased/RuneSystem/Activation/WorldRune.h
  • Source/Rephrased/RuneSystem/Drawing/DrawnRunePresentationComponent.h
  • Source/Rephrased/ExpandingRingActor.h
  • Source/Rephrased/RuneSystem/Effects/RunePuzzleActor.h
  • Source/Rephrased/RuneSystem/Puzzles/RuneRepairFxComponent.h
  • Source/Rephrased/OrbitSatelliteComponent.h

Change history

  • 2026-10-18 — Jeffery Hu — Rune orbital placeholders on the character: orbit ring and sprite trails (TA-001).
  • 2026-10-18 — Jeffery Hu — Rune orbital: Orbit Ring Effect and Orbit Trail Effect slots (TA-001).
  • 2026-10-18 — Jeffery Hu — Repair feedback: piece effects while pieces fly back, fresnel flash when whole, and OnPresentationFinishedNative (TA-001).
  • 2026-10-02 — Gabriel Li — Performances list Animate to Look, Play Cinematic, and the behaviors (CORE-011).
  • 2026-10-01 — Gabriel Li — Described puzzle parts as Blueprint components (CORE-011).
  • 2026-09-29 — Gabriel Li — Puzzle presentation lists State Looks and Performances (CORE-009).
  • 2026-09-17 — Gabriel Li — Updated VFX guidance for current glow, drawing, command-orb, and puzzle presentation feedback.
  • 2026-05-08 — Gabriel Li — Added baseline change history section for weekly wiki maintenance.