A sequence-based cinematic controller. Chain camera movements, dialogues, screen effects, and character animations using a simple step-by-step table structure.
The Cutscene module locks the player's controls, takes over the camera, and processes an ordered sequence of events. Steps can run sequentially (one after another) or in parallel. It handles tweening, yielding, and cleanup automatically, ensuring the player is safely returned to normal gameplay when the sequence concludes.
Place the Cutscene module in ReplicatedStorage. The module is built to seamlessly integrate with the SubtitleSystem and ScreenEffectsModule if they are present. It attempts to load them via safe pcalls:
• Subtitles: ReplicatedStorage.Subtitles.SubtitleSystem • Effects: ReplicatedStorage.Effects.ScreenEffectsModule
If you prefer to load cutscenes by name rather than passing table data directly, store your sequence ModuleScripts in ReplicatedStorage.Cutscenes.CutsceneData.
Basic Usage — Inline Sequence
Advanced Usage — Parallel execution, Dialogue, and Events
You can move NPCs or the player's character during a cutscene using the MoveCharacter and AnimateCharacter steps. MoveCharacter supports both physical walking (via Humanoid:MoveTo) and Tweening.
Walking and Animating NPCs
| Prop | Type | Default | Description |
|---|---|---|---|
| SetCamera / MoveCamera | Step | — | Requires a `CFrame` property. `MoveCamera` also requires `Time` (number) to dictate the tween duration. |
| AttachCamera / DetachCamera | Step | — | Attaches the camera to a `Target` (BasePart or Attachment) on RenderStepped. Optional `Offset` (CFrame). Use `DetachCamera` to stop tracking. |
| Dialogue | Step | — | Passes the `Opt` (table) property directly to `SubtitleSystem:Show()`. Skips if Subtitles module is absent. |
| Effect | Step | — | Requires `Effect` (string, e.g., 'Shake', 'Glitch'). Passes `Args` (array) or `Time` to the ScreenEffects module. |
| MoveCharacter | Step | — | Requires `Character` (Model). Accepts `Position` (Vector3/BasePart), `Method` ('Walk' or 'Tween'), `Speed`, `Face` (Vector3/BasePart), and `Timeout`. |
| FireEvent | Step | — | Fires a RemoteEvent or BindableEvent provided in `Event`. Passes the array provided in `Args`. |
| Run | Step | — | Executes a custom function provided in `Action`. If the function returns a Tween or Signal, the step will yield until completion. |