VFX Scripter Pro — an essential plugin for VFX scripters

VFX Scripter Pro is a useful lightweight plugin that I created to help you easily visualize and script VFX without having to run or play the game in Roblox Studio.

Features :star:

  • Real-time scripting :scroll:
  • Restore objects to their original state :leftwards_arrow_with_hook:
  • Instant visualization :eye:
  • Looped mode :repeat:
  • Selective physics :zap:
  • Play Animations :man_running:
  • Save/Load scripts :package:

Examples :white_check_mark:

Bomb

46be9e7f4d5a844d12197d77435438a1

Goku

fc07715cc4eef3703171a3fc971c2547

Sword Slash

c07e1fe87133549519afe50ffc985f39

Animation (using the physics beta feature)

8173ee18d6b9762a88856d022ff15683

Updates :exclamation:

v1.1.0
v1.2.0
v.1.2.1
v1.3.0

Usage :wrench:

The plugin is fairly simple to use. You can either check out the short YouTube tutorials I made if you’re in a hurry, or read the following for detailed instructions. It is highly recommended to read the latter to prevent issues from happening in your studio. Consider the YouTube tutorials a quick showcase.

Quick Showcase Tutorial

https://youtu.be/TwxrN-hb3jc

Sword Slash Tutorial

https://www.youtube.com/watch?v=MxdQFUJ68Fo

Detailed instructions (recommended)

As said before, this plugin helps you script VFX or mostly anything similar. The way that it works is that you select one or more objects to restore after you are done testing your script.


Selection

After installing and opening the plugin, you should see the widget with a bunch of options. In the MAIN page, under the Selection section, you can select the objects that need to be restored after testing your code. Internally, the plugin will clone the objects and change the parents of the original objects elsewhere to “keep them safe”.

To add one or more objects to restore, select these objects in your workspace or explorer, and then hit “Add Selection”

Note: if you are trying to add nested objects like the screenshot below, the plugin will only take the highest objects in the hierarchy (in this case PartA).

afbeelding

To clear the list of objects to restore, simply hit “Clear Object(s)”


Scripting

Great, we know have the objects that we want to code in our script. We can now go to the SCRIPT page, and choose to “Create Code”. Now, it should look like something like this:

afbeelding

Creating And Writing Code

Obviously, we would want to edit this code, and the only way we can do that is by hitting “Edit”. This will open a new Script where you can edit the code to your desires. You will notice that there is a VspLib variable (short for VFX Scripter Pro Library). It is strongly recommended to use this when attempting to get any of the objects we put in the list. It’s safer and clearly easier to work with. We can use VspLib.GetInstance(Name) to get the object with a specific name from our list of selected objects. We can also use VspLib.GetAllInstances() to get all the objects from our list.

VspLib.GetInstance(Name) Example

Imagine we have these objects that we want to restore:

afbeelding

If we want to get “PartC” for example, we can use the following lines of code:

local VspLib = require(script.VspLib)
local PartC = VspLib.GetInstance("PartC")

The only downside of VspLib.GetInstance is that it will not detect the actual object’s class. We can partially solve this problem by defining the type like this:

local VspLib = require(script.VspLib)
local PartC: Part = VspLib.GetInstance("PartC")

VspLib.GetAllInstances() Example

Imagine we have this list of Parts that we want to restore:

afbeelding

We can change the BrickColor of all of these Parts by using VspLib.GetAllInstances() in a for loop like this:

local VspLib = require(script.VspLib)

for _, Part in VspLib.GetAllInstances() do
	if Part:IsA("BasePart") then -- Just in case there's a non-Part in the list.
		Part.BrickColor = BrickColor.Random()
	end
end

Additionally, the VspLib variable will be treated as a global at runtime. Internally, the plugin will remove that variable, and replace it with the actual VspLib. So changing the variable name will not reference to the actual VspLib. In simpler terms, do not change that line of code if you want to use VspLib. It is simply there at the time of editing to provide auto-completion.


:warning: Creating Connections (IMPORTANT!)

The plugin does not actually disconnect any connections. It is the responsibility of the user of the plugin to use the VspLib.AddConnection() function to have these connections properly disconnected. If you do not do this, these connections will stay connected forever and may cause lag and/or other issues in your Studio. The following code will show you how to add a connection:

local VspLib = require(script.VspLib)

local RunService = game:GetService("RunService")

VspLib.AddConnection(RunService.RenderStepped:Connect(function()
	print("Hey!")
end))

Note: the same applies for :Once().

Note: the plugin will try to clean up for you, but it won’t work 100% of the time!


Creating Code From An Existing Script

There’s also an option to create new code in the plugin by using an existing script. This option will simply copy the code from the selected script in the explorer. It will not write to it.

Clearing Code

To clear code, simply hit “Clear Code”. This action is not reversible, and does not save your code. If you wish to save your code, make use of the Script Library.


Playback

Once we are done writing code for our VFX (or whatever you wrote code for), we can actually run the code in Studio without having to play the game at all.

afbeelding

There are two modes in the playback section: you can either loop it or not. You can simply tick the “Looped” checkbox to change the mode. Using the looped mode, you can change the interval between each run by using the “Interval” slider. This can go from nearly an instant to ten seconds.

Now finally, we can play the code by pressing “Play”. The moment you press that button again, it will stop the playback, destroy the clones, and bring your objects from your list back to their original parent.

Physics

There’s also an option to use physics. It is recommended to not use this feature in your main project to prevent issues from happening. You can control the physics speed by simply using the slider below the physics button. You can access the physics speed in the script by using VspLib.GetPhysicsSpeed()

Scripting in real-time

It is possible to script in real-time. Simply use the looped playback mode and set the desired interval. Then you can script and see the results instantly (if your interval is small enough). Make sure your code is safe enough to be ran in real-time. The wrong typo could cause permanent damage in your Studio. Therefore this should NOT be used in your main project.


Credits :heart:

UI Library - @something786


Feedback :loudspeaker:

This is my first ever serious plugin. Please share feedback for future reference and share anything you have made with this plugin. I am happy to answer questions! :smiley:

Would you use this plugin?

  • Yes!!!
  • No, I don’t understand it / it’s too confusing.
  • No, it’s missing something.
  • No, I don’t need it.

0 voters

41 Likes

It seems like it’s not available in the store yet, if it’s just me you can ignore it.

4 Likes

It’s not just you. Roblox is currently reviewing the plugin. It should be available out soon. I will send an update as soon as it is public! Thanks for the concern!

4 Likes

awesome module/plugin! , drop the open sourced place of the bomb and sword slash rn!!

2 Likes

Can you manually share the asset with me so I can test it? It’s privated or under review right now

3 Likes

The plugin still seems to be under review. I am very sorry for the delay. I am very infuriated with Roblox’s poor asset moderation. The plugin uses loadstring to run user generated code, and Roblox’s automated moderation system detects this as a red flag. I assure you it’s a false positive though. If the plugin does not get accepted soon, I might send you a copy of the plugin instead. :wink:

4 Likes

Oh I’m stupid, I thought you could share plugins with roblox because it said this:
image

haha

4 Likes

It’s under review an I really want to use this

3 Likes

Thanks for using my gui library, this looks awesome! Hope it comes out of review soon.

4 Likes

Your GUI Library was a pleasure to work with! :slight_smile:

5 Likes

Hey everyone, I have updated the plugin and is public now! You should be able to get the plugin now. Along with this good news, I have also made some big changes to the plugin!


:confetti_ball: Introducing VFX Scripter Pro v1.1.0 :confetti_ball:

New Features :star:

  • Remove specific objects from your selection! :boom:
  • Apply physics on your selection of objects! (BETA) :zap:
  • Restore objects after crashing / accidentally closing Roblox Studio! :adhesive_bandage:
  • Change the loop interval at anytime. :hourglass:

Selective Physics Preview :zap:

057b890064caa3c11d0297a72b418f87
Note: the Part falls through the Baseplate because the Baseplate is not added to the selection.

Upcoming Features :star2:

  • Save/Load code.
  • More useful functions added to the VspLib.

Feedback :loudspeaker:

The plugin is new and could use some more features to optimize your workflow. So make sure to share your feedback with me! To gather as much feedback as possible, I will be making the plugin FREE!

1 Like

@InKrnl @TimeFrenzied @maxsterman09 I know you guys really wanted this plugin, so here you are!!

2 Likes

Looks useful for more than vfx, it works with animations right? Can I have one of the example files to see it without making stuff rq

If it works with animations, is it that thing that loads animations without publishing them or normal LoadAnim

1 Like

I haven’t tried it with animations yet. I feel like it should work with animations if you enable physics.

I haven’t saved most of the example files. So, is there any particular example you need?

2 Likes

It would be useful to see the goku one since it looks like most of the stuff people would actually use the plugin for haha, but any of them will do

1 Like

Isn’t this what you said to do? Or do you mean that you can’t add nested instances (part inside a part / descendant), it might be cool if you change the wording here if so

1 Like

Ah okay, perfect. That’s one example I did save :laughing:

Goku.rbxl (142.2 KB)

In order to use it:

  1. Add all the objects under “vfx stuff” in the workspace to the object list in the plugin
  2. Go to the SCRIPT page and select the VFX Script in the workspace, and hit “Create Code From Script”

(I also did one quick update on the plugin, in case you need to update)

3 Likes

This is something the plugin will do on its own. So don’t worry about it.

2 Likes

image
yeah ty

image
I think I’m supposed to add these as selections (except baseplate) but idk if I’m doing it wrong because it’s greyed out

1 Like

Check out the edit I made on my previous reply. :wink:

2 Likes