Questlight Studio
Docs / Camera and battle presentation

20. Camera and battle presentation

In short: one camera framing system keeps every camera (exploration, each battle mode, cinematic shots) out of rocks and walls, and the battle presentation system turns the results the rules already computed into a show: timelines of cues for animation, effects, sound, camera, hit-stop and text. Use this chapter to tune how cameras behave, to give an ability a look, and to understand what is data and what is automatic.

20.1 Basics

20.1.1 The cameras you get

WhereCamera
ExplorationThe party RPG camera: either Tactical (high above the party at a tactical angle, zoom, rotation, smooth follow, optional pan) or Third Person (behind the leader). Pick it in Project Settings → RPG Saga Engine → Exploration → Camera.
Grid TacticsARSETacticsCameraPawn on the same camera arm, following the active unit and the cursor.
Free TacticsARSEFreeTacticsCameraPawn, following the active unit and the cursor.
ATB and turn-basedA fixed stage camera, framed once when the battle starts.
ActionARSEActionCameraRig, with the player's own yaw and pitch.
Cinematic shotsCamera Shot cues in an ability's presentation, plus an optional automatic Cinematic Battle Camera.

You do not have to set any of this up. The defaults frame every mode, and the framing system avoids obstructions in all of them.

20.1.2 Make your cameras obstruction-proof (already on)

  1. Open Project Settings → RPG Saga Engine → Camera Framing. Enabled is on by default.
  2. Mark anything that must move the camera instead of fading with the actor tag RSE.CameraBlocker, and anything that must never fade with RSE.NoFade.
  3. Play a battle. If the camera sits inside geometry, switch on the debug view: console RSE.Camera.FramingDebug 1 draws the probe sphere and the candidate poses.

Small things (thin walls, props, trees) fade locally as in exploration (Camera Occlusion). What cannot fade (landscapes, terrain-tagged objects, anything tagged RSE.CameraBlocker or RSE.NoFade, anything at least Camera Occlusion → Max Fade Size wide on both horizontal axes, 1500 cm by default) moves the camera.

20.1.3 Give an ability a look

Every ability can name a presentation asset (Presentation on the ability). Without one, the plugin builds a default timeline: the body of the approach (run in, stay put or shoot) and the hit reaction on the target.

  1. Content Browser → Add → Miscellaneous → Data Asset → RSE Battle Presentation Data.
  2. Add cues to its list, in order: for example Move / Approach (To Target), Montage, VFX, Sound, Impact, Move / Approach (To Home).
  3. On the ability, set Presentation to the asset.
  4. Press Play in a battle and use the ability. Use the Ability Test and preview tools (see 06-abilities-and-statuses.md) to iterate without fighting.

20.2 How it works

20.2.1 The presentation flow

The rules (RSECore) resolve an action instantly and emit events. The presentation (RSE) plays them back. A director hands the action to the cue player component (URSEBattleCuePlayerComponent), which runs the timeline of cues; the Impact cue is the moment the director shows the already-computed results (numbers, falls, statuses) and the targets react. With no Impact cue the results appear at the end of the timeline. Because the result never depends on the show, headless simulations skip it and stay identical.

Each cue starts after its Delay. The next cue waits only if the previous one has Wait For Completion, so cues overlap freely (an effect that starts with the swing, for example). Common cue fields: Delay, Wait For Completion, Only In Modes (Battle.Mode.* tags; empty means every mode; Battle.Mode.ATB also covers turn-based), and Optional (skipped when effects are reduced). Cues act on roles, not on named units: Caster, Primary Target, All Targets or Each Target, Targets Center, Midpoint. One asset therefore works for every character in every mode.

20.2.2 The cue types

Cue (display name)ClassWhat it does
Move / ApproachURSECue_MoveRun to the target or back home. In Tactics this becomes a short step (units stay on their tile).
Pose (procedural)URSECue_PosePlaceholder motion (lunge, hop, spin, shake, recoil) for units without animation
MontageURSECue_MontageA montage on units with a skeletal mesh; RSEImpact notifies time the next Impact cue
VFXURSECue_VFXA Niagara (or legacy particle) system at an anchor (chest or ground) or a body anchor (hand, weapon tip, muzzle, head, feet)
SoundURSECue_SoundA sound or a catalog tag, 2D or at an anchor
Camera ShotURSECue_CameraClose-up on caster or target, over the shoulder, two-shot, orbit, return; blend, hold, distance, height, FOV
Camera ShakeURSECue_CameraShakeA procedural shake
Hit StopURSECue_HitStopA brief freeze
Slow MotionURSECue_SlowMotionTime dilation with blend in and out
Screen Flash / FadeURSECue_ScreenFlashA color flash or fade
Text / BannerURSECue_BannerThe ability's name or your own text, as a banner or a title
WaitURSECue_WaitA pause
ImpactURSECue_ImpactShow the results; several Impact cues make a multi-hit
ProjectileURSECue_ProjectileA projectile flight from the caster to the targets
Weapon Attack, Weapon Shot, Weapon Hit Effects, Weapon AnimationURSECue_Weapon*The weapon's own show (see 18-weapons.md)
Paired AnimationURSECue_PairedAnimationTwo synced montages for a finisher or counter (see 17-characters-visuals-and-animation.md)

Approach on the ability: Auto picks from the data (physical damage to enemies → Melee; row-ignoring → Ranged; everything else → In Place), or choose Melee, Ranged, In Place or Custom (only your cues).

20.2.3 Camera policy

The battle camera stays on the fixed view for ordinary actions. Camera cues run only when the policy allows it (Battle Presentation → Camera Policy):

  • Classic Camera Policy (default Special Only) and Tactics Camera Policy (default All): Fixed never, Special Only only for special actions, All always.
  • A special action has Presentation → Cinematic Camera on, is a super move, or is a summon. Boss and summon intros are special.
  • Enemy Special Camera (default off) lets enemies trigger it for the player side; Boss Special Camera (default on) lets bosses.
  • Shake In Fixed View keeps shakes even with a fixed camera.

20.2.4 Cinematic moments

MomentWhenDefault
Super moveAbility with Presentation → Moment = Super MoveClose-up on the caster, slow motion, flash, title, then a side or over-shoulder shot and the attack body with shake and hit-stop
Summon entranceAfter the action that brings a summonFlash, close-up, slow motion, the summon's title, a jump, shake, orbit
Boss introAt battle start, when the encounter has a VIP enemyOrbit around the boss, its name as a title, a tremor

All can be replaced by assets in the settings (Super Move Prelude, Summon Entrance, Boss Intro), switched off (Summon Entrance, Boss Intro toggles), and skipped with Confirm or Cancel. The battle HUD hides while they run.

20.2.5 Speed, skip and reduced effects

Playback Speed (1 = normal) and Fast Forward Speed while a key from Fast Forward Keys is held. Cinematic moments always skip with Confirm or Cancel; ordinary actions only with Allow Skip Actions. On a skip the remaining impacts fire, so results always appear. Reduce Effects turns off shake, flash, hit-stop and optional cues for weak PCs and accessibility. The player's own options (Reduced battle effects, Battle animation speed) override the rule; the order is console variable, then player choice, then the rules.

20.2.6 How framing chooses a pose

The framer (FRSECameraFramer, in RSECameraFraming) runs on a timer (Check Interval, 0.1 s), not every frame:

  1. It tries poses around the desired one, cheapest first: yaw in steps (Yaw Step 20 deg × Yaw Steps 2), a steeper angle (Pitch Step 10 deg × Pitch Steps 2, up to Max Pitch 80), alternative sides (Alternate Yaws), then moving closer (down to Min Distance Share 0.6 or Min Distance 300 cm).
  2. Each pose is tested with a sphere (Probe Radius 24 cm) from the pivot toward the camera, against the focus heights (Focus Heights, up to Max Focus Targets).
  3. Hysteresis stops flicker: a blocked pose is left after Switch Delay (0.1 s); a free pose changes to a cheaper one only after the cheaper one has stayed better for Return Delay (0.8 s) and by Switch Margin.
  4. Offsets glide to the chosen pose at Blend Speed.
  5. Never inside geometry: every frame, a safety sphere (at least the near clip plane plus Near Clip Margin) is swept from the pivot to the displayed pose. It enters instantly and leaves smoothly (Release Speed).

Per mode: Exploration keeps the player's yaw (only angle and distance adapt); Grid Tactics tries small steps, a steeper angle or another side (90 or 180 deg) before moving in, so the grid stays readable; ATB frames once at battle start without changing sides; Action keeps the player's yaw and pitch and uses the framer instead of a simple probe.

20.2.7 The cinematic battle camera

Off by default; for captures and trailers. Turn it on in Camera Framing → Cinematic Battle (Enabled) or with RSE.Camera.CinematicBattle 1. Each action gets shots chosen on the spot and checked for visibility: over the shoulder of the attacker (one target), a wide shot (Wide Shot Targets or more targets, default 2), and the target's reaction at the first impact (Reaction Shot). It follows the 180-degree rule, cuts or glides depending on how far the view turns (Cut Angle, default 40 deg), and holds each shot at least Min Shot Seconds (0.6 s). Distances and field of view are in the same group (Over Shoulder Distance 420 cm, Wide Distance 1100 cm, Field Of View 50).

20.3 Key classes and assets

Class / assetModuleRole
URSEBattlePresentationDataRSEThe timeline of cues (an ability's presentation)
URSEBattleCue, URSEBattleCue_CustomRSEBase cue; the Blueprint-extendable cue with On Cue Start, On Cue Update, On Cue Stop
URSEBattleCuePlayerComponentRSEPlays timelines for the ATB and Tactics directors
URSEBattlePresentationSettingsRSEProject Settings → Battle Presentation
URSECameraFramingSettingsRSEProject Settings → Camera Framing
URSECameraOcclusionSettings, URSECameraOcclusionSubsystemRSEFade and hide of what hides the party
URSERPGCameraArmRSEThe party RPG camera arm
ARSETacticsCameraPawn, ARSEActionCameraRigRSEGrid Tactics and Action cameras
IRSECameraFocusInterfaceRSELets your camera pawn tell the occlusion system what to keep visible (Get Camera Focus)
ARSEFreeTacticsCameraPawnRSEThe Free Tactics camera
URSEAudioSettings, URSESoundCatalogRSEMusic, sound catalog and the mixer

20.4 Settings

Project Settings → RPG Saga Engine. Full list: Appendix B.

  • Camera Framing: Enabled, Camera Blocker Tag (RSE.CameraBlocker), rules per mode (Exploration, Grid Tactics, Free Tactics, ATB, Action, Shot, Capture), Cinematic Battle, capture clearance values.
  • Camera Occlusion: Check Interval 0.1 s, Max Targets 4, Never Fade Tag (RSE.NoFade), Max Fade Size 1500 cm, Hide Delay 0.15 s, Show Delay 0.4 s, ghost and hide fallbacks, Ground Tags (RSE.Ground).
  • Exploration → Camera: Camera Style (Tactical or Third Person) and the values of each style (zoom limits, tilt, rotation, follow smoothing for Tactical; distance, shoulder offset and so on for Third Person).
  • Battle Presentation: playback and fast-forward speed, approach values and default timelines, Camera Policy, Reduce Effects, cinematic moments, floating text styles, the action banner.
  • Audio: Context Music and Map Music, fades, a Sound Catalog (URSESoundCatalog: gameplay tags to sounds), battle event sounds (critical, perfect, block) and the mixer channels.

20.5 Blueprint usage

Authoring is mostly data. For custom behavior, subclass RSE Battle Cue Custom in Blueprint:

  1. Content Browser → Add → Blueprint Class → search Custom (Blueprint) (class URSEBattleCue_Custom).
  2. In the class defaults set Duration (0 means instant: only start and stop run), Subjects (which units the events receive), Receive Update (only if you need per-frame work) and Is Impact (the results show when the cue starts).
  3. Override On Cue Start (Player, Subject Actors): for example For Each Loop over Subject Actors → Spawn Emitter Attached.
  4. Override On Cue Update (Alpha, 0 to 1 over Duration) for continuous effects and On Cue Stop (Skipped) to leave things in their final state. The events are const: the cue is shared data, so keep state on the subject actors, not in the cue.
  5. Add your cue to a presentation asset's cue list, with its Delay and Wait For Completion.

To tell the occlusion system what must stay visible on your own camera pawn, implement the RSE Camera Focus Interface (Class Settings → Interfaces → Add) and override Get Camera Focus, returning the feet of the characters to keep visible (most important first) and the actors never to hide. Dev commands for tuning the exploration camera while playing: RSE.Camera zoom in|out|min|max|<distance>, RSE.Camera yaw <deg>, RSE.Camera tilt up|down|reset, RSE.Camera pan <x> <y>, RSE.Camera style tactical|thirdperson, and RSE.Camera prop wall|pillar|bigtree|mesh to drop a test obstruction in front of the camera (props are tagged RSE.CameraTestProp).

20.6 C++ usage

// A new cue type: a timed pause the timeline can wait for.
UCLASS(meta = (DisplayName = "My Beat"))
class UMyCue_Beat : public URSEBattleCue
{
    GENERATED_BODY()
public:
    UPROPERTY(EditAnywhere, Category = "Beat", meta = (ClampMin = "0", Units = "s"))
    float Seconds = 0.2f;

    virtual void Start(URSEBattleCuePlayerComponent& Player, FRSECueState& State) const override
    {
        State.Duration = Seconds;           // the player ends the cue when this has elapsed
    }
    virtual float EstimateDuration(const URSEBattleCuePlayerComponent&) const override { return Seconds; }
};

Extension points: subclass URSEBattleCue (or the Blueprint-friendly URSEBattleCue_Custom); implement IRSECameraFocusInterface on your actor to feed the framer a focus; use FRSECameraFramer with your own FRSECameraFramingRules for a camera of your own; add presentation assets per ability. A new battle mode only needs to use the cue player component and call the framer.

20.7 Advanced

  • Per-mode rules. Each FRSECameraFramingRules has costs (Yaw Cost, Pitch Cost, Pull Cost, Alternate Cost, Blocked Cost) that decide which pose wins. Raise Pull Cost if you hate the camera moving closer; raise Yaw Cost if you want it to rotate less.
  • Performance. Pose probes run on a timer, only the safety sphere runs every frame. Cue player components do not tick when idle. Soft assets (montages, Niagara, sounds) load asynchronously before the first cue, and the abilities of a battle preload at its start.
  • Co-op. Time dilation (slow motion, hit-stop) is refused in co-op sessions, so one player's show never slows another's. See 22-networking.md.
  • Capture tools. The framing rules include a Capture set and checks for capture points: camera in geometry, look target hidden, a wall closer than Capture Min Clear Distance (400 cm) in front of the view. Occluded points are moved to a free pose.
  • Debug CVars. RSE.Camera.Framing 0 (off), RSE.Camera.FramingDebug 1, RSE.Camera.CinematicBattle 1, RSE.Battle.Presentation.Speed, RSE.Battle.Presentation.ReduceEffects (-1 = settings, 0 or 1). See Appendix C.
  • Limits. Returning from a cinematic shot to the battle camera uses the engine's view-target blend (both ends are clean, the path is not probed). The ATB camera frames once; the stage can call FrameCamera again after changes.

20.8 Troubleshooting

SymptomCauseFix
Camera sits inside a rockThe rock is wider than Max Fade Size but not taggedTag it RSE.CameraBlocker; check with RSE.Camera.FramingDebug 1
A small prop never fadesIt carries RSE.NoFadeRemove the tag
The camera jumps around a pillarHysteresis too shortRaise Switch Delay and Return Delay in the mode's rules
An ability has no camera shotThe policy is Fixed, or the action is not specialSet the policy to All, or tick Cinematic Camera on the ability
Effects fire but results never appearThe timeline has no Impact cue and the cue was skipped mid-wayAdd an Impact cue; skipping always fires the remaining impacts, so check the cue asset loaded
Shake and flash are missingReduce Effects is on (setting, option or CVar)Check RSE.Battle.Presentation.ReduceEffects and the player's option
A cinematic moment cannot be skippedInput is captured elsewhere, or a super move without camera lost its preludeCheck the policy; the HUD stays visible in that case
Camera cues play in ATB but not as expectedClassic Camera Policy is Special OnlySwitch to All or mark the ability special

20.9 See also