Release Notes for 479

Notes for Release 479


Client Difference Log

API Changes

Added Class VoiceSource : Instance [NotCreatable] [Preliminary]
	Added Property int64 VoiceSource.UserId [ReadOnly] [Preliminary]

Added Property Enum<VirtualCursorMode> StarterGui.VirtualCursorMode [NotScriptable]

Added Function void Player:SetCharacterAppearanceJson(string jsonBlob) {RobloxScriptSecurity}
Added Function void StudioService:RequestClose(Enum<StudioCloseMode> closeMode) {RobloxScriptSecurity}
Added Function void VirtualInputManager:SetInputTypesToIgnore(Variant inputTypesToIgnore) {RobloxScriptSecurity}
Added Function void VirtualInputManager:SetViewportSize(Vector2 sizePx) {RobloxScriptSecurity}
Added Function void VirtualInputManager:StartPlayingJSON(string string) {RobloxScriptSecurity}
Added Function void VirtualInputManager:StopPlaying() {RobloxScriptSecurity}

Added Enum ProductLocationRestriction
	Added EnumItem ProductLocationRestriction.AvatarShop : 0
	Added EnumItem ProductLocationRestriction.AllowedGames : 1
	Added EnumItem ProductLocationRestriction.AllGames : 2

Added Enum StudioCloseMode
	Added EnumItem StudioCloseMode.None : 0
	Added EnumItem StudioCloseMode.CloseStudio : 1
	Added EnumItem StudioCloseMode.CloseDoc : 2

Added Enum VirtualCursorMode
	Added EnumItem VirtualCursorMode.Default : 0
	Added EnumItem VirtualCursorMode.Disabled : 1
	Added EnumItem VirtualCursorMode.Enabled : 2

Changed the parameters of Function StudioService:ShowSaveOrPublishPlaceToRoblox 
	from: (bool showGameSelect, bool isPublish, bool closeAfterSave)
	  to: (bool showGameSelect, bool isPublish, Enum<StudioCloseMode> closeMode)

Changed the parameters of Event StudioService.OnSaveOrPublishPlaceToRoblox 
	from: (bool showGameSelect, bool isPublish, bool closeAfterSave)
	  to: (bool showGameSelect, bool isPublish, Enum<StudioCloseMode> closeMode)

Removed Property NetworkSettings.ExtraMemoryUsed

Removed Function StudioService:RequestCloseStudio

(Click here for a syntax highlighted version!)


Interesting. So will this work the same as :IsA() where you can simply check if an object is an EnumItem, or will it be for checking if an EnumItem belongs to a specific Enum, e.g. object:IsA("SurfaceType")?


If the object isn’t an EnumItem (or technically an Instance) it won’t have this function therefore attempting to use this to check if something is an EnumItem in this way would fail. typeof is what you’d want to use, just like you do with Instances already.

This is definitely to check if an EnumItem is a part of a specific Enum. It might be that there are plans to create an Enum hierarchy (like the Instance heirarchy), which would make this a necessary feature, though, I haven’t seen anything to suggest that yet, it may just be a QoL feature or a feature that benefits some CoreScripts or something. If that’s something that’s potentially being considered I’d expect there to also be a root class you can check for (e.g. enumItem:IsA("EnumItem") or enumItem:IsA("Enum") or something)

So, for example, I would assume Enum.Material.Plastic:IsA("Material") would return true.


That’s what I assumed this was for, and is an awesome move if they are planning on separating out Part and Terrain materials (specifically) into their own Enums. This alone would clean up my Find/Replace Materials plugin and make it much more user friendly, in a sense that it would no longer feature Terrain-exclusive materials.


They definitely won’t change the path of existing enums (e.g. Enum.Material.Plastic and Enum.Material.CrackedLava would have to stay the same for backwards compatability) but if they did do this, perhaps you could access materials like this:
Enum.Material.Terrain.CrackedLava vs Enum.Material.Part.Plastic

Not really sure, this probably will just be a QoL feature, it likely won’t mean anything too special, at least for the relevant future.

I do agree that having maybe “sub enums” would be really useful. Not really sure how they could/would implement a feature like that.


Perhaps for the sake of backwards-compatibility they would just add them as new Enums, but inherited from the older Enums, e.g. Enum.TerrainMaterial:IsA("Material") == true? That I could deal with, as I could simply filter out materials that don’t appear in both Enums.


In relation to the raycasts,

How long is long? :thinking:


(it was already possible to do this through fflags but yes finally)


It cuts some 4000+ stud raycast times in half, depending on how part-dense your game is and how your parts are positioned and sized.

This will be available in the Optimized Raycasts Studio beta feature next week:


This is equivalent to the use of EnumItem.EnumType in comparisons, which we will not recommend. We’ve added this method both for more uniformity between enum & instance hierarchy, and also because the type checker will recognize :IsA calls on EnumItems and correctly refine the type in the if branches.