Release Notes for 496

Notes for Release 496


Client Difference Log

API Changes

Added Class EulerRotationCurve : Instance
	Added Property Enum.RotationOrder EulerRotationCurve.RotationOrder
	Added Function Array EulerRotationCurve:GetAnglesAtTime(float time)
	Added Function CFrame EulerRotationCurve:GetRotationAtTime(float time)
	Added Function FloatCurve EulerRotationCurve:X()
	Added Function FloatCurve EulerRotationCurve:Y()
	Added Function FloatCurve EulerRotationCurve:Z()

Added Class FloatCurve : Instance
	Added Property int FloatCurve.Length [ReadOnly]
	Added Function FloatCurveKey FloatCurve:GetKeyAtIndex(int index)
	Added Function Array FloatCurve:GetKeyIndicesAtTime(float time)
	Added Function Array FloatCurve:GetKeys()
	Added Function float? FloatCurve:GetValueAtTime(float time)
	Added Function Array FloatCurve:InsertKey(FloatCurveKey key)
	Added Function int FloatCurve:RemoveKeyAtIndex(int startingIndex, int count = 1)
	Added Function int FloatCurve:SetKeys(Array keys)

Added Class TextChannel : Instance
Added Class TextChatService : Instance [NotCreatable] [Service] [NotReplicated]
Added Class TextSource : Instance

Added Class Vector3Curve : Instance
	Added Function Array Vector3Curve:GetValueAtTime(float time)
	Added Function FloatCurve Vector3Curve:X()
	Added Function FloatCurve Vector3Curve:Y()
	Added Function FloatCurve Vector3Curve:Z()

Added Property string CommandInstance.DisplayName [<📁> LoadOnly] [NotReplicated]
Added Property Vector2 ImageButton.ContentImageSize {RobloxScriptSecurity} [Hidden] [ReadOnly]
Added Property Vector2 ImageLabel.ContentImageSize {RobloxScriptSecurity} [Hidden] [ReadOnly]
Added Property bool ImporterRootSettings.MergeMeshes

Added Function void AssetManagerService:CreateAlias(int assetType, int64 assetId, string aliasName) {RobloxScriptSecurity} [Yields]
Added Function bool AvatarEditorService:NoPromptRenameOutfit(int64 outfitId, string name) {RobloxScriptSecurity}
Added Function void AvatarEditorService:PerformRenameOutfit(string name) {RobloxScriptSecurity}
Added Function void AvatarEditorService:PromptRenameOutfit(int64 outfitId)
Added Function void AvatarEditorService:SignalRenameOutfitFailed() {RobloxScriptSecurity}
Added Function void AvatarEditorService:SignalRenameOutfitPermissionDenied() {RobloxScriptSecurity}
Added Function void CommandInstance:EnableGuiAccess(string displayName, string statusTip, string defaultShortcut) {RobloxScriptSecurity}
Added Function void ImageButton:SetEnableContentImageSizeChangedEvents(bool enabled) {RobloxScriptSecurity}
Added Function void ImageLabel:SetEnableContentImageSizeChangedEvents(bool enabled) {RobloxScriptSecurity}

Added Event AssetManagerService.AssetImportedSignal(int assetType, int64 assetId, string assetName) {RobloxScriptSecurity}
Added Event AvatarEditorService.OpenPromptRenameOutfit(int64 outfitId) {RobloxScriptSecurity}
Added Event AvatarEditorService.PromptRenameOutfitCompleted(Enum.AvatarPromptResult result)

Added Enum KeyInterpolationMode
	Added EnumItem KeyInterpolationMode.Constant : 0
	Added EnumItem KeyInterpolationMode.Linear : 1
	Added EnumItem KeyInterpolationMode.Cubic : 2

Added Enum RotationOrder
	Added EnumItem RotationOrder.XYZ : 0
	Added EnumItem RotationOrder.XZY : 1
	Added EnumItem RotationOrder.YZX : 2
	Added EnumItem RotationOrder.YXZ : 3
	Added EnumItem RotationOrder.ZXY : 4
	Added EnumItem RotationOrder.ZYX : 5

Added Tag [ReadOnly] to Property CommandInstance.DefaultShortcut

Changed the serialization of Property CommandInstance.DefaultShortcut 
	from: [<📁> LoadOnly]
	  to: [<🕒> RuntimeOnly]

Changed the thread safety, security, serialization and category of Property ScrollingFrame.AbsoluteCanvasSize 
	from: {🧬Safe} {RobloxScriptSecurity} [<🕒> RuntimeOnly] "Debugging"
	  to: {🧬Unsafe} {None} [<💾> SaveOnly] "Scrolling"

Changed the parameters of Function CommandService:RegisterCommand 
	from: (Plugin plugin, string name, string description)
	  to: (Plugin plugin, string name, string context, Enum.CommandPermission permission = "LocalUser")

Changed the parameters of Function DebuggerConnection:AddBreakpoint 
	from: (Instance script, int line, Instance breakpoint)
	  to: (ScriptRef script, int line, Breakpoint breakpoint)

Changed the parameters of Function DebuggerConnection:GetSource 
	from: (Instance scriptRef, Function status)
	  to: (ScriptRef scriptRef, Function status)

Changed the parameters of Function DebuggerConnection:RemoveBreakpoint 
	from: (Instance breakpoint)
	  to: (Breakpoint breakpoint)

Changed the parameters of Function DebuggerConnectionManager:ConnectLocal 
	from: (Instance dataModel)
	  to: (DataModel dataModel)

Changed the parameters of Function DebuggerConnectionManager:FocusConnection 
	from: (Instance connection)
	  to: (DebuggerConnection connection)

Changed the return-type of Function DebuggerVariable:GetVariableByIndex 
	from: Instance
	  to: DebuggerVariable

Changed the return-type of Function DebuggerVariable:GetVariableByName 
	from: Instance
	  to: DebuggerVariable

Changed the parameters of Event DebuggerConnection.BreakpointAdded 
	from: (Instance breakpoint)
	  to: (Breakpoint breakpoint)

Changed the parameters of Event DebuggerConnection.BreakpointChanged 
	from: (Instance breakpoint)
	  to: (Breakpoint breakpoint)

Changed the parameters of Event DebuggerConnection.BreakpointRemoved 
	from: (Instance breakpoint, Enum.BreakpointRemoveReason reason)
	  to: (Breakpoint breakpoint, Enum.BreakpointRemoveReason reason)

Changed the parameters of Event DebuggerConnection.Paused 
	from: (Instance pausedState, Enum.DebuggerPauseReason reason)
	  to: (PausedState pausedState, Enum.DebuggerPauseReason reason)

Changed the parameters of Event DebuggerConnection.Resumed 
	from: (Instance pausedState)
	  to: (PausedState pausedState)

Changed the parameters of Event DebuggerConnectionManager.ConnectionEnded 
	from: (Instance connection, Enum.DebuggerEndReason reason)
	  to: (DebuggerConnection connection, Enum.DebuggerEndReason reason)

Changed the parameters of Event DebuggerConnectionManager.ConnectionStarted 
	from: (Instance connection)
	  to: (DebuggerConnection connection)

Changed the parameters of Event DebuggerConnectionManager.FocusChanged 
	from: (Instance connection)
	  to: (DebuggerConnection connection)

Removed Property CommandInstance.Text
Removed Property ImporterRootSettings.FlattenAll

Removed Tag [Hidden] from Property ScrollingFrame.AbsoluteCanvasSize
Removed Tag [NotReplicated] from Property CommandInstance.DefaultShortcut

(Click here for a syntax highlighted version!)


ok but can we get an @metatable keyword or similar to strictly denote a table type with a metatable.

type Cat = {
  ["@metatable"] = {
    index: (Cat, any, any) -> any
type Cat = typeof(setmetatable({},{__index=(nil::any)::(Cat,any)->any}))

This is a way to define Cat as an empty table with an index metamethod that takes any and returns any. Not sure why you made index take 3 arguments, are you thinking of newindex?

type Cat = typeof(setmetatable({},{__index=(nil::any)::(Cat,any)->any}))
local x:Cat = setmetatable({},{__index=function(_:Cat,v:any)return v end})
-- no warnings

The syntax you use there also conflicts with the normal syntax {[T]:v}, and using = is weird in that context


This update is packed full of neat stuff.

This is something I’ve wanted for ages, and makes a lot of UI-related calculations much simpler when it comes to ScrollingFrames.

Both of these were previously mentioned in release notes, and, I’m super excited to see them improving. The impacts this will have on some of my OOP code is likely going to be pretty noticeable!

These sound extremely interesting, and, I’m very curious about them. Interestingly, Vector3Curve and FloatCurve are Instances, not datatypes, however, FloatCurveKey is a datatype and accepts two numbers and an Enum called Enum.KeyInterpolationMode according to its type info.


If I’m interpreting this right, will I be able to get an animation ID without having to leave studio? Right now I have to click a link and copy an ID from my browser, which is really inefficient. If this is correct, then man I am happy. Workflow: improved!


Sorry to be a thorn in your side again. I’m really close to releasing my latest game, but unfortunately this bug is still happening on mobile devices even with the workaround I’m using, and as a result all of the characters have demon eyes at certain camera angles on mobile.

Is there any chance you can give an update on this or tell me what the flag is called that hasn’t been turned on yet (i.e. something that can be tracked via I want the launch to be smooth, and I want mobile users to have a consistent experience and a good first impression playing my game.

1 Like

Flag will be turned on Monday.

Bonus explanation: The reason that this bug was so subtle is that it derives from stable vs non-stable sorting. The things to be rendered are sorted in multiple ways to get the final order. std::sort is stable for arrays of less than 32 things, so only in very complex edge cases where there were a lot of objects in the block of things to render the non-stability of the larger sort clobbered the decal order that came from an earlier sort on Z-index.