Release Notes for 422

Notes for Release 422


Client Difference Log

API Changes

Added Class EventIngestService : Instance [NotCreatable] [Service]
	Added Function void EventIngestService:SendEventDeferred(string target, string eventContext, string eventName, Dictionary additionalArgs) {RobloxScriptSecurity}
	Added Function void EventIngestService:SendEventImmediately(string target, string eventContext, string eventName, Dictionary additionalArgs) {RobloxScriptSecurity}
	Added Function void EventIngestService:SetRBXEvent(string target, string eventContext, string eventName, Dictionary additionalArgs) {RobloxScriptSecurity}
	Added Function void EventIngestService:SetRBXEventStream(string target, string eventContext, string eventName, Dictionary additionalArgs) {RobloxScriptSecurity}

Added Class InternalSyncItem : Instance [NotReplicated]
	Added Property bool InternalSyncItem.Enabled {RobloxScriptSecurity} [NotReplicated]
	Added Property string InternalSyncItem.Path {RobloxScriptSecurity} [NotReplicated]
	Added Property Instance InternalSyncItem.Target {RobloxScriptSecurity} [<📁> LoadOnly] [NotReplicated]

Added Class InternalSyncService : Instance [NotCreatable] [Service] [NotReplicated]
Added Class LanguageService : Instance [NotCreatable] [Service] [NotReplicated]

Added Class SessionService : Instance [NotCreatable] [Service]
	Added Function int64 SessionService:GetCreatedTimestampUtcMs(string sid) {RobloxScriptSecurity}
	Added Function Variant SessionService:GetMetadata(string sid, string key) {RobloxScriptSecurity}
	Added Function string SessionService:GetRootSID() {RobloxScriptSecurity}
	Added Function void SessionService:RemoveMetadata(string sid, string key) {RobloxScriptSecurity}
	Added Function void SessionService:RemoveSession(string sid) {RobloxScriptSecurity}
	Added Function void SessionService:ReplaceSession(string sid, string tag) {RobloxScriptSecurity}
	Added Function void SessionService:SetMetadata(string sid, string key, Variant value) {RobloxScriptSecurity}
	Added Function void SessionService:SetSession(string parentSid, string childSid, string tag) {RobloxScriptSecurity}

Added Class SurfaceAppearance : Instance [Preliminary]
	Added Property Enum<AlphaMode> SurfaceAppearance.AlphaMode  [Preliminary]
	Added Property Content SurfaceAppearance.ColorMap {LocalUserSecurity} [Preliminary]
	Added Property Content SurfaceAppearance.MetalnessMap {LocalUserSecurity} [Preliminary]
	Added Property Content SurfaceAppearance.NormalMap {LocalUserSecurity} [Preliminary]
	Added Property Content SurfaceAppearance.RoughnessMap {LocalUserSecurity} [Preliminary]

Added Property bool Studio.PluginDebuggingEnabled
Added Property bool StudioService.DraggerSolveConstraints  [ReadOnly] [NotReplicated]
Added Property bool StudioService.ShowConstraintDetails  [ReadOnly] [NotReplicated]

Added Function Dictionary VideoFrame:GetInfo()

Added Enum AlphaMode
	Added EnumItem AlphaMode.Overlay : 0
	Added EnumItem AlphaMode.Transparency : 1

Added Tag [Deprecated] to Function Camera:GetLargestCutoffDistance
Added Tag [Deprecated] to Function Camera:Interpolate
Added Tag [Deprecated] to Function Camera:PanUnits
Added Tag [Deprecated] to Function Camera:TiltUnits

Added Tag [NotReplicated] to Class PluginDebugService

Changed the return-type of Function StudioService:GizmoRaycast 
	from: Tuple
	  to: RaycastResult

Changed the return-type of Function WorldRoot:Raycast 
	from: Tuple
	  to: RaycastResult

Removed Class DebuggablePlugin

(Click here for a syntax highlighted version!)



In all seriousness, this has potentially been my most anticipated feature (besides FiB phase 3) since it was shown off at RDC last year. IT’S FINALLY HERE!!!


What happened that these methods now deprecated?


The general direction is that eventually camera will just be reduced to a thin wrapper around a CFrame with some mathematical utility functions like on it, and any camera behavior will come from various scripts / modules which are tuned for particular use cases.


It looks like DraggerSolveConstraints is the Constraints button here
Why is detecting the Collisions button still part of the Plugin API?
Is there a way to detect Join Surfaces?

For ShowConstraintDetails, why is there only that, and not detecting the other options in the constraints tab (Show Welds, Draw On Top, Scale)?



The main usage of tween service is for visual (rendered) stuff which is now all gonna be a frame off. Not fun when the behavior of something you depend on is changed unexpectedly.


Also not to mention Stepped doesn’t fire while in edit mode so I’m fairly certain plugins utilizing TweenService won’t work anymore. I could be wrong on this, however.

Edit: Just tested this in studio and, as I thought, TweenService no longer works in edit mode. This has broken certain animations in certain plugins that I use.


Hi there, I noticed in the latest Studio release notes that TweenService was moved to RunService.Stepped from RunService.RenderStepped, and I was wondering whether there could be some clarification on why this change was made? I don’t see why TweenService shouldn’t stay in RenderStepped, but since it’s listed as an improvement I guess there is a good reason?


We’re aware that the placement of these properties is a bit of a mess. We are looking for a better long term solution, but we unfortunately need a few more of these properties in the interim.

We’re adding them one at a time as we need them. Draw On Top is coming, but I don’t think there’s any reasonable use case where you would need Show Welds, and we don’t need it right now. Ideally they would all just be exposed, but I don’t want to expose ones that aren’t strictly needed for something until we have a better solution than just dumping them into StudioService as a pile of properties.


Mind you this is purely speculative on my behalf.

Because TweenService was previously bound to RunService.RenderStepped, the movement of any BasePart instances was conducted directly prior to the rendering frame. This means that any modification to BaseParts were applied after the physics simulation had taken place, meaning that every visual frame would actually be lagging behind the physics simulation of the world interacting with said BasePart.

By moving to RunService.Stepped, physics can be calculated before the rendering frame, providing a smoother interaction between Tweened BaseParts and unanchored parts.


This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.