Vector3Curve does not work correctly after update.
Here is a video describing the issue:
What it looks after you guys broke something:
What it should look like:
The code which i never modified:
--returns a cframe for each frame (60 fps default), until the last Time argument, which is inside the positions.
orders.createBezierCurve = function(positions: table, TweenProperties: {EasingStyle: Enum.EasingStyle, EasingDirection: Enum.EasingDirection}, FRAME_RATE): {CFrame}
local curve = Instance.new("Vector3Curve")
local curveX, curveY, curveZ = curve:X(), curve:Y(), curve:Z()
for _, FloatCurveKeyProperties: {Time: number, Position: Vector3 | () -> any, Interpolation: Enum.KeyInterpolationMode?} in pairs(positions) do
local position = type(FloatCurveKeyProperties.Position) == "function" and FloatCurveKeyProperties.Position() or FloatCurveKeyProperties.Position
curveX:InsertKey(FloatCurveKey.new(FloatCurveKeyProperties.Time, position.X, FloatCurveKeyProperties.Interpolation or Enum.KeyInterpolationMode.Cubic))
curveY:InsertKey(FloatCurveKey.new(FloatCurveKeyProperties.Time, position.Y, FloatCurveKeyProperties.Interpolation or Enum.KeyInterpolationMode.Cubic))
curveZ:InsertKey(FloatCurveKey.new(FloatCurveKeyProperties.Time, position.Z, FloatCurveKeyProperties.Interpolation or Enum.KeyInterpolationMode.Cubic))
end
local BezierCFrames = {}
local PathTime = positions[#positions].Time
--bullets must contain atleast 2 positions, in this case it is BezierCFrames[0], BezierCFrames[1]
local lastFrame = math.max(math.floor(PathTime * FRAME_RATE), 1)
for frame = 1, lastFrame do
local TimeWithTween = TweenService:GetValue(frame / lastFrame, TweenProperties.EasingStyle, TweenProperties.EasingDirection)
BezierCFrames[frame] = CFrame.new(Vector3.new(table.unpack(curve:GetValueAtTime(TimeWithTween * PathTime))))
end
--does not equal to BezierCFrames[1]! 0 is beginning, 1 is 1 / lastFrame!
BezierCFrames[0] = CFrame.new(positions[1].Position)
return BezierCFrames
end
skillPath[#skillPath + 1] = {Time = (skillPath[#skillPath].Time or 0) + lastToCheckpointTime, Position = Vector3.new(0, 1000, 0)}
skillPath[#skillPath + 1] = {Time = skillPath[#skillPath].Time + checkpointToSpawnTime, Position = spawnpoint.Position}
bindableFolder.OrderHandler:Fire("Bezier", "new", {Name = player.Name, Parent = workspace},
{StartedAt = workspace:GetServerTimeNow(), BulletFps = information.CurrentFrameRate < 60 and 60 or nil, OverrideBulletFps = true, UID = HttpService:GenerateGUID(false), SkillPath = skillPath, EasingStyle = Enum.EasingStyle.Sine, EasingDirection = Enum.EasingDirection.In},
{HasSlope = true}
)
My skill path does not include any Interpolation index, so it is Cubic. I also never modified it. After near update, Vector3Curve fails to create bezier curves. It was working fine yesterday. It seems previous positions have no effect on the path between anymore.
this is not a cubic bezier path… And it is totally different than what it was. Paths got incredibly sharp after you guys updated roblox (08.15.2025). My players also reported this.

