Sir this is illegal, this is the roblox engine. What uses do you have for this?
I could use this in my upcoming game! Seems pretty cool
I wanted to learn how to make my own VFX, so I created a fire loop:
I’ll definitely be making more sometime soon! Flipbooks are awesome!
how did you do that? i have been trying to make explosion flipbooks but have no idea how
Just finished this short demo for my ui plugin. I will be updating it regularly and the thread is on my profile.
This could take a while. I’m working on things little by little, like importing the animations into Roblox. But I could show some more things. Oh, I forgot to mention, I have a demo up for this right now you can play.
Does this will work well if droplet falls into cone-like surface, where the tip is the bottom? When I tried to do such thing myself, I had such issue.
“Kool-aid” lol.
Looks really good! You did great with it. It doesn’t seem to lag, so nice optimization.
You just have to get a software that can convert motion graphics into a PNG sequence. Then one that turns the sequence into a sprite sheet. There’s plenty of easy tutorials for it.
Just released the first proper update, introducing Data Logs and new creatures! As well as some neat touch ups and improvements!
there are also ikea aliens but you’ll need to find them first.
Also I’m posting the new icon, because I’m proud of it
[ psst… hey… if you click the icon above… it takes you to the game page… i thouht that was cool…! ]
It’s not made to work on 3d shapes, It’s only made to work on rectangular flat surfaces. The reason for this is for simplicity, but also I’d imagine it’d be a lot more performance heavy which is not worth it for such a minor effect.
Even with just parts it’s possible to make such shape.
___ ___
\ \ / /
\ \ / /
\__\/__/
(Hope you understood which one)
getting ready to migrate to unreal engine 5 due to a lack of linux support.
ripping my hair out trying to get a command widget working (i suck at everything)
Just made “void explosion trace” thingy to create decals on parts’ surfaces
Ngl I felt smart after finishing it, appears to be I still remember some math
I also drew this in paint to visualize a math problem lol, but it helps a lot actually
i was mainly asking how to make the particle / explosion, not how to turn it into a spritesheet
I spent 48 minutes clearing the first level. Felt like Aliens meet Doom Eternal. Keep us posted, this game is amazing!
Before I moved, I made a game icon for the game aswell
Now since I have no wifi, the game will be stalled for now.
porting gold source sprites as a part of my mapping kit of my upcoming game.
Half life sprites come with black backgrounds, as they are rendered with additive effect. This is a problem with roblox as you cant really edit how particles render in the engine
i take the original .spr file, convert, edit a proper transperancy in photoshop, then using a script automation i wrote, i slice and crop each individual frame at the click of a button and save as png.
for converting the pngs to flipbooks that roblox can use, i edited the contact sheet ii automation on photoshop. The original automation automatically resized frames to fit within cells and that lead to weird visual looks.
with my script, i keep the original size of the individual frames and, to also for overcoming roblox’s nonsensical flipbook restrictions, i repeat the sprites until all of the cells are filled for proper looking loops.
i’ve still got a lot of sprites to port, but taking time to script the automations will save me a lot more time for the upcoming ports.
editing the transperancy in ps
running the automation and converting to flipbook (seizure warning)
Improved the script and made it into a module, it’s officially called “CharEngine” now, not sure what other features i’ll add to it atm tho.
Here’s what it looks like (had to compress the first video ):
Source Code
local charEngine = {}
charEngine.__index = charEngine
charEngine.connections = {}
function charEngine:FadeInText(object, duration, properties, tweenInfo)
table.insert(charEngine.connections, task.spawn(coroutine.create(function()
if object and object:IsA("TextLabel") or object:IsA("TextButton") or object:IsA("TextBox") then
-- placeholder variables
local passedTweenInfo, fadeInTween
if tweenInfo and typeof(tweenInfo) == "TweenInfo" then
passedTweenInfo = TweenInfo.new(
tweenInfo.Time,
tweenInfo.EasingStyle,
tweenInfo.EasingDirection,
tweenInfo.RepeatCount,
tweenInfo.Reverses,
.075
)
else
passedTweenInfo = TweenInfo.new(.5, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out, 0, false, .075)
end
-- getting the text and text transparency.
local originalText = object.Text
local originalTextTransparency = object.TextTransparency
object.TextTransparency = 1
-- creating a folder inside the object's parent to store the individual characters.
local characterStorage = Instance.new("Folder", object.Parent)
characterStorage.Name = "CharacterStorage"
-- loops through each character in the text and makes a new UI text object to fade in.
for iteration = 1, #object.Text do
task.wait(duration)
local character = Instance.fromExisting(object)
character.Parent = characterStorage
character.RichText = true
character.BackgroundTransparency = 1
local originalProperties = {}
local scale
if properties then
for i, v in pairs(properties) do
pcall(function()
if i ~= "TextTransparency" and object[i] then
originalProperties[i] = object[i]
character[i] = v
end
end)
end
end
-- formula i came up with to get the individual characters.
if iteration == 1 then
character.Text =
originalText:sub(1,1)..
"<font transparency=\"1\">"..
originalText:sub(2,#originalText)..
"</font>"
else
character.Text =
"<font transparency=\"1\">"..
originalText:sub(1, iteration - 1)..
"</font>"..
originalText:sub(iteration, iteration)..
"<font transparency=\"1\">"..
originalText:sub(iteration + 1, #originalText)..
"</font>"
end
-- waits before playing the fade in tween so no weird issues occur.
fadeInTween = game:GetService("TweenService"):Create(
character,
passedTweenInfo,
{TextTransparency = originalTextTransparency}
)
fadeInTween:Play()
for i, v in pairs(originalProperties) do
game:GetService("TweenService"):Create(
character,
passedTweenInfo,
{[i] = v}
):Play()
end
end
for i, v in pairs(characterStorage:GetChildren()) do
table.insert(charEngine.connections, task.spawn(coroutine.create(function()
task.wait(fadeInTween.TweenInfo.Time * 1.325)
game:GetService("TweenService"):Create(
v,
passedTweenInfo,
{TextTransparency = 1}
):Play()
end)))
end
if fadeInTween then
fadeInTween.Completed:Wait()
end
local tween = game:GetService("TweenService"):Create(
object,
passedTweenInfo,
{TextTransparency = 0}
)
tween:Play()
tween.Completed:Wait()
task.wait(.125)
characterStorage:Destroy()
end
end)))
end
function charEngine:Destroy()
local interval = 1
for _, i in pairs(charEngine.connections) do
if typeof(i) == "RBXScriptConnection" then
i:Disconnect()
elseif typeof(i) == "thread" then
task.cancel(i)
coroutine.close(i)
end
charEngine.connections[interval] = nil
interval += 1
end
end
return charEngine
Examples
Basic
local CharEngine = require(workspace.CharEngine)
local properties = {
["AnchorPoint"] = Vector2.new(1, 1),
["Position"] = UDim2.fromScale(.75, .25),
["Rotation"] = -30
}
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out)
CharEngine:FadeInText(
game:GetService("StarterGui").Container.TextBox2, -- UI Text Object
.05, -- Duration Between Fade Ins
properties, -- Properties To Set Character To Before Fading Into Position
tweenInfo -- Tween Info
)
Multiple:
local CharEngine = require(workspace.CharEngine)
local rotation = math.random(-45, 45)
local properties = {
["AnchorPoint"] = Vector2.new(.5, .5),
["Position"] = UDim2.fromScale(.5, .5),
["Rotation"] = rotation
}
local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out)
rotation = math.random(-45, 45)
CharEngine:FadeInText(
game:GetService("StarterGui").Container.TextBox, -- UI Text Object
.05, -- Duration Between Fade Ins
properties, -- Properties To Set Character To Before Fading Into Position
tweenInfo -- Tween Info
)
rotation = math.random(-45, 45)
CharEngine:FadeInText(
game:GetService("StarterGui").Container.TextBox2,
.05,
properties,
tweenInfo
)
rotation = math.random(-45, 45)
CharEngine:FadeInText(
game:GetService("StarterGui").Container.TextBox3,
.05,
properties,
tweenInfo
)