Skip to content

Adding a verb

Start with the verb's column in Current Rune Type. A verb is a word; what it does to each noun lives in that noun's rules, and how it looks lives on each puzzle.

1. The verb word

Create a RuneDataAsset in Content/Rephrased/Gameplay/Runes/Verbs/ and set:

Field Meaning
RuneWord Player-facing word. Match the rune matrix exactly.
EnglishDefinition Definition shown under the word above its world rune while the G definitions toggle is on.
WordType VERB.
RuneVisualMesh Rune mesh shown on the word's pedestal, as the drawn rune, and on a world rune whose Visual has no mesh of its own.
Duration How long the verb's temporary effects last, such as how long Rise holds.

A verb data asset: the Word fields and the Verb category with Duration

2. One rule per matrix cell

For each noun the verb affects, open the noun's data asset and add rows under Rules:

Field Meaning
Verb This verb.
From Status The exact state the noun is in, e.g. Closed.
To Status The exact state after the command. Keep it equal to From Status when the verb changes no state, such as Rotate on a Column.
Stops Motion Tick for Freeze-style verbs: the puzzle stops moving where it is.

Cells whose effect lasts a while go under Temporary Rules instead: Verb and From Status. The state stays the same and the puzzle plays for the verb's Duration.

Every row titles itself, e.g. Closed + OPEN -> Open or Normal + RISE (temporary). Data validation reports two rows for the same cell.

3. How it plays on each puzzle

On each noun's puzzle Blueprint, add a Performances entry for the result the verb reaches:

  • To Status: the resulting state
  • From Status and Specific Verb: optional, to narrow the match
  • Animate to Look: animates the parts into the new state's look
  • Play Cinematic: plays a Level Sequence as the camera shot
  • Behavior: optionally Move, Rotate, Rise (Temporary), or Swap Mesh

Rules that reach the same result share a performance, so a new verb often plays an existing one. A rule that changes the state also applies the new state's State Looks row. See Puzzle rules and behaviors.

4. A new behavior

When no existing behavior expresses the verb, create a URunePuzzleBehavior subclass under Source/Rephrased/RuneSystem/Behaviors/:

UCLASS(meta = (DisplayName = "My Behavior"))
class REPHRASED_API URunePuzzleMyBehavior : public URunePuzzleBehavior
{
    GENERATED_BODY()

public:
    virtual bool MovesObject() const override { return true; }

protected:
    virtual void Update(float Alpha) override;
};
  • Update(Alpha) runs every frame from 0 to 1 over GetTotalTime(); GetTarget() is the component it drives.
  • Start, Finish, and Stop cover setup, the settled end, and being cut short.
  • MovesObject returning true lets Freeze stop it and lets checkpoints save the target's pose.

Blueprint children implement OnBegin, OnUpdate, and OnComplete instead. Both appear in the Behavior dropdown.

Verification

  • The verb has a rule row for every matrix cell it covers, and validation reports no duplicate cells.
  • Commands in a state with no row reject with feedback.
  • Each result plays the intended performance and settles into the right State Looks row.
  • Freeze stops the verb's movement where it is.
  • Rephrased.Rune.CORE009 passes, and PIE covers each supported cell and one rejected cell.
  • For C++ work: convention_check, human compile, request_review, and devlog are complete.

Source files

  • Source/Rephrased/RuneDataAsset.h
  • Source/Rephrased/RuneSystem/Effects/RuneNounRule.h
  • Source/Rephrased/RuneSystem/Effects/RunePuzzleActor.h
  • Source/Rephrased/RuneSystem/Behaviors/RunePuzzleBehavior.h

Change history

  • 2026-10-02 — Gabriel Li — Performances list Animate to Look, Play Cinematic, and an optional Behavior; word field descriptions for EnglishDefinition and RuneVisualMesh match the Rune Data Asset; added editor screenshots (CORE-011).
  • 2026-09-29 — Gabriel Li — Rewrote verb authoring around noun rules, puzzle performances, and puzzle behaviors (CORE-009).
  • 2026-09-17 — Gabriel Li — Updated verb authoring to VerbEffectClass, noun overrides, status transitions, and runeable-object command delivery. Custom verb example is a concrete class so the receiver can instantiate it.
  • 2026-09-10 — Gabriel Li — Marked the effect-component recipe as legacy for SP2 and documented the current command-receiver route.
  • 2026-09-05 — Gabriel Li — Updated to the shipped hybrid Content structure (PR #19): PreProShowcase sandbox under Content/Rephrased/Levels/Prepro/, Art/Gameplay/Levels layout, Imports isolation, Content/Developers/<Discipline>/<Name>/ scratch space.
  • 2026-05-23 — Gabriel Li — Designer vs engineer routing callout at top.