[Open-Source] EasyCutscenes - A Beta Cutscene-Maker Module

EasyCutscenes is a simple and easy-to-use Open-Source module aiming to ease the work for creating Cutscenes for your games, with this brilliant module, you can manage your created Cutscenes with ease and easily Play those Cutscenes anytime you want. You can simply create a Table containing the data for the Cutscene you wish to create on the Server-Side and then run the cutscene on the Server-side as well! (You can still play the Cutscene for some players) All you need for that is just providing the table of players you wish for the Cutscene to play for them, then the module automatically call the Client-Side to play the cutscene.

Here you can download the Module
Roblox Marketplace or
EasyCutscenes.rbxm

After installed to Studio, you would see a Folder conatining a ModuleScript and a LocalScript, should be as followings :
Screenshot 2024-09-14 120053

Now, put the ModuleScript into ServerStorage. Then, put the LocalScript under StarterPlayerScripts
Screenshot 2024-09-14 120502
After that, you can delete the folder, it is up to you.

Now it’s time to finally write some code! Let’s add a Script into ServerScriptService first!
Screenshot 2024-09-14 120755

Now, let’s create the Table containing the Cutscene Data!

local cutsceneInfo = {
	[1] = { -- Section 1 of the Cutscene
	    ["Position"] = CFrame.new(0,500,0), -- Where the Cutscene should end at, in CFrame
	    ["Duration"] = 1, -- The Duration of the Cutscene
	    ["EasingStyle"] = Enum.EasingStyle.Quad, -- The EasingStyle of the Cutscene
	    ["EasingDirection"] = Enum.EasingDirection.In -- The EasingDirection of the Cutscene
	},
	
	[2] = { -- Section 2 of the Cutscene
	    ["Position"] = workspace.Cam.CFrame, -- Using part's CFrame is recommended
        ["Duration"] = 5,
	    ["EasingStyle"] = Enum.EasingStyle.Quad,
	    ["EasingDirection"] = Enum.EasingDirection.In
	}
}

That will create a Table of Cutscene data! But wait, why is there 2 tables under the CutsceneData Table? Actually, that’s one of the greatest feature of this Module! You can create Cutscene Sections! You can see that there are 2 dictionaries under the table, each represents a Section, after the first Section has ran, the second one will Play without Stopping!

Still don't get what does section means? Click here

A cutscene section is simply a part of a Cutscene, let’s say there is a Cutscene that moves the Camera from the Player to Part B, then moving to Part C, then the process where the Camera moves from the Player to Part B is the first section of the Cutscene. And the process where the Camera moves from Part B to Part C is the second section of the Cutscene

Now we got the Cutscene Data ready, let’s Create a Cutscene using the Data! We’ll use CreateCutscene() to do this.

local EasyCutscenes = require(game.ServerStorage:WaitForChild("EasyCutscenes"))

local cutscene = EasyCutscenes:CreateCutscene(cutsceneInfo)

We will have to create a variable as the function returns a formatted table consisting of the cutscene data. Now that we’ve created the Cutscene, let’s try to Play it!

local EasyCutscenes = require(game.ServerStorage:WaitForChild("EasyCutscenes"))

local cutscene = EasyCutscenes:CreateCutscene(cutsceneInfo)

task.wait(5)

local currentPlayers = game.Players:GetChildren() -- This will represent all players in the game
EasyCutscenes:RunCutscene(currentPlayers, cutscene)

And it should run successfully, like this

Dont ask me why the video is bad

Why should I use this Module?

  1. You can Manage cutscenes much more easier and neat and you can do all that stuff simply in the Server-Side but not in the Cilent-Side

  2. By using this Module, you can write fewer code to create a cutscene, which is great, isnt it?

API Refrence

module:CreateCutscene()

This will return a formatted table consisting of the data for a Cutscene, as long as a proper CutsceneInfo table is provided as a parameter when trying to run the function. If a part of the data is not provided, such as EasingStyle, then the module will automatically take Linear as it’s EasingStyle

This is a simple Demonstration :

local cutscene = EasyCutscenes:CreateCutscene(cutsceneInfo) -- Make sure you have written the cutsceneInfo Table first

module:RunCutscene()

This Plays a created cutscene for some players, it requires a table of players as its first parameter, and a result from module:CreateCutscene() as its second parameter

Here is a simple Demonstration :

local currentPlayers = game.Players:GetChildren() -- This will represent all players in the game
EasyCutscenes:RunCutscene(currentPlayers, cutscene) -- Make sure you have a Variable containing the result

Note : The Module is still in Beta so Bugs should be expected, you may report it in the comments if you found one!

And that is all, happy coding! And I hope you will love this Module!
If you have a feedback, leave it in the comments!


Love this Module? Is it useful? (Please only vote after using it)


  • Yes
  • Kinda
  • No

0 voters

5 Likes

But if it is on the server side, then all the players will see it, if you really need to show it to all the players, just replicate it to all of them on the client. And it could be more flexible seeing that you could activate it for a specific player, or replicate it to all of the players.

1 Like

But that is what the Module do! It will Play the cutscene for a specific group of Players, just modify the first parameter for RunCutscene() and it will work properly

Oh right, thank you!

charlimit

1 Like

Everyone the Module is now able to be installed through Roblox Marketplace, I litterally just forgot to do that lmao :smiling_face_with_tear:

can the cut scene be trigger by a player touching a part or being in a zone, and then stopping the player from moving, while the cutscene is playing?

1 Like

I would consider using this if it had support for a cutscene based on a dynamically positioned scene that way I could build cutscenes into a model and place them in a procedurally generated map.
Until then I’ll have to continue using the ancient CloneTroop1019 tool with my patch for this specific capability. You are welcome to check it out and see if there is anything useful to consider for your module!

Optimized CloneTrooper1019 Cutscene Script (Offset Cutscene, Frame Buffer Cache, Cutscene Cache, Smooth Transition, Forward Reverse Looping) - Resources / Community Resources - Developer Forum | Roblox

Surely yes! You can firstly create the cutscene on the Server-Side (ServerScript), then use a bindable event (or you can create the cutscene within the KillBrick as well) to trigger the script when a certain player touched a part, send the data of which player touched the part (GetPlayerFromCharacter()) to the script containing the data, then run the cutscene for the player by using {PlayerWhoTouched}, that should do the job properly.

There are still a few alternatives, though.

  1. Just build the cutscene inside the script of which you want to detect when the player touched the part

  2. Use a BindableFunction to get the cutscene table from the script that you used to create the cutscene

Last but not least, use Character.Humanoid.WalkSpeed = 0

1 Like

I can’t understand what you meant, could you explain more?

Say you want to have a dynamic scene starting position. Like say a cutscene that display a character talking that has a dynamic starting position of the character.

The module will always tween the camera from its original position to the End Position

You asked me what I’m talking about I told you. I demonstrate on how to do it in the link. It’s actually not hard to implement. But that is the reason I do not find this module useful for me.

Ok. So I guess you mean the cutscene should start at a specific position?